From b65ace37de4f585b8089ad413ee877b792da11ca Mon Sep 17 00:00:00 2001 From: NotAPenguin Date: Sat, 3 Aug 2024 23:21:44 +0200 Subject: Waterline rework (#2577) * Add barebones PurificationPlant class * Make simple 3x3 structure to form purification plant * Add base purification unit class and dummy sifter unit MTE * Make sifter unit form * Fix accidental wildcard import * Implement basic linking of units to controller using data stick * Make linking more robust, save bidirectional links, add scanner output * add linking range, error message and unregister old controller when re-linking * Add link status of purification units to waila body * Disable maintenance issues on purification plant units * spotless * Check structure of linked purification units in main controller * Remove all star imports * Small refactor to avoid updating status from main controller * spotless * Attempt to document current code * Convert some comments to javadoc * Implement basic processing cycle, sync it with linked purification units * Make water purification plant drain power * Calculate power drain from active units and remove controller power drain * spotless * Add very barebones recipemap * Fix recipemap name in lang file * spotless * Fix purification unit recipemap name * spotless * more sane amount of max fluid outputs * add some item outputs to sifter unit * Very simple recipe processing, may be buggy * spotless * Implement recipe failure * Implement void protection for purification units * spotless * buff item output odds slightly * Add WIP grade 1 structure * spotless * Store base success chance in recipe metadata and display it in NEI * Fill sifter plant with water * Add comment * Allow construction sifter unit in survival * Implement water boost * Fix water boost allowing output chance to go over 100% * Implement failed recipes outputting lower tier water * Fix typo * Fix deformed purification unit still drawing power * Slightly refactor recipe check so base class can read result * Create empty ModularUI container for purification plant * The great gui struggle part 1 * More gui struggles, we have a button now * Adjust button text and size * gui wars: the rise of the sync * gui wars: a new hope * fix the sync * is pengu old enough to know exceeder? * Fix being able to link the same unit multiple times * Sync status string to client * Sign sifter with my name * Show status somewhat properly * Adjust sifter base chance and structure * Fully implement sifter unit * More tooltip refactoring * Add structure info to sifter tooltip. * nitpicking tooltips * Adding sound to Purification Plant Main Unit. * fix star imports * Add basic coagulator unit, add recipemap for it * Write coagulator tooltip * comma nitpicking * more tooltip work * small refactor to purification plant controller * start work on custom recipemap frontend * Fully implement coagulator * Update structure requirements in tooltips * Move controller text in structure tooltips to be consistent * fix NPE on world load * Add base ph adjustment unit MTE * Add info to main controller and energy hatch check * Fixing tooltip of Main Controller & Energy/Exotic Hatch check. * Create full pH adjustment structure * disallow any voiding on purification unit * Small custom RecipeMap frontend for ph adjustment * Generate random initial pH value * Implement inserting NaOH and HCl to adjust pH * Add easter egg * Implement pH sensor hatch * Properly consume HCl and round pH value to 2 digits * Write ph adjustment unit tooltip * Tooltip nitpicking * Try to fix some structurelib hints * More trying to fix hints * Add industrial strength concrete casing block * Add water loop sound to the game * Document random initial pH in tooltip * Add glass material base * Fix spotless formatting in Textures docs because I cannot take it anymore * Add glass texture * Try adding transparent glass * Transparent glass working * Create pH resistant glass and update pH structure to use it * Create full structure for main purification plant * Create custom water purification casing block * Properly balance ferrous wastewater reprocessing and reduce input by a factor 10 * Add pH factor to NEI tooltip and fix coagulator structure * Structure tooltip for Purification Plant base * Add GT_Block_Glass2 and properly set maxMeta * Add Tinted Industrial Glass blocks * Fix BlockCasing9 not showing custom tooltip * Register tinted glass as EV glass * Add sterile water plant casing and revert tooltip change * Mention required water in sifter tooltip * Add more textures and casings * Add more textures, sounds and add structure info for pH adjustment * Rename sifter unit to clarifier * Rename coagulation unit to flocculation unit * Add activated carbon line * Fix unintended activated carbon recipe * Add activated carbon filter * Add polyaluminium chloride + solution * Add new custom textures by @BlueHero233 * Wip recipe page with new background for flocculation * Fix flocculation background image mostly * Finally aligned the slots * angery mumbles * Finish flocculation recipe page * All the recipe pages! * Add new reworked textures * Fix ph adjustment being t3 instead of t4 * Fix invisible casing * apply chembalance to polyaluminium chloride properly * Fix ferrous wastewater -> flocculation waste liquid * Move flocculation to grade 3 * create ozonation unit with placeholder blocks * add new blocks for ozonation with placeholder textures * Add water to ozonation structure * Create ozone gas material * Add ozone recipe * Add textures for ozone unit * Add sound loop for ozonation * fix * implement ozonation mechanics * Finalize ozonation tooltip * Create dummy plasma heater multi * Update textures for plasma heater * Add grade 5 recipemap * Add hatches to plasma heater multi * Add basic plasma heating unit variables * Implement plasma heating unit mechanics * Add plasma heater tooltip * Add structure info to plasma heater tooltip * fix ozonation tooltip, add frontend * Fix positioning on ozonation tooltip and fix plasma heater crash * Add UV treatment MTE and structure without textures * Revert accidental addition of debug dependencies * Add initial version of uv unit textures * update naquadria casing, add water color gradient * Some minor cleanup and added docs * Create lens housing bus * Add lens bus to UV treatment unit * Add lens indicator hatch * Merge GT_MetaGeneratedItem_03.java * Add lens indicator hatch * Add the lens cycle, uv treatment recipe map and fix eut of flocculation recipe * Implement lens swapping mechanic * Clean up first lens swap * Fix uv recipemap lang and move lens cycle to recipe * Write uv treatment tooltip * Add sounds for uv and plasma steps * Create empty degasifier class * Create temporary debug structure for degasifier * set temp casing index for degasifier * create degasifier control hatch * create slightly less temporary but still temporary structure for degasifier * Start impl of degasifier * fix fluid consumption and nbt loading of degasifier * Degasifier implementation should work now * Rename and reformat some things and start work on degasser tooltiop * give last bit much lower chance of being on to avoid cheesing * Finish degasifier tooltip * Integrate some deleno lore * hopefully fix all moved casing meta ids after merge * Create finalized degasser structure * Integrate more deleno lore * Add even more lore * Create placeholder particle catalysts and fetch particle items from gt++ * Fix wrong casing and recipemap localization * Create parallel config menu * refactor purification recipecheck slightly * implement parallel amount on water i/o and power * add tooltip info about parallel config * fix text * update block names in structure tooltips * create structure tooltip for degasser * create textureless quark catalyst items * add the purple glass * fix lore typos * fix some casing indices * remove concrete floor from water plant and reword tooltip * fix main plant structure and add placeholder structure for t8 step * fix structurecheck for main plant and add random catalyst generation for t8 * implement basic mechanics for particle extractor (wip) * Create plasma heater frontend * implement final mechanics and bugfixes for particle extractor * add recipes for re-aligning quark catalysts * add simple recipes for catalyst alignment * initial replacement of purified water in engraver recipes * add purified water to all wafer cutting recipes * fix purified water amounts * buff quark cyclotron recipe again * extract t8 unit casings into their own icons * Write initial tooltip for t8 module * add purified water to mask recipes * Add recipe comparator to show low tier purified water recipes first * add min casing check to waterline multis * buff ozone production * update t8 structure * make purified water optional again for naq wafers * Fix blockrenderer for purification plant * fix nei previews * fix nei * really fix nei this time * add t8 lore * fix hatch recipe locking blocking automation on some steps * try to solve weirdness with grade 3 recipe * fix issues with recipecheck * fix missing null check * make ph sensor use a strict inequality check * fix min casings on t5 * significantly nerf purified water usage for beamline masks * disable void protection for waterline * small adjustments to t6 unit * more small adjustments to t6 unit to prevent easy automation cheese * fix degasser redstone output and missing return statement * remove water QFT catalyst recipes --------- Co-authored-by: Tianyou Mei Co-authored-by: OlliedeLeeuw Co-authored-by: Ollie_de_Leeuw <154506304+OlliedeLeeuw@users.noreply.github.com> Co-authored-by: Martin Robertz --- src/main/java/gregtech/api/GregTech_API.java | 2 + src/main/java/gregtech/api/enums/GT_Values.java | 7 + src/main/java/gregtech/api/enums/ItemList.java | 47 +- src/main/java/gregtech/api/enums/Materials.java | 68 +- .../java/gregtech/api/enums/MetaTileEntityIDs.java | 13 + .../java/gregtech/api/enums/SoundResource.java | 6 + src/main/java/gregtech/api/enums/Textures.java | 26 +- .../gregtech/api/gui/modularui/GT_UITextures.java | 11 +- .../GT_MetaTileEntity_Hatch_InputBus.java | 17 +- src/main/java/gregtech/api/recipe/RecipeMaps.java | 95 +++ .../maps/PurificationUnitClarifierFrontend.java | 72 ++ .../maps/PurificationUnitFlocculatorFrontend.java | 99 +++ .../maps/PurificationUnitOzonationFrontend.java | 51 ++ .../maps/PurificationUnitPhAdjustmentFrontend.java | 79 ++ .../maps/PurificationUnitPlasmaHeaterFrontend.java | 59 ++ .../maps/PurificationUnitRecipeMapFrontend.java | 124 +++ .../metadata/PurificationPlantBaseChanceKey.java | 28 + .../java/gregtech/api/util/GT_RecipeConstants.java | 154 ++++ .../gregtech/common/blocks/GT_Block_Casings10.java | 4 + .../gregtech/common/blocks/GT_Block_Casings9.java | 51 +- .../gregtech/common/blocks/GT_Block_Glass1.java | 106 +++ .../blocks/GT_Block_TintedIndustrialGlass.java | 98 +++ .../gregtech/common/blocks/GT_Item_Casings9.java | 14 + .../gregtech/common/blocks/GT_Item_Glass1.java | 15 + .../blocks/GT_Item_TintedIndustrialGlass.java | 10 + .../gui/modularui/widget/TextButtonWidget.java | 57 ++ .../common/items/GT_MetaGenerated_Item_03.java | 65 ++ .../java/gregtech/common/items/ID_MetaItem_03.java | 9 + ...etaTileEntity_Hatch_DegasifierControlHatch.java | 122 +++ .../GT_MetaTileEntity_LensHousing.java | 52 ++ .../GT_MetaTileEntity_LensIndicator.java | 117 +++ .../GT_MetaTileEntity_PurificationPlant.java | 740 ++++++++++++++++++ .../GT_MetaTileEntity_PurificationUnitBase.java | 793 +++++++++++++++++++ ...T_MetaTileEntity_PurificationUnitClarifier.java | 333 ++++++++ ..._MetaTileEntity_PurificationUnitDegasifier.java | 838 +++++++++++++++++++++ ...etaTileEntity_PurificationUnitFlocculation.java | 496 ++++++++++++ ...T_MetaTileEntity_PurificationUnitOzonation.java | 299 ++++++++ ...leEntity_PurificationUnitParticleExtractor.java | 484 ++++++++++++ ...etaTileEntity_PurificationUnitPhAdjustment.java | 609 +++++++++++++++ ...etaTileEntity_PurificationUnitPlasmaHeater.java | 570 ++++++++++++++ ...MetaTileEntity_PurificationUnitUVTreatment.java | 524 +++++++++++++ .../purification/GT_MetaTileEntity_pHSensor.java | 196 +++++ .../multi/purification/LinkedPurificationUnit.java | 125 +++ .../PurificationPlantStructureString.java | 15 + .../multi/purification/PurificationUnitStatus.java | 14 + .../multi/purification/PurifiedWaterHelpers.java | 35 + .../multi/purification/UVTreatmentLensCycle.java | 39 + .../loaders/oreprocessing/ProcessingCrafting.java | 65 +- .../loaders/postload/GT_MachineRecipeLoader.java | 2 + .../postload/chains/GT_PurifiedWaterRecipes.java | 263 +++++++ .../loaders/postload/recipes/CuttingRecipes.java | 45 +- .../preload/GT_Loader_Item_Block_And_Fluid.java | 4 + .../preload/GT_Loader_MetaTileEntities.java | 89 ++- 53 files changed, 8199 insertions(+), 57 deletions(-) create mode 100644 src/main/java/gregtech/api/recipe/maps/PurificationUnitClarifierFrontend.java create mode 100644 src/main/java/gregtech/api/recipe/maps/PurificationUnitFlocculatorFrontend.java create mode 100644 src/main/java/gregtech/api/recipe/maps/PurificationUnitOzonationFrontend.java create mode 100644 src/main/java/gregtech/api/recipe/maps/PurificationUnitPhAdjustmentFrontend.java create mode 100644 src/main/java/gregtech/api/recipe/maps/PurificationUnitPlasmaHeaterFrontend.java create mode 100644 src/main/java/gregtech/api/recipe/maps/PurificationUnitRecipeMapFrontend.java create mode 100644 src/main/java/gregtech/api/recipe/metadata/PurificationPlantBaseChanceKey.java create mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Glass1.java create mode 100644 src/main/java/gregtech/common/blocks/GT_Block_TintedIndustrialGlass.java create mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Glass1.java create mode 100644 src/main/java/gregtech/common/blocks/GT_Item_TintedIndustrialGlass.java create mode 100644 src/main/java/gregtech/common/gui/modularui/widget/TextButtonWidget.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_Hatch_DegasifierControlHatch.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_LensHousing.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_LensIndicator.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationPlant.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitBase.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitClarifier.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitDegasifier.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitFlocculation.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitOzonation.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitParticleExtractor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitPhAdjustment.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitPlasmaHeater.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitUVTreatment.java create 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/LinkedPurificationUnit.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/PurificationPlantStructureString.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/PurificationUnitStatus.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/PurifiedWaterHelpers.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/UVTreatmentLensCycle.java create mode 100644 src/main/java/gregtech/loaders/postload/chains/GT_PurifiedWaterRecipes.java (limited to 'src/main/java/gregtech') diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java index f252a12965..e82c5952ee 100644 --- a/src/main/java/gregtech/api/GregTech_API.java +++ b/src/main/java/gregtech/api/GregTech_API.java @@ -297,6 +297,8 @@ public class GregTech_API { sBlockCasings8, sBlockCasings9, sBlockCasings10, sBlockCasings11, sSolenoidCoilCasings; public static Block sBlockLongDistancePipes; public static Block sDroneRender; + public static Block sBlockGlass1; + public static Block sBlockTintedGlass; public static Block sLaserRender; /** * Getting assigned by the Config diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java index 74c392ce67..b0e48a46bb 100644 --- a/src/main/java/gregtech/api/enums/GT_Values.java +++ b/src/main/java/gregtech/api/enums/GT_Values.java @@ -678,6 +678,13 @@ public class GT_Values { + "Gold"; public static final String AuthorVolence = "Author: " + EnumChatFormatting.AQUA + "Volence"; + 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; diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index d1c30a0935..1f5d223a6b 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -1152,7 +1152,16 @@ public enum ItemList implements IItemContainer { Machine_Multi_ImplosionCompressor, Machine_Multi_VacuumFreezer, Machine_Multi_Furnace, - + Machine_Multi_PurificationPlant, + Machine_Multi_PurificationUnitClarifier, + Machine_Multi_PurificationUnitFlocculator, + Machine_Multi_PurificationUnitPhAdjustment, + Machine_Multi_PurificationUnitOzonation, + Machine_Multi_PurificationUnitPlasmaHeater, + Machine_Multi_PurificationUnitUVTreatment, + Machine_Multi_PurificationUnitDegasifier, + Machine_Multi_PurificationUnitParticleExtractor, + Hatch_DegasifierControl, Machine_LV_AlloySmelter, Machine_MV_AlloySmelter, Machine_HV_AlloySmelter, @@ -2031,7 +2040,41 @@ public enum ItemList implements IItemContainer { TierdDrone1, TierdDrone2, Hatch_DroneDownLink, - Casing_Shielded_Accelerator; + Hatch_pHSensor, + Hatch_LensHousing, + Hatch_LensIndicator, + ActivatedCarbonFilterMesh, + BlockIndustrialStrengthConcrete, + GlassPHResistant, + GlassTintedIndustrialWhite, + GlassTintedIndustrialLightGray, + GlassTintedIndustrialGray, + GlassTintedIndustrialBlack, + BlockIndustrialWaterPlantCasing, + BlockSterileWaterPlantCasing, + BlockFlocculationCasing, + BlockNaquadahReinforcedWaterPlantCasing, + BlockExtremeCorrosionResistantCasing, + BlockHighPressureResistantCasing, + BlockOzoneCasing, + BlockPlasmaHeatingCasing, + BlockNaquadriaReinforcedWaterPlantCasing, + GlassUVResistant, + BlockUltraVioletLaserEmitter, + Quark_Catalyst_Housing, + Quark_Creation_Catalyst_Up, + Quark_Creation_Catalyst_Down, + Quark_Creation_Catalyst_Strange, + Quark_Creation_Catalyst_Charm, + Quark_Creation_Catalyst_Bottom, + Quark_Creation_Catalyst_Top, + Quark_Creation_Catalyst_Unaligned, + Casing_Shielded_Accelerator, + GlassOmniPurposeInfinityFused, + GlassQuarkContainment, + BlockQuarkPipe, + BlockQuarkReleaseChamber, + BlockQuarkContainmentCasing; public static final ItemList[] DYE_ONLY_ITEMS = { Color_00, Color_01, Color_02, Color_03, Color_04, Color_05, Color_06, Color_07, Color_08, Color_09, Color_10, Color_11, Color_12, Color_13, Color_14, Color_15 }, diff --git a/src/main/java/gregtech/api/enums/Materials.java b/src/main/java/gregtech/api/enums/Materials.java index f8f6f4636e..2435e1aad7 100644 --- a/src/main/java/gregtech/api/enums/Materials.java +++ b/src/main/java/gregtech/api/enums/Materials.java @@ -150,14 +150,15 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { public static 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_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))); public static 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_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.RADIO, 1))); public static 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_AspectStack(TC_Aspects.METALLUM, 2), new TC_AspectStack(TC_Aspects.SANO, 1))); - public static Materials Grade1PurifiedWater = new Materials( 554, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 0, 0, 255, 0, "Grade1PurifiedWater" , "Grade 1 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); - public static Materials Grade2PurifiedWater = new Materials( 555, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 0, 0, 250, 0, "Grade2PurifiedWater" , "Grade 2 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); - public static Materials Grade3PurifiedWater = new Materials( 556, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 0, 0, 245, 0, "Grade3PurifiedWater" , "Grade 3 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); - public static Materials Grade4PurifiedWater = new Materials( 557, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 0, 0, 240, 0, "Grade4PurifiedWater" , "Grade 4 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); - public static Materials Grade5PurifiedWater = new Materials( 558, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 0, 0, 235, 0, "Grade5PurifiedWater" , "Grade 5 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); - public static Materials Grade6PurifiedWater = new Materials( 559, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 0, 0, 230, 0, "Grade6PurifiedWater" , "Grade 6 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); - public static Materials Grade7PurifiedWater = new Materials( 560, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 0, 0, 225, 0, "Grade7PurifiedWater" , "Grade 7 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); - public static Materials Grade8PurifiedWater = new Materials( 561, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 0, 0, 220, 0, "Grade8PurifiedWater" , "Grade 8 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); + public static Materials Grade1PurifiedWater = new Materials( 554, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 34, 35, 52, 0, "Grade1PurifiedWater" , "Grade 1 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); + public static Materials Grade2PurifiedWater = new Materials( 555, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 42, 41, 77, 0, "Grade2PurifiedWater" , "Grade 2 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); + public static Materials Grade3PurifiedWater = new Materials( 556, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 49, 47, 103, 0, "Grade3PurifiedWater" , "Grade 3 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); + public static Materials Grade4PurifiedWater = new Materials( 557, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 54, 53, 132, 0, "Grade4PurifiedWater" , "Grade 4 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); + public static Materials Grade5PurifiedWater = new Materials( 558, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 58, 58, 161, 0, "Grade5PurifiedWater" , "Grade 5 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); + public static Materials Grade6PurifiedWater = new Materials( 559, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 61, 64, 191, 0, "Grade6PurifiedWater" , "Grade 6 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); + public static Materials Grade7PurifiedWater = new Materials( 560, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 63, 70, 221, 0, "Grade7PurifiedWater" , "Grade 7 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); + public static Materials Grade8PurifiedWater = new Materials( 561, TextureSet.SET_FLUID , 1.0F, 0, 2, 16 , 63, 76, 253, 0, "Grade8PurifiedWater" , "Grade 8 Purified Water" , 0, 0, 273, 0, false, true, 2, 1, 1, Dyes.dyeBlue , Collections.singletonList(new TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); + public static 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_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true); //GT++ materials @@ -946,6 +947,55 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { public static Materials TengamAttuned = new MaterialBuilder(112, TextureSet.SET_MAGNETIC, "Attuned Tengam") .addDustItems().addGearItems().addMetalItems().addToolHeadItems().setAspects(Arrays.asList(new TC_AspectStack(TC_Aspects.MAGNETO, 4), new TC_AspectStack(TC_Aspects.ELECTRUM, 1))).setColor(Dyes.dyeLime).setName("TengamAttuned") .setRGB(213, 255, 128).constructMaterial().setProcessingMaterialTierEU(TierEU.RECIPE_UV); public static Materials TengamRaw = new MaterialBuilder(110, TextureSet.SET_ROUGH, "Raw Tengam") .addOreItems() .setAspects(Arrays.asList(new TC_AspectStack(TC_Aspects.MAGNETO, 1), new TC_AspectStack(TC_Aspects.ELECTRUM, 4))).setColor(Dyes.dyeLime).setName("TengamRaw") .setRGB(160, 191, 96).constructMaterial().setProcessingMaterialTierEU(TierEU.RECIPE_UV); + // Activated Carbon Line + public static Materials ActivatedCarbon = new MaterialBuilder(563, TextureSet.SET_DULL, "Activated Carbon") + .addDustItems() + .setRGB(20, 20, 20) + .setName("ActivatedCarbon") + .setOreValue(0) + .setMaterialList(new MaterialStack(Carbon, 1)) + .constructMaterial() + .disableAutoGeneratedRecycleRecipes(); + public static Materials PreActivatedCarbon = new MaterialBuilder(564, TextureSet.SET_DULL, "Pre-Activated Carbon") + .addDustItems() + .setRGB(15, 51, 65) + .setName("PreActivatedCarbon") + .setOreValue(0) + .setMaterialList(new MaterialStack(Carbon, 1), new MaterialStack(PhosphoricAcid, 1)) + .constructMaterial() + .disableAutoGeneratedRecycleRecipes(); + public static Materials DirtyActivatedCarbon = new MaterialBuilder(565, TextureSet.SET_DULL, "Dirty Activated Carbon") + .addDustItems() + .setRGB(110, 110, 110) + .setName("carbonactivateddirty") // don't change this to the more sensible name or a centrifuge recipe appears + .setOreValue(0) + .setMaterialList(new MaterialStack(Carbon, 1), new MaterialStack(PhosphoricAcid, 1)) + .constructMaterial() + .disableAutoGeneratedRecycleRecipes(); + + // Advanced glue uses id 567?? ok + public static Materials PolyAluminiumChloride = new MaterialBuilder(566, TextureSet.SET_FLUID, "Polyaluminium Chloride") + .addFluid() + .addCell() + .setRGB(252, 236, 5) + .setName("PolyaluminiumChloride") + .constructMaterial(); + + public static Materials Ozone = new MaterialBuilder(568, TextureSet.SET_FLUID, "Ozone") + .addGas() + .addCell() + .setRGB(190, 244, 250) + .setName("Ozone") + .setMaterialList(new MaterialStack(Oxygen, 3)) + .constructMaterial(); + + public static Materials StableBaryonicMatter = new MaterialBuilder(569, TextureSet.SET_FLUID, "Stabilised Baryonic Matter") + .addFluid() + .addCell() + .setRGB(20, 10, 20) + .setName("StableBaryonicMatter") + .constructMaterial(); + // spotless:on static { @@ -1949,11 +1999,13 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { Grade6PurifiedWater.mChemicalFormula = "H\u2082O"; Grade7PurifiedWater.mChemicalFormula = "H\u2082O"; Grade8PurifiedWater.mChemicalFormula = "H\u2082O"; + FlocculationWasteLiquid.mChemicalFormula = "Al\u2082(OH)\u2083??Cl\u2083"; TengamRaw.mChemicalFormula = ""; TengamPurified.mChemicalFormula = "M"; TengamAttuned.mChemicalFormula = "M"; MaterialsUEVplus.ExcitedDTSC.mChemicalFormula = "[-Stellar-Stellar-]"; MaterialsUEVplus.DimensionallyTranscendentStellarCatalyst.mChemicalFormula = "Stellar"; + PolyAluminiumChloride.mChemicalFormula = "Al\u2082(OH)\u2083Cl\u2083"; } private static void initSubTags() { diff --git a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java index b34c5d79f0..78bc31ec57 100644 --- a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java +++ b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java @@ -684,6 +684,19 @@ public enum MetaTileEntityIDs { INDUSTRIAL_APIARY(9399), Drone_Centre(9400), DroneDownLink(9401), + PURIFICATION_PLANT_CONTROLLER(9402), + PURIFICATION_UNIT_CLARIFIER(9403), + PURIFICATION_UNIT_OZONATION(9404), + PURIFICATION_UNIT_FLOCCULATOR(9405), + PURIFICATION_UNIT_PH_ADJUSTMENT(9406), + HATCH_PH_SENSOR(9407), + PURIFICATION_UNIT_PLASMA_HEATER(9408), + PURIFICATION_UNIT_UV_TREATMENT(9409), + HATCH_LENS_HOUSING(9410), + HATCH_LENS_INDICATOR(9411), + PURIFICATION_UNIT_DEGASIFIER(9412), + HATCH_DEGASIFIER_CONTROL(9413), + PURIFICATION_UNIT_PARTICLE_EXTRACTOR(9414), sofc1(13101), sofc2(13102), tfft(13104), diff --git a/src/main/java/gregtech/api/enums/SoundResource.java b/src/main/java/gregtech/api/enums/SoundResource.java index 54a2162541..712c1b5016 100644 --- a/src/main/java/gregtech/api/enums/SoundResource.java +++ b/src/main/java/gregtech/api/enums/SoundResource.java @@ -63,6 +63,12 @@ public enum SoundResource { GT_MACHINES_WATER_PUMP_LOOP(234, GregTech.ID, "machines.WaterPumpLoop"), GT_MACHINES_STEAM_CENTRIFUGE_LOOP(235, GregTech.ID, "machines.SteamCentrifugeLoop"), + GT_MACHINES_PURIFICATIONPLANT_LOOP(233, GregTech.ID, "machines.PurificationPlantLoop"), + GT_MACHINES_PURIFICATION_PH_LOOP(234, GregTech.ID, "machines.PurificationPhLoop"), + GT_MACHINES_COAGULATION_LOOP(235, GregTech.ID, "machines.PurificationCoagulationLoop"), + GT_MACHINES_OZONATION_LOOP(236, GregTech.ID, "machines.PurificationOzonationLoop"), + GT_MACHINES_PURIFICATION_PLASMA_LOOP(237, "machines.PurificationPlasmaLoop"), + GUI_BUTTON_DOWN(-1, GregTech.ID, "gui.buttonDown"), GUI_BUTTON_UP(-1, GregTech.ID, "gui.buttonUp"), diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index b190d60d00..300f2281ae 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -1346,6 +1346,8 @@ public class Textures { OVERLAY_ME_CRAFTING_HATCH_ACTIVE, OVERLAY_ME_FLUID_HATCH, OVERLAY_ME_FLUID_HATCH_ACTIVE, + OVERLAY_HATCH_PH_SENSOR, + OVERLAY_HATCH_PH_SENSOR_GLOW, STRUCTURE_MARK, @@ -1404,7 +1406,29 @@ public class Textures { LARGETURBINE_NEW_EMPTY6, LARGETURBINE_NEW_EMPTY7, LARGETURBINE_NEW_EMPTY8, - LARGETURBINE_NEW_EMPTY9,; + LARGETURBINE_NEW_EMPTY9, + INDUSTRIAL_STRENGTH_CONCRETE, + GLASS_PH_RESISTANT, + GLASS_TINTED_INDUSTRIAL_WHITE, + GLASS_TINTED_INDUSTRIAL_LIGHT_GRAY, + GLASS_TINTED_INDUSTRIAL_GRAY, + GLASS_TINTED_INDUSTRIAL_BLACK, + MACHINE_CASING_INDUSTRIAL_WATER_PLANT, + WATER_PLANT_CONCRETE_CASING, + MACHINE_CASING_FLOCCULATION, + MACHINE_CASING_NAQUADAH_REINFORCED_WATER_PLANT, + MACHINE_CASING_EXTREME_CORROSION_RESISTANT, + MACHINE_CASING_HIGH_PRESSURE_RESISTANT, + MACHINE_CASING_OZONE, + MACHINE_CASING_PLASMA_HEATER, + NAQUADRIA_REINFORCED_WATER_PLANT_CASING, + UV_BACKLIGHT_STERILIZER_CASING, + NEUTRONIUM_COATED_UV_RESISTANT_GLASS, + OMNI_PURPOSE_INFINITY_FUSED_GLASS, + GLASS_QUARK_CONTAINMENT, + BLOCK_QUARK_PIPE, + BLOCK_QUARK_RELEASE_CHAMBER, + BLOCK_QUARK_CONTAINMENT_CASING,; /** * Icon for Fresh CFoam diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java index 100c39ea1a..b456026dbd 100644 --- a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java +++ b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java @@ -26,7 +26,8 @@ public class GT_UITextures { .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 @@ -205,6 +206,14 @@ public class GT_UITextures { 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); 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 index f4c4eb6a14..089aec53e0 100644 --- 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 @@ -302,11 +302,18 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch buildContext.addCloseListener(() -> uiButtonCount = 0); addSortStacksButton(builder); addOneStackLimitButton(builder); - switch (mTier) { - case 0 -> getBaseMetaTileEntity().add1by1Slot(builder); - case 1 -> getBaseMetaTileEntity().add2by2Slots(builder); - case 2 -> getBaseMetaTileEntity().add3by3Slots(builder); - default -> getBaseMetaTileEntity().add4by4Slots(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 -> {} } } diff --git a/src/main/java/gregtech/api/recipe/RecipeMaps.java b/src/main/java/gregtech/api/recipe/RecipeMaps.java index c42b8725b4..6d614d27d0 100644 --- a/src/main/java/gregtech/api/recipe/RecipeMaps.java +++ b/src/main/java/gregtech/api/recipe/RecipeMaps.java @@ -59,12 +59,18 @@ import gregtech.api.recipe.maps.LargeNEIFrontend; import gregtech.api.recipe.maps.MicrowaveBackend; import gregtech.api.recipe.maps.OilCrackerBackend; import gregtech.api.recipe.maps.PrinterBackend; +import gregtech.api.recipe.maps.PurificationUnitClarifierFrontend; +import gregtech.api.recipe.maps.PurificationUnitFlocculatorFrontend; +import gregtech.api.recipe.maps.PurificationUnitOzonationFrontend; +import gregtech.api.recipe.maps.PurificationUnitPhAdjustmentFrontend; +import gregtech.api.recipe.maps.PurificationUnitPlasmaHeaterFrontend; import gregtech.api.recipe.maps.RecyclerBackend; import gregtech.api.recipe.maps.ReplicatorBackend; import gregtech.api.recipe.maps.SpaceProjectFrontend; import gregtech.api.recipe.maps.TranscendentPlasmaMixerFrontend; import gregtech.api.recipe.maps.UnpackagerBackend; import gregtech.api.recipe.metadata.PCBFactoryTierKey; +import gregtech.api.recipe.metadata.PurificationPlantBaseChanceKey; import gregtech.api.util.GT_Config; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_OreDictUnificator; @@ -72,6 +78,7 @@ 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.common.tileentities.machines.multi.purification.PurifiedWaterHelpers; import gregtech.nei.formatter.FuelSpecialValueFormatter; import gregtech.nei.formatter.FusionSpecialValueFormatter; import gregtech.nei.formatter.HeatingCoilSpecialValueFormatter; @@ -297,6 +304,22 @@ public final class RecipeMaps { .slotOverlays( (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput && index != 0 ? GT_UITextures.OVERLAY_SLOT_LENS : null) + // Add a simple ordering so lower tier purified water is displayed first, otherwise it gets really confusing + .neiRecipeComparator((a, b) -> { + // Find lens, if no lens was present we can use the default comparator + if (a.mInputs.length > 1 && b.mInputs.length > 1) { + ItemStack firstLens = a.mInputs[1]; + ItemStack secondLens = b.mInputs[1]; + // Find purified water/any fluid, if none was present simply use the lens to compare + if (ItemStack.areItemStacksEqual(firstLens, secondLens) && a.mFluidInputs.length > 0 + && b.mFluidInputs.length > 0) { + return Comparator + .comparing(r -> PurifiedWaterHelpers.getWaterTier(r.mFluidInputs[0])) + .compare(a, b); + } + } + return a.compareTo(b); + }) .recipeConfigFile("laserengraving", FIRST_ITEM_OUTPUT) .build(); public static final RecipeMap mixerRecipes = RecipeMapBuilder.of("gt.recipe.mixer") @@ -1149,6 +1172,78 @@ public final class RecipeMaps { .comparing(recipe -> recipe.getMetadataOrDefault(PCBFactoryTierKey.INSTANCE, 1)) .thenComparing(GT_Recipe::compareTo)) .build(); + public static final RecipeMap purificationClarifierRecipes = RecipeMapBuilder + .of("gt.recipe.purificationplantclarifier") + .maxIO(1, 4, 1, 1) + .minInputs(0, 1) + .frontend(PurificationUnitClarifierFrontend::new) + .disableOptimize() + .build(); + public static final RecipeMap purificationOzonationRecipes = RecipeMapBuilder + .of("gt.recipe.purificationplantozonation") + .maxIO(0, 4, 2, 1) + .minInputs(0, 2) + .progressBar(GT_UITextures.PROGRESSBAR_BATH) + .neiRecipeComparator( + Comparator + .comparing( + recipe -> recipe.getMetadataOrDefault(PurificationPlantBaseChanceKey.INSTANCE, 0.0f)) + .thenComparing(GT_Recipe::compareTo)) + .frontend(PurificationUnitOzonationFrontend::new) + .disableOptimize() + .build(); + public static final RecipeMap purificationFlocculationRecipes = RecipeMapBuilder + .of("gt.recipe.purificationplantflocculation") + .maxIO(0, 3, 2, 2) + .minInputs(0, 1) + .progressBar(GT_UITextures.PROGRESSBAR_BATH) + .neiRecipeComparator( + Comparator + .comparing( + recipe -> recipe.getMetadataOrDefault(PurificationPlantBaseChanceKey.INSTANCE, 0.0f)) + .thenComparing(GT_Recipe::compareTo)) + .frontend(PurificationUnitFlocculatorFrontend::new) + .disableOptimize() + .build(); + + public static final RecipeMap purificationPhAdjustmentRecipes = RecipeMapBuilder + .of("gt.recipe.purificationplantphadjustment") + .maxIO(0, 0, 1, 1) + .minInputs(0, 1) + .progressBar(GT_UITextures.PROGRESSBAR_MIXER) + .frontend(PurificationUnitPhAdjustmentFrontend::new) + .disableOptimize() + .build(); + + public static final RecipeMap purificationPlasmaHeatingRecipes = RecipeMapBuilder + .of("gt.recipe.purificationplantplasmaheating") + .maxIO(0, 0, 1, 1) + .minInputs(0, 1) + .progressBar(GT_UITextures.PROGRESSBAR_BOILER_HEAT) + .frontend(PurificationUnitPlasmaHeaterFrontend::new) + .disableOptimize() + .build(); + public static final RecipeMap purificationUVTreatmentRecipes = RecipeMapBuilder + .of("gt.recipe.purificationplantuvtreatment") + .maxIO(0, 0, 1, 1) + .minInputs(0, 1) + .progressBar(GT_UITextures.PROGRESSBAR_ARROW) + .disableOptimize() + .build(); + public static final RecipeMap purificationDegasifierRecipes = RecipeMapBuilder + .of("gt.recipe.purificationplantdegasifier") + .maxIO(0, 3, 1, 2) + .minInputs(0, 1) + .progressBar(GT_UITextures.PROGRESSBAR_ARROW) + .disableOptimize() + .build(); + public static final RecipeMap purificationParticleExtractionRecipes = RecipeMapBuilder + .of("gt.recipe.purificationplantquarkextractor") + .maxIO(2, 1, 1, 2) + .minInputs(0, 1) + .progressBar(GT_UITextures.PROGRESSBAR_ARROW) + .disableOptimize() + .build(); public static final RecipeMap ic2NuclearFakeRecipes = RecipeMapBuilder.of("gt.recipe.ic2nuke") .maxIO(1, 1, 0, 0) .minInputs(1, 0) diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitClarifierFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitClarifierFrontend.java new file mode 100644 index 0000000000..c7dad7ea3a --- /dev/null +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitClarifierFrontend.java @@ -0,0 +1,72 @@ +package gregtech.api.recipe.maps; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; +import com.gtnewhorizons.modularui.api.math.Pos2d; +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.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; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class PurificationUnitClarifierFrontend extends PurificationUnitRecipeMapFrontend { + + public PurificationUnitClarifierFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super( + 80, + uiPropertiesBuilder.logoPos(new Pos2d(160, 100)) + .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_CLARIFIER)) + .logoPos(new Pos2d(152, 90)), + neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 120))); + } + + @Override + public List getFluidInputPositions(int fluidInputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(6, 7)); + return positions; + } + + @Override + public List getFluidOutputPositions(int fluidOutputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(154, 7)); + return positions; + } + + @Override + public List getItemInputPositions(int itemInputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(79, 43)); + return positions; + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return UIHelper.getGridPositions(itemOutputCount, 136, 43, 2, 2); + } + + @Override + public void drawNEIOverlays(GT_NEI_DefaultHandler.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); + } + } + } +} diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitFlocculatorFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitFlocculatorFrontend.java new file mode 100644 index 0000000000..9366237b67 --- /dev/null +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitFlocculatorFrontend.java @@ -0,0 +1,99 @@ +package gregtech.api.recipe.maps; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.item.ItemStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; +import com.gtnewhorizons.modularui.api.math.Pos2d; +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.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.util.GT_Utility; +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; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class PurificationUnitFlocculatorFrontend extends PurificationUnitRecipeMapFrontend { + + public PurificationUnitFlocculatorFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super( + 80, + uiPropertiesBuilder.logoPos(new Pos2d(160, 100)) + .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_FLOCCULATION)) + .logoPos(new Pos2d(152, 100)), + neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 120))); + } + + @Override + public List getFluidInputPositions(int fluidInputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(9, 39)); + return positions; + } + + @Override + public List getFluidOutputPositions(int fluidOutputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(151, 39)); + return positions; + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return UIHelper.getGridPositions(itemOutputCount, 115, 80, 3, 1); + } + + @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))) { + currentTip.add("Consumed during operation"); + currentTip.add( + "+" + GT_MetaTileEntity_PurificationUnitFlocculation.SUCCESS_PER_LEVEL + + "%/" + + GT_MetaTileEntity_PurificationUnitFlocculation.INPUT_CHEMICAL_PER_LEVEL + + "L"); + } else if (stack + .isItemEqual(GT_Utility.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) { + super.drawNEIOverlays(neiCachedRecipe); + + // Display flocculation chemical + neiCachedRecipe.mInputs.add( + new PositionedStack( + GT_Utility.getFluidDisplayStack(Materials.PolyAluminiumChloride.getFluid(100000L), true), + 5, + -1, + false)); + + // Display waste output + neiCachedRecipe.mOutputs.add( + new PositionedStack( + GT_Utility.getFluidDisplayStack(Materials.FlocculationWasteLiquid.getFluid(100000L), true), + 147, + 48, + false)); + } +} diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitOzonationFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitOzonationFrontend.java new file mode 100644 index 0000000000..cdfd41b78c --- /dev/null +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitOzonationFrontend.java @@ -0,0 +1,51 @@ +package gregtech.api.recipe.maps; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +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.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.common.gui.modularui.UIHelper; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class PurificationUnitOzonationFrontend extends PurificationUnitRecipeMapFrontend { + + public PurificationUnitOzonationFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super( + 120, + uiPropertiesBuilder.logoPos(new Pos2d(160, 100)) + .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_OZONATION)) + .logoPos(new Pos2d(152, 97)), + neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 180))); + } + + @Override + public List getFluidInputPositions(int fluidInputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(79, 100)); + positions.add(new Pos2d(27, 77)); + return positions; + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return UIHelper.getGridPositions(itemOutputCount, 131, 26, 2); + } + + @Override + public List getFluidOutputPositions(int fluidOutputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(131, 97)); + return positions; + } +} diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitPhAdjustmentFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitPhAdjustmentFrontend.java new file mode 100644 index 0000000000..7e9eded675 --- /dev/null +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitPhAdjustmentFrontend.java @@ -0,0 +1,79 @@ +package gregtech.api.recipe.maps; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.item.ItemStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; +import com.gtnewhorizons.modularui.api.math.Pos2d; +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.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitPhAdjustment; +import gregtech.nei.GT_NEI_DefaultHandler; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class PurificationUnitPhAdjustmentFrontend extends PurificationUnitRecipeMapFrontend { + + public PurificationUnitPhAdjustmentFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super( + 80, + uiPropertiesBuilder.logoPos(new Pos2d(160, 100)) + .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_PH_NEUTRALIZATION)) + .logoPos(new Pos2d(152, 90)), + neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 120))); + } + + @Override + public List getFluidInputPositions(int fluidInputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(42, 44)); + return positions; + } + + @Override + public List getFluidOutputPositions(int fluidOutputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(116, 44)); + return positions; + } + + @Override + @NotNull + public List handleNEIItemTooltip(ItemStack stack, List currentTip, + GT_NEI_DefaultHandler.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"); + } 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"); + } + return super.handleNEIItemTooltip(stack, currentTip, neiCachedRecipe); + } + + @Override + public void drawNEIOverlays(GT_NEI_DefaultHandler.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), + 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 new file mode 100644 index 0000000000..5c63353b98 --- /dev/null +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitPlasmaHeaterFrontend.java @@ -0,0 +1,59 @@ +package gregtech.api.recipe.maps; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; +import com.gtnewhorizons.modularui.api.math.Pos2d; +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.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.nei.GT_NEI_DefaultHandler; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class PurificationUnitPlasmaHeaterFrontend extends PurificationUnitRecipeMapFrontend { + + public PurificationUnitPlasmaHeaterFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super( + 120, + uiPropertiesBuilder.logoPos(new Pos2d(152, 90)) + .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_PLASMA_HEATER)), + neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 120))); + } + + @Override + public List getFluidInputPositions(int fluidInputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(30, 83)); + return positions; + } + + @Override + public List getFluidOutputPositions(int fluidOutputCount) { + ArrayList positions = new ArrayList<>(); + positions.add(new Pos2d(111, 82)); + return positions; + } + + @Override + public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + neiCachedRecipe.mInputs.add( + new PositionedStack(GT_Utility.getFluidDisplayStack(Materials.Helium.getPlasma(10L), true), 26, 53, false)); + neiCachedRecipe.mInputs.add( + new PositionedStack( + G