From edf1500f14363ea1887b3754d85a21570806308e Mon Sep 17 00:00:00 2001 From: HoleFish <48403212+HoleFish@users.noreply.github.com> Date: Fri, 22 Nov 2024 01:43:11 +0800 Subject: [PATCH 001/181] Fix some incorrect parallel calculation (#3517) --- .../common/tileentities/machines/multi/MTEAssemblyLine.java | 2 +- .../tileentities/machines/multi/MTEIntegratedOreFactory.java | 2 +- .../common/tileentities/machines/multi/MTEMultiFurnace.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java index 382400c3b1e..30c0a388bc9 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java @@ -349,7 +349,7 @@ public CheckRecipeResult checkProcessing() { batchMultiplierMax = Math .min(batchMultiplierMax, (double) currentParallel / maxParallelBeforeBatchMode); } - int finalParallel = (int) (batchMultiplierMax * maxParallelBeforeBatchMode); + int finalParallel = (int) (batchMultiplierMax * currentParallelBeforeBatchMode); lEUt = calculator.getConsumption(); mMaxProgresstime = (int) (calculator.getDuration() * batchMultiplierMax); diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java index e3691268951..1f131af6924 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java @@ -334,7 +334,7 @@ public CheckRecipeResult checkProcessing() { batchMultiplierMax = Math.min(batchMultiplierMax, (double) currentParallel / maxParallelBeforeBatchMode); } - int finalParallel = (int) (batchMultiplierMax * maxParallelBeforeBatchMode); + int finalParallel = (int) (batchMultiplierMax * currentParallelBeforeBatchMode); // for scanner setCurrentParallelism(finalParallel); diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiFurnace.java index 7227e022e54..5dab48aba09 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiFurnace.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiFurnace.java @@ -198,7 +198,7 @@ public CheckRecipeResult checkProcessing() { batchMultiplierMax = (double) getMaxBatchSize() / calculator.getDuration(); batchMultiplierMax = Math.min(batchMultiplierMax, (double) currentParallel / maxParallelBeforeBatchMode); } - int finalParallel = (int) (batchMultiplierMax * maxParallelBeforeBatchMode); + int finalParallel = (int) (batchMultiplierMax * currentParallelBeforeBatchMode); // Consume inputs and generate outputs ArrayList smeltedOutputs = new ArrayList<>(); From e830a6fd9c5fe8311a516cf172fe99842cceca2e Mon Sep 17 00:00:00 2001 From: HoleFish <48403212+HoleFish@users.noreply.github.com> Date: Fri, 22 Nov 2024 22:51:26 +0800 Subject: [PATCH 002/181] Fix multiblocks displaying output x 0 (#3534) --- .../metatileentity/implementations/MTEMultiBlockBase.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index 1e29d797a49..f8babfb7ecc 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -2507,12 +2507,12 @@ protected String generateCurrentRecipeInfoString() { }; int lines = 0; - int MAX_LINES = 5; + int MAX_LINES = 10; if (mOutputItems != null) { HashMap nameToAmount = new HashMap<>(); for (var item : mOutputItems) { - if (item == null) continue; + if (item == null || item.stackSize <= 0) continue; nameToAmount.merge(item.getDisplayName(), (long) item.stackSize, Long::sum); } for (Map.Entry entry : nameToAmount.entrySet()) { @@ -2535,7 +2535,7 @@ protected String generateCurrentRecipeInfoString() { if (mOutputFluids != null) { HashMap nameToAmount = new HashMap<>(); for (var fluid : mOutputFluids) { - if (fluid == null) continue; + if (fluid == null || fluid.amount <= 0) continue; nameToAmount.merge(fluid.getLocalizedName(), (long) fluid.amount, Long::sum); } for (Map.Entry entry : nameToAmount.entrySet()) { From 7829953adf391c85083a41ed9bfa567cbc9e7377 Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Fri, 22 Nov 2024 11:06:37 -0500 Subject: [PATCH 003/181] Black hole fixes/changes (#3528) Co-authored-by: Martin Robertz --- .../multi/compressor/MTEBlackHoleCompressor.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) 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 index 35aad1292ad..21c00e1759f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java @@ -320,7 +320,6 @@ protected MultiblockTooltipBuilder createTooltip() { EnumChatFormatting.LIGHT_PURPLE + "No longer requires heat management to perform superdense compression") .addInfo(EnumChatFormatting.LIGHT_PURPLE + "Can create advanced singularities!") - .addInfo(EnumChatFormatting.BLUE + "Use circuit 20 for Compressor and 21 for Neutronium Compressor") .addSeparator() .addInfo( "Insert a " + EnumChatFormatting.WHITE @@ -340,7 +339,6 @@ protected MultiblockTooltipBuilder createTooltip() { .addInfo("At 0 stability, the black hole is " + EnumChatFormatting.DARK_RED + "UNSTABLE") .addInfo("Once the black hole becomes unstable, it will void recipes and eventually close itself!") .addSeparator() - .addInfo("Running recipes in the machine will slow the decay rate by " + EnumChatFormatting.RED + "25%") .addInfo( "The decay can be " + EnumChatFormatting.BOLD + "halted" @@ -363,6 +361,7 @@ protected MultiblockTooltipBuilder createTooltip() { + " to close the black hole") .addInfo("To restore stability and reset spacetime costs, close the black hole and open a new one") .addSeparator() + .addInfo(EnumChatFormatting.WHITE + "Use circuit 20 for Compressor and 21 for Neutronium Compressor") .addInfo("400% faster than singleblock machines of the same voltage") .addInfo("Only uses 70% of the EU/t normally required") .addInfo("Gains 8 parallels per voltage tier") @@ -498,6 +497,7 @@ private void searchAndDecrementCatalysts() { blackHoleStatus = 1; blackHoleStability = 100; catalyzingCostModifier = 1; + catalyzingCounter = 0; if (rendererTileEntity != null) rendererTileEntity.startScaleChange(false); collapseTimer = 40; return; @@ -609,11 +609,6 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { // Only do loss reductions if the black hole is stable - unstable black hole can't be frozen if (blackHoleStability >= 0) { - // 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 From 690a156cb10a21413d2d234a7d0b81686039b966 Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Fri, 22 Nov 2024 17:14:02 +0100 Subject: [PATCH 004/181] Add name of glass tiers to Bacterial Vat NEI page (#3529) Co-authored-by: Martin Robertz --- .../API/recipe/BacterialVatFrontend.java | 15 +++++++++------ .../bartworks/common/loaders/BioRecipeLoader.java | 8 ++++++++ .../processingLoaders/AdditionalRecipes.java | 3 +++ src/main/java/gregtech/api/recipe/RecipeMaps.java | 4 +++- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/main/java/bartworks/API/recipe/BacterialVatFrontend.java b/src/main/java/bartworks/API/recipe/BacterialVatFrontend.java index afca4274d9f..b310ad576ff 100644 --- a/src/main/java/bartworks/API/recipe/BacterialVatFrontend.java +++ b/src/main/java/bartworks/API/recipe/BacterialVatFrontend.java @@ -11,6 +11,7 @@ import com.gtnewhorizons.modularui.api.math.Alignment; import bartworks.common.tileentities.multis.MTEBioVat; +import gregtech.api.enums.GTValues; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.RecipeMapFrontend; @@ -79,12 +80,14 @@ private static class BacterialVatSpecialValueFormatter implements INEISpecialInf @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]); + String glassTier = StatCollector.translateToLocalFormatted("nei.biovat.0.name", GTValues.VN[tSpecialA[0]]); + String sievert = ""; + if (!(tSpecialA[3] == 0)) { + 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/common/loaders/BioRecipeLoader.java b/src/main/java/bartworks/common/loaders/BioRecipeLoader.java index 84f603a8b3e..8d0f975e3e5 100644 --- a/src/main/java/bartworks/common/loaders/BioRecipeLoader.java +++ b/src/main/java/bartworks/common/loaders/BioRecipeLoader.java @@ -15,10 +15,12 @@ import static bartworks.API.recipe.BartWorksRecipeMaps.bacterialVatRecipes; import static bartworks.API.recipe.BartWorksRecipeMaps.bioLabRecipes; +import static bartworks.util.BWRecipes.computeSieverts; 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; @@ -130,6 +132,7 @@ public static void registerWaterBasedBacterialVatRecipes() { .special(BioItemList.getPetriDish(BioCultureLoader.CommonYeast)) .fluidInputs(new FluidStack(fluidStack, 100)) .fluidOutputs(FluidRegistry.getFluidStack("potion.ghp", 1)) + .metadata(SIEVERTS, computeSieverts(0, 3, false, false, false)) .duration(17 * SECONDS + 10 * TICKS) .eut(TierEU.RECIPE_EV) .noOptimize() @@ -141,6 +144,7 @@ public static void registerWaterBasedBacterialVatRecipes() { .special(BioItemList.getPetriDish(BioCultureLoader.WhineYeast)) .fluidInputs(new FluidStack(fluidStack, 100)) .fluidOutputs(FluidRegistry.getFluidStack("potion.wine", 12)) + .metadata(SIEVERTS, computeSieverts(0, 3, false, false, false)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_MV) .noOptimize() @@ -154,6 +158,7 @@ public static void registerWaterBasedBacterialVatRecipes() { .special(BioItemList.getPetriDish(BioCultureLoader.BeerYeast)) .fluidInputs(new FluidStack(fluidStack, 100)) .fluidOutputs(FluidRegistry.getFluidStack("potion.beer", 5)) + .metadata(SIEVERTS, computeSieverts(0, 3, false, false, false)) .duration(30 * SECONDS) .eut(TierEU.RECIPE_LV) .noOptimize() @@ -164,6 +169,7 @@ public static void registerWaterBasedBacterialVatRecipes() { .special(BioItemList.getPetriDish(BioCultureLoader.BeerYeast)) .fluidInputs(new FluidStack(fluidStack, 100)) .fluidOutputs(FluidRegistry.getFluidStack("potion.darkbeer", 10)) + .metadata(SIEVERTS, computeSieverts(0, 3, false, false, false)) .duration(30 * SECONDS) .eut(TierEU.RECIPE_LV) .noOptimize() @@ -178,6 +184,7 @@ public static void registerBacterialVatRecipes() { .special(BioItemList.getPetriDish(BioCultureLoader.WhineYeast)) .fluidInputs(FluidRegistry.getFluidStack("potion.grapejuice", 100)) .fluidOutputs(FluidRegistry.getFluidStack("potion.wine", 12)) + .metadata(SIEVERTS, computeSieverts(0, 3, false, false, false)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_LV) .noOptimize() @@ -187,6 +194,7 @@ public static void registerBacterialVatRecipes() { .special(BioItemList.getPetriDish(BioCultureLoader.anaerobicOil)) .fluidInputs(Materials.FermentedBiomass.getFluid(10000)) .fluidOutputs(new FluidStack(FluidLoader.fulvicAcid, 1000)) + .metadata(SIEVERTS, computeSieverts(0, 3, false, false, false)) .duration(2 * MINUTES + 17 * SECONDS + 8 * TICKS) .eut(TierEU.RECIPE_LV) .noOptimize() diff --git a/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java b/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java index ae2078137c8..b66504a715b 100644 --- a/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java +++ b/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java @@ -15,6 +15,7 @@ import static bartworks.API.recipe.BartWorksRecipeMaps.bacterialVatRecipes; import static bartworks.API.recipe.BartWorksRecipeMaps.bioLabRecipes; +import static bartworks.util.BWRecipes.computeSieverts; import static gregtech.api.enums.Mods.Gendustry; import static gregtech.api.enums.OrePrefixes.bolt; import static gregtech.api.enums.OrePrefixes.crushed; @@ -48,6 +49,7 @@ 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.SIEVERTS; import static gregtech.api.util.GTRecipeConstants.UniversalChemical; import java.util.Arrays; @@ -224,6 +226,7 @@ private static void runBWRecipes() { .special(BioItemList.getPetriDish(bioCulture)) .fluidInputs(fluidStack) .fluidOutputs(new FluidStack(bioCulture.getFluid(), 10)) + .metadata(SIEVERTS, computeSieverts(0, 3, false, false, false)) .duration(50 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(bacterialVatRecipes); diff --git a/src/main/java/gregtech/api/recipe/RecipeMaps.java b/src/main/java/gregtech/api/recipe/RecipeMaps.java index fa984039dae..a24017b1e7c 100644 --- a/src/main/java/gregtech/api/recipe/RecipeMaps.java +++ b/src/main/java/gregtech/api/recipe/RecipeMaps.java @@ -1,5 +1,6 @@ package gregtech.api.recipe; +import static bartworks.util.BWRecipes.computeSieverts; import static gregtech.api.enums.Mods.Avaritia; import static gregtech.api.enums.Mods.GTNHIntergalactic; import static gregtech.api.enums.Mods.NEICustomDiagrams; @@ -1238,7 +1239,8 @@ && isArrayEmptyOrNull(b.getFluidOutputs()) b -> BartWorksRecipeMaps.bacterialVatRecipes.doAdd( b.copy() .special(BioItemList.getPetriDish(BioCultureLoader.generalPurposeFermentingBacteria)) - .metadata(SIEVERTS, (int) GTUtility.getTier(b.getEUt()))))); + .metadata(SIEVERTS, computeSieverts(0, 3, false, false, false)) + .eut(b.getEUt())))); RecipeMaps.implosionRecipes.addDownstream( IRecipeMap.newRecipeMap( b -> BartWorksRecipeMaps.electricImplosionCompressorRecipes.doAdd( From 783efe627de3ab0678af7941743413fc07007df0 Mon Sep 17 00:00:00 2001 From: Abdiel Kavash <19243993+AbdielKavash@users.noreply.github.com> Date: Fri, 22 Nov 2024 10:23:44 -0600 Subject: [PATCH 005/181] Fix maintenance hatch right-click behavior from the wrong side. (#3533) Co-authored-by: Martin Robertz --- .../api/metatileentity/implementations/MTEHatchMaintenance.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMaintenance.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMaintenance.java index b617c954f74..38d76ab6afb 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMaintenance.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMaintenance.java @@ -176,8 +176,8 @@ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { @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 (aBaseMetaTileEntity.isClientSide()) return true; // only allow OC robot fake player if (aPlayer instanceof FakePlayer && !aPlayer.getGameProfile() .getName() From 1bf9fbbba23b8d086bf80afe07e66d3247a3c68f Mon Sep 17 00:00:00 2001 From: Ableytner <56540036+Ableytner@users.noreply.github.com> Date: Fri, 22 Nov 2024 19:04:14 +0100 Subject: [PATCH 006/181] Readd fluid inputs for HG-1223 in ABS (#3535) --- src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java b/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java index 8703bcb3e18..adc335c72cb 100644 --- a/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java @@ -718,6 +718,7 @@ private static void blastSmelterRecipes() { MaterialsElements.getInstance().BARIUM.getDust(2), MaterialsElements.getInstance().CALCIUM.getDust(2), MaterialsElements.getInstance().COPPER.getDust(3)) + .fluidInputs(Materials.Oxygen.getGas(8000), Materials.Mercury.getFluid(1000)) .fluidOutputs(MaterialsAlloy.HG1223.getFluidStack(16 * 144)) .eut(TierEU.RECIPE_LuV) .duration(2 * MINUTES) From 290fcef6d63c926452546ecb36b585fa325f15a6 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Fri, 22 Nov 2024 20:50:16 +0100 Subject: [PATCH 007/181] update --- dependencies.gradle | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 7ede0a91b55..7406b7a7ff8 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -34,12 +34,12 @@ * For more details, see https://docs.gradle.org/8.0.1/userguide/java_library_plugin.html#sec:java_library_configurations_graph */ dependencies { - api("com.github.GTNewHorizons:StructureLib:1.3.5:dev") + api("com.github.GTNewHorizons:StructureLib:1.3.6:dev") api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") api("com.github.GTNewHorizons:NotEnoughItems:2.6.46-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") api("com.github.GTNewHorizons:GTNHLib:0.5.20:dev") - api("com.github.GTNewHorizons:ModularUI:1.2.13:dev") + api("com.github.GTNewHorizons:ModularUI:1.2.14:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.14-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-477-GTNH:dev") @@ -58,11 +58,11 @@ dependencies { compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.54:dev") - compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta20:api') { transitive = false } + compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta22:api') { transitive = false } compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.3:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.8.22:dev") { transitive = false } - compileOnlyApi("com.github.GTNewHorizons:ForestryMC:4.9.17:dev") { transitive = false } + compileOnlyApi("com.github.GTNewHorizons:ForestryMC:4.9.18:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:ProjectRed:4.10.5-GTNH:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:Railcraft:9.15.15:dev") { transitive = false } @@ -70,10 +70,10 @@ dependencies { compileOnly("com.github.GTNewHorizons:ThaumicBases:1.7.7:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:EnderCore:0.4.6:dev") { transitive = false } compileOnly('com.github.GTNewHorizons:VisualProspecting:1.3.28:dev') { transitive = false } - compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.96-GTNH:dev") { transitive = false } + compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.97-GTNH:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.5-GTNH:dev") { transitive = false } - implementation("com.github.GTNewHorizons:TinkersConstruct:1.12.14-GTNH:dev") + implementation("com.github.GTNewHorizons:TinkersConstruct:1.12.15-GTNH:dev") compileOnly("com.github.GTNewHorizons:Chisel:2.15.3-GTNH:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:Translocators:1.2.1:dev") { transitive = false } @@ -103,7 +103,7 @@ dependencies { annotationProcessor("com.google.auto.value:auto-value:1.10.1") // For testing forestry integration (iApiary, combs, tree growth simulator) - // runtimeOnlyNonPublishable("com.github.GTNewHorizons:ForestryMC:4.9.17:dev") + // runtimeOnlyNonPublishable("com.github.GTNewHorizons:ForestryMC:4.9.18:dev") // runtimeOnlyNonPublishable('com.github.GTNewHorizons:neiaddons:1.16.0:dev') // runtimeOnlyNonPublishable('com.github.GTNewHorizons:MagicBees:2.8.5-GTNH:dev') // runtimeOnlyNonPublishable('com.github.GTNewHorizons:Binnie:2.4.4:dev') From e69032e4cddc7ff4dd71a85d3564013ac5abbe41 Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Sat, 23 Nov 2024 04:28:54 +0100 Subject: [PATCH 008/181] Deprecate the Advanced Large Gas turbine (#3537) --- .../machines/multi/MTELargeTurbineGas.java | 2 -- .../machines/multi/MTELargeTurbineGasAdvanced.java | 2 +- .../java/gregtech/loaders/load/MTERecipeLoader.java | 11 ----------- 3 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java index a125b5bf335..4285d1e7c37 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java @@ -57,8 +57,6 @@ protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); tt.addMachineType("Gas Turbine") .addInfo("Needs a Turbine, place inside controller") - .addInfo("Warning: Will be capped at 8192 EU/t in a future update") - .addInfo("See the Advanced Large Gas Turbine as the next, uncapped, option") // .addInfo("The excess fuel that gets consumed will be voided!") .addPollutionAmount(getPollutionPerSecond(null)) .beginStructureBlock(3, 3, 4, true) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java index b17c8b325af..3af7dd37dde 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java @@ -57,7 +57,7 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); tt.addMachineType("Gas Turbine") - .addInfo(EnumChatFormatting.DARK_RED + "Warning: This is an experimental multiblock, subject to changes ") + .addInfo(EnumChatFormatting.RED + "DEPRECATED! This machine will be removed in the next major update.") .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") diff --git a/src/main/java/gregtech/loaders/load/MTERecipeLoader.java b/src/main/java/gregtech/loaders/load/MTERecipeLoader.java index 46c55dbd828..d13740917bf 100644 --- a/src/main/java/gregtech/loaders/load/MTERecipeLoader.java +++ b/src/main/java/gregtech/loaders/load/MTERecipeLoader.java @@ -2193,11 +2193,6 @@ private static void registerShapedCraftingRecipes() { 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, @@ -3492,12 +3487,6 @@ private static void registerShapedCraftingRecipes() { 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), From c7cb999dfb09b3b6c04d1eb13e30120ee7c7b76e Mon Sep 17 00:00:00 2001 From: Ableytner <56540036+Ableytner@users.noreply.github.com> Date: Sat, 23 Nov 2024 07:57:42 +0100 Subject: [PATCH 009/181] Fix NEI preview for Implosion Compressor and Density^2 (#3522) Co-authored-by: Martin Robertz Co-authored-by: Mary <33456283+FourIsTheNumber@users.noreply.github.com> --- .../machines/multi/MTEImplosionCompressor.java | 14 ++++++++++++++ .../advanced/MTEAdvImplosionCompressor.java | 13 +++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEImplosionCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEImplosionCompressor.java index 742ff79ff60..6a264133c03 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEImplosionCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEImplosionCompressor.java @@ -2,14 +2,22 @@ import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +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_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 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 gregtech.GTMod; @@ -17,6 +25,7 @@ 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.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -123,6 +132,11 @@ protected IStructureElement> getCasingElement() { return ofChain(ofBlock(GregTechAPI.sBlockCasings2, 0), ofBlock(GregTechAPI.sBlockCasings3, 4)); } + @Override + protected List>> getAllowedHatches() { + return ImmutableList.of(InputBus, OutputBus, Maintenance, Energy, Muffler); + } + @Override protected int getHatchTextureIndex() { return 16; 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 index 58e86b705b8..a2d19200ced 100644 --- 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 @@ -14,7 +14,9 @@ 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; @@ -30,7 +32,8 @@ import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -public class MTEAdvImplosionCompressor extends GTPPMultiBlockBase { +public class MTEAdvImplosionCompressor extends GTPPMultiBlockBase + implements ISurvivalConstructable { private int mCasing; private static IStructureDefinition STRUCTURE_DEFINITION = null; @@ -86,7 +89,7 @@ public IStructureDefinition getStructureDefinition() ofChain( buildHatchAdder(MTEAdvImplosionCompressor.class) .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(48) + .casingIndex(getCasingTextureId()) .dot(1) .build(), onElementPass(x -> ++x.mCasing, ofBlock(sBlockCasings4, 0)))) @@ -100,6 +103,12 @@ 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; From d1cb09ae0925d6e67784ab541da2ec90f4671153 Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Sat, 23 Nov 2024 22:00:28 +0800 Subject: [PATCH 010/181] fix turbine overlay not being shown in NEI preview (#3530) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Martin Robertz --- .../implementations/MTEMultiBlockBase.java | 2 ++ .../machines/multi/MTELargeTurbine.java | 23 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index f8babfb7ecc..1958b4aa3f2 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -1008,6 +1008,8 @@ public int getPollutionPerTick(ItemStack aStack) { /** * Gets the pollution produced per second by this multiblock, default to 0. Override this with its actual value in * the code of the multiblock. + * + * This returns the unmodified raw pollution value, not the one after muffler discounts. */ public int getPollutionPerSecond(ItemStack aStack) { return 0; diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java index c9c643de8c5..725cf50d446 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java @@ -45,6 +45,7 @@ import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Dyes; import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IHatchElement; import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.items.MetaGeneratedTool; @@ -81,8 +82,7 @@ protected IStructureDefinition computeValue(Class type) { .addElement( 'h', lazy( - t -> buildHatchAdder(MTELargeTurbine.class) - .atLeast(Maintenance, InputHatch, OutputHatch, OutputBus, InputBus, Muffler) + t -> buildHatchAdder(MTELargeTurbine.class).atLeast(t.getHatchElements()) .casingIndex(t.getCasingTextureIndex()) .dot(2) .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) @@ -144,6 +144,25 @@ public boolean isRotationChangeAllowed() { return false; } + @SuppressWarnings("unchecked") + protected IHatchElement[] getHatchElements() { + if (getPollutionPerTick(null) == 0) + return new IHatchElement[] { Maintenance, InputHatch, OutputHatch, OutputBus, InputBus }; + return new IHatchElement[] { Maintenance, InputHatch, OutputHatch, OutputBus, InputBus, Muffler }; + } + + @Override + public boolean checkStructure(boolean aForceReset, IGregTechTileEntity aBaseMetaTileEntity) { + boolean f = super.checkStructure(aForceReset, aBaseMetaTileEntity); + if (f && getBaseMetaTileEntity().isServerSide()) { + // while is this a client side field, blockrenderer will reuse the server world for client side rendering + // so we must set it as well... + mFormed = true; + return true; + } + return f; + } + @Override public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { return checkPiece(STRUCTURE_PIECE_MAIN, 2, 2, 1) && mMaintenanceHatches.size() == 1 From 65f01576cae54415ada2153d6b013543e14ea3c4 Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Sat, 23 Nov 2024 15:10:37 +0100 Subject: [PATCH 011/181] Fix SOFC Mk2 fuel efficiency (#3532) Co-authored-by: Martin Robertz --- .../kekztech/common/tileentities/MTESOFuelCellMK2.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/kekztech/common/tileentities/MTESOFuelCellMK2.java b/src/main/java/kekztech/common/tileentities/MTESOFuelCellMK2.java index b7dd5b56525..8c4afee48e0 100644 --- a/src/main/java/kekztech/common/tileentities/MTESOFuelCellMK2.java +++ b/src/main/java/kekztech/common/tileentities/MTESOFuelCellMK2.java @@ -97,7 +97,7 @@ protected MultiblockTooltipBuilder createTooltip() { + "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("Outputs " + EU_PER_TICK + "EU/t and " + STEAM_PER_SEC + "L/s Superheated Steam") .addInfo("Additionally, requires " + OXYGEN_PER_SEC + "L/s Oxygen gas") .beginStructureBlock(3, 3, 5, false) .addController("Front center") @@ -158,7 +158,8 @@ public CheckRecipeResult checkProcessing() { 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); + liquid.amount = (int) ((EU_PER_TICK * 20) + / (aFuel.mSpecialValue * Math.max(1, (float) aFuel.mSpecialValue / 1000))); if (super.depleteInput(liquid)) { @@ -170,7 +171,7 @@ public CheckRecipeResult checkProcessing() { super.mEUt = EU_PER_TICK; super.mMaxProgresstime = 20; - super.mEfficiencyIncrease = 80; + super.mEfficiencyIncrease = 200; if (super.mEfficiency == getMaxEfficiency(null)) { super.addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", STEAM_PER_SEC)); } From 3605cfcc3f4b0a77294a98867f2d6f12c146e664 Mon Sep 17 00:00:00 2001 From: Lyft <127234178+Lyfts@users.noreply.github.com> Date: Sat, 23 Nov 2024 15:17:17 +0100 Subject: [PATCH 012/181] Use ofBlocksTiered for steam water pump structure (#3521) Co-authored-by: Martin Robertz --- .../processing/steam/MTESteamWaterPump.java | 94 ++++++++----------- 1 file changed, 40 insertions(+), 54 deletions(-) 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 index 8765866b681..8b592a1cc1e 100644 --- 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 @@ -1,15 +1,16 @@ 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.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.OutputHatch; import static gregtech.api.util.GTStructureUtility.buildHatchAdder; -import static gregtech.api.util.GTStructureUtility.ofFrame; 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; @@ -22,8 +23,10 @@ import net.minecraftforge.fluids.FluidRegistry; 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.structure.IStructureDefinition; @@ -76,8 +79,7 @@ public String getMachineType() { 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"; + private static final String STRUCTURE_PIECE_MAIN = "main"; // Base amount of water produced per second, before applying humidity and tier modifiers. private static final int BASE_WATER_PER_SECOND = 1_500; @@ -85,7 +87,7 @@ public String getMachineType() { private static final int BASE_STEAM_PER_SECOND = 1_500; - private int mSetTier = 1; + private int mSetTier = -1; private float currentHumidity; @@ -99,8 +101,7 @@ private FluidStack[] getWater() { private float getHumidity() { return this.getBaseMetaTileEntity() - .getWorld() - .getBiomeGenForCoords(getBaseMetaTileEntity().getXCoord(), getBaseMetaTileEntity().getZCoord()).rainfall; + .getBiome().rainfall; } private int calculateFinalWaterOutput() { @@ -113,23 +114,15 @@ public IStructureDefinition getStructureDefinition() { if (STRUCTURE_DEFINITION == null) { STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - tier1, + STRUCTURE_PIECE_MAIN, 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('A', ofBlocksTiered(MTESteamWaterPump::getFrameTier, ImmutableList.of(Pair.of(GregTechAPI.sBlockFrames, Materials.Bronze.mMetaItemSubID), + Pair.of(GregTechAPI.sBlockFrames, Materials.Steel.mMetaItemSubID)), -1, (pump, tier) -> pump.mSetTier = tier , pump -> pump.mSetTier)) .addElement( 'C', ofChain( @@ -151,59 +144,52 @@ public IStructureDefinition getStructureDefinition() { } // spotless:on + public static int getFrameTier(Block block, int meta) { + if (block == GregTechAPI.sBlockFrames) { + if (meta == Materials.Bronze.mMetaItemSubID) return 1; + if (meta == Materials.Steel.mMetaItemSubID) return 2; + } + return 0; + } + @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); - } + 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; - 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; + return this.survivialBuildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET, + elementBudget, + env, + false, + true); } 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; + mSetTier = -1; + + if (!checkPiece(STRUCTURE_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) { + return false; } if (this.mOutputHatches.size() != 1 || this.mSteamInputFluids.size() != 1) return false; currentHumidity = getHumidity(); - return mCountCasing >= 9; + return mCountCasing >= 9 && mSetTier > 0; } @Override From 78fc5e969340e0f28617ce2e51480ecf2e0f5628 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sat, 23 Nov 2024 16:13:56 +0100 Subject: [PATCH 013/181] update --- dependencies.gradle | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 7406b7a7ff8..bd80e061482 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -39,8 +39,8 @@ dependencies { api("com.github.GTNewHorizons:NotEnoughItems:2.6.46-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") api("com.github.GTNewHorizons:GTNHLib:0.5.20:dev") - api("com.github.GTNewHorizons:ModularUI:1.2.14:dev") - api("com.github.GTNewHorizons:ModularUI2:2.1.14-1.7.10:dev") + api("com.github.GTNewHorizons:ModularUI:1.2.16:dev") + api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-477-GTNH:dev") api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.3.48-gtnh:dev") @@ -48,7 +48,7 @@ dependencies { api("com.github.GTNewHorizons:Postea:1.0.13:dev") compileOnlyApi('com.github.GTNewHorizons:ThaumicTinkerer:2.10.2:dev') - compileOnlyApi("com.github.GTNewHorizons:Mobs-Info:0.4.6-GTNH:dev") + compileOnlyApi("com.github.GTNewHorizons:Mobs-Info:0.4.7-GTNH:dev") compileOnlyApi("com.github.GTNewHorizons:Navigator:1.0.15:dev") implementation('com.github.GTNewHorizons:Baubles:1.0.4:dev') {transitive=false} // Required to prevent an older bauble api from Extra Utilities from loading first in the javac classpath @@ -62,7 +62,7 @@ dependencies { compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.3:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.8.22:dev") { transitive = false } - compileOnlyApi("com.github.GTNewHorizons:ForestryMC:4.9.18:dev") { transitive = false } + compileOnlyApi("com.github.GTNewHorizons:ForestryMC:4.9.19:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:ProjectRed:4.10.5-GTNH:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:Railcraft:9.15.15:dev") { transitive = false } @@ -89,7 +89,7 @@ dependencies { // https://www.curseforge.com/minecraft/mc-mods/advancedsolarpanels compileOnlyApi rfg.deobf('curse.maven:advsolar-362768:2885953') compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.6.27-GTNH:dev') {transitive = false} - compileOnly("com.github.GTNewHorizons:BloodMagic:1.6.7:dev") { transitive = false } + compileOnly("com.github.GTNewHorizons:BloodMagic:1.6.9:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:CraftTweaker:3.4.0:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:BetterLoadingScreen:1.7.0-GTNH:dev") { transitive = false } compileOnly rfg.deobf("curse.maven:biomes-o-plenty-220318:2499612") @@ -103,7 +103,7 @@ dependencies { annotationProcessor("com.google.auto.value:auto-value:1.10.1") // For testing forestry integration (iApiary, combs, tree growth simulator) - // runtimeOnlyNonPublishable("com.github.GTNewHorizons:ForestryMC:4.9.18:dev") + // runtimeOnlyNonPublishable("com.github.GTNewHorizons:ForestryMC:4.9.19:dev") // runtimeOnlyNonPublishable('com.github.GTNewHorizons:neiaddons:1.16.0:dev') // runtimeOnlyNonPublishable('com.github.GTNewHorizons:MagicBees:2.8.5-GTNH:dev') // runtimeOnlyNonPublishable('com.github.GTNewHorizons:Binnie:2.4.4:dev') From 0d21b90f079fdb88becea5e3dff6a2b32c3a4028 Mon Sep 17 00:00:00 2001 From: Ruling-0 <47913168+Ruling-0@users.noreply.github.com> Date: Sat, 23 Nov 2024 13:09:06 -0600 Subject: [PATCH 014/181] Reworked Fluid Shaper Parallels, Tooltip Cleanup, Structure Change (#3508) Co-authored-by: Martin Robertz Co-authored-by: TheEpicGamer274 <102255081+TheEpicGamer274@users.noreply.github.com> --- .../machines/multi/MTEMultiSolidifier.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiSolidifier.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiSolidifier.java index d6c32a2185c..c371c8cd2c0 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiSolidifier.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiSolidifier.java @@ -75,6 +75,7 @@ public class MTEMultiSolidifier extends MTEExtendedPowerMultiBlockBase= (91 + width * 20) && mMaintenanceHatches.size() == 1; + return casingAmount >= (91 + width * 20); } @Override @@ -344,7 +345,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } public int getMaxParallelRecipes() { - return 4 + (width * PARALLELS_PER_WIDTH) * GTUtility.getTier(this.getMaxInputVoltage()); + return (BASE_PARALLELS + (width * PARALLELS_PER_WIDTH)) * GTUtility.getTier(this.getMaxInputVoltage()); } @Override From 3745d43a23869bf0732294f1cbc901e7c2917688 Mon Sep 17 00:00:00 2001 From: RecursivePineapple Date: Sat, 23 Nov 2024 16:19:55 -0500 Subject: [PATCH 015/181] Prevent LHE from consuming cold coolant (#3545) --- src/main/java/gregtech/api/registries/LHECoolantRegistry.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/gregtech/api/registries/LHECoolantRegistry.java b/src/main/java/gregtech/api/registries/LHECoolantRegistry.java index 084086c8417..f7f1834f7a8 100644 --- a/src/main/java/gregtech/api/registries/LHECoolantRegistry.java +++ b/src/main/java/gregtech/api/registries/LHECoolantRegistry.java @@ -30,7 +30,6 @@ public static void registerCoolant(String coldFluidName, String hotFluidName, do double superheatedThreshold) { var coolant = new LHECoolantInfo(coldFluidName, hotFluidName, steamMultiplier, superheatedThreshold); - lheCoolants.put(coldFluidName, coolant); lheCoolants.put(hotFluidName, coolant); } From d2793387ad86bc1191d47dd80f9ecca02e4af1da Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sat, 23 Nov 2024 22:24:45 +0100 Subject: [PATCH 016/181] update --- dependencies.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index bd80e061482..d90366c69ad 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -43,7 +43,7 @@ dependencies { api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-477-GTNH:dev") - api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.3.48-gtnh:dev") + api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.3.49-gtnh:dev") api('com.github.GTNewHorizons:Yamcl:0.6.0:dev') api("com.github.GTNewHorizons:Postea:1.0.13:dev") @@ -73,14 +73,14 @@ dependencies { compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.97-GTNH:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.5-GTNH:dev") { transitive = false } - implementation("com.github.GTNewHorizons:TinkersConstruct:1.12.15-GTNH:dev") + implementation("com.github.GTNewHorizons:TinkersConstruct:1.12.16-GTNH:dev") compileOnly("com.github.GTNewHorizons:Chisel:2.15.3-GTNH:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:Translocators:1.2.1:dev") { transitive = false } compileOnly rfg.deobf("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:Nuclear-Control:2.6.7:dev") { transitive = false } compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") { transitive = false } - implementation("com.github.GTNewHorizons:Hodgepodge:2.5.79:dev") + implementation("com.github.GTNewHorizons:Hodgepodge:2.5.80:dev") compileOnly('com.github.GTNewHorizons:Botania:1.11.5-GTNH:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:HoloInventory:2.4.13-GTNH:dev') { transitive = false } compileOnly rfg.deobf("curse.maven:extra-utilities-225561:2264384") From eb61c36844bbe980bf87f8f6f438c3ce41745fa3 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:25:15 -0600 Subject: [PATCH 017/181] Fix non-elemental plasma cells (#3543) Co-authored-by: Martin Robertz --- .../java/gregtech/api/enums/Materials.java | 3 --- .../gregtech/api/enums/MaterialsUEVplus.java | 2 +- .../common/items/MetaGeneratedItem01.java | 18 +++++++++--------- .../loaders/preload/LoaderGTBlockFluid.java | 2 +- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/main/java/gregtech/api/enums/Materials.java b/src/main/java/gregtech/api/enums/Materials.java index 3493e640ff6..9417ea0aa36 100644 --- a/src/main/java/gregtech/api/enums/Materials.java +++ b/src/main/java/gregtech/api/enums/Materials.java @@ -2648,9 +2648,6 @@ private static void addHasGasFluid(Materials aMaterial) { return; } - if (aMaterial.mHasPlasma) { - GTMod.gregtechproxy.addAutogeneratedPlasmaFluid(aMaterial); - } if (aMaterial.mHasGas) { GTFluidFactory .of(aMaterial.mName.toLowerCase(), aMaterial.mDefaultLocalName, aMaterial, GAS, aMaterial.mGasTemp); diff --git a/src/main/java/gregtech/api/enums/MaterialsUEVplus.java b/src/main/java/gregtech/api/enums/MaterialsUEVplus.java index 7c14ff2f141..d974ace85e8 100644 --- a/src/main/java/gregtech/api/enums/MaterialsUEVplus.java +++ b/src/main/java/gregtech/api/enums/MaterialsUEVplus.java @@ -701,7 +701,7 @@ public class MaterialsUEVplus { 1.0F, 8 * 2621440, 26, - 1 | 2 | 64 | 128, + 1 | 2 | 32 | 64 | 128, 70, 0, 70, diff --git a/src/main/java/gregtech/common/items/MetaGeneratedItem01.java b/src/main/java/gregtech/common/items/MetaGeneratedItem01.java index 32c2254374e..e217c3994ff 100644 --- a/src/main/java/gregtech/common/items/MetaGeneratedItem01.java +++ b/src/main/java/gregtech/common/items/MetaGeneratedItem01.java @@ -460,7 +460,6 @@ 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; @@ -3511,15 +3510,16 @@ protected void addAdditionalToolTips(List aList, ItemStack aStack, Entit } 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) + // Materials has a plasma fluid + if (aPrefix == OrePrefixes.cellPlasma && aMaterial.getPlasma(1L) != null) { + if (aMaterial.mHasPlasma) return true; + // Loop through fusion recipes + for (GTRecipe recipe : RecipeMaps.fusionRecipes.getAllRecipes()) { + // Make sure fluid output can't be null (not sure if possible) + if (recipe.getFluidOutput(0) != null) { + // Fusion recipe output matches current plasma cell fluid if (recipe.getFluidOutput(0) - .isFluidEqual(aMaterial.getPlasma(1L))) return true; // Fusion recipe - // output matches - // current plasma - // cell fluid + .isFluidEqual(aMaterial.getPlasma(1L))) return true; } } } diff --git a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java index 48921c3bc4d..4324763bd32 100644 --- a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java +++ b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java @@ -1471,7 +1471,7 @@ public void run() { GTMod.gregtechproxy.addAutogeneratedMoltenFluid(tMaterial.mSmeltInto); } } - if (tMaterial.mElement != null) { + if (tMaterial.mElement != null || tMaterial.mHasPlasma) { GTMod.gregtechproxy.addAutogeneratedPlasmaFluid(tMaterial); } if (tMaterial.hasCorrespondingFluid()) { From 48951c5c4a5e9b9e4850ce66a83f8f9aca8d1f3f Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Sat, 23 Nov 2024 19:32:25 -0300 Subject: [PATCH 018/181] Fixed Antimatter Forge Tricoder info (#3540) Co-authored-by: Martin Robertz --- .../java/goodgenerator/blocks/tileEntity/AntimatterForge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java index 9380ea349a9..312f8f48b6e 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java @@ -781,7 +781,7 @@ public String[] getInfoData() { + EnumChatFormatting.AQUA + GTUtility.formatNumbers(this.guiAntimatterChange) + EnumChatFormatting.RESET - + " EU/t" }; + + " L" }; } private long getAntimatterAmount() { From 5bbee72c52ca26597c14266642aa368b0fe964c6 Mon Sep 17 00:00:00 2001 From: Alexdoru <57050655+Alexdoru@users.noreply.github.com> Date: Sat, 23 Nov 2024 23:38:58 +0100 Subject: [PATCH 019/181] make the cover tooltips respect the advancedItemTooltips setting (#3536) Co-authored-by: Martin Robertz --- .../java/gregtech/api/metatileentity/CoverableTileEntity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java index 7669cf8b27b..c9376504f60 100644 --- a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java @@ -746,7 +746,8 @@ protected List getCoverTabTooltip(ForgeDirection side, ISerializableObje if (coverItem == null) return Collections.emptyList(); final boolean coverHasGUI = coverInfo.hasCoverGUI(); - final List tooltip = coverItem.getTooltip(Minecraft.getMinecraft().thePlayer, true); + final Minecraft mc = Minecraft.getMinecraft(); + final List tooltip = coverItem.getTooltip(mc.thePlayer, mc.gameSettings.advancedItemTooltips); final ImmutableList.Builder builder = ImmutableList.builder(); builder.add( (coverHasGUI ? EnumChatFormatting.UNDERLINE : EnumChatFormatting.DARK_GRAY) From c5dbc178fae9bddc942d56e05a0069f34682c9b0 Mon Sep 17 00:00:00 2001 From: Elisis Date: Sun, 24 Nov 2024 09:45:08 +1100 Subject: [PATCH 020/181] Remove empty Auto-generated BW Centrifuge, Electrolyzer, etc. recipes (#3524) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Martin Robertz --- .../werkstoff_loaders/recipe/CellLoader.java | 252 +++++++------- .../werkstoff_loaders/recipe/DustLoader.java | 308 +++++++++--------- 2 files changed, 294 insertions(+), 266 deletions(-) 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 index 5b24b1e6ee3..e9f85b17009 100644 --- a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CellLoader.java +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CellLoader.java @@ -43,6 +43,7 @@ import gregtech.api.interfaces.ISubTagContainer; import gregtech.api.recipe.RecipeCategories; 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; @@ -61,153 +62,168 @@ public void run(Werkstoff werkstoff) { || 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() + + if (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) { + .size() > 0) { + + 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()).getCells(container.getValue())); + 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()).getCells( + ((Materials) container.getKey()).getDust( 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 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 { - 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 (!((Werkstoff) container.getKey()).hasItemType(dust)) continue; if (!tracker.containsKey(container.getKey())) { - stOutputs.add(((Werkstoff) container.getKey()).get(cell, container.getValue())); + 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( - cell, + dust, 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; + ItemStack input = werkstoff.get(cell); + input.stackSize = 1; - int cellEmpty = cells - 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.isEmpty() ? 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.isEmpty() ? 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)); + 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.isEmpty() ? 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.isEmpty() ? 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)); + } else { + GTLog.err.println( + "Autogenerated recipe(s) using Werkstoff material '" + werkstoff.getDefaultName() + + "' (fluid) removed due to no contents in material definition."); + } } // Tank "Recipe" 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 index 04db75e0d39..187ca174d7a 100644 --- a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/DustLoader.java +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/DustLoader.java @@ -47,6 +47,7 @@ import gregtech.api.enums.TierEU; import gregtech.api.interfaces.ISubTagContainer; import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTLog; import gregtech.api.util.GTModHandler; import gregtech.api.util.GTRecipe; import gregtech.api.util.GTRecipeConstants; @@ -71,50 +72,94 @@ public void run(Werkstoff werkstoff) { || werkstoffStats.isCentrifuge() || werkstoff.getGenerationFeatures() .hasChemicalRecipes()) { - for (Pair container : werkstoff.getContents() + + if (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) { + .size() > 0) { + + 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.getCells(value)); + stOutputs.add(materialKey.getDust(value)); tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); } else { stOutputs.add( - materialKey.getCells( + materialKey.getDust( 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); + } 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 = materialKey.getSolid(1000L * value); + tmpFl = werkstoffKey.getFluidOrGas(1000 * value); } flOutputs.add(tmpFl); if (flOutputs.size() > 1) { if (!tracker.containsKey(key)) { - stOutputs.add(materialKey.getCells(value)); + stOutputs.add(werkstoffKey.get(cell, value)); tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); } else { stOutputs.add( - materialKey.getCells( + werkstoffKey.get( + cell, tracker.get(key) .getKey() + value)); stOutputs.remove( @@ -123,92 +168,29 @@ public void run(Werkstoff werkstoff) { } 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 (!werkstoffKey.hasItemType(dust)) continue; if (!tracker.containsKey(key)) { - stOutputs.add(werkstoffKey.get(cell, value)); + stOutputs.add(werkstoffKey.get(dust, value)); tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); } else { stOutputs.add( werkstoffKey.get( - cell, + dust, 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 (werkstoffStats.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.isEmpty() ? flOutputs.get(0) : null }, - (int) Math.max( - 1L, - Math.abs( - werkstoffStats.getProtons() / werkstoff.getContents() - .getValue() - .size())), - Math.min( - 4, - werkstoff.getContents() - .getValue() - .size()) - * 30, - 0); - RecipeMaps.electrolyzerRecipes.add(tRecipe); - } - if (werkstoffStats.isCentrifuge()) { - RecipeMaps.centrifugeRecipes.add( - new GTRecipe( + ItemStack input = werkstoff.get(dust); + input.stackSize = werkstoff.getContents() + .getKey(); + if (werkstoffStats.isElektrolysis()) { + GTRecipe tRecipe = new GTRecipe( true, new ItemStack[] { input, cells > 0 ? Materials.Empty.getCells(cells) : null }, stOutputs.toArray(new ItemStack[0]), @@ -219,7 +201,7 @@ public void run(Werkstoff werkstoff) { (int) Math.max( 1L, Math.abs( - werkstoffStats.getMass() / werkstoff.getContents() + werkstoffStats.getProtons() / werkstoff.getContents() .getValue() .size())), Math.min( @@ -227,60 +209,90 @@ public void run(Werkstoff werkstoff) { werkstoff.getContents() .getValue() .size()) - * 5, - 0)); - } - 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( - werkstoffStats.getProtons() / werkstoff.getContents() + * 30, + 0); + RecipeMaps.electrolyzerRecipes.add(tRecipe); + } + if (werkstoffStats.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.isEmpty() ? flOutputs.get(0) : null }, + (int) Math.max( + 1L, + Math.abs( + werkstoffStats.getMass() / werkstoff.getContents() + .getValue() + .size())), + Math.min( + 4, + 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.isEmpty() ? flOutputs.get(0) : null }, - null, - (int) Math.max( - 1L, - Math.abs( - werkstoffStats.getMass() / werkstoff.getContents() + .size()) + * 5, + 0)); + } + 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( + werkstoffStats.getProtons() / werkstoff.getContents() + .getValue() + .size()))) + .eut( + Math.min( + 4, + werkstoff.getContents() .getValue() - .size())), - Math.min( - 4, - werkstoff.getContents() - .getValue() - .size()) - * 5, - 0)); + .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.isEmpty() ? flOutputs.get(0) : null }, + null, + (int) Math.max( + 1L, + Math.abs( + werkstoffStats.getMass() / werkstoff.getContents() + .getValue() + .size())), + Math.min( + 4, + werkstoff.getContents() + .getValue() + .size()) + * 5, + 0)); + } + } else { + GTLog.err.println( + "Autogenerated recipe(s) using Werkstoff material '" + werkstoff.getDefaultName() + + "' (dust) removed due to no contents in material definition."); } } From 7ca90bbf27193f9101a04e3058a4e33960d06fef Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:55:08 -0600 Subject: [PATCH 021/181] Add dyson swarm controller MTE ID (#3519) --- src/main/java/gregtech/api/enums/MetaTileEntityIDs.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java index ad95e303b7b..1d761dd315e 100644 --- a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java +++ b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java @@ -1476,6 +1476,7 @@ public enum MetaTileEntityIDs { WORMHOLE_GENERATOR_CONTROLLER(13115), MegaChemicalReactor(13366), MegaOilCracker(13367), + DysonSwarmController(14001), PlanetaryGasSiphonController(14002), SpaceElevatorController(14003), SpaceElevatorModuleAssemblerT1(14004), From 2449dbf9168456d49f0cf29097ff780f6cd63deb Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sat, 23 Nov 2024 17:04:01 -0600 Subject: [PATCH 022/181] Add blockrenderer as a runtime dep (#3544) --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index d90366c69ad..794de351eeb 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -97,7 +97,7 @@ dependencies { compileOnly('com.github.GTNewHorizons:SC2:2.2.0:dev') {transitive=false} compileOnly('com.github.GTNewHorizons:Binnie:2.4.4:dev') {transitive = false} compileOnly('curse.maven:PlayerAPI-228969:2248928') {transitive=false} - compileOnly('com.github.GTNewHorizons:BlockRenderer6343:1.2.14:dev'){transitive=false} + devOnlyNonPublishable('com.github.GTNewHorizons:BlockRenderer6343:1.2.14:dev'){transitive=false} compileOnly("com.google.auto.value:auto-value-annotations:1.10.1") { transitive = false } annotationProcessor("com.google.auto.value:auto-value:1.10.1") From 9ce867e5aa95d2f8a8a809e33b3a0fb874e3b36b Mon Sep 17 00:00:00 2001 From: Elisis Date: Sun, 24 Nov 2024 10:14:22 +1100 Subject: [PATCH 023/181] Beamline fixes 4 (#3504) Co-authored-by: BlueHero233 Co-authored-by: Martin Robertz Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Ethryan <3237986+Ethryan@users.noreply.github.com> --- .../common/beamline/BeamLinePacket.java | 4 +- .../item/ItemPhotolithographicMask.java | 7 +- .../java/gtnhlanth/common/item/MaskList.java | 131 ++++++++++++------ .../common/register/LanthItemList.java | 1 - .../register/WerkstoffMaterialPool.java | 14 +- .../gtnhlanth/common/tileentity/MTELINAC.java | 48 +++---- .../common/tileentity/MTESourceChamber.java | 7 +- .../common/tileentity/MTESynchrotron.java | 119 ++++++++++++---- .../common/tileentity/MTETargetChamber.java | 80 ++++++++--- .../recipe/beamline/BeamlineRecipeLoader.java | 110 ++++++++------- .../java/gtnhlanth/loader/RecipeLoader.java | 75 +++++++--- .../MACHINE_CASING_SHIELDED_ACCELERATOR.png | Bin 696 -> 726 bytes .../assets/gtnhlanth/lang/en_US.lang | 2 +- .../textures/blocks/casing.antenna_t1.png | Bin 4354 -> 804 bytes .../textures/blocks/casing.antenna_t2.png | Bin 645 -> 807 bytes .../blocks/casing.coolant_delivery.png | Bin 684 -> 836 bytes .../textures/blocks/casing.electrode.png | Bin 599 -> 971 bytes .../blocks/casing.electrode.png.mcmeta | 6 + .../blocks/casing.focus_manipulator.png | Bin 799 -> 740 bytes .../blocks/casing.shielded_accelerator.png | Bin 696 -> 726 bytes .../casing.shielded_accelerator_glass.png | Bin 607 -> 653 bytes .../blocks/casing.target_receptacle.png | Bin 719 -> 714 bytes .../gtnhlanth/textures/items/etched_mask1.png | Bin 769 -> 693 bytes .../textures/items/iron_quartz_plate.png | Bin 876 -> 700 bytes .../textures/items/mask_substrate.png | Bin 614 -> 652 bytes .../textures/items/masked_mask_substrate.png | Bin 694 -> 718 bytes .../textures/items/photomask/acc.png | Bin 0 -> 921 bytes .../textures/items/photomask/asoc.png | Bin 1977 -> 936 bytes .../textures/items/photomask/blank1.png | Bin 910 -> 931 bytes .../textures/items/photomask/blank2.png | Bin 910 -> 784 bytes .../textures/items/photomask/blank3.png | Bin 910 -> 900 bytes .../textures/items/photomask/cblank.png | Bin 0 -> 742 bytes .../textures/items/photomask/ccpu.png | Bin 0 -> 874 bytes .../textures/items/photomask/ccpu2.png | Bin 0 -> 1494 bytes .../textures/items/photomask/cpu.png | Bin 1862 -> 913 bytes .../textures/items/photomask/csoc.png | Bin 0 -> 823 bytes .../textures/items/photomask/hpic.png | Bin 2069 -> 882 bytes .../textures/items/photomask/ilc.png | Bin 1757 -> 985 bytes .../textures/items/photomask/lcc.png | Bin 0 -> 824 bytes .../textures/items/photomask/lpic.png | Bin 2051 -> 999 bytes .../textures/items/photomask/nand.png | Bin 1603 -> 848 bytes .../textures/items/photomask/ncpu.png | Bin 2047 -> 858 bytes .../textures/items/photomask/nor.png | Bin 1674 -> 838 bytes .../textures/items/photomask/npic.png | Bin 2071 -> 888 bytes .../textures/items/photomask/pic.png | Bin 2012 -> 879 bytes .../textures/items/photomask/ppic.png | Bin 2054 -> 880 bytes .../textures/items/photomask/prcpu.png | Bin 0 -> 934 bytes .../textures/items/photomask/prhpic.png | Bin 0 -> 887 bytes .../textures/items/photomask/prncpu.png | Bin 0 -> 899 bytes .../textures/items/photomask/prnpic.png | Bin 0 -> 891 bytes .../textures/items/photomask/prpic.png | Bin 0 -> 884 bytes .../textures/items/photomask/qbit.png | Bin 2019 -> 865 bytes .../textures/items/photomask/qpic.png | Bin 2062 -> 880 bytes .../textures/items/photomask/ram.png | Bin 1758 -> 993 bytes .../textures/items/photomask/soc.png | Bin 2063 -> 862 bytes .../textures/items/photomask/ssoc.png | Bin 2194 -> 1033 bytes .../textures/items/photomask/uhpic.png | Bin 2069 -> 888 bytes .../textures/items/photomask/ulpic.png | Bin 2035 -> 983 bytes .../textures/items/substrate_precursor.png | Bin 621 -> 598 bytes 59 files changed, 395 insertions(+), 209 deletions(-) create mode 100644 src/main/resources/assets/gtnhlanth/textures/blocks/casing.electrode.png.mcmeta create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/acc.png create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/cblank.png create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/ccpu.png create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/ccpu2.png create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/csoc.png create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/lcc.png create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/prcpu.png create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/prhpic.png create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/prncpu.png create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/prnpic.png create mode 100644 src/main/resources/assets/gtnhlanth/textures/items/photomask/prpic.png diff --git a/src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java b/src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java index 7137c6ab7de..fb7bab1f1db 100644 --- a/src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java +++ b/src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java @@ -16,9 +16,7 @@ public BeamLinePacket(NBTTagCompound compound) { @Override protected BeamInformation contentFromNBT(NBTTagCompound nbt) { - /* - * NBTTagCompound compound = nbt.getCompoundTag("beamline"); - */ + return new BeamInformation( nbt.getFloat("energy"), nbt.getInteger("rate"), diff --git a/src/main/java/gtnhlanth/common/item/ItemPhotolithographicMask.java b/src/main/java/gtnhlanth/common/item/ItemPhotolithographicMask.java index 30cbac875ba..c96212c8e61 100644 --- a/src/main/java/gtnhlanth/common/item/ItemPhotolithographicMask.java +++ b/src/main/java/gtnhlanth/common/item/ItemPhotolithographicMask.java @@ -23,9 +23,6 @@ public ItemPhotolithographicMask(String name, int maxDamage, String descSpectrum 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) { @@ -33,6 +30,10 @@ public void addInformation(ItemStack stack, EntityPlayer player, List list, bool if (!this.descSpectrum.isEmpty()) list.add("Suitable for the " + this.descSpectrum + " segment of the electromagnetic spectrum and lower"); + if (this.getMaxDamage() > 0) // Not a precursor. + list.add("Max Uses: " + (this.getMaxDamage() + 1)); // maximum uses = max damage + 1 in general, as + // 0-durability masks still function + } public String getDescSpectrum() { diff --git a/src/main/java/gtnhlanth/common/item/MaskList.java b/src/main/java/gtnhlanth/common/item/MaskList.java index 594180da223..ea132ca3ee6 100644 --- a/src/main/java/gtnhlanth/common/item/MaskList.java +++ b/src/main/java/gtnhlanth/common/item/MaskList.java @@ -13,60 +13,94 @@ public enum MaskList { // 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), + // tcTargetItem specifies the target item used for non-wafer mask+TC recipes, e.g. crystal chips, set to null for + // wafer masks + ERROR("error", "ERROR", 0, "", null, null, 0, 0, 0, 0, 0, null, null), + BLANK1("blank1", "T1 Blank", 0, "VISIBLE", null, null, 0, 0, 0, 0, 0, null, null), + BLANK2("blank2", "T2 Blank", 0, "UV", null, null, 0, 0, 0, 0, 0, null, null), + BLANK3("blank3", "T3 Blank", 0, "X-RAY", null, null, 0, 0, 0, 0, 0, null, null), + + CBLANK("cblank", "Crystal", 0, "X-RAY", null, null, 0, 0, 0, 0, 0, null, null), // Better at resolving smaller + // features, in theory + 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)), + ItemList.Circuit_Wafer_ILC.get(1), null), 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), + ItemList.Circuit_Wafer_Ram.get(1), null, 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 + ItemList.Circuit_Wafer_NAND.get(1), null, ItemList.Circuit_Silicon_Wafer), // NAND uses only Ender Pearl lens, + // don't + // ask me why + NOR("nor", "NOR", 100, "", BLANK2, Dyes._NULL, TierEU.RECIPE_HV, 8e-3f, 10e-3f, 40, 1, + ItemList.Circuit_Wafer_NOR.get(1), null, 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)), + ItemList.Circuit_Wafer_CPU.get(1), null), + PrCPU("prcpu", "Prepared Central Processing Unit", 0, "", CPU, null, TierEU.RECIPE_EV, 0, 0, 0, 0, null, null), + 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), + ItemList.Circuit_Wafer_SoC.get(1), null, 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), + ItemList.Circuit_Wafer_SoC2.get(1), null, 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 + ItemList.Circuit_Wafer_PIC.get(1), null, ItemList.Circuit_Silicon_Wafer), + PrPIC("prpic", "Prepared Power IC", 0, "", PIC, null, TierEU.RECIPE_IV, 0, 0, 0, 0, null, null), // Made in CR from + // PIC + + HPIC("hpic", "High Power IC", 80, "", PrPIC, Dyes.dyeBlue, TierEU.RECIPE_IV, 100e-3f, 200e-3f, 50, 6, + ItemList.Circuit_Wafer_HPIC.get(1), null, ItemList.Circuit_Silicon_Wafer), + PrHPIC("prhpic", "Prepared High Power IC", 0, "", HPIC, null, TierEU.RECIPE_LuV, 0, 0, 0, 0, null, null), // Made in + // CR from + // HPIC + + NCPU("ncpu", "NanoCPU", 60, "", PrCPU, Dyes.dyeWhite, TierEU.RECIPE_EV, 5e-3f, 10e-3f, 50, 4, + ItemList.Circuit_Wafer_NanoCPU.get(1), null, ItemList.Circuit_Silicon_Wafer), + PrNCPU("prncpu", "Prepared NanoCPU", 0, "", NCPU, null, TierEU.RECIPE_EV, 0, 0, 0, 0, null, null), + + QBIT("qbit", "QBit", 50, "", PrNCPU, Dyes.dyeWhite, TierEU.RECIPE_EV, 3e-3f, 10e-3f, 50, 4, + ItemList.Circuit_Wafer_QuantumCPU.get(1), null, ItemList.Circuit_Silicon_Wafer), // ^ + UHPIC("uhpic", "Ultra High Power IC", 60, "", PrHPIC, Dyes.dyeBlue, TierEU.RECIPE_LuV, 190e-3f, 400e-3f, 50, 8, + ItemList.Circuit_Wafer_UHPIC.get(1), null, ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2), SSOC("ssoc", "Simple SoC", 150, "", BLANK1, Dyes.dyeOrange, TierEU.RECIPE_MV, 2e-3f, 4e-3f, 25, 1, - ItemList.Circuit_Wafer_Simple_SoC.get(1)), + ItemList.Circuit_Wafer_Simple_SoC.get(1), null), 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 + ItemList.Circuit_Wafer_ULPIC.get(1), null), // 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, 3000, 50, 4, - ItemList.Circuit_Wafer_NPIC.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2, + ItemList.Circuit_Wafer_LPIC.get(1), null), // Same as above, except for yellow + + NPIC("npic", "Nano Power IC", 70, "", BLANK2, Dyes.dyeRed, TierEU.RECIPE_LuV, 1, 4, 50, 4, + ItemList.Circuit_Wafer_NPIC.get(1), null, ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2, ItemList.Circuit_Silicon_Wafer3), // Same - PPIC("ppic", "PPIC", 50, "", BLANK3, null, TierEU.RECIPE_ZPM, 1.5f, 10, 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 + PrNPIC("prnpic", "Prepared Nano Power IC", 0, "", NPIC, null, TierEU.RECIPE_ZPM, 0, 0, 0, 0, null, null), // Made in + // CR from + // NPIC + + PPIC("ppic", "PPIC", 50, "", PrNPIC, Dyes.dyeRed, TierEU.RECIPE_ZPM, 1.5f, 10, 50, 6, + ItemList.Circuit_Wafer_PPIC.get(1), null, ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2, + ItemList.Circuit_Silicon_Wafer3), + + QPIC("qpic", "QPIC", 50, "", BLANK3, Dyes.dyeBlue, TierEU.RECIPE_UV, 3.2f, 9, 50, 6, + ItemList.Circuit_Wafer_QPIC.get(1), null, ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2, + ItemList.Circuit_Silicon_Wafer3, ItemList.Circuit_Silicon_Wafer4), // Different base mask to PIC + + CCPU("ccpu", "Crystal Central Processing Unit", 100, "", CBLANK, Dyes.dyeGreen, 10_000, 1, 3, 50, 6, + ItemList.Circuit_Chip_CrystalCPU.get(1), ItemList.Circuit_Parts_Crystal_Chip_Elite.get(1)), // For producing + // Crystal CPUs from + // Engraved CCs + CSOC("csoc", "Crystal SoC", 100, "", CBLANK, Dyes.dyeBlue, 40_000, 2, 7, 50, 8, + ItemList.Circuit_Chip_CrystalSoC.get(1), ItemList.Circuit_Chip_CrystalCPU.get(1)), + ACC("acc", "Advanced Crystal Chip", 100, "", CBLANK, Dyes.dyeLime, 80_000, 3, 9, 55, 12, + ItemList.Circuit_Chip_CrystalSoC2.get(1), ItemList.Circuit_Chip_CrystalSoC.get(1)), + LCC("lcc", "Living Crystal Chip", 75, "", CBLANK, Dyes.dyeWhite, 160_000, 5, 12, 60, 16, + ItemList.Circuit_Parts_Crystal_Chip_Wetware.get(1), ItemList.Circuit_Chip_CrystalSoC2.get(1)) + + ; String name; String englishName; @@ -85,17 +119,19 @@ public enum MaskList { float minFocus; int baselineAmount; + ItemStack tcTargetItem; ItemStack producedItem; ItemList[] forbiddenWafers; - MaskList(String name, String englishName, int maxDamage, String spectrum, MaskList precursor, Dyes lensColour, + MaskList(String name, String englishName, int maxUses, String spectrum, MaskList precursor, Dyes lensColour, long engraverEUt, float minEnergy, float maxEnergy, float minFocus, int baselineAmount, ItemStack producedItem, - ItemList... forbiddenWafers) { + ItemStack tcTargetItem, ItemList... forbiddenWafers) { this.name = name; this.englishName = englishName; this.spectrum = spectrum; - this.maxDamage = maxDamage; + this.maxDamage = maxUses - 1; // 0-durability masks still function, so e.g. maxUses = 100 corresponds to + // durability levels 0-99 this.precursor = precursor; this.lensColour = lensColour; this.engraverEUt = engraverEUt; @@ -103,6 +139,7 @@ public enum MaskList { this.minEnergy = minEnergy; this.maxEnergy = maxEnergy; this.baselineAmount = baselineAmount; + this.tcTargetItem = tcTargetItem; this.producedItem = producedItem; this.forbiddenWafers = forbiddenWafers; } @@ -151,6 +188,10 @@ public int getBaselineAmount() { return this.baselineAmount; } + public ItemStack getTCTargetItem() { + return this.tcTargetItem; + } + public ItemStack getProducedItem() { return this.producedItem; } diff --git a/src/main/java/gtnhlanth/common/register/LanthItemList.java b/src/main/java/gtnhlanth/common/register/LanthItemList.java index 50069131d65..400c1a8638e 100644 --- a/src/main/java/gtnhlanth/common/register/LanthItemList.java +++ b/src/main/java/gtnhlanth/common/register/LanthItemList.java @@ -70,7 +70,6 @@ public final class LanthItemList { 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); diff --git a/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java b/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java index 125f0f283fe..d35c444ff7f 100644 --- a/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java +++ b/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java @@ -1945,7 +1945,7 @@ public class WerkstoffMaterialPool implements Runnable { new short[] { 0, 0, 0 }, "Reactive-Ion Etching Mixture", subscriptNumbers("CHF3/O2"), - new Werkstoff.Stats().setCentrifuge(true), + new Werkstoff.Stats(), Werkstoff.Types.MIXTURE, new Werkstoff.GenerationFeatures().disable() .addCells(), @@ -2015,14 +2015,22 @@ public class WerkstoffMaterialPool implements Runnable { offsetID3b + 10, TextureSet.SET_FLUID); + public static final Werkstoff HotSuperCoolant = new Werkstoff( + new short[] { 155, 17, 30 }, + "Hot Super Coolant", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3b + 11, + TextureSet.SET_FLUID); + public static void runInit() { addSubTags(); } private static void addSubTags() { - // WerkstoffMaterialPool.PTMEGElastomer.add(SubTag.BOUNCY, SubTag.STRETCHY); - } @Override diff --git a/src/main/java/gtnhlanth/common/tileentity/MTELINAC.java b/src/main/java/gtnhlanth/common/tileentity/MTELINAC.java index 7ae15db3aa3..8fb3a54e921 100644 --- a/src/main/java/gtnhlanth/common/tileentity/MTELINAC.java +++ b/src/main/java/gtnhlanth/common/tileentity/MTELINAC.java @@ -195,7 +195,8 @@ protected MultiblockTooltipBuilder createTooltip() { } - tt.addInfo("Requires (length + 1)kL/s of coolant") + tt.addInfo("Requires (length)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) @@ -283,7 +284,8 @@ public boolean checkRecipe(ItemStack itemStack) { FluidStack primFluid = tFluidInputs.get(0); // 1b (1000L)/m/operation - final int fluidConsumed = 1000 * length; + final int fluidConsumed = 1000 * (length + 1); // length variable is technically physical length - 1, adding + // here so as to not affect existing math this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); this.mEfficiencyIncrease = 10000; @@ -307,8 +309,11 @@ public boolean checkRecipe(ItemStack itemStack) { } 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()]; + // 1A if one energy hatch, 4A if two + mEUt = (int) ((this.mEnergyHatches.size() == 1) ? -GTValues.VP[(int) this.getInputVoltageTier()] + : (int) (-this.getMaxInputAmps() * GTValues.VP[(int) this.getInputVoltageTier()])); // Particle stays the same with this multiblock outputParticle = particleId; @@ -336,10 +341,8 @@ public boolean checkRecipe(ItemStack itemStack) { : 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 + // 1A of full power if one energy hatch, 4A if two + long voltage = (this.mEnergyHatches.size() == 1) ? this.getMaxInputVoltage() : this.getMaxInputPower(); machineEnergy = (float) Math.max(length / 4 * Math.pow(voltage, 1.0 / 3.0), 50); // Minimum of 50keV @@ -347,13 +350,6 @@ public boolean checkRecipe(ItemStack itemStack) { .getEnergy(); inputEnergy = Math.min(inputEnergy, 7500); // Does not scale past 7500 keV, prevents double LINAC issue - /* - * outputEnergy = Math.min( - * (1 + inputEnergy / Particle.getParticleFromId(outputParticle) - * .maxSourceEnergy()) * machineEnergy, - * 120_000); // TODO more complex calculation than just - * // addition - */ outputEnergy = (float) Math.pow( 10, @@ -408,7 +404,6 @@ private void outputAfterRecipe() { @Override public void stopMachine() { - // GTLog.out.print("Machine stopped"); outputFocus = 0; outputEnergy = 0; outputParticle = 0; @@ -445,6 +440,10 @@ public String[] getInfoData() { BeamInformation information = this.getInputInformation(); + if (information == null) { + information = new BeamInformation(0, 0, 0, 0); + } + return new String[] { /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + EnumChatFormatting.GREEN @@ -473,7 +472,9 @@ public String[] getInfoData() { + EnumChatFormatting.YELLOW + GTUtility.formatNumbers(getMaxInputVoltage()) + EnumChatFormatting.RESET - + " EU/t(*2A) " + + " EU/t(*" + + getMaxInputAmps() + + "A)" + StatCollector.translateToLocal("GT5U.machines.tier") + ": " + EnumChatFormatting.YELLOW @@ -503,7 +504,7 @@ public String[] getInfoData() { StatCollector.translateToLocal("beamline.coolusage") + ": " // Coolant usage: + EnumChatFormatting.AQUA - + length + + (length + 1) + EnumChatFormatting.RESET + " kL/s", // e.g. "24 kL/s @@ -558,7 +559,6 @@ private BeamInformation getInputInformation() { // 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(); } @@ -569,13 +569,6 @@ private static float calculateTemperatureFactor(int fluidTemp) { return (float) Math.pow(1.1, 0.2 * fluidTemp); } - /* - * 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); @@ -612,8 +605,6 @@ public boolean checkMachine(IGregTechTileEntity mte, ItemStack stack) { 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; @@ -635,9 +626,6 @@ public void construct(ItemStack stackSize, boolean hintsOnly) { } 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); } diff --git a/src/main/java/gtnhlanth/common/tileentity/MTESourceChamber.java b/src/main/java/gtnhlanth/common/tileentity/MTESourceChamber.java index 8fb94d505c9..5c69bae5a8f 100644 --- a/src/main/java/gtnhlanth/common/tileentity/MTESourceChamber.java +++ b/src/main/java/gtnhlanth/common/tileentity/MTESourceChamber.java @@ -154,15 +154,10 @@ private boolean addBeamLineOutputHatch(IGregTechTileEntity te, int casingIndex) 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; @@ -172,7 +167,7 @@ public boolean checkRecipe(ItemStack itemStack) { 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()]; diff --git a/src/main/java/gtnhlanth/common/tileentity/MTESynchrotron.java b/src/main/java/gtnhlanth/common/tileentity/MTESynchrotron.java index dfecdcd71e4..2d8f0c2f08f 100644 --- a/src/main/java/gtnhlanth/common/tileentity/MTESynchrotron.java +++ b/src/main/java/gtnhlanth/common/tileentity/MTESynchrotron.java @@ -4,6 +4,7 @@ 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.ExoticEnergy; import static gregtech.api.enums.HatchElement.InputHatch; import static gregtech.api.enums.HatchElement.Maintenance; import static gregtech.api.enums.HatchElement.OutputHatch; @@ -40,9 +41,11 @@ 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.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; import gregtech.api.metatileentity.implementations.MTEHatchEnergy; import gregtech.api.render.TextureFactory; +import gregtech.api.util.ExoticEnergyInputHelper; import gregtech.api.util.GTUtility; import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.api.util.shutdown.ShutDownReason; @@ -58,7 +61,7 @@ import gtnhlanth.util.DescTextLocalization; import gtnhlanth.util.Util; -public class MTESynchrotron extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { +public class MTESynchrotron extends MTEExtendedPowerMultiBlockBase implements ISurvivalConstructable { private static final IStructureDefinition STRUCTURE_DEFINITION; @@ -79,6 +82,8 @@ public class MTESynchrotron extends MTEEnhancedMultiBlockBase im private int energyHatchTier; + private boolean usingExotic = false; + private int antennaeTier; private Byte glassTier; @@ -440,7 +445,9 @@ public class MTESynchrotron extends MTEEnhancedMultiBlockBase im ).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()) + + // Adder overriden due to ExoticEnergy originally calling its own adder, giving false positives + .addElement('e', buildHatchAdder(MTESynchrotron.class).atLeast(ImmutableMap.of(Energy.or(ExoticEnergy), 4)).adder(MTESynchrotron::addEnergyInputToMachineList).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()) @@ -475,6 +482,8 @@ public class MTESynchrotron extends MTEEnhancedMultiBlockBase im private int machineTemp; + private long energyHatchAmperage; + public MTESynchrotron(String aName) { super(aName); } @@ -620,19 +629,64 @@ public boolean addEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int } IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof MTEHatchEnergy hatch) { - // First energy hatch added - if (this.mEnergyHatches.isEmpty()) this.energyHatchTier = hatch.mTier; + boolean firstHatch = false; + if (this.mEnergyHatches.isEmpty() && this.mExoticEnergyHatches.isEmpty()) firstHatch = true; + + if (aMetaTileEntity instanceof MTEHatch hatch) { + + if (firstHatch) { + + this.energyHatchTier = hatch.mTier; + this.energyHatchAmperage = hatch.maxWorkingAmperesIn(); + + } // 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); + if (hatch.maxWorkingAmperesIn() != this.energyHatchAmperage) // Prevent mixing amperages within a tier + return false; + + if (aMetaTileEntity instanceof MTEHatchEnergy hatchNormal) { + + if (usingExotic) // usingExotic defaults to false, only set when known to be using exotics + return false; // If exotics are already being used, disallow non-exotics + + hatchNormal.updateTexture(aBaseCasingIndex); + hatchNormal.updateCraftingIcon(this.getMachineCraftingIcon()); + return mEnergyHatches.add(hatchNormal); + + } else if (aMetaTileEntity instanceof MTEHatch hatchExotic + && ExoticEnergyInputHelper.isExoticEnergyInput(aMetaTileEntity)) { + + if (firstHatch) usingExotic = true; + + if (!usingExotic) return false; // If normal hatches are already being used, disallow exotics + + hatchExotic.updateTexture(aBaseCasingIndex); + hatchExotic.updateCraftingIcon(this.getMachineCraftingIcon()); + return mExoticEnergyHatches.add(hatchExotic); + + } else { + return false; // Not an energy hatch + } + } else { + return false; // Not a hatch of any kind } - return false; + + /* + * if (aMetaTileEntity instanceof MTEHatchEnergy hatch) { + * // First energy hatch added + * if (this.mEnergyHatches.isEmpty()) 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) { @@ -715,9 +769,11 @@ public boolean checkRecipe(ItemStack aStack) { mMaxProgresstime = TickTime.SECOND; - long voltage = this.getMaxInputVoltage(); - mEUt = (int) (-voltage / GTValues.V[(int) this.getInputVoltageTier()] - * GTValues.VP[(int) this.getInputVoltageTier()]); // Multiply VP by amps + long voltage = 0; + + voltage = this.getMaxInputEu(); + + lEUt = -GTValues.VP[GTUtility.getTier(this.getAverageInputVoltage())] * this.getMaxInputAmps(); outputParticle = 1; // Photon @@ -766,7 +822,7 @@ public boolean checkRecipe(ItemStack aStack) { outputRate = (int) (inputRate * getOutputRatetio(voltageFactor, this.antennaeTier)); if (outputRate == 0) { - stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.low_input_rate")); + stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.low_input_eut")); return false; } @@ -841,7 +897,6 @@ 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(); } @@ -857,10 +912,6 @@ private static float getVoltageFactor(long mEU, int antennaTier) { return (float) (Math.sqrt(mEU) / 1500); } - /* - * 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) { /* @@ -905,17 +956,19 @@ public String[] getInfoData() { long storedEnergy = 0; long maxEnergy = 0; - for (MTEHatchEnergy tHatch : mEnergyHatches) { - if (tHatch.isValid()) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } + for (MTEHatch tHatch : getExoticAndNormalEnergyHatchList()) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); } BeamInformation information = this.getInputInformation(); + if (information == null) { + information = new BeamInformation(0, 0, 0, 0); + } + return new String[] { /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + EnumChatFormatting.GREEN @@ -942,13 +995,15 @@ public String[] getInfoData() { + " EU/t", /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + EnumChatFormatting.YELLOW - + GTUtility.formatNumbers(getMaxInputVoltage()) + + GTUtility.formatNumbers(getAverageInputVoltage()) + EnumChatFormatting.RESET - + " EU/t(*2A) " + + " EU/t(*" + + getMaxInputAmps() + + "A)" + StatCollector.translateToLocal("GT5U.machines.tier") + ": " + EnumChatFormatting.YELLOW - + VN[GTUtility.getTier(getMaxInputVoltage())] + + VN[GTUtility.getTier(getAverageInputVoltage())] + EnumChatFormatting.RESET, /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + EnumChatFormatting.RED @@ -1035,7 +1090,11 @@ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack a this.mAntennaCasings.clear(); this.mEnergyHatches.clear(); + this.mExoticEnergyHatches.clear(); this.energyHatchTier = 0; + this.energyHatchAmperage = 0; + this.usingExotic = false; + this.antennaeTier = 0; this.glassTier = 0; @@ -1050,7 +1109,7 @@ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack a return this.mInputBeamline.size() == 1 && this.mOutputBeamline.size() == 1 && this.mMaintenanceHatches.size() == 1 - && this.mEnergyHatches.size() == 4 + && (this.mEnergyHatches.size() == 4 || this.mExoticEnergyHatches.size() == 4) && this.glassTier >= MIN_GLASS_TIER; } diff --git a/src/main/java/gtnhlanth/common/tileentity/MTETargetChamber.java b/src/main/java/gtnhlanth/common/tileentity/MTETargetChamber.java index ffc16fddf04..988bf1fd5c6 100644 --- a/src/main/java/gtnhlanth/common/tileentity/MTETargetChamber.java +++ b/src/main/java/gtnhlanth/common/tileentity/MTETargetChamber.java @@ -272,15 +272,7 @@ public boolean checkRecipe(ItemStack itemStack) { }) .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; + if (tRecipe == null) return false; BeamInformation inputInfo = this.getInputInformation(); @@ -297,23 +289,72 @@ public boolean checkRecipe(ItemStack itemStack) { if (inputParticle != tRecipe.particleId) return false; - this.mMaxProgresstime = Math.max(Math.round((tRecipe.amount / inputRate * 5 * TickTime.SECOND)), 1); // 5 - // seconds - // per + if (tRecipe.focusItem != null) { + if (tRecipe.focusItem.getItem() != tFocusItem.getItem()) return false; + } + + int focusDurabilityDepletion = 1; + + float progressTime = tRecipe.amount / inputRate * 5 * TickTime.SECOND; + + int batchAmount = 1; + + if (progressTime < 1) { // Subticking + + batchAmount = (int) Math.round(1.0 / progressTime); + + if (tRecipe.focusItem != null) { + int maskLimit = tFocusItem.getMaxDamage() - tFocusItem.getItemDamage() + 1; + + if (batchAmount > maskLimit) batchAmount = maskLimit; // Limited by mask durability first, if it's + // present in recipe. Assume mask is present in + // machine from above condition + } + + progressTime = 1; + } + + this.mMaxProgresstime = (int) progressTime; // 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; + double maxParallel = tRecipe + .maxParallelCalculatedByInputs(batchAmount, new FluidStack[] {}, tItemsWithFocusItemArray); + + if (maxParallel < 1) // Insufficient items + return false; + + if (batchAmount > maxParallel) batchAmount = (int) maxParallel; + + tRecipe.consumeInput(batchAmount, new FluidStack[] {}, tItemsWithFocusItemArray); + + focusDurabilityDepletion = batchAmount; + + ItemStack[] itemOutputArray = GTUtility.copyItemArray(tRecipe.mOutputs); + + for (ItemStack stack : itemOutputArray) { + + stack.stackSize *= batchAmount; + + } + + this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + mEUt = (int) -tVoltage; if (this.mEUt > 0) this.mEUt = (-this.mEUt); - this.mOutputItems = tRecipe.mOutputs; + this.mOutputItems = itemOutputArray; 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); + .depleteFocusDurability(focusDurabilityDepletion); this.updateSlots(); @@ -325,9 +366,6 @@ 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(); } @@ -337,6 +375,10 @@ private BeamInformation getInputInformation() { private ItemStack getFocusItemStack() { for (MTEBusInputFocus hatch : this.mInputFocus) { + + if (hatch.getContentUsageSlots() + .isEmpty()) return null; + return hatch.getContentUsageSlots() .get(0); } @@ -400,6 +442,10 @@ public String[] getInfoData() { BeamInformation information = this.getInputInformation(); + if (information == null) { + information = new BeamInformation(0, 0, 0, 0); + } + return new String[] { /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + EnumChatFormatting.GREEN diff --git a/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java index d71b9a571ee..f0b170bb4a9 100644 --- a/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java +++ b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java @@ -11,6 +11,7 @@ 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.material.MaterialsElements; @@ -50,7 +51,7 @@ public static void load() { Materials.SuperCoolant.getFluid(1L) .getFluid() .getName(), - Materials.Water.getFluid(1L) + WerkstoffMaterialPool.HotSuperCoolant.getFluidOrGas(1000) .getFluid()); /* @@ -111,59 +112,74 @@ public static void load() { 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 (mask.getTCTargetItem() == null) { // Wafer TC recipe + + 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, + (int) Math.round(mask.getBaselineAmount() * Math.pow(Math.sqrt(2), index - 1)), // 2x 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); + + } } + continue; + } - /* - * 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 ); } - */ + // Non-wafer recipes + + BeamlineRecipeAdder2.instance.addTargetChamberRecipe( + GTUtility.copyAmountUnsafe(1, mask.getTCTargetItem()), + GTUtility.copyAmountUnsafe(4, mask.getProducedItem()), + new ItemStack(LanthItemList.maskMap.get(mask), 0), + 1, + mask.getBaselineAmount(), + mask.getMinEnergy(), + mask.getMaxEnergy(), + mask.getMinFocus(), + 1, + (int) TierEU.RECIPE_LuV); } - /* - * 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); - */ + + /* LuAG */ + + // Raw Advanced Crystal Chip + + BeamlineRecipeAdder2.instance.addTargetChamberRecipe( + WerkstoffMaterialPool.CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1), + GTUtility.copyAmountUnsafe(64, ItemList.Circuit_Chip_CrystalSoC.get(1)), + new ItemStack(LanthItemList.maskMap.get(MaskList.CSOC), 0), + 1, + 24, + 5, + 12, + 60, + 1, + (int) TierEU.RECIPE_LuV); BeamlineRecipeAdder2.instance.addTargetChamberRecipe( new ItemStack(Items.chicken, 1), diff --git a/src/main/java/gtnhlanth/loader/RecipeLoader.java b/src/main/java/gtnhlanth/loader/RecipeLoader.java index 91800b6a68a..282d92fd55c 100644 --- a/src/main/java/gtnhlanth/loader/RecipeLoader.java +++ b/src/main/java/gtnhlanth/loader/RecipeLoader.java @@ -147,6 +147,7 @@ import gregtech.api.util.GTRecipeConstants; import gregtech.api.util.GTUtility; import gregtech.mixin.interfaces.accessors.IRecipeMutableAccess; +import gtPlusPlus.core.item.ModItems; import gtnhlanth.Tags; import gtnhlanth.common.item.MaskList; import gtnhlanth.common.register.BotWerkstoffMaterialPool; @@ -566,6 +567,15 @@ public static void loadAccelerator() { .eut(TierEU.RECIPE_EV) .addTo(mixerRecipes); + GTValues.RA.stdBuilder() + .fluidInputs(WerkstoffMaterialPool.FluoroformOxygenMix.getFluidOrGas(5000)) + .itemInputs(Materials.Empty.getCells(4)) + .fluidOutputs(WerkstoffMaterialPool.Fluoroform.getFluidOrGas(3000)) + .itemOutputs(Materials.Oxygen.getCells(4)) + .duration(5 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(centrifugeRecipes); + GTValues.RA.stdBuilder() .itemInputs(Materials.Iron.getDust(2), Materials.NetherQuartz.getPlates(1)) .itemOutputs(new ItemStack(LanthItemList.IRON_COATED_QUARTZ)) @@ -673,6 +683,19 @@ public static void loadAccelerator() { .specialValue(3600) .addTo(blastFurnaceRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.ETCHED_MASK_1, 4), + Materials.Glass.getPlates(2), + new ItemStack(ModItems.dustLithiumHydroxide, 2), + Materials.Epoxid.getDust(4)) + .fluidInputs(Materials.Hydrogen.getGas(2000)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.CBLANK))) + .duration(4 * GTRecipeBuilder.MINUTES) + .eut(TierEU.RECIPE_ZPM) + .specialValue(4200) + .addTo(blastFurnaceRecipes); + for (MaskList mask : MaskList.values()) { MaskList maskIngredient = mask.getPrecursor(); @@ -682,66 +705,65 @@ public static void loadAccelerator() { if (mask.getLensColour() == null) { // CR Recipe - if (mask == MaskList.PPIC) { + if (mask == MaskList.PrPIC) { 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))) + new ItemStack(LanthItemList.maskMap.get(MaskList.PIC)), + Materials.IndiumGalliumPhosphide.getDust(2)) + .fluidInputs(Materials.VanadiumGallium.getMolten(288L)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.PrPIC))) .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? + .addTo(UniversalChemical); - } else if (mask == MaskList.HPIC) { + } else if (mask == MaskList.PrHPIC) { 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))) + new ItemStack(LanthItemList.maskMap.get(MaskList.HPIC)), + Materials.IndiumGalliumPhosphide.getDust(8)) + .fluidInputs(Materials.Naquadah.getMolten(576)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.PrHPIC))) .duration(60 * GTRecipeBuilder.SECONDS) .eut(mask.getEngraverEUt()) .requiresCleanRoom() .addTo(UniversalChemical); - } else if (mask == MaskList.UHPIC) { + } else if (mask == MaskList.PrNPIC) { 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))) + new ItemStack(LanthItemList.maskMap.get(MaskList.NPIC)), + Materials.IndiumGalliumPhosphide.getDust(64)) + .fluidInputs(Materials.Sunnarium.getMolten(1440L)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.PrNPIC))) .duration(60 * GTRecipeBuilder.SECONDS) .eut(mask.getEngraverEUt()) .requiresCleanRoom() .addTo(UniversalChemical); - } else if (mask == MaskList.NCPU) { + } else if (mask == MaskList.PrCPU) { 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))) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.PrCPU))) .duration(60 * GTRecipeBuilder.SECONDS) .eut(mask.getEngraverEUt()) .requiresCleanRoom() .addTo(UniversalChemical); - } else if (mask == MaskList.QBIT) { + } else if (mask == MaskList.PrNCPU) { 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))) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.PrNCPU))) .duration(60 * GTRecipeBuilder.SECONDS) .eut(mask.getEngraverEUt()) .requiresCleanRoom() @@ -750,7 +772,7 @@ public static void loadAccelerator() { 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))) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.PrNCPU))) .duration(45 * GTRecipeBuilder.SECONDS) .eut(mask.getEngraverEUt()) .requiresCleanRoom() @@ -1068,7 +1090,7 @@ public static void loadGeneral() { GTValues.RA.stdBuilder() .fluidInputs(Materials.Water.getFluid(3000)) .fluidOutputs(Materials.HydrochloricAcid.getFluid(6000)) - .itemInputs(WerkstoffMaterialPool.LanthaniumChloride.get(OrePrefixes.dust, 4)) + .itemInputs(WerkstoffMaterialPool.LanthaniumChloride.get(OrePrefixes.dust, 8)) .itemOutputs(WerkstoffMaterialPool.LanthanumOxide.get(OrePrefixes.dust, 1)) .duration(10 * GTRecipeBuilder.SECONDS) .eut(TierEU.RECIPE_HV) @@ -3397,6 +3419,13 @@ public static void addRandomChemCrafting() { .eut(64) .addTo(fluidSolidifierRecipes); + GTValues.RA.stdBuilder() + .fluidInputs(WerkstoffMaterialPool.HotSuperCoolant.getFluidOrGas(1000)) + .fluidOutputs(Materials.SuperCoolant.getFluid(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(vacuumFreezerRecipes); + // 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 diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_SHIELDED_ACCELERATOR.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_SHIELDED_ACCELERATOR.png index c7aa4234b9e5b753ad3985ac0f8cafbd064f52e3..20fc47ebb1f42703d1e30da3eee11b275f8c63e4 100644 GIT binary patch delta 672 zcmV;R0$=^O1=aR@u|7c^-|Qd}Gb*Mfr| zi&X~~XI&j!1wrrw#M!|~(M3x9Us7lhK5>|p zC58B$c+#K?5->Pi*0|51A$$j)v)dFW7}?>0RCs-O6&M*O zlg&!RFcgKq356{DsUXI##QF{u@fG?2B0gtV!!U2rr3(@1++m7;S#&inhJ;QtHr2BV zIrorz&&i#YWw{j*9E>sk+`o6+ur>jBdVJU`JUU59)0DT@7sfDOEJ;L!_s{Quv|k^r z)*H0eoPV7j1F%|eJg>DzL{LO7pvJ8N>ZGGXhwf@{RP4GZsjN$(7 zc9I7-*H`;vTD$8Y=E2x#Y8aIxruY(=_!qG=RmI$nC8GW-cHYd2qS)qn?jxK67pG5Q zYK+4;=Zj@L#>-{u#E?!@3`?XnEJuL?gQZ0000K5>Lq zB!&2#c+#K?5H_(vUonp`rus$k?;KpiS1 z#}EDozq>U{(|=QLQYZlgUTphg90=|L?WS#iAKP~O1n@rtS6bI!Zvk_kq&K@-^au!V z0~gm_P2K}8cYu*6T{0v`^3xPbCE)#xzNr8V-2ww^Zf~7^oIU_K>T3B0I5-3*%9OqC z@$UZK-u^w)>F)=q)^fc2*iUT$000JJOGiWi{{a60|9_ypr;`8x010qNS#tmYE+YT{ zE+YYWr9XB60078IL_t(I%cYYs4#F@DMSlYll7)nj7@(fuI=KfE8|PqS;(pG=&;fNr zWk9WB;}k?aSxMgacPv*i#tsu=4gkl~`7ii(y}ShgV6&VJ7b4;UZQBm{dUpT-g#3Ys zD43ZQM0!LZA|)D1_LvzW0wPi(HiBonhx5wTNzp+L=Pi_+gfZB*;E9A^#?>^9o4ZqB zW|gOuP}em8sJ!UFij2WZpogr82d9+2|AE&+aTlzMeiC^Lw(^I-{qY6Pr&W00000NkvXXu0mjffTA7< diff --git a/src/main/resources/assets/gtnhlanth/lang/en_US.lang b/src/main/resources/assets/gtnhlanth/lang/en_US.lang index b9729347d53..7bc43c8d5c1 100644 --- a/src/main/resources/assets/gtnhlanth/lang/en_US.lang +++ b/src/main/resources/assets/gtnhlanth/lang/en_US.lang @@ -13,7 +13,7 @@ gtnhlanth.tt.hintdot=Hint block with dot %s GT5U.gui.text.gtnhlanth.nocoolant=No coolant present in machine! GT5U.gui.text.gtnhlanth.inscoolant=Insufficient coolant in machine! GT5U.gui.text.gtnhlanth.noaccel=Particle type can't be accelerated! -GT5U.gui.text.gtnhlanth.low_input_rate=Input amount too low! +GT5U.gui.text.gtnhlanth.low_input_eut=Input EU/t too low to produce photons! GT5U.gui.text.gtnhlanth.scerror=Math error, broken recipe? # NEI diff --git a/src/main/resources/assets/gtnhlanth/textures/blocks/casing.antenna_t1.png b/src/main/resources/assets/gtnhlanth/textures/blocks/casing.antenna_t1.png index 8d03f0fe170742529a97f90d6806968217b45272..3c86ca2a3255a7186c020f55cafc874adcf19f97 100644 GIT binary patch delta 782 zcmV+p1M&QVBBTb8BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iQ>A`XI@m$P zAwzYti;6gwDi*;)X)CnqU~=gfG-*guTpR`0f`cE6RR-x>)XFRyI`P8RCedYLqYJTvj-5aaOB!*1jiyVX&aBWVlXq3<)eDi4;W0 zsH1`^EJSJ5NPjVrrv12wf7J1($R(4j0!EGn)SyCg{NR7^yIZq3J>@0^<3R6=ZGVgd zfnA{0u-cL;VD6LjMn{Vr0ikW+;<}^Bd%)!mF!H2JhU7?onnJM% zyr0oG<$>W_U|`Mdt-X)a2OvvbE#CkKhrmRMve!M{-GA5J+rMYp{rv!HIdY?=o<{Nj z000SaNLh0L01FTR01FTSts}j40003-NklvADC+h zshOnv12d%6%Um5|0)fLVC`1Wnzo1Aw4pUb`QQceC@bxr^@gDD^4GG8G`+8sRJw4}k zV>ldsQGZIo;W&=S<>$Pn-?ahY?Dh`-!F3YB<{cmBGf~*v*#ZD8mMaiKlrx7PC7_hT z`fEzl%Q9@98Xz=v>0>&8RGe=$5B4>=DC<@aBZc&+~*xcSl5Cq~gdfkqa z%XS(zib)@DSS(jKJlGes2_c4!Vv(A}^0e5x$`_|6#)h^1()zt`Ni&4GZr?N500000 MNe4wvM6N<$f_2$+uK)l5 literal 4354 zcmeHLeNYo;8c#rl@?lYnoEDC4pshM?cC-1~>=00s2r&d1NGUo}c(c0+D@itFmn7gh zexM#zO7&`QIBTu_P^nd`;!UNV=k$a-?`}GGtuyu1k)vwoYKP*rIu_d=-n$#XFxQzI zX4?PQO!nh>f6woIp5OaC?_~3Qd0BCK%KQ|CLXmDSu~xuqhV)II0nfR29sqdhYjIVJ z6(E8HL%fIcv543lWDz#Xc@&E16@U5F^z%sC_ulOt16jR4|7F3Vrq+(y#Inpc_V#`@ zXvw-E{-Wsi-L=T>{N|6`2R2$t+YhI1-E?K%QmR;asPo%f{Lc6Oajswm+W25Fuhd>$ z^O<93037KCv+uX0ZqIFerESgNEM``(F0FkdwQqW#*i#71b=x{#n(zO(Tj`H}vwH47 z`}dvwvo$HNRomU6Je^}-Q^R;~4rcB8@VCdq2RnPSzCLwm&aI@3hE?0XY`Snlp-^t& zES7S+#WI!5)Ig3@-cfL+tw%M{BnLFxUKb5(<3Gca^x<{A4 zP~EY);e!ue>^t1Lqx;y*W1Ep-<@LdVw?0=rIf5-b)%MlE>D=2x=AnM&vUmRI>c(bv z?O~Z;J))_t&TM@*8EFT-8M`~*K6G-2DcbSwy5ZrLtQ)KP|22}`y5b{dK$XUIectu1 zH`eaPZq`(hd}CEZ`X@b4Zvb6gN12{7A;QAEXx1Wqa#V@&gdN%D+3h^l+&K`eMe^}4<&qg(7z$~YWTZp|1L^= zcJ-xNUMalxmhsH$yUEFXV%DV^XMdtPvT@hbHAH^#*B2jK@#MgN+JFDHBJEm2Vncv` zb^YE#h3Sj6_h*pgw5R^E`|QwHLnHnDBj$^@ZYOnp68fDDJAlB#3v;l*s-2}2&HL4W z;oYn{>JP%oQz#0GqCr46up;7SyRG)LcLptNJy+5aVk=w9Ty#qV zZDLeKg((G53KIBP5g<{&FCb7+vr6Wr;JswVREP`_8_cR|XE|cwLoA|G>(n@Ei*jK? zRhWVlgcuK1VO>5-0iVpOdQl8g7#4{{)Df+k4|y?-$z;NC0wV|%B2b|@Ac80w5b`97 z7>AV==nxkaIX-|$oWRXDiDs1wjw567`GZd9IDJ4ERRQXOML`hLsBz5i$KpK%(H4dz zqXGS(hv0&JidC=z-xQ)*TbK=qdGQnsJ?8c??Z*P(zkx^af~kTju>qp}AC5d>&fqJrdV4)TyDmelGP z24!UmqlQ6A9nhj~x7O`3F>V7enBpi_hB#Q2z!x8tM8!ZV+@p81GzQGU>F1LCPi(08LQZk0BccV)!=F^DZ5JxL&0>Qv_Ps< zNFdu`Hk2jA0+A27c;07LNfe0WIX>)!4aEQvSb@kwQk>9HxSrDJT^bXmBPkt$;#vxi z!}AR1Y5sp`seO=w*rJzk0-V2DHpP0Xl5LDV#U6c}+)M}}w*>|0SPB9Nvy2=k4s7DDMVL)|ynni(L!=i4&NNPx+XK*5x)i}Grd&CF` zu}i&BN2nDnP+2Qv!RS&goES}{o|V=CN`~TkG)^)VHkvFZ?HFU(7GVFQM}Z88+hU+! z%m%kExD#UITj8i)FxH>)7+r^-atZ{Qnq*S?PRTVT*Q6Af6nLt-rsSHG0+RwyRo9Ou zSIWbeDK-Fq0Y%`e60!FD1^AjZ!|f=xDjrCm{bvuo1TBvQOI8UAMJoI^AT>jIH1BK^ zG$x65r!DF8>5tCE7rj5Xy#tz#*sV)lSe zJao2Mvsb=W*mwBTtMBo_d%4PIwxlL=Ta;?GI<2+(@0lm&p9b~cuLoIWmfy6U$hlVD z={Wwr;+mn;QBA74edFZI3$TpTff*$Z$DE_L zE_Zu-`x4ZK<#=2ZoBs; diff --git a/src/main/resources/assets/gtnhlanth/textures/blocks/casing.antenna_t2.png b/src/main/resources/assets/gtnhlanth/textures/blocks/casing.antenna_t2.png index 23e79ebb16afc2161b4687988518e7115d859242..8070f653ef40a26818f0e2b2817ed52a5b9bfb97 100644 GIT binary patch delta 748 zcmVR@u|7c^-|Qd}Gb*Mfr| zi&X~~XI&j!1wrrw#M!|~(M3x9Us7lhK5>|p zC58B$c+#K?5->Pi*0|51A$$j)v)dFW7}?>0RCs-O6&M*OePczTix)4e)sHDzZ|kU38S%-uX4ytBx+i zaa$6*J6ixuXMb}X$I;dTgKkPu6j=O$x{p=ZqR6rg&+{1dCKb`u-4OtJo>v>JOe;A( z5m%@-81*JZvCrW_OW93+O$2!R_yS-!Zfj!?x+wttAklmhu*|4#E}rNI3H>0E4OLF{ zrDCEWRHw}*rp7Xf+lOPK*e8m8?Nk+NB9=)Ex~Uw$4q;}T(!}SNSB+5Di^W3L%jHtW zsihzyisBZV+YLIM22tGl;n3=pHqj>#G0KxZ-K5>Lq zB!&2#c+#K?5H_(vUonp`rus$k?;KpiS1 z#}EDozq>U{(|=QLQYZlgUTphg90=|L?WS#iAKP~O1n@rtS6bI!Zvk_kq&K@-^au!V z0~gm_P2K}8cYu*6T{0v`^3xPbCE)#xzNr8V-2ww^Zf~7^oIU_K>T3B0I5-3*%9OqC z@$UZK-u^w)>F)=q)^fc2*iUT$000SaNLh0L01FTR0F%D~34Z{mNkl$38%{%+h_M~rP?$@wx&YlanC9O_URYhigv~Y>MmG?f_n7bn8a6`+8o=7O z4UTcyN|YCf1wIG^WYme)^xz4Rv4D$>kryyrfg?>I+l*m==Ltn5VMWq%R@u|7c^-|Qd}Gb*Mfr| zi&X~~XI&j!1wrrw#M!|~(M3x9Us7lhK5>|p zC58B$c+#K?5->Pi*0|51A$$j)v)dFW7}?>0RCs-O6&M*OFP!z_05Rwj6YhtWTNCA-|T>9wW&@tbaYzH{!m-}z3e*=#O_5QNZmU7n-=!`M1E18{wH86&EP8k(l@ z_3_Rwcz@3?WP}h*XY)kR|M_M#o}efS$43VMjK&igR}=*y1ZnnQQ!>C}u>c63(C_yF zFbspiV6d~Gs;aT?jIQf6YE|yC4FJr6gV(ZYm+M$>Jpg$&U5Ceu8vyPrHGwQC$YBMR(hTH3r_Zuh2RR910 N00>D%PDHLkV1h_$akBsb delta 611 zcmV-p0-XKC2CM~;LVt@Ql@1mZamY}e>|#Y6OBIV?p|llRbuhW~3z{?}DK3tJYr(;f z#j1mgv#t)Vf*|+-;_Tq0=prTlFDbN$@!+^0@9sVB-T^|Z##FN}4yc-CWReLnUsx6U zUlBkEBZ$E#F;h=v7jy6&U-$6w^)AY@ywCkPhLobo0G~)4XMeh35pNLBZdy9$ec~{y zNDA>e@svRqB!1+&?D8Auvcm$;3>&%3JaL#nSc#52SZMb#)@$h)j?-r}s* z8mx0q{=#5UTgh^r<~WjALJDb!kkLRDHCTw!s*z$ML;DF2|Cr-XlS?L76^tAUs6&P1 z_`(0+ceiFKHh=9V1rtEv#kM~tfc{;e-L&oRW7}?@0RCs-O6&UTEnx1G^k!F!908$i z;NrTg$$P-%4lw$pONQh~ewsq51iYWoHx+>4TVQa_?X9zq(+40&T`k`L2Zz99nX=bC z-aXLU+rMWz{rv!|V{*M(Z~=w@000JJOGiWi{{a60{{*1Dr<0Sh0T+J&yh%hsR5;6H zY&h}ZKLZ7Tg@J*AK~RvNEY0uVe`H`{pb$`O01LXnt|A}28r=G}U^k%j!f^%$1_lOK z1_p-Ran%gn29|I!7~6GGD~cF~3%U&~8A=%-ns*iXFu1~8wTOYCyKf6z4rU0}FhExD z@Zm#-hYugZT?n(4s)198VF0pC^78Tw^78T+F2flM@PJ~dhWHs$#^0BZmM002ovPDHLkV1jv%A!z^r diff --git a/src/main/resources/assets/gtnhlanth/textures/blocks/casing.electrode.png b/src/main/resources/assets/gtnhlanth/textures/blocks/casing.electrode.png index 2532325e8eded6cff9685c95da1bf2008fcf0b69..c1d38b4335da50f4b4771035015a81849d035911 100644 GIT binary patch delta 962 zcmV;z13moL1j`4I7k?lK1^@s68;SVL0004mX+uL$Nkc;*P;zf(X>4Tx04R}tkv&Mm zKpe$iQ>A`XI@m$PAwzYti;6gwDi*;)X)CnqU~=gfG-*guTpR`0f`cE6RR-x>)XFRyI`P8RCedYLqYJTvj-5aaOB!*1jiyVX&aB zWVlXq3<)eDiGLJC$f%=&Dl9~4)krasrv12wf7J1($R(4j0!EGn)SyCg{NR7^yIZq3 zJ>@0^<3R6=ZGVgdfnA{0u-cL;VD6LjMn{Vr0ikW+;<}^Bd%)!m zF!H2JhU7?onnJM%yr0oG<$>W_U|`Mdt-X)a2OvvbEq~tt2Zz8!iL%!{-rd*T+rMYp z{rv!HIdY>pO)C`u000SaNLh0L01FWS01FWTe`H^g0005)Nkl;X7a$CG0r0#zeJo8w08UQ8 z)e(1zq7|?p2qvv$?FT_HK`Es((0|tCt}KEeB#KtgeiytcfJv_sJa1mf(k(ZwuFf)X z(`*y#$fu`o$+8T9!C=608P*1Il~PhX*STw@8+*|A9@I`@Z|?^HLX3Ke zCx4C;0PgO-n0o+HCP8tO-Uoi;o%#P>1fB*mh07*qoM6N<$f^3k(i2wiq delta 587 zcmV-R0<`_h2iF9U7k>~41^@s6AM^iV0004mX+uL$Nkc;*aB^>EX>4Tx04R}tkv&Mm zKpe$iQ%glE9V{Z^kfA!+MMWG-6^me@v=v%)FuC*#nlvOSE{=k0!NHHks)LKOt`4q( zAou~|?BJy6A|?JWDYS_3;J6>}?mh0_0YaH_(vUonp`rus$k?;KpiS1#}EDozq>U{ z(^GCzC;F)=q)^fc2*iUT$000JJOGiWi{{a60|De66lK=n!32;bRa{vGi!vFvd!vV){sAK>D z0B1==K~y-)?US($gg_7j4WbOVCa)OUamv@Q(Lx_XgdjaGL+@m?fhVzcuoHD;lB9WF zUX_ny*F<<7>-uZrl~JAffIxN<0TEE^)K?JWPcJiO`F(Z^_+R4!S Z&L`t@;Gq+is_Xy&002ovPDHLkV1n570&@TW diff --git a/src/main/resources/assets/gtnhlanth/textures/blocks/casing.electrode.png.mcmeta b/src/main/resources/assets/gtnhlanth/textures/blocks/casing.electrode.png.mcmeta new file mode 100644 index 00000000000..d2b37d77606 --- /dev/null +++ b/src/main/resources/assets/gtnhlanth/textures/blocks/casing.electrode.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "interpolate": true, + "frametime": 10 + } +} diff --git a/src/main/resources/assets/gtnhlanth/textures/blocks/casing.focus_manipulator.png b/src/main/resources/assets/gtnhlanth/textures/blocks/casing.focus_manipulator.png index 0cd77fe120ca721e5789ee0e69c49533bc811fef..a95f5a5eb0ed0c25483e856acafa313624448fac 100644 GIT binary patch delta 686 zcmV;f0#W^+2IK{hLVrckY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$f+h_~ii@M*T5#}V zvFhOBtgC~oAP9bdI6F8gx=4xtOA0MwJUH&hyL*qjcYx5SFxBje0;*;isd!Ax=2pd? zSM(!@K?E=+F;h>Z7c=l2U-$6w^)AA*ywCkP29&(X0G~)4Wq-P15pNLBZdy9$ec})+ zNeb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TUMb#)@$hxd>-r}rQ zYOHln{=z_BTS;@B<|yJ=LIO#MkWoV!6>3SUwVSmqeD3tRSUp2-AQc{9RsjhE>M}S zdjePFntxdlKx1CztdcmSsMHq)$07*qoM6N<$g2h-n>Hq)$ delta 726 zcmV;{0xA9E1)m0xLVrs|Djh5$;*g;_*+oShOBIV?p|llRbuhW~3z{?}DK3tJYr(;f z#j1mgv#t)Vf*|+-;_Tq0=prTlFDbN$@!+^0@9sVB-T^|Z##FN}4yc-CWReLnUsx4` zuLvNFVZ;!Wn5n0-i#d3XuY36TdKcqa-sk=tgG$k4fKMcjGk@K%h&PC5H!Yp>K5>Lq zB!&2#c+#K?5H_(vUonp`rus$k?;KpiS1 z#}EDozq>U{(|=QLQYZlgUTphg90=|L?WS#iAKP~O1n@rtS6bI!Zvk_kq&K@-^au!V z0~gm_P2K}8cYu*6T{0v`^3xPbCE)#xzNr8V-2ww^Zf~7^oIU_K>T3B0I5-3*%9OqC z@$UZK-u^w)>F)=q)^fc2*iUT$000JJOGiWi{{a60{{*1Dr<0Sh0T_QTNklM%RmApg z=4QC(aBk*njhE?xE0xKLUf8z20rH|j0L)igOVABm-RDIEK$5QYo#%G|SWG`~GFe#y zQ)HSc5kOt;b?@}THhF*1{Mp1Y1-F{W-3F1#iqH2q0Lr?=_k7B_1i<%vJsd`{B~&E< z`p?7T&|PdL@cfRBdM^HKGD0Nj+7g|hA@h0jhE?RzS>%U_S8fP z&ONa(BgwCgKFw5hx!3EcUU48YS@HTZ_!%8sBoScPzqjreQxHbIuuUc_9r4mC-N5}t zti{1K;?8j*cbg;1|1oiHW&hMfBR@u|7c^-|Qd}Gb*Mfr| zi&X~~XI&j!1wrrw#M!|~(M3x9Us7lhK5>|p zC58B$c+#K?5->Pi*0|51A$$j)v)dFW7}?>0RCs-O6&M*O zlg&!RFcgKq356{DsUXI##QF{u@fG?2B0gtV!!U2rr3(@1++m7;S#&inhJ;QtHr2BV zIrorz&&i#YWw{j*9E>sk+`o6+ur>jBdVJU`JUU59)0DT@7sfDOEJ;L!_s{Quv|k^r z)*H0eoPV7j1F%|eJg>DzL{LO7pvJ8N>ZGGXhwf@{RP4GZsjN$(7 zc9I7-*H`;vTD$8Y=E2x#Y8aIxruY(=_!qG=RmI$nC8GW-cHYd2qS)qn?jxK67pG5Q zYK+4;=Zj@L#>-{u#E?!@3`?XnEJuL?gQZ0000K5>Lq zB!&2#c+#K?5H_(vUonp`rus$k?;KpiS1 z#}EDozq>U{(|=QLQYZlgUTphg90=|L?WS#iAKP~O1n@rtS6bI!Zvk_kq&K@-^au!V z0~gm_P2K}8cYu*6T{0v`^3xPbCE)#xzNr8V-2ww^Zf~7^oIU_K>T3B0I5-3*%9OqC z@$UZK-u^w)>F)=q)^fc2*iUT$000JJOGiWi{{a60|9_ypr;`8x010qNS#tmYE+YT{ zE+YYWr9XB60078IL_t(I%cYYs4#F@DMSlYll7)nj7@(fuI=KfE8|PqS;(pG=&;fNr zWk9WB;}k?aSxMgacPv*i#tsu=4gkl~`7ii(y}ShgV6&VJ7b4;UZQBm{dUpT-g#3Ys zD43ZQM0!LZA|)D1_LvzW0wPi(HiBonhx5wTNzp+L=Pi_+gfZB*;E9A^#?>^9o4ZqB zW|gOuP}em8sJ!UFij2WZpogr82d9+2|AE&+aTlzMeiC^Lw(^I-{qY6Pr&W00000NkvXXu0mjffTA7< diff --git a/src/main/resources/assets/gtnhlanth/textures/blocks/casing.shielded_accelerator_glass.png b/src/main/resources/assets/gtnhlanth/textures/blocks/casing.shielded_accelerator_glass.png index f5cb01e83c3096ca0a7fee94bce4feec41ec5319..06c4251d33f5a6c18f7be028735dcf62bfc79650 100644 GIT binary patch delta 603 zcmV-h0;K)l1dRodJ%3OXg-=sUMXL^W5OK&*o$R6_j-`r4uu$3xtvZ;z^beXeBq=VA zf@{ISpT(+!i?gl{u7V)=1LEx9r060g-j@_w#Q5OyKF)jRaNm7^(5y1m?1=%YW*O;3 zT+HQH#o#OY5x^joUt*@7%q(W%xxVh<f8NYi=T!$0cyQ{ZQ$a%qse=~UY0vKm9RhNMJaOo{00009a7bBm0Dk~3BLDy{BLR4&KXw2B0Ix|z zK~y-)WBmXB|Nn-yJEk&_0aATkvsoI}?wFeD>ze)Y`!BeJI42te0|NuY%kRJ7Y;0im z=G{|SV4O{R4wB>wKNtIK1_lNOCS*ZvVcu+PY& zV0hu`+f>g}kzGQP3y_^nk{6JpkW|2g>>pA9%u=!gkv6eFS1-U^z=EE(v1KS+ni&`v p7#N@Y{PTbI=G|mvXFnJFYyj~4MEw@OS8f0R002ovPDHLkV1l;9DXdaJ%2zP#a~m4qE!boh&W`ZPIgfd-AWaUV4<`XT6HkF^b49aBq=VA zf@{ISkHxBki?gl{u7V)=0pjf7r060g{x2!Ci1pyOAMfrx?%n}Hz05SLD*|Y`Z6;$; zDU)55x?d4M9|kZ7QD&AAPc5d=aeUpw$Je_s&+2^c&(W{uEPn?0B;p7&Oq+OvcxKZ! zIPVjStSGC*=fo2xU6A;Z>x##3oC_`sJX18&$$4UtSSqx!(#EW4YQ)pTAyv~UU&wf@ za^B*sm8-0IPyWJSPG3oJo#rTFSV9~LNKjBk31!#_)2fqVAxZnu4*n6>pCFe)t`ZnI z7Epl(+4Y0}!GG^=t^CxamlTWwffvX57z4U@fkw@7zKjJ_!g4BY~~YhG{7eVjf3Y3geE1~@nb z#tW3a-r?On?Y;ebrrF;Q$q#bL&u3Vb00006VoOIv015v9{{a7>y{D6tu>lx=2XskI zMF;2w3l9MYr2*LC00017Nkl1~S3zS69z5!Wab9Ucn})DyALBf+k=@ zq|J*koI-~47cnp}FfieBA~Ar8fkH59!0=K c*?AEFtez(BE@ZsX00000NkvWtM6N<$g7<^>zyJUM diff --git a/src/main/resources/assets/gtnhlanth/textures/blocks/casing.target_receptacle.png b/src/main/resources/assets/gtnhlanth/textures/blocks/casing.target_receptacle.png index 31a73624bffc0ba88c0d202cbb03e96b59104831..a0a94ce327a099127380e63ba09db3157cfdf779 100644 GIT binary patch delta 660 zcmV;F0&D%x1QpF-zC~bvS9ZW9$f+h_~ii@M*T5#}V zvFhOBtgC~oAP9bdI6F8gx=4xtOA0MwJUH&hyL*qjcYx5SFxBje0;*;isd!Ax=2pd? zSM(!@K?E=+F;h>Z7c=l2U-$6w^)AA*ywCkP29&(X0G~)4Wq-P15pNLBZdy9$ec})+ zNeb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TUMb#)@$hxd>-r}rQ zYOHln{=z_BTS;@B<|yJ=LIO#MkWoV!6`6pHR5;6( zl0gfCKoEtWi>I&+L&E<5p#2xWMu;v04|RgYVigDczoW17qf|iva(TcS=r!v+JhxUH3(BT)0yeg z#=zZTbbsh}9|IS8Do3zM*Jth)jm>P*yM~!yKL}+Chs{bo=<=vUEdT)A;}Ep~_qh7+ znD&5jwi!%+qTO05&=*6OZIiBh#%!?7G#xJTRPMo$VJ4W&W__6xXoLMAlq2-zY=c{y u_-|*OaqsaH=i~M#bIP5{v?G2H;tR+fqnA=9uMMRD0000{3M>OBIV?p|llRbuhW~3z{?}DK3tJYr(;f z#j1mgv#t)Vf*|+-;_Tq0=prTlFDbN$@!+^0@9sVB-T^|Z##FN}4yc-CWReLnUsx6U zUlBkEBM2fUF;h=v7jy6&U-$6w^)AY@ywCkPhLobo0G~)4XMeh35pNLBZdy9$ec~{y zNDA>e@svRqB!1+&?D8Auvcm$;3>&%3JaL#nSc#52SZMb#)@$h)j?-r}s* z8mx0q{=#5UTgh^r<~WjALJDb!kkLRDHCTw!s*z$ML;DF2|Cr-XlS?L76^tAUs6&P1 z_`(0+ceiF~I)COS1rtEv#kM~tfc{;e-L&oRW7}?@0RCs-O6&UTEnx1G^k!F!908$i z;NrTg$$P-%4lw$pONQh~ewsq51iYWoHx+>4TVQa_?X9zq(+40&T`k`L2Zz99nX=bC z-aXLU+rMWz{rv#G^>W3ei6CzP000JJOGiWi{{a60{{*1Dr<0Sh0T_SZNkldCAacz1xZZpi?)#~Y1#0FdjEN1hD(mQ>cQeJksh-Fk_-RL@SbOpBeBEA1C@2qlMb z`Y+__e*LVFlJ4#tLe_OwDe0kMF)~1QIGx$7<^UAqsV7fh8UujNHKsA>T-*P>SPvxU zl)-MSSy&8Lc1pTNX f_QUN+F`n`Um(!^3v}X0300000NkvXXu0mjfTv$RE diff --git a/src/main/resources/assets/gtnhlanth/textures/items/etched_mask1.png b/src/main/resources/assets/gtnhlanth/textures/items/etched_mask1.png index e64484950e14d334ae5e173d193bcb85201463fb..86e03a655976cb8c7ac597816db4a75739335fd8 100644 GIT binary patch delta 633 zcmV-<0*3v82DJr{L4Q-FepEWxLBt_Lb+U_!IF>3F!9r;(wCZ4T=@&FEUV979UMWPnd3j(;)Tu!uK^XE!aK^FDEy zl_iDvoOsfp3lcwaU3U46bIDK2d-P^xs+Wq|iYB_SFrJhFe00009a7bBm000XR0F%A}3V#6CNkl~QU~QDO(VeB7=i=oxkl&I6@>t3RfZ!l&h+}om z%CV@0?;s>1r*2n4wMGA&1;8nox(Hq=07Js|UPP;->`+QO3IoscfHS~}h)CEe>YZ2f zy!J*N)wJdT$UUId3k~iwW%7lh!#IuC%#FYq*k=}16zARU{mn?C<%q1!0Z) TC=8-{00000NkvXXu0mjf6tFPC delta 710 zcmV;%0y+J)1%U>TL4R9oMJpZbAmWgrI@v`<9ZMC9V4<`XT6HkF^b49aBq=VAf@{IS zkHxBki?gl{u7V)=0pjf7r060g{x2!Ci1FaKAMfrx?%o03W|b*MPYh60Q%@)2LN325 z1YY6C0795WugDB7nOV%jb$s2!!`Hhg&vHNa=NOa=1_L|-aes_yx=Fl2JhN$PocD>t ztSrjJ=fo2_U6A;Z>ypE7oJ%%)d1hG8rss*n#6qcyr7mV=T_K((j>w8i`QDtvGUqMM zO0~|~_v9}O7Sxpt*J+L-fh8o7f&dA1R8WP9D6J|f2GX=2ckz$d{uH?+a#g^{v49#B zh_)a64}N!R6o02CouptK@V{8r#~2XU1zHWu`aZU-)(PNy2CmeOzt#liK1pwMw8#+< z+6FGJJDRiyTW7rmS$ZZU~8@-I+)$j>Si`ZP?ALbNCG=zMc`|y$Eep2}7+XJRa4$xxzXsgH6*Z zYBGx!zzlzY+NmE)i07C9Y>M#Mt%-yzad_(5cQUOy$g+cw&sIH)M1)cDtMSeS)JIH; z%e_o&R30UnqJuA~XEDuLEN4)`7j?4bFvlx80MHro^*d^a9^mQ-7sq&kb&SG&TtaGR snk^DLOV+=-RexP&r+Dqpq;3F!9r;(wCZ4T=@&FEUV979UMWPnd3j(;)Tu!uK^XE!aK^FDEy zl_iDvoOsfp3lcwaU3U46bIDK2d-P^xs+Wq|iYB_SFrJhFe00009a7bBm000XS0F%A}3V#6JNklYMoSK!C5Ek6KhhQ@iV>33* z2M*+88bGY(?RDE5;Q`7-s%8m^M=0uUY_s)~wm&2K+`L~#Mulo%Pwfj5&; a6#xL#VsaChVfTmt0000t ztSrjJ=fo2_U6A;Z>ypE7oJ%%)d1hG8rss*n#6qcyr7mV=T_K((j>w8i`QDtvGUqMM zO0~|~_v9}O7Sxpt*J+L-fh8o7f&dA1R8WP9D6J|f2GX=2ckz$d{uH?+a#g^{v49#B zh_)a64}N!R6o02CouptK@V{8r#~2XU1zHWu`aZU-)(PNy2CmeOzt#liK1pwMw8#+< z+6FGJJDRiyTWyT z5QRTd98#7exK4wjK$q@~itc^1UZ98R0aCP!?1DIsY*P~dx^Q9GiGnQhc8?%F&YKy+ zJEhLedbKR){>SY`y#+AO59T)?$T>sGtXI4Vd;vK49#d)JFk)r~e;9FAs7*Cl;R`^F znc6w3e9Tuhf`1c(7)>pPSTd-JyY2q6g7s=yx&lk*FiMk@f{?IcsGTsgLP|p4k0hn1 zBP`mMk}^BLr-Tue5{pGkMZt=otR==wNo5*PTOo~ss5Q;}3MU3D3avGz6qHiL82Ph# z;^*&ULoWdR;|39-F+x)dZQBBwgaTvO9z6Z!oU_+m2xvaBg-SU4|SZ=!s1{Cjxxq{|ajuLx<58 wtu@9NQYT8Uf2P;;{p+Wab2$0u557zP05He2wI>UAGXMYp07*qoM6N<$f*MDPF#rGn diff --git a/src/main/resources/assets/gtnhlanth/textures/items/mask_substrate.png b/src/main/resources/assets/gtnhlanth/textures/items/mask_substrate.png index bbdbfb9f53b87275bafbc0ed94ab8425dda0fe77..1539ae8011f79ffcada4ca03cb1a67622c23bbf1 100644 GIT binary patch delta 591 zcmV-V03F!9r;(wCZ4T=@&FEUV979UMWPnd3j(;)Tu!uK^XE!aK^FDEy zl_iDvoOsfp3lcwaU3U46bIDK2d-P^xs+Wq|iYB_SFrJhFe00009a7bBm000XR0F%A}3xBRjL_t(I%VS`m5HRAB zIJ4*Fe`LOii#S%bEVwl8S^BsUn>e~bjOdEcHDUqv74uEt`k1h3c8Qj)$74WaN8*|P z7zV(AOSEh~5w1Y>0+CKf0U}Zy^(n17j7*e9rhNMaPC_#eduk8gY?%0~1kMoCC> zs;~Ti^Xx|>K19urZ+vD5%u!*)nHSbix%2<+^B)Z828l><)H5(JFut ztSrjJ=fo2_U6A;Z>ypE7oJ%%)d1hG8rss*n#6qcyr7mV=T_K((j>w8i`QDtvGUqMM zO0~|~_v9}O7Sxpt*J+L-fh8o7f&dA1R8WP9D6J|f2GX=2ckz$d{uH?+a#g^{v49#B zh_)a64}N!R6o02CouptK@V{8r#~2XU1zHWu`aZU-)(PNy2CmeOzt#liK1pwMw8#+< z+6FGJJDRiyTzs*ScRg z-XF*}+;(SE(n9h&rSL{@y3F!9r;(wCZ4T=@&FEUV979UMWPnd3j(;)Tu!uK^XE!aK^FDEy zl_iDvoOsfp3lcwaU3U46bIDK2d-P^xs+Wq|iYB_SFrJhFe00009a7bBm000XR0F%A}3xDuQL_t(I%VS`m5HRAB zIJ4*Fe`LOii#Q`u2Ea5*sPm(Uzqt7kuR(ClPagmH|K#zH|LAfs@s7kZ|A}%kvLcoA=``|-6&3)Q+?&Xj<+mU=bkwB@juJA9}JIgd}avDQDMZHl-EzW^Z)Jh9}F;q ske$uIzyNnT!OR4UXBa@&NHqWe6JMQ8M1qiS00000Ne4wvM6N<$f^dU1N&o-= delta 633 zcmV-<0*3w01-1o{L4R9oMJpZbAmWgrI@v`<9ZMC9V4<`XT6HkF^b49aBq=VAf@{IS zkHxBki?gl{u7V)=0pjf7r060g{x2!Ci1FaKAMfrx?%o03W|b*MPYh60Q%@)2LN325 z1YY6C0795WugDB7nOV%jb$s2!!`Hhg&vHNa=NOa=1_L|-aes_yx=Fl2JhN$PocD>t ztSrjJ=fo2_U6A;Z>ypE7oJ%%)d1hG8rss*n#6qcyr7mV=T_K((j>w8i`QDtvGUqMM zO0~|~_v9}O7Sxpt*J+L-fh8o7f&dA1R8WP9D6J|f2GX=2ckz$d{uH?+a#g^{v49#B zh_)a64}N!R6o02CouptK@V{8r#~2XU1zHWu`aZU-)(PNy2CmeOzt#liK1pwMw8#+< z+6FGJJDRiyTDmbWo(gLR0|}$tjTGI1C}lHMV@W!+HTxSG~rMRaXP> z51=eM?JTqjban-R`|Y_t_!e@#JQfE45XHWrs~P6!wD0n#N3kz>F0@w`od$p;4TO~L z0^nr2rZ;duHEaN8FQp6T<9lWzUKEX>4Tx04R}tkv&MmKpe$iQ$^8g2Rn!;WT;MdQ4z;d#UfZJZG~1HOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED_s%9Cf zcudUZR>huI^dpEt1TZEsQ%|H9Gw>W=_we!cF2b|C&;29%C|}6B ztZ?4qtX68Qbx;1nKweu(bDicW;#figNr;e9Lm3rVh|sE$Vj@NRF%SQU<4=-HCRZ7Z z91EyIh2;3b|KNAGW?_2DO$x+-?ibts7zcWGfo9#dzmILZc>?&Kfh(=;uQq_WPtxmc zEqnw7w}Ff6wkGcZmpj1llP(#OBl&3xg#z$?M&FbJhHinrHMh6cK29Hi40W}90~{Oz z6Gh5i_jq@2XK(+WY4!I5h)Z&>Rdn(B00009a7bBm000XT000XT0n*)m`~Uy}yGcYr zR5;7Elfg?AaTLctznw7`56#+af*Cdzn+VHdCn=kLKV_x5|g_r84Jd*28D2^IH| ztPbhG??=~qNvx&`Zx2W2n$3aXYKwkrbda)BUg)<&Xv1b2DLvPj0AAf6+C!As{U}w? zN9>c{y^0~t#8V#@rNg$ok+E4FNib7JTXx3#Q_t<`!`_3jM>p5zL$m^&}ALu`h7IlDzNa6v|1FF1d-#vR<5TXhIpVErp@&sB-bGXbvMMa`7o zYr3|!@VIEpCf$U77C!YsQ+a)DBR@Jhq4p{0nXfzPq+-zU2|2`$0%{gua(!vRY10jA z$2y~}T&kc~PV{<%&wR%%4oK*q*;a6r(fOB7xvwByUq0ujC$Fg3Tlj6|bKY(OdFSV& vtQ>nxt#2;shMz;PWk`Iq32)s{90Yy=XYQnfCJ6(R00000NkvXXu0mjfZGEK7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/asoc.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/asoc.png index cbb39abb608d53bd8f66c1cfc1d3f5a58936ace8..bde61aca19565616d45195f1a968f77b7145aa61 100644 GIT binary patch delta 929 zcmV;S177^O52y!!iBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsFZVY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*wx#L_t(I%e9leYg1tq z#((ckidb*JG^qsg^-@tnD0VSWDAGF^HDpi_glr<}=BA5FH~#_`(M1Zjk_;6Q;bt(M z1dUcBw3*_2BNq%!sG2}NC|;*RK1C>=^_=&|bDs0OaL5vq8jmY^$LaW>egbTr+nM9y zp8(G)Ij89of0$jn@Vj*q)Er{VN76rS9O=Q0d%BnicvH$crn^+Ax?Oabp&#J-GKIGR zr;q+J?wV0C0@yLL&PV-oAy+KRh%YYR{;-wP2|z7?sCdvUH+mCN-t$W8HREc2K>%p| z3f^y)Wy~9w^@LUkCl^$IFC0v(x!JTT)nChz6{@Q*f1LGqt16g@sa&xvcU>AiJWNus zx4SMcE-lJ)PZ!0A0)S{Tu7=GG2h$2*Sb=uf91H*w%P|FD<+tVV;5Yk~1UTbQsj+9= zF|*F256_i#45ly5s}3_%U)JP-2hsh@%G-eM_YHaNY(l2j<^_QJ0MKf*Ni4^dRV+&@ zzb$)sV}QVbg1si(xphUdWseWin)$>jg{+A|N-a$pn$_a^!+;p;LFU3u5$v8aLO&zM zum_RZedFt=_Q2!6ey01I8xCzB)cl}4JXi?{{zv@*gvGb@2FYn-00000NkvXXu0mjf Dv4XDi literal 1977 zcmV;q2S)gbP)q-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc1@1{iK~z`?V_B%Ofl0^%+RF)M_i6$qJd zn#~h6N=E55Ye;{g0mf94KQav5V32v6oJm9EIG(ECrHrK?U*&~D8CbvC(-+}W9I^pZ z76G@nMx}mJ5r$EU5!4}odPL&4qICcFjA~$H7r0h|LIKo{ z0}X)${1y9HG0#X5V(1(=oE3zqMxwTq+2&`)q-%BHU!0*qpP5CGfXH)zmU<~;$#9hy z+nE@(!#ok^$~_w9zM*ExI}=1-%^sFPr@5>e*z!nOZ)?-I)=>{8AkFtoOJzYjVMp$5 zo6|=2=dY}lcHH(_FYzknWk5BYIO$=_w~R@uT-!1&4a13`s+gml@a~ZK`an^*FhEF` zre@5_z}}@}pOK~WeGjv8%ekW-rXl|a^Ht?;_DRFL%2+S{^_=2E9Zn0NnN{?tN_F#E zu`ZK=5uZsJfH1|rpEaIjqN*MrQyBiTO|)vfs-xOcY4_rnHD6i)2NqvHPk{Xw${1hC znC6d4KOSqM9?un89pA^>>FD$ zXBVAPbZdWqT=7M=yc*cPY*Y%=^OZHb3i`S{%!njm6^d^ylhl2HuPTMEJpHO}A4uyG z@i3-J4>ANcO7{$GP*y=L_`1YY8Zi6Ld}fw9Bj{6?(cU1Z&gDGt1p}bHHzgY98KSVs zY<0qL1JN%S0F5Ec$c4Skqn(cN6DeoO6@us0K-cFU7A-a+=8&;$^O*GDhEb`9*MZvE z>buGed^d25*D>^pS0eo_XSG^`oSGm5pxr|FWXjfKJ!d@?cxvF(?4G+$Z(1owSg_As?;SB^+8tj=sgr2DUQ$5^{Wec2yt zl=gVtdx{Uz5oHAcUE0&;%zOMTCrfo1SVmKrtG?RFO61Ng-2EdvB^B*<^6Ah~Rsg%s z`J0Y>S;cgAjZMV(5zDhkMW`ur7&?yW#Eb}I6Bi-vniy7xn z*067mRx=hnK|w8>LbkG@HQ)Pl`B2kers>c9V_ojrUEvWW4PK`Q zCw|?O=bU`yWk3z!@V?Nb<4*<^D|3&y$-_bB!eMniMxDG=VZ@DlO~7g*1V!) zQE$L#LR7HvhyN4s>!qCHM{L4{)HMB=(0_p)hJX=bNQ5~E*aIniadGp)KPEZ;^2FS0 z`;uLE_e>k?Fj=b+p5VuHya*0+Ey9B#7$O#2{@~yJn&mmX=@kC}ULym`UhySr00000 LNkvXXu0mjfsSC7I diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/blank1.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/blank1.png index 561e64860a80a681c6ce69eb05f56af852271ebd..9686bf51970e287316c150aaefc67f4e85a15fe1 100644 GIT binary patch delta 923 zcmV;M17!S;2crjniBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsFZVY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(>f5k~eK~y-)wUbS26Hyd~ zpF1-kXl9z3n9!*ezYuh(?pzIaWt6H}h$~mpg}4yh`2$1*skrbTbX`Ac1w|MU+=+n} z1*u4-$s`y%$xJdSH1WEaq!~?u3-R5Yd(XYk;XQ|Y;U6W&9n8L&lRu*);2lPMws>}T zX5?M%&%}+lf9GUb)yN+`<8G7%sQaLshAZ!+(S(Ji(_*ZHhtKnJ>QuoERfTomhxRm7 z_mc^x5kEAds*bg#I@j*(-r9GTc=!krh#JywIUEu>Sq9-PIV805W591Sa=R4k1ypzAU0M>(d91YC=wX@z_( zR)%LVbAL&A8}A)}MwG)&!hWxF{)PFEFJxU+P}GiV35}Hxz?z9y x>^OgY%1K>(H78|s2r35acM(C zP-$ah001bFb&Cr)iS zmf$_&Ay$<0#3#g2P6s5u6}sZ_o8W@SUxIlyy#V+{PpQztN(-|hH;5;RBZgjPjq`|` zgj91SLwSUM)+lVGkwgL#6qK-YBVM>Z(%K zNLT68Q4w?hKTlhmnfAJe5>wb;{!F`}sb=}`n*R7oaffwM~Z2C(yr@3#^t4%F( z41{-p%bTXA8~|6l!0@vrbGa@BX!$h___zQDa=_prJ0|Urt3@Bzd?US(q7=Ob_L_t(o31eUw>41^c0FeFfmi?JQp5g0HMTWoM6&e1$ zlV@OfCC0$?P>6x)0T;uc3XZ9yn8`wn;(}jXW%pV67@jf+GQ5OqfVv$-F#-t?1_J)H z|7E-n85qPLGccUJ#@GcG#6#e9z{Y0`_4oN$7#@HP_zyMaKLZGY0e{#|h{aGzhzw8~ zq{3I?f4$eiUVkEIX3eLj|2XsF=S(N zAuYt-Fl>k0HF!dR7Joh^#>~+W7!85J69O!=7)WZ#5R<}jsS#oDgxfWELI9U*X)TTt z0_=?p1lw?wI!KYh3dIf-2T*D_Ir=diAdt?0vjItt1;~2L7_>3W#&7^ggPaHT9TCVN ziD5a&F02j!NtozR&k==xc(7UyvIlR!z+VdFh(8Pkzu17yC|gF5dLUo~Loo9{hy)X0 zE{FiD0ums4^9u?)CNNVcuzdrj+;2ec3kKQ$ve3o^)M60zA4q^O5PY1)IQ1itegfu= c5`;ql07RK!VkvDtP5=M^07*qoM6N<$g4uS7VE_OC diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/blank2.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/blank2.png index 561e64860a80a681c6ce69eb05f56af852271ebd..364e526a1c234cf3b2ab55d9680fac26555a92b7 100644 GIT binary patch delta 775 zcmV+i1Ni)o2apDTiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsI)iR65u}#34gR@u| z7c^-|Qd}Gb*Mfr|i&X~~XI&j!1wrrw#M!|~(M3x9Us7m)5#zyeKi=JY+`R*YW|gUC zPYh5s%Sb2UVlKZb23|3U5Crr?l$fa}GmBYxj<0+8_<9%RS>EUV979UMWPnd3jxpV^ zh&PC5H!Yp>K5>|pC58B$c+#K?5->Pi*0|51A$$j)v)dFW7}?>0RCs-O6&M* zOK2d-P^xs+Wq|iYB_SFrJhFelb!(>e=w|38Eo7~Y66Fg)d9NQ)F;B+7tg_tyOX%*@EJ>*v!0|Gp?QFg#FVU_39(;3~r9 z!2XMYA*qyy5vKwBFRlK+i{;XRM=Z|$=j8*$1|ky!0|UdO#T);B zeh#ty@{fxIHFJGtJa9Pv#DAacM(C zP-$ah001bFb&Cr)iS zmf$_&Ay$<0#3#g2P6s5u6}sZ_o8W@SUxIlyy#V+{PpQztN(-|hH;5;RBZgjPjq`|` zgj91SLwSUM)+lVGkwgL#6qK-YBVM>Z(%K zNLT68Q4w?hKTlhmnfAJe5>wb;{!F`}sb=}`n*R7oaffwM~Z2C(yr@3#^t4%F( z41{-p%bTXA8~|6l!0@vrbGa@BX!$h___zQDa=_prJ0|Urt3@Bzd?US(q7=Ob_L_t(o31eUw>41^c0FeFfmi?JQp5g0HMTWoM6&e1$ zlV@OfCC0$?P>6x)0T;uc3XZ9yn8`wn;(}jXW%pV67@jf+GQ5OqfVv$-F#-t?1_J)H z|7E-n85qPLGccUJ#@GcG#6#e9z{Y0`_4oN$7#@HP_zyMaKLZGY0e{#|h{aGzhzw8~ zq{3I?f4$eiUVkEIX3eLj|2XsF=S(N zAuYt-Fl>k0HF!dR7Joh^#>~+W7!85J69O!=7)WZ#5R<}jsS#oDgxfWELI9U*X)TTt z0_=?p1lw?wI!KYh3dIf-2T*D_Ir=diAdt?0vjItt1;~2L7_>3W#&7^ggPaHT9TCVN ziD5a&F02j!NtozR&k==xc(7UyvIlR!z+VdFh(8Pkzu17yC|gF5dLUo~Loo9{hy)X0 zE{FiD0ums4^9u?)CNNVcuzdrj+;2ec3kKQ$ve3o^)M60zA4q^O5PY1)IQ1itegfu= c5`;ql07RK!VkvDtP5=M^07*qoM6N<$f|CDR@u| z7c^-|Qd}Gb*Mfr|i&X~~XI&j!1wrrw#M!|~(M3x9Us7m)5#zyeKi=JY+`R*YW|gUC zPYh5s%Sb2UVlKZb23|3U5Crr?l$fa}GmBYxj<0+8_<9%RS>EUV979UMWPnd3jxpV^ zh&PC5H!Yp>K5>|pC58B$c+#K?5->Pi*0|51A$$j)v)dFW7}?>0RCs-O6&M* zOK2d-P^xs+Wq|iYB_SFrJhFelb!(>f2K)9K~y-)wUfU~TTv9p zzc0QQXllq%gtM0wAE@BeC5vQHDCIq( z9ZKt1&FU1R)D99`qbAQBhhWHic@aT8%jJ8|;d?*#+;f3DhSDhUz4%IC_XEe>z~Lhd zKb!QdRoxrge>qJ~gJDc)9sE}qKsh@Ibt?iZWs3g@criQbF!I%ky&XuhRpYh(=HI0m z`BBvg>ioUDE}jPY4M?U1ocdehT(FsLvgyw{W3-r#M|rrgDxL&AM_?_1I}+4665nJU zfxQaJs~`YO6SC+ZJL)K5tLISKHfxye|ff^hvvfWX3QHaWS)BL|r;JtduF^VKLl;l;zxDwJ1i5eY4}rtv=JQiacM(C zP-$ah001bFb&Cr)iS zmf$_&Ay$<0#3#g2P6s5u6}sZ_o8W@SUxIlyy#V+{PpQztN(-|hH;5;RBZgjPjq`|` zgj91SLwSUM)+lVGkwgL#6qK-YBVM>Z(%K zNLT68Q4w?hKTlhmnfAJe5>wb;{!F`}sb=}`n*R7oaffwM~Z2C(yr@3#^t4%F( z41{-p%bTXA8~|6l!0@vrbGa@BX!$h___zQDa=_prJ0|Urt3@Bzd?US(q7=Ob_L_t(o31eUw>41^c0FeFfmi?JQp5g0HMTWoM6&e1$ zlV@OfCC0$?P>6x)0T;uc3XZ9yn8`wn;(}jXW%pV67@jf+GQ5OqfVv$-F#-t?1_J)H z|7E-n85qPLGccUJ#@GcG#6#e9z{Y0`_4oN$7#@HP_zyMaKLZGY0e{#|h{aGzhzw8~ zq{3I?f4$eiUVkEIX3eLj|2XsF=S(N zAuYt-Fl>k0HF!dR7Joh^#>~+W7!85J69O!=7)WZ#5R<}jsS#oDgxfWELI9U*X)TTt z0_=?p1lw?wI!KYh3dIf-2T*D_Ir=diAdt?0vjItt1;~2L7_>3W#&7^ggPaHT9TCVN ziD5a&F02j!NtozR&k==xc(7UyvIlR!z+VdFh(8Pkzu17yC|gF5dLUo~Loo9{hy)X0 zE{FiD0ums4^9u?)CNNVcuzdrj+;2ec3kKQ$ve3o^)M60zA4q^O5PY1)IQ1itegfu= c5`;ql07RK!VkvDtP5=M^07*qoM6N<$f^0mALI3~& diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/cblank.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/cblank.png new file mode 100644 index 0000000000000000000000000000000000000000..f50d99f04aa0f181ec609bcc67951b8b1e369ee1 GIT binary patch literal 742 zcmVEX>4Tx04R}tkv&MmKpe$iQ$^8g2Rn!;WT;MdQ4z;d#UfZJZG~1HOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED_s%9Cf zcudUZR>huI^dpEt1TZEsQ%|H9Gw>W=_we!cF2b|C&;29%C|}6B ztZ?4qtX68Qbx;1nKweu(bDicW;#figNr;e9Lm3rVh|sE$Vj@NRF%SQU<4=-HCRZ7Z z91EyIh2;3b|KNAGW?_2DO$x+-?ibts7zcWGfo9#dzmILZc>?&Kfh(=;uQq_WPtxmc zEqnw7w}Ff6wkGcZmpj1llP(#OBl&3xg#z$?M&FbJhHinrHMh6cK29Hi40W}90~{Oz z6Gh5i_jq@2XK(+WY4!I5h)Z&>Rdn(B00009a7bBm000XT000XT0n*)m`~Uy}2uVai zR5;6HV4x5%;*#LF>iYlZcLRq1uhbcs9*Hpg%Lu@#mIYlP;416?%gka70>T0Z{(To@ zVE8A@!0<(c;X&i>|EfP37*4ghq8P-4%xOHy@Lxz+>41!|*a38dRfYKvhzau_NUzxZ zAFBaN*E9U*7gjw$$j^czd^uG1_lO(jZ+!^3kVUm9R~PCcn>USto~0u z7Yw`s{@DzSAKu+|AXd}IH=i96>RTD9>xJk*2F8zX3A^I`n@i!lfYtDr>d?YAEt7=AJ^Z0Yc2Bq}qpUv&Ea>$@Jq|2L`(OwWWF{-s4QGSC75 Y01aJIGtdHjng9R*07*qoM6N<$f+!M7X8-^I literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/ccpu.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/ccpu.png new file mode 100644 index 0000000000000000000000000000000000000000..e463952e0db5b2807f2a3d43cd3f9d0667bd5984 GIT binary patch literal 874 zcmV-w1C{)VP)EX>4Tx04R}tkv&MmKpe$iQ$^8g2Rn!;WT;MdQ4z;d#UfZJZG~1HOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED_s%9Cf zcudUZR>huI^dpEt1TZEsQ%|H9Gw>W=_we!cF2b|C&;29%C|}6B ztZ?4qtX68Qbx;1nKweu(bDicW;#figNr;e9Lm3rVh|sE$Vj@NRF%SQU<4=-HCRZ7Z z91EyIh2;3b|KNAGW?_2DO$x+-?ibts7zcWGfo9#dzmILZc>?&Kfh(=;uQq_WPtxmc zEqnw7w}Ff6wkGcZmpj1llP(#OBl&3xg#z$?M&FbJhHinrHMh6cK29Hi40W}90~{Oz z6Gh5i_jq@2XK(+WY4!I5h)Z&>Rdn(B00009a7bBm000XT000XT0n*)m`~Uy}j7da6 zR5;7EQ$I)oQ5^oxl$ugIlb|684+$cYz#xiu6uM;OA~Z%r1vNCf#SKYgLk)qnghMn) z)Kmm_(BeTzg+xeTQE4SeWE>XVYmmb~-H{Z1+k5Z#`}p4X`+mS5!5BTXqB;iL{+f^Dhm`H$OuQ2D*AW9xhG*z*~?>ASaV>Rw9Nb*26OrDU(=Eh-~*t4UJL5 z>EW&f>_Q_jsxt$?m%6E)Bpeg07*qoM6N<$g5f@h AEC2ui literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/ccpu2.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/ccpu2.png new file mode 100644 index 0000000000000000000000000000000000000000..6016b9c04e63810760d98d9bb4884af2173ece7d GIT binary patch literal 1494 zcmV;{1u6Q8P)C&{_}#MG(>0+}9Fvdrt~V=((Kx{&>!LUe0+A*uz;ZXLbZ2moFNTP|&lqyy9`b z(SsY9U^=du`h0XQM%(fIfKAnVzv|U~U(3<6o-{SEbqP;ux=|FK5e{z_b;Y~F{aPlz zE_^KPGvt86H%d>`_*HSb#-ECfSY#ILs;4L2#EB->GDc2#RM?x#mbChL)JK~z`??N>{0BSjGYy60tEn`E7kWaGSS z?G3nrIPe1y91!A9gu`Bzi^VOwS1ur=J+S`)A;bZG0S5#(;J8lMgsc-g*dEWjXPWA< zJ&7MN6RouusA#6!-PKiJe_dTu0sia4ZcD(feD8sceKg75H)mktib(cOl~

8|rIpD<*#+D9Ib&#Cec=pZfk0#AE@Ke2pceC3u24GS- z`%Qr!_yO!lz|%DN35OqYBoW=dfZBcp-i=`N3-suS>^>6P&X&*Xbt~Pr( za@@Kg01+hs5|ta2D2IXXqf{!Tv7p8j;5?G+2$V6#2Z3gABX!cJWYawR8?~)XbUGch zj~!?|3sz(d;y@dK`!^671Nu|kT*;`-q>NHNpkO?2Hqmak5fdXP&ri_pbTdDSdd0}R z7EohF!j2f9a(Pr1P1kaQe+&KSrA!0y@T zQ5x?141sRK5fV{M!A2=qdXx_wI-*`e-+>}nSHdFpa~USyrXoev1HFB!Gk1W~RUj?N z=x#TRC8`NmsV3Y(kBU+^xR2PcQc+sHDoPtgl%82wJ_0sQfbB~_m1MOrL{-?>#wFgt z8;`T|qD~eA*9Tu^e+t0ePcVjXkzgiwuWU~NP=kB#FCN6l*qXVqnE(`sx8GbGh)>0x zna-7;xxxBTMS&1_7@GB~cvX3kskOu0FrISL8G5Pq`xh_yk4fr;USFCn)o?ELUSL=5 w4vUGQW7ViTKfL$dr|gMJOLPhTms|||1LQo2H0X%|oB#j-07*qoM6N<$g3{=?+W-In literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/cpu.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/cpu.png index fbce1c288ca7dc9c782e6b88d5d5d77148d8b3d7..2ee457a94f93716e3fad515a2c3cc3855282e743 100644 GIT binary patch delta 906 zcmV;519kky4v`0ciBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsFZVY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*v>eL_t(I%e9lwD@0Kg z$G_LmWQI@A;l{J{S07kW?2FKDQ8I33w;~uFM$dv5+4L%=s3@ zvw>hkyJBx@e+9tHL5?Ii^Gvew73do@C%s8a+-w~$2v1mHJDP_D-3kSO%e_qs0FyJz zd~Y?v##;PBSKw@8L0qc}1As4=B)%yEChjc1HA4a72!hQwh+XZe~r>;JAXP~qeZa@x}`d9w!X*> zlMa&p)qy_?Ftyrrvz6z&xHYN);_mY-Nxwbk*CbYu-kZrl3BCK2`nh(+>u=c0bm$bsBfj+228RIk5Ni zk~EddOy6hF0vh7kbx|Hani9ci6c;&a63S&aL^izuBeVJBN1thEds!eP0k?So g&&KF*F~NVtJECg5oB9a{-v9sr07*qoM6N<$g5y)1djJ3c literal 1862 zcmV-M2f6r(P)q-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc1$#+EK~z`?b`&Te<< z4}}WYiZMndCMLu;lie3$x#kfRGj~6~YT4NC*#VG{pE~O#FG^rHL}} zMPCguNq$Af@au z89Da!B@Y(dW)kpHKrIDPH6e;7;OLnB{`Agh2O;hr;_h$B69ahe{f(1FRYL^^s=|VY z1Y8c@q^n8*DhUXOK;(63B^74DgHhFS<=2TFD*{+L!YKMzjtpF0Fo2Sx!qIe;2|$g4 zHv|D_P;i-stfV2z7G)s52*6QcI6%B4kf^Ch)jdp3jc22NqirSn5N*G{Z{RXNbBeZ) zIri|ehRtoxs57?B&K=F#{FX;}`_=vSzb_oMRp~(?T`hIoj(Ow0J-ixT9zO2-qV8R? zEP#D``l$oYJzo(C5VTYj-Uk%1SVR~o*q%gs73>`zTNXqYfP=d^c&jJfl?aJ=w80y8 zy!fiEk*ZGGwoA5FbrXtC(?h?5!-u*+h@~7jL;#4`sPqVw;y}?5D5}hX*dhse1&AaX zL_(#JBo3q?YiTGsjX0n|t5}HTYKWJCq!&k`fph?P@A-kr zW>V_=_s-k5Hv=<$z$YIMWF8wU+f#ZEX3&RQ*o*>(QLa4-uR4O}{0MM+5XxVDP^RLr z{xp!f4h&8MX7f~L``?G{N9uKqG>Z6f=)+9PQr(l+&hH2SwDZ-{EL}F8Ne{Z++nos+ z71K=mQxVl^(T9X4AXSMoU-xHdg@Kkf5Q|!@uFV|zy?;D2LsM`yWV)Ntl7d znZZlJn+Wf^5C=B*c5i2(-2y&*{EaYHBm)9fs(Mliyt{iY*rY#Gbgq37T670kQ4>ui8J8;sy7IyL^}Dw-ptO^8?wj=) zH`(+#AZRJBSqMPDfonz_;q*sHGJPQA0M`MR($Je~r!}16|6A|( zkpO?AS{`$Iy2A`G08YD9Brbe6m?^hPv0!GdQP}77mb00>Y+_2fNTU~qLR=8-DF`!g z>WA5#DisXAcry}S186k3wZ`zi8x+e6a7sDfPu|HP@66-qZx_N-Q zV1CZujvr3Ywq3f3v(x9Z94C;F1A&5BAFY0zfv1iX?G2-@9b{u+belc>&a-yVXKL3T z`{vHk@VU}^!q(&oTSOc&m)0d|e_tY906zHQpDb^qnh}F;8q{hFJBcN%P+=x%^eNgl zTVkcxb=dR6y3_!z`}MxX_#YG5z&5yd0pJ%W&d+9>a?Wl6i_Wt zZEs0AztFMvx#vP*j&KN^xjNbvoV#^#pykWIy>)W)<-DO_u2%OsAQQcqFLB9EK(n@> zvOsl{IAH0UP`Od{IgnNc;ZEQ2IWQFKN7|M6>dJv-gZluY0hep@nQ_WW4D z7(yx6q))RRBx0LTy5T@68@T@M>ORe)u^!C!e+?Jl3Aey6DF6Tf07*qoM6N<$f}d7s A761SM diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/csoc.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/csoc.png new file mode 100644 index 0000000000000000000000000000000000000000..5fb440e04ef78464b5ac1e9fe8640887f8849e71 GIT binary patch literal 823 zcmV-71IYY|P)EX>4Tx04R}tkv&MmKpe$iQ$^8g2Rn!;WT;MdQ4z;d#UfZJZG~1HOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED_s%9Cf zcudUZR>huI^dpEt1TZEsQ%|H9Gw>W=_we!cF2b|C&;29%C|}6B ztZ?4qtX68Qbx;1nKweu(bDicW;#figNr;e9Lm3rVh|sE$Vj@NRF%SQU<4=-HCRZ7Z z91EyIh2;3b|KNAGW?_2DO$x+-?ibts7zcWGfo9#dzmILZc>?&Kfh(=;uQq_WPtxmc zEqnw7w}Ff6wkGcZmpj1llP(#OBl&3xg#z$?M&FbJhHinrHMh6cK29Hi40W}90~{Oz z6Gh5i_jq@2XK(+WY4!I5h)Z&>Rdn(B00009a7bBm000XT000XT0n*)m`~Uy}SxH1e zR5;6HV4x5%;*#LF>iYlZcLRq1uhbcs9*Hpg%Lu@#mIYlP;416?%gka70>T0Z{(To@ zVE8A@!0<(c;X&i>|EfP37*4ghq8P-4%xOHy@Lxz+>41!|*a38dRfYKvhzau_NUzxZ zAFBaN*E9U*7gjw$$j^czd3Nz0|NttA?p!)WEXsV^VuPxzLgPgEEv0mLNu$cx5pP# za08+P85lpl#dHNac>m^;LrzBuBi5u`Z_dCNaP{8*C(L3D0>UaNiR$*-j}8n!85p*7 z_%afenbQpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*u(9L_t(I%e9lSYg17a z#(y_W6C6rOG|~<>m!_?P5F-dJiuOg@4x->x9TXfgfuTc@NaQ*^UQOal8xX(ko_qN2cYcQp|0vPz;@!_VLo);QqfkA_ z^rz2VM6e_^xV>YD`6wj%*#;f&T_RGZQJQbPTBe{kFEnSh(-4}%4esjTj43&*Ua zcKgCOxU!Q$v;jv(PV25)@Kv$3WLY4clV0<^eHesuh^fRAs~bdl+|mGJ(i`LKxN9A_ zbzkhwz&8qj7&yY5@nZVBHN2P;fe=$^L}7E)>` Bncx5b literal 2069 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 B#-;!O literal 1757 zcmV<31|s>1P)q-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc1rkX_K~z`?(LZvuhHN6+~n_UgQWsk&IUu0jQ91Jpw%+0m}u+ z1A!WVj0hXTwhMw=7&CwQT0zgt?*nKLmUiXHvfKDvoA*9fQTyYn) zLNBT-y})uegt<-#*8>P%lOW#!y5|9(HmQVjImlHF9khjC{CBqBZ3zUpjz$i35?T`% zt;Sek9aEF9jP!_JKLjsr5B)}Vytcs;o_bx}v`)X5Us_QYI)QVaZ&RE+p0i6zm}L>r z=CM4~t2*cE`+R%);-l)$QVCaMQ%a?ruV;Y^z{#hgGh+h@HPu62HCat((0gvGqJa5~ zK&b7#$#nPj>A68Qh82W&2{Z5fJ8fl$3jkL$c`2%tBEWOQ36;Nd*O?R?^{9n+nPP8| zIn%i10cq0ry`L&FD^eb@vN^_E7l4q5K^Jv!j&Ht-DwNt3Nu155@*7=hdOZkHu*Vzq zc=-Gg9ak182)h{7kU|E!;NAu+2v6+qx@anK#+}mx=6v(5?E$+7O!U2I*>ZS*p`cUv z>D(kkiL7u>w7S<$aNMZm4@0U}DYA0P79lfO<9=xS8 zi^Hk9$v(OAk%bfL6LYVsl+eiKQ}iT_AT~AF9uR6y8b098g4(Fb-eT+6%O|fLH?rV- z?1R0va$3`6t&ev~8|#t_ZHwlqh;5W;3w0Rf+MKaHK+HZ=@$u!Tl4}=nWN2CCObv9H zvQ4zM^pB68Q&=_*DVr~M$W-Ik$pYYvb}nY7Asu}8OgwoB*>Z?gMFc$!gj$K`- z1))xd2d@%a%L0aQupMo5QbI2y($+y)5TLEG3y2j1QD(GJ*;PYNGP8jYYQCE<2?8#?4JL+tclXI!i2gBt+w!O7{xex82iLXkKaet$2l z@bOlt!cHk1{95WZErQ{rzsEKh=lVF$rgZ%6*lbb~aJyJSTJS=rGP;uGB|8L9@L}ZF z==99X2zq14-z?Cz+=GbFjq-c~fgG^i7e%D3*{6ds&AVD;1t?3{`kd`5Ty9n zj_fK`xMCO~Ukurs83;KEbKkZ0Y39^@fA;?eow|szL8T2h00000NkvXXu0mjf`?WtJ diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/lcc.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/lcc.png new file mode 100644 index 0000000000000000000000000000000000000000..196b7189fb97834798c73cd71c93509a14949b93 GIT binary patch literal 824 zcmV-81IPS{P)EX>4Tx04R}tkv&MmKpe$iQ$^8g2Rn!;WT;MdQ4z;d#UfZJZG~1HOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED_s%9Cf zcudUZR>huI^dpEt1TZEsQ%|H9Gw>W=_we!cF2b|C&;29%C|}6B ztZ?4qtX68Qbx;1nKweu(bDicW;#figNr;e9Lm3rVh|sE$Vj@NRF%SQU<4=-HCRZ7Z z91EyIh2;3b|KNAGW?_2DO$x+-?ibts7zcWGfo9#dzmILZc>?&Kfh(=;uQq_WPtxmc zEqnw7w}Ff6wkGcZmpj1llP(#OBl&3xg#z$?M&FbJhHinrHMh6cK29Hi40W}90~{Oz z6Gh5i_jq@2XK(+WY4!I5h)Z&>Rdn(B00009a7bBm000XT000XT0n*)m`~Uy}T1iAf zR5;6HV4x5%;*#LF>iYlZcLRq1uhbcs9*Hpg%Lu@#mIYlP;416?%gka70>T0Z{(To@ zVE8A@!0<(c;X&i>|EfP37*4ghq8P-4%xOHy@Lxz+>41!|*a38dRfYKvhzau_NUzxZ zAFBaN*E9U*7gjw$$j^czd^Sr-hUiJGrtJ$fd!4#|8crtp_lLjbg}dc`xS7y03F0{dyAoXrh(%F zq75L~1^(F#j33_Jc0iY$>Y?+1fq{Wxs=56GWEXsV^VuPxzLgPgEKK*3gJ^cNe1I>e z;08noGBAF8i|Gn<@czvwhn$WSMyyG>-kgCk;Of2qPng9R1cX&k64mXu9~~HeGB9lE z@MR<_GqGQE`v2>@9>f1Pstioegc<&&MKChZ0ssJ%wsJGa)-)CX0000QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*y_fL_t(I%e9lsYg0iK z#($F=v3cFv*o4H5SBqc;u~pny#9*XolvcA4L2xBqhzr4;e}IS}iVK(S-1jT_j}W~MCf-aLYte_WkAZKNbKfj!67g_I!neqPx(G^ugnogtUu(ex3~^9J{40>+L*LA4~A zi05*|W>O0IL5}XfsEH*r)t?TWb;)=6ru8?^)C!(I2p9+V233G$ES8udH1f4c zw#bZ(k7?O*Ki1Pd?3w=_YjRg9V1yPnLXW+!} zxMp(}DD;wG>)QrEX<5c;Yv;4M<|;djB%{ghV{|y&96ssR;>#Y~vK6E5f{cgA!?%h6 z?DiTzf1+uW%^vvgObdPCqYt1^b>o%W1(DFprYH6q7DhFIvR?I_dv;B9NGMg@xHgg> ztLvkzVcyat*NQ8hQvjH_GAkOZvahvI71w21DoEQ8XaJSc3iZmW@6zmf(ep3djlD4P zk_nU4P!r(~isTy8m>)ooHhh15${TSuJY^WwBVCZ*iTFOi)7z&6{{z1OZ&AB`?1#~A P00000NkvXXu0mjf3XapG literal 2051 zcmV+e2>kbnP)q-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc1~^GXK~z`?FA}|n#DWzZ| zjhp*kxX?NF(?*yCz(_+X6No|-k&1#u(MH^i;+LO~Zdw$;{2hkTZ`-@XOzpQfK zTZ<(6x)dX>5+yCUjKm=+ROzEc6WH+2A&upszTq|yZ2;J@%R3hfdr(-n=3q^uMij9y zDP^XdsU}&nskLh!sJaE0sAu30&Ft5HSaD3H^--@I4G%%n0$|T`%O-iq+qJ+T5InKJ zqyjtk$a)0n#+fFwIinjHHO)+pR7?-$BWZ z3!{B``>b}u>$W`213g+1ebBA@VVnJM=K6t~%dzsK)2c9}xkl%hmZ`K%YuWd)b+4X3 zboGqLm>~uvm=t@a%Or)=t$r5lt^D$1m1&m~NzASZ&Yg|pi40Xr*#s<=%u=Pq6@t@T ziBBd$kA&o6*VbDaPrjSdd-_wAu zwB-1&s_$U>^&OfoFV>#zJ*9d!!3r$^Ye7u!1(pgo42MW18hiXK$P&NHw@m? z8fp;_fgDT?a}<_+TYee&dPSmC8!Al(gpO&Cx`K8o8igG9rvY;l9V#D3G?|3U*D_)! znxfpUP?DkBPdt;Qi%101>0vE2y`k#p0V{9trz zH8_@+=YM-Uqt;By^@OKp7^vyGC+lTcWlA#S#VQqHk{mAPiV3w)oqr_O?o;S9H0&sqj7P^#q%@OtAXa2~`+3 z9-X;voVh&IwsYSm@aSviwR}Wd#_yXf(h(R^lB#zEwoB1p%fhYlACnY*e|-4Dx^F(& z7%4{(qdP~c=;HfJ!;AkhnYUhBcYcgKa%BDas+>YJ(TmD$dT&@6q+_d4`MV5RkK@|c h|L?C^+k*F;;y;_j325XJ_MHF#002ovPDHLkV1hJ3*g^mR diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/nand.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/nand.png index 388d8494d60f8585bcf90b87b41a884ae9ddf763..991bea5d761fbdcaa4fef6c0c95e4d4d0c4e5c11 100644 GIT binary patch delta 841 zcmV-P1GfCb4A2IDiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsFZVY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*tnyL_t(I%gvKdD@0)w zho5(bM3gazOye36Q?gPbT#HdySX+oBpMZ^xoljuLMv8=@u(-sPlCoe%nOTk3pCKVJ zQ-kESn25$8Qhu9r>hya$=X4JIQX)}dB)F{9ogFT7A(T#Ud#3mnU?Mo9!d8KCA2OdJ z#UNdX9Xp=ve>6Si0lNFsMMA)uZ(12iKJzHa${ks}1z7izv0XuF>aE^q6u$Z_FNxon zR;LlK8Cdaa^(htl@v>I~IN4g!0FFb88o=Jcs+{$BRU80ddp)3)+1%Rr!juF!S=)?3 z{7V`@@FE6zD+|EU_`C|Ac};-8^}hUS^J!sWZgg&`f4B~QqJIK#cC?9%{7U`1rl%r{ zUN=@P-gOYUic-~3CIJdPZVBLMtck_)775_WX_c-9o0jm9CXG?$a~vi-q~_XW-EtVA zYdBAQxP$hl9#L>#qC0M!apO319`%FW=sWYL&or<;r-<6&JR4*NLxT>%U+5X!aEPK4 T?|9k(3jhEBNkvXXu0mjf(zt@Y delta 1602 zcmV-I2EF;v2Ez=0iBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<>acM(C zP-$ah001bFb&Cr)iS zmf$_&Ay$<0#3#g2P6s5u6}sZ_o8W@SUxIlyy#V+{PpQztN(-|hH;5;RBZgjPjq`|` zgj91SLwSUM)+lVGkwgL#6qK-YBVM>Z(%K zNLT68Q4w?hKTlhmnfAJe5>wb;{!F`}sb=}`n*R7oaffwM~Z2C(yr@3#^t4%F( z41{-p%bTXA8~|6l!0@vrbGa@BX!$h___zQDa=_prJ0|Urt3@Bzd?US(q7k>nJNkl1q6Z|7 z9FQC#Rh4=`NPrL$m#T$Z0VPmGQqr{0OObl0xWJ8n03ne}B*=;jM}!cF10t!23yqo& z+iQFMv0mP+?e*Ae8X?$IpEWz*^ZUK`#`9)?M_t%S2Jn4SKz1`szjhp;4MZ3S_JNA;n%WYRg)}` z>=1Ai=njyqFr?}Vtbc}wt)2BHd0n~8<%(RsczJ4D)B_WB?Ig0mqTQrcKBVo4TYaOu?Z zeQ9?^rvA4EGigER335Z<3ZVrAtU(`x#pi-*t%Pc=IDhaD3kiV7r+LI~(nb$mAec1h zAQh)TT#`1k&=rGF+z_H~0Wv@WZD^F@5~o^(Q#q2)xIpCqZ}_l{i$rJLzPm#g2m&63 zU7yG2f^2%6{sl?eZX;Z9^P79;m9__w;*z3sgrakZ_kaF0yfyXr0HMaGdtW7mDg6qS zLKg(BB7dZ6@zEI1Ov2!O^9#&@Xeb&sUZ35jdnPJI6VI<4*diKk-k!{txrWvU8Cyg{ zezTnC`Yi5Ve8m>gaPjl6^Yual`)6+0A{svS!_|DU3gixM*diJh#@F(Xr!4rDzi@l+ z&XU0C$)E+ORh$uQz%jj{L%DRA4E2nxicOwPQ-6FPk_gm?U;Mcw?scl32#4xP1G-7q z?yl%53ab(UQ8ulyUN=(N31rffVSU`14$AAlZVYHI8Y3>~&01NV+diT@aCIz+gL)If z1)e#E<0_*QGX=$*hkHyLw`Rdq=TO^o=~k>F%cjvR974EYHZh6zgMBOzna_S%j(`iS zh<^oo1U~t=u#_Op3;+l^W~}GdU8Qr*a@O4-@e&Fu_X-R7XXk445S!-+jMw^20<18&#I?jH3U{wP!XP+=OP# zqH;uWqn<%3F^9?@4tQ0^?w9}WX*LS;(HCm_8_(HaXPY6$NdN!<07*qoM6N<$f*Lvb AGXMYp diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/ncpu.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/ncpu.png index c76e03744d4080cd39f3680f282ca74dafe5cfec..b3b8f91eac36c4d59fe80df8e05bea1eba47c07e 100644 GIT binary patch delta 851 zcmV-Z1FZc2584KQiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsFZVY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*t_+L_t(I%e9itD@0Kk z#(&ogDQpHY3pu{!a~6^;#=VK1vSLG7DEBDAf3dN$t_yA>7yr@LYN+O2AZ`ZFbHK zW#;l65?@7c-i}GRk4~06|P4ie-xb@}%q(bPu zyY%ZP@e;qWN)hc5>%K<>Wu#~HV?;yH+ z)pzwT0!{<~5e$47b|ScbV|*38TsS6UB?kN3mm)wdQ=iWoB-%?d?NhTVO zP5<1akuyTAC6wd9i6H7M_2Vl4W|53stGskNBC`c1S{}_GS2-Jd$$rgi2gK{)ri`Az dsKI~W6&<=lr0X8$Y5V{H002ovPDHLkV1fpchJ644 literal 2047 zcmVq-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc1~f@TK~z`?Xm91wKQt~DF{Q9B(dHyb3)bta- z36Ju>=0IbI667$T%ZEe*l27-*YfSMS9Nc|c$V$qOo>?~!9D1#9zDf|6)4-O-P?lv> zloaISIcpW8*v4+?XBSQQ1rYX*V@p=pBh915_dVdI!R)h=O854bHjbtM&Qh#;sskHELb5Uh^@w+0bGVEm;ae;pWH1V+{= zNz_S`L(oSMYV|eb4cUF~+NFJw9i1L%Zd>A8{~t(AWuVZ-#p-%iK#>%yBwsQLLnw!E ziK&xmUc$W9^Qu{ueCWXnMS2MtwoC!|6Qv=gqgw=9qxj!akaDt6Hn^+LT3ohUufQV@ zuoTr0yNpn3haooLU2||YOOelM;^3NfYZO@O1r`ubfpJWxEZ8NoAp8D`Ns%Im2iVH~ zNsDIzhhS*!q}d$8<7?B_L-jhwyb``2J|p;N9(!Z<)Ss6{#Z2sx!6u1z*xmPm)G$Q5 zaJwO#rZK{mrKkiqmkeM1K#VDxfo^1^^Dxp>xS|C#Dc&BJq0?W;qJ6cC;L#os%Q@O_ z@ewX$`K=eMRuBR=_a3o~zX&>qia-~t*0$jj1o1G2^dB>i~ zEh`>qKJ=Xb)%4|oo$RjfzxPdJ(nQ3h;lQ>VJ>`2&&px zLH|sngU4$bJo@FQrnF7PrldmMmZ7F8m@19wX>xfw2*AQRvPJ=#Ooa({EGssE!;&H= z^CI--fi6Mlirf$jL&qlk3)pq>E0bpdV}n?H_U%>>UOj1&^8}48zS9Xzq*m6rMj`(c&krOS)8F| zs5W$=LbixPmJY3!eu5^^@k~EIFc(rOwu{t!7+xHNycGX9(`!0<9%WmmSjiAxLvX1B z;t;4*8@v@)6rxPfi*RKNxyo59S&B!E9D?#PG^ys!EPfuB;ur#MaFl?FAdUAiH0fGP zG{bHdqD}}J$FVpI9FPI=Qt=RNT4wDYZZiOMWpkyBsX9Or$VLQ${kysM$8PV3N&D6<~ z?;BNf>W}HR-ScG~5Ja*LA0L_DpdPr|lg66k3J83o2b)zUvOqRQVQ*64QWhA>2x^N| zoai_%umQMB>jHw|R3C!dw=hP=T>fpMLpj&g;ep7256>-)r)cNN0>%5oh?0Earg)$= zhqH=>fjcVa=*Vh##&TzW0a84t*W3$wI{kpE$jDwk{bIAH%3@&;jk_kV%c8@^=|hRm1gf{@tfp dhr;`g@ejM7DNfdgtG)mL002ovPDHLkV1nOq%e4Ri diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/nor.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/nor.png index c5526b530dd0fed5b8a3aaae3e886e747dc4d864..048c2cc8b584d33d76d8282bc8c36983ac3ba8d3 100644 GIT binary patch delta 831 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 B*dhP` diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/pic.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/pic.png index ce29d88643ffdb5f3c2b2c78a8209c0852fd4789..faa1154a70ff8474494cc4f147333b8e2e48b469 100644 GIT binary patch delta 872 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 diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/prcpu.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/prcpu.png new file mode 100644 index 0000000000000000000000000000000000000000..bd972a504980bb99817542ee43c01bfa3f887ca7 GIT binary patch literal 934 zcmV;X16lluP)EX>4Tx04R}tkv&MmKpe$iQ$^8g2Rn!;WT;MdQ4z;d#UfZJZG~1HOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED_s%9Cf zcudUZR>huI^dpEt1TZEsQ%|H9Gw>W=_we!cF2b|C&;29%C|}6B ztZ?4qtX68Qbx;1nKweu(bDicW;#figNr;e9Lm3rVh|sE$Vj@NRF%SQU<4=-HCRZ7Z z91EyIh2;3b|KNAGW?_2DO$x+-?ibts7zcWGfo9#dzmILZc>?&Kfh(=;uQq_WPtxmc zEqnw7w}Ff6wkGcZmpj1llP(#OBl&3xg#z$?M&FbJhHinrHMh6cK29Hi40W}90~{Oz z6Gh5i_jq@2XK(+WY4!I5h)Z&>Rdn(B00009a7bBm000XT000XT0n*)m`~Uy}$Vo&& zR5;7Elg~?3Q545Ncjis+Y0rgZDcOuyNtmS9^aDX!OfPU+Bv_Q2Vxku9f;KIK7D2oI z0~amY3@xGpqhE_#v@p~~^n)a{7d9Z}3&l~HY&tDuVw5)#MQ3xl=U%?&d%ov;;2%TP zdpO_OFUkp_o^Ql2ZkF;UxN&`H9Z;~_LOqfd#QxXY~&JD?SH)8;vm0$VwT9c--Iq_(Z zL^9|-l-3*&KWlqt=JCq_;M3@n0AQv#64VtjnIDw4Sg+}R54-1u)b|SAxujOkEVRxd zU5k9Q?gq{20bPtID1;M1X|mCOe(r^`HZtf~g5?LVBdbk+83`sW8`QSwDU3aR7p%++ zsXG04Z5_~dJi*&=B8UX|8wRR&3j0eLQ`NxXD=~Kp^fa6QSm?GCv60$0_|qjw*UYD07*qo IM6N<$f_mMn`Tzg` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/prhpic.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/prhpic.png new file mode 100644 index 0000000000000000000000000000000000000000..c6779afbdac5dfdbe0eef71d6468e3404e953daf GIT binary patch literal 887 zcmV--1Bm>IP)EX>4Tx04R}tkv&MmKpe$iQ$^8g2Rn!;WT;MdQ4z;d#UfZJZG~1HOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED_s%9Cf zcudUZR>huI^dpEt1TZEsQ%|H9Gw>W=_we!cF2b|C&;29%C|}6B ztZ?4qtX68Qbx;1nKweu(bDicW;#figNr;e9Lm3rVh|sE$Vj@NRF%SQU<4=-HCRZ7Z z91EyIh2;3b|KNAGW?_2DO$x+-?ibts7zcWGfo9#dzmILZc>?&Kfh(=;uQq_WPtxmc zEqnw7w}Ff6wkGcZmpj1llP(#OBl&3xg#z$?M&FbJhHinrHMh6cK29Hi40W}90~{Oz z6Gh5i_jq@2XK(+WY4!I5h)Z&>Rdn(B00009a7bBm000XT000XT0n*)m`~Uy}nMp)J zR5;7Elg~@jaTv#6pKXd583kKgM18OvL9~Mhi$M8K!b5tngAi1QShT;uc_<?4Cl3n2Xdm^`4wE?uOwB$!CHZ4e5MwYt9>!oB-|sw#@7w2jK0MF+dGS1OMhU0H zNY@vGrvR6KK;VeA{F3coPkUhKTGd?mx6f>}pi8-uCh!{uj_JDb$W(o>p2)Nmay38t z?-}#t`e*elm{E;bB0eYqUW}F1(}!ghnw~JW1^UK~8TEZq0R3Sp+nvc|N@s{J0C&Wg2i|)3JJwAJAj3fk5RGkUdDm)jG(2#idSV|%< zg~lqs3@$3sy9a?^$jOj=pUz9WRdzh4``sCXy9k$d;p!o|%|*d^=mg^>leJ1RZSnvB N002ovPDHLkV1hi$n>zpi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/prncpu.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/prncpu.png new file mode 100644 index 0000000000000000000000000000000000000000..6af5abae0a978339706754aa29d62ced40c5a845 GIT binary patch literal 899 zcmV-}1AP36P)EX>4Tx04R}tkv&MmKpe$iQ$^8g2Rn!;WT;MdQ4z;d#UfZJZG~1HOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED_s%9Cf zcudUZR>huI^dpEt1TZEsQ%|H9Gw>W=_we!cF2b|C&;29%C|}6B ztZ?4qtX68Qbx;1nKweu(bDicW;#figNr;e9Lm3rVh|sE$Vj@NRF%SQU<4=-HCRZ7Z z91EyIh2;3b|KNAGW?_2DO$x+-?ibts7zcWGfo9#dzmILZc>?&Kfh(=;uQq_WPtxmc zEqnw7w}Ff6wkGcZmpj1llP(#OBl&3xg#z$?M&FbJhHinrHMh6cK29Hi40W}90~{Oz z6Gh5i_jq@2XK(+WY4!I5h)Z&>Rdn(B00009a7bBm000XT000XT0n*)m`~Uy}rAb6V zR5;7Elg~@kQ53~LZydEIm>9^Z5vhkZVuayJBXIamM2l?Grkx9s{)Lt;q+Nf(EP_B+ zZX$3~2;avDLP9W&3H`9?N((2d2~j}?hudQM4l~VnObGAlym#+A_Z&D6{G^=5Lx1!tQbwhesMYv4QAD(=FgS#2X|QIfS5 zz-Gp*9lue>Ls=U(8v*E=RlVL<-#+49vH;?L6v-Dv)>cI}oB&+5b&|>ScX#UHV+~dC z-fc-kdXoZxP4OjE!BHh^t8!GojUcc9Ao)Ve1BCpEP)EX>4Tx04R}tkv&MmKpe$iQ$^8g2Rn!;WT;MdQ4z;d#UfZJZG~1HOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED_s%9Cf zcudUZR>huI^dpEt1TZEsQ%|H9Gw>W=_we!cF2b|C&;29%C|}6B ztZ?4qtX68Qbx;1nKweu(bDicW;#figNr;e9Lm3rVh|sE$Vj@NRF%SQU<4=-HCRZ7Z z91EyIh2;3b|KNAGW?_2DO$x+-?ibts7zcWGfo9#dzmILZc>?&Kfh(=;uQq_WPtxmc zEqnw7w}Ff6wkGcZmpj1llP(#OBl&3xg#z$?M&FbJhHinrHMh6cK29Hi40W}90~{Oz z6Gh5i_jq@2XK(+WY4!I5h)Z&>Rdn(B00009a7bBm000XT000XT0n*)m`~Uy}ok>JN zR5;7Elf6q@Q5eR5$1gPEC&o4o^^lq%h!POg#d1@Mfwn_SS3493|AS5txB)G1WnO6HTrJNYF$gsTEz=oJg4`-tb0SiC{o3eK@ z$W06J<*?sygQ&il3Sdvg6hM5}Yn)FEi93J6mJ>wBC!8z`vHm-s!ijzv>*bOrXy>~002ovPDHLkV1fyOmu3I} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/prpic.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/prpic.png new file mode 100644 index 0000000000000000000000000000000000000000..28ae06f7560d3a2ed01bde40e72c851bdcfe5f21 GIT binary patch literal 884 zcmV-)1B?8LP)EX>4Tx04R}tkv&MmKpe$iQ$^8g2Rn!;WT;MdQ4z;d#UfZJZG~1HOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED_s%9Cf zcudUZR>huI^dpEt1TZEsQ%|H9Gw>W=_we!cF2b|C&;29%C|}6B ztZ?4qtX68Qbx;1nKweu(bDicW;#figNr;e9Lm3rVh|sE$Vj@NRF%SQU<4=-HCRZ7Z z91EyIh2;3b|KNAGW?_2DO$x+-?ibts7zcWGfo9#dzmILZc>?&Kfh(=;uQq_WPtxmc zEqnw7w}Ff6wkGcZmpj1llP(#OBl&3xg#z$?M&FbJhHinrHMh6cK29Hi40W}90~{Oz z6Gh5i_jq@2XK(+WY4!I5h)Z&>Rdn(B00009a7bBm000XT000XT0n*)m`~Uy}mPtfG zR5;7Ele1@WtfIfrk)^WzM>P$FHSGxw_|$AXGI z2%NLAz2w=OlX}tiHld5JV|@N(DQC-31Wq6rC-+^KPWWMSW=*6usB6~xW8s|XySoLd zB|zw=q}3*F4Rl|azl-3iv`r)W30J4X)e(y`Z-e}ZH02vNR06YKMl1;{ci8_L3X2HmW&X^$oe7xLc zkT)GGSBDXmHo-&vFdcOiQOb)!gAB_j4P1yfRb!X76SM#l!!?%~8QjeZ@$IbNNC#1U zHx1AwdbvAvZGLT0B?S>wX-024c!CfD4DE|c6)XJ0000< KMNUMnLSTZNOqtRE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/qbit.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/qbit.png index b4668e9887125c2446dbeb47b2e8fadb971abebe..a15b921c83c6919651e301d947dd73a3bf659099 100644 GIT binary patch delta 858 zcmV-g1Eu`q58(!XiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsFZVY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*uF@L_t(I%e7KVO9D|C zJ(KpLB$$E}dVFaS^pt23Eo#JSC$y@KL5rY%K`o<2zapW1i&oX9$BYJ%LJ%%0#*~{` zLneqt#zb{nNFmZ_6rI)Oo_oK0&bbHpBLpMD|1!bx>IBlAfL4#u!O3sWnhQ6AH|6}v zVudfI2_5d6jrG5VZ&h1`^cd8esVrf3E$9)NOOI=64+qq~PfdN!3fM zLRqPAVxc1{#upvH0;g2!0dp~uMw~2X;Ri*^Y=Li7d6n&xIMuryOqEl_bt{l=%!OE& z3(?gw%w{{zCEN0xV5lG_GopeJnO~;LQdRy2XJPvJkFU<-v9sr07*qoM6N<$g7PGbxc~qF literal 2019 zcmV<92ORi`P)q-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc1{g_1K~z`?~527 z(@UB*u^{*$2)-x?PG0ImMASa`sKqKiSgq;BwkhQ===9d0zmYI<$7Oq^PJuhb<-HA_a$)H|eqoKs5!) zA`k@)YFR>wkf{CxDms<)#*Ope!q}R1FmZP$T6Hi2yW6xtE1k%|faq z$pVQ0fTcjUfJ9kBs-_@Qck%tzBO}WJSr)*nJ9AT30w@pwOCbP?=3Ah0Xp33IW>jih z(0k%n19ld-Uf6HS*ZLq&C$Qm%4-CD~K%xR99UbXv1z9PEZ~i{IBnWvaWIMO_P0{jb zh_8SoiLl-USE3H??jW%v9P`{Nc5FIGGP|h@z}Plc9!ZrTlR#F^Jw6CQMxZO28x4?1 zRfnX|ML$K0L)OSW^c&l>y9$?^x@Z9x&#Z5amYuW$3_>YM1L7@$F0ZA90N zxBN6@2oaV0Pg54;{Vdo>^|N3tP#RWoYUcCSsi_5knZg1VE!3CO78i()AD=U1l+YW? zQ_w0{f9_KwhIMe}oFENBs^gs4X#rBe6D0u_yWsbeX`>`-R7+`K7t9C;r=eHPVD`me_v8KzH_sUE z!UCNeSyry?R*DU_#@!^S3Wg4UIXA*7qv|neaX!@mdLj-zNvB@_tt}$nlR-Sw&U+r= z`Kc_Ky(j0ttjesWykFxp9l3mL#BT_QT;90!g~p-wqdtJ1va=qcgMpW|K1nT-K2OK-e4FjdfH+@V-t7kH^&%$K=j(;*`{ zi0UHkp5%h0Hh}7N+s}fm+z;oUyniZQAIl-@c=+n#*pkXw@jU@V$e#Ofc(TaHaw$O< zeG^blyB>WPI2qav`NM?23zBpyQlMH?j!P6SMGrsyvbQ7PB6;HTz5s{}j~sq%qAn*X zKGvhW(4|-yx3W(&QTBt`{ui*W_dSeJcmn_c002ovPDHLkV1gQe BtnL5+ diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/qpic.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/qpic.png index c421ebe38b9264fe721135fb2a4526d9502b14cc..0ce60e66483cb8fe63fc3d0c9b3841e8b1b47511 100644 GIT binary patch delta 873 zcmV-v1D5=b5by?niBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsFZVY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*uz7L_t(I%e9j|OI%S9 zhM%jONC-i)QPCpq_#Fsr1O+9axtm}LQLyo&u(a?O#6lslut+*#Wbe@{vo886UCQ$$IX!A6+nxh3=P09psztU!a!1ZHBl&q?QpfIkAD>rs*L zuFfnzbslHn=a+f&>O<$1NnZAFw18PT=yw3N;ws+CbTcjh-x6UbH9Bc>47`$9t?Fu< z{0m|p!1*L*E$wFi?QFZH$CCmeO$pUs&JCj<8^zAaf9GN23-MZGWEo%@k*XafbB8Is zup^qz50Q)`UIqoH@VxxB=Ct6I3vn1}U2=o1soNQZ2C$loXYC+}^3qm-YKbX8OHJB- zG&E-2I)y7EABes!6n0>}Epe-;jEUwLRk_*QqkrwPj{{cVE@Z#*bh5`WnMz1ipkEX6 zsk=e^E535zGOeAyGh9UBs2cW*Xs++I_#e6i{6vuYe+mDI00000NkvXXu0mjfZNQNf literal 2062 zcmV+p2=VucP)q-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc217|iK~z`?O*EJoV}fyNkQgz+L`?Xhi6ICvKodfFmq%$NNVP#h5kfQ({B8JAel#c(W5OT* z7!@QjiVw=O?Xum+%p_gS*U0AAQVdw3!gMhO~BB>@{r z+}!^9xz_$4m%=0fr6iO*fw&VvxDY}tXG1e1`1z;4WzzzfyhA_wRoiBs&uTzH4Iv+n zphy5La-Qvd&d~b)*5S0kDYZZ;CWwK!3m_kYmIvYm1xYJ}OxecppL@IfcKvh-K*Pa z0iQirx3HshuV#2-l^oEIP)VA{lyzuRzmO_*kYvR!;oZ(%Q-Wv$uz4jruWy-Jl{~Nm zDPilW0~d83vvZ+K?U?c&52%pIum&YWm42Z}3`=h8F}T0Ev!@9}69Bg9@Xm!}7YfVf z@2VKoh$0-5P$kNl>TGSToN_@`E!wpufIoJ9hw;O#{W|$awOVTE$xZ;k)>mc@^Mt!= zfk7a6X2*mf7l>AXV_3n`<{S?Q+OsbCv)C;WdSwWl8jU0D^czwfj?!yN_F}OV!3Y8m07!=E)d{)gV>Gj> zd$eIh8Vl8IggC+p;dpJM6uWK3671E=9@UrH_v+PhL2S%4^Dxbcz?!feZP6bXN>Os- z!f4-KJ!)Kahk>WLbGDH~CyLg?u+6_v8(RR}Ok?h6$8?H5fxgt*Z=?%>Wr2O~U$k~; z&*c*$WBM3SU{dUv4wK{)2klHb(oUCkrd^H2F*@HncUIP7X{wa6X;X=KhAJg4ADjjQ zd@?b5IEsVyD{mV&r*zdU)Q-n>mfo(sgX-eBM&b`o=T>UBo;Gb*bZm+iN3oQHt(K5U zQLNO9x7B*oZF;Hs+@Im$LG!t%mH&Hmap%*SBX9@fp`kg8@cTCh8A;*P&Nh zfMP~Lfj)3qipG3MMRL1s$VKPSU+w(I60WrL$L%Q1Fmm+ z!*C7W+p{Irik4JcBgyfqMhqPIc4T?qYaPQ*%|V64ie07T&3?RywFed5Hch&a5Xfj6 z9E46OP8WtU-3P|eo;`$Qt&Q#tJ;r26#-k_oT7DcFy#)jRekpPQ>ogeP0i^*^{F`3V zebcCmMLc-@z*0JnWA0k1;A{C~BzX)elxlsY!GMr4?GZ=Nu0$eGHMxvFw}UC2k0TO~ zQ?8(E8L=bFoaAXJPKGWbVO&f07?~?_1{mr5SkDkEp!D6EZbwWty-Df?wz2QbwPi9G zok|5Yt1Og%{UEJZOiP@5rBp(tSj6?x`i3EetXLB{nE6~o#vOCkpnfMmh8$I9HCM=D z$EAT~ex(2ao?t~b$YsTbQRBkVS-Kd|!{b9rK-7QY4Sc<-vYQz5%=5-(PykLYo<@CU z&sW#F__7t&qBwhUt~fg_9)p&kTQB{h$po~d`_-D8Jc(F_ayy|;WM<&T^Lq{HAf0L# zh-YMGqBYYY#Cw11>yq=bZ34g({YOT+*r=eLQnXbvVHMr8D;J6wDQ>`=^yh+dGj~S- zE9SD&CgS6}^@;o_$tjcOZj1SkF7Iq|&I_glz!M+7f3+)0JC`vbl=*z9v^xg_a^XqL z01w_etk=7uX>IAiiHn=3bj}K{MgNLPeZEGm7s2mk;8 diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/ram.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/ram.png index 569fc38d75fa9f23b40c8b65430b8dc32103ba5d..42d71443701a77340c8edf38bea517805dfc603b 100644 GIT binary patch delta 987 zcmV<110?+34dDlWiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsFZVY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*yzZL_t(I%e9lsYg17W z#((GD2u<^9Zcv-rYN{yKjZzoV+URXd5u=o*6>;TCx)2uycm4q)f(R~Lxpi-At>Oa` zEbi23#f4OItIZ2(-j4aRm-1X>#2d8}ip~RPZQis(7Ks;%o+X+rr!T0o9 zL~lw^Lo~70Ae*}?I#zI8kNmP8vvQ28O7YFmPk}ilaiuk3q$IFX6opwlC3DF zhA&Q7MH>?{ z$Fy32fAh#G4Z!U_seKJ5c^~wq-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc1rtd`K~z`?J7?sgK#0g$HYz?AvRkF3Y2 zB1*=9xDEt$2)_*BlmXYo-rDNf;sPP=tm4k2B#8}p{K}~fM>o(#3BITzMhy`wPpJ50 zK(_|rk`ZkahNq)!$0+$GzW?s6#bXUP>|xRRXJ4J#Y?S~{)8QH>I%GgV%6ozg=#lcY zK?Y0!ohme^0?{&|yBbO^Q1Jw6fsT3@V`Ka3LQ!t9tra`P_6rxLHn}e$>f^+fM3f)= z7qpz(0vhx*ftL2DMZGwNmh`f<3m00iS(U8NI@7Abpu%EHC93IHB%|1= z83Hdq@%NTJ2mEy}uzM2Nt{d2~ENq+O*rfx=!9B1shfeSSVt*dV{ya^dhW6V@XxkN3 ze=VWD1JrHS%~2Wg$;^#rr`wkMMCr&4pslZXqpx{K_9@?lY)L5hyBhlc z>#=GBC7li?9GnLS2#`@05|~s*MQ*1J*SjrWNu?t<;PCsYCXA*Y5&||LrfXLod85&a z#@GpzG&-cjkPxhVv3FKaVk|ZP+*112ZcH}6{$RSP`l_B-`Js9G`nNg%zRx~xo?2hY z`)ZyyeXV(O@@me1>X+xX+U`DH`|-m(Ysy2wi-sKo2Vg0&SzyN0O#D22F zUDlaXvCR{U=;f0N4RwQNEP+OiZnr};5CS!J<^1VQ8G?#H+u{%y6ar34%M=DmNHLBc z!H>9sG@vkaYS3)TdTa_o+dzpEQVKzh0OSzVz>% diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/soc.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/soc.png index 931c2a4f478d845d876ff0f90a0749eacdf21e8b..2801fbbe873f998ddb50a6bf7bf26841aec1f319 100644 GIT binary patch delta 855 zcmV-d1E~Cu5Z(rViBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsFZVY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*u6=L_t(I%e9l;D}!Me z#;<1|y{xS;6M1c~`3R+*E}}v` z1oCTI$!FUDf93=^x58U*qQV<6vtTBgfKbHGWkW*bY6CR z*6E6msO;xA*{}itgF-J&2E$S+bSkCJj-*udQ2Okc5tLnTnEwD2)m!DFzQ8sE0CA{~ ziEa-AfMohWQk#Je0201^p1Cb__XoC^!`s6Epy&Vqe_EPHS?s<5F=dEyGIhpP9RNT) zcqRSGK_yZJXhqNj*eAz`rO8DBpv%+Ev?4fd1xUVCM+es3q{Kn?F;|v@_Hlt~F4CsF z#v@`}bCE{+jZ_!UVtS>KsLo(wc$PH3c2M!jPQPch+urH*MXsdy*JD~d-s8wwfxCKu hS+Kk$84~=5J^)$Ss41e@9HRgL002ovPDHLkV1h6zi;e&Q literal 2063 zcmV+q2=MobP)q-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc21H3jK~z`?3?7987^Zoz%&l%u;FYI0ccyN64v<(%O zlLG7vP|tvwajpp%Ma# zmH`zJN(D$%8IpAonTCxESB{LVWQefR!kfEtvwY37ux%!9nE%&aVBUlP(RHZW5Qsyt zsdbtyUb~K$ADHlD_0rWA9bMY>`oOF~F0LeiqQX!SMN}o35Rg%4DJgo}SPP8{gF-DPSU1`iZePgc!MpetRF-*M)=>aJM^LkxM_0 zHAk0^pE_99|B9tC7b4Dm_?0F!f1()3z^!L-^BGdyF17R_JzeA?CNjX-c;J`R;YZ2}h28pG^T9Y02Xdj+Gpf?*;FOE#J0@Ex*mo*kU#-sgpb(CS5K zp}r&PKKtrZ-)e5X6$8u~z{1vXJxU!Ng#kVK$XnABm(O|`GlT$vLt0IjdrQD;Z?txQ z@nlZ3nE*!!Y(?LR%NmbPMn{v$l!B?h_QFS+uToM}#FQk8{l~qzZ8s=DiAGIis8ZtM zgLVm|@~Jrexy*$X3aaP!-PW(jGFqn~f%xQt)}U<2C`g=U18&2lpiRPQ)G+k@QLQ{Q zsh8D*dSVgCE^#fEr;2aNsFh#~HDpqhUfZREKq%@$`hB|YwzG-Qe!9v0nGiW4))@r| za7!9qUUIv$lP`r@CdY`ME}kasNv2fkP^~dYaY{B;EJPXY@?)D)vrt4zOrev|L4b^s zDbiz9!xl!xkc%1?B_5MV$OQzuU9VAJK+`nPG^)$VJ7c1+7)4a7OA+w_0^z{u00eyf z@hYwCxF`#>JIVuQevK|nmbH%LPLHQz^-sD9y<J?a?^}zoa@RtD_-6fE!@b zwaY7a(YbR&8fV73!` zhfZrmf^4dv>Hr0;C&v2=5P1LM{OFO2(5a>4a3x~Z=O`}*@fH2k`X(0Y2~{;t25a<(Ztu+sEE6>qB`<=l#2t zh2hq&CHI)lX)om_G~W7~78#}5Pzez5=IG8w%=H3{#bN}z&lcinch{f(QFEL>!0LVU zWJ==NlP$%3xz>M7Pq*WdL!RchAw5v~(>cV2JKP0F&oAuogVD7tIQ0g;JJX7VE)&Q$ z%c!7UDN$1DTJqis$U8BL0I_kxut1Ihzl{7-;H$d6b4$+{ z;OqV=U@X^hD>;FqvAl5kUFFcu;aMY1$R-$yGM!&ZLRsXG(l`uCyVv(@?)fC!H2sMt z6(uPAL0YETpvZ4H$T|)(b_1s_kB=-@*3$q^v@gGQc8T7=MqdKA>z0=XY_$&sgHgsz zLR8noEKuOmi%6B$p>~~;6DiNKL0EH(-kWe(&cV5L6B|-FoV_&GrJU{ep@dk&csW2K19;;VT;83@6QgdsJta7M7&b>#S>A8RA{{xukBFhnxBG~`{002ovPDHLkV1jHR%<}*M diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/ssoc.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/ssoc.png index 10209d8c63064996f21fc02fcb61d69beb28b81b..b921f474ddada6b08137b9b268820b869699ee88 100644 GIT binary patch delta 1027 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 Hu0mjf_dAk* literal 2069 zcmV+w2q-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc21-dpK~z`?UmX=Z)>ZQ;?051e%B0=Mm;h{V{_A(XbM~AW;88EiTm(3dQ(@BB z`ShTTAhP)|U`K&;6pE!onbLu{4-ehGzNj+pj$v<^(W(hHms*_S9XR(13*MLEP&@ zk^rPB`9$Y)rq*-afKvr0RRtv(BnAQn0C5krI1orE2&FxUW^4=%cQ?7?y8Eho;O=j4 zuDi%%K~a$>Zt|TAO_obVVTLL^PM)fbqlbo}+BVdDu3%!P@kYY|5li?@d&~-;d0Qc1f}|*R3hy-Rn-#T8c{@I5~@TwQ+>4UT2WI3l}ppC(*pRa+wJC03l18TAGutrWG6cn0NP%u8)8La z*2Q4t_-y->DIG*Bz%i`K($e)S${iwylve;?p;%9zT`~U4yC+O( z%&qUkF@vmx$np3v&^jvm;^Cve41rVq0eGEWQ!2cE`kRuAu7}C97`Ujc01)!hU&m7j zuajm=^LQzU4Ccw(@bC^NgabR|x)-(Cv|ulvDN}u=w%f>M5@KSO6^CU_$xx#8%F%9P z{$Q96H!h6!t!?Axt-`S4X>}|#V`xA!y#iaUM&#p-z}@*+{K;pAm>WG(HN9peQQ=lG z?}Mw~9o&EQlsGY63@ET@?^zC$nKmzCF@jWs<&m5yuz77RqG z(!u3|Q_95Xb$aNEgPohlOm=>l@=f@l!FK(7{=(?mHk13ZjD@?5G*OgagU17UfYyT58GCax0%ahSuD?F(3qRT65K;QCR1mhJoBQAQD%TZ z`H_c@DkJ3Gu2N;JO3s${rS?qbTSE@sym{D^{khtcOHQqK5r7f{?u}6X(h#D>N`+ zc=Vu%aeL?M51pKStHL!@=gIBHqA~-0-;ZqUd9{AX$vXs*65BaCyg3hHE*5)0F>K4C z7ZL*Lk3ej~Ffrq&%~GqO_3Pyb<>%3RL#ru$WNSWg+Q`T6LsL`ezxky&16WsLfCqF8 zh~l2~y5_rPQS2g)fmOJorFU7uR~oxozKkS~9)*rtS1IiQA!FKoj-Xxf`Jigj4Y)TD zHh4LFfdCwSEhBbhX+OROT12N85idqVt!DI^)Bqz5$BZbk0y@5HBDK&}tE{A6#WW6_ z8{Hr`qm#`dpUw#5KR${WSt~8pJ)24)n@r+^_l8S>6pE6biouG?6p($60XLJJjct$n9gL66eePN;*?YTS9g z+ms0+;aY*XI$DRCXuS}3|Jlkx6KPrDI2pVplXZRrNS^xn00000NkvXXu0mjf?yT#! diff --git a/src/main/resources/assets/gtnhlanth/textures/items/photomask/ulpic.png b/src/main/resources/assets/gtnhlanth/textures/items/photomask/ulpic.png index a3274605e5d2ac08c87a602b94af4cfe1e35eb27..f1eb42384b35d4b5acb9b41d5a4ed47742068e8f 100644 GIT binary patch delta 977 zcmV;?11|jY57!5OiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_ODglR)V zP)S2WAaHVTW@&6?001bFeUUv#!$2IxUsFZVY6m-rC}gNkc2N<>QpF-zC~bvS9ZW9$ zf+h_~ii@M*T5#}VvFhOBtgC~oAP9bdI6F8gx=4xtOA0N2VmvtR$GdxvyLW)ls4&&+ ziUO);8L4%lEh(QD}CNWb_q!%;r9AEeF@%1jkv%Js!IR=!x$pD{79A&y; z5pNLBZdy9$ec})+Neb~f@uWc)B!1+&?D8AuqQe5u3>lf!JaLFvEOxNm!K`Gc#52TU zMb#)@$hxe5aNgpqR%)zuPyWI{URz0Xo#rUwSV96xh>%f385LNF(5jJQB1QW#5C4ec zPm)U}R~d{P3#dYcRdn(Blb!(=e*yVPL_t(I%e9lsYZFlz z#eb6t_((FO1C5OjocaJIxTxI~k-@0NBvg$cu3SkM#f9L`KR`qf#fATYYhP^yi!fq| zAlL@lDoDkNZJGpYUX#qUG;v%ENux<{A)d|szH{&SIQMWb{3C>38)I+A?VsjB$R0rW zEc4<{xa(Q>f1kwlw^4glbQ3vzN?TbKK->cjKU_)LQWYLgjtD&+Je-QyyNBbNA-YHx zi(u`A{63ba7nPwyQQge@kk>`^+U=b!ovT?qe-yEgABk%Knc}zB(B--J3P7RcV;~4Y z#nN8g%GwnR2fy_`LxDj139d zv&9#R&ML_jGN}w*Gw}Hwv2yaPe&*6h%XXmxp<^+U^DYxUo^tf%CgOJ;g@THHZch3p@5Bvh#6EwR((rKy>00000NkvXXu0mjfrhLcn literal 2035 zcmVq-g5zeN@s@M6$cE{;pt>TTFtFV z!FTu&MlYr?CNtYw$}DElF@7GYn&KfQdUdXA8~u6JW`M7Uc$Qh*A)Y5rZ8?_UJ>nr& zl=H+V#8FNMB)%28;_;i{g2!Kic{aTO_(e~t(85X!vm!T$Cy675US^H+h?|5|b0tH0 zgw`l*q>)4d5)_oN2^|h%luephdtbcnTSkdIjQ$oX;N&QvNZu%^W$LO@)<{?B(@_y~ z|36P#o0;~yhY~>dtLuJ_1HpZuR(0LqQ`fDX0f86b+HCquG^e?5(yL7^atwrbfXkbv zrW^oQyTI_XC3Cqh1!(y-4fwbK26DjQJ0|Urt z3@Bzd?EnA(32;bRa{vGf5&!@T5&_cPe*6Fc1}I5HK~z`?U6abbx+2T?)rB3^P($zd-GlEzCe zUi^ta7ZcHJHY6tVKRwga(|)gdx~FD$$;NYDQ(e_nuipFWd)2S2f!ke-tq6#sXiR1I z(fgM}6c7wbKv)L4Wf;B#qu~He8>?qd9ndEj#?4*ae3X_1z=OwTRvK0Y9pvB}1%xOf z5a$CHp8z^V7)^qx*~qjkIQ0-Y-^R~Bp4`7Bfb}cX(Ledd^x0|-Xqgt885?Z^=+b%L zAb>udM-@b!3XFDv4CG?~O$)gukZ&0%b}f{9AyzINpVRH?ZBu{H+s_`FJ}b|Pq9IRG zDMsZs9EewF!iomCw(qECa=;8jn1g<-5_a+U>AZ_0l@rY;#@6{v$+}?7YDKLxR(AA76VtF zdeIYCk!ABvlbIY0i-nhEJ1}jAhu8e<;SC@*01(5GtXw&cp(r>Cglff$WYdg7Tsio( z$0=Ho&= zJ6lACh23zR5_`shXA%Qa7c)d@MF`k-2(8c3puTNH$Y7u_Sc4E2`nYoVArJm&b`+5E zfVZuZ2G67+K~Jzlq2k4@1hpYwjJ(i8(==h>kc>t}g8Ll5wf;I{lfO zK5KIo;^Bba{m#7yQ(qbb27JaSio~S>E6W=eVM+@XWuq!Mu=1;m;h(7nupK%j6}u>(|kh5ajY`cj^ckf^vy_Whe=&qg^NSG`_TE zGUt}+zH!Xe4UO5+9Ha~glAa_H<^Z{e%>M&vP&u+p>^u^9m-u)qQudeJEO)%wB@_7y z@(h6y^-wBQkh7SWwB0K%Vj)DKoqJe0mECR%bsXJ0U-gDsTUI+)m)xM!M2|b3hS2HM zSgOiqvt2{8bwekHZ`V-t-LBImY@J`4a2uwLFw1??TjL5EsAR6n!X>y;a4Vzn$8j z%$0f!fOLqW7)(SMNJMW--^@o}yUEyQwVav~k%di?jrB6p7>>OC<>fhfWimp$Bc~eX z^SpyxLG5eq@RYNx=v@-P1Y;Z2VHZUNaBJaOqXUE91@Sgw^2qXR%1Z6}$`7x3If&$FCg-nx)i0PnEkMRAu!(0ED zZ01z&TmR#7--!p7dnUj4&Yfu8V20~XpqRZIt-qTv+c{kP_W%8w>Ar5y_J1Fi?U7bf R(Wd|a002ovPDHLkV1ie?%x?ey diff --git a/src/main/resources/assets/gtnhlanth/textures/items/substrate_precursor.png b/src/main/resources/assets/gtnhlanth/textures/items/substrate_precursor.png index 14e9cd5b4829d85ad08e96c0df341c2c5ebc6bf9..09f54483a3cc9bd4ff16338e2e9fcfc9d6f89ec1 100644 GIT binary patch delta 537 zcmV+!0_Oeg1l9zQL4Q-FepEWxLBt_Lb+U_!IF>3F!9r;(wCZ4T=@&FEUV979UMWPnd3j(;)Tu!uK^XE!aK^FDEy zl_iDvoOsfp3lcwaU3U46bIDK2d-P^xs+Wq|iYB_SFrJhFe00009a7bBm000XR0F%A}3x9Y?L_t(I%VS`m5HRAB zIJ4*Fe`LOii#Q`uCZ5^z@;|y}eByX*#RfVO&-^E-nUF!qhA?3>h-m+k;&gN{r~1l& ztS%rG47>qkg#*n0C@y$><1^(JA)Aa#^ZF@w@Vj*Vlso^i88oN*3RZDOVqKHcs>8@Y b3jhEtQ&Fq%`wqm600000NkvXXu0mjfD3<@_ delta 560 zcmV-00?+-{1nmTnL4R9oMJpZbAmWgrI@v`<9ZMC9V4<`XT6HkF^b49aBq=VAf@{IS zkHxBki?gl{u7V)=0pjf7r060g{x2!Ci1FaKAMfrx?%o03W|b*MPYh60Q%@)2LN325 z1YY6C0795WugDB7nOV%jb$s2!!`Hhg&vHNa=NOa=1_L|-aes_yx=Fl2JhN$PocD>t ztSrjJ=fo2_U6A;Z>ypE7oJ%%)d1hG8rss*n#6qcyr7mV=T_K((j>w8i`QDtvGUqMM zO0~|~_v9}O7Sxpt*J+L-fh8o7f&dA1R8WP9D6J|f2GX=2ckz$d{uH?+a#g^{v49#B zh_)a64}N!R6o02CouptK@V{8r#~2XU1zHWu`aZU-)(PNy2CmeOzt#liK1pwMw8#+< z+6FGJJDRiyTC?dsyX~6m^ zcZkx=z`(%p=GhNS0|IkY7>RW{Ru_;1Mxp`eX@rSX&FIn0#K6G7@c71Oq6|RREG!9$ yMivGJ28OrKe Date: Sun, 24 Nov 2024 01:01:38 +0100 Subject: [PATCH 024/181] Fix crash in Fishing Port when no recipe is found (#3547) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- src/main/java/gtPlusPlus/core/util/data/ArrayUtils.java | 6 ++++-- .../machines/multi/production/MTEIndustrialFishingPond.java | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/gtPlusPlus/core/util/data/ArrayUtils.java b/src/main/java/gtPlusPlus/core/util/data/ArrayUtils.java index f0df1cb2b93..a5365011a6a 100644 --- a/src/main/java/gtPlusPlus/core/util/data/ArrayUtils.java +++ b/src/main/java/gtPlusPlus/core/util/data/ArrayUtils.java @@ -5,6 +5,8 @@ import java.util.Collections; import java.util.List; +import javax.annotation.Nonnull; + import net.minecraft.item.ItemStack; public class ArrayUtils { @@ -21,13 +23,13 @@ public static V[] insertElementAtIndex(V[] aArray, int aIndex, V aObjectToIn return newArray; } - public static Object[] removeNulls(final Object[] v) { + public static Object[] removeNulls(@Nonnull final Object[] v) { List list = new ArrayList<>(Arrays.asList(v)); list.removeAll(Collections.singleton(null)); return list.toArray(new Object[0]); } - public static ItemStack[] removeNulls(final ItemStack[] v) { + public static ItemStack[] removeNulls(@Nonnull final ItemStack[] v) { List list = new ArrayList<>(Arrays.asList(v)); list.removeAll(Collections.singleton((ItemStack) null)); return list.toArray(new ItemStack[0]); 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 index 3e6d1f397d9..d98e53e2da4 100644 --- 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 @@ -222,6 +222,10 @@ protected boolean filtersFluid() { setModeFromInputStacks(tItemInputs); ItemStack[] mFishOutput = generateLoot(); + if (mFishOutput == null) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + mFishOutput = removeNulls(mFishOutput); GTRecipe g = new GTRecipe( true, From 3ca980252c3e14ef0c925cc02ed74d3e999583b4 Mon Sep 17 00:00:00 2001 From: Crystie <50521339+CrystieColon3@users.noreply.github.com> Date: Sun, 24 Nov 2024 12:15:49 +0300 Subject: [PATCH 025/181] Renaming "Assembling Line" to "Assembly Line" (#3548) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> Co-authored-by: Martin Robertz --- .../tileentities/multis/MTECircuitAssemblyLine.java | 4 ++-- src/main/java/ggfab/mte/MTEAdvAssLine.java | 8 ++++---- src/main/java/gregtech/common/blocks/BlockCasings2.java | 2 +- .../tileentities/machines/multi/MTEAssemblyLine.java | 4 ++-- .../common/tileentities/machines/multi/MTENanoForge.java | 4 ++-- .../gregtech/loaders/preload/LoaderMetaTileEntities.java | 2 +- src/main/resources/assets/tectech/lang/en_US.lang | 6 +++--- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java b/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java index 54810bcf6d9..1cdcc314e18 100644 --- a/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java +++ b/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java @@ -129,7 +129,7 @@ public class MTECircuitAssemblyLine extends MTEEnhancedMultiBlockBase Date: Sun, 24 Nov 2024 13:55:27 +0000 Subject: [PATCH 026/181] fix treetwister effect crash (#3549) Co-authored-by: Martin Robertz --- .../gregtech/loaders/misc/bees/GTAlleleEffect.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/loaders/misc/bees/GTAlleleEffect.java b/src/main/java/gregtech/loaders/misc/bees/GTAlleleEffect.java index 128e3dfeb16..e2403178d1d 100644 --- a/src/main/java/gregtech/loaders/misc/bees/GTAlleleEffect.java +++ b/src/main/java/gregtech/loaders/misc/bees/GTAlleleEffect.java @@ -38,11 +38,15 @@ public GTAlleleEffect setIsCombinable(boolean canCombine) { @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); + if (storedData != null) { + int ticksPassed = storedData.getInteger(0); + if (ticksPassed >= this.tickThrottle) { + storedData = this.doEffectTickThrottled(genome, storedData, housing); + } else { + storedData.setInteger(0, ticksPassed + 1); + } } else { - storedData.setInteger(0, ticksPassed + 1); + storedData = this.doEffectTickThrottled(genome, storedData, housing); } return storedData; } From 528a22b5ab04fbfe5cff20ebdf428f79e8641ff9 Mon Sep 17 00:00:00 2001 From: NotAPenguin Date: Sun, 24 Nov 2024 15:57:45 +0100 Subject: [PATCH 027/181] Clarify scanner readout on T7 water multi (#3552) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../multi/purification/MTEPurificationUnitDegasser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 34be1df762f..da0887f84cc 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitDegasser.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitDegasser.java @@ -768,7 +768,7 @@ private static String generateInfoStringForBit(int i, ControlBitStatus status) { @Override public String[] getInfoData() { ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Current control signal: " + EnumChatFormatting.YELLOW + controlSignal.toString()); + info.add("Current control signal (binary): 0b" + EnumChatFormatting.YELLOW + controlSignal.toString()); info.add("Current output multiplier: " + EnumChatFormatting.YELLOW + outputMultiplier); for (FluidStack stack : insertedStuffThisCycle.values()) { info.add( From 433c17ecc8a68a2424fe702d3648ee828752ef21 Mon Sep 17 00:00:00 2001 From: chochem <40274384+chochem@users.noreply.github.com> Date: Sun, 24 Nov 2024 18:39:30 +0000 Subject: [PATCH 028/181] readd missing condition (#3554) --- src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java index 4324763bd32..c05ff7523ec 100644 --- a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java +++ b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java @@ -1471,7 +1471,7 @@ public void run() { GTMod.gregtechproxy.addAutogeneratedMoltenFluid(tMaterial.mSmeltInto); } } - if (tMaterial.mElement != null || tMaterial.mHasPlasma) { + if (tMaterial.mElement != null || (tMaterial.mHasPlasma && !tMaterial.mIconSet.is_custom)) { GTMod.gregtechproxy.addAutogeneratedPlasmaFluid(tMaterial); } if (tMaterial.hasCorrespondingFluid()) { From 92219b6be087897621f6e0612162709720277585 Mon Sep 17 00:00:00 2001 From: chochem <40274384+chochem@users.noreply.github.com> Date: Mon, 25 Nov 2024 15:44:55 +0000 Subject: [PATCH 029/181] fix mar-ce recycling and make the logic cleaner (#3556) --- src/main/java/gtnhlanth/loader/RecipeLoader.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gtnhlanth/loader/RecipeLoader.java b/src/main/java/gtnhlanth/loader/RecipeLoader.java index 282d92fd55c..81aec5bfd12 100644 --- a/src/main/java/gtnhlanth/loader/RecipeLoader.java +++ b/src/main/java/gtnhlanth/loader/RecipeLoader.java @@ -3805,8 +3805,8 @@ public static void removeCeriumCentrifuge() { int[] oreDict = OreDictionary.getOreIDs(input); for (int oreDictID : oreDict) { final String oreName = OreDictionary.getOreName(oreDictID); - if (!(oreName.startsWith("dust") && (!oreName.contains("Dephosphated")))) { - continue; + if (!oreName.startsWith("dust") || oreName.contains("Dephosphated") || oreName.startsWith("dustMAR")) { + break; } GTRecipe tRecipe = recipe.copy(); boolean modified = false; From ce3211fdffe5506494775667c441eeb139128a65 Mon Sep 17 00:00:00 2001 From: Mike_be <48237322+Miklebe@users.noreply.github.com> Date: Tue, 26 Nov 2024 13:48:12 +0400 Subject: [PATCH 030/181] Bring Item Holders' descriptions in line with other covers. (#3557) --- .../java/gregtech/common/items/MetaGeneratedItem01.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/items/MetaGeneratedItem01.java b/src/main/java/gregtech/common/items/MetaGeneratedItem01.java index e217c3994ff..0b96caea028 100644 --- a/src/main/java/gregtech/common/items/MetaGeneratedItem01.java +++ b/src/main/java/gregtech/common/items/MetaGeneratedItem01.java @@ -2933,19 +2933,19 @@ public MetaGeneratedItem01() { addItem( Cover_Chest_Basic.ID, "Basic Item Holder", - "Hold a few item for use within machine GUI", + "Holds 9 item for use within machine GUI (as Cover)", 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", + "Holds 12 item for use within machine GUI (as Cover)", 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", + "Holds 15 item for use within machine GUI (as Cover)", new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2L))); ItemList.Cover_Screen.set( From 60238097632aeb0efe55bd08d7c402c90cb32020 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Tue, 26 Nov 2024 11:54:40 +0100 Subject: [PATCH 031/181] update --- dependencies.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 794de351eeb..e675e17a02a 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -42,8 +42,8 @@ dependencies { api("com.github.GTNewHorizons:ModularUI:1.2.16:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") - api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-477-GTNH:dev") - api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.3.49-gtnh:dev") + api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-478-GTNH:dev") + api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.3.50-gtnh:dev") api('com.github.GTNewHorizons:Yamcl:0.6.0:dev') api("com.github.GTNewHorizons:Postea:1.0.13:dev") @@ -59,7 +59,7 @@ dependencies { compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.54:dev") compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta22:api') { transitive = false } - compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.3:dev") { transitive = false } + compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.4:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.8.22:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:ForestryMC:4.9.19:dev") { transitive = false } @@ -80,7 +80,7 @@ dependencies { compileOnly rfg.deobf("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:Nuclear-Control:2.6.7:dev") { transitive = false } compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") { transitive = false } - implementation("com.github.GTNewHorizons:Hodgepodge:2.5.80:dev") + implementation("com.github.GTNewHorizons:Hodgepodge:2.5.81:dev") compileOnly('com.github.GTNewHorizons:Botania:1.11.5-GTNH:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:HoloInventory:2.4.13-GTNH:dev') { transitive = false } compileOnly rfg.deobf("curse.maven:extra-utilities-225561:2264384") @@ -97,7 +97,7 @@ dependencies { compileOnly('com.github.GTNewHorizons:SC2:2.2.0:dev') {transitive=false} compileOnly('com.github.GTNewHorizons:Binnie:2.4.4:dev') {transitive = false} compileOnly('curse.maven:PlayerAPI-228969:2248928') {transitive=false} - devOnlyNonPublishable('com.github.GTNewHorizons:BlockRenderer6343:1.2.14:dev'){transitive=false} + devOnlyNonPublishable('com.github.GTNewHorizons:BlockRenderer6343:1.2.15:dev'){transitive=false} compileOnly("com.google.auto.value:auto-value-annotations:1.10.1") { transitive = false } annotationProcessor("com.google.auto.value:auto-value:1.10.1") From 07dcf9a41af79b9d1d33f597c37eea4ae8e691db Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Tue, 26 Nov 2024 15:54:23 -0500 Subject: [PATCH 032/181] Waterline fixes (#3558) --- src/main/java/gregtech/api/enums/SoundResource.java | 2 +- .../machines/multi/purification/MTEPurificationUnitBase.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/api/enums/SoundResource.java b/src/main/java/gregtech/api/enums/SoundResource.java index f262dc2619a..ec2327e04ef 100644 --- a/src/main/java/gregtech/api/enums/SoundResource.java +++ b/src/main/java/gregtech/api/enums/SoundResource.java @@ -70,7 +70,7 @@ public enum SoundResource { GT_MACHINES_PURIFICATION_PH_LOOP(237, GregTech.ID, "machines.PurificationPhLoop"), GT_MACHINES_COAGULATION_LOOP(238, GregTech.ID, "machines.PurificationCoagulationLoop"), GT_MACHINES_OZONATION_LOOP(239, GregTech.ID, "machines.PurificationOzonationLoop"), - GT_MACHINES_PURIFICATION_PLASMA_LOOP(240, "machines.PurificationPlasmaLoop"), + GT_MACHINES_PURIFICATION_PLASMA_LOOP(240, GregTech.ID, "machines.PurificationPlasmaLoop"), GT_MACHINES_MULTI_LATHE_LOOP(241, GregTech.ID, "machines.MultiLatheLoop"), GT_MACHINES_MULTI_AUTOCLAVE_LOOP(242, GregTech.ID, "machines.MultiAutoclaveLoop"), 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 index 14ac444842e..714d189fa29 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBase.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBase.java @@ -416,8 +416,8 @@ public void startCycle(int cycleTime, int progressTime) { } public void addRecipeOutputs() { - this.addFluidOutputs(mOutputFluids); - this.addItemOutputs(mOutputItems); + if (mOutputFluids != null) this.addFluidOutputs(mOutputFluids); + if (mOutputItems != null) this.addItemOutputs(mOutputItems); } public void endCycle() { From 09bd436111a90dad8b7981f608a3d37dcd3632fc Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Wed, 27 Nov 2024 12:46:25 +0100 Subject: [PATCH 033/181] update --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index e675e17a02a..65c71c162b8 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -58,7 +58,7 @@ dependencies { compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.54:dev") - compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta22:api') { transitive = false } + compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta23:api') { transitive = false } compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.4:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.8.22:dev") { transitive = false } From d6076e75ac5ab788d6a5a22436cf2d6fd3b685ef Mon Sep 17 00:00:00 2001 From: RecursivePineapple Date: Wed, 27 Nov 2024 15:01:57 -0500 Subject: [PATCH 034/181] Fix crash when configuring ender tank covers (#3562) --- .../thing/cover/CoverEnderFluidLink.java | 49 +++++++++---------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java b/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java index 9e63c852219..4ea43062b26 100644 --- a/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java +++ b/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java @@ -1,6 +1,5 @@ package tectech.thing.cover; -import java.util.Objects; import java.util.UUID; import net.minecraft.entity.player.EntityPlayer; @@ -25,6 +24,7 @@ import gregtech.api.util.ISerializableObject; import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import gtPlusPlus.core.tileentities.base.TileEntityBase; import tectech.mechanics.enderStorage.EnderLinkTag; import tectech.mechanics.enderStorage.EnderWorldSavedData; @@ -61,6 +61,14 @@ public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, EnderLinkTag tag = EnderWorldSavedData.getEnderLinkTag((IFluidHandler) aTileEntity); if (tag != null) { + boolean shouldBePrivate = testBit(aCoverVariable, PUBLIC_PRIVATE_MASK); + boolean isPrivate = tag.getUUID() != null; + + if (shouldBePrivate != isPrivate) { + tag = new EnderLinkTag(tag.getFrequency(), shouldBePrivate ? getOwner(aTileEntity) : null); + EnderWorldSavedData.bindEnderLinkTag(teTank, tag); + } + IFluidHandler enderTank = EnderWorldSavedData.getEnderFluidContainer(tag); if (testBit(aCoverVariable, IMPORT_EXPORT_MASK)) { @@ -73,6 +81,16 @@ public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, return aCoverVariable; } + private static UUID getOwner(Object te) { + if (te instanceof IGregTechTileEntity igte) { + return igte.getOwnerUuid(); + } else if (te instanceof TileEntityBase teb) { + return teb.getOwnerUUID(); + } else { + return null; + } + } + @Override public void onBaseTEDestroyed(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { if (aTileEntity instanceof IFluidHandler fluidHandlerSelf) { @@ -156,7 +174,6 @@ public EnderFluidLinkUIFactory(CoverUIBuildContext buildContext) { super(buildContext); } - @SuppressWarnings("PointlessArithmeticExpression") @Override protected void addUIWidgets(ModularWindow.Builder builder) { TextFieldWidget frequencyField = new TextFieldWidget(); @@ -175,8 +192,7 @@ protected void addUIWidgets(ModularWindow.Builder builder) { if (testBit(convert(getCoverData()), PUBLIC_PRIVATE_MASK)) { uuid = getUUID(); - if (!(tank instanceof IGregTechTileEntity gte)) return; - if (!uuid.equals(gte.getOwnerUuid())) return; + if (!uuid.equals(getOwner(tank))) return; } EnderWorldSavedData.bindEnderLinkTag(tank, new EnderLinkTag(val, uuid)); @@ -233,30 +249,9 @@ protected void addUIWidgets(ModularWindow.Builder builder) { private int getNewCoverVariable(int id, int coverVariable) { switch (id) { - case PUBLIC_BUTTON_ID: { - if (getUIBuildContext().getTile() instanceof IGregTechTileEntity gte) { - EnderLinkTag tag = EnderWorldSavedData.getEnderLinkTag(gte); - - if (tag != null) { - EnderWorldSavedData.bindEnderLinkTag(gte, new EnderLinkTag(tag.getFrequency(), null)); - } - } - - return toggleBit(coverVariable, PUBLIC_PRIVATE_MASK); - } - case PRIVATE_BUTTON_ID: { - if (getUIBuildContext().getTile() instanceof IGregTechTileEntity gte) { - EnderLinkTag tag = EnderWorldSavedData.getEnderLinkTag(gte); - - UUID player = getUUID(); - - if ((gte.getOwnerUuid() == null || Objects.equals(player, gte.getOwnerUuid())) && tag != null) { - EnderWorldSavedData.bindEnderLinkTag(gte, new EnderLinkTag(tag.getFrequency(), player)); - } - } - + 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); From a9d5783751dd871b8cadca7ef4eb79571638428f Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Wed, 27 Nov 2024 22:37:13 -0300 Subject: [PATCH 035/181] Fixed Wrong Antimatter Tooltip (#3564) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../java/goodgenerator/blocks/tileEntity/AntimatterForge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java index 312f8f48b6e..5c1c317dfe6 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java @@ -208,7 +208,7 @@ protected MultiblockTooltipBuilder createTooltip() { + " EU per operation to produce antimatter") .addSeparator() .addInfo("Every cycle, the lowest amount of antimatter in the 16 antimatter hatches is recorded") - .addInfo("Cycles every 5 seconds") + .addInfo("Cycles every second") .addInfo( "All hatches with more than the lowest amount will " + EnumChatFormatting.RED + "lose half the difference!" From 6c43c6161afa24bb8ff2234c564a111df6058ace Mon Sep 17 00:00:00 2001 From: BucketBrigade <138534411+CookieBrigade@users.noreply.github.com> Date: Thu, 28 Nov 2024 10:49:38 -0600 Subject: [PATCH 036/181] Fix UCFE Scanner Info (#3566) --- .../blocks/tileEntity/MTEUniversalChemicalFuelEngine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java index 0b6e9586890..f7d95fbcf9f 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java @@ -276,7 +276,7 @@ public boolean onRunningTick(ItemStack stack) { public String[] getInfoData() { String[] info = super.getInfoData(); info[4] = "Currently generates: " + EnumChatFormatting.RED - + GTUtility.formatNumbers(this.getPowerFlow()) + + GTUtility.formatNumbers(this.getPowerFlow() * tEff) + EnumChatFormatting.RESET + " EU/t"; info[6] = "Problems: " + EnumChatFormatting.RED From 3fcd89ab979db773d63c498de905558d32943420 Mon Sep 17 00:00:00 2001 From: JMan-Zx Date: Thu, 28 Nov 2024 08:49:52 -0800 Subject: [PATCH 037/181] Update MTEIndustrialCompressor.java (#3563) --- .../machines/multi/compressor/MTEIndustrialCompressor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 313f24f41de..a8f4fd5752d 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java @@ -63,7 +63,7 @@ public class MTEIndustrialCompressor extends MTEExtendedPowerMultiBlockBase Date: Thu, 28 Nov 2024 12:01:03 -0600 Subject: [PATCH 038/181] Godforge hangover (#3396) Co-authored-by: GDCloud Co-authored-by: GDCloud <93287602+GDCloudstrike@users.noreply.github.com> Co-authored-by: Martin Robertz --- .../api/gui/modularui/GTUITextures.java | 1 + .../gregtech/api/util/GTRecipeConstants.java | 6 + .../loader/recipe/BaseRecipeLoader.java | 1 + .../java/tectech/loader/recipe/Godforge.java | 220 +- .../recipe/GodforgeUpgradeCostFrontend.java | 74 + .../tectech/recipe/TecTechRecipeMaps.java | 12 + .../thing/block/RenderForgeOfGods.java | 4 +- .../thing/block/TileEntityForgeOfGods.java | 2 +- .../tectech/thing/gui/TecTechUITextures.java | 3 + .../multi/godforge/MTEBaseModule.java | 1 + .../multi/godforge/MTEExoticModule.java | 178 +- .../multi/godforge/MTEForgeOfGods.java | 2368 ++++++----------- .../multi/godforge/MTEMoltenModule.java | 10 +- .../multi/godforge/MTEPlasmaModule.java | 10 +- .../multi/godforge/MTESmeltingModule.java | 12 +- .../godforge/color/ForgeOfGodsStarColor.java | 29 +- .../ForgeOfGodsRingsStructureString.java | 2 +- .../ForgeOfGodsStructureString.java | 2 +- .../godforge/upgrade/ForgeOfGodsUpgrade.java | 475 ++++ .../godforge/upgrade/UpgradeStorage.java | 285 ++ .../godforge/{ => util}/ForgeOfGodsUI.java | 361 ++- .../multi/godforge}/util/GodforgeMath.java | 70 +- .../godforge/util/MilestoneFormatter.java | 47 + .../multi/godforge/util/MilestoneIcon.java | 46 + .../multi/godforge/util/UpgradeColor.java | 72 + .../textures/gui/picture/arrow_gray.png | Bin 0 -> 195 bytes .../resources/assets/tectech/lang/en_US.lang | 33 +- .../gui/overlay_button/statistics.png | Bin 0 -> 445 bytes .../textures/gui/picture/green_checkmark.png | Bin 0 -> 212 bytes .../textures/gui/picture/rainbow_square.png | Bin 3493 -> 3665 bytes 30 files changed, 2564 insertions(+), 1760 deletions(-) create mode 100644 src/main/java/tectech/recipe/GodforgeUpgradeCostFrontend.java rename src/main/java/tectech/thing/metaTileEntity/multi/godforge/{ => structure}/ForgeOfGodsRingsStructureString.java (99%) rename src/main/java/tectech/thing/metaTileEntity/multi/godforge/{ => structure}/ForgeOfGodsStructureString.java (99%) create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/godforge/upgrade/ForgeOfGodsUpgrade.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/godforge/upgrade/UpgradeStorage.java rename src/main/java/tectech/thing/metaTileEntity/multi/godforge/{ => util}/ForgeOfGodsUI.java (61%) rename src/main/java/tectech/{ => thing/metaTileEntity/multi/godforge}/util/GodforgeMath.java (84%) create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/MilestoneFormatter.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/MilestoneIcon.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/UpgradeColor.java create mode 100644 src/main/resources/assets/gregtech/textures/gui/picture/arrow_gray.png create mode 100644 src/main/resources/assets/tectech/textures/gui/overlay_button/statistics.png create mode 100644 src/main/resources/assets/tectech/textures/gui/picture/green_checkmark.png diff --git a/src/main/java/gregtech/api/gui/modularui/GTUITextures.java b/src/main/java/gregtech/api/gui/modularui/GTUITextures.java index 2e0fc114d9e..499f043af18 100644 --- a/src/main/java/gregtech/api/gui/modularui/GTUITextures.java +++ b/src/main/java/gregtech/api/gui/modularui/GTUITextures.java @@ -537,6 +537,7 @@ public static FallbackableUITexture fallbackableProgressbar(String name, UITextu 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_ARROW_GRAY = UITexture.fullImage(GregTech.ID, "gui/picture/arrow_gray"); 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"); diff --git a/src/main/java/gregtech/api/util/GTRecipeConstants.java b/src/main/java/gregtech/api/util/GTRecipeConstants.java index 883f1060ac7..f0e4cacd650 100644 --- a/src/main/java/gregtech/api/util/GTRecipeConstants.java +++ b/src/main/java/gregtech/api/util/GTRecipeConstants.java @@ -129,6 +129,12 @@ public class GTRecipeConstants { public static final RecipeMetadataKey FOG_PLASMA_MULTISTEP = SimpleRecipeMetadataKey .create(Boolean.class, "fog_plasma_multistep"); + /** + * FOG Shortened upgrade name. + */ + public static final RecipeMetadataKey FOG_UPGRADE_NAME_SHORT = SimpleRecipeMetadataKey + .create(String.class, "fog_plasma_upgrade_name_short"); + /** * DEFC Casing tier. */ diff --git a/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java b/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java index 180e8514f4a..445dd9c0690 100644 --- a/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java +++ b/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java @@ -46,5 +46,6 @@ public void run() { } else { Godforge.runDevEnvironmentRecipes(); } + Godforge.addFakeUpgradeCostRecipes(); } } diff --git a/src/main/java/tectech/loader/recipe/Godforge.java b/src/main/java/tectech/loader/recipe/Godforge.java index 981f6b139a7..51be5b9e7fc 100644 --- a/src/main/java/tectech/loader/recipe/Godforge.java +++ b/src/main/java/tectech/loader/recipe/Godforge.java @@ -11,9 +11,10 @@ import static gregtech.api.util.GTRecipeConstants.FOG_EXOTIC_TIER; import static gregtech.api.util.GTRecipeConstants.FOG_PLASMA_MULTISTEP; import static gregtech.api.util.GTRecipeConstants.FOG_PLASMA_TIER; +import static gregtech.api.util.GTRecipeConstants.FOG_UPGRADE_NAME_SHORT; import static tectech.recipe.TecTechRecipeMaps.godforgeExoticMatterRecipes; import static tectech.recipe.TecTechRecipeMaps.godforgePlasmaRecipes; -import static tectech.util.GodforgeMath.getRandomIntInRange; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.getRandomIntInRange; import java.util.ArrayList; import java.util.Arrays; @@ -26,6 +27,8 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; +import org.apache.commons.lang3.ArrayUtils; + import goodgenerator.items.GGMaterial; import goodgenerator.util.ItemRefer; import gregtech.api.enums.GTValues; @@ -47,6 +50,7 @@ import it.unimi.dsi.fastutil.ints.IntList; import tectech.recipe.TecTechRecipeMaps; import tectech.thing.CustomItemList; +import tectech.thing.metaTileEntity.multi.godforge.upgrade.ForgeOfGodsUpgrade; public class Godforge implements Runnable { @@ -55,7 +59,6 @@ public class Godforge implements Runnable { 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<>(); @@ -688,83 +691,154 @@ public void run() { // 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(2), - 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, 2), - CustomItemList.EOH_Infinite_Energy_Casing.get(64), - CustomItemList.StabilisationFieldGeneratorTier5.get(16), ItemList.ZPM6.get(6), - 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) }); + ForgeOfGodsUpgrade.START.addExtraCost( + 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)); + + ForgeOfGodsUpgrade.FDIM.addExtraCost( + 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)); + + ForgeOfGodsUpgrade.GPCI.addExtraCost( + 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)); + + ForgeOfGodsUpgrade.QGPIU.addExtraCost( + 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)); + + ForgeOfGodsUpgrade.CD.addExtraCost( + 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(2), + ItemList.Field_Generator_UMV.get(32)); + + ForgeOfGodsUpgrade.EE.addExtraCost( + 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, 2), + CustomItemList.EOH_Infinite_Energy_Casing.get(64), + CustomItemList.StabilisationFieldGeneratorTier5.get(16), + ItemList.ZPM6.get(6), + ItemList.Field_Generator_UMV.get(64)); + + ForgeOfGodsUpgrade.END.addExtraCost( + 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)); } } public static void runDevEnvironmentRecipes() { // put something in here to not crash the game in dev environment when opening the manual insertion window - godforgeUpgradeMats.put(0, new ItemStack[] { new ItemStack(Blocks.cobblestone, 4) }); - godforgeUpgradeMats.put(5, new ItemStack[] { new ItemStack(Blocks.cobblestone, 8) }); - godforgeUpgradeMats.put(7, new ItemStack[] { new ItemStack(Blocks.cobblestone, 12) }); - godforgeUpgradeMats.put(11, new ItemStack[] { new ItemStack(Blocks.cobblestone, 16) }); - godforgeUpgradeMats.put(26, new ItemStack[] { new ItemStack(Blocks.cobblestone, 32) }); - godforgeUpgradeMats.put(29, new ItemStack[] { new ItemStack(Blocks.cobblestone, 48) }); - godforgeUpgradeMats.put(30, new ItemStack[] { new ItemStack(Blocks.cobblestone, 64) }); + ForgeOfGodsUpgrade.START.addExtraCost( + new ItemStack(Blocks.cobblestone, 4), + new ItemStack(Blocks.dirt, 12), + new ItemStack(Blocks.diamond_block, 8), + new ItemStack(Blocks.gold_block, 32)); + ForgeOfGodsUpgrade.FDIM.addExtraCost(new ItemStack(Blocks.cobblestone, 8)); + ForgeOfGodsUpgrade.GPCI.addExtraCost(new ItemStack(Blocks.cobblestone, 12)); + ForgeOfGodsUpgrade.QGPIU.addExtraCost(new ItemStack(Blocks.cobblestone, 16)); + ForgeOfGodsUpgrade.CD.addExtraCost(new ItemStack(Blocks.cobblestone, 32)); + ForgeOfGodsUpgrade.EE.addExtraCost(new ItemStack(Blocks.cobblestone, 48)); + ForgeOfGodsUpgrade.END.addExtraCost(new ItemStack(Blocks.cobblestone, 64)); + } + + public static void addFakeUpgradeCostRecipes() { + GTValues.RA.stdBuilder() + .itemInputs(ArrayUtils.addAll(ForgeOfGodsUpgrade.START.getExtraCost())) + .itemOutputs( + CustomItemList.Godforge_GravitonFlowModulatorTier1.get(1), + CustomItemList.Machine_Multi_SmeltingModule.get(1)) + .duration(1) + .eut(1) + .metadata(FOG_UPGRADE_NAME_SHORT, ForgeOfGodsUpgrade.START.getShortNameText()) + .fake() + .addTo(TecTechRecipeMaps.godforgeFakeUpgradeCostRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ArrayUtils.addAll(ForgeOfGodsUpgrade.FDIM.getExtraCost())) + .itemOutputs(CustomItemList.Machine_Multi_MoltenModule.get(1)) + .duration(1) + .eut(1) + .metadata(FOG_UPGRADE_NAME_SHORT, ForgeOfGodsUpgrade.FDIM.getShortNameText()) + .fake() + .addTo(TecTechRecipeMaps.godforgeFakeUpgradeCostRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ArrayUtils.addAll(ForgeOfGodsUpgrade.GPCI.getExtraCost())) + .itemOutputs(CustomItemList.Machine_Multi_PlasmaModule.get(1)) + .duration(1) + .eut(1) + .metadata(FOG_UPGRADE_NAME_SHORT, ForgeOfGodsUpgrade.GPCI.getShortNameText()) + .fake() + .addTo(TecTechRecipeMaps.godforgeFakeUpgradeCostRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ArrayUtils.addAll(ForgeOfGodsUpgrade.QGPIU.getExtraCost())) + .itemOutputs(CustomItemList.Machine_Multi_QuarkGluonPlasmaModule.get(1)) + .fluidOutputs(MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000)) + .duration(1) + .eut(1) + .metadata(FOG_UPGRADE_NAME_SHORT, ForgeOfGodsUpgrade.QGPIU.getShortNameText()) + .fake() + .addTo(TecTechRecipeMaps.godforgeFakeUpgradeCostRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ArrayUtils.addAll(ForgeOfGodsUpgrade.CD.getExtraCost())) + .itemOutputs(CustomItemList.Godforge_GravitonFlowModulatorTier2.get(1)) + .duration(1) + .eut(1) + .metadata(FOG_UPGRADE_NAME_SHORT, ForgeOfGodsUpgrade.CD.getShortNameText()) + .fake() + .addTo(TecTechRecipeMaps.godforgeFakeUpgradeCostRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ArrayUtils.addAll(ForgeOfGodsUpgrade.EE.getExtraCost())) + .itemOutputs(CustomItemList.Godforge_GravitonFlowModulatorTier3.get(1)) + .duration(1) + .eut(1) + .metadata(FOG_UPGRADE_NAME_SHORT, ForgeOfGodsUpgrade.EE.getShortNameText()) + .fake() + .addTo(TecTechRecipeMaps.godforgeFakeUpgradeCostRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ArrayUtils.addAll(ForgeOfGodsUpgrade.END.getExtraCost())) + .itemOutputs(MaterialsUEVplus.GravitonShard.getGems(1)) + .fluidOutputs(MaterialsUEVplus.MagMatter.getMolten(576), Materials.Neutronium.getPlasma(1000)) + .duration(1) + .eut(1) + .metadata(FOG_UPGRADE_NAME_SHORT, ForgeOfGodsUpgrade.END.getShortNameText()) + .fake() + .addTo(TecTechRecipeMaps.godforgeFakeUpgradeCostRecipes); } public static void initMoltenModuleRecipes() { diff --git a/src/main/java/tectech/recipe/GodforgeUpgradeCostFrontend.java b/src/main/java/tectech/recipe/GodforgeUpgradeCostFrontend.java new file mode 100644 index 00000000000..aa818561717 --- /dev/null +++ b/src/main/java/tectech/recipe/GodforgeUpgradeCostFrontend.java @@ -0,0 +1,74 @@ +package tectech.recipe; + +import static gregtech.api.util.GTRecipeConstants.FOG_UPGRADE_NAME_SHORT; + +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.EnumChatFormatting; + +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.MethodsReturnNonnullByDefault; +import gregtech.common.gui.modularui.UIHelper; +import gregtech.nei.RecipeDisplayInfo; +import tectech.thing.gui.TecTechUITextures; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class GodforgeUpgradeCostFrontend extends RecipeMapFrontend { + + public GodforgeUpgradeCostFrontend(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 UIHelper.getGridPositions(itemInputCount, 8, 17, 4); + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return UIHelper.getGridPositions(itemOutputCount, 116, 26, 1); + } + + @Override + public List getFluidOutputPositions(int fluidOutputCount) { + return UIHelper.getGridPositions(fluidOutputCount, 134, 26, 1); + } + + @Override + protected void drawDurationInfo(RecipeDisplayInfo recipeInfo) {} + + @Override + protected void drawEnergyInfo(RecipeDisplayInfo recipeInfo) {} + + @Override + protected void drawSpecialInfo(RecipeDisplayInfo recipeInfo) { + String upgradeName = recipeInfo.recipe.getMetadataOrDefault(FOG_UPGRADE_NAME_SHORT, ""); + int width = Minecraft.getMinecraft().fontRenderer.getStringWidth(upgradeName); + if (width % 2 == 1) width -= 1; + int xOffset = 18 - width / 2 - 1; + recipeInfo.drawText(" ", 83, -76); + recipeInfo.drawText( + EnumChatFormatting.BLUE.toString() + EnumChatFormatting.UNDERLINE + EnumChatFormatting.BOLD + upgradeName, + 110 + xOffset, + 0); + } +} diff --git a/src/main/java/tectech/recipe/TecTechRecipeMaps.java b/src/main/java/tectech/recipe/TecTechRecipeMaps.java index d4908df5b7f..de98a2c2749 100644 --- a/src/main/java/tectech/recipe/TecTechRecipeMaps.java +++ b/src/main/java/tectech/recipe/TecTechRecipeMaps.java @@ -85,4 +85,16 @@ public static void init() {} .logoPos(151, 63) .build(); + public static final RecipeMap godforgeFakeUpgradeCostRecipes = RecipeMapBuilder + .of("gt.recipe.upgrade_costs") + .maxIO(12, 2, 0, 2) + .addSpecialTexture(83, 38, 30, 13, GTUITextures.PICTURE_ARROW_GRAY) + .dontUseProgressBar() + .neiTransferRect(83, 38, 30, 13) + .frontend(GodforgeUpgradeCostFrontend::new) + .neiHandlerInfo( + builder -> builder.setDisplayStack(CustomItemList.Machine_Multi_ForgeOfGods.get(1)) + .setHeight(100)) + .build(); + } diff --git a/src/main/java/tectech/thing/block/RenderForgeOfGods.java b/src/main/java/tectech/thing/block/RenderForgeOfGods.java index 90914344900..af67c97d44b 100644 --- a/src/main/java/tectech/thing/block/RenderForgeOfGods.java +++ b/src/main/java/tectech/thing/block/RenderForgeOfGods.java @@ -28,8 +28,8 @@ import com.gtnewhorizon.gtnhlib.client.renderer.vbo.VertexBuffer; import tectech.Reference; -import tectech.thing.metaTileEntity.multi.godforge.ForgeOfGodsRingsStructureString; -import tectech.thing.metaTileEntity.multi.godforge.ForgeOfGodsStructureString; +import tectech.thing.metaTileEntity.multi.godforge.structure.ForgeOfGodsRingsStructureString; +import tectech.thing.metaTileEntity.multi.godforge.structure.ForgeOfGodsStructureString; import tectech.util.StructureVBO; import tectech.util.TextureUpdateRequester; diff --git a/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java index a8a8992a638..0e18b08667c 100644 --- a/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java +++ b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java @@ -200,7 +200,7 @@ public void incrementColors() { cycleStep = 0; } else { // update interp values to the next set, reset cycleStep then interpolate - cycleStep = -255; + cycleStep -= 255; cycleStarColors(); interpolateColors(); } diff --git a/src/main/java/tectech/thing/gui/TecTechUITextures.java b/src/main/java/tectech/thing/gui/TecTechUITextures.java index 89fb7c5b110..f8e6bbe59b5 100644 --- a/src/main/java/tectech/thing/gui/TecTechUITextures.java +++ b/src/main/java/tectech/thing/gui/TecTechUITextures.java @@ -123,6 +123,8 @@ public class TecTechUITextures { .fullImage(MODID, "gui/overlay_button/furnace_mode_on"); public static final UITexture OVERLAY_BUTTON_FURNACE_MODE_OFF = UITexture .fullImage(MODID, "gui/overlay_button/furnace_mode_off"); + public static final UITexture OVERLAY_BUTTON_STATISTICS = UITexture + .fullImage(MODID, "gui/overlay_button/statistics"); 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"); @@ -226,6 +228,7 @@ public class TecTechUITextures { .fullImage(MODID, "gui/picture/connector_red_opaque"); public static final UITexture SLOT_OUTLINE_GREEN = UITexture.fullImage(MODID, "gui/picture/green_selector"); public static final UITexture UNSELECTED_OPTION = UITexture.fullImage(MODID, "gui/picture/unselected_option"); + public static final UITexture GREEN_CHECKMARK_11x9 = UITexture.fullImage(MODID, "gui/picture/green_checkmark"); public static final UITexture PICTURE_GODFORGE_MILESTONE_CHARGE = UITexture .fullImage(MODID, "gui/picture/milestone_charge"); public static final UITexture PICTURE_GODFORGE_MILESTONE_CONVERSION = UITexture diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEBaseModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEBaseModule.java index 8b432d2ce86..85cc5b11b59 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEBaseModule.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEBaseModule.java @@ -57,6 +57,7 @@ import tectech.TecTech; import tectech.thing.gui.TecTechUITextures; import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.thing.metaTileEntity.multi.godforge.util.ForgeOfGodsUI; public class MTEBaseModule extends TTMultiblockBase { diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEExoticModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEExoticModule.java index d30f9402d91..e14a40f8631 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEExoticModule.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEExoticModule.java @@ -1,5 +1,6 @@ package tectech.thing.metaTileEntity.multi.godforge; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; import static gregtech.api.util.GTRecipeBuilder.INGOTS; import static gregtech.api.util.GTRecipeBuilder.SECONDS; @@ -22,8 +23,6 @@ import java.util.Map; import java.util.stream.Stream; -import javax.annotation.Nonnull; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -42,6 +41,8 @@ import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; import com.gtnewhorizons.modularui.api.fluids.FluidTanksHandler; import com.gtnewhorizons.modularui.api.fluids.IFluidTanksHandler; +import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; import com.gtnewhorizons.modularui.api.math.Alignment; import com.gtnewhorizons.modularui.api.math.Pos2d; import com.gtnewhorizons.modularui.api.math.Size; @@ -53,6 +54,7 @@ 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.SlotWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; import gregtech.api.enums.MaterialsUEVplus; @@ -69,13 +71,15 @@ import gregtech.api.util.GTOreDictUnificator; import gregtech.api.util.GTRecipe; import gregtech.api.util.GTStreamUtil; +import gregtech.api.util.GTUtility; import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.api.util.OverclockCalculator; import tectech.TecTech; import tectech.recipe.TecTechRecipeMaps; import tectech.thing.CustomItemList; import tectech.thing.gui.TecTechUITextures; -import tectech.util.GodforgeMath; +import tectech.thing.metaTileEntity.multi.godforge.util.ForgeOfGodsUI; +import tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath; public class MTEExoticModule extends MTEBaseModule { @@ -93,6 +97,7 @@ public class MTEExoticModule extends MTEBaseModule { private BigInteger powerForRecipe = BigInteger.ZERO; private static final int NUMBER_OF_INPUTS = 7; private static final int INPUT_LIST_WINDOW_ID = 11; + private static final int POSSIBLE_INPUTS_WINDOW_ID = 12; public MTEExoticModule(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); @@ -126,7 +131,7 @@ protected Stream findRecipeMatches(@Nullable RecipeMap map) { @NotNull @Override - protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { if (!recipeInProgress || recipeRegenerated) { powerForRecipe = BigInteger.valueOf(getProcessingVoltage()) .multiply(BigInteger.valueOf(recipe.mDuration * actualParallel)); @@ -155,7 +160,8 @@ protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { } for (FluidStack stack : recipe.mFluidInputs) { - if (!ArrayUtils.contains(inputFluids, stack)) { + if (!ArrayUtils.contains(inputFluids, stack) + || inputFluids[ArrayUtils.indexOf(inputFluids, stack)].amount != stack.amount) { return SimpleCheckRecipeResult.ofFailure("waiting_for_inputs"); } } @@ -164,7 +170,7 @@ protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { @NotNull @Override - protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + protected CheckRecipeResult onRecipeStart(@NotNull GTRecipe recipe) { EUt = calculatedEut; powerForRecipe = BigInteger.valueOf(EUt) .multiply(BigInteger.valueOf(duration * actualParallel)); @@ -181,9 +187,9 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { return CheckRecipeResultRegistry.SUCCESSFUL; } - @Nonnull + @NotNull @Override - protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) .setDurationDecreasePerOC(getOverclockTimeFactor()); } @@ -369,7 +375,7 @@ public boolean supportsSingleRecipeLocking() { @Override public boolean supportsBatchMode() { - return false; + return true; } @Override @@ -465,6 +471,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont .setTooltipShowUpDelay(TOOLTIP_DELAY)); super.addUIWidgets(builder, buildContext); buildContext.addSyncedWindow(INPUT_LIST_WINDOW_ID, this::createInputListWindow); + buildContext.addSyncedWindow(POSSIBLE_INPUTS_WINDOW_ID, this::createPossibleInputsWindow); builder.widget(createMagmatterSwitch(builder)); builder.widget(createExpectedInputsButton()); builder.widget( @@ -548,6 +555,10 @@ protected ModularWindow createInputListWindow(final EntityPlayer player) { builder, (widget, val) -> widget.notifyTooltipChange())); + if (NewHorizonsCoreMod.isModLoaded()) { + builder.widget(createPossibleInputsButton()); + } + return builder.build(); } @@ -563,6 +574,155 @@ private Widget createExpectedInputsButton() { .setPos(8, 69); } + protected ModularWindow createPossibleInputsWindow(final EntityPlayer player) { + final int WIDTH = 300; + final int HEIGHT = 143; + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.widget( + ButtonWidget.closeWindowButton(true) + .setPos(284, 4)); + + int QGPItemMapSize = exoticModulePlasmaItemMap.size(); + int QGPFluidMapSize = exoticModulePlasmaFluidMap.size(); + + IItemHandlerModifiable QGPItemHandler = new ItemStackHandler(QGPItemMapSize); + IFluidTanksHandler QGPFluidHandler = new FluidTanksHandler(QGPFluidMapSize, 128000); + + List> itemEntryList = new ArrayList<>(exoticModulePlasmaItemMap.entrySet()); + List> fluidEntryList = new ArrayList<>(exoticModulePlasmaFluidMap.entrySet()); + + int slotYQGP = 0; + + for (int i = 0; i < QGPItemMapSize + QGPFluidMapSize; i++) { + + int slotXQGP = 6 + i % 16 * 18; + slotYQGP = 17 + i / 16 * 18; + + if (i < QGPItemMapSize) { + QGPItemHandler.setStackInSlot( + i, + GTUtility.copyAmount( + 1, + itemEntryList.get(i) + .getKey())); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.BUTTON_STANDARD_PRESSED) + .setPos(slotXQGP, slotYQGP) + .setSize(18, 18)); + builder.widget( + new SlotWidget(QGPItemHandler, i).setAccess(false, false) + .setRenderStackSize(false) + .disableInteraction() + .setPos(slotXQGP, slotYQGP) + .setSize(18, 18)); + } else { + QGPFluidHandler.setFluidInTank( + i - QGPItemMapSize, + fluidEntryList.get(i - QGPItemMapSize) + .getKey() + .getFluid(), + 1); + builder.widget( + new DrawableWidget().setDrawable(ModularUITextures.FLUID_SLOT) + .setSize(18, 18) + .setPos(slotXQGP, slotYQGP)) + .widget( + new FluidSlotWidget(QGPFluidHandler, i - QGPItemMapSize).setInteraction(false, false) + .setSize(18, 18) + .setPos(slotXQGP, slotYQGP)); + } + } + + int magMatterItemMapSize = exoticModuleMagmatterItemMap.size(); + + IItemHandlerModifiable magMatterItemHandler = new ItemStackHandler(magMatterItemMapSize); + IFluidTanksHandler magMatterFluidHandler = new FluidTanksHandler(2, 128000); + magMatterFluidHandler.setFluidInTank( + 0, + MaterialsUEVplus.Space.getMolten(1) + .getFluid(), + 1); + magMatterFluidHandler.setFluidInTank( + 1, + MaterialsUEVplus.Time.getMolten(1) + .getFluid(), + 1); + + List> magMatteritemEntryList = new ArrayList<>( + exoticModuleMagmatterItemMap.entrySet()); + + int slotXMagmatter; + int slotYMagmatter; + + for (int i = 0; i < magMatterItemMapSize + 2; i++) { + slotXMagmatter = 6 + i % 16 * 18; + slotYMagmatter = slotYQGP + 30 + i / 16 * 18; + + if (i < magMatterItemMapSize) { + magMatterItemHandler.setStackInSlot( + i, + GTUtility.copyAmount( + 1, + magMatteritemEntryList.get(i) + .getKey())); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.BUTTON_STANDARD_PRESSED) + .setPos(slotXMagmatter, slotYMagmatter) + .setSize(18, 18)); + builder.widget( + new SlotWidget(magMatterItemHandler, i).setAccess(false, false) + .setRenderStackSize(false) + .disableInteraction() + .setPos(slotXMagmatter, slotYMagmatter) + .setSize(18, 18)); + } else { + builder.widget( + new DrawableWidget().setDrawable(ModularUITextures.FLUID_SLOT) + .setSize(18, 18) + .setPos(slotXMagmatter, slotYMagmatter)) + .widget( + new FluidSlotWidget(magMatterFluidHandler, i - magMatterItemMapSize) + .setInteraction(false, false) + .setSize(18, 18) + .setPos(slotXMagmatter, slotYMagmatter)); + } + } + + builder.widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.possibleinputsqgp")) + .setDefaultColor(EnumChatFormatting.BLACK) + .setTextAlignment(Alignment.Center) + .setSize(300, 9) + .setPos(0, 6)); + + builder.widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.possibleinputsmagmatter")) + .setDefaultColor(EnumChatFormatting.BLACK) + .setTextAlignment(Alignment.Center) + .setSize(300, 9) + .setPos(0, slotYQGP + 21)); + + return builder.build(); + } + + private Widget createPossibleInputsButton() { + return new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getContext() + .openSyncedWindow(POSSIBLE_INPUTS_WINDOW_ID); + } + }) + .setPlayClickSound(true) + .setBackground(ModularUITextures.ICON_INFO) + .addTooltip(translateToLocal("fog.button.possibleexoticinputs.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setSize(16, 16) + .setPos(79, 37); + } + protected ButtonWidget createMagmatterSwitch(IWidgetBuilder builder) { Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { if (isMagmatterCapable) { diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java index c7d52215c99..a5f833d830a 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java @@ -1,6 +1,9 @@ package tectech.thing.metaTileEntity.multi.godforge; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +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.Mods.Avaritia; import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; import static gregtech.api.util.GTModHandler.getModItem; @@ -11,21 +14,20 @@ 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 static tectech.thing.metaTileEntity.multi.godforge.upgrade.ForgeOfGodsUpgrade.*; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.allowModuleConnection; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.calculateEnergyDiscountForModules; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.calculateFuelConsumption; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.calculateMaxFuelFactor; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.calculateMaxHeatForModules; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.calculateMaxParallelForModules; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.calculateProcessingVoltageForModules; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.calculateSpeedBonusForModules; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.calculateStartupFuelConsumption; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.queryMilestoneStats; +import static tectech.thing.metaTileEntity.multi.godforge.util.GodforgeMath.setMiscModuleParameters; import java.awt.Desktop; import java.awt.Toolkit; @@ -36,7 +38,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.Objects; import java.util.function.Function; import javax.annotation.Nullable; @@ -46,8 +47,9 @@ 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.ChatComponentText; +import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; import net.minecraftforge.common.util.ForgeDirection; @@ -55,7 +57,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.math.LongMath; -import com.google.common.primitives.Booleans; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; import com.gtnewhorizon.structurelib.structure.IStructureDefinition; @@ -65,22 +66,17 @@ import com.gtnewhorizons.modularui.api.drawable.Text; import com.gtnewhorizons.modularui.api.drawable.UITexture; import com.gtnewhorizons.modularui.api.drawable.shapes.Rectangle; -import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; 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.ModularUIContext; 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.DynamicPositionedRow; import com.gtnewhorizons.modularui.common.widget.DynamicTextWidget; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.FluidNameHolderWidget; @@ -88,7 +84,6 @@ 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.SlotWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; @@ -109,6 +104,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.MTEHatchInput; import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.recipe.RecipeMap; import gregtech.api.render.TextureFactory; import gregtech.api.util.GTOreDictUnificator; import gregtech.api.util.HatchElementBuilder; @@ -118,57 +114,80 @@ import gregtech.common.tileentities.machines.MTEHatchOutputBusME; import tectech.TecTech; import tectech.loader.ConfigHandler; +import tectech.recipe.TecTechRecipeMaps; 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.ForgeOfGodsUI.StarColorRGBM; import tectech.thing.metaTileEntity.multi.godforge.color.ForgeOfGodsStarColor; import tectech.thing.metaTileEntity.multi.godforge.color.StarColorSetting; import tectech.thing.metaTileEntity.multi.godforge.color.StarColorStorage; +import tectech.thing.metaTileEntity.multi.godforge.structure.ForgeOfGodsRingsStructureString; +import tectech.thing.metaTileEntity.multi.godforge.structure.ForgeOfGodsStructureString; +import tectech.thing.metaTileEntity.multi.godforge.upgrade.ForgeOfGodsUpgrade; +import tectech.thing.metaTileEntity.multi.godforge.upgrade.UpgradeStorage; +import tectech.thing.metaTileEntity.multi.godforge.util.ForgeOfGodsUI; +import tectech.thing.metaTileEntity.multi.godforge.util.ForgeOfGodsUI.StarColorRGBM; +import tectech.thing.metaTileEntity.multi.godforge.util.MilestoneFormatter; +import tectech.thing.metaTileEntity.multi.godforge.util.MilestoneIcon; +import tectech.thing.metaTileEntity.multi.godforge.util.UpgradeColor; public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable, ISurvivalConstructable { + // Field default values for non-zero value defaults for item NBT checks + private static final int DEFAULT_FUEL_CONSUMPTION_FACTOR = 1; + private static final int DEFAULT_MAX_BATTERY_CHARGE = 100; + private static final int DEFAULT_RING_AMOUNT = 1; + private static final int DEFAULT_ROTATION_SPEED = 5; + private static final int DEFAULT_STAR_SIZE = 20; + private static final String DEFAULT_STAR_COLOR = ForgeOfGodsStarColor.DEFAULT.getName(); + private static final MilestoneFormatter DEFAULT_FORMATTING_MODE = MilestoneFormatter.COMMA; + private static final BigInteger DEFAULT_TOTAL_POWER = BigInteger.ZERO; + 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 FormattingMode formattingMode = FormattingMode.NONE; - private boolean isRenderActive = false; - private boolean secretUpgrade = false; + private int fuelConsumptionFactor = DEFAULT_FUEL_CONSUMPTION_FACTOR; + private int selectedFuelType; + private int internalBattery; + private int maxBatteryCharge = DEFAULT_MAX_BATTERY_CHARGE; + private int gravitonShardsAvailable; + private int gravitonShardsSpent; + private int ringAmount = DEFAULT_RING_AMOUNT; + private int stellarFuelAmount; + private int neededStartupFuel; + private long fuelConsumption; + private long totalRecipesProcessed; + private long totalFuelConsumed; + private float totalExtensionsBuilt; + private float powerMilestonePercentage; + private float recipeMilestonePercentage; + private float fuelMilestonePercentage; + private float structureMilestonePercentage; + private float invertedPowerMilestonePercentage; + private float invertedRecipeMilestonePercentage; + private float invertedFuelMilestonePercentage; + private float invertedStructureMilestonePercentage; + private BigInteger totalPowerConsumed = DEFAULT_TOTAL_POWER; + private boolean batteryCharging; + private boolean inversion; + private boolean gravitonShardEjection; + private MilestoneFormatter formattingMode = DEFAULT_FORMATTING_MODE; + private boolean isRenderActive; + private boolean secretUpgrade; + private boolean isRendererDisabled; private final ItemStack[] storedUpgradeWindowItems = new ItemStack[16]; public ArrayList moduleHatches = new ArrayList<>(); protected ItemStackHandler inputSlotHandler = new ItemStackHandler(16); + private final UpgradeStorage upgrades = new UpgradeStorage(); + private ForgeOfGodsUpgrade currentUpgradeWindow; + // Star cosmetics fields // actual star cosmetics private final StarColorStorage starColors = new StarColorStorage(); - private String selectedStarColor = ForgeOfGodsStarColor.DEFAULT.getName(); - private int rotationSpeed = 5; - private int starSize = 20; + private String selectedStarColor = DEFAULT_STAR_COLOR; + private int rotationSpeed = DEFAULT_ROTATION_SPEED; + private int starSize = DEFAULT_STAR_SIZE; // editing star color private ForgeOfGodsStarColor newStarColor = starColors.newTemplateColor(); private int starColorR, starColorG, starColorB; @@ -189,9 +208,8 @@ public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable, private static final int STAR_COSMETICS_WINDOW_ID = 18; private static final int STAR_CUSTOM_COLOR_WINDOW_ID = 19; private static final int STAR_CUSTOM_COLOR_IMPORT_WINDOW_ID = 20; + private static final int STATISTICS_WINDOW_ID = 21; 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; @@ -307,7 +325,13 @@ public IStructureDefinition getStructure_EM() { .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( + 'A', + HatchElementBuilder.builder() + .atLeast(InputBus, InputHatch, OutputBus) + .casingIndex(TEXTURE_INDEX + 3) + .dot(1) + .buildAndChain(GodforgeCasings, 3)) .addElement('B', ofBlock(GodforgeCasings, 0)) .addElement('C', ofBlock(GodforgeCasings, 1)) .addElement('D', ofBlock(GodforgeCasings, 2)) @@ -400,7 +424,7 @@ public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStac return false; } - if (internalBattery != 0 && !isRenderActive) { + if (internalBattery != 0 && !isRenderActive && !isRendererDisabled) { createRenderer(); } // Check there is 1 input bus @@ -434,7 +458,7 @@ public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStac return false; } - if (isUpgradeActive(26)) { + if (isUpgradeActive(CD)) { if (checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 11, -67)) { ringAmount = 2; destroySecondRing(); @@ -454,7 +478,7 @@ public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStac } } - if (isUpgradeActive(29)) { + if (isUpgradeActive(EE)) { if (checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 13, -76)) { ringAmount = 3; destroyThirdRing(); @@ -487,21 +511,19 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { startRecipeProcessing(); int maxModuleCount = 8; - if (upgrades[26]) { + if (isUpgradeActive(CD)) { maxModuleCount += 4; } - if (upgrades[29]) { + if (isUpgradeActive(EE)) { maxModuleCount += 4; } - boolean isFinalUpgradeUnlocked = upgrades[30]; - if (!mInputBusses.isEmpty()) { - if (internalBattery == 0 || isFinalUpgradeUnlocked) { + if (internalBattery == 0 || isUpgradeActive(END)) { MTEHatchInputBus inputBus = mInputBusses.get(0); ItemStack[] inputBusInventory = inputBus.getRealInventory(); ItemStack itemToAbsorb = STELLAR_FUEL; - if (isFinalUpgradeUnlocked && internalBattery != 0) { + if (isUpgradeActive(END) && internalBattery != 0) { itemToAbsorb = GTOreDictUnificator.get(OrePrefixes.gem, MaterialsUEVplus.GravitonShard, 1); } if (inputBusInventory != null) { @@ -531,7 +553,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (stellarFuelAmount >= neededStartupFuel) { stellarFuelAmount -= neededStartupFuel; increaseBattery(neededStartupFuel); - createRenderer(); + if (!isRendererDisabled) createRenderer(); } } } @@ -547,7 +569,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { if (!ConfigHandler.debug.DEBUG_MODE) { determineGravitonShardAmount(); } - if (upgrades[30] && gravitonShardEjection) { + if (isUpgradeActive(END) && gravitonShardEjection) { ejectGravitonShards(); } @@ -562,7 +584,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { calculateEnergyDiscountForModules(module, this); setMiscModuleParameters(module, this); queryMilestoneStats(module, this); - if (!upgrades[28]) { + if (!isUpgradeActive(TBF)) { calculateProcessingVoltageForModules(module, this); } } else { @@ -651,19 +673,10 @@ public IGTHatchAdder adder() { } private TileEntityForgeOfGods getRenderer() { - 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; - + ChunkCoordinates renderPos = getRenderPos(); TileEntity tile = this.getBaseMetaTileEntity() .getWorld() - .getTileEntity((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset)); + .getTileEntity(renderPos.posX, renderPos.posY, renderPos.posZ); if (tile instanceof TileEntityForgeOfGods forgeTile) { return forgeTile; @@ -684,26 +697,17 @@ private void updateRenderer() { } 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; + ChunkCoordinates renderPos = getRenderPos(); this.getBaseMetaTileEntity() .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); + .setBlock(renderPos.posX, renderPos.posY, renderPos.posZ, Blocks.air); this.getBaseMetaTileEntity() .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), forgeOfGodsRenderBlock); + .setBlock(renderPos.posX, renderPos.posY, renderPos.posZ, forgeOfGodsRenderBlock); TileEntityForgeOfGods rendererTileEntity = (TileEntityForgeOfGods) this.getBaseMetaTileEntity() .getWorld() - .getTileEntity((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset)); + .getTileEntity(renderPos.posX, renderPos.posY, renderPos.posZ); switch (ringAmount) { case 2 -> { @@ -715,9 +719,7 @@ private void createRenderer() { destroySecondRing(); destroyThirdRing(); } - default -> { - destroyFirstRing(); - } + default -> destroyFirstRing(); } rendererTileEntity.setRenderRotation(getRotation(), getDirection()); @@ -727,20 +729,10 @@ private void createRenderer() { } 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; - + ChunkCoordinates renderPos = getRenderPos(); this.getBaseMetaTileEntity() .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); + .setBlock(renderPos.posX, renderPos.posY, renderPos.posZ, Blocks.air); switch (ringAmount) { case 2 -> { @@ -752,14 +744,23 @@ private void destroyRenderer() { buildSecondRing(); buildThirdRing(); } - default -> { - buildFirstRing(); - } + default -> buildFirstRing(); } isRenderActive = false; } + private ChunkCoordinates getRenderPos() { + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + double xOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double yOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetY; + double zOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + return new ChunkCoordinates((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset)); + } + private void destroyFirstRing() { buildPiece(STRUCTURE_PIECE_FIRST_RING_AIR, null, false, 63, 14, -59); } @@ -786,15 +787,15 @@ private void buildThirdRing() { @Override public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!ConfigHandler.debug.DEBUG_MODE) return; - if (isRenderActive) { - destroyRenderer(); - isRenderActive = false; + if (isRendererDisabled) { + isRendererDisabled = false; + // let the renderer automatically rebuild itself as needed through normal logic } else { - ringAmount = 3; - createRenderer(); - isRenderActive = true; + isRendererDisabled = true; + if (isRenderActive) destroyRenderer(); } + aPlayer.addChatMessage( + new ChatComponentText("Animations are now " + (isRendererDisabled ? "disabled" : "enabled") + ".")); } @Override @@ -840,6 +841,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont buildContext.addSyncedWindow(STAR_COSMETICS_WINDOW_ID, this::createStarCosmeticsWindow); buildContext.addSyncedWindow(STAR_CUSTOM_COLOR_WINDOW_ID, this::createStarCustomColorWindow); buildContext.addSyncedWindow(STAR_CUSTOM_COLOR_IMPORT_WINDOW_ID, this::createStarColorImportWindow); + buildContext.addSyncedWindow(STATISTICS_WINDOW_ID, this::createStatisticsWindow); builder.widget( new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE) @@ -858,7 +860,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont button.add(TecTechUITextures.OVERLAY_BUTTON_ARROW_BLUE_UP); return button.toArray(new IDrawable[0]); }) - .addTooltip("Path of Celestial Transcendence") + .addTooltip(translateToLocal("fog.button.upgradetree.tooltip")) .setPos(174, 167) .setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( @@ -882,11 +884,15 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont .setPos(174, 110) .setTooltipShowUpDelay(TOOLTIP_DELAY)) .widget( - TextWidget.dynamicText(this::storedFuel) + TextWidget.dynamicText(this::storedFuelHeaderText) .setDefaultColor(EnumChatFormatting.WHITE) .setPos(6, 8) - .setSize(74, 34)) - .widget(createPowerSwitchButton()) + .setSize(185, 10)) + .widget( + TextWidget.dynamicText(this::storedFuel) + .setDefaultColor(EnumChatFormatting.WHITE) + .setPos(6, 20) + .setSize(185, 10)) .widget(createBatteryButton(builder)) .widget(createEjectionSwitch(builder)) .widget(new FakeSyncWidget.BooleanSyncer(() -> getBaseMetaTileEntity().isAllowedToWork(), val -> { @@ -955,7 +961,6 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont if (!widget.isClient()) widget.getContext() .openSyncedWindow(STAR_COSMETICS_WINDOW_ID); }) - .setSize(16, 16) .addTooltip(translateToLocal("fog.button.color.tooltip")) .setBackground(() -> { List button = new ArrayList<>(); @@ -963,8 +968,25 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont button.add(TecTechUITextures.OVERLAY_BUTTON_RAINBOW_SPIRAL); return button.toArray(new IDrawable[0]); }) - .setPos(152, 91) - .setTooltipShowUpDelay(TOOLTIP_DELAY)); + .setPos(174, 148) + .setSize(16, 16) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getContext() + .openSyncedWindow(STATISTICS_WINDOW_ID); + } + }) + .addTooltip(translateToLocal("fog.button.statistics.tooltip")) + .setBackground(() -> { + List button = new ArrayList<>(); + button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + button.add(TecTechUITextures.OVERLAY_BUTTON_STATISTICS); + return button.toArray(new IDrawable[0]); + }) + .setPos(26, 91) + .setSize(16, 16) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); } @Override @@ -975,42 +997,24 @@ public void addGregTechLogo(ModularWindow.Builder builder) { .setPos(172, 67)); } - @Override - protected ButtonWidget createPowerSwitchButton() { - return ForgeOfGodsUI.createPowerSwitchButton(getBaseMetaTileEntity()); - } - protected ButtonWidget createEjectionSwitch(IWidgetBuilder builder) { Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (upgrades[30]) { - gravitonShardEjection = !gravitonShardEjection; - } + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + 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]); - }) + .setBackground( + () -> new UITexture[] { TecTechUITextures.BUTTON_CELESTIAL_32x32, + gravitonShardEjection ? TecTechUITextures.OVERLAY_EJECTION_ON + : TecTechUITextures.OVERLAY_EJECTION_LOCKED }) + .addTooltip(translateToLocal("fog.button.ejection.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) .attachSyncer( new FakeSyncWidget.BooleanSyncer(() -> gravitonShardEjection, val -> gravitonShardEjection = val), builder) - .setPos(26, 91) + .setPos(44, 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); - } + .setEnabled($ -> isUpgradeActive(END)) + .attachSyncer(upgrades.getSyncer(END), builder); return (ButtonWidget) button; } @@ -1019,7 +1023,7 @@ protected Widget createBatteryButton(IWidgetBuilder builder) { TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); if (clickData.mouseButton == 0) { batteryCharging = !batteryCharging; - } else if (clickData.mouseButton == 1 && !widget.isClient() && upgrades[8]) { + } else if (clickData.mouseButton == 1 && !widget.isClient() && isUpgradeActive(REC)) { widget.getContext() .openSyncedWindow(BATTERY_CONFIG_WINDOW_ID); } @@ -1080,53 +1084,63 @@ protected ModularWindow createBatteryWindow(final EntityPlayer player) { } 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); + final int w = 78; + final int h = 130; + final int parentW = getGUIWidth(); + final int parentH = getGUIHeight(); + + ModularWindow.Builder builder = ModularWindow.builder(w, h); 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)) + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(parentW, parentH)) .add( - Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) - .add(WIDTH - 3, 0))); + Alignment.TopRight.getAlignedPos(new Size(parentW, parentH), new Size(w, h)) + .add(w - 3, 0))); + + // Window header 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) - .attachSyncer( - new FakeSyncWidget.ListSyncer<>( - () -> Booleans.asList(upgrades), - val -> upgrades = Booleans.toArray(val), - PacketBuffer::writeBoolean, - PacketBuffer::readBoolean), - builder, - (widget, val) -> ((NumericWidget) widget).setMaxValue(calculateMaxFuelFactor(this)))) - .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)) + .setSize(74, 34)); + + // Fuel factor textbox + NumericWidget fuelFactor = new NumericWidget(); + fuelFactor.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); + builder.widget(fuelFactor); + + // Syncers for max fuel factor + builder.widget( + upgrades.getSyncer(CFCE) + .setOnClientUpdate($ -> fuelFactor.setMaxValue(calculateMaxFuelFactor(this)))); + builder.widget( + upgrades.getSyncer(GEM) + .setOnClientUpdate($ -> fuelFactor.setMaxValue(calculateMaxFuelFactor(this)))); + builder.widget( + upgrades.getSyncer(TSE) + .setOnClientUpdate($ -> fuelFactor.setMaxValue(calculateMaxFuelFactor(this)))); + + builder.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) @@ -1204,8 +1218,7 @@ public void buildTooltip(List tooltip) { }) .setSize(18, 18)) .setPos(29, 82) - .setSize(18, 18) - .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getFuelType, this::setFuelType), builder)) + .setSize(18, 18)) .widget( new MultiChildWidget().addChild( new FluidNameHolderWidget( @@ -1354,8 +1367,7 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { if (!widget.isClient()) { widget.getWindow() .closeWindow(); - widget.getContext() - .closeWindow(INDIVIDUAL_MILESTONE_WINDOW_ID); + ForgeOfGodsUI.closeWindow(widget, INDIVIDUAL_MILESTONE_WINDOW_ID); } }) .setPos(382, 6)); @@ -1363,52 +1375,24 @@ protected ModularWindow createMilestoneWindow(final EntityPlayer player) { } 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"; - } - } + final int w = 150; + final int h = 150; + final MilestoneIcon icon = MilestoneIcon.VALUES[currentMilestoneID]; + final Size iconSize = icon.getSize(); + ModularWindow.Builder builder = ModularWindow.builder(w, h); 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)) + new DrawableWidget().setDrawable(icon.getSymbol()) + .setSize(iconSize) + .setPos((w - iconSize.width) / 2, (h - iconSize.height) / 2)) .widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG." + milestoneType + "milestone") - .setDefaultColor(EnumChatFormatting.GOLD) + new TextWidget(icon.getNameText()).setDefaultColor(EnumChatFormatting.GOLD) .setTextAlignment(Alignment.Center) .setPos(0, 8) .setSize(150, 15)) @@ -1459,8 +1443,8 @@ protected ModularWindow createIndividualMilestoneWindow(final EntityPlayer playe .attachSyncer( new FakeSyncWidget.ByteSyncer( () -> (byte) formattingMode.ordinal(), - val -> formattingMode = FormattingMode.VALUES[MathHelper - .clamp_int(val, 0, FormattingMode.VALUES.length - 1)]), + val -> formattingMode = MilestoneFormatter.VALUES[MathHelper + .clamp_int(val, 0, MilestoneFormatter.VALUES.length - 1)]), builder)); return builder.build(); @@ -1485,490 +1469,79 @@ private Widget createMilestoneButton(int milestoneID, int width, int height, Pos .setTooltipShowUpDelay(TOOLTIP_DELAY); } - private int currentUpgradeID = 0; - private int currentColorCode = 0; - private int currentMilestoneBG = 0; - private int gravitonShardCost = 0; - private final int[][] prereqUpgrades = new int[31][]; - private int[] followupUpgrades = new int[] {}; - private boolean isUpradeSplitStart = false; - private boolean doesCurrentUpgradeRequireExtraMats = false; - private final boolean[] allPrereqRequired = new boolean[31]; - 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(createUpgradeConnectorLine(new Pos2d(143, 71), 45, 0, 0, 0, 1)) - .widget(createUpgradeConnectorLine(new Pos2d(124, 124), 60, 27, 0, 1, 2)) - .widget(createUpgradeConnectorLine(new Pos2d(162, 124), 60, 333, 0, 1, 3)) - .widget(createUpgradeConnectorLine(new Pos2d(94, 184), 60, 27, 0, 2, 4)) - .widget(createUpgradeConnectorLine(new Pos2d(130, 184), 60, 336, 0, 2, 5)) - .widget(createUpgradeConnectorLine(new Pos2d(156, 184), 60, 24, 0, 3, 5)) - .widget(createUpgradeConnectorLine(new Pos2d(192, 184), 60, 333, 0, 3, 6)) - .widget(createUpgradeConnectorLine(new Pos2d(143, 251), 45, 0, 0, 5, 7)) - .widget(createUpgradeConnectorLine(new Pos2d(143, 311), 45, 0, 0, 7, 9)) - .widget(createUpgradeConnectorLine(new Pos2d(78, 250), 110, 5, 4, 4, 8)) - .widget(createUpgradeConnectorLine(new Pos2d(110, 290), 80, 40, 4, 7, 8)) - .widget(createUpgradeConnectorLine(new Pos2d(208, 250), 110, 355, 4, 6, 10)) - .widget(createUpgradeConnectorLine(new Pos2d(176, 290), 80, 320, 4, 7, 10)) - .widget(createUpgradeConnectorLine(new Pos2d(100, 355), 80, 313, 0, 8, 11)) - .widget(createUpgradeConnectorLine(new Pos2d(186, 355), 80, 47, 0, 10, 11)) - .widget(createUpgradeConnectorLine(new Pos2d(143, 430), 48, 0, 2, 11, 13)) - .widget(createUpgradeConnectorLine(new Pos2d(143, 490), 48, 0, 2, 13, 18)) - .widget(createUpgradeConnectorLine(new Pos2d(143, 550), 48, 0, 2, 18, 21)) - .widget(createUpgradeConnectorLine(new Pos2d(143, 610), 48, 0, 2, 21, 23)) - .widget(createUpgradeConnectorLine(new Pos2d(110, 410), 80, 40, 1, 11, 12)) - .widget(createUpgradeConnectorLine(new Pos2d(83, 490), 48, 0, 1, 12, 17)) - .widget(createUpgradeConnectorLine(new Pos2d(83, 550), 48, 0, 1, 17, 20)) - .widget(createUpgradeConnectorLine(new Pos2d(101, 590), 80, 320, 1, 20, 23)) - .widget(createUpgradeConnectorLine(new Pos2d(53, 536), 35, 45, 1, 17, 16)) - .widget(createUpgradeConnectorLine(new Pos2d(176, 410), 80, 320, 3, 11, 14)) - .widget(createUpgradeConnectorLine(new Pos2d(203, 490), 48, 0, 3, 14, 19)) - .widget(createUpgradeConnectorLine(new Pos2d(203, 550), 48, 0, 3, 19, 22)) - .widget(createUpgradeConnectorLine(new Pos2d(185, 590), 80, 40, 3, 22, 23)) - .widget(createUpgradeConnectorLine(new Pos2d(233, 476), 35, 315, 3, 14, 15)) - .widget(createUpgradeConnectorLine(new Pos2d(143, 670), 48, 0, 0, 23, 24)) - .widget(createUpgradeConnectorLine(new Pos2d(101, 707), 75, 62.3f, 0, 24, 25)) - .widget(createUpgradeConnectorLine(new Pos2d(53, 772), 78, 0, 0, 25, 26)) - .widget(createUpgradeConnectorLine(new Pos2d(95, 837), 75, 297.7f, 0, 26, 27)) - .widget(createUpgradeConnectorLine(new Pos2d(191, 837), 75, 62.3f, 0, 27, 28)) - .widget(createUpgradeConnectorLine(new Pos2d(233, 772), 78, 0, 0, 28, 29)) - .widget(createUpgradeConnectorLine(new Pos2d(191, 747), 75, 62.3f, 0, 29, 30)); + ModularWindow.Builder builder = ModularWindow.builder(300, 300); + Scrollable scrollable = new Scrollable().setVerticalScroll(); + // spotless:off 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, - 4, - 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, - 4, - 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 MultiChildWidget().addChild( - new ButtonWidget().setOnClick(((clickData, widget) -> secretUpgrade = !secretUpgrade)) - .setSize(40, 15) - .setBackground(() -> { - if (secretUpgrade) { - return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_PRESSED_32x16 }; - } - return new IDrawable[0]; - }) - .addTooltip(translateToLocal("fog.upgrade.tt.secret")) - .setTooltipShowUpDelay(20)) - .addChild( - new TextWidget(translateToLocal("fog.upgrade.tt.short.secret")).setScale(0.8f) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.Center) - .setSize(34, 9) - .setPos(3, 4) - .setEnabled((widget -> secretUpgrade))) - .addChild( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_BLUE_OPAQUE) - .setEnabled(widget -> secretUpgrade) - .setPos(40, 4) - .setSize(20, 6)) - .setPos(new Pos2d(66, 56))) + .widget(createUpgradeConnectorLine(new Pos2d(143, 71), 45, 0, UpgradeColor.BLUE, START, IGCC)) + .widget(createUpgradeConnectorLine(new Pos2d(124, 124), 60, 27, UpgradeColor.BLUE, IGCC, STEM)) + .widget(createUpgradeConnectorLine(new Pos2d(162, 124), 60, 333, UpgradeColor.BLUE, IGCC, CFCE)) + .widget(createUpgradeConnectorLine(new Pos2d(94, 184), 60, 27, UpgradeColor.BLUE, STEM, GISS)) + .widget(createUpgradeConnectorLine(new Pos2d(130, 184), 60, 336, UpgradeColor.BLUE, STEM, FDIM)) + .widget(createUpgradeConnectorLine(new Pos2d(156, 184), 60, 24, UpgradeColor.BLUE, CFCE, FDIM)) + .widget(createUpgradeConnectorLine(new Pos2d(192, 184), 60, 333, UpgradeColor.BLUE, CFCE, SA)) + .widget(createUpgradeConnectorLine(new Pos2d(143, 251), 45, 0, UpgradeColor.BLUE, FDIM, GPCI)) + .widget(createUpgradeConnectorLine(new Pos2d(143, 311), 45, 0, UpgradeColor.BLUE, GPCI, GEM)) + .widget(createUpgradeConnectorLine(new Pos2d(78, 250), 110, 5, UpgradeColor.RED, GISS, REC)) + .widget(createUpgradeConnectorLine(new Pos2d(110, 290), 80, 40, UpgradeColor.RED, GPCI, REC)) + .widget(createUpgradeConnectorLine(new Pos2d(208, 250), 110, 355, UpgradeColor.RED, SA, CTCDD)) + .widget(createUpgradeConnectorLine(new Pos2d(176, 290), 80, 320, UpgradeColor.RED, GPCI, CTCDD)) + .widget(createUpgradeConnectorLine(new Pos2d(100, 355), 80, 313, UpgradeColor.BLUE, REC, QGPIU)) + .widget(createUpgradeConnectorLine(new Pos2d(186, 355), 80, 47, UpgradeColor.BLUE, CTCDD, QGPIU)) + .widget(createUpgradeConnectorLine(new Pos2d(143, 430), 48, 0, UpgradeColor.ORANGE, QGPIU, TCT)) + .widget(createUpgradeConnectorLine(new Pos2d(143, 490), 48, 0, UpgradeColor.ORANGE, TCT, EPEC)) + .widget(createUpgradeConnectorLine(new Pos2d(143, 550), 48, 0, UpgradeColor.ORANGE, EPEC, POS)) + .widget(createUpgradeConnectorLine(new Pos2d(143, 610), 48, 0, UpgradeColor.ORANGE, POS, NGMS)) + .widget(createUpgradeConnectorLine(new Pos2d(110, 410), 80, 40, UpgradeColor.PURPLE, QGPIU, SEFCP)) + .widget(createUpgradeConnectorLine(new Pos2d(83, 490), 48, 0, UpgradeColor.PURPLE, SEFCP, CNTI)) + .widget(createUpgradeConnectorLine(new Pos2d(83, 550), 48, 0, UpgradeColor.PURPLE, CNTI, NDPE)) + .widget(createUpgradeConnectorLine(new Pos2d(101, 590), 80, 320, UpgradeColor.PURPLE, NDPE, NGMS)) + .widget(createUpgradeConnectorLine(new Pos2d(53, 536), 35, 45, UpgradeColor.PURPLE, CNTI, DOP)) + .widget(createUpgradeConnectorLine(new Pos2d(176, 410), 80, 320, UpgradeColor.GREEN, QGPIU, GGEBE)) + .widget(createUpgradeConnectorLine(new Pos2d(203, 490), 48, 0, UpgradeColor.GREEN, GGEBE, IMKG)) + .widget(createUpgradeConnectorLine(new Pos2d(203, 550), 48, 0, UpgradeColor.GREEN, IMKG, DOR)) + .widget(createUpgradeConnectorLine(new Pos2d(185, 590), 80, 40, UpgradeColor.GREEN, DOR, NGMS)) + .widget(createUpgradeConnectorLine(new Pos2d(233, 476), 35, 315, UpgradeColor.GREEN, GGEBE, TPTP)) + .widget(createUpgradeConnectorLine(new Pos2d(143, 670), 48, 0, UpgradeColor.BLUE, NGMS, SEDS)) + .widget(createUpgradeConnectorLine(new Pos2d(101, 707), 75, 62.3f, UpgradeColor.BLUE, SEDS, PA)) + .widget(createUpgradeConnectorLine(new Pos2d(53, 772), 78, 0, UpgradeColor.BLUE, PA, CD)) + .widget(createUpgradeConnectorLine(new Pos2d(95, 837), 75, 297.7f, UpgradeColor.BLUE, CD, TSE)) + .widget(createUpgradeConnectorLine(new Pos2d(191, 837), 75, 62.3f, UpgradeColor.BLUE, TSE, TBF)) + .widget(createUpgradeConnectorLine(new Pos2d(233, 772), 78, 0, UpgradeColor.BLUE, TBF, EE)) + .widget(createUpgradeConnectorLine(new Pos2d(191, 747), 75, 62.3f, UpgradeColor.BLUE, EE, END)); + // spotless:on + + for (ForgeOfGodsUpgrade upgrade : upgrades.getAllUpgrades()) { + scrollable.widget(createUpgradeBox(upgrade, scrollable)); + } + + scrollable.widget( + new MultiChildWidget().addChild( + new ButtonWidget().setOnClick(((clickData, widget) -> secretUpgrade = !secretUpgrade)) + .setSize(40, 15) + .setBackground(() -> { + if (secretUpgrade) { + return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_PRESSED_32x16 }; + } + return new IDrawable[0]; + }) + .addTooltip(translateToLocal("fog.upgrade.tt.secret")) + .setTooltipShowUpDelay(20)) + .addChild( + new TextWidget(translateToLocal("fog.upgrade.tt.short.secret")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setSize(34, 9) + .setPos(3, 4) + .setEnabled((widget -> secretUpgrade))) + .addChild( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_BLUE_OPAQUE) + .setEnabled(widget -> secretUpgrade) + .setPos(40, 4) + .setSize(20, 6)) + .setPos(new Pos2d(66, 56))) .widget(new TextWidget("").setPos(0, 945)); builder.widget( @@ -1984,440 +1557,178 @@ protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { if (!widget.isClient()) { widget.getWindow() .closeWindow(); - widget.getContext() - .closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); + ForgeOfGodsUI.closeWindow(widget, INDIVIDUAL_UPGRADE_WINDOW_ID); } }) .setPos(282, 4)); if (ConfigHandler.debug.DEBUG_MODE) { - 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; - } - case 4 -> { - background = TecTechUITextures.BACKGROUND_GLOW_RED; - overlay = TecTechUITextures.PICTURE_OVERLAY_RED; - } - 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( + builder.widget( new MultiChildWidget() .addChild( - new TextWidget(translateToLocal("fog.upgrade.tt." + (currentUpgradeID))) - .setTextAlignment(Alignment.Center) - .setDefaultColor(EnumChatFormatting.GOLD) - .setSize(WIDTH - 15, 30) - .setPos(9, 5)) + new ButtonWidget().setOnClick((clickData, widget) -> upgrades.resetAll()) + .setSize(40, 15) + .setBackground(GTUITextures.BUTTON_STANDARD) + .addTooltip(translateToLocal("fog.debug.resetbutton.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) .addChild( - new TextWidget(translateToLocal("fog.upgrade.text." + (currentUpgradeID))) + new TextWidget(translateToLocal("fog.debug.resetbutton.text")) .setTextAlignment(Alignment.Center) - .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)) + .setScale(0.57f) + .setMaxWidth(36) + .setPos(3, 3)) .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")) + new NumericWidget().setSetter(val -> gravitonShardsAvailable = (int) val) + .setGetter(() -> gravitonShardsAvailable) + .setBounds(0, 112) + .setDefaultValue(0) + .setScrollValues(1, 4, 64) .setTextAlignment(Alignment.Center) - .setScale(0.7f) - .setMaxWidth(90) - .setDefaultColor(0x9c9c9c) - .setPos(WIDTH - 87, HEIGHT - 25)) + .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( - 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) -> { - if (!upgrades[currentUpgradeID]) { - completeUpgrade(); - } else { - respecUpgrade(); - } - }) - .setSize(40, 15) - .setBackground(() -> { - if (upgrades[currentUpgradeID]) { - return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED }; - } else { - return new IDrawable[] { GTUITextures.BUTTON_STANDARD }; - } - }) - .dynamicTooltip(this::constructionStatus) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .addChild( - TextWidget.dynamicText(this::constructionStatusText) - .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)); + new ButtonWidget().setOnClick((clickData, widget) -> upgrades.unlockAll()) + .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(); } - private void completeUpgrade() { - int unlockedPrereqUpgrades = 0; - int unlockedSplitUpgrades = 0; - if (!upgrades[currentUpgradeID]) { - for (int prereqUpgrade : prereqUpgrades[currentUpgradeID]) { - if (upgrades[prereqUpgrade]) { - unlockedPrereqUpgrades++; - } - } - if (!doesCurrentUpgradeRequireExtraMats - || materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) - .indexOf(currentUpgradeID)]) { - if (allPrereqRequired[currentUpgradeID]) { - if (unlockedPrereqUpgrades == prereqUpgrades[currentUpgradeID].length - && gravitonShardsAvailable >= gravitonShardCost) { - gravitonShardsAvailable -= gravitonShardCost; - gravitonShardsSpent += gravitonShardCost; - upgrades[currentUpgradeID] = true; - } - } else if (unlockedPrereqUpgrades > 0 || prereqUpgrades[currentUpgradeID].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; - } - } - } - } - } + protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) { + ForgeOfGodsUpgrade upgrade = currentUpgradeWindow; - private void respecUpgrade() { - int unlockedFollowupUpgrades = 0; - int unlockedNeighboringUpgrades = 0; - boolean doesFollowupRequireAllPrereqs = false; - boolean canFollowupSpareAConnection = true; + ModularWindow.Builder builder = ModularWindow.builder(upgrade.getWindowSize()); + builder.setBackground(upgrade.getBackground()); - for (int followupUpgrade : followupUpgrades) { - if (upgrades[followupUpgrade]) { - unlockedFollowupUpgrades++; - if (allPrereqRequired[followupUpgrade]) { - doesFollowupRequireAllPrereqs = true; - } - int[] currentPrereqs = prereqUpgrades[followupUpgrade]; - for (int prereqUpgrade : currentPrereqs) { - if (upgrades[prereqUpgrade]) { - unlockedNeighboringUpgrades++; - } - } - if (unlockedNeighboringUpgrades <= 1) { - canFollowupSpareAConnection = false; - } - } + // Syncers + builder.widget( + new FakeSyncWidget.IntegerSyncer(() -> gravitonShardsAvailable, val -> gravitonShardsAvailable = val)); + builder.widget(upgrades.getSyncer(upgrade)); - unlockedNeighboringUpgrades = 0; + builder.widget( + ForgeOfGodsUI.getIndividualUpgradeGroup( + upgrade, + () -> gravitonShardsAvailable, + () -> completeUpgrade(upgrade), + () -> respecUpgrade(upgrade), + () -> isUpgradeActive(upgrade))); + + if (upgrade.hasExtraCost()) { + builder.widget( + ForgeOfGodsUI + .createMaterialInputButton(upgrade, () -> upgrades.isCostPaid(upgrade), (clickData, widget) -> { + ForgeOfGodsUI.reopenWindow(widget, MANUAL_INSERTION_WINDOW_ID); + ForgeOfGodsUI.closeWindow(widget, INDIVIDUAL_UPGRADE_WINDOW_ID); + ForgeOfGodsUI.closeWindow(widget, UPGRADE_TREE_WINDOW_ID); + })); } - if (!doesFollowupRequireAllPrereqs && followupUpgrades.length > 0 && canFollowupSpareAConnection) { - unlockedFollowupUpgrades = 0; - } + return builder.build(); + } - if (unlockedFollowupUpgrades == 0) { - gravitonShardsAvailable += gravitonShardCost; - gravitonShardsSpent -= gravitonShardCost; - upgrades[currentUpgradeID] = false; + // todo ringAmount is not client synced, causing a UI desync when unlocking split upgrades + private void completeUpgrade(ForgeOfGodsUpgrade upgrade) { + if (isUpgradeActive(upgrade)) return; + if (!upgrades.checkPrerequisites(upgrade)) return; + if (!upgrades.checkSplit(upgrade, ringAmount)) return; + if (!upgrades.checkCost(upgrade, gravitonShardsAvailable)) return; - if (currentUpgradeID == 30) { - gravitonShardEjection = false; - } - } + upgrades.unlockUpgrade(upgrade); + gravitonShardsAvailable -= upgrade.getShardCost(); + gravitonShardsSpent += upgrade.getShardCost(); } - private Widget createMaterialInputButton(int upgradeID, int xCoord, int yCoord, IWidgetBuilder builder) { - return new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient() && doesCurrentUpgradeRequireExtraMats) { - ModularUIContext ctx = widget.getContext(); - ctx.openSyncedWindow(MANUAL_INSERTION_WINDOW_ID); - ctx.closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); - ctx.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); + private void respecUpgrade(ForgeOfGodsUpgrade upgrade) { + if (!isUpgradeActive(upgrade)) return; + if (!upgrades.checkDependents(upgrade)) return; + + upgrades.respecUpgrade(upgrade); + gravitonShardsAvailable += upgrade.getShardCost(); + gravitonShardsSpent -= upgrade.getShardCost(); + + if (upgrade == END) { + gravitonShardEjection = false; + } } - /** - * @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) { - prereqUpgrades[upgradeID] = prerequisiteUpgradeIDs; - allPrereqRequired[upgradeID] = requireAllPrerequisites; + private Widget createUpgradeBox(ForgeOfGodsUpgrade upgrade, IWidgetBuilder builder) { return new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { - currentUpgradeID = upgradeID; - currentColorCode = colorCode; - currentMilestoneBG = milestone; - gravitonShardCost = shardCost; - followupUpgrades = followingUpgradeIDs; - isUpradeSplitStart = isStartOfSplit; - doesCurrentUpgradeRequireExtraMats = requiresExtraMaterials; + currentUpgradeWindow = upgrade; if (clickData.mouseButton == 0) { if (clickData.shift) { - if (!doesCurrentUpgradeRequireExtraMats - || materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) - .indexOf(currentUpgradeID)]) { - completeUpgrade(); - } else if (!widget.isClient()) { - ModularUIContext ctx = widget.getContext(); - ctx.openSyncedWindow(MANUAL_INSERTION_WINDOW_ID); - ctx.closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); - ctx.closeWindow(UPGRADE_TREE_WINDOW_ID); + if (!upgrade.hasExtraCost() || upgrades.isCostPaid(upgrade)) { + completeUpgrade(upgrade); + } else { + ForgeOfGodsUI.reopenWindow(widget, MANUAL_INSERTION_WINDOW_ID); + ForgeOfGodsUI.closeWindow(widget, INDIVIDUAL_UPGRADE_WINDOW_ID); + ForgeOfGodsUI.closeWindow(widget, UPGRADE_TREE_WINDOW_ID); } } else { ForgeOfGodsUI.reopenWindow(widget, INDIVIDUAL_UPGRADE_WINDOW_ID); } } else if (clickData.mouseButton == 1) { - respecUpgrade(); + respecUpgrade(upgrade); } }) .setSize(40, 15) .setBackground(() -> { - if (upgrades[upgradeID]) { + if (isUpgradeActive(upgrade)) { return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_PRESSED_32x16 }; } else { return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_32x16 }; } }) - .addTooltip(translateToLocal("fog.upgrade.tt." + upgradeID)) + .addTooltip(upgrade.getNameText()) .setTooltipShowUpDelay(TOOLTIP_DELAY)) .addChild( - new TextWidget(translateToLocal("fog.upgrade.tt.short." + upgradeID)).setScale(0.8f) + new TextWidget(upgrade.getShortNameText()).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); + .setPos(upgrade.getTreePos()) + .attachSyncer(upgrades.getSyncer(upgrade), builder); } - private Widget createUpgradeConnectorLine(Pos2d pos, int length, float rotationAngle, int colorCode, - int startUpgradeID, int endUpgradeID) { - return new DrawableWidget() - .setDrawable( - () -> (upgrades[startUpgradeID] && upgrades[endUpgradeID]) - ? coloredLine(colorCode, true).withRotationDegree(rotationAngle) - : coloredLine(colorCode, false).withRotationDegree(rotationAngle)) + private Widget createUpgradeConnectorLine(Pos2d pos, int length, float rotationAngle, UpgradeColor color, + ForgeOfGodsUpgrade startUpgrade, ForgeOfGodsUpgrade endUpgrade) { + return new DrawableWidget().setDrawable(() -> { + UITexture texture = color.getConnector(); + if (isUpgradeActive(startUpgrade) && isUpgradeActive(endUpgrade)) { + texture = color.getOpaqueConnector(); + } + return texture.withRotationDegree(rotationAngle); + }) .setPos(pos) .setSize(6, length); } - private IDrawable coloredLine(int colorCode, boolean opaque) { - IDrawable line; - switch (colorCode) { - case 1 -> { - line = opaque ? TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_PURPLE_OPAQUE - : TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_PURPLE; - } - case 2 -> { - line = opaque ? TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_ORANGE_OPAQUE - : TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_ORANGE; - } - case 3 -> { - line = opaque ? TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_GREEN_OPAQUE - : TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_GREEN; - } - case 4 -> { - line = opaque ? TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_RED_OPAQUE - : TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_RED; - } - default -> { - line = opaque ? TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_BLUE_OPAQUE - : TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_BLUE; - } - } - return line; - } - protected ModularWindow createManualInsertionWindow(final EntityPlayer player) { - ItemStack[] inputs = godforgeUpgradeMats.get(currentUpgradeID); + ForgeOfGodsUpgrade upgrade = currentUpgradeWindow; + ItemStack[] inputs = upgrade.getExtraCost(); 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(); for (int i = 0; i < 16; i++) { inputSlotHandler.insertItem(i, storedUpgradeWindowItems[i], false); storedUpgradeWindowItems[i] = null; } - 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()); @@ -2427,6 +1738,7 @@ protected ModularWindow createManualInsertionWindow(final EntityPlayer player) { .add(Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT))) .subtract(5, 0) .add(0, 4)); + builder.widget(upgrades.getSyncer(upgrade)); builder.widget( SlotGroup.ofItemHandler(inputSlotHandler, 4) .startFromSlot(0) @@ -2439,10 +1751,8 @@ protected ModularWindow createManualInsertionWindow(final EntityPlayer player) { if (!widget.isClient()) { widget.getWindow() .closeWindow(); - widget.getContext() - .openSyncedWindow(UPGRADE_TREE_WINDOW_ID); - widget.getContext() - .openSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); + ForgeOfGodsUI.reopenWindow(widget, UPGRADE_TREE_WINDOW_ID); + ForgeOfGodsUI.reopenWindow(widget, INDIVIDUAL_UPGRADE_WINDOW_ID); } }) .setBackground(ModularUITextures.VANILLA_BACKGROUND, new Text("x")) @@ -2450,26 +1760,8 @@ protected ModularWindow createManualInsertionWindow(final EntityPlayer player) { .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; - } + upgrades.payCost(upgrade, inputSlotHandler); + ForgeOfGodsUI.reopenWindow(widget, MANUAL_INSERTION_WINDOW_ID); } }) .setPlayClickSound(true) @@ -2484,59 +1776,17 @@ protected ModularWindow createManualInsertionWindow(final EntityPlayer player) { .setPos(5, 82) .setSize(179, 16)); - IItemHandlerModifiable upgradeMatsHandler = new ItemStackHandler(12); - int uniqueItems = inputs.length; for (int i = 0; i < 12; i++) { - int cleanDiv4 = i / 4; - if (i < uniqueItems) { - ItemStack stack = inputs[i]; - if (stack != null) { - upgradeMatsHandler.setStackInSlot(i, stack.copy()); - } - builder.widget( - new DrawableWidget().setDrawable(GTUITextures.BUTTON_STANDARD_PRESSED) - .setPos(5 + cleanDiv4 * 36, 6 + i % 4 * 18) - .setSize(18, 18)); - columnList.get(cleanDiv4) - .addChild( - new SlotWidget(upgradeMatsHandler, i).setAccess(false, false) - .setRenderStackSize(false) - .disableInteraction()); - 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 + i % 4 * 18) - .setSize(18, 18)); - } - } - - int counter = 0; - for (DynamicPositionedColumn column : columnList) { - int spacing = 0; - int xCord = counter * 36; - int yCord = 0; - if (counter > 2) { - spacing = 10; - xCord = 19 + (counter - 3) * 36; - yCord = 5; + final int ii = i; + ItemStack stack = null; + if (i < inputs.length) { + stack = inputs[i]; } - columns.addChild( - column.setSpace(spacing) - .setAlignment(MainAxisAlignment.SPACE_BETWEEN) - .setSize(16, 72) - .setPos(xCord, yCord)); - counter++; + Widget costWidget = ForgeOfGodsUI.createExtraCostWidget(stack, () -> upgrades.getPaidCosts(upgrade)[ii]); + costWidget.setPos(5 + (36 * (i / 4)), 6 + (18 * (i % 4))); + builder.widget(costWidget); } - builder.widget( - columns.setSize(108, 72) - .setPos(5, 6)); - return builder.build(); } @@ -2545,119 +1795,7 @@ protected ModularWindow createGeneralInfoWindow(final EntityPlayer player) { } protected ModularWindow createSpecialThanksWindow(final EntityPlayer player) { - final int WIDTH = 200; - final int HEIGHT = 200; - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - - builder.setBackground(TecTechUITextures.BACKGROUND_GLOW_RAINBOW); - builder.setDraggable(true); - builder.widget( - ButtonWidget.closeWindowButton(true) - .setPos(184, 4)) - .widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_THANKS) - .setPos(50, 50) - .setSize(100, 100)) - .widget( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.contributors")) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.Center) - .setScale(1f) - .setPos(0, 5) - .setSize(200, 15)) - .widget( - new TextWidget( - EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.lead")) - .setScale(0.8f) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 30) - .setSize(60, 10)) - .widget( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.cloud")).setScale(0.8f) - .setDefaultColor(EnumChatFormatting.AQUA) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 40) - .setSize(60, 10)) - .widget( - new TextWidget( - EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.programming")) - .setScale(0.8f) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 55) - .setSize(60, 10)) - .widget( - new TextWidget( - translateToLocal("gt.blockmachines.multimachine.FOG.serenibyss") + " " - + EnumChatFormatting.DARK_AQUA - + translateToLocal("gt.blockmachines.multimachine.FOG.teg")).setScale(0.8f) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 67) - .setSize(60, 10)) - .widget( - new TextWidget( - EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.textures")) - .setScale(0.8f) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 85) - .setSize(100, 10)) - .widget( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.ant")).setScale(0.8f) - .setDefaultColor(EnumChatFormatting.GREEN) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 95) - .setSize(60, 10)) - .widget( - new TextWidget( - EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.rendering")) - .setScale(0.8f) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 110) - .setSize(100, 10)) - .widget( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.bucket")).setScale(0.8f) - .setDefaultColor(EnumChatFormatting.WHITE) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 120) - .setSize(60, 10)) - .widget( - new TextWidget( - EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.lore")) - .setScale(0.8f) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 135) - .setSize(100, 10)) - .widget( - delenoName().setSpace(-1) - .setAlignment(MainAxisAlignment.SPACE_BETWEEN) - .setPos(7, 145) - .setSize(60, 10)) - .widget( - new TextWidget( - EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.playtesting")) - .setScale(0.8f) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 160) - .setSize(100, 10)) - .widget( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.misi")).setScale(0.8f) - .setDefaultColor(0xffc26f) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 170) - .setSize(60, 10)) - .widget( - new TextWidget(EnumChatFormatting.ITALIC + translateToLocal("gt.blockmachines.multimachine.FOG.thanks")) - .setScale(0.8f) - .setDefaultColor(0xbbbdbd) - .setTextAlignment(Alignment.Center) - .setPos(90, 140) - .setSize(100, 60)); - return builder.build(); + return ForgeOfGodsUI.createSpecialThanksWindow(); } protected ModularWindow createStarCosmeticsWindow(final EntityPlayer player) { @@ -2669,8 +1807,6 @@ protected ModularWindow createStarCosmeticsWindow(final EntityPlayer player) { // Syncers builder.widget(new FakeSyncWidget.StringSyncer(() -> selectedStarColor, val -> selectedStarColor = val)); - builder.widget(new FakeSyncWidget.IntegerSyncer(() -> rotationSpeed, val -> rotationSpeed = val)); - builder.widget(new FakeSyncWidget.IntegerSyncer(() -> starSize, val -> starSize = val)); builder.widget(new FakeSyncWidget.IntegerSyncer(() -> editingStarIndex, val -> editingStarIndex = val)); builder.widget(starColors.getSyncer()); @@ -2740,50 +1876,73 @@ protected ModularWindow createStarCosmeticsWindow(final EntityPlayer player) { builder.widget(newPreset); - // Miscellaneous options not related to color settings - builder - .widget( - new TextWidget(EnumChatFormatting.UNDERLINE + translateToLocal("fog.cosmetics.misc")) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(120, 25) - .setSize(80, 10)) - .widget( - TextWidget.localised("fog.cosmetics.spin") - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(120, 45) - .setSize(60, 18)) - .widget( - new NumericWidget().setSetter(val -> rotationSpeed = (int) val) - .setGetter(() -> rotationSpeed) - .setBounds(0, 100) - .setDefaultValue(5) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(35, 18) - .setPos(155, 45) - .addTooltip(translateToLocal("fog.cosmetics.onlyintegers")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)) - .widget( - TextWidget.localised("fog.cosmetics.size") - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(120, 65) - .setSize(60, 18)) - .widget( - new NumericWidget().setSetter(val -> starSize = (int) val) - .setGetter(() -> starSize) - .setBounds(1, 40) - .setDefaultValue(20) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(35, 18) - .setPos(155, 65) - .addTooltip(translateToLocal("fog.cosmetics.onlyintegers")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)); + // Misc Section + + // Header + builder.widget( + new TextWidget(EnumChatFormatting.UNDERLINE + translateToLocal("fog.cosmetics.misc")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(120, 25) + .setSize(80, 10)); + + // Spin Textbox + builder.widget( + TextWidget.localised("fog.cosmetics.spin") + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(120, 45) + .setSize(60, 18)); + + NumericWidget rotationWidget = new NumericWidget(); + rotationWidget.setGetter(() -> rotationSpeed) + .setSetter(val -> { + if (rotationSpeed != (int) val) { + rotationSpeed = (int) val; + if (!rotationWidget.isClient()) { + updateRenderer(); + } + } + }) + .setBounds(0, 100) + .setDefaultValue(5) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(35, 18) + .setPos(155, 45) + .addTooltip(translateToLocal("fog.cosmetics.onlyintegers")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD); + builder.widget(rotationWidget); + + // Size Textbox + builder.widget( + TextWidget.localised("fog.cosmetics.size") + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(120, 65) + .setSize(60, 18)); + + NumericWidget spinWidget = new NumericWidget(); + spinWidget.setGetter(() -> starSize) + .setSetter(val -> { + if (starSize != (int) val) { + starSize = (int) val; + if (!spinWidget.isClient()) { + updateRenderer(); + } + } + }) + .setBounds(1, 40) + .setDefaultValue(20) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(35, 18) + .setPos(155, 65) + .addTooltip(translateToLocal("fog.cosmetics.onlyintegers")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD); + builder.widget(spinWidget); return builder.build(); } @@ -3315,18 +2474,199 @@ private void openCustomStarColorWindowFresh(Widget widget, @Nullable ForgeOfGods } } - private DynamicPositionedRow delenoName() { - DynamicPositionedRow nameRow = new DynamicPositionedRow(); - String deleno = translateToLocal("gt.blockmachines.multimachine.FOG.deleno"); - int[] colors = new int[] { 0xffffff, 0xf6fff5, 0xecffec, 0xe3ffe2, 0xd9ffd9, 0xd0ffcf }; + protected ModularWindow createStatisticsWindow(final EntityPlayer player) { + final int WIDTH = 300; + final int HEIGHT = 300; + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(TecTechUITextures.BACKGROUND_GLOW_WHITE); + builder.setDraggable(true); - for (int i = 0; i < 6; i++) { - nameRow.addChild( - new TextWidget(Character.toString(deleno.charAt(i))).setDefaultColor(colors[i]) - .setScale(0.8f) - .setTextAlignment(Alignment.CenterLeft)); + builder + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.modulestats")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setScale(1f) + .setPos(0, 8) + .setSize(300, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.heat")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(12, 56) + .setSize(69, 30) + .addTooltip(translateToLocal("fog.text.tooltip.heat")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.effectiveheat")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(12, 86) + .setSize(69, 30) + .addTooltip(translateToLocal("fog.text.tooltip.effectiveheat")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.parallel")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(12, 116) + .setSize(69, 30) + .addTooltip(translateToLocal("fog.text.tooltip.parallel")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.speedbonus")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(12, 146) + .setSize(69, 30) + .addTooltip(translateToLocal("fog.text.tooltip.speedbonus")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.energydiscount")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(12, 176) + .setSize(69, 30) + .addTooltip(translateToLocal("fog.text.tooltip.energydiscount")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.ocdivisor")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(12, 206) + .setSize(69, 30) + .addTooltip(translateToLocal("fog.text.tooltip.ocdivisor")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.powerforge")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(88, 40) + .setSize(40, 10)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.meltingcore")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(141, 40) + .setSize(40, 10)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.plasmafab")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(193, 40) + .setSize(44, 10)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.exoticizer")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(246, 43) + .setSize(40, 10)); + + // Vertical grid lines + for (int i = 0; i < 4; i++) { + builder.widget( + new DrawableWidget().setDrawable(new Rectangle().setColor(Color.rgb(190, 200, 0))) + .setSize(1, 197) + .setPos(81 + 53 * i, 38)); } - return nameRow; + + // Horizontal grid lines + for (int i = 0; i < 7; i++) { + builder.widget( + new DrawableWidget().setDrawable(new Rectangle().setColor(Color.rgb(0, 170, 170))) + .setSize(276, 1) + .setPos(12, 55 + 30 * i)); + } + + MTESmeltingModule smelting = new MTESmeltingModule("smelting"); + MTEMoltenModule molten = new MTEMoltenModule("molten"); + MTEPlasmaModule plasma = new MTEPlasmaModule("plasma"); + MTEExoticModule exotic = new MTEExoticModule("exotic"); + + builder.widget( + new FakeSyncWidget.ByteSyncer( + () -> (byte) formattingMode.ordinal(), + val -> formattingMode = MilestoneFormatter.VALUES[MathHelper + .clamp_int(val, 0, MilestoneFormatter.VALUES.length - 1)])); + builder + .widget(new FakeSyncWidget.IntegerSyncer(() -> fuelConsumptionFactor, val -> fuelConsumptionFactor = val)); + builder.widget(upgrades.getFullSyncer()); + + for (int i = 0; i < 24; i++) { + MTEBaseModule module; + switch (i % 4) { + case 1 -> { + module = molten; + } + case 2 -> { + module = plasma; + } + case 3 -> { + module = exotic; + } + default -> { + module = smelting; + } + } + + int cleanDiv4 = i / 4; + String relevantInfo; + switch (cleanDiv4) { + case 1 -> { + calculateMaxHeatForModules(module, this); + relevantInfo = String.valueOf(formattingMode.format(module.getHeatForOC())); + } + case 2 -> { + calculateMaxParallelForModules(module, this); + relevantInfo = String.valueOf(formattingMode.format(module.getMaxParallel())); + } + case 3 -> { + calculateSpeedBonusForModules(module, this); + relevantInfo = String.valueOf(formatNumbers(module.getSpeedBonus())); + } + case 4 -> { + calculateEnergyDiscountForModules(module, this); + relevantInfo = String.valueOf(formatNumbers(module.getEnergyDiscount())); + } + case 5 -> { + setMiscModuleParameters(module, this); + relevantInfo = String.valueOf(formatNumbers(module.getOverclockTimeFactor())); + } + default -> { + calculateMaxHeatForModules(module, this); + relevantInfo = String.valueOf(formattingMode.format(module.getHeat())); + } + } + + builder.widget( + new MultiChildWidget().addChild( + new ButtonWidget().setOnClick((clickData, widget) -> {}) + .setSize(53, 30)) + .addChild( + new DynamicTextWidget(() -> new Text(relevantInfo)).setScale(1f) + .setDefaultColor(EnumChatFormatting.GREEN) + .setTextAlignment(Alignment.Center) + .setSize(53, 30)) + .setPos(81 + (i % 4) * 53, 55 + (i / 4 * 30))); + } + + builder.widget( + ButtonWidget.closeWindowButton(true) + .setPos(284, 4)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + if (clickData.mouseButton == 0) { + formattingMode = formattingMode.cycle(); + ForgeOfGodsUI.reopenWindow(widget, STATISTICS_WINDOW_ID); + } + }) + .setSize(20, 20) + .addTooltip(translateToLocal("fog.button.formatting.tooltip")) + .setBackground(TecTechUITextures.OVERLAY_CYCLIC_BLUE) + .setPos(8, 272) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); + + return builder.build(); } @Override @@ -3368,101 +2708,16 @@ public MultiblockTooltipBuilder createTooltip() { + "Clicking on the logo in the controller gui opens an extensive information window,") .addInfo("explaining everything there is to know about this multiblock.") .beginStructureBlock(127, 29, 186, false) + .addStructureInfo("Total blocks needed for the structure with " + getRingText("1", "2", "3") + "rings:") .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") + getRingText("3943", "7279", "11005") + "Transcendentally Amplified Magnetic Confinement Casing") + .addStructureInfo(getRingText("2819", "4831", "6567") + "Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo(getRingText("272", "512", "824") + "Celestial Matter Guidance Casing") + .addStructureInfo(getRingText("130", "144", "158") + "Boundless Gravitationally Severed Structure Casing") + .addStructureInfo(getRingText("9", "54", "155") + "Spatially Transcendent Gravitational Lens Block") .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") + getRingText("345", "357", "397") + getRingText("Remote", "Medial", "Central") + + "Graviton Flow Modulator") .addStructureInfo( EnumChatFormatting.GOLD + "36" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") .addStructureInfoSeparator() @@ -3473,6 +2728,20 @@ public MultiblockTooltipBuilder createTooltip() { return tt; } + private static String getRingText(String oneRing, String twoRings, String threeRings) { + return EnumChatFormatting.DARK_PURPLE + oneRing + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + twoRings + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + threeRings + + EnumChatFormatting.GRAY + + " "; + } + @Override public boolean energyFlowOnRunningTick(ItemStack aStack, boolean allowProduction) { return true; @@ -3497,8 +2766,8 @@ public int getFuelFactor() { return fuelConsumptionFactor; } - public boolean isUpgradeActive(int upgradeID) { - return upgrades[upgradeID]; + public boolean isUpgradeActive(ForgeOfGodsUpgrade upgrade) { + return upgrades.isUpgradeActive(upgrade); } public int getRingAmount() { @@ -3506,41 +2775,25 @@ public int getRingAmount() { } public int getTotalActiveUpgrades() { - int totalUpgrades = 0; - for (boolean upgrade : upgrades) { - if (upgrade) { - totalUpgrades++; - } - } - return totalUpgrades; + return upgrades.getTotalActiveUpgrades(); } private Text fuelUsage() { return new Text(fuelConsumption + " L/5s"); } - private Text gravitonShardAmount() { - EnumChatFormatting enoughGravitonShards = EnumChatFormatting.RED; - if (gravitonShardsAvailable >= gravitonShardCost) { - enoughGravitonShards = EnumChatFormatting.GREEN; + private Text storedFuel() { + if (internalBattery == 0) { + return new Text(stellarFuelAmount + "/" + neededStartupFuel); } - return new Text(enoughGravitonShards + Integer.toString(gravitonShardsAvailable)); - + return new Text(internalBattery + "/" + maxBatteryCharge); } - private Text storedFuel() { + private Text storedFuelHeaderText() { if (internalBattery == 0) { - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.storedstartupfuel") + " " - + stellarFuelAmount - + "/" - + neededStartupFuel); + return new Text(translateToLocal("gt.blockmachines.multimachine.FOG.storedstartupfuel")); } - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.storedfuel") + " " - + internalBattery - + "/" - + maxBatteryCharge); + return new Text(translateToLocal("gt.blockmachines.multimachine.FOG.storedfuel")); } private void checkInversionStatus() { @@ -3730,47 +2983,6 @@ private Text gravitonShardAmountText(int milestoneID) { translateToLocal("gt.blockmachines.multimachine.FOG.shardgain") + ": " + EnumChatFormatting.GRAY + sum); } - private enum FormattingMode { - - NONE, - COMMA, - EXPONENT; - - static final FormattingMode[] VALUES = values(); - - FormattingMode cycle() { - return switch (this) { - case NONE -> COMMA; - case COMMA -> EXPONENT; - case EXPONENT -> NONE; - }; - } - - String format(Number number) { - return switch (this) { - case NONE -> number.toString(); - case COMMA -> { - if (number instanceof BigInteger bi) yield formatNumbers(bi); - else yield formatNumbers(number.longValue()); - } - case EXPONENT -> { - if (number instanceof BigInteger bi) { - if (bi.compareTo(BigInteger.valueOf(1_000L)) > 0) { - yield toExponentForm(bi); - } - yield bi.toString(); - } else { - long value = number.longValue(); - if (value > 1_000L) { - yield toExponentForm(value); - } - yield Long.toString(value); - } - } - }; - } - } - private Text totalMilestoneProgress(int milestoneID) { Number progress; String suffix; @@ -3815,7 +3027,7 @@ private Text milestoneProgressText(int milestoneID) { String progressText = translateToLocal("gt.blockmachines.multimachine.FOG.progress"); Text done = new Text( translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete") - + (formattingMode != FormattingMode.NONE ? EnumChatFormatting.DARK_RED + "?" : "")); + + (formattingMode != DEFAULT_FORMATTING_MODE ? EnumChatFormatting.DARK_RED + "?" : "")); if (milestoneProgress[milestoneID] >= 7 && !inversion) { return done; @@ -3856,26 +3068,6 @@ private Text milestoneProgressText(int milestoneID) { return new Text(progressText + ": " + EnumChatFormatting.GRAY + formattingMode.format(max) + " " + suffix); } - private Text constructionStatusText() { - return upgrades[currentUpgradeID] ? new Text(translateToLocal("fog.upgrade.respec")) - : new Text(translateToLocal("fog.upgrade.confirm")); - } - - private List constructionStatus() { - if (upgrades[currentUpgradeID]) { - return ImmutableList.of(translateToLocal("fog.upgrade.respec")); - } - return ImmutableList.of(translateToLocal("fog.upgrade.confirm")); - } - - 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; @@ -3921,87 +3113,22 @@ public void addTotalRecipesProcessed(long amount) { 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); - NBT.setBoolean("secretUpgrde", secretUpgrade); - - // 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); - - starColors.serializeToNBT(NBT); + public RecipeMap getRecipeMap() { + return TecTechRecipeMaps.godforgeFakeUpgradeCostRecipes; + } + @Override + public void setItemNBT(NBTTagCompound NBT) { + saveGeneralNBT(NBT, false); 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.setInteger("ringAmount", ringAmount); - NBT.setBoolean("secretUpgrade", secretUpgrade); - - // 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); + saveGeneralNBT(NBT, true); + // Upgrade window stored items NBTTagCompound upgradeWindowStorageNBTTag = new NBTTagCompound(); - int storageIndex = 0; for (ItemStack itemStack : inputSlotHandler.getStacks()) { if (itemStack != null) { @@ -4011,69 +3138,96 @@ public void saveNBTData(NBTTagCompound NBT) { } storageIndex++; } - NBT.setTag("upgradeWindowStorage", upgradeWindowStorageNBTTag); // Renderer information NBT.setInteger("rotationSpeed", rotationSpeed); NBT.setInteger("starSize", starSize); NBT.setString("selectedStarColor", selectedStarColor); + NBT.setInteger("ringAmount", ringAmount); NBT.setBoolean("isRenderActive", isRenderActive); - - starColors.serializeToNBT(NBT); + NBT.setBoolean("isRendererDisabled", isRendererDisabled); super.saveNBTData(NBT); } + private void saveGeneralNBT(NBTTagCompound NBT, boolean force) { + if (force || selectedFuelType != 0) NBT.setInteger("selectedFuelType", selectedFuelType); + if (force || internalBattery != 0) NBT.setInteger("internalBattery", internalBattery); + if (force || batteryCharging) NBT.setBoolean("batteryCharging", batteryCharging); + if (force || gravitonShardsAvailable != 0) NBT.setInteger("gravitonShardsAvailable", gravitonShardsAvailable); + if (force || gravitonShardsSpent != 0) NBT.setInteger("gravitonShardsSpent", gravitonShardsSpent); + if (force || totalRecipesProcessed != 0) NBT.setLong("totalRecipesProcessed", totalRecipesProcessed); + if (force || totalFuelConsumed != 0) NBT.setLong("totalFuelConsumed", totalFuelConsumed); + if (force || stellarFuelAmount != 0) NBT.setInteger("starFuelStored", stellarFuelAmount); + if (force || gravitonShardEjection) NBT.setBoolean("gravitonShardEjection", gravitonShardEjection); + if (force || secretUpgrade) NBT.setBoolean("secretUpgrade", secretUpgrade); + + // Fields with non-zero defaults + if (force || fuelConsumptionFactor != DEFAULT_FUEL_CONSUMPTION_FACTOR) { + NBT.setInteger("fuelConsumptionFactor", fuelConsumptionFactor); + } + if (force || maxBatteryCharge != DEFAULT_MAX_BATTERY_CHARGE) { + NBT.setInteger("batterySize", maxBatteryCharge); + } + if (force || !DEFAULT_TOTAL_POWER.equals(totalPowerConsumed)) { + NBT.setByteArray("totalPowerConsumed", totalPowerConsumed.toByteArray()); + } + if (force || formattingMode != DEFAULT_FORMATTING_MODE) { + NBT.setInteger("formattingMode", formattingMode.ordinal()); + } + + upgrades.serializeToNBT(NBT, force); + starColors.serializeToNBT(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"); - ringAmount = NBT.getInteger("ringAmount"); secretUpgrade = NBT.getBoolean("secretUpgrade"); - NBTTagCompound tempBooleanTag = NBT.getCompoundTag("upgrades"); - - for (int upgradeIndex = 0; upgradeIndex < 31; upgradeIndex++) { - boolean upgrade = tempBooleanTag.getBoolean("upgrade" + upgradeIndex); - upgrades[upgradeIndex] = upgrade; + // Fields with non-zero defaults + if (NBT.hasKey("fuelConsumptionFactor")) { + fuelConsumptionFactor = NBT.getInteger("fuelConsumptionFactor"); } - - tempBooleanTag = NBT.getCompoundTag("upgradeMaterials"); - - for (int upgradeIndex = 0; upgradeIndex < 7; upgradeIndex++) { - boolean upgrade = tempBooleanTag.getBoolean("upgradeMaterial" + upgradeIndex); - materialPaidUpgrades[upgradeIndex] = upgrade; + if (NBT.hasKey("batterySize")) { + maxBatteryCharge = NBT.getInteger("batterySize"); + } + if (NBT.hasKey("totalPowerConsumed")) { + totalPowerConsumed = new BigInteger(NBT.getByteArray("totalPowerConsumed")); + } + if (NBT.hasKey("formattingMode")) { + int index = MathHelper.clamp_int(NBT.getInteger("formattingMode"), 0, MilestoneFormatter.VALUES.length); + formattingMode = MilestoneFormatter.VALUES[index]; } + // Stored items NBTTagCompound tempItemTag = NBT.getCompoundTag("upgradeWindowStorage"); - for (int index = 0; index < 16; index++) { - int stackSize = tempItemTag.getInteger(index + "stacksizeOfStoredUpgradeItems"); ItemStack itemStack = ItemStack.loadItemStackFromNBT(NBT.getCompoundTag(index + "storedUpgradeItem")); - if (itemStack != null) { storedUpgradeWindowItems[index] = itemStack.splitStack(stackSize); } } // Renderer information - rotationSpeed = NBT.getInteger("rotationSpeed"); - starSize = NBT.getInteger("starSize"); - selectedStarColor = NBT.getString("selectedStarColor"); + if (NBT.hasKey("rotationSpeed")) rotationSpeed = NBT.getInteger("rotationSpeed"); + if (NBT.hasKey("starSize")) starSize = NBT.getInteger("starSize"); + if (NBT.hasKey("selectedStarColor")) selectedStarColor = NBT.getString("selectedStarColor"); + if (NBT.hasKey("ringAmount")) ringAmount = NBT.getInteger("ringAmount"); isRenderActive = NBT.getBoolean("isRenderActive"); + isRendererDisabled = NBT.getBoolean("isRendererDisabled"); + upgrades.rebuildFromNBT(NBT); starColors.rebuildFromNBT(NBT); super.loadNBTData(NBT); diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEMoltenModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEMoltenModule.java index 51bfe51ac00..eace01bb6a7 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEMoltenModule.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEMoltenModule.java @@ -11,8 +11,6 @@ import java.math.BigInteger; import java.util.ArrayList; -import javax.annotation.Nonnull; - import net.minecraft.util.EnumChatFormatting; import org.jetbrains.annotations.NotNull; @@ -54,7 +52,7 @@ protected ProcessingLogic createProcessingLogic() { @NotNull @Override - protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { if (recipe.mSpecialValue > getHeat()) { return CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); } @@ -70,9 +68,9 @@ protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { return CheckRecipeResultRegistry.SUCCESSFUL; } - @Nonnull + @NotNull @Override - protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) .setRecipeHeat(recipe.mSpecialValue) .setHeatOC(true) @@ -85,7 +83,7 @@ protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe @NotNull @Override - protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + protected CheckRecipeResult onRecipeStart(@NotNull GTRecipe recipe) { if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); } diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEPlasmaModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEPlasmaModule.java index 29675ae5cef..05ae43e341b 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEPlasmaModule.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEPlasmaModule.java @@ -14,8 +14,6 @@ import java.math.BigInteger; import java.util.ArrayList; -import javax.annotation.Nonnull; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.EnumChatFormatting; @@ -77,7 +75,7 @@ protected ProcessingLogic createProcessingLogic() { @NotNull @Override - protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { wirelessEUt = (long) recipe.mEUt * getMaxParallel(); if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) { return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); @@ -91,7 +89,7 @@ protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { @NotNull @Override - protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + protected CheckRecipeResult onRecipeStart(@NotNull GTRecipe recipe) { wirelessEUt = (long) recipe.mEUt * maxParallel; if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); @@ -106,9 +104,9 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { return CheckRecipeResultRegistry.SUCCESSFUL; } - @Nonnull + @NotNull @Override - protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) .setDurationDecreasePerOC(getOverclockTimeFactor()); } diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTESmeltingModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTESmeltingModule.java index ba8e5f26661..1e499b3507a 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTESmeltingModule.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTESmeltingModule.java @@ -17,8 +17,6 @@ import java.util.Collections; import java.util.List; -import javax.annotation.Nonnull; - import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; @@ -70,7 +68,7 @@ public RecipeMap getRecipeMap() { return furnaceMode ? RecipeMaps.furnaceRecipes : RecipeMaps.blastFurnaceRecipes; } - @Nonnull + @NotNull @Override public Collection> getAvailableRecipeMaps() { return Arrays.asList(RecipeMaps.blastFurnaceRecipes, RecipeMaps.furnaceRecipes); @@ -89,7 +87,7 @@ protected ProcessingLogic createProcessingLogic() { @NotNull @Override - protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { if (recipe.mSpecialValue > getHeat()) { return CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); @@ -108,7 +106,7 @@ protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { @NotNull @Override - protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + protected CheckRecipeResult onRecipeStart(@NotNull GTRecipe recipe) { if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); } @@ -124,9 +122,9 @@ protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { return CheckRecipeResultRegistry.SUCCESSFUL; } - @Nonnull + @NotNull @Override - protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) .setRecipeHeat(recipe.mSpecialValue) .setHeatOC(true) diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/color/ForgeOfGodsStarColor.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/color/ForgeOfGodsStarColor.java index 9593c1db95b..900ef76f636 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/color/ForgeOfGodsStarColor.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/color/ForgeOfGodsStarColor.java @@ -11,9 +11,9 @@ import org.jetbrains.annotations.Nullable; -import com.cleanroommc.modularui.utils.Color; import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.drawable.shapes.Rectangle; +import com.gtnewhorizons.modularui.api.math.Color; import tectech.thing.gui.TecTechUITextures; @@ -29,6 +29,7 @@ public class ForgeOfGodsStarColor { public static final int DEFAULT_GREEN = 204; public static final int DEFAULT_BLUE = 255; public static final float DEFAULT_GAMMA = 3.0f; + public static final int DEFAULT_CYCLE_SPEED = 1; public static final ForgeOfGodsStarColor DEFAULT = new ForgeOfGodsStarColor("Default") .addColor(DEFAULT_RED, DEFAULT_GREEN, DEFAULT_BLUE, DEFAULT_GAMMA) @@ -43,15 +44,29 @@ public class ForgeOfGodsStarColor { .setCustomDrawable(TecTechUITextures.PICTURE_RAINBOW_SQUARE) .registerPreset(); - public static final ForgeOfGodsStarColor CLOUD_PICK = new ForgeOfGodsStarColor("Cloud's Pick") - .addColor(DEFAULT_RED, DEFAULT_GREEN, DEFAULT_BLUE, DEFAULT_GAMMA) // todo @cloud + public static final ForgeOfGodsStarColor CLOUDS_PICK = new ForgeOfGodsStarColor("Cloud's Pick") + .addColor(255, 255, 0, 0.8f) + .addColor(0, 0, 0, 0) + .addColor(0, 255, 255, 0.4f) + .addColor(0, 0, 0, 0) + .setCycleSpeed(1) + .setCustomDrawable( + new Rectangle() + .setColor(Color.rgb(255, 255, 0), Color.rgb(0, 0, 0), Color.rgb(0, 0, 0), Color.rgb(0, 255, 255))) .registerPreset(); - public static final ForgeOfGodsStarColor MAYA_PICK = new ForgeOfGodsStarColor("Maya's Pick") - .addColor(91, 206, 250, 3.0f) - .addColor(245, 169, 184, 3.0f) + public static final ForgeOfGodsStarColor MAYAS_PICK = new ForgeOfGodsStarColor("Maya's Pick") + .addColor(0, 0, 0, 0.0f) + .addColor(109, 201, 225, 1.0f) .addColor(255, 255, 255, 3.0f) + .addColor(255, 172, 210, 1.0f) .setCycleSpeed(1) + .setCustomDrawable( + new Rectangle().setColor( + Color.rgb(255, 172, 210), + Color.rgb(255, 255, 255), + Color.rgb(0, 0, 0), + Color.rgb(109, 201, 225))) .registerPreset(); public static List getDefaultColors() { @@ -68,7 +83,7 @@ public static List getDefaultColors() { // Star render settings private final List settings = new ArrayList<>(); - private int cycleSpeed = 1; + private int cycleSpeed = DEFAULT_CYCLE_SPEED; protected ForgeOfGodsStarColor(String name) { this(name, LATEST_VERSION); diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/ForgeOfGodsRingsStructureString.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/structure/ForgeOfGodsRingsStructureString.java similarity index 99% rename from src/main/java/tectech/thing/metaTileEntity/multi/godforge/ForgeOfGodsRingsStructureString.java rename to src/main/java/tectech/thing/metaTileEntity/multi/godforge/structure/ForgeOfGodsRingsStructureString.java index fcff5c7026f..116dc7b5ba5 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/ForgeOfGodsRingsStructureString.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/structure/ForgeOfGodsRingsStructureString.java @@ -1,4 +1,4 @@ -package tectech.thing.metaTileEntity.multi.godforge; +package tectech.thing.metaTileEntity.multi.godforge.structure; import static tectech.util.TTUtility.replaceLetters; diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/ForgeOfGodsStructureString.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/structure/ForgeOfGodsStructureString.java similarity index 99% rename from src/main/java/tectech/thing/metaTileEntity/multi/godforge/ForgeOfGodsStructureString.java rename to src/main/java/tectech/thing/metaTileEntity/multi/godforge/structure/ForgeOfGodsStructureString.java index 1780be0079b..277db1d1e13 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/ForgeOfGodsStructureString.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/structure/ForgeOfGodsStructureString.java @@ -1,4 +1,4 @@ -package tectech.thing.metaTileEntity.multi.godforge; +package tectech.thing.metaTileEntity.multi.godforge.structure; import static tectech.util.TTUtility.appendStringArrays; import static tectech.util.TTUtility.replaceLetters; diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/upgrade/ForgeOfGodsUpgrade.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/upgrade/ForgeOfGodsUpgrade.java new file mode 100644 index 00000000000..05b5f491d74 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/upgrade/ForgeOfGodsUpgrade.java @@ -0,0 +1,475 @@ +package tectech.thing.metaTileEntity.multi.godforge.upgrade; + +import static tectech.thing.metaTileEntity.multi.godforge.upgrade.ForgeOfGodsUpgrade.BGWindowSize.*; +import static tectech.thing.metaTileEntity.multi.godforge.util.MilestoneIcon.*; +import static tectech.thing.metaTileEntity.multi.godforge.util.UpgradeColor.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.EnumMap; +import java.util.List; +import java.util.Set; +import java.util.function.UnaryOperator; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import com.google.common.collect.ImmutableSet; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.math.Size; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.ObjectList; +import tectech.thing.metaTileEntity.multi.godforge.util.MilestoneIcon; +import tectech.thing.metaTileEntity.multi.godforge.util.UpgradeColor; + +public enum ForgeOfGodsUpgrade { + + START, + IGCC, + STEM, + CFCE, + GISS, + FDIM, + SA, + GPCI, + REC, + GEM, + CTCDD, + QGPIU, + SEFCP, + TCT, + GGEBE, + TPTP, + DOP, + CNTI, + EPEC, + IMKG, + NDPE, + POS, + DOR, + NGMS, + SEDS, + PA, + CD, + TSE, + TBF, + EE, + END, + + ; + + public static final ForgeOfGodsUpgrade[] VALUES = values(); + + static final Set SPLIT_UPGRADES; + + static { + // Build upgrade data. Done here due to potential forward references + + // spotless:off + + START.build(b -> b + .background(BLUE, COMPOSITION) + .windowSize(LARGE) + .treePos(126, 56)); + + IGCC.build(b -> b + .prereqs(START) + .cost(1) + .background(BLUE, CONVERSION) + .treePos(126, 116)); + + STEM.build(b -> b + .prereqs(IGCC) + .cost(1) + .background(BLUE, CATALYST) + .treePos(96, 176)); + + CFCE.build(b -> b + .prereqs(IGCC) + .cost(1) + .background(BLUE, CATALYST) + .treePos(156, 176)); + + GISS.build(b -> b + .prereqs(STEM) + .cost(1) + .background(BLUE, CHARGE) + .treePos(66, 236)); + + FDIM.build(b -> b + .prereqs(STEM, CFCE) + .cost(1) + .background(BLUE, COMPOSITION) + .treePos(126, 236)); + + SA.build(b -> b + .prereqs(CFCE) + .cost(1) + .background(BLUE, CONVERSION) + .treePos(186, 236)); + + GPCI.build(b -> b + .prereqs(FDIM) + .cost(2) + .background(BLUE, COMPOSITION) + .treePos(126, 296)); + + REC.build(b -> b + .prereqs(GISS, FDIM) + .requireAllPrereqs() + .cost(2) + .background(RED, CHARGE) + .treePos(56, 356)); + + GEM.build(b -> b + .prereqs(GPCI) + .cost(2) + .background(BLUE, CATALYST) + .treePos(126, 356)); + + CTCDD.build(b -> b + .prereqs(GPCI, SA) + .requireAllPrereqs() + .cost(2) + .background(RED, CONVERSION) + .treePos(196, 356)); + + QGPIU.build(b -> b + .prereqs(REC, CTCDD) + .cost(2) + .background(BLUE, CATALYST) + .treePos(126, 416)); + + SEFCP.build(b -> b + .prereqs(QGPIU) + .cost(3) + .background(PURPLE, CATALYST) + .treePos(66, 476)); + + TCT.build(b -> b + .prereqs(QGPIU) + .cost(3) + .background(ORANGE, CONVERSION) + .treePos(126, 476)); + + GGEBE.build(b -> b + .prereqs(QGPIU) + .cost(3) + .background(GREEN, CHARGE) + .treePos(186, 476)); + + TPTP.build(b -> b + .prereqs(GGEBE) + .cost(4) + .background(GREEN, CONVERSION) + .treePos(246, 496)); + + DOP.build(b -> b + .prereqs(CNTI) + .cost(4) + .background(PURPLE, CONVERSION) + .treePos(6, 556)); + + CNTI.build(b -> b + .prereqs(SEFCP) + .cost(3) + .background(PURPLE, CHARGE) + .treePos(66, 536)); + + EPEC.build(b -> b + .prereqs(TCT) + .cost(3) + .background(ORANGE, CONVERSION) + .treePos(126, 536)); + + IMKG.build(b -> b + .prereqs(GGEBE) + .cost(3) + .background(GREEN, CHARGE) + .treePos(186, 536)); + + NDPE.build(b -> b + .prereqs(CNTI) + .cost(3) + .background(PURPLE, CHARGE) + .treePos(66, 596)); + + POS.build(b -> b + .prereqs(EPEC) + .cost(3) + .background(ORANGE, CONVERSION) + .treePos(126, 596)); + + DOR.build(b -> b + .prereqs(IMKG) + .cost(3) + .background(GREEN, CONVERSION) + .treePos(186, 596)); + + NGMS.build(b -> b + .prereqs(NDPE, POS, DOR) + .cost(4) + .background(BLUE, CHARGE) + .treePos(126, 656)); + + SEDS.build(b -> b + .prereqs(NGMS) + .cost(5) + .background(BLUE, CONVERSION) + .treePos(126, 718)); + + PA.build(b -> b + .prereqs(SEDS) + .cost(6) + .background(BLUE, CONVERSION) + .treePos(36, 758)); + + CD.build(b -> b + .prereqs(PA) + .cost(7) + .background(BLUE, COMPOSITION) + .treePos(36, 848)); + + TSE.build(b -> b + .prereqs(CD) + .cost(8) + .background(BLUE, CATALYST) + .treePos(126, 888)); + + TBF.build(b -> b + .prereqs(TSE) + .cost(9) + .background(BLUE, CHARGE) + .treePos(216, 848)); + + EE.build(b -> b + .prereqs(TBF) + .cost(10) + .background(BLUE, COMPOSITION) + .treePos(216, 758)); + + END.build(b -> b + .prereqs(EE) + .cost(12) + .background(BLUE, COMPOSITION) + .windowSize(LARGE) + .treePos(126, 798)); + + // spotless:on + + // Build split upgrade set + SPLIT_UPGRADES = ImmutableSet.of(SEFCP, TCT, GGEBE); + + // Build inverse dependents mapping + EnumMap> dependencies = new EnumMap<>(ForgeOfGodsUpgrade.class); + for (ForgeOfGodsUpgrade upgrade : VALUES) { + for (ForgeOfGodsUpgrade prerequisite : upgrade.prerequisites) { + dependencies.computeIfAbsent(prerequisite, $ -> new ArrayList<>()) + .add(upgrade); + } + } + for (var entry : dependencies.entrySet()) { + ForgeOfGodsUpgrade upgrade = entry.getKey(); + List deps = entry.getValue(); + if (deps != null) { + upgrade.dependents = deps.toArray(new ForgeOfGodsUpgrade[0]); + } + } + } + + // Static tree linking + private ForgeOfGodsUpgrade[] prerequisites; + private boolean requireAllPrerequisites; + + // Cost + private int shardCost; + private final List extraCost = new ArrayList<>(); + + // UI + private UpgradeColor color; + private MilestoneIcon icon; + private BGWindowSize windowSize; + private Pos2d treePos; + + // Pre-generated data + private ForgeOfGodsUpgrade[] dependents = new ForgeOfGodsUpgrade[0]; + private final String name; + private final String nameShort; + private final String bodyText; + private final String loreText; + + ForgeOfGodsUpgrade() { + this.name = "fog.upgrade.tt." + ordinal(); + this.nameShort = "fog.upgrade.tt.short." + ordinal(); + this.bodyText = "fog.upgrade.text." + ordinal(); + this.loreText = "fog.upgrade.lore." + ordinal(); + } + + private void build(UnaryOperator u) { + Builder b = u.apply(new Builder()); + + this.prerequisites = b.prerequisites != null ? b.prerequisites.toArray(new ForgeOfGodsUpgrade[0]) + : new ForgeOfGodsUpgrade[0]; + this.requireAllPrerequisites = b.requireAllPrerequisites; + this.shardCost = b.shardCost; + this.color = b.color; + this.icon = b.icon; + this.windowSize = b.windowSize; + this.treePos = b.treePos; + } + + public void addExtraCost(ItemStack... cost) { + if (extraCost.size() + cost.length > 12) { + throw new IllegalArgumentException("Too many inputs for Godforge upgrade cost, cannot be more than 12!"); + } + extraCost.addAll(Arrays.asList(cost)); + } + + public ForgeOfGodsUpgrade[] getPrerequisites() { + return prerequisites; + } + + public boolean requiresAllPrerequisites() { + return requireAllPrerequisites; + } + + public ForgeOfGodsUpgrade[] getDependents() { + return dependents; + } + + public int getShardCost() { + return shardCost; + } + + public boolean hasExtraCost() { + return !extraCost.isEmpty(); + } + + public ItemStack[] getExtraCost() { + return extraCost.toArray(new ItemStack[0]); + } + + public UITexture getBackground() { + return color.getBackground(); + } + + public UITexture getOverlay() { + return color.getOverlay(); + } + + public UITexture getSymbol() { + return icon.getSymbol(); + } + + public float getSymbolWidthRatio() { + return icon.getWidthRatio(); + } + + public Size getWindowSize() { + return windowSize.getWindowSize(); + } + + public int getLoreYPos() { + return windowSize.getLoreY(); + } + + public Pos2d getTreePos() { + return treePos; + } + + public String getNameText() { + return StatCollector.translateToLocal(name); + } + + public String getShortNameText() { + return StatCollector.translateToLocal(nameShort); + } + + public String getBodyText() { + return StatCollector.translateToLocal(bodyText); + } + + public String getLoreText() { + return StatCollector.translateToLocal(loreText); + } + + public static class Builder { + + // Tree linking + private ObjectList prerequisites; + private boolean requireAllPrerequisites; + + // Cost + private int shardCost; + + // UI + private UpgradeColor color = BLUE; + private MilestoneIcon icon = CHARGE; + private BGWindowSize windowSize = STANDARD; + private Pos2d treePos = new Pos2d(0, 0); + + private Builder() {} + + public Builder prereqs(ForgeOfGodsUpgrade... prereqs) { + if (this.prerequisites != null) { + throw new IllegalArgumentException("Cannot repeat calls to ForgeOfGodsUpgrade$Builder#prereqs"); + } + this.prerequisites = new ObjectArrayList<>(prereqs); + return this; + } + + public Builder requireAllPrereqs() { + this.requireAllPrerequisites = true; + return this; + } + + // Cost + public Builder cost(int shards) { + this.shardCost = shards; + return this; + } + + // UI + public Builder background(UpgradeColor color, MilestoneIcon icon) { + this.color = color; + this.icon = icon; + return this; + } + + public Builder windowSize(BGWindowSize windowSize) { + this.windowSize = windowSize; + return this; + } + + public Builder treePos(int x, int y) { + this.treePos = new Pos2d(x, y); + return this; + } + } + + enum BGWindowSize { + + STANDARD(250, 250, 110), + LARGE(300, 300, 85), + + ; + + private final Size size; + private final int loreY; + + BGWindowSize(int width, int height, int loreY) { + this.size = new Size(width, height); + this.loreY = loreY; + } + + public Size getWindowSize() { + return size; + } + + public int getLoreY() { + return loreY; + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/upgrade/UpgradeStorage.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/upgrade/UpgradeStorage.java new file mode 100644 index 00000000000..a473cc15ed0 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/upgrade/UpgradeStorage.java @@ -0,0 +1,285 @@ +package tectech.thing.metaTileEntity.multi.godforge.upgrade; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.EnumMap; +import java.util.stream.Stream; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; + +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; + +import gregtech.api.util.GTUtility; + +public class UpgradeStorage { + + private final EnumMap unlockedUpgrades = new EnumMap<>(ForgeOfGodsUpgrade.class); + + public UpgradeStorage() { + for (ForgeOfGodsUpgrade upgrade : ForgeOfGodsUpgrade.VALUES) { + unlockedUpgrades.put(upgrade, new UpgradeData()); + } + } + + /** Whether the passed upgrade is already unlocked (purchased). */ + public boolean isUpgradeActive(ForgeOfGodsUpgrade upgrade) { + return getData(upgrade).isActive(); + } + + public boolean isCostPaid(ForgeOfGodsUpgrade upgrade) { + return getData(upgrade).isCostPaid(); + } + + public short[] getPaidCosts(ForgeOfGodsUpgrade upgrade) { + return getData(upgrade).amountsPaid; + } + + /** Handles consuming items and updating state if successful. Does NOT handle graviton shards! */ + public void payCost(ForgeOfGodsUpgrade upgrade, ItemStackHandler handler) { + UpgradeData data = getData(upgrade); + + if (!upgrade.hasExtraCost()) { + data.costPaid = true; + return; + } + + ItemStack[] extraCost = upgrade.getExtraCost(); + for (int i = 0; i < handler.getSlots(); i++) { + ItemStack inputStack = handler.getStackInSlot(i); + if (inputStack == null) continue; + + for (int j = 0; j < extraCost.length; j++) { + ItemStack costStack = extraCost[j]; + int alreadyPaid = data.amountsPaid[j]; + if (alreadyPaid >= costStack.stackSize) continue; + + if (GTUtility.areStacksEqual(inputStack, costStack)) { + int maxExtract = costStack.stackSize - alreadyPaid; + ItemStack extractedStack = handler.extractItem(i, maxExtract, false); + if (extractedStack != null) { + data.amountsPaid[j] += extractedStack.stackSize; + } + } + } + } + + // Check if all costs are paid + for (int i = 0; i < extraCost.length; i++) { + ItemStack costStack = extraCost[i]; + if (costStack == null) continue; + if (data.amountsPaid[i] < costStack.stackSize) { + return; + } + } + data.costPaid = true; + } + + public void unlockUpgrade(ForgeOfGodsUpgrade upgrade) { + getData(upgrade).active = true; + } + + public void respecUpgrade(ForgeOfGodsUpgrade upgrade) { + getData(upgrade).active = false; + } + + /** + * Whether the passed upgrade can be unlocked, checking that the prerequisites are satisfied. + */ + public boolean checkPrerequisites(ForgeOfGodsUpgrade upgrade) { + ForgeOfGodsUpgrade[] prereqs = upgrade.getPrerequisites(); + if (prereqs.length == 0) return true; + + Stream prereqStream = Arrays.stream(prereqs) + .map(unlockedUpgrades::get); + + if (upgrade.requiresAllPrerequisites()) { + return prereqStream.allMatch(UpgradeData::isActive); + } + return prereqStream.anyMatch(UpgradeData::isActive); + } + + public boolean checkSplit(ForgeOfGodsUpgrade upgrade, int maxSplitUpgrades) { + if (ForgeOfGodsUpgrade.SPLIT_UPGRADES.contains(upgrade)) { + return ForgeOfGodsUpgrade.SPLIT_UPGRADES.stream() + .map(unlockedUpgrades::get) + .filter(UpgradeData::isActive) + .count() < maxSplitUpgrades; + } + return true; + } + + public boolean checkCost(ForgeOfGodsUpgrade upgrade, int availableShards) { + if (upgrade.getShardCost() > availableShards) return false; + return !upgrade.hasExtraCost() || isCostPaid(upgrade); + } + + /** @return true if any dependent upgrades are currently unlocked. */ + public boolean checkDependents(ForgeOfGodsUpgrade upgrade) { + for (ForgeOfGodsUpgrade dependent : upgrade.getDependents()) { + if (!isUpgradeActive(dependent)) continue; + + // Check failed, this dependent strictly requires the passed upgrade + if (dependent.requiresAllPrerequisites()) return false; + + // Check for some other prerequisite upgrade of the dependent to make sure that + // if the passed upgrade is removed, that upgrade is still valid + if (Arrays.stream(dependent.getPrerequisites()) + .map(unlockedUpgrades::get) + .filter(UpgradeData::isActive) + .count() <= 1) { + return false; + } + } + return true; + } + + private UpgradeData getData(ForgeOfGodsUpgrade upgrade) { + return unlockedUpgrades.computeIfAbsent(upgrade, $ -> new UpgradeData()); + } + + private boolean hasAnyProgress() { + if (isUpgradeActive(ForgeOfGodsUpgrade.START)) return true; + + // Check if any costs have been paid in any upgrades + for (var entry : unlockedUpgrades.entrySet()) { + ForgeOfGodsUpgrade upgrade = entry.getKey(); + if (upgrade.hasExtraCost()) { + UpgradeData data = entry.getValue(); + if (data.isCostPaid()) return true; + for (int i = 0; i < data.amountsPaid.length; i++) { + if (data.amountsPaid[i] != 0) return true; + } + } + } + + return false; + } + + public int getTotalActiveUpgrades() { + return (int) unlockedUpgrades.values() + .stream() + .map(UpgradeData::isActive) + .count(); + } + + public Collection getAllUpgrades() { + return unlockedUpgrades.keySet(); + } + + public void resetAll() { + for (UpgradeData data : unlockedUpgrades.values()) { + data.active = false; + data.costPaid = false; + } + } + + public void unlockAll() { + for (UpgradeData data : unlockedUpgrades.values()) { + data.active = true; + } + } + + public void serializeToNBT(NBTTagCompound NBT, boolean force) { + if (!force && !hasAnyProgress()) return; + + NBTTagCompound upgradeTag = new NBTTagCompound(); + for (ForgeOfGodsUpgrade upgrade : ForgeOfGodsUpgrade.VALUES) { + UpgradeData data = unlockedUpgrades.get(upgrade); + upgradeTag.setBoolean("upgrade" + upgrade.ordinal(), data.isActive()); + if (upgrade.hasExtraCost()) { + NBTTagCompound costTag = new NBTTagCompound(); + costTag.setBoolean("paid", data.isCostPaid()); + for (int i = 0; i < data.amountsPaid.length; i++) { + costTag.setShort("costPaid" + i, data.amountsPaid[i]); + } + upgradeTag.setTag("extraCost" + upgrade.ordinal(), costTag); + } + } + NBT.setTag("upgrades", upgradeTag); + } + + public void rebuildFromNBT(NBTTagCompound NBT) { + if (!NBT.hasKey("upgrades")) return; + + NBTTagCompound upgradeTag = NBT.getCompoundTag("upgrades"); + for (int i = 0; i < ForgeOfGodsUpgrade.VALUES.length; i++) { + ForgeOfGodsUpgrade upgrade = ForgeOfGodsUpgrade.VALUES[i]; + UpgradeData data = unlockedUpgrades.get(upgrade); + data.active = upgradeTag.getBoolean("upgrade" + upgrade.ordinal()); + if (upgrade.hasExtraCost() && upgradeTag.hasKey("extraCost" + upgrade.ordinal())) { + NBTTagCompound costTag = upgradeTag.getCompoundTag("extraCost" + upgrade.ordinal()); + data.costPaid = costTag.getBoolean("paid"); + for (int j = 0; j < data.amountsPaid.length; j++) { + data.amountsPaid[j] = costTag.getShort("costPaid" + j); + } + } + } + } + + /** Sync widget to sync a single upgrade. */ + public FakeSyncWidget getSyncer(ForgeOfGodsUpgrade upgrade) { + return new FakeSyncWidget<>( + () -> unlockedUpgrades.get(upgrade), + val -> unlockedUpgrades.put(upgrade, val), + UpgradeData::writeToBuffer, + UpgradeData::readFromBuffer); + } + + /** Sync widget to sync the full upgrade tree. */ + public FakeSyncWidget getFullSyncer() { + return new FakeSyncWidget.ListSyncer<>(() -> new ArrayList<>(unlockedUpgrades.values()), val -> { + for (int i = 0; i < val.size(); i++) { + unlockedUpgrades.put(ForgeOfGodsUpgrade.VALUES[i], val.get(i)); + } + }, UpgradeData::writeToBuffer, UpgradeData::readFromBuffer); + } + + private static class UpgradeData { + + private boolean active; + private boolean costPaid; + private final short[] amountsPaid = new short[12]; + + public boolean isActive() { + return active; + } + + public boolean isCostPaid() { + return costPaid; + } + + private static void writeToBuffer(PacketBuffer buf, UpgradeData data) { + buf.writeBoolean(data.isActive()); + buf.writeBoolean(data.isCostPaid()); + for (int i = 0; i < data.amountsPaid.length; i++) { + buf.writeShort(data.amountsPaid[i]); + } + } + + private static UpgradeData readFromBuffer(PacketBuffer buf) { + UpgradeData data = new UpgradeData(); + data.active = buf.readBoolean(); + data.costPaid = buf.readBoolean(); + for (int i = 0; i < data.amountsPaid.length; i++) { + data.amountsPaid[i] = buf.readShort(); + } + return data; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + UpgradeData that = (UpgradeData) o; + + if (active != that.active) return false; + if (costPaid != that.costPaid) return false; + return Arrays.equals(amountsPaid, that.amountsPaid); + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/ForgeOfGodsUI.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/ForgeOfGodsUI.java similarity index 61% rename from src/main/java/tectech/thing/metaTileEntity/multi/godforge/ForgeOfGodsUI.java rename to src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/ForgeOfGodsUI.java index a63ba81d7e3..d6f9be66333 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/ForgeOfGodsUI.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/ForgeOfGodsUI.java @@ -1,4 +1,4 @@ -package tectech.thing.metaTileEntity.multi.godforge; +package tectech.thing.metaTileEntity.multi.godforge.util; import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; import static net.minecraft.util.StatCollector.translateToLocal; @@ -13,13 +13,17 @@ import java.util.function.DoubleSupplier; import java.util.function.Supplier; +import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; +import com.google.common.collect.ImmutableList; 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.forge.ItemStackHandler; import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.MainAxisAlignment; import com.gtnewhorizons.modularui.api.math.Size; import com.gtnewhorizons.modularui.api.screen.ModularUIContext; import com.gtnewhorizons.modularui.api.screen.ModularWindow; @@ -27,14 +31,18 @@ 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.DynamicPositionedRow; 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.Scrollable; import com.gtnewhorizons.modularui.common.widget.SliderWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; +import codechicken.nei.recipe.GuiCraftingRecipe; +import codechicken.nei.recipe.GuiUsageRecipe; import gregtech.api.enums.VoidingMode; import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.interfaces.modularui.IControllerWithOptionalFeatures; @@ -42,6 +50,7 @@ import tectech.TecTech; import tectech.thing.gui.TecTechUITextures; import tectech.thing.metaTileEntity.multi.godforge.color.ForgeOfGodsStarColor; +import tectech.thing.metaTileEntity.multi.godforge.upgrade.ForgeOfGodsUpgrade; /** * Holds UI element builders and other conveniences shared between the primary Forge of the Gods and its modules. @@ -419,6 +428,15 @@ public static void reopenWindow(Widget widget, int windowId) { } } + public static void closeWindow(Widget widget, int windowId) { + if (!widget.isClient()) { + ModularUIContext ctx = widget.getContext(); + if (ctx.isWindowOpen(windowId)) { + ctx.closeWindow(windowId); + } + } + } + public enum StarColorRGBM { RED(EnumChatFormatting.RED, RED_ARGB, 0, 255, ForgeOfGodsStarColor.DEFAULT_RED), @@ -546,4 +564,345 @@ public static Widget createStarColorButton(Supplier text, Supplier shardGetter, + Runnable complete, Runnable respec, Supplier check) { + MultiChildWidget widget = new MultiChildWidget(); + widget.setSize(upgrade.getWindowSize()); + + Size windowSize = upgrade.getWindowSize(); + int w = windowSize.width; + int h = windowSize.height; + + // Close window button + widget.addChild( + ButtonWidget.closeWindowButton(true) + .setPos(w - 15, 3)); + + // Background symbol + widget.addChild( + new DrawableWidget().setDrawable(upgrade.getSymbol()) + .setPos((int) ((1 - upgrade.getSymbolWidthRatio() / 2) * w / 2), h / 4) + .setSize((int) (w / 2 * upgrade.getSymbolWidthRatio()), h / 2)); + + // Background overlay + widget.addChild( + new DrawableWidget().setDrawable(upgrade.getOverlay()) + .setPos(w / 4, h / 4) + .setSize(w / 2, h / 2)); + + // Upgrade name title + widget.addChild( + new TextWidget(upgrade.getNameText()).setTextAlignment(Alignment.Center) + .setDefaultColor(EnumChatFormatting.GOLD) + .setSize(w - 15, 30) + .setPos(9, 5)); + + // Upgrade body text + widget.addChild( + new TextWidget(upgrade.getBodyText()).setTextAlignment(Alignment.Center) + .setDefaultColor(EnumChatFormatting.WHITE) + .setSize(w - 15, upgrade.getLoreYPos() - 30) + .setPos(9, 30)); + + // Lore Text + widget.addChild( + new TextWidget(EnumChatFormatting.ITALIC + upgrade.getLoreText()).setTextAlignment(Alignment.Center) + .setDefaultColor(0xbbbdbd) + .setSize(w - 15, (int) (h * 0.9) - upgrade.getLoreYPos()) + .setPos(9, upgrade.getLoreYPos())); + + // Shard cost text + String costStr = " " + EnumChatFormatting.BLUE + upgrade.getShardCost(); + widget.addChild( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.shardcost") + costStr) + .setTextAlignment(Alignment.Center) + .setScale(0.7f) + .setMaxWidth(70) + .setDefaultColor(0x9c9c9c) + .setPos(11, h - 25)); + + // Available shards text + widget.addChild( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.availableshards")) + .setTextAlignment(Alignment.Center) + .setScale(0.7f) + .setMaxWidth(90) + .setDefaultColor(0x9c9c9c) + .setPos(w - 87, h - 25)); + + // Available shards amount + widget.addChild( + TextWidget.dynamicText(() -> getAvailableShardsText(upgrade, shardGetter)) + .setTextAlignment(Alignment.Center) + .setScale(0.7f) + .setMaxWidth(90) + .setDefaultColor(0x9c9c9c) + .setPos(w - 27, h - 18)); + + // Complete button group + MultiChildWidget completeGroup = new MultiChildWidget(); + completeGroup.setPos(w / 2 - 21, (int) (h * 0.9)); + + // Complete button + completeGroup.addChild(new ButtonWidget().setOnClick(($, $$) -> { + if (check.get()) { + respec.run(); + } else { + complete.run(); + } + }) + .setSize(40, 15) + .setBackground( + () -> new IDrawable[] { + check.get() ? GTUITextures.BUTTON_STANDARD_PRESSED : GTUITextures.BUTTON_STANDARD }) + .dynamicTooltip(() -> constructionStatusString(check)) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); + + // Complete text overlay + completeGroup.addChild( + TextWidget.dynamicText(() -> constructionStatusText(check)) + .setTextAlignment(Alignment.Center) + .setScale(0.7f) + .setMaxWidth(36) + .setPos(3, 5)); + + widget.addChild(completeGroup); + + return widget; + } + + public static Widget createMaterialInputButton(ForgeOfGodsUpgrade upgrade, Supplier check, + BiConsumer clickAction) { + Size windowSize = upgrade.getWindowSize(); + int w = windowSize.width; + int h = windowSize.height; + + return new ButtonWidget().setOnClick(clickAction) + .setPlayClickSound(true) + .setBackground( + () -> new IDrawable[] { check.get() ? TecTechUITextures.BUTTON_BOXED_CHECKMARK_18x18 + : TecTechUITextures.BUTTON_BOXED_EXCLAMATION_POINT_18x18 }) + .setPos(w / 2 - 40, (int) (h * 0.9)) + .setSize(15, 15) + .dynamicTooltip(() -> upgradeMaterialRequirements(check)) + .addTooltip( + EnumChatFormatting.GRAY + translateToLocal("fog.button.materialrequirements.tooltip.clickhere")); + } + + private static Text getAvailableShardsText(ForgeOfGodsUpgrade upgrade, Supplier shardGetter) { + EnumChatFormatting enoughShards = EnumChatFormatting.RED; + if (shardGetter.get() >= upgrade.getShardCost()) { + enoughShards = EnumChatFormatting.GREEN; + } + return new Text(enoughShards + Integer.toString(shardGetter.get())); + } + + private static List constructionStatusString(Supplier check) { + if (check.get()) { + return ImmutableList.of(translateToLocal("fog.upgrade.respec")); + } + return ImmutableList.of(translateToLocal("fog.upgrade.confirm")); + } + + private static Text constructionStatusText(Supplier check) { + if (check.get()) { + return new Text(translateToLocal("fog.upgrade.respec")); + } + return new Text(translateToLocal("fog.upgrade.confirm")); + } + + private static List upgradeMaterialRequirements(Supplier check) { + if (check.get()) { + return ImmutableList.of(translateToLocal("fog.button.materialrequirementsmet.tooltip")); + } + return ImmutableList.of(translateToLocal("fog.button.materialrequirements.tooltip")); + } + + public static Widget createExtraCostWidget(final ItemStack costStack, Supplier paidAmount) { + MultiChildWidget widget = new MultiChildWidget(); + widget.setSize(36, 18); + + if (costStack == null) { + // Nothing to pay, so just create a simple disabled slot drawable + widget.addChild( + new DrawableWidget().setDrawable(GTUITextures.BUTTON_STANDARD_DISABLED) + .setSize(18, 18)); + return widget; + } + + // Item slot + ItemStackHandler handler = new ItemStackHandler(1); + ItemStack handlerStack = costStack.copy(); + handlerStack.stackSize = Math.max(1, handlerStack.stackSize - paidAmount.get()); + handler.setStackInSlot(0, handlerStack); + widget.addChild( + new SlotWidget(handler, 0).setAccess(false, false) + .setRenderStackSize(false) + .disableInteraction() + .setBackground(GTUITextures.BUTTON_STANDARD_PRESSED)) + .addChild(new ButtonWidget().setOnClick((clickData, w) -> { + if (widget.isClient()) { + if (clickData.mouseButton == 0) { + GuiCraftingRecipe.openRecipeGui("item", handlerStack.copy()); + } else if (clickData.mouseButton == 1) { + GuiUsageRecipe.openRecipeGui("item", handlerStack.copy()); + } + } + }) + .setSize(16, 16) + .setPos(1, 1)); + + // Progress text + widget.addChild(new DynamicTextWidget(() -> { + short paid = paidAmount.get(); + EnumChatFormatting color = EnumChatFormatting.YELLOW; + if (paid == 0) color = EnumChatFormatting.RED; + else if (paid == costStack.stackSize) color = EnumChatFormatting.GREEN; + return new Text(color + "x" + (costStack.stackSize - paid)); + }).setTextAlignment(Alignment.Center) + .setScale(0.8f) + .setPos(18, 5) + .setSize(18, 9) + .setEnabled(w -> paidAmount.get() < costStack.stackSize)); + + // Completed checkmark + widget.addChild( + new DrawableWidget().setDrawable(TecTechUITextures.GREEN_CHECKMARK_11x9) + .setPos(21, 5) + .setSize(11, 9) + .setEnabled(w -> paidAmount.get() >= costStack.stackSize)); + + return widget; + } + + public static ModularWindow createSpecialThanksWindow() { + final int WIDTH = 200; + final int HEIGHT = 200; + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + + builder.setBackground(TecTechUITextures.BACKGROUND_GLOW_RAINBOW); + builder.setDraggable(true); + builder.widget( + ButtonWidget.closeWindowButton(true) + .setPos(184, 4)) + .widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_THANKS) + .setPos(50, 50) + .setSize(100, 100)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.contributors")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setScale(1f) + .setPos(0, 5) + .setSize(200, 15)) + .widget( + new TextWidget( + EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.lead")) + .setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 30) + .setSize(60, 10)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.cloud")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.AQUA) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 40) + .setSize(60, 10)) + .widget( + new TextWidget( + EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.programming")) + .setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 55) + .setSize(60, 10)) + .widget( + new TextWidget( + translateToLocal("gt.blockmachines.multimachine.FOG.serenibyss") + " " + + EnumChatFormatting.DARK_AQUA + + translateToLocal("gt.blockmachines.multimachine.FOG.teg")).setScale(0.8f) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 67) + .setSize(60, 10)) + .widget( + new TextWidget( + EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.textures")) + .setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 85) + .setSize(100, 10)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.ant")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GREEN) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 95) + .setSize(60, 10)) + .widget( + new TextWidget( + EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.rendering")) + .setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 110) + .setSize(100, 10)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.bucket")).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.WHITE) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 120) + .setSize(60, 10)) + .widget( + new TextWidget( + EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.lore")) + .setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 135) + .setSize(100, 10)) + .widget( + delenoName().setSpace(-1) + .setAlignment(MainAxisAlignment.SPACE_BETWEEN) + .setPos(7, 145) + .setSize(60, 10)) + .widget( + new TextWidget( + EnumChatFormatting.UNDERLINE + translateToLocal("gt.blockmachines.multimachine.FOG.playtesting")) + .setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 160) + .setSize(100, 10)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.misi")).setScale(0.8f) + .setDefaultColor(0xffc26f) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 170) + .setSize(60, 10)) + .widget( + new TextWidget(EnumChatFormatting.ITALIC + translateToLocal("gt.blockmachines.multimachine.FOG.thanks")) + .setScale(0.8f) + .setDefaultColor(0xbbbdbd) + .setTextAlignment(Alignment.Center) + .setPos(90, 140) + .setSize(100, 60)); + return builder.build(); + } + + private static DynamicPositionedRow delenoName() { + DynamicPositionedRow nameRow = new DynamicPositionedRow(); + String deleno = translateToLocal("gt.blockmachines.multimachine.FOG.deleno"); + int[] colors = new int[] { 0xffffff, 0xf6fff5, 0xecffec, 0xe3ffe2, 0xd9ffd9, 0xd0ffcf }; + + for (int i = 0; i < 6; i++) { + nameRow.addChild( + new TextWidget(Character.toString(deleno.charAt(i))).setDefaultColor(colors[i]) + .setScale(0.8f) + .setTextAlignment(Alignment.CenterLeft)); + } + return nameRow; + } } diff --git a/src/main/java/tectech/util/GodforgeMath.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/GodforgeMath.java similarity index 84% rename from src/main/java/tectech/util/GodforgeMath.java rename to src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/GodforgeMath.java index d4d43f01cf2..e0f059167ba 100644 --- a/src/main/java/tectech/util/GodforgeMath.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/GodforgeMath.java @@ -1,4 +1,6 @@ -package tectech.util; +package tectech.thing.metaTileEntity.multi.godforge.util; + +import static tectech.thing.metaTileEntity.multi.godforge.upgrade.ForgeOfGodsUpgrade.*; import java.math.BigInteger; @@ -17,7 +19,7 @@ public static int getRandomIntInRange(int min, int max) { public static double calculateFuelConsumption(MTEForgeOfGods godforge) { double upgradeFactor = 1; - if (godforge.isUpgradeActive(2)) { + if (godforge.isUpgradeActive(STEM)) { upgradeFactor = 0.8; } if (godforge.getFuelType() == 0) { @@ -34,13 +36,13 @@ public static int calculateStartupFuelConsumption(MTEForgeOfGods godforge) { public static int calculateMaxFuelFactor(MTEForgeOfGods godforge) { int fuelCap = 5; - if (godforge.isUpgradeActive(27)) { + if (godforge.isUpgradeActive(TSE)) { fuelCap = Integer.MAX_VALUE; } else { - if (godforge.isUpgradeActive(9)) { + if (godforge.isUpgradeActive(GEM)) { fuelCap += godforge.getTotalActiveUpgrades(); } - if (godforge.isUpgradeActive(3)) { + if (godforge.isUpgradeActive(CFCE)) { fuelCap *= 1.2; } } @@ -59,7 +61,7 @@ public static int calculateEffectiveFuelFactor(MTEForgeOfGods godforge) { public static void calculateMaxHeatForModules(MTEBaseModule module, MTEForgeOfGods godforge) { double logBase = 1.5; int baseHeat = 12601; - if (godforge.isUpgradeActive(12)) { + if (godforge.isUpgradeActive(SEFCP)) { if (module instanceof MTESmeltingModule) { logBase = 1.12; } else { @@ -74,7 +76,7 @@ public static void calculateMaxHeatForModules(MTEBaseModule module, MTEForgeOfGo public static int calculateOverclockHeat(MTEBaseModule module, MTEForgeOfGods godforge, Integer recipeHeat) { int actualHeat; double exponent; - if (godforge.isUpgradeActive(20)) { + if (godforge.isUpgradeActive(NDPE)) { if (module instanceof MTESmeltingModule) { exponent = 0.85; } else { @@ -85,7 +87,7 @@ public static int calculateOverclockHeat(MTEBaseModule module, MTEForgeOfGods go } else { actualHeat = recipeHeat; } - } else if (godforge.isUpgradeActive(17)) { + } else if (godforge.isUpgradeActive(CNTI)) { actualHeat = Math.min(recipeHeat, 30000); } else { actualHeat = Math.min(recipeHeat, 15000); @@ -96,11 +98,11 @@ public static int calculateOverclockHeat(MTEBaseModule module, MTEForgeOfGods go public static void calculateSpeedBonusForModules(MTEBaseModule module, MTEForgeOfGods godforge) { double speedBonus = 1; - if (godforge.isUpgradeActive(1)) { + if (godforge.isUpgradeActive(IGCC)) { speedBonus = Math.pow(module.getHeat(), -0.01); } - if (godforge.isUpgradeActive(22)) { + if (godforge.isUpgradeActive(DOR)) { if (module instanceof MTEPlasmaModule) { speedBonus /= Math.pow(module.getMaxParallel(), 0.02); } else { @@ -109,7 +111,7 @@ public static void calculateSpeedBonusForModules(MTEBaseModule module, MTEForgeO } if (module instanceof MTEExoticModule) { - if (godforge.isUpgradeActive(25)) { + if (godforge.isUpgradeActive(PA)) { speedBonus = Math.sqrt(speedBonus); } else { speedBonus = 1; @@ -141,17 +143,17 @@ public static void calculateMaxParallelForModules(MTEBaseModule module, MTEForge } if (module instanceof MTEMoltenModule - || (module instanceof MTESmeltingModule && godforge.isUpgradeActive(16))) { + || (module instanceof MTESmeltingModule && godforge.isUpgradeActive(DOP))) { isMoltenOrSmeltingWithUpgrade = true; } - if (godforge.isUpgradeActive(10)) { + if (godforge.isUpgradeActive(CTCDD)) { node53 = 2; } - if (godforge.isUpgradeActive(6)) { + if (godforge.isUpgradeActive(SA)) { fuelFactorMultiplier = 1 + calculateEffectiveFuelFactor(godforge) / 15f; - if (godforge.isUpgradeActive(13)) { + if (godforge.isUpgradeActive(TCT)) { if (isMoltenOrSmeltingWithUpgrade) { fuelFactorMultiplier *= 3; } else { @@ -160,7 +162,7 @@ public static void calculateMaxParallelForModules(MTEBaseModule module, MTEForge } } - if (godforge.isUpgradeActive(18)) { + if (godforge.isUpgradeActive(EPEC)) { if (isMoltenOrSmeltingWithUpgrade) { heatMultiplier = 1 + module.getHeat() / 15000f; } else { @@ -168,7 +170,7 @@ public static void calculateMaxParallelForModules(MTEBaseModule module, MTEForge } } - if (godforge.isUpgradeActive(21)) { + if (godforge.isUpgradeActive(POS)) { if (isMoltenOrSmeltingWithUpgrade) { upgradeAmountMultiplier = 1 + godforge.getTotalActiveUpgrades() / 5f; } else { @@ -179,7 +181,7 @@ public static void calculateMaxParallelForModules(MTEBaseModule module, MTEForge float totalBonuses = node53 * fuelFactorMultiplier * heatMultiplier * upgradeAmountMultiplier; if (module instanceof MTEExoticModule) { - if (godforge.isUpgradeActive(25)) { + if (godforge.isUpgradeActive(PA)) { totalBonuses = (float) Math.sqrt(totalBonuses); } else { totalBonuses = 1; @@ -195,11 +197,11 @@ public static void calculateEnergyDiscountForModules(MTEBaseModule module, MTEFo double fillRatioDiscount = 1; double maxBatteryDiscount = 1; - if (godforge.isUpgradeActive(8)) { + if (godforge.isUpgradeActive(REC)) { maxBatteryDiscount = 1 - (1 - Math.pow(1.05, -0.05 * godforge.getMaxBatteryCharge())) / 20; } - if (godforge.isUpgradeActive(19)) { + if (godforge.isUpgradeActive(IMKG)) { double fillRatioMinusZeroPointFive = (double) godforge.getBatteryCharge() / godforge.getMaxBatteryCharge() - 0.5; if (module instanceof MTEPlasmaModule) { @@ -210,7 +212,7 @@ public static void calculateEnergyDiscountForModules(MTEBaseModule module, MTEFo } if (module instanceof MTEExoticModule) { - if (godforge.isUpgradeActive(25)) { + if (godforge.isUpgradeActive(PA)) { fillRatioDiscount = Math.sqrt(fillRatioDiscount); maxBatteryDiscount = Math.sqrt(maxBatteryDiscount); } else { @@ -225,11 +227,11 @@ public static void calculateEnergyDiscountForModules(MTEBaseModule module, MTEFo public static void calculateProcessingVoltageForModules(MTEBaseModule module, MTEForgeOfGods godforge) { long voltage = 2_000_000_000; - if (godforge.isUpgradeActive(4)) { + if (godforge.isUpgradeActive(GISS)) { voltage += calculateEffectiveFuelFactor(godforge) * 100_000_000L; } - if (godforge.isUpgradeActive(23)) { + if (godforge.isUpgradeActive(NGMS)) { voltage *= Math.pow(4, godforge.getRingAmount()); } @@ -240,20 +242,20 @@ public static void setMiscModuleParameters(MTEBaseModule module, MTEForgeOfGods int plasmaTier = 0; double overclockTimeFactor = 2; - if (godforge.isUpgradeActive(30)) { + if (godforge.isUpgradeActive(END)) { plasmaTier = 2; - } else if (godforge.isUpgradeActive(24)) { + } else if (godforge.isUpgradeActive(SEDS)) { plasmaTier = 1; } - if (godforge.isUpgradeActive(14)) { + if (godforge.isUpgradeActive(GGEBE)) { if (module instanceof MTEPlasmaModule) { overclockTimeFactor = 2.3; } else { overclockTimeFactor = 2.15; } if (module instanceof MTEExoticModule) { - if (godforge.isUpgradeActive(25)) { + if (godforge.isUpgradeActive(PA)) { overclockTimeFactor = 2 + Math.pow(overclockTimeFactor - 2, 2); } else { overclockTimeFactor = 2; @@ -261,25 +263,25 @@ public static void setMiscModuleParameters(MTEBaseModule module, MTEForgeOfGods } } - module.setUpgrade83(godforge.isUpgradeActive(19)); - module.setMultiStepPlasma(godforge.isUpgradeActive(15)); + module.setUpgrade83(godforge.isUpgradeActive(IMKG)); + module.setMultiStepPlasma(godforge.isUpgradeActive(TPTP)); module.setPlasmaTier(plasmaTier); - module.setMagmatterCapable(godforge.isUpgradeActive(30)); - module.setVoltageConfig(godforge.isUpgradeActive(28)); + module.setMagmatterCapable(godforge.isUpgradeActive(END)); + module.setVoltageConfig(godforge.isUpgradeActive(TBF)); module.setOverclockTimeFactor(overclockTimeFactor); } public static boolean allowModuleConnection(MTEBaseModule module, MTEForgeOfGods godforge) { - if (module instanceof MTEMoltenModule && godforge.isUpgradeActive(5)) { + if (module instanceof MTEMoltenModule && godforge.isUpgradeActive(FDIM)) { return true; } - if (module instanceof MTEPlasmaModule && godforge.isUpgradeActive(7)) { + if (module instanceof MTEPlasmaModule && godforge.isUpgradeActive(GPCI)) { return true; } - if (module instanceof MTEExoticModule && godforge.isUpgradeActive(11)) { + if (module instanceof MTEExoticModule && godforge.isUpgradeActive(QGPIU)) { return true; } diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/MilestoneFormatter.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/MilestoneFormatter.java new file mode 100644 index 00000000000..a1b4a9c9682 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/MilestoneFormatter.java @@ -0,0 +1,47 @@ +package tectech.thing.metaTileEntity.multi.godforge.util; + +import static gregtech.api.util.GTUtility.formatNumbers; +import static tectech.util.TTUtility.toExponentForm; + +import java.math.BigInteger; + +public enum MilestoneFormatter { + + NONE, + COMMA, + EXPONENT; + + public static final MilestoneFormatter[] VALUES = values(); + + public MilestoneFormatter cycle() { + return switch (this) { + case NONE -> COMMA; + case COMMA -> EXPONENT; + case EXPONENT -> NONE; + }; + } + + public String format(Number number) { + return switch (this) { + case NONE -> number.toString(); + case COMMA -> { + if (number instanceof BigInteger bi) yield formatNumbers(bi); + else yield formatNumbers(number.longValue()); + } + case EXPONENT -> { + if (number instanceof BigInteger bi) { + if (bi.compareTo(BigInteger.valueOf(1_000L)) > 0) { + yield toExponentForm(bi); + } + yield bi.toString(); + } else { + long value = number.longValue(); + if (value > 1_000L) { + yield toExponentForm(value); + } + yield Long.toString(value); + } + } + }; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/MilestoneIcon.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/MilestoneIcon.java new file mode 100644 index 00000000000..41af5b0e187 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/MilestoneIcon.java @@ -0,0 +1,46 @@ +package tectech.thing.metaTileEntity.multi.godforge.util; + +import net.minecraft.util.StatCollector; + +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Size; + +import tectech.thing.gui.TecTechUITextures; + +public enum MilestoneIcon { + + CHARGE(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE, 60, 75, "power"), + CONVERSION(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION, 54, 75, "recipe"), + CATALYST(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST, 75, 75, "fuel"), + COMPOSITION(TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION, 75, 75, "purchasable"), + + ; + + public static final MilestoneIcon[] VALUES = values(); + + private final UITexture symbol; + private final Size size; + private final String name; + + MilestoneIcon(UITexture symbol, int width, int height, String shortName) { + this.symbol = symbol; + this.size = new Size(width, height); + this.name = "gt.blockmachines.multimachine.FOG." + shortName + "milestone"; + } + + public UITexture getSymbol() { + return symbol; + } + + public Size getSize() { + return size; + } + + public float getWidthRatio() { + return 1.0f * size.width / size.height; + } + + public String getNameText() { + return StatCollector.translateToLocal(name); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/UpgradeColor.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/UpgradeColor.java new file mode 100644 index 00000000000..7bcab73f267 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/UpgradeColor.java @@ -0,0 +1,72 @@ +package tectech.thing.metaTileEntity.multi.godforge.util; + +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +import tectech.thing.gui.TecTechUITextures; + +public enum UpgradeColor { + + // spotless:off + + BLUE( + TecTechUITextures.BACKGROUND_GLOW_BLUE, + TecTechUITextures.PICTURE_OVERLAY_BLUE, + TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_BLUE_OPAQUE, + TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_BLUE), + + PURPLE( + TecTechUITextures.BACKGROUND_GLOW_PURPLE, + TecTechUITextures.PICTURE_OVERLAY_PURPLE, + TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_PURPLE_OPAQUE, + TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_PURPLE), + + ORANGE( + TecTechUITextures.BACKGROUND_GLOW_ORANGE, + TecTechUITextures.PICTURE_OVERLAY_ORANGE, + TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_ORANGE_OPAQUE, + TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_ORANGE), + + GREEN( + TecTechUITextures.BACKGROUND_GLOW_GREEN, + TecTechUITextures.PICTURE_OVERLAY_GREEN, + TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_GREEN_OPAQUE, + TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_GREEN), + + RED( + TecTechUITextures.BACKGROUND_GLOW_RED, + TecTechUITextures.PICTURE_OVERLAY_RED, + TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_RED_OPAQUE, + TecTechUITextures.PICTURE_UPGRADE_CONNECTOR_RED), + + ; + + // spotless:on + + private final UITexture background; + private final UITexture overlay; + private final UITexture opaqueConnector; + private final UITexture connector; + + UpgradeColor(UITexture background, UITexture overlay, UITexture opaqueConnector, UITexture connector) { + this.background = background; + this.overlay = overlay; + this.opaqueConnector = opaqueConnector; + this.connector = connector; + } + + public UITexture getBackground() { + return background; + } + + public UITexture getOverlay() { + return overlay; + } + + public UITexture getOpaqueConnector() { + return opaqueConnector; + } + + public UITexture getConnector() { + return connector; + } +} diff --git a/src/main/resources/assets/gregtech/textures/gui/picture/arrow_gray.png b/src/main/resources/assets/gregtech/textures/gui/picture/arrow_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..392add3320603f231858925b2b3ab82a1aa26729 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^av(MbGmz|Dqqh`DF%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl{i3-AeX?e6XdGIi_T<^n0Ek|4j}{|ryJ8+ZYEoCO|{#S9F5hd`K7RKu$Q zC}`p7;uxY4oSblkZ^0vrrHVp3mL4>!SmGG;V@YFC0++gif-i%>7U@&2>;jRW{_-w7 gprXdmZEVEEaAPZ@V2t};VW1fdp00i_>zopr0QspkN&o-= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index c72f8c1ddf2..58e7f7d5186 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -990,7 +990,7 @@ fog.upgrade.text.0=Unlocks the base functionality of the Forge of the Gods, mean fog.upgrade.text.1=Unlocks a recipe time reduction multiplier based on the current heat the multi is running at. This bonus is calculated via following formula: Multiplier = 1 / (Heat^0.01) fog.upgrade.text.2=Increases fuel efficiency by multiplying the actual fuel consumption by 0.8 fog.upgrade.text.3=Multiplies the maximum fuel consumption by 1.2 -fog.upgrade.text.4=Increases the base processing voltage of the multi by: Stellar Fuel Units/sec * 10^8 EU/t +fog.upgrade.text.4=Increases the base processing voltage of all modules by: Stellar Fuel Units/sec * 10^8 EU/t fog.upgrade.text.5=Unlocks the Helioflux Melting Core module. fog.upgrade.text.6=Unlocks a multiplier to maximum parallel based on fuel consumption rate. This bonus is calculated via this formula: Multiplier = 1 + (Stellar Fuel Units/sec) / 15 fog.upgrade.text.7=Unlocks the Heliothermal Plasma Fabricator module and basic element -> plasma processing (1 step plasmas, T3 fusion maximum). @@ -998,14 +998,14 @@ fog.upgrade.text.8=Unlocks a configuration window for maximum battery size and i fog.upgrade.text.9=Increases maximum fuel consumption by 1 Stellar Fuel Unit/sec for every purchased upgrade. fog.upgrade.text.10=Adds a x2 multiplier to maximum parallel. fog.upgrade.text.11=Unlocks the Heliofusion Exoticizer module and quark gluon plasma creation. At this point this module is not affected by any other multipliers or bonuses from other upgrades. -fog.upgrade.text.12=Improves the fuel consumption -> heat conversion formula. Improved formula: Heat = log1.12(Stellar Fuel Units/sec) * 1000 + 12601 +fog.upgrade.text.12=Improves the fuel consumption -> heat conversion formula. Improved formula: Power Forge Heat = log1.12(Stellar Fuel Units/sec) * 1000 + 12601, Melting Core Heat = log1.18(Stellar Fuel Units/sec) * 1000 + 12601 fog.upgrade.text.13=Improves the formula of SA to: Multiplier = 1 + (Stellar Fuel Units/sec) / 5 fog.upgrade.text.14=Improves the OC formula from 4/2 OCs to 4/2.3 OCs. fog.upgrade.text.15=Allows the Heliothermal Plasma Fabricator to process multi step plasmas. Tier restriction still applies. fog.upgrade.text.16=Allows the Helioflare Power Forge to receive the full benefits of the Helioflux Melting Core upgrade path. fog.upgrade.text.17=Increases the cap of EBF heat bonuses to 30,000K. fog.upgrade.text.18=Unlocks a multiplier to maximum parallel based on current heat. This bonus is calculated via this formula: Multiplier = 1 + Heat / 15000 -fog.upgrade.text.19=Improves the EBF energy reduction heat bonus from 5% to 8% and adds an energy discount based on the fill level of the internal battery. This bonus is calculated via this formula: Discount = (Current fill level / Max Capacity - 0.5)^2 * (-0.6) + 0.15 +fog.upgrade.text.19=Improves the EBF energy reduction heat bonus from 5% to 8% and adds an energy discount based on the fill level of the internal battery. This bonus is calculated via the formula: Discount = (Current fill level / Max Capacity - 0.5)^2 * (-0.6) + 0.15, multiplied by 2/3 for modules other than the Plasma Fabricator fog.upgrade.text.20=EBF heat bonuses are granted above 30,000K, but the heat value used in heat bonus calculations is determined by this formula: Actual Heat = 30000 + (Current Heat - 30000)^0.85 fog.upgrade.text.21=Unlocks a multiplier to maximum parallel based on total amount of purchased upgrades. This bonus is calculated via this formula: Multiplier = 1 + Upgrade Amount / 5 fog.upgrade.text.22=Improves IGCC based on current maximum parallel. Improved Formula: Multiplier = (1 / Heat^0.01) / (Parallel^0.02) @@ -1021,9 +1021,10 @@ fog.upgrade.text.30=Unlocks Magmatter production in the Heliofusion Exoticizer, fog.debug.resetbutton.text=Reset fog.debug.resetbutton.tooltip=Resets all upgrades to zero fog.debug.unlockall.text=Unlock all upgrades -fog.debug.gravitonshardsetter.tooltip=Set the amount of availabe graviton shards +fog.debug.gravitonshardsetter.tooltip=Set the amount of available graviton shards fog.button.fuelconfig.tooltip=Fuel Configuration Menu +fog.button.upgradetree.tooltip=Path of Celestial Transcendence fog.button.furnacemode.tooltip.01=Blast Mode fog.button.furnacemode.tooltip.02=Furnace Mode fog.button.magmattermode.tooltip.01=Quark-Gluon Plasma Mode @@ -1041,11 +1042,19 @@ fog.button.materialrequirements.tooltip.clickhere=Click to open material inserti fog.button.ejection.tooltip=Toggle Graviton Shard Ejection fog.button.formatting.tooltip=Toggle Number Formatting fog.button.exoticinputs.tooltip=Click to display expected inputs +fog.button.possibleexoticinputs.tooltip=Click to display all possible inputs fog.button.reciperefresh.tooltip=Click to reset recipe fog.button.refreshtimer.tooltip=Reset ready in fog.button.seconds=Seconds fog.button.thanks.tooltip=List of Contributors fog.button.color.tooltip=Cosmetics Menu +fog.button.statistics.tooltip=Stats Overview +fog.text.tooltip.heat=Heat value used for checking if a recipe can run +fog.text.tooltip.effectiveheat=Heat value used for calculating bonuses +fog.text.tooltip.parallel=Maximum parallel amount +fog.text.tooltip.speedbonus=Multiplier for base recipe time, making it shorter +fog.text.tooltip.energydiscount=Multiplier for base energy usage, reducing it +fog.text.tooltip.ocdivisor=Divisor for recipe time reduction per overclock (does not affect perfect OCs) achievement.gt.blockmachines.multimachine.em.forge_of_gods=Forge of the Gods @@ -1088,6 +1097,8 @@ gt.blockmachines.multimachine.FOG.milestoneinfo=View Milestone Progress gt.blockmachines.multimachine.FOG.inversionactive=Inversion Active gt.blockmachines.multimachine.FOG.inversion=Inversion gt.blockmachines.multimachine.FOG.expectedinputs=Expected Inputs +gt.blockmachines.multimachine.FOG.possibleinputsqgp=Possible Input Materials for QGP +gt.blockmachines.multimachine.FOG.possibleinputsmagmatter=Possible Input Materials for Magmatter gt.blockmachines.multimachine.FOG.inversioninfotext=Once all milestones of the Forge reach tier 7, inversion activates. This uncaps the maximum tier of all milestones and allows to scale infinitely. The scaling of each milestone changes from exponential to linear, but the granted graviton shard amount keeps increasing. The amount of progress needed for each subsequent milestone is as much as needed for the 7th tier of each milestone. The Composition milestone is once again an exception, as that continues to scale by 1 each tier, with it's own formula for calculating progress. Each module type is given a value, ranging from 1 for the Helioflare Power Forge to 5 for the Heliofusion Exoticizer in magmatter mode, then the amount of each module present is substracted by 1 and multiplied by its value. These values are added up and divided by 5, this is the final milestone tier on top of the base 7. gt.blockmachines.multimachine.FOG.powermilestone=Charge gt.blockmachines.multimachine.FOG.recipemilestone=Conversion @@ -1098,7 +1109,7 @@ gt.blockmachines.multimachine.FOG.recipes=Recipes Processed gt.blockmachines.multimachine.FOG.fuelconsumed=Fuel Units Consumed gt.blockmachines.multimachine.FOG.extensions=Extensions Built gt.blockmachines.multimachine.FOG.shardgain=Graviton Shards gained -gt.blockmachines.multimachine.FOG.consumeUpgradeMats=Click to consume upgrade materials, supply §4exact§r stacksizes +gt.blockmachines.multimachine.FOG.consumeUpgradeMats=Click to consume upgrade materials gt.blockmachines.multimachine.FOG.clickhere=Confused? Click here for some general info gt.blockmachines.multimachine.FOG.introduction=§NIntroduction gt.blockmachines.multimachine.FOG.introductioninfotext=There's a lot going on in the Forge of the Gods, which can be quite confusing at first. This menu aims to explain everything that is happening and all the capabilities/mechanics of the forge. @@ -1126,6 +1137,17 @@ gt.blockmachines.multimachine.FOG.bucket=BucketBrigade gt.blockmachines.multimachine.FOG.playtesting=Playtesting gt.blockmachines.multimachine.FOG.misi=Misi gt.blockmachines.multimachine.FOG.thanks=A huge thank you to these incredible people for helping to make this a reality! -Cloud +gt.blockmachines.multimachine.FOG.modulestats=Module Statistics +gt.blockmachines.multimachine.FOG.powerforge=Power Forge +gt.blockmachines.multimachine.FOG.meltingcore=Melting Core +gt.blockmachines.multimachine.FOG.plasmafab=Plasma Fabricator +gt.blockmachines.multimachine.FOG.exoticizer=Exoticizer +gt.blockmachines.multimachine.FOG.heat=Heat +gt.blockmachines.multimachine.FOG.effectiveheat=Effective Heat +gt.blockmachines.multimachine.FOG.speedbonus=Speed Bonus +gt.blockmachines.multimachine.FOG.energydiscount=Energy Discount +gt.blockmachines.multimachine.FOG.ocdivisor=OC Divisor +gt.blockmachines.multimachine.FOG.clickstat=Click to view value breakdown gt.blockmachines.multimachine.FOG.hint.0=1 - Classic Hatches or Transcendentally Amplified Magnetic Confinement Casing gt.blockmachines.multimachine.FOG.hint.1=2 - Module Controllers or Singularity Reinforced Stellar Shielding Casing @@ -1317,6 +1339,7 @@ gt.recipe.researchStation=Research Station gt.recipe.fog_plasma=Heliothermal Plasma Fabricator gt.recipe.fog_exotic=Heliofusion Exoticizer gt.recipe.fog_molten=Helioflux Melting Core +gt.recipe.upgrade_costs=Godforge Upgrades # NEI diff --git a/src/main/resources/assets/tectech/textures/gui/overlay_button/statistics.png b/src/main/resources/assets/tectech/textures/gui/overlay_button/statistics.png new file mode 100644 index 0000000000000000000000000000000000000000..bee81de488a50398b6eb991067776a6df4224577 GIT binary patch literal 445 zcmV;u0Yd(XP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0a8gsK~y+T#Zo;_ z!!QtiVX9z3(9Tqdg_W%f3oMNM0Dc7v3ll;@?EHle{DDeUlomRaud-E&2&iFcK`aPJ znmDP$*>YODQeo_i&hJ_AUEZC8xx-Q{v3DM3S;j#N!~;$%X%fVOIJlL;IWCR!i~>6+ zADO*d0!FmSgHxmv-oEwGIxUa$78FY)Q3ymNVik-+>@`lJA&ChL2bDvYoGQE2iWJ0L zvTB7}c(~Y_;UEt2)ULt1sY&hK)#2USNLYxMjziG|Bdueqg+M9Qj)JaJ?TmoY!sbC; zcvUxG-iEX<-cn1?m;19@=yx3qx(zVWZ|*hT-4^Kp{Z18w$Ex8{z$lQ?!5sRuQ!18& z#pW#-1;kgEiW^ugu9KSph1D_&D{Ds5NSlYi)DVaG>e=}2Ir#A#2>d33*DF~p2V;Ny n2g{W+F|B{`**-Gz<_X{z2M^J5tdjHu00000NkvXXu0mjfxb3?J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tectech/textures/gui/picture/green_checkmark.png b/src/main/resources/assets/tectech/textures/gui/picture/green_checkmark.png new file mode 100644 index 0000000000000000000000000000000000000000..3816be66b25ce16b84fb0b48f2ae1f76ffd1041d GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^+(699!3-oX?^2ToQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`MFV_7T-7_(^%uxHKjQTH&!F0jD6^ulj15S!mjw9*{|5sGDQ{*s zpb%$)M`SSr1K(i~W;~w1A_XXD>gnPbA`xzShLelIfrH6m_n-fhw{PWYa?~kcZ!@-8 wGuQdO%+=qXDXp_TQWdvtH@J2*a=wRMAUETL{|x+zKm!;&UHx3vIVCg!0EAFJlmGw# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tectech/textures/gui/picture/rainbow_square.png b/src/main/resources/assets/tectech/textures/gui/picture/rainbow_square.png index 545a44c4e5dfe980679f07ab47a0dec5aa012ee5..fe2b63b50e8bacee613a7d658042b312cf38596a 100644 GIT binary patch delta 3662 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 O0000 Date: Thu, 28 Nov 2024 19:08:32 +0100 Subject: [PATCH 039/181] Add info in the tooltip of the chemplant (#3559) --- .../multis/MTEDeepEarthHeatingPump.java | 3 +-- .../production/chemplant/MTEChemicalPlant.java | 13 +++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java b/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java index 60a69abbf19..da8599dd28f 100644 --- a/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java +++ b/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java @@ -87,8 +87,7 @@ protected MultiblockTooltipBuilder createTooltip() { .addInfo("Each maintenance issue lowers output efficiency by 10%") .addInfo("Explodes when it runs out of Distilled Water/Coolant"); - tt.addSeparator() - .beginStructureBlock(3, 7, 3, false) + tt.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)") 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 index 63941f21399..eef957cd8ae 100644 --- 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 @@ -130,11 +130,17 @@ public String getMachineType() { @Override protected MultiblockTooltipBuilder createTooltip() { - MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType(getMachineType()) + return new MultiblockTooltipBuilder().addMachineType(getMachineType()) .addInfo("Heavy Industry, now right at your doorstep!") - .addInfo("Please read the user manual for more information on construction and usage") + .addInfo("Plant tier is determined by casing tier") + .addInfo("Hatch tiers can't be higher than machine casing tier, UHV casing unlocks all tiers") + .addInfo("Higher tier coils increases processing speed : T1 = 50%, T2 = 100%, T3 = 150%...") + .addInfo("Higher tier pipe casing boosts parallel and reduces catalyst consumption :") + .addInfo("+2 parallel per tier, +20% chance of not damaging catalyst per tier") + .addInfo("Any catalyst must be placed in the catalyst housing") + .addInfo("Awakened Draconium coils combined with Tungstensteel pipe casing makes catalyst unbreakable") .addController("Bottom Center") + .addOtherStructurePart("Catalyst Housing", "Bottom Casing") .addStructureHint("Catalyst Housing", 1) .addInputBus("Bottom Casing", 1) .addOutputBus("Bottom Casing", 1) @@ -147,7 +153,6 @@ protected MultiblockTooltipBuilder createTooltip() { .addSubChannelUsage("coil", "heating coil blocks") .addSubChannelUsage("pipe", "pipe casing blocks") .toolTipFinisher(); - return tt; } public void setMachineMeta(int meta) { From ff9a4a30a1d67a0cde8bd5dc79c84ef036d64b0f Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Thu, 28 Nov 2024 13:33:22 -0500 Subject: [PATCH 040/181] Restore missing wire recipes (#3567) --- .../java/goodgenerator/util/CrackRecipeAdder.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/goodgenerator/util/CrackRecipeAdder.java b/src/main/java/goodgenerator/util/CrackRecipeAdder.java index d0ef883a5af..2c51eff9787 100644 --- a/src/main/java/goodgenerator/util/CrackRecipeAdder.java +++ b/src/main/java/goodgenerator/util/CrackRecipeAdder.java @@ -520,6 +520,12 @@ public static void registerWire(int ID, Werkstoff material, int aAmperage, int a true, false).getStackForm(1L)); } + 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); GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.ingot, 1), GTUtility.getIntegratedCircuit(2)) .itemOutputs(material.get(OrePrefixes.wireGt02, 1)) @@ -550,6 +556,12 @@ public static void registerWire(int ID, Werkstoff material, int aAmperage, int a .duration(17 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); + 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); GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.stick, 2), GTUtility.getIntegratedCircuit(2)) .itemOutputs(material.get(OrePrefixes.wireGt02, 1)) From ec7328ebf793b9e8dadee4b66c72e421dbb6daf6 Mon Sep 17 00:00:00 2001 From: HoleFish <48403212+HoleFish@users.noreply.github.com> Date: Fri, 29 Nov 2024 02:39:44 +0800 Subject: [PATCH 041/181] Fix fluid amount not updated in multiblock ui (#3561) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../implementations/MTEMultiBlockBase.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index 1958b4aa3f2..875148d9b6f 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -19,6 +19,7 @@ import java.util.Map; import java.util.Optional; import java.util.function.LongConsumer; +import java.util.stream.Collectors; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -2695,7 +2696,15 @@ && getBaseMetaTileEntity().wasShutdown())) || (mOutputItems != null && mOutputItems.length > 0))) .widget( new FakeSyncWidget.ListSyncer<>( - () -> mOutputFluids != null ? Arrays.asList(mOutputFluids) : Collections.emptyList(), + () -> mOutputFluids != null ? Arrays.stream(mOutputFluids) + .map(fluidStack -> new FluidStack(fluidStack, fluidStack.amount) { + + @Override + public boolean isFluidEqual(FluidStack other) { + return super.isFluidEqual(other) && amount == other.amount; + } + }) + .collect(Collectors.toList()) : Collections.emptyList(), val -> mOutputFluids = val.toArray(new FluidStack[0]), NetworkUtils::writeFluidStack, NetworkUtils::readFluidStack)) From 8bde616826088a5307cde9025f6f274c85614754 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Thu, 28 Nov 2024 17:46:50 +0100 Subject: [PATCH 042/181] update --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 65c71c162b8..4c1a5e1e81d 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -39,7 +39,7 @@ dependencies { api("com.github.GTNewHorizons:NotEnoughItems:2.6.46-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") api("com.github.GTNewHorizons:GTNHLib:0.5.20:dev") - api("com.github.GTNewHorizons:ModularUI:1.2.16:dev") + api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-478-GTNH:dev") From 1002b9646309c445de785f997090193bfd9f1b45 Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Sat, 30 Nov 2024 01:09:58 +0800 Subject: [PATCH 043/181] remove maintenance hatch from TPM NEI preview (#3570) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../machines/multi/MTETranscendentPlasmaMixer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java index d0262198fa1..32f5c33dfb2 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java @@ -40,6 +40,7 @@ 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; @@ -89,7 +90,8 @@ public class MTETranscendentPlasmaMixer extends MTEEnhancedMultiBlockBase Date: Fri, 29 Nov 2024 13:48:06 -0500 Subject: [PATCH 044/181] Fix Laser Engraver NEI recipes (#3572) --- src/main/java/gregtech/api/recipe/RecipeMaps.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/api/recipe/RecipeMaps.java b/src/main/java/gregtech/api/recipe/RecipeMaps.java index a24017b1e7c..262b2921ddf 100644 --- a/src/main/java/gregtech/api/recipe/RecipeMaps.java +++ b/src/main/java/gregtech/api/recipe/RecipeMaps.java @@ -319,9 +319,13 @@ public final class RecipeMaps { (index, isFluid, isOutput, 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 + // NEI Catalyst search requires recipes to be sorted by voltage tier. Therefore, we first sort by voltage tier, + // then by water tier, then the default comparator. .neiRecipeComparator( - (a, b) -> Comparator.comparing(PurifiedWaterHelpers::getWaterTierFromRecipe) - .thenComparing(GTRecipe::compareTo) + (a, b) -> Comparator.comparing(recipe -> recipe.mEUt) + .thenComparing( + Comparator.comparing(PurifiedWaterHelpers::getWaterTierFromRecipe) + .thenComparing(GTRecipe::compareTo)) .compare(a, b)) .build(); public static final RecipeMap mixerRecipes = RecipeMapBuilder.of("gt.recipe.mixer") From 8aa2615d9e5ae8ae90e462155f15296bd4762735 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Fri, 29 Nov 2024 21:41:37 +0100 Subject: [PATCH 045/181] update --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 4c1a5e1e81d..70d78ed88e2 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -38,7 +38,7 @@ dependencies { api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") api("com.github.GTNewHorizons:NotEnoughItems:2.6.46-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") - api("com.github.GTNewHorizons:GTNHLib:0.5.20:dev") + api("com.github.GTNewHorizons:GTNHLib:0.5.21:dev") api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") From 32e9197cbff2bc902503ed662bf20f3b33ec46ed Mon Sep 17 00:00:00 2001 From: Ryan Nasers <42074409+Cardinalstars@users.noreply.github.com> Date: Fri, 29 Nov 2024 22:05:24 +0100 Subject: [PATCH 046/181] Fixing laser pipe connection issues when you place a pipe next to another one (#3573) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../metaTileEntity/pipe/MTEPipeData.java | 35 +---------------- .../metaTileEntity/pipe/MTEPipeEnergy.java | 38 +------------------ 2 files changed, 4 insertions(+), 69 deletions(-) diff --git a/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeData.java b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeData.java index f78e0b92bbc..32eac048465 100644 --- a/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeData.java +++ b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeData.java @@ -4,7 +4,6 @@ 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.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -189,7 +188,8 @@ public void onBlockDestroyed() { for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { IGregTechTileEntity gregTechTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(side); - if (gregTechTileEntity != null && gregTechTileEntity.getMetaTileEntity() instanceof MTEPipeData neighbor) { + if (gregTechTileEntity != null && gregTechTileEntity.getMetaTileEntity() instanceof MTEPipeData neighbor + && neighbor.isConnectedAtSide(side.getOpposite())) { neighbor.mConnections &= ~side.getOpposite().flag; neighbor.connectionCount--; } @@ -223,37 +223,6 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } } - @Override - public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, float aX, - float aY, float aZ, ItemStack aTool) { - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - - if (this.isConnectedAtSide(wrenchingSide)) { - this.mConnections &= ~wrenchingSide.flag; - this.connectionCount--; - - IGregTechTileEntity gregTechTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(wrenchingSide); - - if (gregTechTileEntity != null && gregTechTileEntity.getMetaTileEntity() instanceof MTEPipeData neighbor) { - neighbor.mConnections &= ~wrenchingSide.getOpposite().flag; - neighbor.connectionCount--; - } - - } else { - this.mConnections |= wrenchingSide.flag; - this.connectionCount++; - - IGregTechTileEntity gregTechTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(wrenchingSide); - - if (gregTechTileEntity != null && gregTechTileEntity.getMetaTileEntity() instanceof MTEPipeData neighbor) { - neighbor.mConnections |= wrenchingSide.getOpposite().flag; - neighbor.connectionCount--; - } - } - - return super.onWrenchRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ, aTool); - } - @Override public boolean canConnectData(ForgeDirection side) { return true; diff --git a/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergy.java b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergy.java index 33219cb70c3..e94f4d31ff3 100644 --- a/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergy.java +++ b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergy.java @@ -4,7 +4,6 @@ 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.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -156,8 +155,8 @@ public void onBlockDestroyed() { for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { IGregTechTileEntity gregTechTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(side); - if (gregTechTileEntity != null - && gregTechTileEntity.getMetaTileEntity() instanceof MTEPipeEnergy neighbor) { + if (gregTechTileEntity != null && gregTechTileEntity.getMetaTileEntity() instanceof MTEPipeEnergy neighbor + && neighbor.isConnectedAtSide(side.getOpposite())) { neighbor.mConnections &= ~side.getOpposite().flag; neighbor.connectionCount--; } @@ -191,39 +190,6 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } } - @Override - public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, float aX, - float aY, float aZ, ItemStack aTool) { - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - - if (this.isConnectedAtSide(wrenchingSide)) { - this.mConnections &= ~wrenchingSide.flag; - this.connectionCount--; - - IGregTechTileEntity gregTechTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(wrenchingSide); - - if (gregTechTileEntity != null - && gregTechTileEntity.getMetaTileEntity() instanceof MTEPipeEnergy neighbor) { - neighbor.mConnections &= ~wrenchingSide.getOpposite().flag; - neighbor.connectionCount--; - } - - } else { - this.mConnections |= wrenchingSide.flag; - this.connectionCount++; - - IGregTechTileEntity gregTechTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(wrenchingSide); - - if (gregTechTileEntity != null - && gregTechTileEntity.getMetaTileEntity() instanceof MTEPipeEnergy neighbor) { - neighbor.mConnections |= wrenchingSide.getOpposite().flag; - neighbor.connectionCount--; - } - } - - return super.onWrenchRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ, aTool); - } - @Override public void loadNBTData(NBTTagCompound nbtTagCompound) { active = nbtTagCompound.getBoolean("eActive"); From e3ca6474e59bf3aa7eb55942826699063e42cdb5 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Fri, 29 Nov 2024 22:11:20 +0100 Subject: [PATCH 047/181] update --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 70d78ed88e2..341a614c0a1 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -36,7 +36,7 @@ dependencies { api("com.github.GTNewHorizons:StructureLib:1.3.6:dev") api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") - api("com.github.GTNewHorizons:NotEnoughItems:2.6.46-GTNH:dev") + api("com.github.GTNewHorizons:NotEnoughItems:2.6.47-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") api("com.github.GTNewHorizons:GTNHLib:0.5.21:dev") api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") From 0b21c439ad93fb4271e05919ac2468422fc9de77 Mon Sep 17 00:00:00 2001 From: chochem <40274384+chochem@users.noreply.github.com> Date: Sat, 30 Nov 2024 15:52:32 +0000 Subject: [PATCH 048/181] prevent client side code being called server side (#3575) --- .../multi/purification/MTEPurificationPlant.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 index a3b89adcf6f..e3bbfe60d2d 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationPlant.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationPlant.java @@ -49,6 +49,7 @@ 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.network.NetworkUtils; import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; @@ -690,7 +691,11 @@ private Widget makeUnitStatusWidget(LinkedPurificationUnit unit) { .getLocalName(); String statusString = name + " " + unit.getStatusString(); - final FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + int widgetWidth = 0; + if (NetworkUtils.isClient()) { + final FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + widgetWidth = fontRenderer.getStringWidth(statusString) + 25; + } row.widget( TextWidget.dynamicString(() -> statusString) @@ -703,7 +708,7 @@ private Widget makeUnitStatusWidget(LinkedPurificationUnit unit) { unit.metaTileEntity() .makeSyncerWidgets()) .widget(new FakeSyncWidget.BooleanSyncer(unit::isActive, unit::setActive)) - .setSize(fontRenderer.getStringWidth(statusString) + 25, 20); + .setSize(widgetWidth, 20); return row; } From c769fe87c7eea40656736cea289e62e9e49538ef Mon Sep 17 00:00:00 2001 From: chochem <40274384+chochem@users.noreply.github.com> Date: Sat, 30 Nov 2024 17:23:10 +0000 Subject: [PATCH 049/181] fix many broken and incorrect recycling recipes and fixes several infinite material loops (#3576) --- .../system/material/WerkstoffLoader.java | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/src/main/java/bartworks/system/material/WerkstoffLoader.java b/src/main/java/bartworks/system/material/WerkstoffLoader.java index 5b485b99053..079238c28a4 100644 --- a/src/main/java/bartworks/system/material/WerkstoffLoader.java +++ b/src/main/java/bartworks/system/material/WerkstoffLoader.java @@ -127,7 +127,6 @@ 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; @@ -1986,28 +1985,6 @@ private static void runGTItemDataRegistrator() { } } 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); } /** From 1e5222e826a78c1475a084533705f8c1eee40cef Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Sat, 30 Nov 2024 18:38:38 +0100 Subject: [PATCH 050/181] Fix turbines resetting to tight mode after server restart (#3577) --- .../machines/multi/MTELargeTurbine.java | 2 ++ .../machines/multi/MTELargeTurbineHPSteam.java | 13 ------------- .../machines/multi/MTELargeTurbineSteam.java | 13 ------------- 3 files changed, 2 insertions(+), 26 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java index 725cf50d446..43086c33403 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java @@ -271,11 +271,13 @@ public boolean addToMachineList(IGregTechTileEntity tTileEntity, int aBaseCasing @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 diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineHPSteam.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineHPSteam.java index 731d6daeb94..6e5404f992c 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineHPSteam.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineHPSteam.java @@ -11,7 +11,6 @@ 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.FluidStack; @@ -195,16 +194,4 @@ float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMu public int getDamageToComponent(ItemStack aStack) { return (looseFit && XSTR_INSTANCE.nextInt(4) == 0) ? 0 : 1; } - - @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/MTELargeTurbineSteam.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java index b0ad701cc98..d2f34d144e1 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java @@ -12,7 +12,6 @@ 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.FluidStack; @@ -208,16 +207,4 @@ public int getDamageToComponent(ItemStack aStack) { public String[] getInfoData() { 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"); - } } From 6189dae128e256a0c9c065e90a1156be37377986 Mon Sep 17 00:00:00 2001 From: GirixK <72603953+GirixK@users.noreply.github.com> Date: Sat, 30 Nov 2024 21:03:34 +0100 Subject: [PATCH 051/181] Fix water overwriting other fluids in laser engraver (#3579) --- .../gregtech/api/util/GTRecipeConstants.java | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/main/java/gregtech/api/util/GTRecipeConstants.java b/src/main/java/gregtech/api/util/GTRecipeConstants.java index f0e4cacd650..72b7a13fb81 100644 --- a/src/main/java/gregtech/api/util/GTRecipeConstants.java +++ b/src/main/java/gregtech/api/util/GTRecipeConstants.java @@ -14,6 +14,8 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.apache.commons.lang3.ArrayUtils; + import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; @@ -342,16 +344,18 @@ enum Wafer{ return GTUtility.concat( builder.copy() .itemInputs(itemInputs) - .fluidInputs(GTModHandler.getDistilledWater(100L)) + .fluidInputs(ArrayUtils.addAll(builder.fluidInputs, GTModHandler.getDistilledWater(100L))) .addTo(RecipeMaps.laserEngraverRecipes), builder.copy() .itemInputs(itemInputs) - .fluidInputs(Materials.Grade1PurifiedWater.getFluid(100L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade1PurifiedWater.getFluid(100L))) .duration(halfBoostedRecipeTime) .addTo(RecipeMaps.laserEngraverRecipes), builder.copy() .itemInputs(itemInputs) - .fluidInputs(Materials.Grade2PurifiedWater.getFluid(100L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade2PurifiedWater.getFluid(100L))) .duration(boostedRecipeTime) .addTo(RecipeMaps.laserEngraverRecipes)); } @@ -359,11 +363,13 @@ enum Wafer{ // Require purified water for europium wafers, at least grade 3 return GTUtility.concat( builder.copy() - .fluidInputs(Materials.Grade3PurifiedWater.getFluid(100L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade3PurifiedWater.getFluid(100L))) .duration(recipeTime) .addTo(RecipeMaps.laserEngraverRecipes), builder.copy() - .fluidInputs(Materials.Grade4PurifiedWater.getFluid(100L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade4PurifiedWater.getFluid(100L))) .duration(boostedRecipeTime) .addTo(RecipeMaps.laserEngraverRecipes)); } @@ -371,11 +377,13 @@ enum Wafer{ // Require purified water for americium wafers, at least grade 5 return GTUtility.concat( builder.copy() - .fluidInputs(Materials.Grade5PurifiedWater.getFluid(100L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade5PurifiedWater.getFluid(100L))) .duration(recipeTime) .addTo(RecipeMaps.laserEngraverRecipes), builder.copy() - .fluidInputs(Materials.Grade6PurifiedWater.getFluid(100L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade6PurifiedWater.getFluid(100L))) .duration(boostedRecipeTime) .addTo(RecipeMaps.laserEngraverRecipes)); } @@ -384,15 +392,18 @@ enum Wafer{ // T1 masks require grade 1, 2 or 3 purified water return GTUtility.concat( builder.copy() - .fluidInputs(Materials.Grade1PurifiedWater.getFluid(32000L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade1PurifiedWater.getFluid(32000L))) .duration(recipeTime) .addTo(RecipeMaps.laserEngraverRecipes), builder.copy() - .fluidInputs(Materials.Grade2PurifiedWater.getFluid(32000L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade2PurifiedWater.getFluid(32000L))) .duration(halfBoostedRecipeTime) .addTo(RecipeMaps.laserEngraverRecipes), builder.copy() - .fluidInputs(Materials.Grade3PurifiedWater.getFluid(32000L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade3PurifiedWater.getFluid(32000L))) .duration(boostedRecipeTime) .addTo(RecipeMaps.laserEngraverRecipes)); } @@ -400,11 +411,13 @@ enum Wafer{ // T2 masks require grade 4 or 5 purified water return GTUtility.concat( builder.copy() - .fluidInputs(Materials.Grade4PurifiedWater.getFluid(32000L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade4PurifiedWater.getFluid(32000L))) .duration(recipeTime) .addTo(RecipeMaps.laserEngraverRecipes), builder.copy() - .fluidInputs(Materials.Grade5PurifiedWater.getFluid(32000L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade5PurifiedWater.getFluid(32000L))) .duration(boostedRecipeTime) .addTo(RecipeMaps.laserEngraverRecipes)); } @@ -412,15 +425,18 @@ enum Wafer{ // T3 masks require grade 6, 7 or 8 purified water return GTUtility.concat( builder.copy() - .fluidInputs(Materials.Grade6PurifiedWater.getFluid(32000L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade6PurifiedWater.getFluid(32000L))) .duration(recipeTime) .addTo(RecipeMaps.laserEngraverRecipes), builder.copy() - .fluidInputs(Materials.Grade7PurifiedWater.getFluid(32000L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade7PurifiedWater.getFluid(32000L))) .duration(halfBoostedRecipeTime) .addTo(RecipeMaps.laserEngraverRecipes), builder.copy() - .fluidInputs(Materials.Grade8PurifiedWater.getFluid(32000L)) + .fluidInputs( + ArrayUtils.addAll(builder.fluidInputs, Materials.Grade8PurifiedWater.getFluid(32000L))) .duration(boostedRecipeTime) .addTo(RecipeMaps.laserEngraverRecipes)); } From b693fad8506e2500a49ae27a60292c0bba609a32 Mon Sep 17 00:00:00 2001 From: GirixK <72603953+GirixK@users.noreply.github.com> Date: Sat, 30 Nov 2024 21:42:49 +0100 Subject: [PATCH 052/181] Fix Living Crystal Chip progression skip using Beamline (#3580) --- .../java/gtnhlanth/loader/RecipeLoader.java | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/main/java/gtnhlanth/loader/RecipeLoader.java b/src/main/java/gtnhlanth/loader/RecipeLoader.java index 81aec5bfd12..358243a7497 100644 --- a/src/main/java/gtnhlanth/loader/RecipeLoader.java +++ b/src/main/java/gtnhlanth/loader/RecipeLoader.java @@ -817,16 +817,33 @@ public static void loadAccelerator() { 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); + if (mask == MaskList.LCC) { + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.maskMap.get(maskIngredient)), + GTUtility.copyAmount(0, lens)) + .fluidInputs( + // damage * 4 (chips per recipe) * 50 (L per chip normally) * 3 / 4 (75% of the cost) + Materials.BioMediumSterilized.getFluid((mask.getDamage() + 1) * 4L * 50 * 3 / 4)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(mask))) + .requiresCleanRoom() + .duration(120 * SECONDS) + .eut(mask.getEngraverEUt()) + .addTo(WaferEngravingRecipes); + + } else { + + 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); + } } } From eae2657d2e32ef182ecae21a8018a2f866e4841c Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sat, 30 Nov 2024 15:39:57 -0600 Subject: [PATCH 053/181] Fix Godforge NDPE upgrade description (#3568) Co-authored-by: GDCloud <93287602+GDCloudstrike@users.noreply.github.com> --- src/main/resources/assets/tectech/lang/en_US.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 58e7f7d5186..ed54638acf6 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -1006,7 +1006,7 @@ fog.upgrade.text.16=Allows the Helioflare Power Forge to receive the full benefi fog.upgrade.text.17=Increases the cap of EBF heat bonuses to 30,000K. fog.upgrade.text.18=Unlocks a multiplier to maximum parallel based on current heat. This bonus is calculated via this formula: Multiplier = 1 + Heat / 15000 fog.upgrade.text.19=Improves the EBF energy reduction heat bonus from 5% to 8% and adds an energy discount based on the fill level of the internal battery. This bonus is calculated via the formula: Discount = (Current fill level / Max Capacity - 0.5)^2 * (-0.6) + 0.15, multiplied by 2/3 for modules other than the Plasma Fabricator -fog.upgrade.text.20=EBF heat bonuses are granted above 30,000K, but the heat value used in heat bonus calculations is determined by this formula: Actual Heat = 30000 + (Current Heat - 30000)^0.85 +fog.upgrade.text.20=EBF heat bonuses are granted above 30,000K, but the heat value used in heat bonus calculations is determined by this formula: Power Forge Heat = 30000 + (Current Heat - 30000)^0.85, Melting Core Heat = 30000 + (Current Heat - 30000)^0.8 fog.upgrade.text.21=Unlocks a multiplier to maximum parallel based on total amount of purchased upgrades. This bonus is calculated via this formula: Multiplier = 1 + Upgrade Amount / 5 fog.upgrade.text.22=Improves IGCC based on current maximum parallel. Improved Formula: Multiplier = (1 / Heat^0.01) / (Parallel^0.02) fog.upgrade.text.23=Multiplies maximum processing voltage by 4 per active ring, applies after other bonuses. From d415a2c816f27fbacaa6a2bcfc297f7dfd892a12 Mon Sep 17 00:00:00 2001 From: Ryan Nasers <42074409+Cardinalstars@users.noreply.github.com> Date: Sat, 30 Nov 2024 23:42:47 +0100 Subject: [PATCH 054/181] Frame fix (NEEDS TESTING) (#3578) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> Co-authored-by: Martin Robertz --- .../gregtech/api/interfaces/ITemporaryTE.java | 4 + .../metatileentity/BaseMetaPipeEntity.java | 74 ++++-- .../implementations/MTEFrame.java | 3 +- .../gregtech/api/net/GTPacketCreateTE.java | 212 ++++++++++++++++++ .../gregtech/api/net/GTPacketTileEntity.java | 2 - .../java/gregtech/api/net/GTPacketTypes.java | 1 + .../gregtech/common/blocks/BlockFrameBox.java | 3 + 7 files changed, 273 insertions(+), 26 deletions(-) create mode 100644 src/main/java/gregtech/api/interfaces/ITemporaryTE.java create mode 100644 src/main/java/gregtech/api/net/GTPacketCreateTE.java diff --git a/src/main/java/gregtech/api/interfaces/ITemporaryTE.java b/src/main/java/gregtech/api/interfaces/ITemporaryTE.java new file mode 100644 index 00000000000..581137ca603 --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/ITemporaryTE.java @@ -0,0 +1,4 @@ +package gregtech.api.interfaces; + +public interface ITemporaryTE { +} diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index 0ef1d196e93..d2d9f429b72 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -32,12 +32,14 @@ import gregtech.api.graphs.Lock; import gregtech.api.graphs.Node; import gregtech.api.graphs.paths.NodePath; +import gregtech.api.interfaces.ITemporaryTE; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IConnectable; 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.GTPacketCreateTE; import gregtech.api.net.GTPacketTileEntity; import gregtech.api.objects.GTItemStack; import gregtech.api.util.CoverBehaviorBase; @@ -294,30 +296,56 @@ && getMetaTileEntity().doTickProfilingMessageDuringThisTick() private void sendClientData() { if (mSendClientData) { - NW.sendPacketToAllPlayersInRange( - worldObj, - new GTPacketTileEntity( + if (mMetaTileEntity instanceof ITemporaryTE) { + NW.sendPacketToAllPlayersInRange( + worldObj, + new GTPacketCreateTE( + xCoord, + (short) yCoord, + zCoord, + mID, + getCoverInfoAtSide(ForgeDirection.DOWN).getCoverID(), + getCoverInfoAtSide(ForgeDirection.UP).getCoverID(), + getCoverInfoAtSide(ForgeDirection.NORTH).getCoverID(), + getCoverInfoAtSide(ForgeDirection.SOUTH).getCoverID(), + getCoverInfoAtSide(ForgeDirection.WEST).getCoverID(), + getCoverInfoAtSide(ForgeDirection.EAST).getCoverID(), + oTextureData = mConnections, + oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0, + oRedstoneData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0) | ((mSidedRedstone[1] > 0) ? 2 : 0) + | ((mSidedRedstone[2] > 0) ? 4 : 0) + | ((mSidedRedstone[3] > 0) ? 8 : 0) + | ((mSidedRedstone[4] > 0) ? 16 : 0) + | ((mSidedRedstone[5] > 0) ? 32 : 0)), + oColor = mColor), xCoord, - (short) yCoord, - zCoord, - mID, - getCoverInfoAtSide(ForgeDirection.DOWN).getCoverID(), - getCoverInfoAtSide(ForgeDirection.UP).getCoverID(), - getCoverInfoAtSide(ForgeDirection.NORTH).getCoverID(), - getCoverInfoAtSide(ForgeDirection.SOUTH).getCoverID(), - getCoverInfoAtSide(ForgeDirection.WEST).getCoverID(), - getCoverInfoAtSide(ForgeDirection.EAST).getCoverID(), - oTextureData = mConnections, - oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0, - oRedstoneData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0) | ((mSidedRedstone[1] > 0) ? 2 : 0) - | ((mSidedRedstone[2] > 0) ? 4 : 0) - | ((mSidedRedstone[3] > 0) ? 8 : 0) - | ((mSidedRedstone[4] > 0) ? 16 : 0) - | ((mSidedRedstone[5] > 0) ? 32 : 0)), - oColor = mColor), - xCoord, - zCoord); - mSendClientData = false; + zCoord); + } else { + NW.sendPacketToAllPlayersInRange( + worldObj, + new GTPacketTileEntity( + xCoord, + (short) yCoord, + zCoord, + mID, + getCoverInfoAtSide(ForgeDirection.DOWN).getCoverID(), + getCoverInfoAtSide(ForgeDirection.UP).getCoverID(), + getCoverInfoAtSide(ForgeDirection.NORTH).getCoverID(), + getCoverInfoAtSide(ForgeDirection.SOUTH).getCoverID(), + getCoverInfoAtSide(ForgeDirection.WEST).getCoverID(), + getCoverInfoAtSide(ForgeDirection.EAST).getCoverID(), + oTextureData = mConnections, + oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0, + oRedstoneData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0) | ((mSidedRedstone[1] > 0) ? 2 : 0) + | ((mSidedRedstone[2] > 0) ? 4 : 0) + | ((mSidedRedstone[3] > 0) ? 8 : 0) + | ((mSidedRedstone[4] > 0) ? 16 : 0) + | ((mSidedRedstone[5] > 0) ? 32 : 0)), + oColor = mColor), + xCoord, + zCoord); + mSendClientData = false; + } } sendCoverDataIfNeeded(); } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java index ec000b6e9c1..483d8573b8c 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java @@ -7,6 +7,7 @@ import gregtech.api.enums.Dyes; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITemporaryTE; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -14,7 +15,7 @@ import gregtech.api.render.TextureFactory; import gregtech.api.util.GTLanguageManager; -public class MTEFrame extends MetaPipeEntity { +public class MTEFrame extends MetaPipeEntity implements ITemporaryTE { private static final String localizedDescFormat = GTLanguageManager .addStringLocalization("gt.blockmachines.gt_frame.desc.format", "Just something you can put covers on."); diff --git a/src/main/java/gregtech/api/net/GTPacketCreateTE.java b/src/main/java/gregtech/api/net/GTPacketCreateTE.java new file mode 100644 index 00000000000..c0b1c26e18d --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketCreateTE.java @@ -0,0 +1,212 @@ +package gregtech.api.net; + +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +import org.jetbrains.annotations.NotNull; + +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 GTPacketCreateTE extends GTPacket { + + private int mX, mZ, mC0, mC1, mC2, mC3, mC4, mC5; + private short mY, mID, mRID; + private byte mTexture, mTexturePage, mUpdate, mRedstone, mColor; + + public GTPacketCreateTE() { + super(); + } + + public GTPacketCreateTE(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(); + 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; + } + + public GTPacketCreateTE(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); + } + + public GTPacketCreateTE(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 byte getPacketID() { + return GTPacketTypes.CREATE_TILE_ENTITY.id; + } + + @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 GTPacket decode(ByteArrayDataInput aData) { + return new GTPacketCreateTE( + // 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 world) { + if (world == null) return; + if (world instanceof WorldClient) { + final TileEntity tileEntity = world.getTileEntity(mX, mY, mZ); + if (tileEntity == null) { + try { + if (mTexturePage != 0) // It's a MetaTileEntity + { + BaseMetaTileEntity newTileEntity = getBaseMetaTileEntity(); + ((WorldClient) world).setTileEntity(mX, mY, mZ, newTileEntity); + } else // Otherwise it's a MetaPipeEntity + { + BaseMetaPipeEntity newTileEntity = getBaseMetaPipeEntity(); + ((WorldClient) world).setTileEntity(mX, mY, mZ, newTileEntity); + } + } catch (Exception e) { + GTMod.GT_FML_LOGGER.error("Exception creating Tile Entity at ({}, {}, {})", mX, mY, mZ); + } + } else { + try { + if (tileEntity instanceof BaseMetaTileEntity) + ((BaseMetaTileEntity) tileEntity).receiveMetaTileEntityData( + mID, + mC0, + mC1, + mC2, + mC3, + mC4, + mC5, + mTexture, + mTexturePage, + mUpdate, + mRedstone, + mColor); + else if (tileEntity instanceof BaseMetaPipeEntity) + ((BaseMetaPipeEntity) tileEntity).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 ({}, {}, {})", + tileEntity, + mX, + mY, + mZ); + } + } + } + } + + @NotNull + private BaseMetaPipeEntity getBaseMetaPipeEntity() { + BaseMetaPipeEntity newTileEntity = new BaseMetaPipeEntity(); + newTileEntity + .receiveMetaTileEntityData(mID, mC0, mC1, mC2, mC3, mC4, mC5, mTexture, mUpdate, mRedstone, mColor); + return newTileEntity; + } + + @NotNull + private BaseMetaTileEntity getBaseMetaTileEntity() { + BaseMetaTileEntity newTileEntity = new BaseMetaTileEntity(); + newTileEntity.receiveMetaTileEntityData( + mID, + mC0, + mC1, + mC2, + mC3, + mC4, + mC5, + mTexture, + mTexturePage, + mUpdate, + mRedstone, + mColor); + return newTileEntity; + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketTileEntity.java b/src/main/java/gregtech/api/net/GTPacketTileEntity.java index e996f32ced5..15819cb9ed0 100644 --- a/src/main/java/gregtech/api/net/GTPacketTileEntity.java +++ b/src/main/java/gregtech/api/net/GTPacketTileEntity.java @@ -1,6 +1,5 @@ package gregtech.api.net; -import net.minecraft.block.Block; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; @@ -124,7 +123,6 @@ 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, diff --git a/src/main/java/gregtech/api/net/GTPacketTypes.java b/src/main/java/gregtech/api/net/GTPacketTypes.java index ed432744349..915d03b88ee 100644 --- a/src/main/java/gregtech/api/net/GTPacketTypes.java +++ b/src/main/java/gregtech/api/net/GTPacketTypes.java @@ -35,6 +35,7 @@ public enum GTPacketTypes { ORE_DICT_CACHE(25, new PacketOreDictCache()), SERVER_JOINED(26, new PacketServerJoined()), EIC(27, new PacketEIC()), + CREATE_TILE_ENTITY(28, new GTPacketCreateTE()), // merge conflict prevention comment, keep a trailing comma above ; diff --git a/src/main/java/gregtech/common/blocks/BlockFrameBox.java b/src/main/java/gregtech/common/blocks/BlockFrameBox.java index ab05d950325..305919c9482 100644 --- a/src/main/java/gregtech/common/blocks/BlockFrameBox.java +++ b/src/main/java/gregtech/common/blocks/BlockFrameBox.java @@ -103,6 +103,8 @@ private void createFrame(World worldIn, int x, int y, int z, BaseMetaPipeEntity Materials material = getMaterial(meta); MTEFrame frame = new MTEFrame("GT_Frame_" + material, material); baseMte.setMetaTileEntity(frame); + baseMte.setInitialValuesAsNBT(null, (short) (4096 + meta)); // 4096 is found in LoaderMetaTileEntities for + // frames frame.setBaseMetaTileEntity(baseMte); } @@ -111,6 +113,7 @@ private BaseMetaPipeEntity spawnFrameEntity(World worldIn, int x, int y, int z) BaseMetaPipeEntity newTileEntity = new BaseMetaPipeEntity(); createFrame(worldIn, x, y, z, newTileEntity); worldIn.setTileEntity(x, y, z, newTileEntity); + return newTileEntity; } From c116c46700c7f7b45b80d75d9ca25b15f3854967 Mon Sep 17 00:00:00 2001 From: Crystie <50521339+CrystieColon3@users.noreply.github.com> Date: Sun, 1 Dec 2024 04:07:47 +0300 Subject: [PATCH 055/181] Waterline + Gorge tooltip formatting changes (#3582) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- ...MTEPurificationUnitBaryonicPerfection.java | 19 ++++++++++++++++--- .../MTEPurificationUnitDegasser.java | 4 +++- .../MTEPurificationUnitOzonation.java | 8 ++++++-- .../MTEPurificationUnitPlasmaHeater.java | 8 ++++++-- .../MTEPurificationUnitUVTreatment.java | 2 +- .../postload/chains/PurifiedWaterRecipes.java | 5 ++++- .../multi/godforge/MTEForgeOfGods.java | 14 +++++++++++--- 7 files changed, 47 insertions(+), 13 deletions(-) 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 index 96e1c8e9c93..b510b4a3414 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBaryonicPerfection.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBaryonicPerfection.java @@ -52,6 +52,7 @@ import gregtech.common.items.IDMetaItem03; import gregtech.common.items.MetaGeneratedItem03; import gregtech.common.tileentities.machines.MTEHatchInputBusME; +import gregtech.loaders.postload.chains.PurifiedWaterRecipes; public class MTEPurificationUnitBaryonicPerfection extends MTEPurificationUnitBase implements ISurvivalConstructable { @@ -311,7 +312,9 @@ protected MultiblockTooltipBuilder createTooltip() { + CATALYST_BASE_COST + "L" + EnumChatFormatting.WHITE - + " Molten Infinity") + + " Molten Infinity" + + EnumChatFormatting.GRAY + + ".") .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.") @@ -321,8 +324,18 @@ protected MultiblockTooltipBuilder createTooltip() { + BARYONIC_MATTER_OUTPUT + "L " + EnumChatFormatting.WHITE - + "Stabilised Baryonic Matter") - .addInfo("At the end of the recipe, all incorrectly inserted catalysts are returned in the output bus.") + + "Stabilised Baryonic Matter" + + EnumChatFormatting.GRAY + + ".") + .addInfo( + "At the end of a successful recipe, outputs additional " + EnumChatFormatting.RED + + PurifiedWaterRecipes.extraBaryonicOutput + + "L " + + EnumChatFormatting.WHITE + + "Stabilised Baryonic Matter" + + EnumChatFormatting.GRAY + + " per parallel.") + .addInfo("At the end of the recipe, returns all incorrectly inserted catalysts in the output bus.") .addSeparator() .addInfo( EnumChatFormatting.AQUA + "" 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 index da0887f84cc..59b9be0c178 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitDegasser.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitDegasser.java @@ -411,7 +411,9 @@ protected MultiblockTooltipBuilder createTooltip() { "If this bit is on, you must insert " + EnumChatFormatting.RED + "4608L " + EnumChatFormatting.WHITE - + "Molten Neutronium") + + "Molten Neutronium" + + EnumChatFormatting.GRAY + + ".") .addSeparator() .addInfo( EnumChatFormatting.WHITE.toString() + EnumChatFormatting.BOLD 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 index f7fd9b041bd..9ceb4f89581 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitOzonation.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitOzonation.java @@ -187,14 +187,18 @@ protected MultiblockTooltipBuilder createTooltip() { + MAX_OZONE_GAS_FOR_EXPLOSION + "L " + EnumChatFormatting.WHITE - + "Ozone Gas.") + + "Ozone Gas" + + EnumChatFormatting.GRAY + + ".") .addInfo( "Receives a " + EnumChatFormatting.RED + "20%" + EnumChatFormatting.GRAY + " bonus to success chance for every doubling of " + EnumChatFormatting.WHITE - + "Ozone Gas.") + + "Ozone Gas" + + EnumChatFormatting.GRAY + + ".") .addSeparator() .addInfo( EnumChatFormatting.AQUA + "" 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 index b1301157da7..b8a45b810af 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitPlasmaHeater.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitPlasmaHeater.java @@ -300,7 +300,9 @@ protected MultiblockTooltipBuilder createTooltip() { // TODO: Refer to heating cycles in another way to avoid confusion "Each completed heating cycle boosts success chance by " + EnumChatFormatting.RED + SUCCESS_PER_CYCLE - + "%.") + + "%" + + EnumChatFormatting.GRAY + + ".") .addInfo( "If the temperature ever reaches " + EnumChatFormatting.RED + MAX_TEMP @@ -322,7 +324,9 @@ protected MultiblockTooltipBuilder createTooltip() { + "L/s " + EnumChatFormatting.WHITE + coolantMaterial.getFluid(1) - .getLocalizedName()) + .getLocalizedName() + + EnumChatFormatting.GRAY + + ".") .addInfo( EnumChatFormatting.RED + "Raises " + EnumChatFormatting.GRAY 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 index eaa5a0d5dfe..28c5c82c91a 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitUVTreatment.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitUVTreatment.java @@ -253,7 +253,7 @@ protected MultiblockTooltipBuilder createTooltip() { .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.") - .addInfo("The recipe always starts at the Orundum Lens") + .addInfo("The recipe always starts at the Orundum Lens.") .addSeparator() .addInfo( EnumChatFormatting.AQUA + "" diff --git a/src/main/java/gregtech/loaders/postload/chains/PurifiedWaterRecipes.java b/src/main/java/gregtech/loaders/postload/chains/PurifiedWaterRecipes.java index d35645769af..2a4b38e7eff 100644 --- a/src/main/java/gregtech/loaders/postload/chains/PurifiedWaterRecipes.java +++ b/src/main/java/gregtech/loaders/postload/chains/PurifiedWaterRecipes.java @@ -48,6 +48,7 @@ public class PurifiedWaterRecipes { static final PurificationPlantBaseChanceKey BASE_CHANCE = PurificationPlantBaseChanceKey.INSTANCE; + public static final int extraBaryonicOutput = 500; public static void run() { final int duration = MTEPurificationPlant.CYCLE_TIME_TICKS; @@ -302,7 +303,9 @@ public static void run() { // real recipe GTValues.RA.stdBuilder() .fluidInputs(Materials.Grade7PurifiedWater.getFluid(1000L)) - .fluidOutputs(Materials.Grade8PurifiedWater.getFluid(900L), Materials.StableBaryonicMatter.getFluid(500)) + .fluidOutputs( + Materials.Grade8PurifiedWater.getFluid(900L), + Materials.StableBaryonicMatter.getFluid(extraBaryonicOutput)) .itemOutputs(ItemList.Quark_Creation_Catalyst_Unaligned.get(2L), Particle.getBaseParticle(Particle.UNKNOWN)) .outputChances(10000, 100) .ignoreCollision() diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java index a5f833d830a..e6e5dd379f0 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java @@ -2692,20 +2692,28 @@ public MultiblockTooltipBuilder createTooltip() { + "which influences all of its functions,") .addInfo( "such as " + EnumChatFormatting.GOLD - + "unlocking new module types, increasing heat levels " + + "unlocking new module types" + + EnumChatFormatting.GRAY + + ", " + + EnumChatFormatting.GOLD + + "increasing heat levels " + EnumChatFormatting.GRAY + "and " + EnumChatFormatting.GOLD + "granting") .addInfo( - EnumChatFormatting.GOLD + "various processing speed bonuses. " + EnumChatFormatting.GOLD + "various processing speed bonuses" + + EnumChatFormatting.GRAY + + ". " + EnumChatFormatting.GRAY + "These upgrades can be unlocked by reaching") .addInfo("certain milestones and/or spending materials.") .addSeparator(EnumChatFormatting.AQUA, 73) .addInfo( EnumChatFormatting.GREEN - + "Clicking on the logo in the controller gui opens an extensive information window,") + + "Clicking on the logo in the controller gui opens an extensive information window" + + EnumChatFormatting.GRAY + + ",") .addInfo("explaining everything there is to know about this multiblock.") .beginStructureBlock(127, 29, 186, false) .addStructureInfo("Total blocks needed for the structure with " + getRingText("1", "2", "3") + "rings:") From 3d3bcfe3618176765b102f2e24b9d7914211eec3 Mon Sep 17 00:00:00 2001 From: GDCloud <93287602+GDCloudstrike@users.noreply.github.com> Date: Sun, 1 Dec 2024 02:56:13 +0100 Subject: [PATCH 056/181] Minor Godforge fixes (#3583) --- .../thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java | 2 ++ .../thing/metaTileEntity/multi/godforge/util/ForgeOfGodsUI.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java index e6e5dd379f0..35ae839406e 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java @@ -2973,9 +2973,11 @@ private void ejectGravitonShards() { while (gravitonShardsAvailable >= 64) { addOutput(GTOreDictUnificator.get(OrePrefixes.gem, MaterialsUEVplus.GravitonShard, 64)); gravitonShardsAvailable -= 64; + gravitonShardsSpent += 64; } addOutput( GTOreDictUnificator.get(OrePrefixes.gem, MaterialsUEVplus.GravitonShard, gravitonShardsAvailable)); + gravitonShardsSpent += gravitonShardsAvailable; gravitonShardsAvailable = 0; } } diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/ForgeOfGodsUI.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/ForgeOfGodsUI.java index d6f9be66333..46ea5825347 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/ForgeOfGodsUI.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/util/ForgeOfGodsUI.java @@ -304,7 +304,7 @@ public static ModularWindow createGeneralInfoWindow(Supplier inversionG .setPos(7, 140) .setSize(150, 15)) .widget( - TextWidget.dynamicText(() -> inversionInfoText(inversionGetter.get())) + TextWidget.dynamicText(() -> inversionHeaderText(inversionGetter.get())) .setDefaultColor(EnumChatFormatting.WHITE) .setTextAlignment(Alignment.CenterLeft) .setPos(7, 155) From dc8102edbdb28529beeb5bf762c378f766c1243d Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Sat, 30 Nov 2024 23:46:33 -0300 Subject: [PATCH 057/181] remove tooltip wrong information from HILE (#3584) --- .../machines/multi/MTEIndustrialLaserEngraver.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java index 19f38e4ac3e..aa025c559b7 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java @@ -241,7 +241,6 @@ protected MultiblockTooltipBuilder createTooltip() { .addInfo("Can perform recipes up to laser source tier + 1") .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") @@ -250,7 +249,7 @@ protected MultiblockTooltipBuilder createTooltip() { .addCasingInfoMin("Laser Containment Casing", 35, false) .addCasingInfoExactly("Tungstensteel Frame Box", 9, false) .addOtherStructurePart("Laser Resistant Plate", "x1") - .addOtherStructurePart("Borosilicate Glass", "x3") + .addOtherStructurePart("Glass (Tiered)", "x3") .addOtherStructurePart("Laser Source Hatch", "x1", 3) .addInputBus("Any Casing", 1) .addInputHatch("Any Casing", 1) From fd1becc546c966bf7894849c843f1dcc0919618b Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sun, 1 Dec 2024 05:56:00 -0600 Subject: [PATCH 058/181] Fix ME Output Hatch void protection checks (#3585) --- .../test/mock/MockIVoidableMachine.java | 5 ---- .../multis/mega/MTEMegaDistillTower.java | 27 ------------------- .../api/interfaces/fluid/IFluidStore.java | 7 +++++ .../api/interfaces/tileentity/IVoidable.java | 7 ----- .../implementations/MTEMultiBlockBase.java | 13 --------- .../multiblock/base/Controller.java | 5 ---- .../gregtech/api/util/OutputHatchWrapper.java | 5 ++++ .../api/util/VoidProtectionHelper.java | 6 ++--- .../machines/MTEHatchOutputME.java | 10 +++++++ .../machines/multi/MTEDistillationTower.java | 10 ------- .../advanced/MTEAdvDistillationTower.java | 10 ------- .../multi/production/MTENuclearReactor.java | 4 ++- 12 files changed, 28 insertions(+), 81 deletions(-) diff --git a/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java b/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java index 4796d1d3ee2..86db9e0f4a4 100644 --- a/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java +++ b/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java @@ -43,11 +43,6 @@ public boolean canDumpItemToME() { return false; } - @Override - public boolean canDumpFluidToME() { - return false; - } - @Override public VoidingMode getDefaultVoidingMode() { return VoidingMode.VOID_ALL; diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java index 4c3199f33f2..e98158ec7fa 100644 --- a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java @@ -56,7 +56,6 @@ 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 { @@ -392,32 +391,6 @@ protected ProcessingLogic createProcessingLogic() { return new ProcessingLogic().setMaxParallel(Configuration.Multiblocks.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[] outputFluids) { for (int i = 0; i < outputFluids.length && i < this.mOutputHatchesByLayer.size(); i++) { diff --git a/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java b/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java index 047cf4df5b4..5b5bb08c875 100644 --- a/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java +++ b/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java @@ -19,4 +19,11 @@ public interface IFluidStore extends IFluidTank { * @return Whether to allow given fluid to be inserted into this. */ boolean canStoreFluid(@Nonnull FluidStack fluidStack); + + /** + * @return The amount of fluid that can be stored in this. + */ + default int getAvailableSpace() { + return getCapacity() - getFluidAmount(); + } } diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java b/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java index 841fd07bbad..f55d71debcc 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java @@ -79,11 +79,4 @@ default int getFluidOutputLimit() { * as this might be called every tick and cause lag. */ boolean canDumpItemToME(); - - /** - * @return If this machine has ability to dump fluid outputs to ME network. - * This doesn't need to check if it can actually dump to ME, - * as this might be called every tick and cause lag. - */ - boolean canDumpFluidToME(); } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index 875148d9b6f..2a5e3c15527 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -109,7 +109,6 @@ 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; @@ -2290,18 +2289,6 @@ public boolean canDumpItemToME() { 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); 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 d6b4ef7fe3b..c0fb6cedb48 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java @@ -914,11 +914,6 @@ public boolean canDumpItemToME() { return false; } - @Override - public boolean canDumpFluidToME() { - return false; - } - @Override public boolean supportsInputSeparation() { return true; diff --git a/src/main/java/gregtech/api/util/OutputHatchWrapper.java b/src/main/java/gregtech/api/util/OutputHatchWrapper.java index 55f467198a1..d570780317e 100644 --- a/src/main/java/gregtech/api/util/OutputHatchWrapper.java +++ b/src/main/java/gregtech/api/util/OutputHatchWrapper.java @@ -62,4 +62,9 @@ public boolean isEmptyAndAcceptsAnyFluid() { public boolean canStoreFluid(@NotNull FluidStack fluidStack) { return outputHatch.canStoreFluid(fluidStack) && filter.test(fluidStack); } + + @Override + public int getAvailableSpace() { + return outputHatch.getAvailableSpace(); + } } diff --git a/src/main/java/gregtech/api/util/VoidProtectionHelper.java b/src/main/java/gregtech/api/util/VoidProtectionHelper.java index cf98e26b66d..227601113b1 100644 --- a/src/main/java/gregtech/api/util/VoidProtectionHelper.java +++ b/src/main/java/gregtech/api/util/VoidProtectionHelper.java @@ -214,7 +214,7 @@ private void determineParallel() { return; } } - if (protectExcessFluid && fluidOutputs.length > 0 && !machine.canDumpFluidToME()) { + if (protectExcessFluid && fluidOutputs.length > 0) { maxParallel = Math.min(calculateMaxFluidParallels(), maxParallel); if (maxParallel <= 0) { isFluidFull = true; @@ -255,7 +255,7 @@ private int calculateMaxFluidParallels() { } for (IFluidStore tHatch : hatches) { - int tSpaceLeft = tHatch.getCapacity() - tHatch.getFluidAmount(); + int tSpaceLeft = tHatch.getAvailableSpace(); // check if hatch filled if (tSpaceLeft <= 0) continue; @@ -289,7 +289,7 @@ private int calculateMaxFluidParallels() { ParallelStackInfo tParallel = aParallelQueue.poll(); assert tParallel != null; // will always be true, specifying assert here to avoid IDE/compiler warnings Integer tCraftSize = tFluidOutputMap.get(tParallel.stack); - int tSpaceLeft = tHatch.getCapacity(); + int tSpaceLeft = tHatch.getAvailableSpace(); tParallel.batch += (tParallel.partial + tSpaceLeft) / tCraftSize; tParallel.partial = (tParallel.partial + tSpaceLeft) % tCraftSize; aParallelQueue.add(tParallel); diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java index 7ddf136a728..b502ad54d39 100644 --- a/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java +++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java @@ -160,6 +160,16 @@ public boolean canAcceptFluid() { return getCachedAmount() < getCacheCapacity(); } + /** + * Get the available fluid space, up to max int. + */ + @Override + public int getAvailableSpace() { + long availableSpace = getCacheCapacity() - getCachedAmount(); + if (availableSpace > Integer.MAX_VALUE) availableSpace = Integer.MAX_VALUE; + return (int) availableSpace; + } + /** * Attempt to store fluid in connected ME network. Returns how much fluid is accepted (if the network was down e.g.) * diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java index 93b64c16a80..bbba029449f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java @@ -47,7 +47,6 @@ 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 { @@ -293,15 +292,6 @@ protected void addFluidOutputs(FluidStack[] outputFluids) { } } - @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); 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 index 46a8d8fe3d2..81a8c125735 100644 --- 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 @@ -53,7 +53,6 @@ import gregtech.api.util.GTUtility; import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.common.pollution.PollutionConfig; -import gregtech.common.tileentities.machines.MTEHatchOutputME; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; @@ -435,15 +434,6 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } } - @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) { if (mUpgraded) aNBT.setBoolean("mUpgraded", true); 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 index 5be58010970..9e902d666a9 100644 --- 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 @@ -47,6 +47,7 @@ import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.api.util.OverclockCalculator; import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.tileentities.machines.MTEHatchOutputME; import gtPlusPlus.api.recipe.GTPPRecipeMaps; import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.core.material.MaterialsElements; @@ -259,7 +260,8 @@ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBu public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { mCasing = 0; if (checkPiece(mName, 3, 3, 0) && mCasing >= 27) { - if ((mOutputHatches.size() >= 3 || canDumpFluidToME()) && !mInputHatches.isEmpty() + if ((mOutputHatches.size() >= 3 || mOutputHatches.stream() + .anyMatch(h -> h instanceof MTEHatchOutputME)) && !mInputHatches.isEmpty() && mDynamoHatches.size() == 4 && mMufflerHatches.size() == 4) { this.turnCasingActive(false); From 30314666f7c0b49aae2a81d2d5483a41b69ca4d2 Mon Sep 17 00:00:00 2001 From: Mike_be <48237322+Miklebe@users.noreply.github.com> Date: Sun, 1 Dec 2024 19:24:17 +0400 Subject: [PATCH 059/181] Fix scanning calculations/optimal flow metrics of turbines (#3574) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../machines/multi/MTELargeTurbine.java | 3 ++- .../production/turbines/MTELargeTurbineGas.java | 5 +++++ .../production/turbines/MTELargeTurbineSCSteam.java | 5 +++++ .../production/turbines/MTELargeTurbineSHSteam.java | 5 +++++ .../production/turbines/MTELargeTurbineSteam.java | 5 +++++ .../production/turbines/MTELargerTurbineBase.java | 13 +++++++++---- .../production/turbines/MTELargerTurbinePlasma.java | 5 +++++ 7 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java index 43086c33403..93a51a94fd7 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java @@ -437,7 +437,8 @@ public String[] getInfoData() { + EnumChatFormatting.YELLOW + GTUtility.formatNumbers(GTUtility.safeInt((long) realOptFlow)) + EnumChatFormatting.RESET - + " L/t" + + " L/" // based on processing time uses ticks or seconds (for plasma) + + (this.mMaxProgresstime == 1 ? 't' : 's') + /* 4 */ EnumChatFormatting.YELLOW + " (" + (looseFit ? StatCollector.translateToLocal("GT5U.turbine.loose") 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 index 1e44eb95c37..92bc764475e 100644 --- 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 @@ -193,4 +193,9 @@ protected String getTurbineType() { protected String getCasingName() { return "Reinforced Gas Turbine Casing"; } + + @Override + protected boolean isDenseSteam() { + return false; + } } 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 index fddacc56627..82bc4a59c9e 100644 --- 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 @@ -157,4 +157,9 @@ protected String getTurbineType() { protected String getCasingName() { return "Reinforced SC Turbine Casing"; } + + @Override + protected boolean isDenseSteam() { + return isUsingDenseSteam; + } } 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 index 5fbcb237fd6..4ca2b5832e9 100644 --- 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 @@ -172,4 +172,9 @@ protected String getTurbineType() { protected String getCasingName() { return "Reinforced HP Steam Turbine Casing"; } + + @Override + protected boolean isDenseSteam() { + return isUsingDenseSteam; + } } 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 index 6445e2ad238..38c2b7160a9 100644 --- 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 @@ -183,4 +183,9 @@ protected String getTurbineType() { protected String getCasingName() { return "Reinforced Steam Turbine Casing"; } + + @Override + protected boolean isDenseSteam() { + return isUsingDenseSteam; + } } 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 index e96493351eb..63172448985 100644 --- 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 @@ -139,6 +139,8 @@ public MTELargerTurbineBase(String aName) { protected abstract String getCasingName(); + protected abstract boolean isDenseSteam(); + protected abstract boolean requiresOutputHatch(); @Override @@ -152,6 +154,8 @@ protected final MultiblockTooltipBuilder createTooltip() { 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)"); + } else if (getTurbineType().contains("Steam")) { + tt.addInfo("Dense types of steam are so energy packed, they only require 1/1000th of the original flow"); } tt.addTecTechHatchInfo(); tt.addPollutionAmount(getPollutionPerSecond(null)) @@ -609,11 +613,12 @@ public String[] getExtraInfoData() { + GTUtility.formatNumbers(maxEnergy) + EnumChatFormatting.RESET + " EU", - StatCollector.translateToLocal("GT5U.turbine.flow") + ": " - + EnumChatFormatting.YELLOW - + GTUtility.formatNumbers(MathUtils.safeInt((long) realOptFlow)) + StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + EnumChatFormatting.YELLOW + // Divides optimal flow by 1000 if it's a dense steam + + GTUtility.formatNumbers(MathUtils.safeInt((long) realOptFlow) / (isDenseSteam() ? 1000 : 1)) + EnumChatFormatting.RESET - + " L/s" + + " L/" + + (getTurbineType().equals("Plasma") ? 's' : 't') // based on turbine type changes flow timing + EnumChatFormatting.YELLOW + " (" + (isLooseMode() ? StatCollector.translateToLocal("GT5U.turbine.loose") diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbinePlasma.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbinePlasma.java index 4f3626e7cdf..59ae72cf0c4 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbinePlasma.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbinePlasma.java @@ -285,4 +285,9 @@ protected String getTurbineType() { protected String getCasingName() { return "Reinforced Plasma Turbine Casing"; } + + @Override + protected boolean isDenseSteam() { + return false; + } } From 7a794d73cce94c96f86855d7d8596fe0c1dded09 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sun, 1 Dec 2024 10:02:46 -0600 Subject: [PATCH 060/181] Fix Iron III Chloride chemical formula tooltip (#3587) --- src/main/java/gregtech/loaders/materials/MaterialsInit1.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/loaders/materials/MaterialsInit1.java b/src/main/java/gregtech/loaders/materials/MaterialsInit1.java index a614cbddb87..df57d074af4 100644 --- a/src/main/java/gregtech/loaders/materials/MaterialsInit1.java +++ b/src/main/java/gregtech/loaders/materials/MaterialsInit1.java @@ -684,7 +684,7 @@ public static void load() { Materials.Cumene = new MaterialBuilder(688, TextureSet.SET_FLUID , "Isopropylbenzene").addCell().addFluid().setRGB(85, 34, 0).setColor(Dyes.dyeBrown).setMaterialList(new MaterialStack(Carbon, 9), new MaterialStack(Hydrogen, 12)).addElectrolyzerRecipe().constructMaterial(); Materials.PhosphoricAcid = new MaterialBuilder(689, TextureSet.SET_FLUID , "Phosphoric Acid").setName("PhosphoricAcid_GT5U").addCell().addFluid().setRGB(220, 220, 0).setColor(Dyes.dyeYellow).setMaterialList(new MaterialStack(Hydrogen, 3), new MaterialStack(Phosphorus, 1), new MaterialStack(Oxygen, 4)).constructMaterial(); Materials.SaltWater = new MaterialBuilder(692, TextureSet.SET_FLUID , "Salt Water").addCell().addFluid().setRGB(0, 0, 200).setColor(Dyes.dyeBlue).constructMaterial(); - Materials.IronIIIChloride = new MaterialBuilder(693, TextureSet.SET_FLUID , "Iron III Chloride").setName("IronIIIChloride").addCell().addFluid().setRGB(22, 21, 14).setColor(Dyes.dyeBlack).setMaterialList(new MaterialStack(Chlorine, 3), new MaterialStack(Iron, 1)).addElectrolyzerRecipe().constructMaterial(); + Materials.IronIIIChloride = new MaterialBuilder(693, TextureSet.SET_FLUID , "Iron III Chloride").setName("IronIIIChloride").addCell().addFluid().setRGB(22, 21, 14).setColor(Dyes.dyeBlack).setMaterialList(new MaterialStack(Iron, 1), new MaterialStack(Chlorine, 3)).addElectrolyzerRecipe().constructMaterial(); Materials.LifeEssence = new MaterialBuilder(694, TextureSet.SET_FLUID , "Life").setName("lifeessence").addCell().addFluid().setFuelPower(100).setFuelType(5).setRGB(110, 3, 3).setColor(Dyes.dyeRed).setMaterialList().constructMaterial(); Materials.RoastedCopper = new MaterialBuilder(546, TextureSet.SET_DULL , "Roasted Copper").setName("RoastedCopper").addDustItems().setRGB(77, 18, 18).constructMaterial(); From 01d44c50d130eb4df7cad5c6718d264e1496d090 Mon Sep 17 00:00:00 2001 From: Alexander Anishin Date: Sun, 1 Dec 2024 21:26:29 +0300 Subject: [PATCH 061/181] Fix crystal seeds recipes (#3588) --- .../postload/recipes/AssemblerRecipes.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java index 212943ba7c2..13a86c66a99 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java @@ -1472,29 +1472,41 @@ public void run() { .eut(TierEU.RECIPE_LV) .addTo(assemblerRecipes); + final ItemStack certusQuartzSeed = getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 0); + NBTTagCompound certusQuartzTag = new NBTTagCompound(); + certusQuartzTag.setInteger("progress", 0); + certusQuartzSeed.setTagCompound(certusQuartzTag); GTValues.RA.stdBuilder() .itemInputs( GTOreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 1), new ItemStack(Blocks.sand, 1, 32767)) - .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 0)) + .itemOutputs(certusQuartzSeed) .duration(3 * SECONDS + 4 * TICKS) .eut(8) .addTo(assemblerRecipes); + final ItemStack netherQuartzSeed = getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 600); + NBTTagCompound netherQuartzTag = new NBTTagCompound(); + netherQuartzTag.setInteger("progress", 600); + netherQuartzSeed.setTagCompound(netherQuartzTag); GTValues.RA.stdBuilder() .itemInputs( GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 1), new ItemStack(Blocks.sand, 1, 32767)) - .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 600)) + .itemOutputs(netherQuartzSeed) .duration(3 * SECONDS + 4 * TICKS) .eut(8) .addTo(assemblerRecipes); + final ItemStack fluixSeed = getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 1200); + NBTTagCompound fluixTag = new NBTTagCompound(); + fluixTag.setInteger("progress", 1200); + fluixSeed.setTagCompound(fluixTag); GTValues.RA.stdBuilder() .itemInputs( GTOreDictUnificator.get(OrePrefixes.dust, Materials.Fluix, 1), new ItemStack(Blocks.sand, 1, 32767)) - .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 1200)) + .itemOutputs(fluixSeed) .duration(3 * SECONDS + 4 * TICKS) .eut(8) .addTo(assemblerRecipes); From d8e2450d0b8897dc54b91ea63022ef7631e29fc9 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sun, 1 Dec 2024 19:30:46 +0100 Subject: [PATCH 062/181] update --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 341a614c0a1..2f96f28ab4b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -36,7 +36,7 @@ dependencies { api("com.github.GTNewHorizons:StructureLib:1.3.6:dev") api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") - api("com.github.GTNewHorizons:NotEnoughItems:2.6.47-GTNH:dev") + api("com.github.GTNewHorizons:NotEnoughItems:2.6.48-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") api("com.github.GTNewHorizons:GTNHLib:0.5.21:dev") api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") @@ -80,7 +80,7 @@ dependencies { compileOnly rfg.deobf("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:Nuclear-Control:2.6.7:dev") { transitive = false } compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") { transitive = false } - implementation("com.github.GTNewHorizons:Hodgepodge:2.5.81:dev") + implementation("com.github.GTNewHorizons:Hodgepodge:2.5.82:dev") compileOnly('com.github.GTNewHorizons:Botania:1.11.5-GTNH:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:HoloInventory:2.4.13-GTNH:dev') { transitive = false } compileOnly rfg.deobf("curse.maven:extra-utilities-225561:2264384") From 4fb7e58e4efca41f7cde058be8b06a4389bd0a9c Mon Sep 17 00:00:00 2001 From: RecursivePineapple Date: Sun, 1 Dec 2024 13:41:33 -0500 Subject: [PATCH 063/181] Fixed infinite oil rig getting stuck (#3589) --- .../machines/multi/MTEOilDrillBase.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java index 8e1c170fb4e..f47ec621b3b 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java @@ -30,7 +30,6 @@ 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; @@ -62,7 +61,7 @@ public abstract class MTEOilDrillBase extends MTEDrillerBase implements IMetricsExporter { private final ArrayList mOilFieldChunks = new ArrayList<>(); - private int mOilId = 0; + private Fluid mOil = null; private int mOilFlow = 0; private int chunkRangeConfig = getRangeInChunks(); @@ -104,14 +103,12 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec @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"); } @@ -235,16 +232,16 @@ protected boolean workingAtBottom(ItemStack aStack, int xDrill, int yDrill, int private boolean tryFillChunkList() { FluidStack tFluid, tOil; - if (mOilId <= 0) { + if (mOil == null) { tFluid = undergroundOilReadInformation(getBaseMetaTileEntity()); if (tFluid == null) return false; - mOilId = tFluid.getFluidID(); + mOil = tFluid.getFluid(); } if (debugDriller) { - GTLog.out.println(" Driller on fluid = " + mOilId); + GTLog.out.println(" Driller on fluid = " + mOil == null ? null : mOil.getName()); } - tOil = new FluidStack(FluidRegistry.getFluid(mOilId), 0); + tOil = new FluidStack(mOil, 0); if (mOilFieldChunks.isEmpty()) { Chunk tChunk = getBaseMetaTileEntity().getWorld() @@ -300,7 +297,7 @@ private boolean tryFillChunkList() { * If vein is depleted, it returns a result with VALID and null fluid. */ protected ValidationResult tryPumpOil(float speed) { - if (mOilId <= 0) return null; + if (mOil == null) return null; if (debugDriller) { GTLog.out.println(" pump speed = " + speed); } @@ -330,7 +327,7 @@ protected FluidStack pumpOil(@Nonnegative float speed, boolean simulate) { } ArrayList emptyChunks = new ArrayList<>(); - FluidStack returnOil = new FluidStack(FluidRegistry.getFluid(mOilId), 0); + FluidStack returnOil = new FluidStack(mOil, 0); for (Chunk tChunk : mOilFieldChunks) { FluidStack pumped = undergroundOil(tChunk, simulate ? -speed : speed); @@ -430,9 +427,8 @@ protected int getFlowRatePerTick() { @NotNull private String getFluidName() { - if (mOilId > 0) { - final Fluid fluid = FluidRegistry.getFluid(mOilId); - return fluid.getLocalizedName(new FluidStack(fluid, 0)); + if (mOil != null) { + return mOil.getLocalizedName(new FluidStack(mOil, 0)); } return "None"; } From ed2492f3050d3b9a6226b484127c0db6b0923fd9 Mon Sep 17 00:00:00 2001 From: Connor-Colenso <52056774+Connor-Colenso@users.noreply.github.com> Date: Mon, 2 Dec 2024 00:50:45 +0000 Subject: [PATCH 064/181] Extend render range (#3591) Co-authored-by: GTNH-Colen <54497873+GTNH-Colen@users.noreply.github.com> --- .../java/tectech/thing/block/TileEntityEyeOfHarmony.java | 5 +++++ src/main/java/tectech/thing/block/TileEntityForgeOfGods.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java b/src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java index 06873468536..d13be249b36 100644 --- a/src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java +++ b/src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java @@ -26,6 +26,11 @@ public class TileEntityEyeOfHarmony extends TileEntity { private static final double EOH_STAR_FIELD_RADIUS = 13; private AxisAlignedBB boundingBox; + @Override + public double getMaxRenderDistanceSquared() { + return Double.MAX_VALUE; + } + // Prevent culling when block is out of frame so model can remain active. @Override public AxisAlignedBB getRenderBoundingBox() { diff --git a/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java index 0e18b08667c..8bb274a8788 100644 --- a/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java +++ b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java @@ -59,7 +59,7 @@ public AxisAlignedBB getRenderBoundingBox() { @Override public double getMaxRenderDistanceSquared() { - return 51200; + return Double.MAX_VALUE; } public void setStarRadius(float size) { From 8380ef61ad9e688a2d05a9db70aa55b54288fae6 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sun, 1 Dec 2024 19:12:24 -0600 Subject: [PATCH 065/181] Add proper render bounding box for Godforge (#3593) --- .../thing/block/TileEntityForgeOfGods.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java index 8bb274a8788..aac0c245e0d 100644 --- a/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java +++ b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java @@ -25,6 +25,7 @@ public class TileEntityForgeOfGods extends TileEntity { private float rotationSpeed = 10; private int ringCount = 1; private float rotAngle = 0, rotAxisX = 1, rotAxisY = 0, rotAxisZ = 0; + private AxisAlignedBB renderBoundingBox; private ForgeOfGodsStarColor starColor = ForgeOfGodsStarColor.DEFAULT; @@ -51,10 +52,28 @@ public class TileEntityForgeOfGods extends TileEntity { private static final String STAR_COLOR_TAG = NBT_TAG + "STAR_COLOR"; public static final float BACK_PLATE_DISTANCE = -121.5f, BACK_PLATE_RADIUS = 13f; + private static final double RING_RADIUS = 63; + private static final double BEAM_LENGTH = 59; @Override public AxisAlignedBB getRenderBoundingBox() { - return INFINITE_EXTENT_AABB; + if (renderBoundingBox == null) { + double x = this.xCoord; + double y = this.yCoord; + double z = this.zCoord; + + // This could possibly be made smaller by figuring out the beam direction, + // but since this is not always known (set dynamically by the MTE), this + // currently just bounds as if the beam is in all 4 directions. + renderBoundingBox = AxisAlignedBB.getBoundingBox( + x - RING_RADIUS - BEAM_LENGTH, + y - RING_RADIUS - BEAM_LENGTH, + z - RING_RADIUS - BEAM_LENGTH, + x + RING_RADIUS + BEAM_LENGTH + 1, + y + RING_RADIUS + BEAM_LENGTH + 1, + z + RING_RADIUS + BEAM_LENGTH + 1); + } + return renderBoundingBox; } @Override From 62b6fc8498d754ae388f92b933b656da5f38dee0 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Mon, 2 Dec 2024 08:12:05 -0600 Subject: [PATCH 066/181] Fix ME output hatch void protection again (#3594) --- .../test/mock/MockIVoidableMachine.java | 5 ++++ .../multis/mega/MTEMegaDistillTower.java | 27 +++++++++++++++++++ .../api/interfaces/fluid/IFluidStore.java | 7 ----- .../api/interfaces/tileentity/IVoidable.java | 7 +++++ .../implementations/MTEMultiBlockBase.java | 18 +++++++++++++ .../multiblock/base/Controller.java | 5 ++++ .../gregtech/api/util/OutputHatchWrapper.java | 5 ++-- .../api/util/VoidProtectionHelper.java | 23 +++++++++++++--- .../machines/MTEHatchOutputME.java | 10 ------- .../machines/multi/MTEDistillationTower.java | 10 +++++++ .../advanced/MTEAdvDistillationTower.java | 10 +++++++ .../multi/production/MTENuclearReactor.java | 4 +-- 12 files changed, 105 insertions(+), 26 deletions(-) diff --git a/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java b/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java index 86db9e0f4a4..4796d1d3ee2 100644 --- a/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java +++ b/src/functionalTest/java/gregtech/test/mock/MockIVoidableMachine.java @@ -43,6 +43,11 @@ public boolean canDumpItemToME() { return false; } + @Override + public boolean canDumpFluidToME() { + return false; + } + @Override public VoidingMode getDefaultVoidingMode() { return VoidingMode.VOID_ALL; diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java index e98158ec7fa..4c3199f33f2 100644 --- a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java @@ -56,6 +56,7 @@ 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 { @@ -391,6 +392,32 @@ protected ProcessingLogic createProcessingLogic() { return new ProcessingLogic().setMaxParallel(Configuration.Multiblocks.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[] outputFluids) { for (int i = 0; i < outputFluids.length && i < this.mOutputHatchesByLayer.size(); i++) { diff --git a/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java b/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java index 5b5bb08c875..047cf4df5b4 100644 --- a/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java +++ b/src/main/java/gregtech/api/interfaces/fluid/IFluidStore.java @@ -19,11 +19,4 @@ public interface IFluidStore extends IFluidTank { * @return Whether to allow given fluid to be inserted into this. */ boolean canStoreFluid(@Nonnull FluidStack fluidStack); - - /** - * @return The amount of fluid that can be stored in this. - */ - default int getAvailableSpace() { - return getCapacity() - getFluidAmount(); - } } diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java b/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java index f55d71debcc..841fd07bbad 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java @@ -79,4 +79,11 @@ default int getFluidOutputLimit() { * as this might be called every tick and cause lag. */ boolean canDumpItemToME(); + + /** + * @return If this machine has ability to dump fluid outputs to ME network. + * This doesn't need to check if it can actually dump to ME, + * as this might be called every tick and cause lag. + */ + boolean canDumpFluidToME(); } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index 2a5e3c15527..4a8f69fe9a2 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -109,6 +109,7 @@ 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; @@ -1321,6 +1322,11 @@ protected static boolean dumpFluid(List aOutputHatches, FluidSta continue; } if (!tHatch.canStoreFluid(copiedFluidStack)) continue; + + if (tHatch instanceof MTEHatchOutputME tMEHatch) { + if (!tMEHatch.canAcceptFluid()) continue; + } + int tAmount = tHatch.fill(copiedFluidStack, false); if (tAmount >= copiedFluidStack.amount) { boolean filled = tHatch.fill(copiedFluidStack, true) >= copiedFluidStack.amount; @@ -2289,6 +2295,18 @@ public boolean canDumpItemToME() { 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); 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 c0fb6cedb48..d6b4ef7fe3b 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java @@ -914,6 +914,11 @@ public boolean canDumpItemToME() { return false; } + @Override + public boolean canDumpFluidToME() { + return false; + } + @Override public boolean supportsInputSeparation() { return true; diff --git a/src/main/java/gregtech/api/util/OutputHatchWrapper.java b/src/main/java/gregtech/api/util/OutputHatchWrapper.java index d570780317e..5c3d64f9384 100644 --- a/src/main/java/gregtech/api/util/OutputHatchWrapper.java +++ b/src/main/java/gregtech/api/util/OutputHatchWrapper.java @@ -63,8 +63,7 @@ public boolean canStoreFluid(@NotNull FluidStack fluidStack) { return outputHatch.canStoreFluid(fluidStack) && filter.test(fluidStack); } - @Override - public int getAvailableSpace() { - return outputHatch.getAvailableSpace(); + public MTEHatchOutput unwrap() { + return outputHatch; } } diff --git a/src/main/java/gregtech/api/util/VoidProtectionHelper.java b/src/main/java/gregtech/api/util/VoidProtectionHelper.java index 227601113b1..97728d14fd6 100644 --- a/src/main/java/gregtech/api/util/VoidProtectionHelper.java +++ b/src/main/java/gregtech/api/util/VoidProtectionHelper.java @@ -17,6 +17,7 @@ import gregtech.api.interfaces.tileentity.IVoidable; import gregtech.api.logic.FluidInventoryLogic; import gregtech.api.logic.ItemInventoryLogic; +import gregtech.common.tileentities.machines.MTEHatchOutputME; /** * Helper class to calculate how many parallels of items / fluids can fit in the output buses / hatches. @@ -214,7 +215,7 @@ private void determineParallel() { return; } } - if (protectExcessFluid && fluidOutputs.length > 0) { + if (protectExcessFluid && fluidOutputs.length > 0 && !machine.canDumpFluidToME()) { maxParallel = Math.min(calculateMaxFluidParallels(), maxParallel); if (maxParallel <= 0) { isFluidFull = true; @@ -255,7 +256,14 @@ private int calculateMaxFluidParallels() { } for (IFluidStore tHatch : hatches) { - int tSpaceLeft = tHatch.getAvailableSpace(); + int tSpaceLeft; + if (tHatch instanceof MTEHatchOutputME tMEHatch) { + tSpaceLeft = tMEHatch.canAcceptFluid() ? Integer.MAX_VALUE : 0; + } else if (tHatch instanceof OutputHatchWrapper w && w.unwrap() instanceof MTEHatchOutputME tMEHatch) { + tSpaceLeft = tMEHatch.canAcceptFluid() ? Integer.MAX_VALUE : 0; + } else { + tSpaceLeft = tHatch.getCapacity() - tHatch.getFluidAmount(); + } // check if hatch filled if (tSpaceLeft <= 0) continue; @@ -289,7 +297,16 @@ private int calculateMaxFluidParallels() { ParallelStackInfo tParallel = aParallelQueue.poll(); assert tParallel != null; // will always be true, specifying assert here to avoid IDE/compiler warnings Integer tCraftSize = tFluidOutputMap.get(tParallel.stack); - int tSpaceLeft = tHatch.getAvailableSpace(); + + int tSpaceLeft; + if (tHatch instanceof MTEHatchOutputME tMEHatch) { + tSpaceLeft = tMEHatch.canAcceptFluid() ? Integer.MAX_VALUE : 0; + } else if (tHatch instanceof OutputHatchWrapper w && w.unwrap() instanceof MTEHatchOutputME tMEHatch) { + tSpaceLeft = tMEHatch.canAcceptFluid() ? Integer.MAX_VALUE : 0; + } else { + tSpaceLeft = tHatch.getCapacity(); + } + tParallel.batch += (tParallel.partial + tSpaceLeft) / tCraftSize; tParallel.partial = (tParallel.partial + tSpaceLeft) % tCraftSize; aParallelQueue.add(tParallel); diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java index b502ad54d39..7ddf136a728 100644 --- a/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java +++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java @@ -160,16 +160,6 @@ public boolean canAcceptFluid() { return getCachedAmount() < getCacheCapacity(); } - /** - * Get the available fluid space, up to max int. - */ - @Override - public int getAvailableSpace() { - long availableSpace = getCacheCapacity() - getCachedAmount(); - if (availableSpace > Integer.MAX_VALUE) availableSpace = Integer.MAX_VALUE; - return (int) availableSpace; - } - /** * Attempt to store fluid in connected ME network. Returns how much fluid is accepted (if the network was down e.g.) * diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java index bbba029449f..93b64c16a80 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java @@ -47,6 +47,7 @@ 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 { @@ -292,6 +293,15 @@ protected void addFluidOutputs(FluidStack[] outputFluids) { } } + @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); 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 index 81a8c125735..46a8d8fe3d2 100644 --- 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 @@ -53,6 +53,7 @@ import gregtech.api.util.GTUtility; import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.common.pollution.PollutionConfig; +import gregtech.common.tileentities.machines.MTEHatchOutputME; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; @@ -434,6 +435,15 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } } + @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) { if (mUpgraded) aNBT.setBoolean("mUpgraded", true); 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 index 9e902d666a9..5be58010970 100644 --- 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 @@ -47,7 +47,6 @@ import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.api.util.OverclockCalculator; import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.tileentities.machines.MTEHatchOutputME; import gtPlusPlus.api.recipe.GTPPRecipeMaps; import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.core.material.MaterialsElements; @@ -260,8 +259,7 @@ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBu public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { mCasing = 0; if (checkPiece(mName, 3, 3, 0) && mCasing >= 27) { - if ((mOutputHatches.size() >= 3 || mOutputHatches.stream() - .anyMatch(h -> h instanceof MTEHatchOutputME)) && !mInputHatches.isEmpty() + if ((mOutputHatches.size() >= 3 || canDumpFluidToME()) && !mInputHatches.isEmpty() && mDynamoHatches.size() == 4 && mMufflerHatches.size() == 4) { this.turnCasingActive(false); From 8255fe87826cf3fa5853d7ffc402ad275b4bd517 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Tue, 3 Dec 2024 09:19:37 -0600 Subject: [PATCH 067/181] Fix missing null check in output fluids UI info (#3596) --- .../implementations/MTEMultiBlockBase.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index 4a8f69fe9a2..940b561d99b 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -2702,12 +2702,15 @@ && getBaseMetaTileEntity().wasShutdown())) .widget( new FakeSyncWidget.ListSyncer<>( () -> mOutputFluids != null ? Arrays.stream(mOutputFluids) - .map(fluidStack -> new FluidStack(fluidStack, fluidStack.amount) { - - @Override - public boolean isFluidEqual(FluidStack other) { - return super.isFluidEqual(other) && amount == other.amount; - } + .map(fluidStack -> { + if (fluidStack == null) return null; + return new FluidStack(fluidStack, fluidStack.amount) { + + @Override + public boolean isFluidEqual(FluidStack other) { + return super.isFluidEqual(other) && amount == other.amount; + } + }; }) .collect(Collectors.toList()) : Collections.emptyList(), val -> mOutputFluids = val.toArray(new FluidStack[0]), From b54f808975abab5c3545f7e126caf2e19c77c4e5 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Tue, 3 Dec 2024 10:31:58 -0600 Subject: [PATCH 068/181] Fix ME output hatch partial voiding multi fluid output (#3597) --- .../gregtech/common/tileentities/machines/MTEHatchOutputME.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java index 7ddf136a728..a9208d0e63a 100644 --- a/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java +++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java @@ -157,7 +157,7 @@ private long getCacheCapacity() { * Check if the internal cache can still fit more fluids in it */ public boolean canAcceptFluid() { - return getCachedAmount() < getCacheCapacity(); + return getCachedAmount() < getCacheCapacity() || lastInputTick == tickCounter; } /** From 605ebe3c1a1d18ba0c63913d8a4ad09c2e697fd7 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Tue, 3 Dec 2024 21:52:04 +0100 Subject: [PATCH 069/181] update --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 2f96f28ab4b..9a5b3738e78 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -58,7 +58,7 @@ dependencies { compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.54:dev") - compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta23:api') { transitive = false } + compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta24:api') { transitive = false } compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.4:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.8.22:dev") { transitive = false } From cce3f6745266e77589eb06f7f75875179e2fa101 Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Tue, 3 Dec 2024 16:45:45 -0500 Subject: [PATCH 070/181] Add an animated texture to brewery multi (#3598) --- .../iconsets/OVERLAY_FRONT_MULTI_BREWERY.png | Bin 254 -> 242 bytes .../OVERLAY_FRONT_MULTI_BREWERY_ACTIVE.png | Bin 255 -> 412 bytes ...VERLAY_FRONT_MULTI_BREWERY_ACTIVE.png.mcmeta | 5 +++++ .../OVERLAY_FRONT_MULTI_BREWERY_ACTIVE_GLOW.png | Bin 255 -> 280 bytes ...Y_FRONT_MULTI_BREWERY_ACTIVE_GLOW.png.mcmeta | 5 +++++ .../OVERLAY_FRONT_MULTI_BREWERY_GLOW.png | Bin 256 -> 147 bytes 6 files changed, 10 insertions(+) create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_MULTI_BREWERY_ACTIVE.png.mcmeta create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_MULTI_BREWERY_ACTIVE_GLOW.png.mcmeta diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_MULTI_BREWERY.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_MULTI_BREWERY.png index 6092ec4c180d0e05ffac7183e90cdf5a5f4a9b54..41faf024689d0c525df54c7a21c3580b202cce79 100644 GIT binary patch delta 214 zcmV;{04e|e0rCNmB!2;OQb$4nuFf3k00022Nkl zz`bz&%0-5&zx?oOW?*1oSh!c3!AyJ`oXg8hs QLjV8(07*qoM6N<$g6p1Il>h($ delta 226 zcmV<803HAG0saAyB!9(8L_t(I%cYY|4#FT1h36VBnz&$R7bHYB)@o8CSFpF?XxwaM zz#$Dk25pm-u8_|DX;QBB8Mf_I0r@F>Q*#DAZ8V3t c`)B%BZ=QSGx43|cvj6}907*qoM6N<$fPx$R!KxbR9J;$U>F4y z14eX#5P#SI_%y89xEn7LK7boE+CCTsGzG(;JYXWE897J7D%PDHLkV1kKEtOfu8 delta 240 zcmV~41^@s6AM^iV0002SNkl#0LBIRInMId82EwhG|8oN2}pwALX;$!M#9RQMA0 zp!o!szTX6S2~8)UWDY=|s|@%g6M%YvbH{rjM6kv0ptK8@l(G)MhxcWHIQyH4zSc)b q%P9i*6uzn2gO)O?P2Bx6{i`>6{N9C@fDo_%0000CTd0i diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_MULTI_BREWERY_ACTIVE.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_MULTI_BREWERY_ACTIVE.png.mcmeta new file mode 100644 index 00000000000..506cb885792 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_MULTI_BREWERY_ACTIVE.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":4 + } +} diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_MULTI_BREWERY_ACTIVE_GLOW.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_MULTI_BREWERY_ACTIVE_GLOW.png index 3bb29bbda660983e1c67cc3af70b987d72a8b374..cbdd48cac748bda57ac6a4ca0c664d656394bb0f 100644 GIT binary patch delta 266 zcmey*ID=_|czpl|8v_G_!0NBOK#H+A$lZxy-8q?;K+Yvk7srr@*5m{U*24@2Ny0tZ zcmB)I{;{aao#(3r(+-ozMlGEpXL*3&AnWeHD+UjPI(Tbp|Fb*yWau9-SwHtd*P`|W z1*O|v>ncThnhr9%oo3dW!Y-lL@YC=@B;z{4>CXZUxa!&XCEh({)Nwz=aPz6-g3U~a zCz+N@NJzNdW?!6egQ@E@bI+ZQb&{6uNyZY{l?`h$|K4NQkm}IlzhIhJ%*)gBP2BCE zMgzkfPfMVg%E5tm>^Mro5;(R59+^9{BU2va9@Svpn)<{oHVFv~46OQ#`8=;Or2)Oi O;OXk;vX0p)p$P!rQ)3qZ delta 240 zcmV~41^@s6AM^iV0002SNklz&J8-ZEgYLh zjj4e9IzO}IjS#P9${4loGbz4OX+}DG6T2=GGmU!SM2a-iD&S^3uui)N>N8`=v zT34J53_6lO?N<7YwhRyvwkSHrn4h!)IOn3;wq@Oh0nUA&jb#Cc%bo>SfL+soEQ(DF zSssvLD*#a?IR#KGgn-_ABwGYXvH(t92i97SNix|YU@6)pJzc0i!L$Qe@TzlJLe&W* zIR%iPDi4^G1t2}3xzn>!if#5D From 2b8ee22c462e858cd81a15ac4c34a8a39e89137d Mon Sep 17 00:00:00 2001 From: lordIcocain <62835225+lordIcocain@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:41:48 +0200 Subject: [PATCH 071/181] Fix uxv wrap recipe (#3599) --- .../goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java b/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java index 5054a779ef8..d94bf5f59ee 100644 --- a/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java +++ b/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java @@ -443,7 +443,7 @@ private static void generateWrapRecipes() { .addTo(assemblerRecipes); GTValues.RA.stdBuilder() .itemInputs( - GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 16), GTUtility.getIntegratedCircuit(16)) .fluidInputs(Materials.SolderingAlloy.getMolten(72L)) .itemOutputs(new ItemStack(Loaders.circuitWrap, 1, 13)) From 7dfbab936972404d24788197a4c010bb39cc43c3 Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Thu, 5 Dec 2024 18:15:00 +0800 Subject: [PATCH 072/181] try fix NPE in yotta tank (#3600) --- .../goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java index 9a304a82d2d..85bc452160b 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java @@ -56,6 +56,7 @@ import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.SimpleCheckRecipeResult; import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; import gregtech.api.util.MultiblockTooltipBuilder; import tectech.TecTech; import tectech.thing.gui.TecTechUITextures; @@ -253,8 +254,7 @@ public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { cacheNeedsRecreation = !tankInfoCache[0].fluid.isFluidEqual(mFluid); } if (cacheNeedsRecreation) { - final FluidStack storedFluid = mFluid.copy(); - storedFluid.amount = fluidSize; + final FluidStack storedFluid = GTUtility.copyAmount(fluidSize, mFluid); tankInfoCache[0] = new FluidTankInfo(storedFluid, tankCapacity); } else if (mFluid != null) { tankInfoCache[0].fluid.amount = fluidSize; From 8347515969a5bb87e5900ba22e15e38fcec786bd Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:22:38 +0800 Subject: [PATCH 073/181] turbine overlay follow up (#3550) Co-authored-by: Martin Robertz --- .../regularBlock/BlockTurbineCasing.java | 61 ---- .../MTESupercriticalFluidTurbine.java | 4 + .../tileEntity/base/MTELargeTurbineBase.java | 92 +++++- .../gregtech/api/util/GTUtilityClient.java | 57 ++++ .../machines/multi/MTELargeTurbine.java | 53 +--- .../core/handler/PacketHandler.java | 2 + .../packet/PacketTurbineHatchUpdate.java | 122 ++++++++ .../implementations/MTEHatchTurbine.java | 160 +++++++---- .../blocks/textures/CasingTextureHandler.java | 10 +- .../TexturesCentrifugeMultiblock.java | 105 ------- .../blocks/textures/TexturesGtBlock.java | 24 -- .../turbine/LargeTurbineTextureHandler.java | 267 ------------------ .../processing/MTEIndustrialCentrifuge.java | 49 +++- .../turbines/MTELargerTurbineBase.java | 11 + .../blocks/iconsets/LARGECENTRIFUGE1.png | Bin 515 -> 0 bytes .../blocks/iconsets/LARGECENTRIFUGE2.png | Bin 507 -> 0 bytes .../blocks/iconsets/LARGECENTRIFUGE3.png | Bin 539 -> 0 bytes .../blocks/iconsets/LARGECENTRIFUGE4.png | Bin 546 -> 0 bytes .../blocks/iconsets/LARGECENTRIFUGE5.png | Bin 332 -> 0 bytes .../blocks/iconsets/LARGECENTRIFUGE6.png | Bin 530 -> 0 bytes .../blocks/iconsets/LARGECENTRIFUGE7.png | Bin 546 -> 0 bytes .../blocks/iconsets/LARGECENTRIFUGE8.png | Bin 511 -> 0 bytes .../blocks/iconsets/LARGECENTRIFUGE9.png | Bin 509 -> 0 bytes .../iconsets/LARGECENTRIFUGE_ACTIVE1.png | Bin 670 -> 0 bytes .../LARGECENTRIFUGE_ACTIVE1.png.mcmeta | 3 - .../iconsets/LARGECENTRIFUGE_ACTIVE2.png | Bin 863 -> 0 bytes .../LARGECENTRIFUGE_ACTIVE2.png.mcmeta | 3 - .../iconsets/LARGECENTRIFUGE_ACTIVE3.png | Bin 687 -> 0 bytes .../LARGECENTRIFUGE_ACTIVE3.png.mcmeta | 3 - .../iconsets/LARGECENTRIFUGE_ACTIVE4.png | Bin 944 -> 0 bytes .../LARGECENTRIFUGE_ACTIVE4.png.mcmeta | 3 - .../iconsets/LARGECENTRIFUGE_ACTIVE5.png | Bin 880 -> 0 bytes .../LARGECENTRIFUGE_ACTIVE5.png.mcmeta | 3 - .../iconsets/LARGECENTRIFUGE_ACTIVE6.png | Bin 955 -> 0 bytes .../LARGECENTRIFUGE_ACTIVE6.png.mcmeta | 3 - .../iconsets/LARGECENTRIFUGE_ACTIVE7.png | Bin 696 -> 0 bytes .../LARGECENTRIFUGE_ACTIVE7.png.mcmeta | 3 - .../iconsets/LARGECENTRIFUGE_ACTIVE8.png | Bin 866 -> 0 bytes .../LARGECENTRIFUGE_ACTIVE8.png.mcmeta | 3 - .../iconsets/LARGECENTRIFUGE_ACTIVE9.png | Bin 657 -> 0 bytes .../LARGECENTRIFUGE_ACTIVE9.png.mcmeta | 3 - .../textures/blocks/iconsets/SC_TURBINE1.png | Bin 565 -> 0 bytes .../blocks/iconsets/SC_TURBINE1.png.mcmeta | 3 - .../textures/blocks/iconsets/SC_TURBINE2.png | Bin 969 -> 0 bytes .../blocks/iconsets/SC_TURBINE2.png.mcmeta | 3 - .../textures/blocks/iconsets/SC_TURBINE3.png | Bin 650 -> 0 bytes .../blocks/iconsets/SC_TURBINE3.png.mcmeta | 3 - .../textures/blocks/iconsets/SC_TURBINE4.png | Bin 1079 -> 0 bytes .../blocks/iconsets/SC_TURBINE4.png.mcmeta | 3 - .../textures/blocks/iconsets/SC_TURBINE5.png | Bin 890 -> 0 bytes .../blocks/iconsets/SC_TURBINE5.png.mcmeta | 3 - .../textures/blocks/iconsets/SC_TURBINE6.png | Bin 1151 -> 0 bytes .../blocks/iconsets/SC_TURBINE6.png.mcmeta | 3 - .../textures/blocks/iconsets/SC_TURBINE7.png | Bin 628 -> 0 bytes .../blocks/iconsets/SC_TURBINE7.png.mcmeta | 3 - .../textures/blocks/iconsets/SC_TURBINE8.png | Bin 1009 -> 0 bytes .../blocks/iconsets/SC_TURBINE8.png.mcmeta | 3 - .../textures/blocks/iconsets/SC_TURBINE9.png | Bin 616 -> 0 bytes .../blocks/iconsets/SC_TURBINE9.png.mcmeta | 3 - .../blocks/iconsets/SC_TURBINE_IDEL1.png | Bin 342 -> 0 bytes .../blocks/iconsets/SC_TURBINE_IDEL2.png | Bin 461 -> 0 bytes .../blocks/iconsets/SC_TURBINE_IDEL3.png | Bin 383 -> 0 bytes .../blocks/iconsets/SC_TURBINE_IDEL4.png | Bin 485 -> 0 bytes .../blocks/iconsets/SC_TURBINE_IDEL5.png | Bin 413 -> 0 bytes .../blocks/iconsets/SC_TURBINE_IDEL6.png | Bin 486 -> 0 bytes .../blocks/iconsets/SC_TURBINE_IDEL7.png | Bin 392 -> 0 bytes .../blocks/iconsets/SC_TURBINE_IDEL8.png | Bin 456 -> 0 bytes .../blocks/iconsets/SC_TURBINE_IDEL9.png | Bin 364 -> 0 bytes 68 files changed, 442 insertions(+), 629 deletions(-) create mode 100644 src/main/java/gtPlusPlus/core/network/packet/PacketTurbineHatchUpdate.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesCentrifugeMultiblock.java delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE1.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE2.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE3.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE4.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE5.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE6.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE7.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE8.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE9.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE1.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE1.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE2.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE2.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE3.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE3.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE4.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE4.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE5.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE5.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE6.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE6.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE7.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE7.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE8.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE8.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE9.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE9.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE1.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE1.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE2.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE2.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE3.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE3.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE4.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE4.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE5.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE5.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE6.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE6.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE7.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE7.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE8.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE8.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE9.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE9.png.mcmeta delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL1.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL2.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL3.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL4.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL5.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL6.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL7.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL8.png delete mode 100644 src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL9.png diff --git a/src/main/java/goodgenerator/blocks/regularBlock/BlockTurbineCasing.java b/src/main/java/goodgenerator/blocks/regularBlock/BlockTurbineCasing.java index 38aeae89cdc..2638ae337e0 100644 --- a/src/main/java/goodgenerator/blocks/regularBlock/BlockTurbineCasing.java +++ b/src/main/java/goodgenerator/blocks/regularBlock/BlockTurbineCasing.java @@ -1,89 +1,28 @@ 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 tTile)) return 0; - 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); } diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java b/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java index 0a3ec6fc1a4..bc813f01498 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java @@ -138,6 +138,10 @@ public int getCasingTextureIndex() { return 1538; } + public boolean isNewStyleRendering() { + return true; + } + @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeTurbineBase.java b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeTurbineBase.java index 843a42ac806..75f234a9fbb 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeTurbineBase.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeTurbineBase.java @@ -6,18 +6,20 @@ 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.enums.Textures.BlockIcons.*; import static gregtech.api.util.GTStructureUtility.*; import static gregtech.api.util.GTUtility.validMTEList; import java.util.ArrayList; import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; 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.IBlockAccess; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; @@ -25,10 +27,11 @@ 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.IHatchElement; +import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.items.MetaGeneratedTool; import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; @@ -36,6 +39,7 @@ import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.util.GTUtility; +import gregtech.api.util.GTUtilityClient; import gregtech.api.util.TurbineStatCalculator; import gregtech.api.util.shutdown.ShutDownReasonRegistry; import gregtech.common.items.MetaGeneratedTool01; @@ -52,26 +56,20 @@ protected IStructureDefinition computeValue(Class type) .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", }, })) + 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(MTELargeTurbineBase.class) - .atLeast(Maintenance, InputHatch, OutputHatch, OutputBus, InputBus, Muffler) + t -> buildHatchAdder(MTELargeTurbineBase.class).atLeast(t.getHatchElements()) .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(); } }; @@ -85,6 +83,12 @@ protected IStructureDefinition computeValue(Class type) protected int overflowMultiplier = 0; protected long maxPower = 0; + // 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 MTELargeTurbineBase(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); } @@ -103,6 +107,25 @@ public IStructureDefinition getStructureDefinition() { return STRUCTURE_DEFINITION.get(getClass()); } + @SuppressWarnings("unchecked") + protected IHatchElement[] getHatchElements() { + if (getPollutionPerTick(null) == 0) + return new IHatchElement[] { Maintenance, InputHatch, OutputHatch, OutputBus, InputBus }; + return new IHatchElement[] { Maintenance, InputHatch, OutputHatch, OutputBus, InputBus, Muffler }; + } + + @Override + public boolean checkStructure(boolean aForceReset, IGregTechTileEntity aBaseMetaTileEntity) { + boolean f = super.checkStructure(aForceReset, aBaseMetaTileEntity); + if (f && getBaseMetaTileEntity().isServerSide()) { + // while is this a client side field, blockrenderer will reuse the server world for client side rendering + // so we must set it as well... + mFormed = true; + return true; + } + return f; + } + @Override public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { maxPower = 0; @@ -120,6 +143,47 @@ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack a 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; + + IIconContainer[] tTextures; + if (getBaseMetaTileEntity().isActive()) tTextures = getTurbineTextureActive(); + else if (hasTurbine()) tTextures = getTurbineTextureFull(); + else tTextures = getTurbineTextureEmpty(); + GTUtilityClient + .renderTurbineOverlay(aWorld, aX, aY, aZ, aRenderer, getExtendedFacing(), getCasingBlock(), tTextures); + 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()) diff --git a/src/main/java/gregtech/api/util/GTUtilityClient.java b/src/main/java/gregtech/api/util/GTUtilityClient.java index a6039e10d30..71ebec7e95b 100644 --- a/src/main/java/gregtech/api/util/GTUtilityClient.java +++ b/src/main/java/gregtech/api/util/GTUtilityClient.java @@ -3,15 +3,23 @@ import java.lang.reflect.Field; import java.util.List; +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.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; import com.google.common.collect.Lists; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; import cpw.mods.fml.relauncher.ReflectionHelper; +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.common.render.GTRenderUtil; public class GTUtilityClient { @@ -49,4 +57,53 @@ public static List getTooltip(ItemStack aStack, boolean aGuiStyle) { return Lists.newArrayList(aStack.getDisplayName()); } } + + public static void renderTurbineOverlay(IBlockAccess aWorld, int aX, int aY, int aZ, RenderBlocks aRenderer, + ExtendedFacing tExtendedFacing, Block tBlockOverride, IIconContainer[] tTextures) { + int[] tABCCoord = new int[] { -1, -1, 0 }; + int[] tXYZOffset = new int[3]; + 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 (tDirection == ForgeDirection.NORTH || tDirection == ForgeDirection.EAST) aRenderer.field_152631_f = true; + + for (int i = 0; i < 9; i++) { + 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; + Block tBlock; + if (tBlockOverride == null) { + tBlock = aWorld.getBlock(aX + tDirection.offsetX, tY + tDirection.offsetY, aZ + tDirection.offsetZ); + } else { + tBlock = tBlockOverride; + } + // 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, tDirection) + .setupColor(tDirection, Dyes._NULL.mRGBa); + GTRenderUtil.renderBlockIcon( + aRenderer, + tBlock, + tX + tDirection.offsetX * 0.001, + tY + tDirection.offsetY * 0.001, + tZ + tDirection.offsetZ * 0.001, + tTextures[i].getIcon(), + tDirection); + if (++tABCCoord[0] == 2) { + tABCCoord[0] = -1; + tABCCoord[1]++; + } + } + + aRenderer.field_152631_f = false; + } } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java index 93a51a94fd7..aac42f28c4f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java @@ -20,7 +20,6 @@ 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; @@ -43,7 +42,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Dyes; import gregtech.api.enums.SoundResource; import gregtech.api.interfaces.IHatchElement; import gregtech.api.interfaces.IIconContainer; @@ -54,11 +52,10 @@ 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.GTUtilityClient; import gregtech.api.util.TurbineStatCalculator; import gregtech.api.util.shutdown.ShutDownReasonRegistry; import gregtech.common.items.MetaGeneratedTool01; -import gregtech.common.render.GTRenderUtil; public abstract class MTELargeTurbine extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { @@ -194,57 +191,13 @@ public IIconContainer[] getTurbineTextureEmpty() { @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.001, - tY + tDirection.offsetY * 0.001, - tZ + tDirection.offsetZ * 0.001, - tTextures[i].getIcon(), - tFacing); - } - if (++tABCCoord[0] == 2) { - tABCCoord[0] = -1; - tABCCoord[1]++; - } - } - - aRenderer.field_152631_f = false; + GTUtilityClient + .renderTurbineOverlay(aWorld, aX, aY, aZ, aRenderer, getExtendedFacing(), getCasingBlock(), tTextures); return false; } diff --git a/src/main/java/gtPlusPlus/core/handler/PacketHandler.java b/src/main/java/gtPlusPlus/core/handler/PacketHandler.java index 504afc55d86..9c4ed451cab 100644 --- a/src/main/java/gtPlusPlus/core/handler/PacketHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/PacketHandler.java @@ -10,6 +10,7 @@ import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import cpw.mods.fml.relauncher.Side; import gtPlusPlus.core.network.handler.AbstractClientMessageHandler; +import gtPlusPlus.core.network.packet.PacketTurbineHatchUpdate; import gtPlusPlus.core.network.packet.PacketVolumetricFlaskGui; import gtPlusPlus.core.network.packet.PacketVolumetricFlaskGui2; @@ -22,6 +23,7 @@ public class PacketHandler { public static void init() { registerMessage(PacketVolumetricFlaskGui.class, PacketVolumetricFlaskGui.class); registerMessage(PacketVolumetricFlaskGui2.class, PacketVolumetricFlaskGui2.class); + registerMessage(PacketTurbineHatchUpdate.class, PacketTurbineHatchUpdate.class); } /** diff --git a/src/main/java/gtPlusPlus/core/network/packet/PacketTurbineHatchUpdate.java b/src/main/java/gtPlusPlus/core/network/packet/PacketTurbineHatchUpdate.java new file mode 100644 index 00000000000..ec9509f29a9 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/network/packet/PacketTurbineHatchUpdate.java @@ -0,0 +1,122 @@ +package gtPlusPlus.core.network.packet; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gtPlusPlus.api.objects.minecraft.BlockPos; +import gtPlusPlus.core.network.handler.AbstractClientMessageHandler; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchTurbine; +import io.netty.buffer.ByteBuf; + +public class PacketTurbineHatchUpdate extends AbstractClientMessageHandler + implements AbstractPacket { + + private int x; + private int y; + private int z; + private boolean hasTurbine; + private boolean formed; + private BlockPos controller; + + public PacketTurbineHatchUpdate() {} + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(x); + buf.writeInt(y); + buf.writeInt(z); + buf.writeBoolean(hasTurbine); + buf.writeBoolean(formed); + if (controller != null) { + buf.writeBoolean(true); + buf.writeInt(controller.xPos); + buf.writeInt(controller.yPos); + buf.writeInt(controller.zPos); + } else { + buf.writeBoolean(false); + } + } + + @Override + public void fromBytes(ByteBuf buf) { + x = buf.readInt(); + y = buf.readInt(); + z = buf.readInt(); + hasTurbine = buf.readBoolean(); + formed = buf.readBoolean(); + if (buf.readBoolean()) { + controller = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt(), 0); + } else { + controller = null; + } + } + + 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 boolean isHasTurbine() { + return hasTurbine; + } + + public void setHasTurbine(boolean hasTurbine) { + this.hasTurbine = hasTurbine; + } + + public boolean isFormed() { + return formed; + } + + public void setFormed(boolean formed) { + this.formed = formed; + } + + public BlockPos getController() { + return controller; + } + + public void setController(BlockPos controller) { + this.controller = controller; + } + + @Override + public String getPacketName() { + return "Packet_VoluemtricFlaskSetter_ToClient"; + } + + @Override + public IMessage handleClientMessage(EntityPlayer player, PacketTurbineHatchUpdate message, MessageContext ctx) { + TileEntity te = player.getEntityWorld() + .getTileEntity(message.x, message.y, message.z); + if (!(te instanceof BaseMetaTileEntity mteHost)) return null; + IMetaTileEntity mte = mteHost.getMetaTileEntity(); + if (!(mte instanceof MTEHatchTurbine hatch)) return null; + hatch.receiveUpdate(message); + + return null; + } +} 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 index ee40ffdbe8f..0a42f008763 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchTurbine.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchTurbine.java @@ -1,15 +1,18 @@ 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 static gregtech.api.enums.Textures.BlockIcons.*; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.util.ForgeDirection; import org.apache.commons.lang3.ArrayUtils; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.common.widget.SlotWidget; @@ -18,18 +21,22 @@ import gregtech.api.enums.Materials; import gregtech.api.enums.SoundResource; import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.IIconContainer; 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.render.TextureFactory; import gregtech.api.util.GTModHandler; import gregtech.api.util.GTUtility; +import gregtech.api.util.GTUtilityClient; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.minecraft.BlockPos; +import gtPlusPlus.core.handler.PacketHandler; import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.network.packet.PacketTurbineHatchUpdate; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.MTELargerTurbineBase; @@ -39,9 +46,12 @@ public class MTEHatchTurbine extends MTEHatch { public boolean mHasController = false; public boolean mUsingAnimation = true; - private String mControllerLocation; + private BlockPos mControllerLocation; public int mEUt = 0; + private boolean mFormed; + private boolean mHasTurbine; + public MTEHatchTurbine(int aID, String aName, String aNameRegional, int aTier) { super(aID, aName, aNameRegional, aTier, 16, "Turbine Rotor holder for XL Turbines"); } @@ -68,12 +78,13 @@ public String[] getDescription() { @Override public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, getFrontFacingTurbineTexture() }; + return new ITexture[] { aBaseTexture, TextureFactory.of(LARGETURBINE_NEW_ACTIVE5) }; } @Override public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, getFrontFacingTurbineTexture() }; + if (hasTurbine()) return new ITexture[] { aBaseTexture, TextureFactory.of(LARGETURBINE_NEW_EMPTY5) }; + return new ITexture[] { aBaseTexture, TextureFactory.of(LARGETURBINE_NEW5) }; } public int getEU() { @@ -105,8 +116,11 @@ public boolean isValidSlot(int aIndex) { } public boolean hasTurbine() { - ItemStack aStack = this.mInventory[0]; - return MTELargerTurbineBase.isValidTurbine(aStack); + if (getBaseMetaTileEntity().isServerSide()) { + ItemStack aStack = this.mInventory[0]; + return MTELargerTurbineBase.isValidTurbine(aStack); + } + return mHasTurbine; } public ItemStack getTurbine() { @@ -123,6 +137,7 @@ public boolean canWork() { public boolean insertTurbine(ItemStack aTurbine) { if (MTELargerTurbineBase.isValidTurbine(aTurbine)) { this.mInventory[0] = aTurbine; + sendUpdate(); return true; } return false; @@ -193,12 +208,16 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { super.onPostTick(aBaseMetaTileEntity, aTick); if (this.mHasController) { if (aTick % 20 == 0) { - this.getBaseMetaTileEntity() - .setActive(isControllerActive()); + boolean oActive = getBaseMetaTileEntity().isActive(); + boolean active = isControllerActive(); + getBaseMetaTileEntity().setActive(active); + if (active != oActive) { + getBaseMetaTileEntity().issueClientUpdate(); + } } } else if (this.mControllerLocation != null) { // Weird Invalid State - if (setController(BlockPos.generateBlockPos(mControllerLocation))) { + if (setController(mControllerLocation)) { // Valid } } else { @@ -218,20 +237,17 @@ public boolean isControllerActive() { } public MTELargerTurbineBase getController() { - if (this.mHasController && this.mControllerLocation != null && !this.mControllerLocation.isEmpty()) { - 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(); + if (this.mHasController && this.mControllerLocation != null) { + BlockPos p = mControllerLocation; + // 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 { - if (tTileEntity == null) { - Logger.INFO("Controller MTE is null, somehow?"); - } else { - Logger.INFO("Controller is a different MTE to expected"); - } + Logger.INFO("Controller is a different MTE to expected"); } } } @@ -240,13 +256,13 @@ public MTELargerTurbineBase getController() { } public boolean canSetNewController() { - return (mControllerLocation == null || mControllerLocation.isEmpty()) && !this.mHasController; + return (mControllerLocation == null) && !this.mHasController; } public boolean setController(BlockPos aPos) { clearController(); if (canSetNewController()) { - mControllerLocation = aPos.getUniqueIdentifier(); + mControllerLocation = aPos; mHasController = true; Logger.INFO("Successfully injected controller into this Turbine Assembly Hatch."); } @@ -258,22 +274,40 @@ public void clearController() { this.mHasController = false; } - public boolean usingAnimations() { - return mUsingAnimation; + public IIconContainer[] getTurbineTextureActive() { + return TURBINE_NEW_ACTIVE; } - 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; - } + 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 (!mFormed) return false; + + IIconContainer[] tTextures; + if (getBaseMetaTileEntity().isActive()) tTextures = getTurbineTextureActive(); + else if (hasTurbine()) tTextures = getTurbineTextureFull(); + else tTextures = getTurbineTextureEmpty(); + GTUtilityClient.renderTurbineOverlay( + aWorld, + aX, + aY, + aZ, + aRenderer, + ExtendedFacing.of(getBaseMetaTileEntity().getFrontFacing()), + null, + tTextures); + return false; + } + + public boolean usingAnimations() { + return mUsingAnimation; } @Override @@ -301,6 +335,12 @@ public void setActive(boolean b) { .setActive(b); } + @Override + public void setInventorySlotContents(int aIndex, ItemStack aStack) { + super.setInventorySlotContents(aIndex, aStack); + sendUpdate(); + } + @Override public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { return false; @@ -312,10 +352,7 @@ public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, f 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 Location: " + mControllerLocation.getLocationString()); PlayerUtils.messagePlayer(aPlayer, "Controller Active? " + this.isControllerActive()); } PlayerUtils.messagePlayer( @@ -378,6 +415,7 @@ public boolean onToolClick(ItemStack tCurrentItem, EntityPlayer aPlayer, ForgeDi aPlayer.inventory.addItemStackToInventory((this.getTurbine())); this.mInventory[0] = null; GTUtility.sendChatToPlayer(aPlayer, "Removed turbine with wrench."); + sendUpdate(); return true; } } else { @@ -386,8 +424,8 @@ public boolean onToolClick(ItemStack tCurrentItem, EntityPlayer aPlayer, ForgeDi aHasTurbine ? "Cannot remove turbine, no free inventory space." : "No turbine to remove."); } } else if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSolderingToolList)) { - if (mControllerLocation != null && !mControllerLocation.isEmpty()) { - if (setController(BlockPos.generateBlockPos(mControllerLocation))) { + if (mControllerLocation != null) { + if (setController(mControllerLocation)) { if (PlayerUtils.isCreative(aPlayer) || GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { String tChat = "Trying to Reset linked Controller"; @@ -411,9 +449,35 @@ public boolean onToolClick(ItemStack tCurrentItem, EntityPlayer aPlayer, ForgeDi @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + SlotWidget slot = new SlotWidget(inventoryHandler, 0).setFilter(MTELargerTurbineBase::isValidTurbine); + if (getBaseMetaTileEntity().isServerSide()) slot.setChangeListener(this::sendUpdate); builder.widget( - new SlotWidget(inventoryHandler, 0).setFilter(MTELargerTurbineBase::isValidTurbine) - .setAccess(false, true) + slot.setAccess(false, true) .setPos(79, 34)); } + + public void receiveUpdate(PacketTurbineHatchUpdate message) { + mHasTurbine = message.isHasTurbine(); + mFormed = message.isFormed(); + if (message.getController() != null) clearController(); + else setController(message.getController()); + getBaseMetaTileEntity().issueTextureUpdate(); + } + + public void sendUpdate() { + PacketTurbineHatchUpdate message = new PacketTurbineHatchUpdate(); + message.setX(getBaseMetaTileEntity().getXCoord()); + message.setY(getBaseMetaTileEntity().getYCoord()); + message.setZ(getBaseMetaTileEntity().getZCoord()); + message.setFormed(mHasController && getController().mMachine); + message.setHasTurbine(hasTurbine()); + message.setController(mControllerLocation); + PacketHandler.sendToAllAround( + message, + getBaseMetaTileEntity().getWorld().provider.dimensionId, + getBaseMetaTileEntity().getXCoord(), + getBaseMetaTileEntity().getYCoord(), + getBaseMetaTileEntity().getZCoord(), + 64.0D); + } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/CasingTextureHandler.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/CasingTextureHandler.java index c85bac71159..1694632b5d0 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/CasingTextureHandler.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/CasingTextureHandler.java @@ -9,8 +9,6 @@ public class CasingTextureHandler { - private static final TexturesCentrifugeMultiblock gregtechX = new TexturesCentrifugeMultiblock(); - public static IIcon getIcon(final int ordinalSide, final int aMeta) { // Texture ID's. case 0 == ID[57] if ((aMeta >= 0) && (aMeta < 16)) { return switch (aMeta) { @@ -52,6 +50,12 @@ public static IIcon getIcon(final int ordinalSide, final int aMeta) { // Texture public static IIcon handleCasingsGT(final IBlockAccess aWorld, final int xCoord, final int yCoord, final int zCoord, final ForgeDirection side, final GregtechMetaCasingBlocks thisBlock) { - return gregtechX.handleCasingsGT(aWorld, xCoord, yCoord, zCoord, side, thisBlock); + final int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); + final int ordinalSide = side.ordinal(); + if (tMeta != 0) { + return getIcon(ordinalSide, tMeta); + } + + return TexturesGtBlock.Casing_Material_Centrifuge.getIcon(); } } 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 deleted file mode 100644 index 0defa80e6c0..00000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesCentrifugeMultiblock.java +++ /dev/null @@ -1,105 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.blocks.textures; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaCasingBlocks; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialCentrifuge; - -public class TexturesCentrifugeMultiblock { - - public IIcon handleCasingsGT(final IBlockAccess aWorld, final int xCoord, final int yCoord, final int zCoord, - final ForgeDirection side, final GregtechMetaCasingBlocks thisBlock) { - return this.handleCasingsGT58(aWorld, xCoord, yCoord, zCoord, side, thisBlock); - } - - private static int isCentrifugeControllerWithSide(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 MTEIndustrialCentrifuge && tTile.getFrontFacing() == side) - return tTile.isActive() ? 1 : 2; - return 0; - } - - public IIcon handleCasingsGT58(final IBlockAccess aWorld, final int xCoord, final int yCoord, final int zCoord, - final ForgeDirection side, final GregtechMetaCasingBlocks thisBlock) { - final int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); - final int ordinalSide = side.ordinal(); - if (tMeta != 0) { - return CasingTextureHandler.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; - if (isCentrifugeControllerWithSide(aWorld, xCoord + j, yCoord, zCoord + i, side) != 0) { - IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity) aWorld - .getTileEntity(xCoord + j, yCoord, zCoord + i)).getMetaTileEntity(); - return getIconByIndex(tMetaTileEntity, 4 - i * 3 - j); - } - } - } - } - case 1 -> { - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - if (isCentrifugeControllerWithSide(aWorld, xCoord + j, yCoord + i, zCoord, side) != 0) { - IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity) aWorld - .getTileEntity(xCoord + j, yCoord + i, zCoord)).getMetaTileEntity(); - return getIconByIndex(tMetaTileEntity, 4 + i * 3 - j * tInvertLeftRightMod); - } - } - } - } - case 2 -> { - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - if (isCentrifugeControllerWithSide(aWorld, xCoord, yCoord + i, zCoord + j, side) != 0) { - IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity) aWorld - .getTileEntity(xCoord, yCoord + i, zCoord + j)).getMetaTileEntity(); - return getIconByIndex(tMetaTileEntity, 4 + i * 3 + j * tInvertLeftRightMod); - } - } - } - } - } - return TexturesGtBlock.Casing_Material_Centrifuge.getIcon(); - } - - public boolean isCentrifugeRunning(IMetaTileEntity aTile) { - if (aTile == null) { - return false; - } else { - return aTile.getBaseMetaTileEntity() - .isActive(); - } - } - - public boolean isUsingAnimatedTexture(IMetaTileEntity aMetaTileEntity) { - if (aMetaTileEntity != null) { - if (aMetaTileEntity instanceof MTEIndustrialCentrifuge) { - return ((MTEIndustrialCentrifuge) aMetaTileEntity).usingAnimations(); - } - } - return false; - } - - public IIcon getIconByIndex(IMetaTileEntity aMetaTileEntity, int aIndex) { - if (isUsingAnimatedTexture(aMetaTileEntity)) { - if (isCentrifugeRunning(aMetaTileEntity)) { - return TexturesGtBlock.CENTRIFUGEACTIVE[aIndex].getIcon(); - } - } - return TexturesGtBlock.CENTRIFUGE[aIndex].getIcon(); - } -} 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 2f87a3b6fb9..36d0addad8a 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 @@ -558,25 +558,6 @@ public ResourceLocation getTextureFile() { public static final CustomIcon TEXTURE_TECH_B = new CustomIcon("metro/TEXTURE_TECH_B"); public static final CustomIcon TEXTURE_TECH_C = new CustomIcon("metro/TEXTURE_TECH_C"); - private static final CustomIcon GT8_1_Active = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE1"); - private static final CustomIcon GT8_1 = new CustomIcon("iconsets/LARGECENTRIFUGE1"); - private static final CustomIcon GT8_2_Active = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE2"); - private static final CustomIcon GT8_2 = new CustomIcon("iconsets/LARGECENTRIFUGE2"); - private static final CustomIcon GT8_3_Active = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE3"); - private static final CustomIcon GT8_3 = new CustomIcon("iconsets/LARGECENTRIFUGE3"); - private static final CustomIcon GT8_4_Active = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE4"); - private static final CustomIcon GT8_4 = new CustomIcon("iconsets/LARGECENTRIFUGE4"); - private static final CustomIcon GT8_5_Active = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE5"); - private static final CustomIcon GT8_5 = new CustomIcon("iconsets/LARGECENTRIFUGE5"); - private static final CustomIcon GT8_6_Active = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE6"); - private static final CustomIcon GT8_6 = new CustomIcon("iconsets/LARGECENTRIFUGE6"); - private static final CustomIcon GT8_7_Active = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE7"); - private static final CustomIcon GT8_7 = new CustomIcon("iconsets/LARGECENTRIFUGE7"); - private static final CustomIcon GT8_8_Active = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE8"); - private static final CustomIcon GT8_8 = new CustomIcon("iconsets/LARGECENTRIFUGE8"); - private static final CustomIcon GT8_9_Active = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE9"); - private static final CustomIcon GT8_9 = new CustomIcon("iconsets/LARGECENTRIFUGE9"); - public static final CustomIcon TEXTURE_TECH_PANEL_D = new CustomIcon("metro/TEXTURE_TECH_PANEL_D"); public static final CustomIcon TEXTURE_TECH_PANEL_H = new CustomIcon("metro/TEXTURE_TECH_PANEL_H"); @@ -609,9 +590,4 @@ public ResourceLocation getTextureFile() { TEXTURE_CASING_TIERED_IV, TEXTURE_CASING_TIERED_LuV, TEXTURE_CASING_TIERED_ZPM, TEXTURE_CASING_TIERED_UV, TEXTURE_CASING_TIERED_MAX }; - public static IIconContainer[] CENTRIFUGE = new IIconContainer[] { GT8_1, GT8_2, GT8_3, GT8_4, GT8_5, GT8_6, GT8_7, - GT8_8, GT8_9 }; - - public static IIconContainer[] CENTRIFUGEACTIVE = new IIconContainer[] { GT8_1_Active, GT8_2_Active, GT8_3_Active, - GT8_4_Active, GT8_5_Active, GT8_6_Active, GT8_7_Active, GT8_8_Active, GT8_9_Active }; } 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 e0acc6666d9..cf300f9f3d6 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 @@ -72,33 +72,11 @@ import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_TU_ACTIVE7; import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_TU_ACTIVE8; import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_TU_ACTIVE9; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE1; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE1_ACTIVE; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE2; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE2_ACTIVE; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE3; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE3_ACTIVE; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE4; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE4_ACTIVE; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE5; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE5_ACTIVE; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE6; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE6_ACTIVE; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE7; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE7_ACTIVE; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE8; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE8_ACTIVE; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE9; -import static gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.OVERLAY_SC_TURBINE9_ACTIVE; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; 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.MTEHatchTurbine; import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaSpecialMultiCasings; public class LargeTurbineTextureHandler { @@ -151,256 +129,11 @@ public class LargeTurbineTextureHandler { LARGETURBINE_TU_ACTIVE5.getIcon(), LARGETURBINE_TU_ACTIVE6.getIcon(), LARGETURBINE_TU_ACTIVE7.getIcon(), LARGETURBINE_TU_ACTIVE8.getIcon(), LARGETURBINE_TU_ACTIVE9.getIcon(), }; - public static IIcon[] OVERLAY_SC_TURBINE = new IIcon[] { OVERLAY_SC_TURBINE1.getIcon(), - OVERLAY_SC_TURBINE2.getIcon(), OVERLAY_SC_TURBINE3.getIcon(), OVERLAY_SC_TURBINE4.getIcon(), - OVERLAY_SC_TURBINE5.getIcon(), OVERLAY_SC_TURBINE6.getIcon(), OVERLAY_SC_TURBINE7.getIcon(), - OVERLAY_SC_TURBINE8.getIcon(), OVERLAY_SC_TURBINE9.getIcon(), }; - - public static IIcon[] OVERLAY_SC_TURBINE_ACTIVE = new IIcon[] { OVERLAY_SC_TURBINE1_ACTIVE.getIcon(), - OVERLAY_SC_TURBINE2_ACTIVE.getIcon(), OVERLAY_SC_TURBINE3_ACTIVE.getIcon(), - OVERLAY_SC_TURBINE4_ACTIVE.getIcon(), OVERLAY_SC_TURBINE5_ACTIVE.getIcon(), - OVERLAY_SC_TURBINE6_ACTIVE.getIcon(), OVERLAY_SC_TURBINE7_ACTIVE.getIcon(), - OVERLAY_SC_TURBINE8_ACTIVE.getIcon(), OVERLAY_SC_TURBINE9_ACTIVE.getIcon(), }; - public static IIcon handleCasingsGT(final IBlockAccess aWorld, final int xCoord, final int yCoord, final int zCoord, final ForgeDirection side, final GregtechMetaSpecialMultiCasings i) { final int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); - // 0 shaft - // 1 LP - // 2 HP - // 3 Gas - // 4 Plasma - - IIcon[] mGetCurrentTextureSet = null; - IIcon[] mGetCurrentTextureSet_ACTIVE = null; - - if ((tMeta <= 0 || tMeta >= 5) && tMeta != 15) { - return GregtechMetaSpecialMultiCasings.getStaticIcon(side.ordinal(), (byte) tMeta); - } else { - if (tMeta == 1) { - mGetCurrentTextureSet = OVERLAY_LP_TURBINE; - mGetCurrentTextureSet_ACTIVE = OVERLAY_LP_TURBINE_ACTIVE; - } else if (tMeta == 2) { - mGetCurrentTextureSet = OVERLAY_HP_TURBINE; - mGetCurrentTextureSet_ACTIVE = OVERLAY_HP_TURBINE_ACTIVE; - } else if (tMeta == 3) { - mGetCurrentTextureSet = OVERLAY_GAS_TURBINE; - mGetCurrentTextureSet_ACTIVE = OVERLAY_GAS_TURBINE_ACTIVE; - } else if (tMeta == 4) { - mGetCurrentTextureSet = OVERLAY_PLASMA_TURBINE; - mGetCurrentTextureSet_ACTIVE = OVERLAY_PLASMA_TURBINE_ACTIVE; - } else { - mGetCurrentTextureSet = OVERLAY_SC_TURBINE; - mGetCurrentTextureSet_ACTIVE = OVERLAY_SC_TURBINE_ACTIVE; - } - if (mGetCurrentTextureSet == null || mGetCurrentTextureSet_ACTIVE == null) { - return GregtechMetaSpecialMultiCasings.getStaticIcon(side.ordinal(), (byte) tMeta); - } - - if ((side == ForgeDirection.NORTH) || (side == ForgeDirection.SOUTH)) { - TileEntity tTileEntity; - IMetaTileEntity tMetaTileEntity; - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord + (side == ForgeDirection.SOUTH ? 1 : -1), yCoord - 1, zCoord))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[0]; - } - return mGetCurrentTextureSet[0]; - } - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord + (side == ForgeDirection.SOUTH ? 1 : -1), yCoord, zCoord))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[3]; - } - return mGetCurrentTextureSet[3]; - } - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord + (side == ForgeDirection.SOUTH ? 1 : -1), yCoord + 1, zCoord))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[6]; - } - return mGetCurrentTextureSet[6]; - } - if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord - 1, zCoord))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[1]; - } - return mGetCurrentTextureSet[1]; - } - if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord + 1, zCoord))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[7]; - } - return mGetCurrentTextureSet[7]; - } - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord + (side == ForgeDirection.NORTH ? 1 : -1), yCoord + 1, zCoord))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[8]; - } - return mGetCurrentTextureSet[8]; - } - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord + (side == ForgeDirection.NORTH ? 1 : -1), yCoord, zCoord))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[5]; - } - return mGetCurrentTextureSet[5]; - } - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord + (side == ForgeDirection.NORTH ? 1 : -1), yCoord - 1, zCoord))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[2]; - } - return mGetCurrentTextureSet[2]; - } - } else if ((side == ForgeDirection.WEST) || (side == ForgeDirection.EAST)) { - TileEntity tTileEntity; - Object tMetaTileEntity; - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord, yCoord - 1, zCoord + (side == ForgeDirection.WEST ? 1 : -1)))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[0]; - } - return mGetCurrentTextureSet[0]; - } - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord, yCoord, zCoord + (side == ForgeDirection.WEST ? 1 : -1)))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[3]; - } - return mGetCurrentTextureSet[3]; - } - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord, yCoord + 1, zCoord + (side == ForgeDirection.WEST ? 1 : -1)))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[6]; - } - return mGetCurrentTextureSet[6]; - } - if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord - 1, zCoord))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[1]; - } - return mGetCurrentTextureSet[1]; - } - if ((null != (tTileEntity = aWorld.getTileEntity(xCoord, yCoord + 1, zCoord))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[7]; - } - return mGetCurrentTextureSet[7]; - } - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord, yCoord + 1, zCoord + (side == ForgeDirection.EAST ? 1 : -1)))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[8]; - } - return mGetCurrentTextureSet[8]; - } - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord, yCoord, zCoord + (side == ForgeDirection.EAST ? 1 : -1)))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[5]; - } - return mGetCurrentTextureSet[5]; - } - if ((null != (tTileEntity = aWorld - .getTileEntity(xCoord, yCoord - 1, zCoord + (side == ForgeDirection.EAST ? 1 : -1)))) - && ((tTileEntity instanceof IGregTechTileEntity)) - && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) - && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof MTEHatchTurbine))) { - if (isUsingAnimatedTexture(tTileEntity)) { - return mGetCurrentTextureSet_ACTIVE[2]; - } - return mGetCurrentTextureSet[2]; - } - } - } return GregtechMetaSpecialMultiCasings.getStaticIcon(side.ordinal(), (byte) tMeta); } - public static boolean isUsingAnimatedTexture(TileEntity tTileEntity) { - boolean aVal = true; - if (tTileEntity instanceof IGregTechTileEntity aTile) { - final IMetaTileEntity aMetaTileEntity = aTile.getMetaTileEntity(); - if (aMetaTileEntity instanceof MTEHatchTurbine) { - aVal = aMetaTileEntity.getBaseMetaTileEntity() - .isActive(); - // Logger.INFO("Returning "+aVal+" as Rotor Assembly controller status"); - } - } - return aVal; - } - - public static MTEHatchTurbine isTurbineHatch(final IGregTechTileEntity aTileEntity) { - if (aTileEntity != null) { - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof MTEHatchTurbine) { - return (MTEHatchTurbine) aMetaTileEntity; - } - } - return null; - } } 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 index 186a69f2df7..af68340722a 100644 --- 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 @@ -10,12 +10,15 @@ 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.*; import static gregtech.api.util.GTStructureUtility.buildHatchAdder; import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.util.ForgeDirection; import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; @@ -30,6 +33,7 @@ import gregtech.api.logic.ProcessingLogic; import gregtech.api.recipe.RecipeMap; import gregtech.api.util.GTUtility; +import gregtech.api.util.GTUtilityClient; import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.common.pollution.PollutionConfig; import gtPlusPlus.api.objects.Logger; @@ -48,6 +52,10 @@ public class MTEIndustrialCentrifuge extends GTPPMultiBlockBase STRUCTURE_DEFINITION = null; // public static double recipesComplete = 0; + // client side stuff + // mMachine got overwritten by StructureLib extended facing query response + // so we use a separate field for this + protected boolean mFormed; public MTEIndustrialCentrifuge(final int aID, final String aName, final String aNameRegional) { super(aID, aName, aNameRegional); @@ -123,6 +131,18 @@ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBu return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); } + @Override + public boolean checkStructure(boolean aForceReset, IGregTechTileEntity aBaseMetaTileEntity) { + boolean f = super.checkStructure(aForceReset, aBaseMetaTileEntity); + if (f && getBaseMetaTileEntity().isServerSide()) { + // while is this a client side field, blockrenderer will reuse the server world for client side rendering + // so we must set it as well... + mFormed = true; + return true; + } + return f; + } + @Override public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { mCasing = 0; @@ -132,15 +152,27 @@ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack a @Override protected IIconContainer getActiveOverlay() { if (usingAnimations()) { - return frontFaceActive; + return LARGETURBINE_NEW_ACTIVE5; } else { - return frontFace; + return getInactiveOverlay(); } } @Override protected IIconContainer getInactiveOverlay() { - return frontFace; + return LARGETURBINE_NEW5; + } + + @Override + public boolean renderInWorld(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, RenderBlocks aRenderer) { + if (!mFormed) return false; + + IIconContainer[] tTextures; + if (getBaseMetaTileEntity().isActive() && usingAnimations()) tTextures = TURBINE_NEW_ACTIVE; + else tTextures = TURBINE_NEW; + GTUtilityClient + .renderTurbineOverlay(aWorld, aX, aY, aZ, aRenderer, getExtendedFacing(), getCasingBlock(), tTextures); + return false; } @Override @@ -223,4 +255,15 @@ public boolean usingAnimations() { // Logger.INFO("Is animated? "+this.mIsAnimated); return this.mIsAnimated; } + + @Override + public void onValueUpdate(byte aValue) { + mFormed = (aValue & 0x1) != 0; + + } + + @Override + public byte getUpdateData() { + return (byte) ((mMachine ? 1 : 0)); + } } 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 index 63172448985..826bac7aa93 100644 --- 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 @@ -196,6 +196,17 @@ public void clearHatches() { mTurbineRotorHatches.clear(); } + @Override + public boolean checkStructure(boolean aForceReset, IGregTechTileEntity aBaseMetaTileEntity) { + boolean f = super.checkStructure(aForceReset, aBaseMetaTileEntity); + if (f) { + for (MTEHatchTurbine tHatch : mTurbineRotorHatches) { + tHatch.sendUpdate(); + } + } + return f; + } + @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 diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE1.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE1.png deleted file mode 100644 index 020ed28da82b86eebba6341f20fa96555322d6b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515 zcmV+e0{s1nP)N2bZe?^J zG%heMF*h@ApJM<30f0$FK~y+TV>me3WB){#y?qYbJMA{M+N^7~UQuVcq}qHzx#^4| z<4L)O{n-ZH8G6l0I!%e%HL;ouK-H(0rkz}vaC~0W(b-{#X9OIa;)QI)>IN&I5eqBL zW|x?hMW{3E>9q%{21*>A6>@mG-{LAWplYBXL^aTCi0Z0n&FO_kg`sK;K#3FcqoHO` z_Bb%n6|31m=S|Ep$PQ3p0GSO`J>3uJ5}<0h*=VYPp6SWdPw`e{07}4J0x^3-i#4Wd zpxJFHx``eN3_uCAfI?OcbT`l?K(m3WfuR)RD$juIOEk05RM*C7g*nJF%q=xRR=vE| z0+;HXD0d)Y06LL))gTQ(4*^worh~#87`vFN;Yy>ttbmB2FH0ZdZi1>E9UZqWUdRB9 zOI$7irX0BH%;3PLq5@l6TLz#6&}>M|164!98&h?4Mg~v=5HZxpYXQxkT7c7Rpi59R z0L?B5S1$-r&GJ_U#yl`Cfw2P&Z@30~J9`@&Yp9;00sv5IKbS8ouYv#o002ovPDHLk FV1mQY%mM%a diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE2.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE2.png deleted file mode 100644 index 12e321b7e9f38c7f6f56e2df10a00ff2edb66772..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 507 zcmVN2bZe?^J zG%heMF*h@ApJM<30eDG7K~y+TV>me3WB){#y?qYbJMA{M+N^7~UQuVcq}qHzx#^4| z<4L)O{n-ZH8G6l0I!%e%HL;ouK-H(0rkz}vaC~0W(b-{#X9OIa;)QI)>IN&I5eqBL zW|x?hMW{3E>9q%{21*>A6>@mG-{LAWplYBXL^aTCi0Z0n&FO_kg`sK;K#3FcqoHO` z_Bb%n6|31m=S|Ep$PQ3p0GSO`J>3uJ5}<0h*=VYPp6SWdPw`e{07}4J0x>%$${mj2 zs)1&=rRXMlC@=tx0lEZP5iSG_r5IOv1~kzqFDo>JrU0q|F6|5iPR^OZfp7$uf@*+p z9334UfXE&SfalTPghOLVi0{KAF*4EYrh-_@Et*zl2AgUo6 zfNGqbT^Nx0mJncJfu;c>3$z*N2ow#bFo0D9&~iIFTc`%OsG*S|5I{7bNdfJ)va)7C xGe%!e53BJeCZ=X)WN2bZe?^J zG%heMF*h@ApJM<30hmcdK~y+Tg^}Az0$~(||2K#tq$8DxVWp|1=AoQYQA|uJCA1>L zLQx?liZmm%g6M=9C<&EV6a-Nh(M?ezQqfDbLKy}%f_*jrw?EciL-I+(TSEJKL_P0~ zJnpFOrJ0q%)#+~Xa;OH4hvL~(A!W{mrJ(V#M8jR8!%ki*C=S}V1P`AV&ayjc zcu(kRx)Cqo7y2w5^6LhjG9w9S+Fe28m;-OWd%TO_flg9#KWr6_@#Uo<+MP_~p8F#po%)Ff{v4x<7? zuT|6dyPz$qR@|+ZG!czvOsmy0cdBW)16B??9Tl+%rKY@-Rt&vUlU_8j(djV1kpPW& zJQ(HN2bZe?^J zG%heMF*h@ApJM<30iQ`kK~y+TU6TDP192S3zyAqB;=0@2aog^04}KtPYKW*&D6ug$ zi)8Z9Jd`}tJhVj~mP9F0mLE)L#PUyhU*GlFwR->fdcD7&`+Sal9tGah9d8HiFFU@c zEziS-dAF*^!d*x>X!!kpuh(nny36H?_V+DEA`JB3&15Mz_Hz;bJ{v4%dq0nZB;>Di zhGDqfZcWovRfWR}`+m^q{yrTjWsD@&MKgHrX+mK)uMJb-&PSk z5OhmW6iJcGtc>z05U^CMVm-Hk|?B)8<`bUG&61^gF;BG#5t z;{v*q!_AzY>1`mv=kwXo@>?VQ-F4%E k+L6v067T|{)*TY@e?D_w?W=0@umAu607*qoM6N<$g183p%K!iX diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE5.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE5.png deleted file mode 100644 index 3466822e049793019512cadb9d7aa6cb741e90cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXJ~GmH$NGu=%lBM zV~B-+??gi`CPyCE=UtCfujSpmcFvgNno^mV*gAz`-QZKR!vq@o>6>+U~O}mZ%2WXd6vnd9d%}ntKsjk4*T< znDV#&C4)u4*(-T&3%-_Tb{?Fhk?Gm?pW)YMuZxHKtd0nrUp2c~@PH44^L7&-x7X`x Z8J{lrl>2R`aVgMK44$rjF6*2UngCxifph=> diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE6.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE6.png deleted file mode 100644 index c1ae3ca1af448afb479617ab5c5ea20d74dc2e64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530 zcmV+t0`2{YP)N2bZe?^J zG%heMF*h@ApJM<30gp*UK~y+TZIVk%0$~(}=O087(v?cYu+m1IY3@!sBSr}+VMI4D z3=|boBIrsO1yK;SDQG2af>uG&qLyv?SH060$3cR3`8;RN_nzSz^&RB<^Mj@J)Lflc zE2}Bwp&q@fhHuLJRWWq7HPy&Z9&H3TLMbG?U&da~^_Nri`9x{%&phr5dn@B@;j8tA z;0v~GlY`leK3EIf*CMr?-w_B!Ow+V1iv*gD^=>PCIpgC9l@&$PGzf`Af&`-RnCsGX zVPT8|%JaM+3bG`tsv3*M;_(&3hifL6U+vU zme!La++neZFwGqjh(6w&Se_mJy93iGZh>fYx~L7bYh@;jTOb;prj`DG4(ArwbwOwJ zLA*O9_Bpj89S)6WG-g+`K6Dxndz@Mkrjbbk(c5V+IyHj5oO1+0U>cbu;FZ_}v=#B7 zQz_8n+(8sYS&?yOTn!GN2bZe?^J zG%heMF*h@ApJM<30iQ`kK~y+TV>me3WB){#y?qYbJMA{M+N^7~UQuVcq}n_u${mQJ zysWk^UT9@y)l^gfK@33Er6ohNAx3`C@uFl9{*wbqd zR1Gxy=&X>#)BP4#nE_P;1%VdA^<)MI0+j+0kih_yI59sOYW8H00~1~0&RgAJg{%jN zfNo;|nGIAu-4EyzplXQO5Y<4>Kr}$~0NrM5Ys&zXfV%`@_J$T~i0XxvX0uC7ko5o& z15g4jppaEhFEpB%W6+bS57)+k>`OGW;i}tGbej^jp&I6vnjouQUTc9>b#0thS%kX3 zwG_jQB4Z*|7lx|&SV}TX$~6S4?o8JMx@1AQDW>Y0SWTen02}G-02Oyr35LEbeTcj9 zs0Nyy8>o`vt>|bd#?YOihs!0%s#ATG5}lCP#>=aG<#|RK9>N^2C5FVmoZWkWB{6760TklqMGHe43`UYkOle@7$!hp k0^JRC3D9hyYCR=>09g$zs6pk;lK=n!07*qoM6N<$f*&Q=%m4rY diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE8.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE8.png deleted file mode 100644 index 26956df456e834c729da06f20e435388d60b1722..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511 zcmVN2bZe?^J zG%heMF*h@ApJM<30eneBK~y+TW2nx^$P5nD(b3tuc;S()TTbrT4Ma^v1rTv$L5Mg5 zP}I->1h8t*)zw84XD|f;6Eu?`s=?-<7z9KNmX?<0=H^(9H#RXbH36B2EX!bRV{K(+ zg;j%@nHkV5OA8AW4fgi-XqLh?01W~HYiny;TU($SpcIf~i1M-mB4p#?8i49-?d*Ui zI@minIyypBGUP!|40@pAF?46>Ew8m$SZRh|b*hh2qKAU5t_TBA0%&$s zv?fF~&|YNK{?<}J5uj>kBe57)d2>x6hWdCdpxILk@VNwNHc)k_y^N8XAOq0sl5q8c z5Y;SyWw>0JgDlXOz%T*&66kKAOMqqrRqHA70{}EwHhoadwQ>Le002ovPDHLkV1gKI B#Et*} diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE9.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE9.png deleted file mode 100644 index f30b34fe4a80d26021421d17495ebc92cb677797..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmVN2bZe?^J zG%heMF*h@ApJM<30eVS9K~y+TV`wTWsLsg93=Xunw|8`OjPkO|iE;;`1?8qQii{`a z8un)!bZ6)_C+RdLYS+YSf;7POIJ-E*HSFzk*xqTkvDIdEgVl;U%Y~I@vrA0MBGged zz*X<*wTGw%nhjB16|FhF(5Ns}jltH=7N`MPHCD5M&YPHHkR71Huyyf5Cuf99fC#H< zpl5nA^;5hR8GuUBRBvdp##9Y7yDddG(L;d&t`w_FfbIsm1ZXx;H87N7T;-t}AihL1 z8%=d>oK~2FEW_MV6J*uPYb|i828OA>wG;!;iA1UfhN+LGBm>YxK-Hb;pzsF9E~aW= z>;hE>*hmBY?QSZ;(3hnTaW@{-K(liLRe)jYXeh=2j7wZDK~|mWqXZ07TU`+bpajrt zNX!FOL&6)b8t6-)2vD`Nkr*&c%{7G>>f^P5W=}1^=MtdVK-Ho4GDd2G3_!C>!qp2x zRI~h*;c~$62Ko{hCO}^T-3@dJ&}^V;Jtcksom3iuSuJ+g00000NkvXXu0mjfWdh9@ diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE1.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE1.png deleted file mode 100644 index 288df82736d83b03a731164410679b6d2a6bf5fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 670 zcmV;P0%84$P)N2bZe?^J zG%heMF*h@ApJM<30vkz0K~zXf?UmU}8&MR-?>{0|+)!KB%uHu8O9BRif?8Z!qE;

#3!h=S6Grc_C#mHtzH!!?(2V#v)y-v-XZFz0tZ&b{Y+ zTynAF{}pfkx#{^H(@$QhN2~6yOY*^j^m$g;ood>iY}lHpe-o@-eRe-OT=R0Eih%xi zIC_;F`tvbxx!0TC?Ywx~YL)o5qCg@!C+be0iQ8+4)_oq%TAHX4UnAFCT_DGQFZS>;P>RwL~`S8MJrN1mb z%teO+EeL`Z`DwEN2Lc^?Zr(Shn@uw`(5fKF=6D_LJ1_0^de8Qg1hdT52{wn(V_lD; zQ(;Zh2olhylLt-jJDXkz22p?@%Y)U>eizQEjZSVAKzsUeWw^V1yrUG8$1E`&+&3#Q zbVF6$tj6(!P@(q5uE@ diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE1.png.mcmeta b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE1.png.mcmeta deleted file mode 100644 index d746756cbd1..00000000000 --- a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE1.png.mcmeta +++ /dev/null @@ -1,3 +0,0 @@ -{ - "animation":{} -} \ No newline at end of file diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE2.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE2.png deleted file mode 100644 index b8c344736e88392a3b3857a8cdf599f55c1510a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmV-l1EBngP)N2bZe?^J zG%heMF*h@ApJM<30^CVNK~zXf?N)1R6G0T6f1-jYC9i#Dv)xU$d2BIMC>0+_s$iu^ zN-NkRimiyWD2Oj&g%k^FsDdB}g2fM3wA7--KjoR+?ag#p^=m%lavM7LoO5^ExhFGX zd$sK#<>$L;)TihNW1*RnsyNB+wu{+xG*ZwaI0(iR~RH@47Cao`A7L0Y7%& zhyL^fc89WBmDY%&h@n_O3-|%sNr^p1k}=9<*aT6HYOzva)rCTJ5Fo&8B482(DXEPX8i40{nt+Uf2`v-~AoK*Fx?Rk1994tyv@FZEZ9r6y1z6jT z1K2PORe*=&ayb+Y(^TsMZBPW3$z(J^DwRs7(^TvU27c&EKVWM(|KkVpjk>A-@&l-e zU)SshYA4SJ@djJ>QptVxS5z7vv=A2QJZ^%kVsW zXacg4yf1MHgD=1J_d^rVu@c{xxN6%L-Ioxm0D3xBN2bZe?^J zG%heMF*h@ApJM<30xU^HK~zXf?Unm0Ltz-l-~T`)xrQa0ySZ&==A1cO7GiQqa|xjd zg+#8&t>o5F6NQB+C5rrj5JLVbUk>lyogLXv{Br8~Y47Lz?RlQP-}jLFHQTMraPZoWZ&za=pZZ#=+BO^@F>7ZzK;iew1i&-7^_I~XX0bD)tu&tCfOaBzpUxQlX?V}I zrM1}N2o7Y6Vrle^PT&n1TWYYz5_U?Nw~QWdO0E@RNVlUHMd`zF{ZBM@T49X*5}K zWg6_%lom>WjyjzvRzqn_iB3R^x-jfCUmHSzPWAUnWo3F}JApUo8a`T=7)&TF2*Sml zhYBzyc7iFs-iyf|kylvcT6B-}->R57Ju?4emLcA+{5rJmC8vWk@P2P|kxU=pE@K Vy+j5PCu9Hs002ovPDHLkV1kw2Hj)4U diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE3.png.mcmeta b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE3.png.mcmeta deleted file mode 100644 index d746756cbd1..00000000000 --- a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE3.png.mcmeta +++ /dev/null @@ -1,3 +0,0 @@ -{ - "animation":{} -} \ No newline at end of file diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE4.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE4.png deleted file mode 100644 index 07dd921123af3be2c9868d74708d6dd395f0a6cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 944 zcmV;h15f;kP)N2bZe?^J zG%heMF*h@ApJM<311(8JK~zXfot9f`6Hyd}=bxykBqmKJ_hc@~^uc1NP%9RNRM0}v zv{tC4B38UmFHqD%t&(E#5{f7YqG0i%5iPZ7@lUz7d%ANNnKO;B-m<=P*?X_dF*cX$ z-{czWLcgvb;9D^Ezw&!`(YSp%^a=AQl>g0`P(}4T;n+rSb^FLoU zwpUMYtqgBI9TZ@Ft!>+OrBW#ti@975jL~`Q!Hu=IpO0*{hSugv;{LJz83Mz~WHPB# z%D_o}y&Cn`Uao&%8W3QovjH(Cq(N)L-5SD4;KqglK*X5w{*KKjk*l*C$DN;<4ls~` zny7`6y*?}=#9?%Nc zbp>GQ@_;Hiwo@)sv%7#M57ao@DwRrwLLPDJ>+2&REDv6Pf3@mLr!yu2@pwEm4?KJf z$SlQTvCuqtxWMkTa{Qz7zz!BSf%*`Z2L{9^?F-EV0M*wmt0oTs#3$0_K?V5Ui9{kI z4^*h#%9^H$Rz&2%bn#spddLG$VQ3!sXI1{RhUGyVBEJt|c>utUfI{=|FW~nHk=l2i#H>lc9NlL!CT`vCur=x4N2bZe?^J zG%heMF*h@ApJM<30_{meK~zXft(Hx0)Ibo0eUN07@x+ty&t&E*h)aYWV#|&*AhC`R zI~FVm5=wTkVapbgCxom|j7(L1Es`tuO-PPSwy?gT-{Cc!GDs&NC@2~rQ=(?`mwemrNy4&sA zwu_b`;GwsxtE=sH8{JLQXlTpvcr4SZfn?ELuj@F(dpI1%S+Xq6DX@T?_xoY84q_}W z9N{Uc@B7M$M)tfl9JIQ;yj-u>=jSW47x%+Sz~=-BAT90(6$!>!0v04l;JA6mC5bh>4Ep<->Nn40^I6^M7gbxPWg-wG=yhS58b*tUclGqqe z>tM#>(3Vm|G^IHOkxdGdD@%;|!kGAvS2&01iPdeuPmF05iMy5CRdg|ngl6@ z(=3Ud+;iiky>YX-*yYiv-NU)fSziSEVMrRzglHiI=e8`M?CI!6z@Cm4z1va|AYMFa zPJvz0kLQxCV$2s#RDFNa-e%8R11jkHF1I&W+z*?2L*`xEEwuOl*$<|bE9>Io;_U29 zf~1iJmoqN{6@)cu%m$vD@oWXE+nUH$GOSp+c0~oUiVTCC-l&N2bZe?^J zG%heMF*h@ApJM<312{=UK~zXfotDdM6Hyq&=RYWl6rZS}RH8{cnPf7Lye5xQ(Sj{f zk!poXg_gEpiwHiEih?MJZWLSD_S&Sv+4cNx=YHoqnQ=BZ z?m~Zl{S<9~-kQ47(mut960&8h8?%4L7EAbKxti}onMv?&C zccwC!X)S-mQ6ZE{f{`SETjELJZhOO+X^=gva`1gWj6%eW)WFcqC&Afp&o)kaqlZ)u zU{qw)s4vvqyTePzjX~yHXYWIyP*8UW z_08M2513N1SoF(2L(uPS=>vU~4p{m?AF~6%)v)wI_lb<^l(0r!^Ss>UU| z24(gkm&?hZ07ylXW}*Xh_xd1!iZ4(=y|ya~Nf++4510=CWEX_kzqnCv0O0YKK5(p2 z81CH;y3;-o5G6^{Zl@Qp^g%)(fcesG?}LP($49{42QeL>4{-laAFvBlpFW7`U%!)< zK8T5H2kC&N4`Sk2jp17QU|2=^aLqo5gE@$F!0ZDZh6tE_kUt-w517fp`XGac2JHi8 z%DkZdeUKbQ!)?$y6t_C9O&-iK8=1Wix)stN$=(NA<*AI)S^7Y097l-R zc+FY*0IOHDxhf+6U=pQ0~pN|NB9X=l7D{PkSHK+f5=H dBrDHP$j)wpM002ovPDHLkV1g-8x=jE8 diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE6.png.mcmeta b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE6.png.mcmeta deleted file mode 100644 index d746756cbd1..00000000000 --- a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE6.png.mcmeta +++ /dev/null @@ -1,3 +0,0 @@ -{ - "animation":{} -} \ No newline at end of file diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE7.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE7.png deleted file mode 100644 index 16091f0e18c57de87b152b4111588cbf94f49168..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmV;p0!RIcP)N2bZe?^J zG%heMF*h@ApJM<30yRlQK~zXfV>me3WB){#y?qYbJMA{M+N^7~UQuVcq}n_u${mQJ zysWk^UT9@y)l^gfK@33Er6ohNAx3`C@uFl9{*wbqd zR1Gxy=&X>#)BP4#nE_P;1%VdA^<)MI0+j+0kih_yI59sOYW8H00~1~0&RgAJg{%jN zfNo;|nGIAu-4EyzplXQO5Y<4>Kr}$~0NrM5Ys&zXfV%`@_J$T~i0XxvX0uC7ko5o& z15g4jppaEhFEpB%W6+bS57)+k>`OGW;i}tGbej^jp&I6vnjouQUTc9>b#0thS%kX3 zwG_jQB4Z*|7lx|&SV}TX$~6S4?o8JMx@1AQDW>Y0SWTen02}G-02Oyr35LEbeTcj9 zs0Nyy8>o`vt>|bd#?YOihs!0%s#ATG5}lCP#>=aG<#|RK9>N^2C5FVmoZWkWB{6760TklqMGHe43`UYkOle@7$!hp z0^JRC3D9hyYCR=>!ubK1et>Dt+`_`t)YRD6n5g_B126-DGyo+=^8=1FJDMMmqZwCz0H&fNTeqCtvzw^=09OstKumr> z(EyYnCO-i609B9H4+K?@<_Bu#2S_4?AfoCAcsd2v55PKwwEDrq!h(eQ0g_io^TTL< epiX{J;s*dU7`eRTMZjwS0000N2bZe?^J zG%heMF*h@ApJM<30^dnQK~zXf?N&=`)KD0`|DY&Re4>uEZETWh9y57oW)P`pp)FdK zsz{;Yw6-uUMe!{~grW!vqTt5jLcxs-iwj-4@n3mvzIf-(H62~fVlE$L@_px=B+WU= zW%ruR#d9;du5W+X`nmn}*N^Y0jkOl_EQq&U8A2P%H=n z&+`i99oMb6Tu+{|D2~D~EF@H`RcHmi-$AI=YRX9k0YX?&6eURl3`Y3N=FWsDSzZu; zOVSjI^;*5rXb_Su&rP7{00o>Vj{1W`5i%!;5@S&cfW2LFzHO#Tx3E@chbM!5?A40( z-8!~FCxcz?U{ZrznZ8}noLuWGk0jZDV}ZcYzPRQ9qLOXbgxLxFy?YQJ0_f4*3L zx?l)2v{z<^7S0}RScB|Y)BO0r-?~%nj=nxwnm>IcG4?PFpndnUMrfQ@Mo&fi(E<9T zJ$U8RVNcu59$h;D?boetR|0LIXKM%T;av>c>la5_=Z`N<9TT$)^+UKz{7-O~xNckt zw1GBD15EM7s5Xj)hb{MEa@f|gEZ22A2!?JTNxD9!5P-IA8@7cVnJl0AAFGTd6CBq8 znmacL+61&5$F&`3@ui%^_kB1wj-xig^L)?4IeB8R6avuXU49R!IF2*(hd3!Mg^*@G zhk5fn-~g>ONqGjc1p;xXcFY4ZkOihLQXxi!?B}6J@<30Xo-4iZWJic5JWPE~kkLDR zS>Rtd5+g=vF`zsYa`HULXpx6P0=&%gfM1eEo`*sLEX?x&W8;7XL>>wW-SQw4NbVnb z06~-(5wf3$9?1jDX__W~$B(IRc}>&)ZZgMlXuo8bhBAW+J|%ed%l&-61WSV>qcah{ ztjckI}da$ s2w5)vW4{CrRUHec{(h+^^H3W24Rz$4`+m@tRR91007*qoM6N<$f;=O6^Z)<= diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE8.png.mcmeta b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE8.png.mcmeta deleted file mode 100644 index d746756cbd1..00000000000 --- a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE8.png.mcmeta +++ /dev/null @@ -1,3 +0,0 @@ -{ - "animation":{} -} \ No newline at end of file diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE9.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE9.png deleted file mode 100644 index 963d8b1a225b867db6778ccd782f2200f19df11e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 zcmV;C0&e|@P)N2bZe?^J zG%heMF*h@ApJM<30uD(;K~zXf?UmarL{SvR_kSRgT*DYN?gqn|bLL#;5TTH3t`V7G zre@@lyWC1{QKF>C1LcJx4|wz9zw)uQ9b?YSk=Ik}Y0hu0zP0xHW|7s2z`V!fZEcYx zNl}#UdZ(|u7I8jPaWYYM=r7$LFWL4Ktqm2d4(2cP**+3jj#{mCgYblBREci<}-Z?=+$%L}*q ztppL4Ml(C!;^Br&0yKoaUFUz(sJ%H{I9QiK7#daybVCVhgT|D4Ytp|GXqO?iL+Hi+ zybd{yoK2N$>8r&mJsLA@;*$v^8l*APMlOkibi%8I>{&Pk|oKlx)~kC53($)8aj#}WJNLkpii5A_=6wbo}XwKy$`Ps z_bkWIeSpi5gV5S7iXTGEY5GA!(@in`pr_=2e!zXeKfWLcM*RRA(E9+|kROonxBKwr rHRJaIwAMX{u(at1(+`pTV2ODL{8Vw#%q)kN00000NkvXXu0mjf{t_mB diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE9.png.mcmeta b/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE9.png.mcmeta deleted file mode 100644 index d746756cbd1..00000000000 --- a/src/main/resources/assets/miscutils/textures/blocks/iconsets/LARGECENTRIFUGE_ACTIVE9.png.mcmeta +++ /dev/null @@ -1,3 +0,0 @@ -{ - "animation":{} -} \ No newline at end of file diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE1.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE1.png deleted file mode 100644 index e9b05f8181e24b4729308a70b873cd9b2889bdb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?Pe~P)9BM5pSaq);9N5B-biQs+(~9qK1U zL5CnhC3JS;%{t?{t=4#T2Oh(`H{YB0-n{u3#WYO{{b5-aP)dgcbuhw)qMI>q4&>hCxH2kWjc!=P7vEFapi34>%vFquO^IAMEXKv(E){KqdJA!E@0FlikB3`TxOjsVt)T?sn}6u&23T zb8zW&IzxPb|AUi4L9By;z|`}B&j&sq;HzAik4?r0_$m?1QsA3q{|Bc<`&CNw0qGGS ztlHnV!UCuQJs1qihEOQv=o}7*W#_)WKB-syem_f3 zPnU}5(M1SuZRmj~S}BaJ|FLp|wJH>yot<1M8nO#3!B_m!^OL1Mj9{oAJ~)(?)=K zM8~w>lbAigoD*g`mFLTX6{%_b`^2$2UN1!=&>pl032j728!$8M%4#JF? z$SvC<0S@f1mY@jm^Vcjq3U`Bwol&wgy>R^8c_5Sm#bV5Vw2034LmfbfX68T$A!J!| zfrBUt)0Z;OL24@ZqVaMoP(p1$R`;y{nnpk!e)-DLNHhxTcU0OEXpQ|wTMGxsE!%2( zVD;k6wf4B~6GCB)zk&~t^oAy zMF8N?iZR74p)NU)2e++t&Z9+aYxDq1w4I9X3l_T2cv8=Yu`4kQ1fWJc+P3xd+5vb7 zR3{KOHrjLWumm8Hh|~*i@CanF5N z__uXi<8l=%F)klumXtcqLLvG|Z1O=?VF|28ugAwsK8Por6AV7^m6pkYCeQ=H2k}IN zAiNN=ExcI+H9Z4=B1<6d41!piu3R;#%_4a5P|@I2 zYgwKuf?4 z0)S7U!oXv_3!uDx@!WX!xC6Z#9^|yf7m@1nV$mq!iA0dDJ9lLQkzDzmiHBt@DoD`* rqP=+i^hr$jHL3yA7^o=#j4}8JZ^hT6%) z^Tdf0;hLvToeCFcG&D5)&&9A6Qvg{Rd@XQ2U^!vy0)`>o*KDr!OVGeenPPKZd&Q kez?=6L`8@%4;UC20Ps;?eo%Az>i_@%07*qoM6N<$f)FJu$N&HU diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE3.png.mcmeta b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE3.png.mcmeta deleted file mode 100644 index dd1bedb1201..00000000000 --- a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE3.png.mcmeta +++ /dev/null @@ -1,3 +0,0 @@ -{ - "animation": {} -} diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE4.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE4.png deleted file mode 100644 index f69d8cb0ec83d94237ead8a34e08c6d96080bb34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1079 zcmV-71jze|P)5T1KiGt^j9OB6yV7bLXWwW31m#VAt5hkhPTEVg`aBQ0# zeSSL(Q`2#v8Q_n*ySt&awUtKh>FI&a{(EBd3vDN;J@a!`xV(9>og8Y>Xp|iAw0RlJ z*K8IJIxd}}_8-F#4%k^n>bg<*nJQVCnc_`BUYMRb8{)L>Kwc^R_&HvV|}_a8rkrI}g&d*J5)!<8zC0dl~b zCPzV*_=k63nkIz|)i4dPObcLJwY!NtgTB5#;pF?+kjIIJf12FZ;N#07XsD|Lt-QQk zY@)mz8OEWx37Q4ZeoRBjibBz6bY_IZVev9(ALL|;R#pAO z0rG)7eK{Xw@l7TkxvQ&7jNIGX3wf(IiS;8J4PNV-=Zum`g%2`*eFf7piOMX?hO4)3 z3rD&NA5h=MnL4EBk2k`ZV@F*FL42?zF$vgpfCsUujnaJhP%t0h`Vqp!$P%1Uu^q?< zj=T&hb9e4L;D#}X4+_fH&SNCT0I2YRpAlmKRQUjnIg#XKLKQP;Zf^EK8D&{GAEqYa z0yuu6%m=a{4mc88Bod)8A|Et0H3>eDk2XZ2l{{3GHwZD=tR{@&Q(7e!>~4R3FIc z%fiW}#0LvyBB=6#pCASZ2P*Y}U!lc-Qs#ryLW}DrrTSpz{TLa@I{wDR!hi9>na(Te z^8p%Tc+u+8(?Q>45=9nITQ+7sVDU>Pk z@Q&*Mg7`qAe@`Ff^wA>(=d|w&)JEs&+!r{RYWD75+ xh3dL`GUT#HnGX=oj7a&$qRaPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;(#7eog=Y0_#acK~zXft(Hx0)Ibo0eUM=^;~6_{|KPa_ zrvP^Bvq7AJ3lNDNJAO7SScFBgL*hX2b)Ho&m#vTm(Ua_c^eEsVBT1+5O7J7uR8GIqRsQ5BEhsu zzzhL0Sl)Qzf=3LYvMlSmqV9zucuWnXNo`wHb&Z=a5MGmu_9o2X;*@)GIz8jaw>}&CVF(_+37&blR$4J2pJ^Y) zz?t@p-i;|p;4hxArock-Pv0f6Qmi*lQvLp-y-mGt4WyuJyV%}f^E{L%KE`!w(?)y$ zpYvd{d}SRDhuv-`L-2?pWHZkO6$BeRrUte))3+69YgbYrRtgUbaWT+T zi}nWc>z&&4`^F4|`%i$c{P}e9;Zu1EhWyV7kG|_uYSmOe%#g-ec<%210`6wTBy5EW Q6#xJL07*qoM6N<$f{JFBp8x;= diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE5.png.mcmeta b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE5.png.mcmeta deleted file mode 100644 index dd1bedb1201..00000000000 --- a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE5.png.mcmeta +++ /dev/null @@ -1,3 +0,0 @@ -{ - "animation": {} -} diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE6.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE6.png deleted file mode 100644 index a61511d4c2283c8607968d4db471566f25cefa51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1151 zcmV-_1c3XAP)BWoY7!!P6h%?TiMSwmRS*yUf*d4>H!q^#Zg9aZiE(rS8Zh9+1-A%E zTu@X{aa<52hzk-mBx*29CK*Gf<-N|URM&Jh6F;bQdb++>ue!ea>b2OicfSV!ux{-d zV0`=j1DeiUfGP25^h?+4dyvoP!SlR==ITVo%(5AQ`_j@pw!m)u z_`F@sSl?P5K@4U5`+-YQhy>aItm6m4-O8}HJ8g#qh-u=bdc(#lpuwm zD+bXKkH_tPfPY3tMgS>!A&6`Si1Y&_(*xsS(SDFfBs|(c(t!hwjcQcW)~tSTG~E;_ zUxv*OLM@FoP%%5MreXSlnnLTtN6LCwm57&_41DhH4#+vw4@}Z{ra{Zdq=z@J`%Z)} z6y3;mNS!dDTm=aAgFBZmD*GagYCw3RAcIIhAOXQBNsKlPRzIjadu}X%@Y$?H-B4|Q zKpCJG4mO?w!2KZoOiVdj{Xp+jTUQTzjvXg52GU{m1J;4=LZ*zP{2j(ZaE?-GE-LGDZ+Ye|Nm535ay7YCv9iJay5DtV5jN-Uh~(ez-vt6j)(6}PgXo$-1u`Q205lb{CU9wWMEU_&>)7y=!uIQ3 zXYqb;{^l)@kGH4oZQ!~Nl{rO!FCh8BjjJSGvbDTlCwWDFFUY%BE`gW#06c&^1YeN< zy%1d=NM+NIry!tNww^@gg4JqdHWLbfXCoeM*x5|mM5rHdpTnus1q5~^MwlO1tMxF1 z`hi(sn}rs`>IbZWB~?`gW9o)#^8=Asyx7BUMYOS1>(-BrXza*OnT`S}`@4|~Y$@Pb zM;m1B-iBBA@4=rB!5wM!gJd#ErLO+HfGszvvbg#HJ97s7y@2;Rtn~o^`~$+Tusj^G R+%5nB002ovPDHLkV1jn^6odc( diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE6.png.mcmeta b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE6.png.mcmeta deleted file mode 100644 index dd1bedb1201..00000000000 --- a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE6.png.mcmeta +++ /dev/null @@ -1,3 +0,0 @@ -{ - "animation": {} -} diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE7.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE7.png deleted file mode 100644 index 73a0abe065a7b06884ac196191f2e8bf4456f8e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n2LP)yl;hK7Sdf@E0w@-i-^YRNZ{N|Qsc=-G|SR)9( zeDjWh(a_NFKNlAlTm!l{KztAoRkwn>L|m31%zkY{i7-TBzWWc8ikhB0B&h)*+!et3Ql zA{w={wElB*a}%u@8Grx&9TJV?XoiV1!6YY6oJf>cK>T_0=D}lzQA0xm9*Ec!<1_Tf zj~@sZkg6GmnP7rbr%r_n&X_R+LnF-DAoij~i{OcjQAI@sZ&F52(#Y~4FR*|ZU%!6E zstFcDFwN-VAi%=U&ks)&gvtZv&yN}Y{{74F@9$rRztCjQ0+Pg69v}lICMJge3{Wvf z1_oU(M`qB|! z9*mX;L%KXjudHSe7T{-KXJsY5JV+_4fNKVeky;+01G35kP*X=rRD_|vsE~nCUtgbK zUI6jMHErN_!wMB}QidrSZ6A!52P3FFXspXe$%_@)S)`Q*&tAWQ=fZ#g{z9sGQpy8R zW!h3+25%pLTI*!D4?yCe;*G5S!e<5suptbTv=2thgVFL}5S0fE3=9CFpBR3^`+89T O0000$} zM9tZAJ`dXaV9zrMA$;a{loW%LXCb&xNa1OcLO_NjE}uE=i$V%6z!*yzJ{Q&;#{G`C zkOEb84ZiT5WJM_;ILD2P7gQ8PqhBY$HgDf+(no#W5!dQF*I=UmEht760RuSWn90t! zQV8cRSA+A7S8Sgv*5tY)pao>iRwB}R(#s%Ep`>NF);AhGD=oO`JMfjxPh<81L`G*t^F*h2d8n80ved6lpH$5wU`T0u=!n(Z=-S z{r2*wr>Ey5_*Z59aLtTHqc*d-x!I@K($Zopx3;#bw@M)riP$MD=9$PTrxYX&;_-N( z5|LBc%U2QHyxVSiw{dkv1x%PIDc_5YMMbV{exmZA+SXJX^!9;3P2~YleIyFTy!jA_( z9SWI=QQOe)*qGuCx3wWQVnvJW{M2~hG-fNM@!-G4gNM(1)W~}pdHVrpuRy1@KFxWM zGBq2ih_<{wsYTxEwWsymKgJy5iQo7!Hi~DRo!GE>3oS$XZiC}PW2w7PfkjwJ$ zD>jbaCtdSfS$iMpeWCEcOi|8A78GL~To;Qb&ZX)Hf;tkf0Vz4;dwhfX=k?cZgf-z?V{&U?6=;PjLM3N$vrD4qZghaK6 zs_e@M59sP82`PM%ZQWTG;GKh69kzNuz1QY)WZxHfz+C`Id?4fczTk~PQa{8Dwjc%& zKIjXHcGTC|p-P*8ms4HOh1aNs@}d(Qmko98k%U%OcS5C2y@d-8G_&gPKKCE6+y~wl f(s+=@0|597{2vZ5X-a-#00000NkvXXu0mjf23z6? diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE8.png.mcmeta b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE8.png.mcmeta deleted file mode 100644 index dd1bedb1201..00000000000 --- a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE8.png.mcmeta +++ /dev/null @@ -1,3 +0,0 @@ -{ - "animation": {} -} diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE9.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE9.png deleted file mode 100644 index 54ac28edc86d09700c5231ff1325e06f896b3c66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)M~XN-Dwhl0(41LJ;do zk3|qcFCr+ShDu4?5Xj2g_$HId?%K(z$PT=n*_ruf=FNNWnZ zM1)%JF!a6d2Pzl8cfGpNXn^aw9b(g9>{Sm8zUc=@zlFbNr=XTZBGCp?7phb$fS{FX z&w$*$e0C@&=W;m-&gb*8UrfH6bjRL*fb**>xW2gW027FczPmiZ?7|`(?eDdL89>7N z>tO!JpIh7T5F2U(-<=-#UKmTEP-v+z{b|l+psKUqk@dc6wc5HwQ!tB7b`CRDSRWNs zFU$nY{m6r4=b%aYf3aAU<`wC5+KtEKfs?})bsVR40#h&xa;NH^s-0Q**wikSO7ap# zDwUEdJh!tRm862rKJ5omV?cLruI*$p2@^9PVRU?4x-z-^( zC_Qm`altr0z*@a7W8ll$I#_6R@QJr`gM2c_>D z9U-k=Si}brA3S%Wmy#dQ)6Qbd2P;1|q4~r&#h4Gg&r^PY0?qk=DQ$IWsk{7u28oHB zF7pF1G4t7*6~+hp0^}#zY}O0shz}w@_z(C103HEU&LWje`J*ZT00006%) z^Tdf0;hLvToeCFcG&D5)&&9E zBo;u5k&`EKJR|!VrdeD>2+TKjc4c5xQBlF0l#w-qoGqZH0XBexl^rb30!!1_0uUYi o{r8vQ)s@Q(3_7|HLs;1v0GcRUMN~Ym$N&HU07*qoM6N<$g1g{`P5=M^ diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL2.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL2.png deleted file mode 100644 index 50ce1abd9c1ae0e64b145c3d3b4e73088d8284d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$uHP)6%) z^Tdf0;hLvToeCFcG&D5)&&9Q)Tmnl>n!XUv#^@Pe+cF4zkKN~R2?fQRSzFns&=je*fUGUq?KzRw@u zVKs`EUkF2t1)C<$pD!8yGyG@ZS5Ze%{PHnE4a_hWm`3*R&q1Nb01ERz{}GN77ZGCM zU}Xohvl0`)^v~bF8QR*Xf!T};H*ftfB`U)3?DZRlIb9uKL;gc!LQF>wZh*IkJKRu^ z0dGHiWLP}0kAVrK83cp{_!&~lDj5F!{mbwdgrV_|4q%$+^>i`(`STAE1~BmF&mW@V z0%Qpz<9|p}28RJFE7%n|bqx%E|NKQU2-*3_2K@W?hkxR#DQw6)Ez5H00000NkvXXu0mjf DuR6x? diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL3.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL3.png deleted file mode 100644 index c4a02dcd25c3b98677739346b48d579d9f6700a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383 zcmV-_0f7FAP)6%) z^Tdf0;hLvToeCFcG&D5)&&9p*B=I762oHjPLYFQ@P*>>^ zor~xeQ4yIWvXJb~Zp_OWX4ieo$Gq8@_s#q95lzz^7@2L`;5d#zdT|{O2K^o=#v7hn zl!8quq?a^ECT1YOE<~eIh(sa+;cyrs+wP$blu~eP8;M@-@8GlB1I&P3uGj0J>pH&N zXf&YKIuoxSmG;s9{^<+K)8jG{5>-`^fTzvNn4Vu21l39r{h?_J0!|k6*3FEsUJEIT z_!FOs;Tqt9ENy#KA17e1C+A{tb$#PY#z6Ab)S zJak+ngndNz2|V9+V5d+3lFQ{p6XkMb8BYveF$VO5eS}hUWZnwvR_ey09WZ)XWvurl&D`kd^x*^Koa`qbPz%Y!lQF_aG|LQ_|HX-(? bP5}4=r(jrC9u!?U00000NkvXXu0mjfc01I4 diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL5.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL5.png deleted file mode 100644 index 7fee9a77ade426ad11b812803fbe53e63827f3c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 413 zcmV;O0b>4%P)7}W3x?ggVBr;JMmFCW_5boVj7>WOz z_CzBJLm7)lWUtZ4*^9`4|MvbN2+}^kkU>B)GRE?bTJ6kD_u=uWFjT1=%hY%!XY-QF zs|=|T-=AG`nw*}=IljI;o4vZYkSoh)%~&pZxE!0MZO9HpYT`>@I4teh+*p^b<(dto z??9xWK~b$FoZa2$Y(M=BZ*H&64&8#|)~R)>RhR5plU?Z92+&6MoEqRIW@P)VNx}}# z&OIU#-aqroC)d{?r9?5*ZOX{qpVpK?3M7#=F|oP=E`%aefQ=wouO*Q;=jY%^2V8P6 zE2ybLWk9L0$%#Y)(P;Fygz?EKbyeo-0zya#A(W8{@@_+yDdYL>#HYk{UC8c^-$M)x z)pUd4X7c8{UMppz6H9e~_-L;=cr>$TtU+Oj{6-H%Eq)OeU2l za6LRhP?BsWZywN=9f?H#-ayYlduxkH5ptY=<(+q4cEvRAAR!^0dO{7#RWz?uS zc)GrX6cSu;)%%H=S>NCIaG5qW+X_mh5;(Q5w|@|fGceA<7(;4n!*@Fk3OmH+?%07*qoM6N<$g1NiW&Hw-a diff --git a/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL7.png b/src/main/resources/assets/miscutils/textures/blocks/iconsets/SC_TURBINE_IDEL7.png deleted file mode 100644 index 59217da11ff03141d5494d3d1984775823d53595..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAk1P)yl;hK7Sdf@E0w@-i-^YRNZ{N|Qsc=-G|SR)9( zeDjWh(a_NFKNlAlTm!l{KztAoRkwn>L|m31%zkY{i7-TBzWWc8ikhB0B&h)*+!et3Ql zA{w={wElB*a}%u@8Grx&9TJV?XoiV1!6YY6oJf>cK>T_0=D}lzQA0xm9*Ec!<1_Tf zj~@sZkg6Gm!La}moH}(XTyVyW85kO2&IYj;Em{OmWQ-~*DtMDJdXh$#2YG=7#Q6I4 mD^^Xg7=md=7iVB#U;qG|x=tad4vs(o0000^S)$6t@{*=u?3W3;x3a!rBVTJG#W4r1IzPMc)LmCHJ8H6^@&D! zxID&v_Q)hsE%6A<@AsPysEKN(j`Qz~SF6<@2md9j!&NXEjatE2ET$3T@wi1!BogLr yj^Ok8tP%cFCbZ^h1WAu_x%?}M&`Ng30pJ_9Oh-_!G)YeY0000QYSnn9XC0Nr-D3zEyq87?0>fT9_u0fb@xN7oGFGtHd7l;Jyv z1d8Ujw@+XVFc_XOV+O(t?vXkFVH%PBjLpgDV&A@fLj)qJnqim)6wmmg3ZEDVFd+vR zDVky8OfX4MJmXS?&Yw4L9z1#(H8eE-b8&IuRE*EiA3uH|TtKR37-oVAA}3Gec!pt^ zvq9`dix$BHkx@lO1?~kxHlycCkQZ2BX&Rd* Date: Thu, 5 Dec 2024 13:06:10 +0100 Subject: [PATCH 074/181] update --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 9a5b3738e78..7dd4999b1b6 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -36,7 +36,7 @@ dependencies { api("com.github.GTNewHorizons:StructureLib:1.3.6:dev") api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") - api("com.github.GTNewHorizons:NotEnoughItems:2.6.48-GTNH:dev") + api("com.github.GTNewHorizons:NotEnoughItems:2.6.49-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") api("com.github.GTNewHorizons:GTNHLib:0.5.21:dev") api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") @@ -72,7 +72,7 @@ dependencies { compileOnly('com.github.GTNewHorizons:VisualProspecting:1.3.28:dev') { transitive = false } compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.97-GTNH:dev") { transitive = false } - compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.5-GTNH:dev") { transitive = false } + compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.6-GTNH:dev") { transitive = false } implementation("com.github.GTNewHorizons:TinkersConstruct:1.12.16-GTNH:dev") compileOnly("com.github.GTNewHorizons:Chisel:2.15.3-GTNH:dev") { transitive = false } From 28cb611994d41e62bccc628e3d6e6c3d59928750 Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Thu, 5 Dec 2024 19:30:08 +0100 Subject: [PATCH 075/181] Fix dense vs regular SC Steam difference (#3602) --- .../multi/production/turbines/MTELargeTurbineSCSteam.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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 index 82bc4a59c9e..c735f66ea37 100644 --- 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 @@ -132,10 +132,7 @@ long fluidIntoPower(ArrayList aFluids, TurbineStatCalculator turbine tEU = MathUtils .safeInt((long) (tEU * (looseFit ? turbine.getLooseSteamEfficiency() : turbine.getSteamEfficiency()))); } - if (isUsingDenseSteam) { - return tEU; - } - return tEU * 100L; + return tEU; } @Override From b718491b2d960df201ddf5cb8040ee3cce7c72a6 Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Thu, 5 Dec 2024 13:39:24 -0500 Subject: [PATCH 076/181] Fix nether quartz block conflict (#3603) --- .../api/util/GTRecipeRegistrator.java | 5 ++++- .../loaders/postload/recipes/Pulverizer.java | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/util/GTRecipeRegistrator.java b/src/main/java/gregtech/api/util/GTRecipeRegistrator.java index 745a544a520..1898e5f084e 100644 --- a/src/main/java/gregtech/api/util/GTRecipeRegistrator.java +++ b/src/main/java/gregtech/api/util/GTRecipeRegistrator.java @@ -179,7 +179,10 @@ public static void registerMaterialRecycling(ItemStack aStack, ItemData aData) { || 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); + // Prevents registering a quartz block -> 9x quartz dust recipe + if (!GTUtility.areStacksEqual(new ItemStack(Blocks.quartz_block, 1), aStack)) { + registerReverseMacerating(GTUtility.copyAmount(1, aStack), aData, aData.mPrefix == null); + } if (!GTUtility.areStacksEqual(GTModHandler.getIC2Item("iridiumOre", 1L), aStack)) { registerReverseSmelting( GTUtility.copyAmount(1, aStack), diff --git a/src/main/java/gregtech/loaders/postload/recipes/Pulverizer.java b/src/main/java/gregtech/loaders/postload/recipes/Pulverizer.java index 83b39c01b23..356486bead4 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/Pulverizer.java +++ b/src/main/java/gregtech/loaders/postload/recipes/Pulverizer.java @@ -69,6 +69,27 @@ public void run() { .addTo(maceratorRecipes); } + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.quartz_block, 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 4)) + .duration(19 * SECONDS + 12 * TICKS) + .eut(4) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.quartz_block, 1, 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 4)) + .duration(19 * SECONDS + 12 * TICKS) + .eut(4) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.quartz_block, 1, 2)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 4)) + .duration(19 * SECONDS + 12 * TICKS) + .eut(4) + .addTo(maceratorRecipes); + // marbe dust( stone dust GTValues.RA.stdBuilder() .itemInputs(GTOreDictUnificator.get(OrePrefixes.block, Materials.Marble, 1)) From bc909f6edeb0022ee0527fb4c692c49948215ed3 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Thu, 5 Dec 2024 19:40:25 +0100 Subject: [PATCH 077/181] update --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 7dd4999b1b6..08d0ac8de50 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -72,7 +72,7 @@ dependencies { compileOnly('com.github.GTNewHorizons:VisualProspecting:1.3.28:dev') { transitive = false } compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.97-GTNH:dev") { transitive = false } - compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.6-GTNH:dev") { transitive = false } + compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.7-GTNH:dev") { transitive = false } implementation("com.github.GTNewHorizons:TinkersConstruct:1.12.16-GTNH:dev") compileOnly("com.github.GTNewHorizons:Chisel:2.15.3-GTNH:dev") { transitive = false } @@ -97,7 +97,7 @@ dependencies { compileOnly('com.github.GTNewHorizons:SC2:2.2.0:dev') {transitive=false} compileOnly('com.github.GTNewHorizons:Binnie:2.4.4:dev') {transitive = false} compileOnly('curse.maven:PlayerAPI-228969:2248928') {transitive=false} - devOnlyNonPublishable('com.github.GTNewHorizons:BlockRenderer6343:1.2.15:dev'){transitive=false} + devOnlyNonPublishable('com.github.GTNewHorizons:BlockRenderer6343:1.2.16:dev'){transitive=false} compileOnly("com.google.auto.value:auto-value-annotations:1.10.1") { transitive = false } annotationProcessor("com.google.auto.value:auto-value:1.10.1") From fd7b74ebdccccaaea9ff002574edeff8b5d02278 Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:56:39 -0300 Subject: [PATCH 078/181] LaB6 Recycling Recipes (#3604) Co-authored-by: Martin Robertz --- .../loaders/ElectricImplosionCompressorRecipes.java | 13 +++++++++++++ .../recipes/ImplosionCompressorRecipes.java | 11 +++++++++++ .../loaders/postload/recipes/LatheRecipes.java | 10 ++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/main/java/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java b/src/main/java/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java index ce03b6eb446..084ed2f9ca1 100644 --- a/src/main/java/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java +++ b/src/main/java/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java @@ -15,6 +15,7 @@ import static gregtech.api.enums.Mods.UniversalSingularities; import static gregtech.api.util.GTModHandler.getModItem; import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; import net.minecraft.item.ItemStack; @@ -25,6 +26,7 @@ import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; import gregtech.api.util.GTOreDictUnificator; +import gtnhlanth.common.register.WerkstoffMaterialPool; public class ElectricImplosionCompressorRecipes implements Runnable { @@ -49,6 +51,17 @@ public void run() { } } + // Manual Add due to werkstoff material system disconnected from autogeneration + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.dust, 4)) + .itemOutputs( + WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.gem, 3), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L)) + .duration(1 * TICKS) + .eut(TierEU.RECIPE_UEV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + GTValues.RA.stdBuilder() .itemInputs(new ItemStack(highDensityPlutoniumNugget, 5)) .itemOutputs(new ItemStack(highDensityPlutonium, 1)) diff --git a/src/main/java/gregtech/loaders/postload/recipes/ImplosionCompressorRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ImplosionCompressorRecipes.java index 80a35f1da03..0dd99356ec3 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/ImplosionCompressorRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/ImplosionCompressorRecipes.java @@ -13,6 +13,7 @@ import gregtech.api.enums.TierEU; import gregtech.api.util.GTOreDictUnificator; import gregtech.api.util.GTRecipeConstants; +import gtnhlanth.common.register.WerkstoffMaterialPool; public class ImplosionCompressorRecipes implements Runnable { @@ -38,6 +39,16 @@ public void run() { .eut(TierEU.RECIPE_LV) .addTo(implosionRecipes); + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.dust, 4)) + .itemOutputs( + WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.gem, 3), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L)) + .metadata(GTRecipeConstants.ADDITIVE_AMOUNT, 4) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(implosionRecipes); + if (GalacticraftMars.isModLoaded()) { GTValues.RA.stdBuilder() diff --git a/src/main/java/gregtech/loaders/postload/recipes/LatheRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/LatheRecipes.java index db2c79322fb..4e9f1242c99 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/LatheRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/LatheRecipes.java @@ -14,6 +14,7 @@ import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.util.GTOreDictUnificator; +import gtnhlanth.common.register.WerkstoffMaterialPool; public class LatheRecipes implements Runnable { @@ -36,5 +37,14 @@ public void run() { .duration(2 * SECONDS + 10 * TICKS) .eut(8) .addTo(latheRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.gemFlawless, 1)) + .itemOutputs( + WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.stickLong, 1), + WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.dust, 1)) + .duration((100 * SECONDS)) + .eut(16) + .addTo(latheRecipes); } } From 7afcccead8af7daaa4525096f20970afa1d921cc Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Thu, 5 Dec 2024 14:41:00 -0600 Subject: [PATCH 079/181] Remove beamline debug recipes (#3605) --- .../recipe/beamline/BeamlineRecipeLoader.java | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java index f0b170bb4a9..7f9ac3e2284 100644 --- a/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java +++ b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java @@ -3,7 +3,6 @@ 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; @@ -180,30 +179,5 @@ public static void load() { 60, 1, (int) TierEU.RECIPE_LuV); - - 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); - } } From 9b7271c2b46343dd7bdda0288e7103a2013da24e Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Fri, 6 Dec 2024 07:39:52 +0100 Subject: [PATCH 080/181] fix SC Turbine giving Steam instead of SH Steam (#3606) Co-authored-by: Martin Robertz --- .../blocks/tileEntity/MTESupercriticalFluidTurbine.java | 4 ++-- .../multi/production/turbines/MTELargeTurbineSCSteam.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java b/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java index bc813f01498..73b718f6e46 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java @@ -68,7 +68,7 @@ public int fluidIntoPower(ArrayList aFluids, TurbineStatCalculator t } if (totalFlow <= 0) return 0; tEU = totalFlow; - addOutput(GTModHandler.getSteam(totalFlow)); + addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", totalFlow)); if (totalFlow == realOptFlow) { tEU = GTUtility .safeInt((long) (tEU * (looseFit ? turbine.getLooseSteamEfficiency() : turbine.getSteamEfficiency()))); @@ -148,7 +148,7 @@ protected MultiblockTooltipBuilder createTooltip() { tt.addMachineType("Supercritical Steam Turbine") .addInfo("Needs a Turbine, place inside controller") .addInfo("Use Supercritical Steam to generate power.") - .addInfo("Outputs 1L of Steam per 1L of SC Steam as well as producing power") + .addInfo("Outputs 1L of SH Steam per 1L of SC Steam as well as producing power") .addInfo("Power output depends on turbine and fitting") .addInfo("Use screwdriver to adjust fitting of turbine") .beginStructureBlock(3, 3, 4, true) 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 index c735f66ea37..f941db158df 100644 --- 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 @@ -9,7 +9,6 @@ import gregtech.api.enums.Materials; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GTModHandler; import gregtech.api.util.GTUtility; import gregtech.api.util.TurbineStatCalculator; import gtPlusPlus.core.lib.GTPPCore; @@ -118,7 +117,8 @@ long fluidIntoPower(ArrayList aFluids, TurbineStatCalculator turbine if (isUsingDenseSteam) { addOutput(Materials.DenseSuperheatedSteam.getGas((long) steamFlowForNextSteam)); } else { - addOutput(GTModHandler.getSteam(totalFlow * 100)); + addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", totalFlow)); + } if (totalFlow != realOptFlow) { float efficiency = 1.0f - Math.abs((totalFlow - (float) realOptFlow) / (float) realOptFlow); From 74db424d55cb85178d1fcfea62530c7e472571ce Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Fri, 6 Dec 2024 19:51:55 +0100 Subject: [PATCH 081/181] fix UCFE Scanner output (#3607) Co-authored-by: Martin Robertz --- .../blocks/tileEntity/MTEUniversalChemicalFuelEngine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java index f7d95fbcf9f..2598f0af3dc 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java @@ -276,7 +276,7 @@ public boolean onRunningTick(ItemStack stack) { public String[] getInfoData() { String[] info = super.getInfoData(); info[4] = "Currently generates: " + EnumChatFormatting.RED - + GTUtility.formatNumbers(this.getPowerFlow() * tEff) + + GTUtility.formatNumbers(this.getPowerFlow() * tEff / 10000) + EnumChatFormatting.RESET + " EU/t"; info[6] = "Problems: " + EnumChatFormatting.RED From 0f84f249f857912420d05b3eac9e856fc7b5ae7f Mon Sep 17 00:00:00 2001 From: Guillaume Mercier Date: Fri, 6 Dec 2024 21:04:26 -0500 Subject: [PATCH 082/181] Fix Incorrect bee allele definitions and elevate invalid definition logs to warnings. (#3609) --- .../gregtech/common/bees/GTAlleleHelper.java | 4 ++-- .../loaders/misc/GTBeeDefinition.java | 20 +++++++++++++++---- .../loaders/misc/GTBranchDefinition.java | 5 ++--- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/bees/GTAlleleHelper.java b/src/main/java/gregtech/common/bees/GTAlleleHelper.java index 88c46fed3d9..30945e7a203 100644 --- a/src/main/java/gregtech/common/bees/GTAlleleHelper.java +++ b/src/main/java/gregtech/common/bees/GTAlleleHelper.java @@ -152,13 +152,13 @@ public static void initialisation() { public & IChromosomeType> void set(IAllele[] alleles, T chromosomeType, IAllele allele) { if (allele == null) { - GTMod.GT_FML_LOGGER.info("Allele is null!"); + GTMod.GT_FML_LOGGER.warn("Allele is null!"); return; } if (!chromosomeType.getAlleleClass() .isInstance(allele)) { - GTMod.GT_FML_LOGGER.info("chromosomeType is not an instance of allele!" + allele.getName()); + GTMod.GT_FML_LOGGER.warn("chromosomeType is not an instance of allele!" + allele.getName()); return; } diff --git a/src/main/java/gregtech/loaders/misc/GTBeeDefinition.java b/src/main/java/gregtech/loaders/misc/GTBeeDefinition.java index 59e4ca8cb9e..c7e32b9d676 100644 --- a/src/main/java/gregtech/loaders/misc/GTBeeDefinition.java +++ b/src/main/java/gregtech/loaders/misc/GTBeeDefinition.java @@ -87,6 +87,7 @@ import forestry.apiculture.genetics.IBeeDefinition; import forestry.apiculture.genetics.alleles.AlleleEffect; import forestry.core.genetics.alleles.AlleleHelper; +import gregtech.GTMod; import gregtech.api.GregTechAPI; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; @@ -101,6 +102,7 @@ import gregtech.common.items.CombType; import gregtech.common.items.DropType; import gregtech.common.items.PropolisType; +import gregtech.loaders.misc.bees.GTAlleleEffect; import gregtech.loaders.misc.bees.GTFlowers; import gtnhlanth.common.register.WerkstoffMaterialPool; @@ -1719,7 +1721,7 @@ public void accept(GTBeeDefinition dis) { beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(COLD); beeSpecies.setHasEffect(); - }, template -> AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "freezing")), new Consumer<>() { + }, template -> AlleleHelper.instance.set(template, EFFECT, getEffect(FORESTRY, "Glacial")), new Consumer<>() { @Override public void accept(GTBeeDefinition dis) { @@ -1736,7 +1738,7 @@ public void accept(GTBeeDefinition dis) { beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(ICY); beeSpecies.setHasEffect(); - }, template -> AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "freezing")), new Consumer<>() { + }, template -> AlleleHelper.instance.set(template, EFFECT, getEffect(FORESTRY, "Glacial")), new Consumer<>() { @Override public void accept(GTBeeDefinition dis) { @@ -2701,7 +2703,12 @@ static IAlleleBeeEffect getEffect(byte modid, String name) { case GREGTECH -> "gregtech.effect" + name; default -> "forestry.effect" + name; }; - return (IAlleleBeeEffect) AlleleManager.alleleRegistry.getAllele(s); + IAlleleBeeEffect allele = (IAlleleBeeEffect) AlleleManager.alleleRegistry.getAllele(s); + if (allele == null) { + GTMod.GT_FML_LOGGER.warn("Attempted to get unknown bee effect: " + s); + allele = GTAlleleEffect.FORESTRY_BASE_EFFECT; + } + return allele; } static IAlleleFlowers getFlowers(byte modid, String name) { @@ -2712,7 +2719,11 @@ static IAlleleFlowers getFlowers(byte modid, String name) { case GREGTECH -> "gregtech.flower" + name; default -> "forestry.flowers" + name; }; - return (IAlleleFlowers) AlleleManager.alleleRegistry.getAllele(s); + IAlleleFlowers allele = (IAlleleFlowers) AlleleManager.alleleRegistry.getAllele(s); + if (allele == null) { + GTMod.GT_FML_LOGGER.warn("Attempted to get unknown bee flower: " + s); + } + return allele; } private static IAlleleBeeSpecies getSpecies(byte modid, String name) { @@ -2725,6 +2736,7 @@ private static IAlleleBeeSpecies getSpecies(byte modid, String name) { }; IAlleleBeeSpecies ret = (IAlleleBeeSpecies) AlleleManager.alleleRegistry.getAllele(s); if (ret == null) { + GTMod.GT_FML_LOGGER.warn("Attempted to get unknown bee species: " + s); ret = NAQUADRIA.species; } diff --git a/src/main/java/gregtech/loaders/misc/GTBranchDefinition.java b/src/main/java/gregtech/loaders/misc/GTBranchDefinition.java index 9bc4acb1141..c8fb4529544 100644 --- a/src/main/java/gregtech/loaders/misc/GTBranchDefinition.java +++ b/src/main/java/gregtech/loaders/misc/GTBranchDefinition.java @@ -22,7 +22,6 @@ 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; @@ -95,7 +94,7 @@ public enum GTBranchDefinition { 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")); + AlleleHelper.instance.set(alleles, EFFECT, getEffect(EXTRABEES, "radioactive")); }), TWILIGHT("Nemoris Obscuri", alleles -> { AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1); @@ -144,7 +143,7 @@ public enum GTBranchDefinition { 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, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock")); AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST); AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORTEST); AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST); From a12d3b07a57440925f0961ab0a77def3a813c899 Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Fri, 6 Dec 2024 23:13:46 -0300 Subject: [PATCH 083/181] Tweaking EEC EU comsumption (#3592) Co-authored-by: Martin Robertz Co-authored-by: boubou19 --- src/main/java/kubatech/loaders/MobHandlerLoader.java | 2 +- .../tileentity/gregtech/multiblock/MTEExtremeEntityCrusher.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/kubatech/loaders/MobHandlerLoader.java b/src/main/java/kubatech/loaders/MobHandlerLoader.java index 11f99651394..346448273c3 100644 --- a/src/main/java/kubatech/loaders/MobHandlerLoader.java +++ b/src/main/java/kubatech/loaders/MobHandlerLoader.java @@ -74,7 +74,7 @@ public static class MobEECRecipe { public final MobRecipe recipe; - public final int mEUt = 2000; + public final int mEUt = 1920; public final int mDuration; public final EntityLiving entityCopy; diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeEntityCrusher.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeEntityCrusher.java index ad4ad7ab443..4d1a31929c4 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeEntityCrusher.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeEntityCrusher.java @@ -262,7 +262,7 @@ protected MultiblockTooltipBuilder createTooltip() { tt.addMachineType("Powered Spawner, EEC") .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("Base energy usage: 1,920 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.") From 9bb79d064efd54641dd1238523f0f7e89c94dcf0 Mon Sep 17 00:00:00 2001 From: Guillaume Mercier Date: Sat, 7 Dec 2024 03:25:59 -0500 Subject: [PATCH 084/181] restore missing auto-workbench button textures (#3610) --- .../textures/gui/overlay_button/mode_0.png | Bin 0 -> 177 bytes .../textures/gui/overlay_button/mode_1.png | Bin 0 -> 143 bytes .../textures/gui/overlay_button/mode_2.png | Bin 0 -> 140 bytes .../textures/gui/overlay_button/mode_3.png | Bin 0 -> 141 bytes .../textures/gui/overlay_button/mode_4.png | Bin 0 -> 132 bytes .../textures/gui/overlay_button/mode_5.png | Bin 0 -> 209 bytes .../textures/gui/overlay_button/mode_6.png | Bin 0 -> 180 bytes .../textures/gui/overlay_button/mode_7.png | Bin 0 -> 178 bytes .../textures/gui/overlay_button/mode_8.png | Bin 0 -> 188 bytes .../textures/gui/overlay_button/mode_9.png | Bin 0 -> 211 bytes .../textures/gui/overlay_button/throughput_0.png | Bin 0 -> 205 bytes .../textures/gui/overlay_button/throughput_1.png | Bin 0 -> 194 bytes .../textures/gui/overlay_button/throughput_2.png | Bin 0 -> 188 bytes .../textures/gui/overlay_button/throughput_3.png | Bin 0 -> 177 bytes 14 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_0.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_1.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_2.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_3.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_4.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_5.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_6.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_7.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_8.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_9.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_0.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_1.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_2.png create mode 100644 src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_3.png diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_0.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_0.png new file mode 100644 index 0000000000000000000000000000000000000000..482c67e6be21a42a0cb93c7d087eea6823ca1c3f GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rhe3Qrfu5R21mC!gj$pupoCuN0QX zW#m=1qv2 a$i?2+t9aN}GX4(G4Gf;HelF{r5}E*N%tQtN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_1.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4fc736115cbc7aca5d1b5fc903d087d52664e3 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@W2dPZ!4!i_>o>9OOLUz`=6;@I0L$ z?~TXLKIVAB!R~qHawBW(k>ebmA)OpAEJIHCG^pH>WvDni``j6WY1f~eY0rD0UUJjr qojAX>;>}IbWvB0*y4Eq{TDMI0-Zn?44z6^d4Gf;HelF{r5}E)CmNnl1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_2.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_2.png new file mode 100644 index 0000000000000000000000000000000000000000..45b8ec9f6f64a4b44ff160af946e860b3dc8dcae GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RheU{4pv5R21qCv4Qn%$rWtm?!NJU#mzXK o--~Z3|32}r^^IO;gnkk8^Pnu(8d1F^K;s!aUHx3vIVCg!059z`C;$Ke literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_3.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bad33ed910d53c8f5618ad56f99cde45bfb2a5b8 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rhe5KkA!5R21qCv4=MJ+*E#eL?d9gOpwg#;U!^*`=ioK}7M p-}*PwovUw8+pD(QTk2Z(oSLX6UG1q>)fPMG fiTz}%?Maqv=BrpU6u#vFjb-q3^>bP0l+XkKFFYxa literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_5.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_5.png new file mode 100644 index 0000000000000000000000000000000000000000..355cbe27192a3b757bd711ce0b073d915ac5eff1 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rhe8J;eVAr_~%1|JkWqQDU&5xtE| zqg8INyPBnH#+Nf61Knc8B34XkiVY53@_AEoS{VbQ!?~Xe%8XRH>UWk4Dl$A!TcB5b z@wvh3^kC+a8J`3iR>ZIREU7Pff79>Hdiq^I<(2i%tT@;#@$OZM$|D^Q>Xv{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_6.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_6.png new file mode 100644 index 0000000000000000000000000000000000000000..44d30c40dde16b869ce3ceecaf1d02cd83aa7c0c GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RheYEKu(5R21$Cns_pP~dR0U#eZ+ zWz$t&Vy|R&Y}&MBc^1d@=_-?EDoP7FO3wBP+1kyp;M%UQTdqklGCW@VLuvEAphc?> zOf2*enot<=XwJt;DTh96deZuL3NZ5R21qC&zLfP~d3}{&;HM zA-SdHZ{(I3?Aqn|wUAL!p~m-*V(8IzGbFE`>2pbGU|6tqTGzE|bq0-x>t03V-&@%- zVYhnMUv-U@>L-@X+WzvMe(2{7C-g&&Z|L|IxS6g=+x|Ixwz^fAE~E9gO{@PO%@i

literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_8.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_8.png new file mode 100644 index 0000000000000000000000000000000000000000..dcfe6ac299bf81992a2a8a8d309c607231e0fcd4 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RheW=|K#5R21mCkOH!P~dRxet2r0 zQ{N%kyT>=>1kdbvJzeeD(kWhB!`^tg9Jrq7zN)H;LE*W~rZ6u>2J;hFic6F}OYUY6 z=3rQ2uVALJ;EJW>)q{Z(Q~Dgf?DJ3fn~^K$cf(>a!x{N+EZeqi<-hUkSFc~;3KQlV n`K?dBiMKl{F@@eOD`EJ1UHvq3^sbXY=P-D>`njxgN@xNAWxPqC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_9.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/mode_9.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c2aec6ecc4885b61eb303e86b4c7557a51c04d GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RheS)MMAAr_~XPC3ZyqR8RWcwCTG)OT`yWe`$HL* z#L{hxJZ0aB$QpmDjQFs2!|w7`ysMT?Z+s)V|7t>-z{J<*-!h*(?tJ>0@q;j+D;Ydp L{an^LB{Ts5tQ1k= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_0.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_0.png new file mode 100644 index 0000000000000000000000000000000000000000..6416b809c070984cc196ec3e1660ca9fd5998b07 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RheDV{ElAr`0CPKo9_s=(pG{&-q! z>t>N}C;n#Kx^u-lc6wTy9~XnjdCew=Cp)I~ z1V7tb!^l{0?Zu>XGp!r2ZkqJ!+>I8`SwAg{ zuI!n;xYOU)Ic;+(bL9k&ha9h#EckwX^^!>~tMv4@%Wv!Pd1@=XzXs?&22WQ%mvv4F FO#lPXRFwb# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_1.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5bada8dd71031797ca73d51de577926336a4e6f6 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RhePEQxd5R21muXuAEP~c&?;Q8^? zyhD~=?<``c)M;c&Z(S#HDA^-qa?4Fuq15|lbjt55Fs#`6&3*C(59Wqci#C=Svd5qD zr|@u1sC&WqvN>*o&6h?7i{ta1-c2{R-D;g=c44tb=M~GXD}Jc@@~BElU!7u7lv@%I s9CRZ5koFZ1=j_AzJ0`U3_OH*=b{4jI$b2}s1L!CQPgg&ebxsLQ0B1x=F#rGn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_2.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_2.png new file mode 100644 index 0000000000000000000000000000000000000000..808c26598137ba60cdf03c57d203a102f7b1fb25 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RheW=|K#5R21mr#SLCD{{EVFAM)B zaxQR(a;!=2{*(PdI@-M-64YF}IsBZ3`oBL^x$~Em>BZjvc2O+OMh)A%ZaEtKj)_*& z{Cw{pBjY|f-=cM!*12}88E1rUnQ8L;qF>&r#Vk+cLK@zD*Wg_FKJesXp%ol69oZ*j mDz>Ne1hRV`y4!ERT|MTF-R-Mxg{y(iVeoYIb6Mw<&;$SqL`L@j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_3.png b/src/main/resources/assets/miscutils/textures/gui/overlay_button/throughput_3.png new file mode 100644 index 0000000000000000000000000000000000000000..de9cbead42f1f08f2bf36442f4be5d41d53d5bf9 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rhe3Qrfu5R21muXytvHsEM^IA0_D zo2HHX!@d;3rJ+-&ADko)009tc_|$e1?2^e1~z zv)%-olIAB1*i&Sx9FHwvd?G95GH)SE5x?rh>=g}j7Ak$>_Ek9W{nzf4FLCWE58qur bpUeC*Meq8jy3NagZeZ|q^>bP0l+XkK24O<6 literal 0 HcmV?d00001 From 259d1c044e201f34b16bb4d654dafbf606ca3352 Mon Sep 17 00:00:00 2001 From: M R S E <25187502+Sanduhr32@users.noreply.github.com> Date: Sat, 7 Dec 2024 18:04:24 +0100 Subject: [PATCH 085/181] Fix wireless detector covers redstone bug (#3595) Co-authored-by: Martin Robertz --- .../common/covers/redstone/CoverWirelessDoesWorkDetector.java | 2 ++ .../common/covers/redstone/CoverWirelessFluidDetector.java | 2 ++ .../common/covers/redstone/CoverWirelessItemDetector.java | 2 ++ .../covers/redstone/CoverWirelessMaintenanceDetector.java | 2 ++ 4 files changed, 8 insertions(+) diff --git a/src/main/java/gregtech/common/covers/redstone/CoverWirelessDoesWorkDetector.java b/src/main/java/gregtech/common/covers/redstone/CoverWirelessDoesWorkDetector.java index 54d71d2c8b2..1d5f89ee902 100644 --- a/src/main/java/gregtech/common/covers/redstone/CoverWirelessDoesWorkDetector.java +++ b/src/main/java/gregtech/common/covers/redstone/CoverWirelessDoesWorkDetector.java @@ -76,6 +76,8 @@ public ActivityTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInpu final long hash = hashCoverCoords(aTileEntity, side); setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); + aTileEntity.setOutputRedstoneSignal(side, signal); + return aCoverVariable; } diff --git a/src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java b/src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java index cfea9b7b280..9c7de19a01f 100644 --- a/src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java +++ b/src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java @@ -51,6 +51,8 @@ public FluidTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRe final long hash = hashCoverCoords(aTileEntity, side); setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); + aTileEntity.setOutputRedstoneSignal(side, signal); + return aCoverVariable; } diff --git a/src/main/java/gregtech/common/covers/redstone/CoverWirelessItemDetector.java b/src/main/java/gregtech/common/covers/redstone/CoverWirelessItemDetector.java index 19cefdabcfc..72b6d25e736 100644 --- a/src/main/java/gregtech/common/covers/redstone/CoverWirelessItemDetector.java +++ b/src/main/java/gregtech/common/covers/redstone/CoverWirelessItemDetector.java @@ -59,6 +59,8 @@ public ItemTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRed final long hash = hashCoverCoords(aTileEntity, side); setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); + aTileEntity.setOutputRedstoneSignal(side, signal); + return aCoverVariable; } diff --git a/src/main/java/gregtech/common/covers/redstone/CoverWirelessMaintenanceDetector.java b/src/main/java/gregtech/common/covers/redstone/CoverWirelessMaintenanceDetector.java index f3d62f2c816..a71e597969e 100644 --- a/src/main/java/gregtech/common/covers/redstone/CoverWirelessMaintenanceDetector.java +++ b/src/main/java/gregtech/common/covers/redstone/CoverWirelessMaintenanceDetector.java @@ -96,6 +96,8 @@ public MaintenanceTransmitterData doCoverThingsImpl(ForgeDirection side, byte aI final long hash = hashCoverCoords(aTileEntity, side); setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); + aTileEntity.setOutputRedstoneSignal(side, signal); + return aCoverVariable; } From 518462672b35766cccea107026cf5c9311c4dd97 Mon Sep 17 00:00:00 2001 From: BlueHero233 <87818077+BlueHero233@users.noreply.github.com> Date: Sat, 7 Dec 2024 14:06:56 -0300 Subject: [PATCH 086/181] Revert the ignoble computer cube texture to its former glory (#3611) Co-authored-by: Martin Robertz --- .../textures/items/MU-metaitem.01/55.png | Bin 1035 -> 384 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/miscutils/textures/items/MU-metaitem.01/55.png b/src/main/resources/assets/miscutils/textures/items/MU-metaitem.01/55.png index 7336e19c220b49837835ac01ccfbb62cf94a34f3..97ae3949a063826f2ebdbc546676daa9b8a60046 100644 GIT binary patch delta 357 zcmV-r0h<1c2!I2SB!4YQL_t(IPh(`D5HN!DXEnF~*Hl+!xPJ3CLF1;?R)Y1w0NjA7 zH5ClIZrvhiKv!)O!`@X(;f8=2&SBC214079nnA9(dHD*%-jz$heCO~O26bH>29OI; zF2E3#TTz=mvCvmR{V`We$0o1@qzR?~*$a}&%HWWP$zMBq2+W4Z0?Y*j zQxO9L1IU{ofL;;{AOi#?q!~aq5d%Oj0ND;wi;<8B82}FGvnNoKGAJDo(g>4B)(m$6 zv6``|0{~qs%Mr@P5{du-01jnXNoGw=04e|g00;m8000000Mb*F00000NkvXXu0mjf D_SKO9 delta 1013 zcmV2q2X-HCB90k{cgCC1k2N!2u9b5%L@B_rz!Aa3YO8j3^ zXc6PVaX;SOd)&PPghqv_W>*YQHOojR;$kkpA_iX3hcWaZ0)M~6Og))d$ij1c-NVP% zyC~1{KKJJsPzojkd?Im->4rtTPCT<|>74h8L#!+*#OK5l23?T&k?XR{Z=6dG3p_Jq zWYcrRA!4!A!Ey()vY`@B6NeR5qkJLfvch?bvs$UK);;+Pg9U9l!*!aYNMI33q#!~@ z4I8MyLX=jG6n_(G+K+qqM;w2OTr#;fz{oL=DpW|0AN&t~cWV}>Cf%f99O!oO54hX`hM#oFkQ~WRQz#aJ z_cQvYJTP<%^slVGd00J#ZL_t(I%axN&NK{c2$A9OGIXR2N+Lyqp_R017exe>MnqIXRJ%4dn@|v=N`yn!xLYne>5W5eAHT-1Cft1Jo=f1gvp^8Hr4=xcHkZXHI1}w%vP3QE?%A%FC$RXQ&K7M`yRpM-|I|Vyl6D zeNbC#uR|g5`vEw2{XPW+8}L=_=5SS|4XUj6i+{iVh&+BdC^sH-3LuDN4v^Nn9rCEB zSLz!Y#PC*2Dg$rLA+byo<2ldT5#GNU zRC@9uZwLA?d^I>-xwKzvV^c{XPeNgG*5z>X(gl{IE39`qS&6SOHWbG2Rs&!I5``Lh z{eKDo!&k%9^enepFB6MJ0WeLAv7vBE)MRb-45?dMY)~+m)CNs+FdXi;&jSJI>H@$r zO#n0irPlloXqs9rbRdv1Ynql0NQ(*vQ<>P>r=2Bk2Z+bxs{j$$Ua>bLIF)8PJn@7w z&yLiV4p3TJf@N7$9;{>G-3Xt?M{T-8!)`LI)a{<~3S34NA{JXVmoWbCS3cg{EK}37 zM58f&&d-tWE=1QI%+1V@?{=er;-Uh2pFdMso2j9xNhT+MpfrW<(6Pi~W3ihTJx>+? jV@FRk%CW}AtnK_4l$zN|Dp(v<00000NkvXXu0mjfnRU;l From 67990199c203faa1f8ecf581b10fb66916119078 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sat, 7 Dec 2024 18:30:22 +0100 Subject: [PATCH 087/181] update --- dependencies.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 08d0ac8de50..7bd8a2d4cb2 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -36,7 +36,7 @@ dependencies { api("com.github.GTNewHorizons:StructureLib:1.3.6:dev") api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") - api("com.github.GTNewHorizons:NotEnoughItems:2.6.49-GTNH:dev") + api("com.github.GTNewHorizons:NotEnoughItems:2.6.50-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") api("com.github.GTNewHorizons:GTNHLib:0.5.21:dev") api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") @@ -56,7 +56,7 @@ dependencies { devOnlyNonPublishable("com.github.GTNewHorizons:Infernal-Mobs:1.9.1-GTNH:dev") - compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.54:dev") + compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.55:dev") compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta24:api') { transitive = false } compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.4:dev") { transitive = false } @@ -72,7 +72,7 @@ dependencies { compileOnly('com.github.GTNewHorizons:VisualProspecting:1.3.28:dev') { transitive = false } compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.97-GTNH:dev") { transitive = false } - compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.7-GTNH:dev") { transitive = false } + compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.8-GTNH:dev") { transitive = false } implementation("com.github.GTNewHorizons:TinkersConstruct:1.12.16-GTNH:dev") compileOnly("com.github.GTNewHorizons:Chisel:2.15.3-GTNH:dev") { transitive = false } From db747f84eb81b86dda90a0913ac1da8b51daa48f Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Sat, 7 Dec 2024 17:26:03 -0300 Subject: [PATCH 088/181] Resolved Recipe Conflict with pipe casing (#3612) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../loaders/postload/recipes/AssemblerRecipes.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java index 13a86c66a99..02a9442f323 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java @@ -2565,7 +2565,8 @@ public void run() { GTValues.RA.stdBuilder() .itemInputs( GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6), - GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1)) + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1), + GTUtility.getIntegratedCircuit(1)) .itemOutputs(ItemList.Casing_RobustTungstenSteel.get(1)) .duration(2 * SECONDS + 10 * TICKS) .eut(16) @@ -2583,7 +2584,8 @@ public void run() { GTValues.RA.stdBuilder() .itemInputs( GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6), - GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1)) + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1), + GTUtility.getIntegratedCircuit(1)) .itemOutputs(ItemList.Casing_StableTitanium.get(1)) .duration(2 * SECONDS + 10 * TICKS) .eut(16) @@ -2610,7 +2612,8 @@ public void run() { GTValues.RA.stdBuilder() .itemInputs( GTOreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 6), - GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackPlutonium, 1)) + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackPlutonium, 1), + GTUtility.getIntegratedCircuit(1)) .itemOutputs(ItemList.Casing_MiningBlackPlutonium.get(1)) .duration(2 * SECONDS + 10 * TICKS) .eut(16) From 98ae1eec5f334a08f6885675117c344ea998552d Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sat, 7 Dec 2024 22:06:38 +0100 Subject: [PATCH 089/181] update --- dependencies.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 7bd8a2d4cb2..010f4f8331a 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -36,14 +36,14 @@ dependencies { api("com.github.GTNewHorizons:StructureLib:1.3.6:dev") api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") - api("com.github.GTNewHorizons:NotEnoughItems:2.6.50-GTNH:dev") + api("com.github.GTNewHorizons:NotEnoughItems:2.6.51-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") api("com.github.GTNewHorizons:GTNHLib:0.5.21:dev") api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-478-GTNH:dev") - api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.3.50-gtnh:dev") + api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.3.51-gtnh:dev") api('com.github.GTNewHorizons:Yamcl:0.6.0:dev') api("com.github.GTNewHorizons:Postea:1.0.13:dev") @@ -56,7 +56,7 @@ dependencies { devOnlyNonPublishable("com.github.GTNewHorizons:Infernal-Mobs:1.9.1-GTNH:dev") - compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.55:dev") + compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.56:dev") compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta24:api') { transitive = false } compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.4:dev") { transitive = false } @@ -81,7 +81,7 @@ dependencies { compileOnly("com.github.GTNewHorizons:Nuclear-Control:2.6.7:dev") { transitive = false } compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") { transitive = false } implementation("com.github.GTNewHorizons:Hodgepodge:2.5.82:dev") - compileOnly('com.github.GTNewHorizons:Botania:1.11.5-GTNH:dev') { transitive = false } + compileOnly('com.github.GTNewHorizons:Botania:1.11.6-GTNH:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:HoloInventory:2.4.13-GTNH:dev') { transitive = false } compileOnly rfg.deobf("curse.maven:extra-utilities-225561:2264384") compileOnly rfg.deobf('curse.maven:minefactory-reloaded-66672:2366150') From 1f783d05908f88a5c6e3c1ebb5982071916d488e Mon Sep 17 00:00:00 2001 From: chochem <40274384+chochem@users.noreply.github.com> Date: Sat, 7 Dec 2024 23:26:46 +0000 Subject: [PATCH 090/181] fix a few recipe conflicts II (#3613) --- src/main/java/gtnhlanth/loader/RecipeLoader.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/gtnhlanth/loader/RecipeLoader.java b/src/main/java/gtnhlanth/loader/RecipeLoader.java index 358243a7497..db86e8c63dd 100644 --- a/src/main/java/gtnhlanth/loader/RecipeLoader.java +++ b/src/main/java/gtnhlanth/loader/RecipeLoader.java @@ -171,7 +171,7 @@ public static void loadAccelerator() { ItemList.Conveyor_Module_LuV.get(4), GTUtility.copyAmount(2, LanthItemList.BEAMLINE_PIPE), GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 2), - GTUtility.getIntegratedCircuit(16) + GTUtility.getIntegratedCircuit(15) ) .itemOutputs(LanthItemList.SOURCE_CHAMBER) @@ -190,7 +190,7 @@ public static void loadAccelerator() { ItemList.Electric_Pump_LuV.get(2), GTUtility.copyAmount(2, LanthItemList.BEAMLINE_PIPE), GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.VanadiumGallium, 2), - GTUtility.getIntegratedCircuit(16) + GTUtility.getIntegratedCircuit(15) ) .itemOutputs(LanthItemList.LINAC) @@ -209,7 +209,7 @@ public static void loadAccelerator() { GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UV, 2), GTUtility.copyAmount(2, LanthItemList.BEAMLINE_PIPE), GTOreDictUnificator.get(OrePrefixes.cableGt02, Materials.VanadiumGallium, 1), - GTUtility.getIntegratedCircuit(16) + GTUtility.getIntegratedCircuit(15) ) .itemOutputs(LanthItemList.TARGET_CHAMBER) @@ -228,7 +228,7 @@ public static void loadAccelerator() { GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UV, 8), GTUtility.copyAmount(8, LanthItemList.BEAMLINE_PIPE), GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.NiobiumTitanium, 8), - GTUtility.getIntegratedCircuit(16)) + GTUtility.getIntegratedCircuit(15)) .itemOutputs(LanthItemList.SYNCHROTRON) .duration(60 * GTRecipeBuilder.SECONDS) .eut(TierEU.RECIPE_ZPM) From 3adfb81105063eb15d44386a1a0938a2770825bd Mon Sep 17 00:00:00 2001 From: Ruling-0 <47913168+Ruling-0@users.noreply.github.com> Date: Sun, 8 Dec 2024 02:44:46 -0600 Subject: [PATCH 091/181] Fixing AE2 Crystal Seeds Pt. 2 (#3614) --- .../postload/recipes/AutoclaveRecipes.java | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java index 932b1b71c52..a218dbc3c8e 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java @@ -7,6 +7,9 @@ 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 gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; @@ -39,8 +42,23 @@ public void run() { .eut(256) .addTo(autoclaveRecipes); + final ItemStack certusQuartzSeed = getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 0); + NBTTagCompound certusQuartzTag = new NBTTagCompound(); + certusQuartzTag.setInteger("progress", 0); + certusQuartzSeed.setTagCompound(certusQuartzTag); + + final ItemStack netherQuartzSeed = getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 600); + NBTTagCompound netherQuartzTag = new NBTTagCompound(); + netherQuartzTag.setInteger("progress", 600); + netherQuartzSeed.setTagCompound(netherQuartzTag); + + final ItemStack fluixSeed = getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 1200); + NBTTagCompound fluixTag = new NBTTagCompound(); + fluixTag.setInteger("progress", 1200); + fluixSeed.setTagCompound(fluixTag); + GTValues.RA.stdBuilder() - .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 0)) + .itemInputs(certusQuartzSeed) .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10)) .outputChances(8000) .fluidInputs(Materials.Water.getFluid(200L)) @@ -49,7 +67,7 @@ public void run() { .addTo(autoclaveRecipes); GTValues.RA.stdBuilder() - .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 600)) + .itemInputs(netherQuartzSeed) .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11)) .outputChances(8000) .fluidInputs(Materials.Water.getFluid(200L)) @@ -58,7 +76,7 @@ public void run() { .addTo(autoclaveRecipes); GTValues.RA.stdBuilder() - .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 1200)) + .itemInputs(fluixSeed) .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 12)) .outputChances(8000) .fluidInputs(Materials.Water.getFluid(200L)) @@ -67,7 +85,7 @@ public void run() { .addTo(autoclaveRecipes); GTValues.RA.stdBuilder() - .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 0)) + .itemInputs(certusQuartzSeed) .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10)) .outputChances(9000) .fluidInputs(GTModHandler.getDistilledWater(100L)) @@ -76,7 +94,7 @@ public void run() { .addTo(autoclaveRecipes); GTValues.RA.stdBuilder() - .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 600)) + .itemInputs(netherQuartzSeed) .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11)) .outputChances(9000) .fluidInputs(GTModHandler.getDistilledWater(100L)) @@ -85,7 +103,7 @@ public void run() { .addTo(autoclaveRecipes); GTValues.RA.stdBuilder() - .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 1200)) + .itemInputs(fluixSeed) .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 12)) .outputChances(9000) .fluidInputs(GTModHandler.getDistilledWater(100L)) @@ -94,7 +112,7 @@ public void run() { .addTo(autoclaveRecipes); GTValues.RA.stdBuilder() - .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 0)) + .itemInputs(certusQuartzSeed) .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10)) .outputChances(10000) .fluidInputs(Materials.Void.getMolten(36L)) @@ -103,7 +121,7 @@ public void run() { .addTo(autoclaveRecipes); GTValues.RA.stdBuilder() - .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 600)) + .itemInputs(netherQuartzSeed) .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11)) .outputChances(10000) .fluidInputs(Materials.Void.getMolten(36L)) @@ -112,7 +130,7 @@ public void run() { .addTo(autoclaveRecipes); GTValues.RA.stdBuilder() - .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 1200)) + .itemInputs(fluixSeed) .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 12)) .outputChances(10000) .fluidInputs(Materials.Void.getMolten(36L)) From acfbaaf78e44f1da078419cd3f034a75aa0ea520 Mon Sep 17 00:00:00 2001 From: boubou19 Date: Sun, 8 Dec 2024 09:46:11 +0100 Subject: [PATCH 092/181] update buildscript and dependencies --- dependencies.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 010f4f8331a..486a86ca29d 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -58,7 +58,7 @@ dependencies { compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.56:dev") - compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta24:api') { transitive = false } + compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta25:api') { transitive = false } compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.4:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.8.22:dev") { transitive = false } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 09523c0e549..e2847c82004 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index aa612ade0ce..0147a994492 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.29' + id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.30' } From 16651a00d5bce99ccf63d90c32ca7a5bc81c4385 Mon Sep 17 00:00:00 2001 From: Yoshy <60155833+Yoshy2002@users.noreply.github.com> Date: Sun, 8 Dec 2024 19:35:31 +0100 Subject: [PATCH 093/181] Remove second Description Line of Network Switch (#3615) --- .../tectech/thing/metaTileEntity/multi/MTENetworkSwitch.java | 2 -- src/main/resources/assets/tectech/lang/zh_CN.lang | 1 - 2 files changed, 3 deletions(-) diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTENetworkSwitch.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTENetworkSwitch.java index ffe04650955..649e3c7579a 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/MTENetworkSwitch.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTENetworkSwitch.java @@ -220,8 +220,6 @@ public MultiblockTooltipBuilder createTooltip() { // 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 .addTecTechHatchInfo() .beginStructureBlock(3, 3, 3, false) diff --git a/src/main/resources/assets/tectech/lang/zh_CN.lang b/src/main/resources/assets/tectech/lang/zh_CN.lang index ac33177b27b..e031090a288 100644 --- a/src/main/resources/assets/tectech/lang/zh_CN.lang +++ b/src/main/resources/assets/tectech/lang/zh_CN.lang @@ -590,7 +590,6 @@ gt.blockmachines.multimachine.em.switch.name=QoS网络交换机 gt.blockmachines.multimachine.em.switch.hint=1 - 基础仓室、光学接口或电子计算机机械方块 gt.blockmachines.multimachine.em.switch.desc.0=QoS网络交换机的控制器方块 gt.blockmachines.multimachine.em.switch.desc.1=用于路由和分发算力 -gt.blockmachines.multimachine.em.switch.desc.2=需要通过参数仪进行配置 gt.blockmachines.multimachine.em.computer.name=量子计算机 From a3a97d55afffe1101b57d29220a319e5b86cae2f Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Sun, 8 Dec 2024 14:35:24 -0500 Subject: [PATCH 094/181] Add efficiency to cleanroom gui (#3616) --- .../machines/multi/MTECleanroom.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTECleanroom.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTECleanroom.java index 47cb6b410a0..4e0413f9a6d 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTECleanroom.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTECleanroom.java @@ -19,11 +19,17 @@ import net.minecraft.item.ItemStack; 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.StructureLibAPI; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +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.GregTechAPI; import gregtech.api.enums.TierEU; @@ -42,6 +48,7 @@ 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.common.config.MachineStats; @@ -808,4 +815,19 @@ protected int getDoorOrientation(int bottomMeta, int topMeta) { // Invalid combination? return -1; } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + screenElements + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("GT5U.multiblock.efficiency") + ": " + + GTUtility.formatNumbers(mEfficiency / 100D) + + "%") + .setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get())) + .widget(new FakeSyncWidget.IntegerSyncer(() -> mEfficiency, eff -> mEfficiency = eff)); + } } From dad5e68bc1cf80be3f76d2b4bd24c0dc87019d3f Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Sun, 8 Dec 2024 20:41:32 +0100 Subject: [PATCH 095/181] Decrease TF-specific vein max height spawn (#3590) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- src/main/java/gregtech/api/enums/OreMixes.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/api/enums/OreMixes.java b/src/main/java/gregtech/api/enums/OreMixes.java index f012937ecc9..bb45886c21d 100644 --- a/src/main/java/gregtech/api/enums/OreMixes.java +++ b/src/main/java/gregtech/api/enums/OreMixes.java @@ -310,7 +310,7 @@ public enum OreMixes { .localize(Materials.Tungstate)), Sapphire(new OreMixBuilder().name("ore.mix.sapphire") - .heightRange(10, 40) + .heightRange(10, 25) .weight(60) .density(2) .size(16) @@ -361,7 +361,7 @@ public enum OreMixes { .localize(Materials.Diamond)), Olivine(new OreMixBuilder().name("ore.mix.olivine") - .heightRange(10, 40) + .heightRange(10, 25) .weight(60) .density(2) .size(16) @@ -466,7 +466,7 @@ public enum OreMixes { .sporadic(Materials.Titanium)), AquaIgnis(new OreMixBuilder().name("ore.mix.aquaignis") - .heightRange(5, 35) + .heightRange(5, 20) .weight(16) .density(2) .size(16) @@ -478,7 +478,7 @@ public enum OreMixes { .localize(Materials.InfusedWater, Materials.InfusedFire, Materials.Amber)), TerraAer(new OreMixBuilder().name("ore.mix.terraaer") - .heightRange(5, 35) + .heightRange(5, 20) .weight(16) .density(2) .size(16) @@ -491,7 +491,7 @@ public enum OreMixes { .localize(Materials.InfusedEarth, Materials.InfusedAir)), PerditioOrdo(new OreMixBuilder().name("ore.mix.perditioordo") - .heightRange(5, 35) + .heightRange(5, 20) .weight(16) .density(2) .size(16) @@ -896,7 +896,7 @@ public enum OreMixes { .sporadic(Materials.MeteoricIron)), TFGalena(new OreMixBuilder().name("ore.mix.tfgalena") - .heightRange(5, 35) + .heightRange(5, 20) .weight(40) .density(4) .size(16) From 0d9c0c966e92c4aa86ec3d567aee217261a1d40b Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Sun, 8 Dec 2024 20:42:01 +0100 Subject: [PATCH 096/181] Downtier Transformation Module (#3527) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../bartworks/common/loaders/recipes/CraftingRecipes.java | 8 ++++---- .../material/processingLoaders/AdditionalRecipes.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java b/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java index 5473872dda8..844966e2d64 100644 --- a/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java +++ b/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java @@ -387,10 +387,10 @@ public void run() { 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), }); + new Object[] { "SFE", "PCP", "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), }); // ClonalCellularSynthesisModule GTModHandler.addCraftingRecipe( diff --git a/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java b/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java index b66504a715b..a4d413a0625 100644 --- a/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java +++ b/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java @@ -187,7 +187,7 @@ private static void runBWRecipes() { .fluidInputs(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) .special(BioItemList.mBioLabParts[3]) .duration(25 * SECONDS) - .eut(TierEU.RECIPE_LuV) + .eut(TierEU.RECIPE_EV) .ignoreCollision() .fake() .addTo(bioLabRecipes); From e3db8fd7397b2a0102d27cecca3e3ce96e53ce7f Mon Sep 17 00:00:00 2001 From: Abdiel Kavash <19243993+AbdielKavash@users.noreply.github.com> Date: Sun, 8 Dec 2024 13:42:21 -0600 Subject: [PATCH 097/181] Consistent recipe check order for ME crafting buses. (#3555) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../metatileentity/implementations/MTEMultiBlockBase.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index 940b561d99b..b42326bec17 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -40,6 +40,7 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; +import org.apache.commons.lang3.ArrayUtils; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.TestOnly; @@ -885,7 +886,10 @@ protected CheckRecipeResult doCheckRecipe() { for (IDualInputHatch dualInputHatch : mDualInputHatches) { for (var it = dualInputHatch.inventories(); it.hasNext();) { IDualInputInventory slot = it.next(); - processingLogic.setInputItems(slot.getItemInputs()); + // Reverse order of input items for consistent behavior with standard input buses. + ItemStack[] inputItems = slot.getItemInputs(); + ArrayUtils.reverse(inputItems); + processingLogic.setInputItems(inputItems); processingLogic.setInputFluids(slot.getFluidInputs()); CheckRecipeResult foundResult = processingLogic.process(); if (foundResult.wasSuccessful()) { From 32b92cc262ebb64a495bcb725dfe19ef75c0ef5a Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Sun, 8 Dec 2024 14:56:35 -0500 Subject: [PATCH 098/181] Add WAILA info displaying recipe outputs to multiblocks (#3586) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../implementations/MTEMultiBlockBase.java | 42 +++++++++++++++++++ .../resources/assets/gregtech/lang/en_US.lang | 3 ++ 2 files changed, 45 insertions(+) diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index b42326bec17..f7d03acc666 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -4,6 +4,7 @@ import static gregtech.api.enums.GTValues.VN; import static gregtech.api.util.GTUtility.filterValidMTEs; import static gregtech.api.util.GTUtility.formatNumbers; +import static gregtech.api.util.GTUtility.min; import static gregtech.api.util.GTUtility.validMTEList; import static mcp.mobius.waila.api.SpecialChars.GREEN; import static mcp.mobius.waila.api.SpecialChars.RED; @@ -2015,6 +2016,32 @@ public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDat GTUtility.getColoredTierNameFromVoltage(-actualEnergyUsage))); } } + + int outputItemLength = tag.getInteger("outputItemLength"); + int outputFluidLength = tag.getInteger("outputFluidLength"); + int totalOutputs = outputItemLength + outputFluidLength; + if (totalOutputs > 0) { + currentTip.add(StatCollector.translateToLocal("GT5U.waila.producing")); + for (int i = 0; i < min(3, outputItemLength); i++) { + currentTip.add( + " " + tag.getString("outputItem" + i) + + " x " + + formatNumbers(tag.getInteger("outputItemCount" + i))); + } + for (int i = 0; i < min(3 - outputItemLength, outputFluidLength); i++) { + currentTip.add( + " " + tag.getString("outputFluid" + i) + + " x " + + formatNumbers(tag.getInteger("outputFluidCount" + i)) + + "L"); + } + if (totalOutputs > 3) { + currentTip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.producing.andmore", + formatNumbers((totalOutputs - 3)))); + } + } } currentTip .add(GTWaila.getMachineProgressString(isActive, tag.getInteger("maxProgress"), tag.getInteger("progress"))); @@ -2042,6 +2069,21 @@ public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompou tag.setInteger("maxProgress", mMaxProgresstime); tag.setBoolean("incompleteStructure", (getBaseMetaTileEntity().getErrorDisplayID() & 64) != 0); + if (mOutputItems != null) { + tag.setInteger("outputItemLength", mOutputItems.length); + for (int i = 0; i < mOutputItems.length; i++) { + tag.setString("outputItem" + i, mOutputItems[i].getDisplayName()); + tag.setInteger("outputItemCount" + i, mOutputItems[i].stackSize); + } + } + if (mOutputFluids != null) { + tag.setInteger("outputFluidLength", mOutputFluids.length); + for (int i = 0; i < mOutputFluids.length; i++) { + tag.setString("outputFluid" + i, mOutputFluids[i].getLocalizedName()); + tag.setInteger("outputFluidCount" + i, mOutputFluids[i].amount); + } + } + final IGregTechTileEntity tileEntity = getBaseMetaTileEntity(); if (tileEntity != null) { tag.setBoolean("isActive", tileEntity.isActive()); diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang index 0ed55b6ee28..78ea8d1d537 100644 --- a/src/main/resources/assets/gregtech/lang/en_US.lang +++ b/src/main/resources/assets/gregtech/lang/en_US.lang @@ -793,6 +793,9 @@ GT5U.waila.drone_downlink.noConnection=Not connected GT5U.waila.drone_downlink.connection=Connect to centre: GT5U.waila.drone_downlink.connectionCount=Connection Count: GT5U.waila.drone_downlink.droneLevel=Drone Level: +GT5U.waila.producing=Producing: +GT5U.waila.producing.andmore= And %d More... + achievement.flintpick=First Tools achievement.flintpick.desc=Craft a flint pick From 4b63da823b0784d54bebe588c231e30d8581d514 Mon Sep 17 00:00:00 2001 From: Ableytner <56540036+Ableytner@users.noreply.github.com> Date: Sun, 8 Dec 2024 21:02:55 +0100 Subject: [PATCH 099/181] Fix NEI fuel recipes for large boilers (#3565) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../recipe/maps/LargeBoilerFuelBackend.java | 55 +++++++++++-------- .../machines/multi/MTELargeBoilerBronze.java | 4 +- .../machines/multi/MTELargeBoilerSteel.java | 4 +- .../multi/MTELargeBoilerTitanium.java | 4 +- .../multi/MTELargeBoilerTungstenSteel.java | 4 +- .../processing/MTEIndustrialForgeHammer.java | 2 + 6 files changed, 47 insertions(+), 26 deletions(-) diff --git a/src/main/java/gregtech/api/recipe/maps/LargeBoilerFuelBackend.java b/src/main/java/gregtech/api/recipe/maps/LargeBoilerFuelBackend.java index a27e425efb1..7998d7cbcb8 100644 --- a/src/main/java/gregtech/api/recipe/maps/LargeBoilerFuelBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/LargeBoilerFuelBackend.java @@ -15,6 +15,8 @@ import gregtech.api.util.GTModHandler; import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.common.tileentities.machines.multi.MTELargeBoilerBronze; +import gregtech.common.tileentities.machines.multi.MTELargeBoilerSteel; @SuppressWarnings({ "unused", "UnusedReturnValue" }) @ParametersAreNonnullByDefault @@ -47,11 +49,11 @@ public static boolean addAllowedSolidFuel(String itemregistryName, int meta) { } public GTRecipe addDenseLiquidRecipe(GTRecipe recipe) { - return addRecipe(recipe, ((double) recipe.mSpecialValue) / 10, false); + return addRecipe(recipe, ((double) recipe.mSpecialValue) / 10, true, false); } public GTRecipe addDieselRecipe(GTRecipe recipe) { - return addRecipe(recipe, ((double) recipe.mSpecialValue) / 40, false); + return addRecipe(recipe, ((double) recipe.mSpecialValue) / 40, true, false); } public void addSolidRecipes(ItemStack... itemStacks) { @@ -65,6 +67,12 @@ public GTRecipe addSolidRecipe(@Nullable ItemStack fuelItemStack) { if (fuelItemStack == null) { return null; } + + // only fuels with a burn time larger than the bronze boilers' eu/t should be considered + if (GTModHandler.getFuelValue(fuelItemStack) < MTELargeBoilerBronze.EUT_GENERATED) { + return null; + } + if (!addedGeneralDesc) { GTValues.RA.stdBuilder() .duration(1) @@ -72,14 +80,19 @@ public GTRecipe addSolidRecipe(@Nullable ItemStack fuelItemStack) { .specialValue(1) .setNEIDesc( "Not all solid fuels are listed.", - "Any item that burns in a", - "vanilla furnace will burn in", - "a Large Bronze or Steel Boiler.") + "Any burnable item with a burn", + "time of at least " + MTELargeBoilerBronze.EUT_GENERATED + + " / " + + MTELargeBoilerSteel.EUT_GENERATED, + "will burn in a Large Bronze", + "/ Steel Boiler, respectively.") .build() .map(this::compileRecipe); addedGeneralDesc = true; } + boolean isAllowedInSteelBoiler = GTModHandler.getFuelValue(fuelItemStack) >= MTELargeBoilerSteel.EUT_GENERATED; + String registryName = Item.itemRegistry.getNameForObject(fuelItemStack.getItem()); boolean isHighTierAllowed = ALLOWED_SOLID_FUELS.contains(registryName + ":" + fuelItemStack.getItemDamage()); return GTValues.RA.stdBuilder() @@ -88,11 +101,17 @@ public GTRecipe addSolidRecipe(@Nullable ItemStack fuelItemStack) { .eut(0) .specialValue(GTModHandler.getFuelValue(fuelItemStack) / 1600) .build() - .map(r -> addRecipe(r, ((double) GTModHandler.getFuelValue(fuelItemStack)) / 1600, isHighTierAllowed)) + .map( + r -> addRecipe( + r, + ((double) GTModHandler.getFuelValue(fuelItemStack)) / 1600, + isAllowedInSteelBoiler, + isHighTierAllowed)) .orElse(null); } - private GTRecipe addRecipe(GTRecipe recipe, double baseBurnTime, boolean isHighTierAllowed) { + private GTRecipe addRecipe(GTRecipe recipe, double baseBurnTime, boolean isAllowedInSteelBoiler, + boolean isHighTierAllowed) { // Some recipes will have a burn time like 15.9999999 and % always rounds down double floatErrorCorrection = 0.0001; @@ -105,21 +124,13 @@ private GTRecipe addRecipe(GTRecipe recipe, double baseBurnTime, boolean isHighT double tungstensteelBurnTime = baseBurnTime * 0.15 + floatErrorCorrection; tungstensteelBurnTime -= tungstensteelBurnTime % 0.05; - if (isHighTierAllowed) { - recipe.setNeiDesc( - "Burn time in seconds:", - String.format("Bronze Boiler: %.4f", bronzeBurnTime), - String.format("Steel Boiler: %.4f", steelBurnTime), - String.format("Titanium Boiler: %.4f", titaniumBurnTime), - String.format("Tungstensteel Boiler: %.4f", tungstensteelBurnTime)); - } else { - recipe.setNeiDesc( - "Burn time in seconds:", - String.format("Bronze Boiler: %.4f", bronzeBurnTime), - String.format("Steel Boiler: %.4f", steelBurnTime), - "Titanium Boiler: Not allowed", - "Tungstenst. Boiler: Not allowed"); - } + recipe.setNeiDesc( + "Burn time in seconds:", + String.format("Bronze Boiler: %.4f", bronzeBurnTime), + "Steel Boiler: " + (isAllowedInSteelBoiler ? String.format("%.4f", steelBurnTime) : "Not allowed"), + "Titanium Boiler: " + (isHighTierAllowed ? String.format("%.4f", titaniumBurnTime) : "Not allowed"), + "Tungstenst. Boiler: " + + (isHighTierAllowed ? String.format("%.4f", tungstensteelBurnTime) : "Not allowed")); return compileRecipe(recipe); } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerBronze.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerBronze.java index 5d0032df6a4..f06ddfed921 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerBronze.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerBronze.java @@ -19,6 +19,8 @@ public MTELargeBoilerBronze(String aName) { pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeBronzeBoilerPerSecond; } + public static final int EUT_GENERATED = 400; + @Override public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new MTELargeBoilerBronze(this.mName); @@ -76,7 +78,7 @@ public byte getFireboxTextureIndex() { @Override public int getEUt() { - return 400; + return MTELargeBoilerBronze.EUT_GENERATED; } @Override diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerSteel.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerSteel.java index 32f78c15efb..68ab6c14157 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerSteel.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerSteel.java @@ -19,6 +19,8 @@ public MTELargeBoilerSteel(String aName) { pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeSteelBoilerPerSecond; } + public static final int EUT_GENERATED = 1000; + @Override public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new MTELargeBoilerSteel(this.mName); @@ -76,7 +78,7 @@ public byte getFireboxTextureIndex() { @Override public int getEUt() { - return 1000; + return MTELargeBoilerSteel.EUT_GENERATED; } @Override diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTitanium.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTitanium.java index 2893a720087..92007549807 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTitanium.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTitanium.java @@ -19,6 +19,8 @@ public MTELargeBoilerTitanium(String aName) { pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeTitaniumBoilerPerSecond; } + public static final int EUT_GENERATED = 4000; + @Override public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new MTELargeBoilerTitanium(this.mName); @@ -76,7 +78,7 @@ public byte getFireboxTextureIndex() { @Override public int getEUt() { - return 4000; + return MTELargeBoilerTitanium.EUT_GENERATED; } @Override diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTungstenSteel.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTungstenSteel.java index e47c74d58a1..056b6777eaa 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTungstenSteel.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTungstenSteel.java @@ -19,6 +19,8 @@ public MTELargeBoilerTungstenSteel(String aName) { pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeTungstenSteelBoilerPerSecond; } + public static final int EUT_GENERATED = 16000; + @Override public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new MTELargeBoilerTungstenSteel(this.mName); @@ -76,7 +78,7 @@ public byte getFireboxTextureIndex() { @Override public int getEUt() { - return 16000; + return MTELargeBoilerTungstenSteel.EUT_GENERATED; } @Override 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 index d8d5dfacb7a..5b216dda70d 100644 --- 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 @@ -16,6 +16,7 @@ import static gregtech.api.enums.Mods.ThaumicBases; import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -156,6 +157,7 @@ public IStructureDefinition getStructureDefinition() { private static List> getAllAnvilTiers(Map anvilTiers) { return anvilTiers.entrySet() .stream() + .sorted(Comparator.comparingInt(Map.Entry::getValue)) .map(e -> Pair.of(e.getKey(), e.getValue())) .collect(Collectors.toList()); } From b5ece2085b3bb541a1ac5451896430a4bc680c4f Mon Sep 17 00:00:00 2001 From: Crystie <50521339+CrystieColon3@users.noreply.github.com> Date: Sun, 8 Dec 2024 23:09:09 +0300 Subject: [PATCH 100/181] Unifying multi-mode multis tooltips, adds "shortnames" to some multis (#3560) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../common/tileentities/multis/MTECircuitAssemblyLine.java | 2 +- .../common/tileentities/multis/MTEDeepEarthHeatingPump.java | 2 +- .../tileentities/multis/MTEElectricImplosionCompressor.java | 2 +- .../common/tileentities/multis/mega/MTEMegaBlastFurnace.java | 2 +- .../tileentities/multis/mega/MTEMegaChemicalReactor.java | 2 +- .../common/tileentities/multis/mega/MTEMegaDistillTower.java | 2 +- .../common/tileentities/multis/mega/MTEMegaOilCracker.java | 2 +- .../tileentities/multis/mega/MTEMegaVacuumFreezer.java | 2 +- src/main/java/ggfab/mte/MTEAdvAssLine.java | 2 +- .../blocks/tileEntity/MTEComponentAssemblyLine.java | 2 +- .../blocks/tileEntity/MTEExtremeHeatExchanger.java | 2 +- .../blocks/tileEntity/MTELargeEssentiaSmeltery.java | 5 +++-- .../goodgenerator/blocks/tileEntity/MTENeutronActivator.java | 2 +- .../goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java | 2 +- .../blocks/tileEntity/MTEUniversalChemicalFuelEngine.java | 2 +- .../common/tileentities/machines/multi/MTEAssemblyLine.java | 2 +- .../tileentities/machines/multi/MTEBrickedBlastFurnace.java | 2 +- .../common/tileentities/machines/multi/MTEDieselEngine.java | 2 +- .../tileentities/machines/multi/MTEDistillationTower.java | 2 +- .../tileentities/machines/multi/MTEElectricBlastFurnace.java | 2 +- .../tileentities/machines/multi/MTEExtremeDieselEngine.java | 2 +- .../common/tileentities/machines/multi/MTEHeatExchanger.java | 2 +- .../multi/MTEIndustrialElectromagneticSeparator.java | 2 +- .../machines/multi/MTEIndustrialLaserEngraver.java | 2 +- .../tileentities/machines/multi/MTEIntegratedOreFactory.java | 2 +- .../tileentities/machines/multi/MTELargeChemicalReactor.java | 2 +- .../tileentities/machines/multi/MTELargeTurbineGas.java | 2 +- .../machines/multi/MTELargeTurbineGasAdvanced.java | 2 +- .../tileentities/machines/multi/MTELargeTurbinePlasma.java | 2 +- .../tileentities/machines/multi/MTELargeTurbineSteam.java | 2 +- .../common/tileentities/machines/multi/MTEMultiCanner.java | 2 +- .../common/tileentities/machines/multi/MTEOilDrillBase.java | 2 +- .../tileentities/machines/multi/MTEOilDrillInfinite.java | 2 +- .../tileentities/machines/multi/MTEOreDrillingPlantBase.java | 2 +- .../machines/multi/MTETranscendentPlasmaMixer.java | 2 +- .../common/tileentities/machines/multi/MTEVacuumFreezer.java | 2 +- .../machines/multi/compressor/MTEBlackHoleCompressor.java | 2 +- .../machines/multi/compressor/MTEHIPCompressor.java | 2 +- .../machines/multi/processing/MTEIndustrialArcFurnace.java | 2 +- .../machines/multi/processing/MTEIndustrialCokeOven.java | 2 +- .../multi/processing/MTEIndustrialCuttingMachine.java | 2 +- .../machines/multi/processing/MTEIndustrialDehydrator.java | 2 +- .../machines/multi/processing/MTEIndustrialMacerator.java | 2 +- .../machines/multi/production/MTEAlloyBlastSmelter.java | 2 +- .../machines/multi/production/MTEAutoCrafter.java | 2 +- .../machines/multi/production/MTEMassFabricator.java | 2 +- .../multi/production/MTEQuantumForceTransformer.java | 2 +- .../tileentities/machines/multi/production/MTETreeFarm.java | 2 +- .../multi/production/mega/MTEMegaAlloyBlastSmelter.java | 2 +- .../multi/production/turbines/MTELargeTurbineGas.java | 2 +- .../multi/production/turbines/MTELargeTurbineSCSteam.java | 2 +- .../multi/production/turbines/MTELargeTurbineSHSteam.java | 2 +- .../multi/production/turbines/MTELargeTurbineSteam.java | 2 +- .../multi/production/turbines/MTELargerTurbinePlasma.java | 2 +- .../GregtechMetaTileEntity_PowerSubStationController.java | 2 +- .../common/tileentities/MTELapotronicSuperCapacitor.java | 2 +- .../gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java | 2 +- .../gregtech/multiblock/MTEMegaIndustrialApiary.java | 2 +- .../thing/metaTileEntity/multi/MTEActiveTransformer.java | 4 ++-- .../thing/metaTileEntity/multi/MTEQuantumComputer.java | 5 +++-- src/main/resources/assets/tectech/lang/en_US.lang | 2 ++ 61 files changed, 67 insertions(+), 63 deletions(-) diff --git a/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java b/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java index 1cdcc314e18..058106000d9 100644 --- a/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java +++ b/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java @@ -156,7 +156,7 @@ public IStructureDefinition getStructureDefinition() { @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Circuit Assembler") + tt.addMachineType("Circuit Assembler, CAL") .addInfo("Change Mode with Screwdriver") .addInfo("Does not lose efficiency when overclocked") .addSeparator() diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java b/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java index da8599dd28f..6ae351cadf9 100644 --- a/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java +++ b/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java @@ -75,7 +75,7 @@ protected MultiblockTooltipBuilder createTooltip() { String casings = this.getCasingBlockItem() .get(0) .getDisplayName(); - tt.addMachineType("Geothermal Heat Pump") + tt.addMachineType("Geothermal Heat Pump, DEHP") .addInfo("Consumes " + TierEU.RECIPE_HV + "EU/t") .addInfo("Has 2 Modes, use the Screwdriver to change them:"); diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEElectricImplosionCompressor.java b/src/main/java/bartworks/common/tileentities/multis/MTEElectricImplosionCompressor.java index ff6c0a4eb9d..c69d67a006d 100644 --- a/src/main/java/bartworks/common/tileentities/multis/MTEElectricImplosionCompressor.java +++ b/src/main/java/bartworks/common/tileentities/multis/MTEElectricImplosionCompressor.java @@ -261,7 +261,7 @@ protected IAlignmentLimits getInitialAlignmentLimits() { @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Implosion Compressor") + tt.addMachineType("Implosion Compressor, EIC") .addInfo("Explosions are fun") .addInfo("Uses electricity instead of Explosives") .addInfo("Can parallel up to 4^(Tier - 1)") diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaBlastFurnace.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaBlastFurnace.java index c783ef31786..689966aee46 100644 --- a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaBlastFurnace.java +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaBlastFurnace.java @@ -169,7 +169,7 @@ public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Blast Furnace") + tt.addMachineType("Blast Furnace, MEBF") .addParallelInfo(Configuration.Multiblocks.megaMachinesMax) .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)") diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaChemicalReactor.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaChemicalReactor.java index d3d072cbcc7..14e59081604 100644 --- a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaChemicalReactor.java +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaChemicalReactor.java @@ -69,7 +69,7 @@ public MTEMegaChemicalReactor(String aName) { @Override public MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Chemical Reactor") + tt.addMachineType("Chemical Reactor, MCR") .addInfo("What molecule do you want to synthesize ?") .addInfo("Or you want to replace something in this molecule ?") .addParallelInfo(Configuration.Multiblocks.megaMachinesMax) diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java index 4c3199f33f2..95ddef6b8af 100644 --- a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java @@ -258,7 +258,7 @@ public int getRecipeCatalystPriority() { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Distillery") + tt.addMachineType("Distillery, MDT") .addParallelInfo(Configuration.Multiblocks.megaMachinesMax) .addInfo("Fluids are only put out at the correct height") .addInfo("The correct height equals the slot number in the NEI recipe") diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaOilCracker.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaOilCracker.java index 092e62850cd..30beb268d07 100644 --- a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaOilCracker.java +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaOilCracker.java @@ -149,7 +149,7 @@ public MTEMegaOilCracker(String aName) { @Override public MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Cracker") + tt.addMachineType("Cracker, MOC") .addParallelInfo(Configuration.Multiblocks.megaMachinesMax) .addInfo("Thermally cracks heavy hydrocarbons into lighter fractions") .addInfo("More efficient than the Chemical Reactor") diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaVacuumFreezer.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaVacuumFreezer.java index 5734faeb5e8..c9138789363 100644 --- a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaVacuumFreezer.java +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaVacuumFreezer.java @@ -233,7 +233,7 @@ public FluidStack getStack() { @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Vacuum Freezer") + tt.addMachineType("Vacuum Freezer, MVF") .addInfo("Cools hot ingots and cells") .addParallelInfo(Configuration.Multiblocks.megaMachinesMax) .addTecTechHatchInfo() diff --git a/src/main/java/ggfab/mte/MTEAdvAssLine.java b/src/main/java/ggfab/mte/MTEAdvAssLine.java index cba6c9e534f..3ca3826f6aa 100644 --- a/src/main/java/ggfab/mte/MTEAdvAssLine.java +++ b/src/main/java/ggfab/mte/MTEAdvAssLine.java @@ -304,7 +304,7 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Assembly Line") + tt.addMachineType("Assembly Line, AAL") .addInfo("Built exactly the same as standard Assembly Line") .addInfo("Assembly Line with item pipelining") .addInfo("All fluids are however consumed at start") diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java index be44ef3112f..041e8f4bcff 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java @@ -212,7 +212,7 @@ public IStructureDefinition getStructureDefinition() { @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("High-Capacity Component Assembler") + tt.addMachineType("High-Capacity Component Assembler, CoAL") .addInfo("Assembles basic components (motors, pumps, etc.) in large batches.") .addInfo( "The " + EnumChatFormatting.BOLD diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEExtremeHeatExchanger.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEExtremeHeatExchanger.java index 34277effaf5..18fd72eaf4c 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTEExtremeHeatExchanger.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEExtremeHeatExchanger.java @@ -203,7 +203,7 @@ public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStac @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Heat Exchanger/Plasma Heat Exchanger") + tt.addMachineType("Heat Exchanger, EHE") .addInfo("Outputs SH steam by cooling hot fluids with distilled water.") .addInfo("Supplying more hot fluid than the threshold causes overheating,") .addInfo("producing SC steam instead.") diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java index b89b3b96762..50c45858c32 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java @@ -191,10 +191,11 @@ public IStructureDefinition getStructure_EM() { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Essentia Smeltery") + tt.addMachineType("Essentia Smeltery, LES") .addInfo("Necessary evil.") .addInfo("Advanced Essentia smelting technology.") - .addInfo("Max parallel dictated by structure size and Essentia Diffusion Cell tier") + .addInfo("Maximum parallel = 2^Tier * (Length - 1)") + .addInfo("Diffusion Cell Tiers start from 0, Length is full multi length.") .addInfo("Energy Hatch tier: HV+") .addInfo("You can find more information about this machine in the Thaumonomicon.") .addTecTechHatchInfo() diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java b/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java index 2935d4b6b44..4f0ebb78569 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java @@ -180,7 +180,7 @@ public RecipeMap getRecipeMap() { protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Neutron Activator") + tt.addMachineType("Neutron Activator, NA") .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.") diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java index 815aaeafa6b..24b80f5ef80 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java @@ -330,7 +330,7 @@ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack a @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Precise Assembler/Assembler") + tt.addMachineType("Precise Assembler, Assembler, PrAss") .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.") diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java index 2598f0af3dc..b3df1b3c99e 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java @@ -180,7 +180,7 @@ public int getPollutionPerTick(ItemStack aStack) { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Chemical Engine") + tt.addMachineType("Chemical Engine, UCFE") .addInfo("BURNING BURNING BURNING") .addInfo("Use combustible liquid to generate power.") .addInfo("You need to supply Combustion Promoter to keep it running.") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java index bdf8294b0f7..a60b939bbb1 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java @@ -131,7 +131,7 @@ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Assembly Line") + tt.addMachineType("Assembly Line, Assline, AL") .addInfo("Used to make complex machine parts (LuV+)") .addInfo("Does not make Assembler items") .addInfo("Recipe tier is at most Energy Hatch tier + 1.") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEBrickedBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEBrickedBlastFurnace.java index 6bd9cb66c8e..e0423d2eb8c 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEBrickedBlastFurnace.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEBrickedBlastFurnace.java @@ -69,7 +69,7 @@ public String[] getSecondaryDescription() { protected MultiblockTooltipBuilder getTooltip() { if (tooltipBuilder == null) { tooltipBuilder = new MultiblockTooltipBuilder(); - tooltipBuilder.addMachineType("Blast Furnace") + tooltipBuilder.addMachineType("Blast Furnace, BBF") .addInfo("Usable for Steel and general Pyrometallurgy") .addInfo("Has a useful interface, unlike other gregtech multis") .addPollutionAmount(GTMod.gregtechproxy.mPollutionPrimitveBlastFurnacePerSecond) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDieselEngine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDieselEngine.java index e0ee2c144b3..1ba66f1856f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDieselEngine.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDieselEngine.java @@ -95,7 +95,7 @@ public MTEDieselEngine(String aName) { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Combustion Generator") + tt.addMachineType("Combustion Generator, LCE") .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") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java index 93b64c16a80..d695e8b9efe 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java @@ -132,7 +132,7 @@ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Distillery") + tt.addMachineType("Distillery, DT") .addInfo("Fluids are only put out at the correct height") .addInfo("The correct height equals the slot number in the NEI recipe") .beginVariableStructureBlock(3, 3, 3, 12, 3, 3, true) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEElectricBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEElectricBlastFurnace.java index 551efca6844..ffe7efa0ba5 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEElectricBlastFurnace.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEElectricBlastFurnace.java @@ -117,7 +117,7 @@ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Blast Furnace") + tt.addMachineType("Blast Furnace, EBF") .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.") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEExtremeDieselEngine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEExtremeDieselEngine.java index 8c708dacca7..b6d0b8c5480 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEExtremeDieselEngine.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEExtremeDieselEngine.java @@ -40,7 +40,7 @@ public MTEExtremeDieselEngine(String aName) { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Combustion Generator") + tt.addMachineType("Combustion Generator, ECE") .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") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEHeatExchanger.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEHeatExchanger.java index ab5fcd65f5c..5c24ba42c5d 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEHeatExchanger.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEHeatExchanger.java @@ -107,7 +107,7 @@ public MTEHeatExchanger(String aName) { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Heat Exchanger") + tt.addMachineType("Heat Exchanger, LHE") .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") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java index c20ec1a016c..4bdd7218f6a 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java @@ -210,7 +210,7 @@ public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirect @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Electromagnetic Separator/Polarizer") + tt.addMachineType("Electromagnetic Separator, Polarizer") .addInfo("Use screwdriver to switch mode") .addInfo("Insert an electromagnet into the electromagnet housing to use") .addInfo("Better electromagnets give further bonuses") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java index aa025c559b7..36573c09928 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java @@ -234,7 +234,7 @@ public void onBlockDestroyed() { @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Laser Engraver") + tt.addMachineType("Laser Engraver, HILE") .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") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java index 1f131af6924..12e600d10f2 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java @@ -186,7 +186,7 @@ public IStructureDefinition getStructureDefinition() { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Ore Processor") + tt.addMachineType("Ore Processor, IOF") .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.") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeChemicalReactor.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeChemicalReactor.java index fcfa5b49231..02c8f19ae0c 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeChemicalReactor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeChemicalReactor.java @@ -103,7 +103,7 @@ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { @Override public MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Chemical Reactor") + tt.addMachineType("Chemical Reactor, LCR") .addInfo("Does not lose efficiency when overclocked") .addInfo("Accepts fluids instead of fluid cells") .beginStructureBlock(3, 3, 3, false) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java index 4285d1e7c37..e7b005f86e1 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java @@ -55,7 +55,7 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Gas Turbine") + tt.addMachineType("Gas Turbine, LGT") .addInfo("Needs a Turbine, place inside controller") // .addInfo("The excess fuel that gets consumed will be voided!") .addPollutionAmount(getPollutionPerSecond(null)) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java index 3af7dd37dde..2cce05ac745 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java @@ -56,7 +56,7 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Gas Turbine") + tt.addMachineType("Gas Turbine, ALGT") .addInfo(EnumChatFormatting.RED + "DEPRECATED! This machine will be removed in the next major update.") .addInfo("Needs a Turbine, place inside controller") .addInfo("Only accepts gases above 800k EU/bucket") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbinePlasma.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbinePlasma.java index 41f3b74c493..a3eebf3dace 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbinePlasma.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbinePlasma.java @@ -58,7 +58,7 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Plasma Turbine") + tt.addMachineType("Plasma Turbine, LPT") .addInfo("Needs a Turbine, place inside controller") .addInfo("Use your Fusion Reactor to produce the Plasma") .beginStructureBlock(3, 3, 4, true) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java index d2f34d144e1..757e3381c1f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java @@ -58,7 +58,7 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Steam Turbine") + tt.addMachineType("Steam Turbine, LST") .addInfo("Needs a Turbine, place inside controller") .addInfo("Outputs Distilled Water as well as producing power") .addInfo("Power output depends on turbine and fitting") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiCanner.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiCanner.java index bf5ed7ac42b..f5727274ce8 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiCanner.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiCanner.java @@ -139,7 +139,7 @@ public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirect @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Canner/Fluid Canner") + tt.addMachineType("Canner, Fluid Canner") .addInfo("Use screwdriver to switch mode") .addInfo("100% faster than single block machines of the same voltage") .addInfo("Gains 8 parallels per voltage tier") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java index f47ec621b3b..99c79b5311d 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java @@ -117,7 +117,7 @@ protected MultiblockTooltipBuilder createTooltip(String tierSuffix) { .getDisplayName(); final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Pump") + tt.addMachineType("Pump, FDP") .addInfo("Works on " + getRangeInChunks() + "x" + getRangeInChunks() + " chunks") .addInfo("Use a Screwdriver to configure range") .addInfo("Use Programmed Circuits to ignore near exhausted oil field") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillInfinite.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillInfinite.java index c722c819b1b..1c24e43d911 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillInfinite.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillInfinite.java @@ -27,7 +27,7 @@ protected MultiblockTooltipBuilder createTooltip() { .getDisplayName(); final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Pump") + tt.addMachineType("Pump, FDP") .addInfo("Works on " + getRangeInChunks() + "x" + getRangeInChunks() + " chunks") .beginStructureBlock(3, 7, 3, false) .addController("Front bottom") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlantBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlantBase.java index 13a7396b8b2..c6ac4adf3ec 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlantBase.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlantBase.java @@ -612,7 +612,7 @@ protected MultiblockTooltipBuilder createTooltip(String tierSuffix) { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); final int baseCycleTime = calculateMaxProgressTime(getMinTier()); - tt.addMachineType("Miner") + tt.addMachineType("Miner, MBM") .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") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java index 32f5c33dfb2..daaf772ae54 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java @@ -117,7 +117,7 @@ public IStructureDefinition getStructureDefinition() @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Transcendent Mixer") + tt.addMachineType("Transcendent Mixer, TPM") .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.") diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEVacuumFreezer.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEVacuumFreezer.java index 76d36bbe739..c069c7e2b7c 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEVacuumFreezer.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEVacuumFreezer.java @@ -54,7 +54,7 @@ public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Vacuum Freezer") + tt.addMachineType("Vacuum Freezer, VF") .addInfo("Cools hot ingots and cells") .beginStructureBlock(3, 3, 3, true) .addController("Front center") 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 index 21c00e1759f..4fc4ecc99f2 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java @@ -314,7 +314,7 @@ public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirect @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Compressor/Advanced Neutronium Compressor") + tt.addMachineType("Compressor, Advanced Neutronium Compressor") .addInfo(EnumChatFormatting.LIGHT_PURPLE + "Uses the immense power of the event horizon to compress things") .addInfo( EnumChatFormatting.LIGHT_PURPLE 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 index b50f4171b68..19bb69fbced 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java @@ -198,7 +198,7 @@ public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirect @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Compressor") + tt.addMachineType("Compressor, HIP") .addInfo("HIP Unit heats up while running") .addInfo( "When it reaches maximum heat, it becomes " + EnumChatFormatting.DARK_RED 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 index 1983049c37c..65e7c72c238 100644 --- 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 @@ -80,7 +80,7 @@ public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { @Override public String getMachineType() { - return "(Plasma/Electric) Arc Furnace"; + return "Arc Furnace, Plasma Arc Furnace"; } @Override 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 index 34384cbf8ad..0f1547e35e4 100644 --- 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 @@ -58,7 +58,7 @@ public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { @Override public String getMachineType() { - return "Coke Oven"; + return "Coke Oven, ICO"; } @Override 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 index 11bfaaca7e2..0534de4b67d 100644 --- 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 @@ -78,7 +78,7 @@ public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { @Override public String getMachineType() { - return "Cutting Machine / Slicing Machine"; + return "Cutting Machine, Slicing Machine"; } @Override 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 index d96530535bd..04e9b130cda 100644 --- 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 @@ -194,7 +194,7 @@ public int getPollutionPerSecond(ItemStack aStack) { @Override public String getMachineType() { - return "Vacuum Furnace / Dehydrator"; + return "Vacuum Furnace, Dehydrator"; } @Override 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 index 7b3301d6c87..ddb7a4ef8c2 100644 --- 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 @@ -90,7 +90,7 @@ public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { @Override public String getMachineType() { - return "Macerator/Pulverizer"; + return "Macerator, Pulverizer"; } @Override 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 index 3e9d0d55bcd..2dc288ccefd 100644 --- 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 @@ -63,7 +63,7 @@ public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { @Override public String getMachineType() { - return "Fluid Alloy Cooker"; + return "Fluid Alloy Cooker, ABS"; } @Override 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 index 59a0d0e1fc2..e38764a46d3 100644 --- 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 @@ -49,7 +49,7 @@ public MTEAutoCrafter(String mName) { @Override public String getMachineType() { - return "Assembler"; + return "Assembler, LSAA"; } @Override 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 index d2aeee46834..e1d9b303c17 100644 --- 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 @@ -97,7 +97,7 @@ public MTEMassFabricator(final String aName) { @Override public String getMachineType() { - return "Mass Fabricator / Recycler"; + return "Mass Fabricator, Recycler"; } @Override 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 index fdb4b52c3b9..eb985938290 100644 --- 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 @@ -243,7 +243,7 @@ public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Quantum Force Transformer") + tt.addMachineType("Quantum Force Transformer, QFT") .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("All inputs go on the bottom, all outputs go on the top") 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 index c93caaffe9c..a9bf25f338e 100644 --- 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 @@ -111,7 +111,7 @@ public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { @Override public String getMachineType() { - return "Tree Farm"; + return "Tree Farm, TGS"; } @Override 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 index 1f98e164b8d..9ad6c3d3f48 100644 --- 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 @@ -273,7 +273,7 @@ public IStructureDefinition getStructureDefinition() { @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Fluid Alloy Cooker") + tt.addMachineType("Fluid Alloy Cooker, MABS") .addInfo( "Runs the same recipes as the normal ABS, except with up to " + EnumChatFormatting.BOLD + EnumChatFormatting.UNDERLINE 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 index 92bc764475e..37e224df446 100644 --- 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 @@ -181,7 +181,7 @@ public void loadNBTData(NBTTagCompound aNBT) { @Override public String getMachineType() { - return "Large Gas Turbine"; + return "Large Gas Turbine, XLGT"; } @Override 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 index f941db158df..27384fdc30f 100644 --- 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 @@ -142,7 +142,7 @@ public int getDamageToComponent(ItemStack aStack) { @Override public String getMachineType() { - return "Large Supercritical Steam Turbine"; + return "Large Supercritical Steam Turbine, XLSCT"; } @Override 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 index 4ca2b5832e9..8f9a4fcee2a 100644 --- 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 @@ -160,7 +160,7 @@ public int getDamageToComponent(ItemStack aStack) { @Override public String getMachineType() { - return "Large Super-heated Steam Turbine"; + return "Large Super-heated Steam Turbine, XLHPT"; } @Override 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 index 38c2b7160a9..1bb3c4bcef2 100644 --- 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 @@ -171,7 +171,7 @@ public int getDamageToComponent(ItemStack aStack) { @Override public String getMachineType() { - return "Large Steam Turbine"; + return "Large Steam Turbine, XLST"; } @Override diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbinePlasma.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbinePlasma.java index 59ae72cf0c4..ec4accb7ad1 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbinePlasma.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbinePlasma.java @@ -273,7 +273,7 @@ public int getDamageToComponent(ItemStack aStack) { @Override public String getMachineType() { - return "Large Plasma Turbine"; + return "Large Plasma Turbine, XLPT"; } @Override 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 0cbf255fa56..b92fc8a6ccf 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 @@ -113,7 +113,7 @@ public GregtechMetaTileEntity_PowerSubStationController(final String aName) { @Override public String getMachineType() { - return "Energy Buffer"; + return "Energy Buffer, PSS"; } @Override diff --git a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java index 45e6ed1e529..b4e63059931 100644 --- a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java +++ b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java @@ -408,7 +408,7 @@ private int wirelessCapableCapacitors() { @Override protected MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Energy Storage") + tt.addMachineType("Energy Storage, LSC") .addInfo("Loses energy equal to 1% of the total capacity every 24 hours.") .addInfo( "Capped at " + EnumChatFormatting.RED diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java index 7cc087b3a26..d67eae03a3a 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java @@ -291,7 +291,7 @@ protected IAlignmentLimits getInitialAlignmentLimits() { protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); String fertilizerBoostMax = String.format("%.0f", EIG_BALANCE_MAX_FERTILIZER_BOOST * 100); - tt.addMachineType("Crop Farm") + tt.addMachineType("Crop Farm, EIG") .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") diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java index 7ae4adf1dac..f78835bb318 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java @@ -289,7 +289,7 @@ protected IAlignmentLimits getInitialAlignmentLimits() { @Override protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType("Mega Apiary") + tt.addMachineType("Mega Apiary, Mapiary") .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)") diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEActiveTransformer.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEActiveTransformer.java index 7c2963a30a9..ff0d2deffc2 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/MTEActiveTransformer.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEActiveTransformer.java @@ -125,8 +125,8 @@ protected CheckRecipeResult checkProcessing_EM() { @Override public MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.transformer.name")) // Machine Type: - // Transformer + tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.transformer.machinetype")) // Machine Type: + // Transformer .addInfo(translateToLocal("gt.blockmachines.multimachine.em.transformer.desc.1")) // Can transform to // and from any // voltage diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEQuantumComputer.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEQuantumComputer.java index f3c3d6ab16d..7893298514b 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/MTEQuantumComputer.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEQuantumComputer.java @@ -347,8 +347,9 @@ public void outputAfterRecipe_EM() { @Override public MultiblockTooltipBuilder createTooltip() { final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); - tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.computer.name")) // Machine Type: Quantum - // Computer + tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.computer.machinetype")) // 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 diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index ed54638acf6..dfdaeb93a3f 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -644,6 +644,7 @@ gt.blockcasingsBA0.8.desc.1=Who wouldn't want a 32k epoxy multi? #Multiblocks gt.blockmachines.multimachine.em.transformer.name=Active Transformer +gt.blockmachines.multimachine.em.transformer.machinetype=Active Transformer, AT gt.blockmachines.multimachine.em.transformer.hint=1 - Energy IO Hatches or High Power Casing gt.blockmachines.multimachine.em.transformer.desc.1=Can transform to and from any voltage gt.blockmachines.multimachine.em.transformer.desc.2=Only 0.004% power loss, HAYO! @@ -699,6 +700,7 @@ gt.blockmachines.multimachine.em.switch.desc.0=Controller block of the Network S gt.blockmachines.multimachine.em.switch.desc.1=Routes and distributes computation gt.blockmachines.multimachine.em.computer.name=Quantum Computer +gt.blockmachines.multimachine.em.computer.machinetype=Quantum Computer, QC gt.blockmachines.multimachine.em.computer.hint.0=1 - Classic/Data Hatches or Computer casing gt.blockmachines.multimachine.em.computer.hint.1=2 - Rack Hatches or Advanced computer casing gt.blockmachines.multimachine.em.computer.desc=You need it to process the number above From 950905078515f4dc1d145c48cf3eabb5ec31bb22 Mon Sep 17 00:00:00 2001 From: GDCloud <93287602+GDCloudstrike@users.noreply.github.com> Date: Sun, 8 Dec 2024 21:17:13 +0100 Subject: [PATCH 101/181] Add an upgradable hand pump (#3485) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../java/gtPlusPlus/core/item/ModItems.java | 1 + .../core/item/tool/misc/ItemGregtechPump.java | 369 +++--------------- .../core/recipe/RecipesGregTech.java | 57 +++ .../textures/items/MU-metatool.01/4.png | Bin 0 -> 1451 bytes 4 files changed, 108 insertions(+), 319 deletions(-) create mode 100644 src/main/resources/assets/miscutils/textures/items/MU-metatool.01/4.png diff --git a/src/main/java/gtPlusPlus/core/item/ModItems.java b/src/main/java/gtPlusPlus/core/item/ModItems.java index 49a22bc8a89..25e5a7dc2a6 100644 --- a/src/main/java/gtPlusPlus/core/item/ModItems.java +++ b/src/main/java/gtPlusPlus/core/item/ModItems.java @@ -691,6 +691,7 @@ public static void init() { toolGregtechPump.registerPumpType(1, "Advanced Hand Pump", 32000, 1); toolGregtechPump.registerPumpType(2, "Super Hand Pump", 128000, 2); toolGregtechPump.registerPumpType(3, "Ultimate Hand Pump", 512000, 3); + toolGregtechPump.registerPumpType(4, "Expandable Hand Pump", 0, 4); // Xp Fluids - Dev if (!FluidRegistry.isFluidRegistered("mobessence")) { diff --git a/src/main/java/gtPlusPlus/core/item/tool/misc/ItemGregtechPump.java b/src/main/java/gtPlusPlus/core/item/tool/misc/ItemGregtechPump.java index f6533dad8e6..bab4eac684d 100644 --- a/src/main/java/gtPlusPlus/core/item/tool/misc/ItemGregtechPump.java +++ b/src/main/java/gtPlusPlus/core/item/tool/misc/ItemGregtechPump.java @@ -25,12 +25,8 @@ 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; @@ -95,11 +91,8 @@ public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, Entity 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( @@ -107,10 +100,12 @@ public void registerPumpType(final int aID, final String aPumpName, final int aE 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? + switch (aTier) { + case 0 -> EnumRarity.common; + case 1 -> EnumRarity.uncommon; + case 2 -> EnumRarity.rare; + default -> EnumRarity.epic; + } // Rarity ); } @@ -134,18 +129,8 @@ public ItemGregtechPump(final String unlocalizedName, final CreativeTabs creativ } } - 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) { + final EnumRarity regRarity) { this.addItem( id, localizedName, @@ -153,8 +138,6 @@ public void registerItem(final int id, final String localizedName, final long eu 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 @@ -167,15 +150,6 @@ public EnumRarity getRarity(final ItemStack par1ItemStack) { 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) { @@ -185,21 +159,19 @@ public void addInformation(final ItemStack aStack, final EntityPlayer aPlayer, L 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"); - } + 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 ? "" + formatNumbers(f.amount) : "" + 0) + + "L" + + " / " + + formatNumbers(getCapacity(aStack)) + + "L"); final Long[] tStats = this.getElectricStats(aStack); if (tStats != null) { @@ -455,25 +427,6 @@ 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) @@ -543,7 +496,7 @@ public final IIcon getIconFromDamage(final int aMetaData) { return mIconMap.get(0); } else { int newMeta = aMetaData - this.mOffset; - newMeta = (Math.max(0, Math.min(3, newMeta))); + newMeta = (Math.max(0, Math.min(4, newMeta))); return mIconMap.get(newMeta); } } @@ -570,21 +523,11 @@ 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. *

@@ -608,11 +551,10 @@ public final ItemGregtechPump addItemBehavior(final int aMetaValue, /** * 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. + * @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. */ @SuppressWarnings("unchecked") @@ -686,9 +628,7 @@ public final ItemStack addItem(final int aID, final String aEnglish, String aToo @Override public String getItemStackDisplayName(final ItemStack aStack) { int keyValue = (getCorrectMetaForItemstack(aStack)); - if (keyValue < 0 || keyValue > 3) { - keyValue = 0; - } + keyValue = GTUtility.clamp(keyValue, 0, 4); return GTLanguageManager .getTranslation("gtplusplus." + this.getUnlocalizedName(aStack) + "." + keyValue + ".name"); } @@ -717,9 +657,7 @@ public void emptyStoredFluid(ItemStack aStack) { } public void storeFluid(ItemStack aStack, FluidStack aFluid) { - if (aFluid == null) { - return; - } else { + if (aFluid != null) { String fluidname = aFluid.getFluid() .getName(); int amount = aFluid.amount; @@ -767,7 +705,8 @@ public int getCapacity(ItemStack container) { .getInteger("mCapacity"); } int aMeta = this.getCorrectMetaForItemstack(container); - return aMeta == 0 ? 2000 : aMeta == 1 ? 8000 : aMeta == 2 ? 32000 : 128000; + + return 2000 * (int) Math.pow(4, aMeta); } public int fill(ItemStack container, FluidStack resource) { @@ -861,36 +800,24 @@ public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) { && 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) { + if (aStoredFluid == null) { + // We cannot drain this if it's empty. return null; } + int aStoredAmount = aStoredFluid.amount; + 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; - } - } + FluidStack newAmount = FluidUtils.getFluidStack(aStoredFluid, amountRemaining); + FluidStack drained = FluidUtils.getFluidStack(aStoredFluid, maxDrain); + storeFluid(container, newAmount); + return drained; } } return null; @@ -914,8 +841,11 @@ public void initNBT(ItemStack aStack) { 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); + if (!aNewNBT.hasKey("capacityInit")) { + int aCapacity = 2000 * (int) Math.pow(4, aMeta); + aNewNBT.setInteger("mCapacity", aCapacity); + aNewNBT.setBoolean("capacityInit", true); + } aStack.setTagCompound(aNewNBT); } } @@ -934,19 +864,11 @@ public boolean tryDrainTile(ItemStack aStack, World aWorld, EntityPlayer aPlayer 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; + int removal = 0; + if (aTier != 0) { + removal = 8 * (int) Math.pow(4, aTier); } - if (!canUse(aStack, removal) && aTier > 0) { + if (!canUse(aStack, removal) && aTier > 0 && aTier < 4) { PlayerUtils.messagePlayer(aPlayer, "Not enough power."); Logger.INFO("No Power"); return false; @@ -967,17 +889,12 @@ public boolean tryDrainTile(ItemStack aStack, World aWorld, EntityPlayer aPlayer didDrain = true; } } else { - didDrain = aTier == 0; + didDrain = aTier == 0 || aTier == 4; } 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; + return this.drainTankGT(tTileEntity, aStack, aWorld, aPlayer); } } } @@ -986,58 +903,11 @@ else if ((tTileEntity instanceof IFluidTank || tTileEntity instanceof IFluidHand 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) { + public boolean drainTankGT(TileEntity tTileEntity, ItemStack aStack, World aWorld, EntityPlayer aPlayer) { if (tTileEntity == null) { return false; } @@ -1090,127 +960,6 @@ public boolean drainTankGT(TileEntity tTileEntity, ItemStack aStack, World aWorl 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; - ArrayList m = new ArrayList<>(); - for (int i = 0; i < 6; i++) { - m.add(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 (!(aTileEntity instanceof IFluidHandler)) { - 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 */ @@ -1235,18 +984,6 @@ public FluidStack getStoredFluidOfGTMachine(IGregTechTileEntity aTileEntity) { 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")); @@ -1272,12 +1009,6 @@ public boolean setStoredFluidOfGTMachine(IGregTechTileEntity aTileEntity, FluidS 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); @@ -1296,7 +1027,7 @@ public int getCorrectMetaForItemstack(ItemStack aStack) { return 0; } else { int newMeta = aStack.getItemDamage() - this.mOffset; - newMeta = (Math.max(0, Math.min(3, newMeta))); + newMeta = (Math.max(0, Math.min(4, newMeta))); return newMeta; } } diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java b/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java index adc335c72cb..ffac299ae2f 100644 --- a/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java @@ -44,9 +44,13 @@ import static gtPlusPlus.api.recipe.GTPPRecipeMaps.thermalBoilerRecipes; import static gtPlusPlus.core.material.MaterialsAlloy.TITANSTEEL; +import java.util.Arrays; +import java.util.List; + import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; @@ -116,6 +120,7 @@ private static void execute() { chemplantRecipes(); alloySmelterRecipes(); thermalBoilerRecipes(); + craftingTableRecipes(); /* * Special Recipe handlers @@ -562,6 +567,26 @@ private static void assemblyLineRecipes() { .eut(TierEU.RECIPE_UHV / 2) .duration(1 * MINUTES) .addTo(AssemblyLine); + + // Expandable Hand Pump + RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 4, 1)) + .metadata(RESEARCH_TIME, 30 * MINUTES) + .itemInputs( + ItemList.Electric_Pump_LuV.get(4), + ItemList.Electric_Motor_LuV.get(4), + GregtechItemList.VOLUMETRIC_FLASK_32k.get(4), + MaterialsAlloy.LAFIUM.getScrew(16), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.ring, 8), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.stick, 16), + Materials.Osmiridium.getPlates(32)) + .fluidInputs( + MaterialsAlloy.HELICOPTER.getFluidStack(144 * 32), + MaterialsAlloy.INDALLOY_140.getFluidStack(144 * 64)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.toolGregtechPump, 1004, 1)) + .eut(TierEU.RECIPE_LuV) + .duration(30 * SECONDS) + .addTo(AssemblyLine); } private static void laserEngraverRecipes() { @@ -1880,4 +1905,36 @@ private static void cyclotronRecipes() { .addTo(cyclotronRecipes); } + + private static void craftingTableRecipes() { + + List tankList = Arrays.asList( + ItemList.Super_Tank_LV, + ItemList.Super_Tank_MV, + ItemList.Super_Tank_HV, + ItemList.Super_Tank_EV, + ItemList.Super_Tank_IV, + ItemList.Quantum_Tank_LV, + ItemList.Quantum_Tank_MV, + ItemList.Quantum_Tank_HV, + ItemList.Quantum_Tank_EV, + ItemList.Quantum_Tank_IV); + + for (int i = 0; i < 10; i++) { + ItemStack tank = tankList.get(i) + .get(1); + ItemStack handPump = ItemUtils.simpleMetaStack(ModItems.toolGregtechPump, 1004, 1); + ItemStack pumpWithNBT = handPump.copy(); + NBTTagCompound nbt = new NBTTagCompound(); + int capacity = i == 9 ? Integer.MAX_VALUE : 4_000_000 * (int) Math.pow(2, i); + nbt.setInteger("mMeta", 4); + nbt.setBoolean("mInit", true); + nbt.setString("mFluid", "@@@@@"); + nbt.setInteger("mFluidAmount", 0); + nbt.setInteger("mCapacity", capacity); + nbt.setBoolean("capacityInit", true); + pumpWithNBT.setTagCompound(nbt); + GTModHandler.addShapelessCraftingRecipe(pumpWithNBT, new Object[] { handPump, tank }); + } + } } diff --git a/src/main/resources/assets/miscutils/textures/items/MU-metatool.01/4.png b/src/main/resources/assets/miscutils/textures/items/MU-metatool.01/4.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd00c493c2971c3e73003bf18aae4453978f733 GIT binary patch literal 1451 zcmV;c1yuTpP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TPsa^Awog%Nfa?v5d{B&J_v$J#QNhO z5DEBTz?b*~S)tgC`mhniZHu_ECY|_;iS5q#eP`xwW@dMT5yh|E+&eSpp7Wh^zI&5e z)6>&32=)1Ty!!8ui|79h-3rXj&4s!ErlzJW&YM-hah-S-p|Q}2R}p;Mk5|30eLG%d zDv&=JO5wDXBGV7q;7Ks>px~uaN#~?Zia@X)%GxWTxUQ=tJn^LMw?&H4CI-$1_kB3S zsMIPtHbc7&UkT7>mjKJ|e~^<(r6Qi^DG4|Z>Acly>1L3Mtv3R1fa~bF_uF8kDnJs= zW>ak2mW71{C4qIS9rb#BK;URNPFcSfizpl5ID^|o^c=(a`FT1BSqT#1Xf_*|i@L_Q zHH>29*bs^5Oz)cwPsz}>(MXHbpzkrnrfwxT9H*vED57$?T)?|9a%eIKlEEo*4A|;^ z+77COHC7mlmjcOo(F_d`<#I7Bl{P9tFe3t*_!DEe=9Z;s_lnOGB;c3T7xiO&X3@6- z2EK1!V?b`^%wdQiyX~k*(5R=Codo2oT3{uNCX!%9Qv{5213X*ioyovdfbZehg5$n- z#==}vH9*nQmYO07v!7sPQZ3L6A~wJZZM3;5OtR0eX^&$XE-fwPjG!sxWXYLntyVL( zsc+p1n42kE1sGdqgMQ;@*xE(()@$i|z?z(#jF(C*RTXoGkeCV+$$8$ge#>drNd*Hm zN&*fnI$;Jr$k?#=+T3GnHoj-eO~FLS0JuLO+!9s4>2+?9qcKMke0FPY{1j!5;3U!U zJO-y05WMZ7q`uVLirjhlAS`)mN=k|YeeWSbk}d2bScx2e^aJ~w>^G%>;M?H1!!@fx zGAG85$q{ko%PXJ4J|b%dZTgWQaMz)QYtVq*0)@r+buW@6C;<@I1|eN!@H=+jEx%m8 zDwn?hQF~0OuvL+*AtJcaYkf($?r~^&2LjoEYrW&@4xX0>n=k^<<69m!$iQ!yc&i(Ki z-ts146`~_oDnisQ(DO19?!qX@nyg9(Bxan~HU6H1jtVp0*KIG3 z>oSk5YQUD;)cICmNHF-`kpo)(0D*}>6%oiY&Z}}_=uxST-k%UATjKqWp1cNeL&a+>g)_1duGa5W1(UGedNJUe3LDL2muzDbS&*C2xNHtmJUxN7fl+e?eto0w#mg zSMp!UE?FO4dRJB-jQ*TI^zoArYSfwlZ6SL8ATii1dph3=@SmITvBPKNSN|v3Y2T=k1ClW9Fv0o0hX6}INR0n9xB*FUHo-+i{sK=)01^9UOgR7m002ovPDHLk FV1h3PuI~T< literal 0 HcmV?d00001 From ddb326cb1a7ddc4c7d8d91931dd098f2e88c1413 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sun, 8 Dec 2024 14:46:16 -0600 Subject: [PATCH 102/181] Remove Compact Fusion force chunk loading (#3618) --- .../tileEntity/MTELargeFusionComputer1.java | 2 - .../tileEntity/MTELargeFusionComputer2.java | 2 - .../tileEntity/MTELargeFusionComputer3.java | 2 - .../tileEntity/MTELargeFusionComputer4.java | 2 - .../tileEntity/MTELargeFusionComputer5.java | 2 - .../base/MTELargeFusionComputer.java | 49 ------------------- 6 files changed, 59 deletions(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer1.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer1.java index 633bd9a72b2..0d36a897aec 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer1.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer1.java @@ -61,8 +61,6 @@ protected MultiblockTooltipBuilder createTooltip() { "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.") .addTecTechHatchInfo() .addCasingInfoMin("LuV Machine Casing", 1664, false) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer2.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer2.java index e702e694eb1..472af5e84e2 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer2.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer2.java @@ -61,8 +61,6 @@ protected MultiblockTooltipBuilder createTooltip() { "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") .addTecTechHatchInfo() diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer3.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer3.java index 06f06e7cdda..f1e46b2c6f9 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer3.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer3.java @@ -61,8 +61,6 @@ protected MultiblockTooltipBuilder createTooltip() { "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") diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer4.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer4.java index 74635196001..a54348f19ac 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer4.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer4.java @@ -58,8 +58,6 @@ protected MultiblockTooltipBuilder createTooltip() { "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") diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer5.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer5.java index 52b89d67ad9..fd652356f95 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer5.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer5.java @@ -58,8 +58,6 @@ protected MultiblockTooltipBuilder createTooltip() { "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") diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java index 36b1142732b..1f7dc47f629 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java @@ -14,10 +14,8 @@ 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.minecraft.world.ChunkCoordIntPair; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; @@ -49,7 +47,6 @@ 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; @@ -73,7 +70,6 @@ public abstract class MTELargeFusionComputer extends MTETooltipMultiBlockBaseEM 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; @@ -235,45 +231,6 @@ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBu @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; @@ -488,12 +445,6 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { 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; } From 5c297fb9544472e91452765ce360dd3e591868b4 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sun, 8 Dec 2024 15:11:39 -0600 Subject: [PATCH 103/181] Remove DTPF force chunk loading (#3619) --- .../machines/multi/MTEPlasmaForge.java | 47 ------------------- 1 file changed, 47 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java index 5045645956f..0220a9d9e99 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java @@ -31,10 +31,8 @@ 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.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; @@ -76,7 +74,6 @@ import gregtech.api.metatileentity.implementations.MTEHatch; import gregtech.api.metatileentity.implementations.MTEHatchEnergy; import gregtech.api.metatileentity.implementations.MTEHatchInput; -import gregtech.api.objects.GTChunkManager; import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.RecipeMaps; import gregtech.api.recipe.check.CheckRecipeResult; @@ -548,8 +545,6 @@ public class MTEPlasmaForge extends MTEExtendedPowerMultiBlockBase STRUCTURE_DEFINITION = StructureDefinition .builder() @@ -1074,48 +1069,6 @@ private double calculateTier(long voltage) { @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()) { From 69e4f9cc12761e28fe5fb553fbb9b05f52ffdb66 Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Sun, 8 Dec 2024 23:18:52 -0300 Subject: [PATCH 104/181] Refactored BioLab and Radio Hatch Recipes (#3515) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../loaders/recipes/CraftingRecipes.java | 257 ++++++++++++++---- .../java/gregtech/api/enums/ItemList.java | 4 +- 2 files changed, 199 insertions(+), 62 deletions(-) diff --git a/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java b/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java index 844966e2d64..724100826ce 100644 --- a/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java +++ b/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java @@ -4,13 +4,11 @@ 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; @@ -19,13 +17,7 @@ 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; @@ -48,9 +40,9 @@ 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.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; import gregtech.api.interfaces.ISubTagContainer; import gregtech.api.util.GTModHandler; @@ -408,58 +400,203 @@ public void run() { "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) { + // BioLabs + GTModHandler.addCraftingRecipe( + new MTEBioLab(BioLab_HV.ID, "bw.biolabHV", StatCollector.translateToLocal("tile.biolab.name"), 3) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1L), 'W', + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Kanthal, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), 'C', + ItemList.MACHINE_HULLS[3].get(1L) }); - } - } + GTModHandler.addCraftingRecipe( + new MTEBioLab(BioLab_EV.ID, "bw.biolabEV", StatCollector.translateToLocal("tile.biolab.name"), 4) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1L), 'W', + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Nichrome, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), 'C', + ItemList.MACHINE_HULLS[4].get(1L) }); + + GTModHandler.addCraftingRecipe( + new MTEBioLab(BioLab_IV.ID, "bw.biolabIV", StatCollector.translateToLocal("tile.biolab.name"), 5) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1L), 'W', + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.TPV, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), 'C', + ItemList.MACHINE_HULLS[5].get(1L) }); + + GTModHandler.addCraftingRecipe( + new MTEBioLab(BioLab_LuV.ID, "bw.biolabLuV", StatCollector.translateToLocal("tile.biolab.name"), 6) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Chrome, 1L), + 'W', GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.HSSG, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 1L), 'C', + ItemList.MACHINE_HULLS[6].get(1L) }); + + GTModHandler.addCraftingRecipe( + new MTEBioLab(BioLab_ZPM.ID, "bw.biolabZPM", StatCollector.translateToLocal("tile.biolab.name"), 7) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1L), 'W', + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Naquadah, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 1L), 'C', + ItemList.MACHINE_HULLS[7].get(1L) }); + + GTModHandler.addCraftingRecipe( + new MTEBioLab(BioLab_UV.ID, "bw.biolabUV", StatCollector.translateToLocal("tile.biolab.name"), 8) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmium, 1L), + 'W', GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.NaquadahAlloy, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UV, 1L), 'C', + ItemList.MACHINE_HULLS[8].get(1L) }); + + GTModHandler.addCraftingRecipe( + new MTEBioLab(BioLab_UHV.ID, "bw.biolabUHV", StatCollector.translateToLocal("tile.biolab.name"), 9) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1L), 'W', + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.ElectrumFlux, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UHV, 1L), 'C', + ItemList.MACHINE_HULLS[9].get(1L) }); + + GTModHandler.addCraftingRecipe( + new MTEBioLab(BioLab_UEV.ID, "bw.biolabUEV", StatCollector.translateToLocal("tile.biolab.name"), 10) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Bedrockium, 1L), 'W', + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.DraconiumAwakened, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 1L), 'C', + ItemList.MACHINE_HULLS[10].get(1L) }); + + GTModHandler.addCraftingRecipe( + new MTEBioLab(BioLab_UIV.ID, "bw.biolabUIV", StatCollector.translateToLocal("tile.biolab.name"), 11) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1L), 'W', + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Infinity, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 1L), 'C', + ItemList.MACHINE_HULLS[11].get(1L) }); + + GTModHandler.addCraftingRecipe( + new MTEBioLab(BioLab_UMV.ID, "bw.biolabUMV", StatCollector.translateToLocal("tile.biolab.name"), 12) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1L), 'W', + GTOreDictUnificator.get("wireGt01Hypogen", 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UMV, 1L), 'C', + ItemList.MACHINE_HULLS[12].get(1L) }); + + // Radio Hatches + GTModHandler.addCraftingRecipe( + new GT_MetaTileEntity_RadioHatch( + RadioHatch_HV.ID, + "bw.radiohatchHV", + "HV " + StatCollector.translateToLocal("tile.radiohatch.name"), + 3).getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "DPD", "DCD", "DKD", 'D', + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1L), 'C', + ItemList.MACHINE_HULLS[3].get(1L), 'K', + GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.Gold, 1L), 'P', + ItemList.Electric_Piston_HV.get(1) }); + + GTModHandler.addCraftingRecipe( + new GT_MetaTileEntity_RadioHatch( + RadioHatch_EV.ID, + "bw.radiohatchEV", + "EV " + StatCollector.translateToLocal("tile.radiohatch.name"), + 4).getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "DPD", "DCD", "DKD", 'D', + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1L), 'C', + ItemList.MACHINE_HULLS[4].get(1L), 'K', + GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.Aluminium, 1L), 'P', + ItemList.Electric_Piston_EV.get(1) }); + + GTModHandler.addCraftingRecipe( + new GT_MetaTileEntity_RadioHatch( + RadioHatch_IV.ID, + "bw.radiohatchIV", + "IV " + StatCollector.translateToLocal("tile.radiohatch.name"), + 5).getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "DPD", "DCD", "DKD", 'D', + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1L), 'C', + ItemList.MACHINE_HULLS[5].get(1L), 'K', + GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.Tungsten, 1L), 'P', + ItemList.Electric_Piston_IV.get(1) }); + + GTModHandler.addCraftingRecipe( + new GT_MetaTileEntity_RadioHatch( + RadioHatch_LuV.ID, + "bw.radiohatchLuV", + "LuV " + StatCollector.translateToLocal("tile.radiohatch.name"), + 6).getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "DPD", "DCD", "DKD", 'D', + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1L), 'C', + ItemList.MACHINE_HULLS[6].get(1L), 'K', + GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.VanadiumGallium, 1L), 'P', + ItemList.Electric_Piston_LuV.get(1) }); + + GTModHandler.addCraftingRecipe( + new GT_MetaTileEntity_RadioHatch( + RadioHatch_ZPM.ID, + "bw.radiohatchZPM", + "ZPM " + StatCollector.translateToLocal("tile.radiohatch.name"), + 7).getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "DPD", "DCD", "DKD", 'D', + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1L), 'C', + ItemList.MACHINE_HULLS[7].get(1L), 'K', + GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.Naquadah, 1L), 'P', + ItemList.Electric_Piston_ZPM.get(1) }); + + GTModHandler.addCraftingRecipe( + new GT_MetaTileEntity_RadioHatch( + RadioHatch_UV.ID, + "bw.radiohatchUV", + "UV " + StatCollector.translateToLocal("tile.radiohatch.name"), + 8).getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "DPD", "DCD", "DKD", 'D', + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1L), 'C', + ItemList.MACHINE_HULLS[8].get(1L), 'K', + GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.NaquadahAlloy, 1L), 'P', + ItemList.Electric_Piston_UV.get(1) }); } } diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index 2d2b93472a1..d1242c3c1b2 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -2583,8 +2583,8 @@ public enum ItemList implements IItemContainer { Spray_Color_Used_14, Spray_Color_Used_15 }, TRANSFORMERS = { Transformer_LV_ULV, Transformer_MV_LV, Transformer_HV_MV, Transformer_EV_HV, Transformer_IV_EV, Transformer_LuV_IV, Transformer_ZPM_LuV, Transformer_UV_ZPM, Transformer_MAX_UV }, - MACHINE_HULLS = { Hull_ULV, Hull_LV, Hull_MV, Hull_HV, Hull_EV, Hull_IV, Hull_LuV, Hull_ZPM, Hull_UV, - Hull_MAX }, + MACHINE_HULLS = { Hull_ULV, Hull_LV, Hull_MV, Hull_HV, Hull_EV, Hull_IV, Hull_LuV, Hull_ZPM, Hull_UV, Hull_MAX, + Hull_UEV, Hull_UIV, Hull_UMV, Hull_UXV, Hull_MAXV }, HATCHES_DYNAMO = { Hatch_Dynamo_ULV, Hatch_Dynamo_LV, Hatch_Dynamo_MV, Hatch_Dynamo_HV, Hatch_Dynamo_EV, Hatch_Dynamo_IV, Hatch_Dynamo_LuV, Hatch_Dynamo_ZPM, Hatch_Dynamo_UV, Hatch_Dynamo_UHV }, HATCHES_ENERGY = { Hatch_Energy_ULV, Hatch_Energy_LV, Hatch_Energy_MV, Hatch_Energy_HV, Hatch_Energy_EV, From 8974edf60d0d99ee0aad863e7eca772eb2bd3f47 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Mon, 9 Dec 2024 14:18:21 +0100 Subject: [PATCH 105/181] update --- gradle/wrapper/gradle-wrapper.jar | Bin 43504 -> 43583 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c3521197d7c4586c843d1d3e9090525f1898cde..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 3990 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 From aa43923a99ed052832987613f43d1f44bd57f7b0 Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Tue, 10 Dec 2024 02:30:25 +0800 Subject: [PATCH 106/181] fix NPE in MTEMultiAutoclave.getWailaNBTData (#3624) --- .../tileentities/machines/multi/MTEMultiAutoclave.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiAutoclave.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiAutoclave.java index 7a3a0da1367..3297e33545d 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiAutoclave.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiAutoclave.java @@ -123,9 +123,8 @@ public void setCoilLevel(HeatingCoilLevel aCoilLevel) { this.heatLevel = aCoilLevel; } - public Integer getCoilTier() { - return (int) this.getCoilLevel() - .getTier() + 1; + public int getCoilTier() { + return heatLevel == null ? 0 : (int) this.heatLevel.getTier() + 1; } private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition From 5c2d26ee366cf8cbe28d239e41d7ca6e8ce444a4 Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Tue, 10 Dec 2024 02:37:09 +0800 Subject: [PATCH 107/181] bandaid fix for rotated turbine overlay (#3622) Co-authored-by: Martin Robertz --- src/main/java/gregtech/api/util/GTUtilityClient.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gregtech/api/util/GTUtilityClient.java b/src/main/java/gregtech/api/util/GTUtilityClient.java index 71ebec7e95b..f2df5760e06 100644 --- a/src/main/java/gregtech/api/util/GTUtilityClient.java +++ b/src/main/java/gregtech/api/util/GTUtilityClient.java @@ -63,6 +63,7 @@ public static void renderTurbineOverlay(IBlockAccess aWorld, int aX, int aY, int int[] tABCCoord = new int[] { -1, -1, 0 }; int[] tXYZOffset = new int[3]; final ForgeDirection tDirection = tExtendedFacing.getDirection(); + tExtendedFacing = ExtendedFacing.of(tDirection); final LightingHelper tLighting = new LightingHelper(aRenderer); // for some reason +x and -z need this field set to true, but not any other sides From 37b2e923df1112b5471ec3906cff43f6726d6420 Mon Sep 17 00:00:00 2001 From: chochem <40274384+chochem@users.noreply.github.com> Date: Mon, 9 Dec 2024 19:05:39 +0000 Subject: [PATCH 108/181] localize research station mode for waila (#3623) --- .../thing/metaTileEntity/multi/MTEResearchStation.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java index ae0f636eccc..6b3d35986c7 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java @@ -623,7 +623,10 @@ public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDat } else if (!tag.getBoolean("incompleteStructure")) { currentTip.add(GREEN + "Running Fine" + efficiency); } - currentTip.add("Mode: " + tag.getString("machineType")); + currentTip.add( + StatCollector.translateToLocal( + "gt.blockmachines.multimachine.em.research.mode." + tag.getString("machineType") + .replace(" ", "_"))); currentTip.add( String.format( "Computation: %,d / %,d", From 53427bc80eb22f9889ae17ba0d9a7e92d69e0d40 Mon Sep 17 00:00:00 2001 From: Raven Szewczyk Date: Tue, 10 Dec 2024 16:18:33 +0000 Subject: [PATCH 109/181] Fix modded music disk playback in the electric jukebox using the new GTNHLib api (#3628) Co-authored-by: Martin Robertz --- dependencies.gradle | 2 +- src/main/java/gregtech/GTMod.java | 2 +- .../java/gregtech/api/util/GTMusicSystem.java | 54 ++++++++++++------- .../machines/basic/MTEBetterJukebox.java | 30 ++++++++--- 4 files changed, 60 insertions(+), 28 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 486a86ca29d..6242f088583 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -38,7 +38,7 @@ dependencies { api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") api("com.github.GTNewHorizons:NotEnoughItems:2.6.51-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") - api("com.github.GTNewHorizons:GTNHLib:0.5.21:dev") + api("com.github.GTNewHorizons:GTNHLib:0.5.22:dev") api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") diff --git a/src/main/java/gregtech/GTMod.java b/src/main/java/gregtech/GTMod.java index 9861d35fcfb..ba46592c975 100644 --- a/src/main/java/gregtech/GTMod.java +++ b/src/main/java/gregtech/GTMod.java @@ -135,7 +135,7 @@ version = "MC1710", guiFactory = "gregtech.client.GTGuiFactory", dependencies = " required-after:IC2;" + " required-after:structurelib;" - + " required-after:gtnhlib@[0.2.1,);" + + " required-after:gtnhlib@[0.5.22,);" + " required-after:modularui@[1.1.12,);" + " required-after:appliedenergistics2@[rv3-beta-258,);" + " after:dreamcraft;" diff --git a/src/main/java/gregtech/api/util/GTMusicSystem.java b/src/main/java/gregtech/api/util/GTMusicSystem.java index 48a78faa6fb..c2fd71d2ece 100644 --- a/src/main/java/gregtech/api/util/GTMusicSystem.java +++ b/src/main/java/gregtech/api/util/GTMusicSystem.java @@ -11,8 +11,10 @@ import java.util.Arrays; import java.util.Collections; import java.util.Map; +import java.util.Objects; import java.util.TreeMap; import java.util.UUID; +import java.util.stream.StreamSupport; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.SoundEventAccessorComposite; @@ -29,6 +31,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.gtnewhorizon.gtnhlib.api.MusicRecordMetadataProvider; import com.jcraft.jorbis.VorbisFile; import baubles.api.BaublesApi; @@ -442,27 +445,42 @@ public static void dumpAllRecordDurations() { // 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"); + final ArrayList resources = new ArrayList<>(); for (final ItemRecord record : allRecords.values()) { - try { + resources.clear(); + if (record instanceof MusicRecordMetadataProvider mrmp) { + StreamSupport.stream( + mrmp.getMusicRecordVariants() + .spliterator(), + false) + .map(mrmp::getMusicRecordResource) + .filter(Objects::nonNull) + .forEach(resources::add); + } else { 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)); + resources + .add(new ResourceLocation(res.getResourceDomain(), "records." + res.getResourcePath())); + } + for (final ResourceLocation res : resources) { + try { + SoundEventAccessorComposite registryEntry = (SoundEventAccessorComposite) sm.getObject(res); + if (registryEntry == null) { + registryEntry = (SoundEventAccessorComposite) sm.getObject(res); + } + 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, res, e); } - } catch (Exception e) { - GTMod.GT_FML_LOGGER.warn("Skipping {}", record.recordName, e); } } GTMod.GT_FML_LOGGER.info( diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEBetterJukebox.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEBetterJukebox.java index 8f1db317a28..960ebb20dd5 100644 --- a/src/main/java/gregtech/common/tileentities/machines/basic/MTEBetterJukebox.java +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEBetterJukebox.java @@ -27,6 +27,7 @@ import org.joml.Vector4i; import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.gtnhlib.api.MusicRecordMetadataProvider; import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; import com.gtnewhorizons.modularui.api.drawable.UITexture; import com.gtnewhorizons.modularui.api.math.Pos2d; @@ -230,16 +231,21 @@ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { updateEmitterList(); } if (doesSlotContainValidRecord(playbackSlot) - && mInventory[playbackSlot].getItem() instanceof ItemRecord record) { - final ResourceLocation resource = record.getRecordResource(record.recordName); + && mInventory[getInputSlot() + playbackSlot].getItem() instanceof ItemRecord record) { + final ResourceLocation resource, playPath; + if (record instanceof MusicRecordMetadataProvider mrmp) { + resource = mrmp.getMusicRecordResource(mInventory[getInputSlot() + playbackSlot]); + playPath = resource; + } else { + resource = record.getRecordResource(record.recordName); + playPath = new ResourceLocation(resource.getResourceDomain(), "records." + resource.getResourcePath()); + } 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); + musicSource.setRecord(playPath, discProgressMs); } } @@ -318,10 +324,18 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { stopCurrentSong(now); } else if (canStartPlaying && mInventory[getInputSlot() + playbackSlot].getItem() instanceof ItemRecord record) { - final ResourceLocation resource = record.getRecordResource(record.recordName); + final ResourceLocation resource, playPath; + if (record instanceof MusicRecordMetadataProvider mrmp) { + resource = mrmp.getMusicRecordResource(mInventory[getInputSlot() + playbackSlot]); + playPath = resource; + } else { + resource = record.getRecordResource(record.recordName); + playPath = new ResourceLocation( + resource.getResourceDomain(), + "records." + resource.getResourcePath()); + } currentlyPlaying = record; - musicSource.setRecord( - new ResourceLocation(resource.getResourceDomain(), "records." + resource.getResourcePath())); + musicSource.setRecord(playPath); // Assume a safe disc duration of 500 seconds if not known in the registry discDurationMs = GTMusicSystem.getMusicRecordDurations() .getOrDefault(resource, 500_000); From 8277dc5923ea2d008b62db451169c6cb5a250b2d Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Tue, 10 Dec 2024 17:33:32 +0100 Subject: [PATCH 110/181] update --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 6242f088583..4618fba8432 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -42,7 +42,7 @@ dependencies { api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") - api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-478-GTNH:dev") + api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-500-GTNH:dev") api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.3.51-gtnh:dev") api('com.github.GTNewHorizons:Yamcl:0.6.0:dev') api("com.github.GTNewHorizons:Postea:1.0.13:dev") @@ -54,7 +54,7 @@ dependencies { // Required to prevent an older bauble api from Extra Utilities from loading first in the javac classpath compileOnly('com.github.GTNewHorizons:Baubles:1.0.4:dev') {transitive=false} - devOnlyNonPublishable("com.github.GTNewHorizons:Infernal-Mobs:1.9.1-GTNH:dev") + devOnlyNonPublishable("com.github.GTNewHorizons:Infernal-Mobs:1.10.0-GTNH:dev") compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.56:dev") From 28987dfd50849ae611a811e274337fe299d8524d Mon Sep 17 00:00:00 2001 From: GDCloud <93287602+GDCloudstrike@users.noreply.github.com> Date: Tue, 10 Dec 2024 18:08:52 +0100 Subject: [PATCH 111/181] Fix DTPF convergence item consumption (#3629) --- .../common/tileentities/machines/multi/MTEPlasmaForge.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java index 0220a9d9e99..bba75222527 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java @@ -832,7 +832,6 @@ private boolean checkCatalyst() { * extraCatalystNeeded, Integer.MAX_VALUE); selectedCatalyst.amount = neededAmount; - startRecipeProcessing(); for (MTEHatchInput hatch : filterValidMTEs(mInputHatches)) { FluidStack checked = hatch.drain(ForgeDirection.UNKNOWN, selectedCatalyst, true); @@ -843,11 +842,9 @@ private boolean checkCatalyst() { neededAmount -= checked.amount; if (neededAmount == 0) { - endRecipeProcessing(); return true; } } - endRecipeProcessing(); return false; } From fc09be798067f596ccd772f00b8203ce1e732d28 Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:27:10 -0500 Subject: [PATCH 112/181] Fix fusion hatch textures (#3632) Co-authored-by: Ethryan <3237986+Ethryan@users.noreply.github.com> --- .../blocks/tileEntity/AntimatterForge.java | 52 +++++++----------- .../tileEntity/AntimatterGenerator.java | 53 +++++++------------ 2 files changed, 38 insertions(+), 67 deletions(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java index 5c1c317dfe6..d694efc36b1 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java @@ -40,7 +40,6 @@ import gregtech.api.enums.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; @@ -150,21 +149,6 @@ protected IStructureDefinition computeValue(Class type) { } }; - static { - Textures.BlockIcons.setCasingTextureForId( - 53, - TextureFactory.of( - TextureFactory.builder() - .addIcon(MACHINE_CASING_ANTIMATTER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(MACHINE_CASING_ANTIMATTER_GLOW) - .extFacing() - .glow() - .build())); - } - public AntimatterForge(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); } @@ -372,21 +356,6 @@ public int textureIndex(int type) { } } - private static final ITexture textureOverlay = TextureFactory.of( - TextureFactory.builder() - .addIcon(OVERLAY_FUSION1) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FUSION1_GLOW) - .extFacing() - .glow() - .build()); - - public ITexture getTextureOverlay() { - return textureOverlay; - } - @Override public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { return side != getBaseMetaTileEntity().getFrontFacing(); @@ -415,8 +384,25 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec if (side == facing) return new ITexture[] { TextureFactory.builder() .addIcon(MACHINE_CASING_ANTIMATTER) .extFacing() - .build(), getTextureOverlay() }; - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(53) }; + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1_GLOW) + .extFacing() + .glow() + .build() }; + if (aActive) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER_GLOW) + .extFacing() + .glow() + .build() }; return new ITexture[] { TextureFactory.builder() .addIcon(MACHINE_CASING_ANTIMATTER) .extFacing() diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java index 98bbbe70e7f..1966a42d02d 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java @@ -48,7 +48,6 @@ import gregtech.api.enums.HatchElement; 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; @@ -112,21 +111,6 @@ protected IStructureDefinition computeValue(Class type) } }; - static { - Textures.BlockIcons.setCasingTextureForId( - 53, - TextureFactory.of( - TextureFactory.builder() - .addIcon(MACHINE_CASING_ANTIMATTER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(MACHINE_CASING_ANTIMATTER_GLOW) - .extFacing() - .glow() - .build())); - } - private boolean addLaserSource(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); if (aMetaTileEntity == null) return false; @@ -544,30 +528,31 @@ public IStructureDefinition getStructureDefinition() { return STRUCTURE_DEFINITION.get(getClass()); } - private static final ITexture textureOverlay = TextureFactory.of( - TextureFactory.builder() - .addIcon(OVERLAY_FUSION1) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FUSION1_GLOW) - .extFacing() - .glow() - .build()); - - public ITexture getTextureOverlay() { - return textureOverlay; - } - @Override - @SuppressWarnings("ALL") 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_ANTIMATTER) .extFacing() - .build(), getTextureOverlay() }; - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(53) }; + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1_GLOW) + .extFacing() + .glow() + .build() }; + if (aActive) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER_GLOW) + .extFacing() + .glow() + .build() }; return new ITexture[] { TextureFactory.builder() .addIcon(MACHINE_CASING_ANTIMATTER) .extFacing() From 691cba85964c6f647357bc3508189d2a5871e01b Mon Sep 17 00:00:00 2001 From: Ethryan <3237986+Ethryan@users.noreply.github.com> Date: Tue, 10 Dec 2024 18:35:45 +0100 Subject: [PATCH 113/181] Delete the RunGC command (#3631) --- .../java/bartworks/common/commands/RunGC.java | 38 ------------------- .../loaders/RegisterServerCommands.java | 2 - 2 files changed, 40 deletions(-) delete mode 100644 src/main/java/bartworks/common/commands/RunGC.java diff --git a/src/main/java/bartworks/common/commands/RunGC.java b/src/main/java/bartworks/common/commands/RunGC.java deleted file mode 100644 index 079e4083d8b..00000000000 --- a/src/main/java/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 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/loaders/RegisterServerCommands.java b/src/main/java/bartworks/common/loaders/RegisterServerCommands.java index 7161eed1d3d..199dcae799c 100644 --- a/src/main/java/bartworks/common/loaders/RegisterServerCommands.java +++ b/src/main/java/bartworks/common/loaders/RegisterServerCommands.java @@ -16,7 +16,6 @@ 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; @@ -27,6 +26,5 @@ public static void registerAll(FMLServerStartingEvent event) { event.registerServerCommand(new PrintRecipeListToFile()); event.registerServerCommand(new ClearCraftingCache()); event.registerServerCommand(new GetWorkingDirectory()); - event.registerServerCommand(new RunGC()); } } From 9ca77b431f6e242f27df4487b1bbb3352a4ab930 Mon Sep 17 00:00:00 2001 From: Ruling-0 <47913168+Ruling-0@users.noreply.github.com> Date: Wed, 11 Dec 2024 00:14:46 -0600 Subject: [PATCH 114/181] Fix Wrong Nether/Fluix Quartz Seed Amount in Autoclave (#3636) --- .../gregtech/loaders/postload/recipes/AutoclaveRecipes.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java index a218dbc3c8e..67c46c0861a 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java @@ -47,12 +47,12 @@ public void run() { certusQuartzTag.setInteger("progress", 0); certusQuartzSeed.setTagCompound(certusQuartzTag); - final ItemStack netherQuartzSeed = getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 600); + final ItemStack netherQuartzSeed = getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 600); NBTTagCompound netherQuartzTag = new NBTTagCompound(); netherQuartzTag.setInteger("progress", 600); netherQuartzSeed.setTagCompound(netherQuartzTag); - final ItemStack fluixSeed = getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 1200); + final ItemStack fluixSeed = getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 1200); NBTTagCompound fluixTag = new NBTTagCompound(); fluixTag.setInteger("progress", 1200); fluixSeed.setTagCompound(fluixTag); From 3a125113be3619773dc6e9b53d626cc9988b471e Mon Sep 17 00:00:00 2001 From: lordIcocain <62835225+lordIcocain@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:48:31 +0200 Subject: [PATCH 115/181] Fix LSC wireless rebalance push wrong info. (#3638) --- .../common/tileentities/MTELapotronicSuperCapacitor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java index b4e63059931..af28462d37a 100644 --- a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java +++ b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java @@ -844,8 +844,8 @@ private int rebalance() { ItemBlockLapotronicEnergyUnit.UMV_wireless_eu_cap .multiply(BigInteger.valueOf(getUMVCapacitorCount())))); - if (transferred_eu.signum() == 1) { - inputLastTick += transferred_eu.longValue(); + if (transferred_eu.signum() == -1) { + inputLastTick += Math.abs(transferred_eu.longValue()); } else { outputLastTick += transferred_eu.longValue(); } From 5439c54361646ceb061758f31b1fd3007b5bd7fa Mon Sep 17 00:00:00 2001 From: Zhehe Date: Wed, 11 Dec 2024 07:58:25 -0800 Subject: [PATCH 116/181] Fix Rocket engine pollution (#3635) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../base/generators/MTERocketFuelGeneratorBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index e7480e0f129..792f02dc8b7 100644 --- 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 @@ -233,7 +233,7 @@ public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long && aBaseMetaTileEntity.increaseStoredEnergyUnits(tFluidAmountToUse * tFuelValue, true)) { int aSafeFloor = (int) Math.max(((tFluidAmountToUse * tConsumed) / 3), 1); this.mFluid.amount -= aSafeFloor; - Pollution.addPollution(getBaseMetaTileEntity(), 10 * getPollution()); + Pollution.addPollution(getBaseMetaTileEntity(), getPollution() / 2); } } } From d292310315455d63ff8a82a71545fa1c56fead75 Mon Sep 17 00:00:00 2001 From: Ethryan <3237986+Ethryan@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:06:54 +0100 Subject: [PATCH 117/181] Remove a few more commands the shouldn't be in use. (#3634) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../common/commands/ClearCraftingCache.java | 39 ------------------- .../common/commands/GetWorkingDirectory.java | 37 ------------------ .../loaders/RegisterServerCommands.java | 4 -- 3 files changed, 80 deletions(-) delete mode 100644 src/main/java/bartworks/common/commands/ClearCraftingCache.java delete mode 100644 src/main/java/bartworks/common/commands/GetWorkingDirectory.java diff --git a/src/main/java/bartworks/common/commands/ClearCraftingCache.java b/src/main/java/bartworks/common/commands/ClearCraftingCache.java deleted file mode 100644 index 24f82d90d84..00000000000 --- a/src/main/java/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 bartworks.common.commands; - -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.util.ChatComponentText; - -import gregtech.mixin.hooks.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 deleted file mode 100644 index b52e067deaf..00000000000 --- a/src/main/java/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 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/loaders/RegisterServerCommands.java b/src/main/java/bartworks/common/loaders/RegisterServerCommands.java index 199dcae799c..51f2511f7a4 100644 --- a/src/main/java/bartworks/common/loaders/RegisterServerCommands.java +++ b/src/main/java/bartworks/common/loaders/RegisterServerCommands.java @@ -13,8 +13,6 @@ package bartworks.common.loaders; -import bartworks.common.commands.ClearCraftingCache; -import bartworks.common.commands.GetWorkingDirectory; import bartworks.common.commands.PrintRecipeListToFile; import bartworks.common.commands.SummonRuin; import cpw.mods.fml.common.event.FMLServerStartingEvent; @@ -24,7 +22,5 @@ public class RegisterServerCommands { public static void registerAll(FMLServerStartingEvent event) { event.registerServerCommand(new SummonRuin()); event.registerServerCommand(new PrintRecipeListToFile()); - event.registerServerCommand(new ClearCraftingCache()); - event.registerServerCommand(new GetWorkingDirectory()); } } From ec3bef4f27cbc9dc608f3af83765ed22282571a8 Mon Sep 17 00:00:00 2001 From: purebluez <81239247+purebluez@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:14:06 -0600 Subject: [PATCH 118/181] Allow I/O Hatches to be placed on all Steel Casings in the Industrial Lathe (#3637) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../machines/multi/MTEMultiLathe.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java index bc686957386..d85eead5148 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java @@ -137,28 +137,22 @@ private int getPipeTier() { STRUCTURE_PIECE_BODY, (transpose( new String[][] { { " ", "AAAAAAA", " ", " " }, - { "DBCCCCD", "DBCCCCD", "DBCCCCD", " " }, { "DBCCCCD", "DBFFFFD", "DBCCCCD", " " }, - { "DBCCCCD", "DBCCCCD", "DBCCCCD", " " }, { "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA" } }))) + { "ABCCCCA", "ABCCCCA", "ABCCCCA", " " }, { "ABCCCCA", "ABFFFFA", "ABCCCCA", " " }, + { "ABCCCCA", "ABCCCCA", "ABCCCCA", " " }, { "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" } }))) + { "ACCCCBA", "ACCCCBA", "ACCCCBA", " " }, { "ACCCCBA", "AFFFFBA", "ACCCCBA", " " }, + { "ACCCCBA", "ACCCCBA", "ACCCCBA", " " }, { "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA" } }))) .addElement( 'A', - buildHatchAdder(MTEMultiLathe.class).atLeast(Maintenance, Muffler, Energy) + 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('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( @@ -249,8 +243,8 @@ protected MultiblockTooltipBuilder createTooltip() { .addController("Front Center") .addCasingInfoMin("Solid Steel Machine Casing", 42, false) .addCasingInfoExactly("Grate Machine Casing", 9, 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) + .addInputBus("Any Solid Steel Casing", 1) + .addOutputBus("Any Solid Steel Casing", 1) .addEnergyHatch("Any Solid Steel Casing", 1) .addMaintenanceHatch("Any Solid Steel Casing", 1) .addMufflerHatch("Any Solid Steel Casing", 1) From 8dae2bd304cc6e4dc16ef484e44445bf38f6b08c Mon Sep 17 00:00:00 2001 From: GDCloud <93287602+GDCloudstrike@users.noreply.github.com> Date: Thu, 12 Dec 2024 07:24:55 +0100 Subject: [PATCH 119/181] Fix UUA time multiplier (#3641) --- src/main/java/gregtech/common/config/MachineStats.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/config/MachineStats.java b/src/main/java/gregtech/common/config/MachineStats.java index ce679052b88..59f60e66b2e 100644 --- a/src/main/java/gregtech/common/config/MachineStats.java +++ b/src/main/java/gregtech/common/config/MachineStats.java @@ -127,7 +127,7 @@ public static class MassFabricator { public int UUAPerUUM; @Config.Comment("Speed bonus delivered by the UUA.") - @Config.DefaultInt(40) + @Config.DefaultInt(4) @Config.RequiresMcRestart public int UUASpeedBonus; } From ca649c74fbec1e383a8a9a3ada142c865c71a282 Mon Sep 17 00:00:00 2001 From: chochem <40274384+chochem@users.noreply.github.com> Date: Thu, 12 Dec 2024 19:38:14 +0000 Subject: [PATCH 120/181] remove outdated compat code (#3307) Co-authored-by: Martin Robertz Co-authored-by: RecursivePineapple --- .../java/gregtech/api/recipe/RecipeMaps.java | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/src/main/java/gregtech/api/recipe/RecipeMaps.java b/src/main/java/gregtech/api/recipe/RecipeMaps.java index 262b2921ddf..31c4ce8b249 100644 --- a/src/main/java/gregtech/api/recipe/RecipeMaps.java +++ b/src/main/java/gregtech/api/recipe/RecipeMaps.java @@ -31,8 +31,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import org.apache.commons.lang3.ArrayUtils; - import com.gtnewhorizons.modularui.api.drawable.UITexture; import com.gtnewhorizons.modularui.common.widget.ProgressBar; @@ -475,16 +473,6 @@ public final class RecipeMaps { .minInputs(1, 1) .slotOverlays( (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_MOLD : null) - .recipeTransformer(r -> { - if (ArrayUtils.isNotEmpty(r.mFluidInputs)) { - if (Materials.PhasedGold.getMolten(1) - .isFluidEqual(r.mFluidInputs[0])) - r.mFluidInputs = new FluidStack[] { Materials.VibrantAlloy.getMolten(r.mFluidInputs[0].amount) }; - else if (Materials.PhasedIron.getMolten(1) - .isFluidEqual(r.mFluidInputs[0])) - r.mFluidInputs = new FluidStack[] { Materials.PulsatingIron.getMolten(r.mFluidInputs[0].amount) }; - } - }) .build(); public static final RecipeMap fluidExtractionRecipes = RecipeMapBuilder .of("gt.recipe.fluidextractor") @@ -494,16 +482,6 @@ else if (Materials.PhasedIron.getMolten(1) (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_CENTRIFUGE : null) .progressBar(GTUITextures.PROGRESSBAR_EXTRACT) - .recipeTransformer(r -> { - if (ArrayUtils.isNotEmpty(r.mFluidOutputs)) { - if (Materials.PhasedGold.getMolten(1) - .isFluidEqual(r.mFluidOutputs[0])) - r.mFluidOutputs = new FluidStack[] { Materials.VibrantAlloy.getMolten(r.mFluidOutputs[0].amount) }; - else if (Materials.PhasedIron.getMolten(1) - .isFluidEqual(r.mFluidOutputs[0])) - r.mFluidOutputs = new FluidStack[] { Materials.PulsatingIron.getMolten(r.mFluidOutputs[0].amount) }; - } - }) .build(); public static final RecipeMap packagerRecipes = RecipeMapBuilder.of("gt.recipe.packager") .maxIO(2, 1, 0, 0) From d523aa4cdcfce590b48c212a76babec56202fb36 Mon Sep 17 00:00:00 2001 From: Caedis Date: Thu, 12 Dec 2024 19:57:18 +0000 Subject: [PATCH 121/181] Separate tool crafting sound from getContainerItem (#3639) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../gregtech/api/items/MetaGeneratedTool.java | 25 ++++++++++++------- src/main/java/gregtech/common/GTProxy.java | 20 +++++++++++++++ 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/api/items/MetaGeneratedTool.java b/src/main/java/gregtech/api/items/MetaGeneratedTool.java index eaa1fe7c8d5..4c9cdf39ae8 100644 --- a/src/main/java/gregtech/api/items/MetaGeneratedTool.java +++ b/src/main/java/gregtech/api/items/MetaGeneratedTool.java @@ -43,7 +43,6 @@ 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; @@ -649,6 +648,15 @@ public final boolean doDamageToItem(ItemStack aStack, int aVanillaDamage) { return doDamage(aStack, aVanillaDamage * 100L); } + private static boolean playSound = true; + + public final boolean doDamageNoSound(ItemStack aStack, long aAmount) { + playSound = false; + boolean ret = doDamage(aStack, aAmount); + playSound = true; + return ret; + } + public final boolean doDamage(ItemStack aStack, long aAmount) { if (!isItemStackUsable(aStack)) return false; Long[] tElectric = getElectricStats(aStack); @@ -658,7 +666,7 @@ public final boolean doDamage(ItemStack aStack, long aAmount) { 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 (tStats != null && playSound) GTUtility.doSoundAtClient(tStats.getBreakingSound(), 1, 1.0F); if (aStack.stackSize > 0) aStack.stackSize--; } } @@ -672,7 +680,7 @@ public final boolean doDamage(ItemStack aStack, long aAmount) { 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 (tStats != null && playSound) GTUtility.doSoundAtClient(tStats.getBreakingSound(), 1, 1.0F); if (aStack.stackSize > 0) aStack.stackSize--; } } @@ -731,13 +739,12 @@ private ItemStack getContainerItem(ItemStack aStack, boolean playSound) { 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); + if (playSound) { + doDamage(aStack, tStats.getToolDamagePerContainerCraft()); + } else { + doDamageNoSound(aStack, tStats.getToolDamagePerContainerCraft()); } + aStack = aStack.stackSize > 0 ? aStack : null; return aStack; } diff --git a/src/main/java/gregtech/common/GTProxy.java b/src/main/java/gregtech/common/GTProxy.java index ed5ffeb4c8f..a330682d453 100644 --- a/src/main/java/gregtech/common/GTProxy.java +++ b/src/main/java/gregtech/common/GTProxy.java @@ -109,6 +109,7 @@ 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.PlayerEvent.ItemCraftedEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.network.FMLNetworkEvent; import cpw.mods.fml.common.registry.GameRegistry; @@ -2792,4 +2793,23 @@ public void onItemTooltip(ItemTooltipEvent event) { } } } + + /// Used for tool sounds in the crafting grid + @SubscribeEvent + public void onPlayerCrafting(ItemCraftedEvent event) { + for (int i = 0; i < event.craftMatrix.getSizeInventory(); i++) { + ItemStack stack = event.craftMatrix.getStackInSlot(i); + + if (stack != null && stack.getItem() instanceof MetaGeneratedTool mgt) { + if (this.mTicksUntilNextCraftSound <= 0) { + this.mTicksUntilNextCraftSound = 10; + IToolStats tStats = mgt.getToolStats(stack); + boolean playBreak = (MetaGeneratedTool.getToolDamage(stack) + + tStats.getToolDamagePerContainerCraft()) >= MetaGeneratedTool.getToolMaxDamage(stack); + String sound = playBreak ? tStats.getBreakingSound() : tStats.getCraftingSound(); + GTUtility.doSoundAtClient(sound, 1, 1.0F); + } + } + } + } } From 80a1c8ed8e2371886c360e90f82e2b7b612819a6 Mon Sep 17 00:00:00 2001 From: Connor-Colenso <52056774+Connor-Colenso@users.noreply.github.com> Date: Thu, 12 Dec 2024 20:25:09 +0000 Subject: [PATCH 122/181] Remove some GT tools (#3203) --- .../ProcessingDetravToolProspector.java | 2 +- src/main/java/gregtech/GTMod.java | 8 +- .../java/gregtech/api/enums/OrePrefixes.java | 32 -- .../java/gregtech/api/enums/TextureSet.java | 24 +- src/main/java/gregtech/common/GTProxy.java | 24 -- .../gregtech/common/items/IDMetaTool01.java | 9 - .../common/items/MetaGeneratedItem02.java | 16 +- .../common/items/MetaGeneratedTool01.java | 117 ------ .../common/items/flinttools/FlintAxe.java | 30 ++ .../common/items/flinttools/FlintHoe.java | 12 + .../common/items/flinttools/FlintPickaxe.java | 12 + .../common/items/flinttools/FlintShovel.java | 12 + .../common/items/flinttools/FlintSword.java | 30 ++ .../common/items/flinttools/FlintTools.java | 181 +++++++++ .../java/gregtech/common/tools/ToolAxe.java | 175 --------- .../java/gregtech/common/tools/ToolHoe.java | 132 ------- .../java/gregtech/common/tools/ToolKnife.java | 50 ++- .../gregtech/common/tools/ToolPickaxe.java | 139 ------- .../java/gregtech/common/tools/ToolPlow.java | 110 ------ .../java/gregtech/common/tools/ToolSense.java | 114 ------ .../gregtech/common/tools/ToolShovel.java | 127 ------- .../java/gregtech/common/tools/ToolSword.java | 128 ------- .../common/tools/ToolUniversalSpade.java | 160 -------- .../oreprocessing/ProcessingShaping.java | 41 -- .../oreprocessing/ProcessingToolHead.java | 264 ------------- .../oreprocessing/ProcessingToolOther.java | 9 +- .../loaders/postload/BookAndLootLoader.java | 28 -- .../postload/CraftingRecipeLoader.java | 6 - .../gregtech/loaders/postload/GTPostLoad.java | 53 --- .../postload/recipes/AssemblerRecipes.java | 350 ------------------ .../core/recipe/RecipesMachines.java | 4 +- .../java/gtneioreplugin/GTNEIOrePlugin.java | 11 - .../plugin/item/ItemDimensionDisplay.java | 1 - .../resources/assets/gregtech/lang/en_US.lang | 6 + .../textures/items/tools/flintAxe.png | Bin 0 -> 865 bytes .../textures/items/tools/flintHoe.png | Bin 0 -> 840 bytes .../textures/items/tools/flintPickaxe.png | Bin 0 -> 887 bytes .../textures/items/tools/flintShovel.png | Bin 0 -> 854 bytes .../textures/items/tools/flintSword.png | Bin 0 -> 1257 bytes 39 files changed, 362 insertions(+), 2055 deletions(-) create mode 100644 src/main/java/gregtech/common/items/flinttools/FlintAxe.java create mode 100644 src/main/java/gregtech/common/items/flinttools/FlintHoe.java create mode 100644 src/main/java/gregtech/common/items/flinttools/FlintPickaxe.java create mode 100644 src/main/java/gregtech/common/items/flinttools/FlintShovel.java create mode 100644 src/main/java/gregtech/common/items/flinttools/FlintSword.java create mode 100644 src/main/java/gregtech/common/items/flinttools/FlintTools.java delete mode 100644 src/main/java/gregtech/common/tools/ToolAxe.java delete mode 100644 src/main/java/gregtech/common/tools/ToolHoe.java delete mode 100644 src/main/java/gregtech/common/tools/ToolPickaxe.java delete mode 100644 src/main/java/gregtech/common/tools/ToolPlow.java delete mode 100644 src/main/java/gregtech/common/tools/ToolSense.java delete mode 100644 src/main/java/gregtech/common/tools/ToolShovel.java delete mode 100644 src/main/java/gregtech/common/tools/ToolSword.java delete mode 100644 src/main/java/gregtech/common/tools/ToolUniversalSpade.java create mode 100644 src/main/resources/assets/gregtech/textures/items/tools/flintAxe.png create mode 100644 src/main/resources/assets/gregtech/textures/items/tools/flintHoe.png create mode 100644 src/main/resources/assets/gregtech/textures/items/tools/flintPickaxe.png create mode 100644 src/main/resources/assets/gregtech/textures/items/tools/flintShovel.png create mode 100644 src/main/resources/assets/gregtech/textures/items/tools/flintSword.png diff --git a/src/main/java/detrav/items/processing/ProcessingDetravToolProspector.java b/src/main/java/detrav/items/processing/ProcessingDetravToolProspector.java index 85d31927803..1525303a68d 100644 --- a/src/main/java/detrav/items/processing/ProcessingDetravToolProspector.java +++ b/src/main/java/detrav/items/processing/ProcessingDetravToolProspector.java @@ -26,7 +26,7 @@ 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, diff --git a/src/main/java/gregtech/GTMod.java b/src/main/java/gregtech/GTMod.java index ba46592c975..a52a9c2013c 100644 --- a/src/main/java/gregtech/GTMod.java +++ b/src/main/java/gregtech/GTMod.java @@ -88,6 +88,7 @@ import gregtech.common.config.Other; import gregtech.common.config.Worldgen; import gregtech.common.covers.CoverFacadeAE; +import gregtech.common.items.flinttools.FlintTools; import gregtech.common.misc.GTCommand; import gregtech.common.misc.spaceprojects.commands.SPCommand; import gregtech.common.misc.spaceprojects.commands.SPMCommand; @@ -328,6 +329,11 @@ public void onPreLoad(FMLPreInitializationEvent aEvent) { if (FMLCommonHandler.instance() .getEffectiveSide() .isServer()) AssemblyLineServer.fillMap(aEvent); + + // Flint tool setup. + FlintTools.registerTools(); + FlintTools.registerPosteaTransformations(); + FlintTools.registerRecipes(); } @Mod.EventHandler @@ -589,8 +595,6 @@ public void onPostLoad(FMLPostInitializationEvent aEvent) { GregTechAPI.sAfterGTLoad = null; GregTechAPI.sBeforeGTPostload = null; GregTechAPI.sAfterGTPostload = null; - - GTPostLoad.createGTtoolsCreativeTab(); } @Mod.EventHandler diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java index 73a502bf4e8..ff6360bf75e 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -240,35 +240,11 @@ public enum OrePrefixes { bulletGtLarge("Large Bullets", "Large ", " Bullet", true, true, false, false, true, false, true, false, true, false, B[6] | B[8], M / 3, 64, -1), /** consisting out of 2 Ingots. */ - toolHeadSword("Sword Blades", "", " Sword Blade", true, true, false, false, false, false, true, true, false, false, - B[6], M * 2, 64, 32), - /** consisting out of 3 Ingots. */ - toolHeadPickaxe("Pickaxe Heads", "", " Pickaxe Head", true, true, false, false, false, false, true, true, false, - false, B[6], M * 3, 64, 33), - /** consisting out of 1 Ingots. */ - toolHeadShovel("Shovel Heads", "", " Shovel Head", true, true, false, false, false, false, true, true, false, false, - B[6], M * 1, 64, 34), - /** consisting out of 1 Ingots. */ - toolHeadUniversalSpade("Universal Spade Heads", "", " Universal Spade Head", true, true, false, false, false, false, - true, true, false, false, B[6], M * 1, 64, 43), - /** consisting out of 3 Ingots. */ - toolHeadAxe("Axe Heads", "", " Axe Head", true, true, false, false, false, false, true, true, false, false, B[6], - M * 3, 64, 35), - /** consisting out of 2 Ingots. */ - toolHeadHoe("Hoe Heads", "", " Hoe Head", true, true, false, false, false, false, true, true, false, false, B[6], - M * 2, 64, 36), - /** consisting out of 3 Ingots. */ - toolHeadSense("Sense Blades", "", " Sense Blade", true, true, false, false, false, false, true, true, false, false, - B[6], M * 3, 64, 44), - /** consisting out of 2 Ingots. */ toolHeadFile("File Heads", "", " File Head", true, true, false, false, false, false, true, true, false, false, B[6], M * 2, 64, 38), /** consisting out of 6 Ingots. */ toolHeadHammer("Hammer Heads", "", " Hammer Head", true, true, false, false, false, false, true, true, false, false, B[6], M * 6, 64, 37), - /** consisting out of 4 Ingots. */ - toolHeadPlow("Plow Heads", "", " Plow Head", true, true, false, false, false, false, true, true, false, false, B[6], - M * 4, 64, 45), /** consisting out of 2 Ingots. */ toolHeadSaw("Saw Blades", "", " Saw Blade", true, true, false, false, false, false, true, true, false, false, B[6], M * 2, 64, 39), @@ -1092,20 +1068,12 @@ public enum OrePrefixes { OrePrefixes.screw, OrePrefixes.ring, OrePrefixes.foil, - 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.toolHeadBuzzSaw, OrePrefixes.turbineBlade, OrePrefixes.wireFine, diff --git a/src/main/java/gregtech/api/enums/TextureSet.java b/src/main/java/gregtech/api/enums/TextureSet.java index 4a13dcc9b4f..7abb799e210 100644 --- a/src/main/java/gregtech/api/enums/TextureSet.java +++ b/src/main/java/gregtech/api/enums/TextureSet.java @@ -34,20 +34,20 @@ public class TextureSet { "/dustPure", "/crushed", "/crushedPurified", "/crushedCentrifuged", "/gem", "/nugget", "/casingSmall", "/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", "/toolHeadScrewdriver", "/toolHeadBuzzSaw", "/toolHeadSoldering", "/nanites", "/wireFine", - "/gearGtSmall", "/rotor", "/stickLong", "/springSmall", "/spring", "/arrowGtWood", "/arrowGtPlastic", - "/gemChipped", "/gemFlawed", "/gemFlawless", "/gemExquisite", "/gearGt", "/oreRaw", aTextVoidDir, aTextVoidDir, - "/oreSmall", "/ore", "/wire", "/foil", "/block1", "/block2", "/block3", "/block4", "/block5", "/block6", - "/pipeSide", "/pipeTiny", "/pipeSmall", "/pipeMedium", "/pipeLarge", "/pipeHuge", "/frameGt", "/pipeQuadruple", - "/pipeNonuple", aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, - aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, "/crateGtDust", "/crateGtIngot", "/crateGtGem", - "/crateGtPlate", "/turbineBlade", aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, + "/screw", "/ring", "/foil", "/cell", "/cellPlasma", aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, + aTextVoidDir, "/toolHeadHammer", "/toolHeadFile", "/toolHeadSaw", "/toolHeadDrill", "/toolHeadChainsaw", + "/toolHeadWrench", aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, "/toolHeadScrewdriver", + "/toolHeadBuzzSaw", "/toolHeadSoldering", "/nanites", "/wireFine", "/gearGtSmall", "/rotor", "/stickLong", + "/springSmall", "/spring", "/arrowGtWood", "/arrowGtPlastic", "/gemChipped", "/gemFlawed", "/gemFlawless", + "/gemExquisite", "/gearGt", "/oreRaw", aTextVoidDir, aTextVoidDir, "/oreSmall", "/ore", "/wire", "/foil", + "/block1", "/block2", "/block3", "/block4", "/block5", "/block6", "/pipeSide", "/pipeTiny", "/pipeSmall", + "/pipeMedium", "/pipeLarge", "/pipeHuge", "/frameGt", "/pipeQuadruple", "/pipeNonuple", aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, + aTextVoidDir, "/crateGtDust", "/crateGtIngot", "/crateGtGem", "/crateGtPlate", "/turbineBlade", aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, - aTextVoidDir, aTextVoidDir, aTextVoidDir, "/plateSuperdense", "/handleMallet", "/toolHeadMallet", }; + aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, + aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, aTextVoidDir, + "/plateSuperdense", "/handleMallet", "/toolHeadMallet", }; public boolean is_custom = false; diff --git a/src/main/java/gregtech/common/GTProxy.java b/src/main/java/gregtech/common/GTProxy.java index a330682d453..2bedabd299c 100644 --- a/src/main/java/gregtech/common/GTProxy.java +++ b/src/main/java/gregtech/common/GTProxy.java @@ -78,7 +78,6 @@ 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; @@ -158,9 +157,7 @@ import gregtech.api.util.GTUtility; import gregtech.api.util.WorldSpawnedEventBuilder; import gregtech.common.config.OPStuff; -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; @@ -2236,27 +2233,6 @@ public void onPlayerTickEventServer(TickEvent.PlayerTickEvent aEvent) { 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) { diff --git a/src/main/java/gregtech/common/items/IDMetaTool01.java b/src/main/java/gregtech/common/items/IDMetaTool01.java index 684636100bd..9dbd41dccd6 100644 --- a/src/main/java/gregtech/common/items/IDMetaTool01.java +++ b/src/main/java/gregtech/common/items/IDMetaTool01.java @@ -3,11 +3,6 @@ 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), @@ -24,10 +19,6 @@ public enum IDMetaTool01 { UNIVERSALSPADE(32), KNIFE(34), BUTCHERYKNIFE(36), - @Deprecated - SICKLE(38), - SENSE(40), - PLOW(42), PLUNGER(44), ROLLING_PIN(46), DRILL_LV(100), diff --git a/src/main/java/gregtech/common/items/MetaGeneratedItem02.java b/src/main/java/gregtech/common/items/MetaGeneratedItem02.java index d0e66fe9aaa..9f097741f67 100644 --- a/src/main/java/gregtech/common/items/MetaGeneratedItem02.java +++ b/src/main/java/gregtech/common/items/MetaGeneratedItem02.java @@ -261,20 +261,20 @@ public class MetaGeneratedItem02 extends MetaGeneratedItemX32 { public MetaGeneratedItem02() { super( "metaitem.02", - OrePrefixes.toolHeadSword, - OrePrefixes.toolHeadPickaxe, - OrePrefixes.toolHeadShovel, - OrePrefixes.toolHeadAxe, - OrePrefixes.toolHeadHoe, + OrePrefixes.___placeholder___, + OrePrefixes.___placeholder___, + OrePrefixes.___placeholder___, + OrePrefixes.___placeholder___, + OrePrefixes.___placeholder___, OrePrefixes.toolHeadHammer, OrePrefixes.toolHeadFile, OrePrefixes.toolHeadSaw, OrePrefixes.toolHeadDrill, OrePrefixes.toolHeadChainsaw, OrePrefixes.toolHeadWrench, - OrePrefixes.toolHeadUniversalSpade, - OrePrefixes.toolHeadSense, - OrePrefixes.toolHeadPlow, + OrePrefixes.___placeholder___, + OrePrefixes.___placeholder___, + OrePrefixes.___placeholder___, OrePrefixes.___placeholder___, OrePrefixes.toolHeadBuzzSaw, OrePrefixes.turbineBlade, diff --git a/src/main/java/gregtech/common/items/MetaGeneratedTool01.java b/src/main/java/gregtech/common/items/MetaGeneratedTool01.java index 11c3fa104ef..555c180ee56 100644 --- a/src/main/java/gregtech/common/items/MetaGeneratedTool01.java +++ b/src/main/java/gregtech/common/items/MetaGeneratedTool01.java @@ -1,6 +1,5 @@ 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; @@ -15,12 +14,9 @@ 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; @@ -36,18 +32,14 @@ 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; @@ -66,7 +58,6 @@ 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; @@ -79,28 +70,21 @@ 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; @@ -121,48 +105,6 @@ public class MetaGeneratedTool01 extends MetaGeneratedTool { 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", @@ -273,21 +215,6 @@ public MetaGeneratedTool01() { 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", @@ -308,25 +235,6 @@ public MetaGeneratedTool01() { 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", @@ -705,31 +613,6 @@ private void initCraftingShapedRecipes() { 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, diff --git a/src/main/java/gregtech/common/items/flinttools/FlintAxe.java b/src/main/java/gregtech/common/items/flinttools/FlintAxe.java new file mode 100644 index 00000000000..207165ef60c --- /dev/null +++ b/src/main/java/gregtech/common/items/flinttools/FlintAxe.java @@ -0,0 +1,30 @@ +package gregtech.common.items.flinttools; + +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.item.Item; +import net.minecraft.item.ItemAxe; +import net.minecraft.item.ItemStack; + +public class FlintAxe extends ItemAxe { + + public FlintAxe() { + super(FlintTools.FLINT_MATERIAL); + this.setUnlocalizedName("flintAxe"); + this.setTextureName("gregtech:tools/flintAxe"); + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List subItems) { + // Create the default sword item + ItemStack flintTool = new ItemStack(this); + + // Enchant the sword with Fire Aspect I + flintTool.addEnchantment(Enchantment.fireAspect, 1); + + // Add the enchanted sword to the creative tab and NEI + subItems.add(flintTool); + } +} diff --git a/src/main/java/gregtech/common/items/flinttools/FlintHoe.java b/src/main/java/gregtech/common/items/flinttools/FlintHoe.java new file mode 100644 index 00000000000..7e0e1ddc1dd --- /dev/null +++ b/src/main/java/gregtech/common/items/flinttools/FlintHoe.java @@ -0,0 +1,12 @@ +package gregtech.common.items.flinttools; + +import net.minecraft.item.ItemHoe; + +public class FlintHoe extends ItemHoe { + + public FlintHoe() { + super(FlintTools.FLINT_MATERIAL); + this.setUnlocalizedName("flintHoe"); + this.setTextureName("gregtech:tools/flintHoe"); + } +} diff --git a/src/main/java/gregtech/common/items/flinttools/FlintPickaxe.java b/src/main/java/gregtech/common/items/flinttools/FlintPickaxe.java new file mode 100644 index 00000000000..eb090652611 --- /dev/null +++ b/src/main/java/gregtech/common/items/flinttools/FlintPickaxe.java @@ -0,0 +1,12 @@ +package gregtech.common.items.flinttools; + +import net.minecraft.item.ItemPickaxe; + +public class FlintPickaxe extends ItemPickaxe { + + public FlintPickaxe() { + super(FlintTools.FLINT_MATERIAL); + this.setUnlocalizedName("flintPickaxe"); + this.setTextureName("gregtech:tools/flintPickaxe"); + } +} diff --git a/src/main/java/gregtech/common/items/flinttools/FlintShovel.java b/src/main/java/gregtech/common/items/flinttools/FlintShovel.java new file mode 100644 index 00000000000..708b055f017 --- /dev/null +++ b/src/main/java/gregtech/common/items/flinttools/FlintShovel.java @@ -0,0 +1,12 @@ +package gregtech.common.items.flinttools; + +import net.minecraft.item.ItemSpade; + +public class FlintShovel extends ItemSpade { + + public FlintShovel() { + super(FlintTools.FLINT_MATERIAL); + this.setUnlocalizedName("flintShovel"); + this.setTextureName("gregtech:tools/flintShovel"); + } +} diff --git a/src/main/java/gregtech/common/items/flinttools/FlintSword.java b/src/main/java/gregtech/common/items/flinttools/FlintSword.java new file mode 100644 index 00000000000..0dc482cf556 --- /dev/null +++ b/src/main/java/gregtech/common/items/flinttools/FlintSword.java @@ -0,0 +1,30 @@ +package gregtech.common.items.flinttools; + +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; + +public class FlintSword extends ItemSword { + + public FlintSword() { + super(FlintTools.FLINT_MATERIAL); + this.setUnlocalizedName("flintSword"); + this.setTextureName("gregtech:tools/flintSword"); + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List subItems) { + // Create the default sword item + ItemStack flintTool = new ItemStack(this); + + // Enchant the sword with Fire Aspect I + flintTool.addEnchantment(Enchantment.fireAspect, 1); + + // Add the enchanted sword to the creative tab and NEI + subItems.add(flintTool); + } +} diff --git a/src/main/java/gregtech/common/items/flinttools/FlintTools.java b/src/main/java/gregtech/common/items/flinttools/FlintTools.java new file mode 100644 index 00000000000..f883ef05a84 --- /dev/null +++ b/src/main/java/gregtech/common/items/flinttools/FlintTools.java @@ -0,0 +1,181 @@ +package gregtech.common.items.flinttools; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.oredict.ShapedOreRecipe; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizons.postea.api.ItemStackReplacementManager; + +import cpw.mods.fml.common.registry.GameRegistry; + +public class FlintTools { + + public static Item.ToolMaterial FLINT_MATERIAL = EnumHelper.addToolMaterial("FLINT", 1, 128, 4.0F, 1.0F, 5); + + public static Item AXE; + public static Item SWORD; + public static Item PICKAXE; + public static Item SHOVEL; + public static Item HOE; + + public static void registerTools() { + // Create items. + AXE = new FlintAxe(); + SWORD = new FlintSword(); + PICKAXE = new FlintPickaxe(); + SHOVEL = new FlintShovel(); + HOE = new FlintHoe(); + + // Register them with minecraft. + GameRegistry.registerItem(AXE, "flintAxe"); + GameRegistry.registerItem(SWORD, "flintSword"); + GameRegistry.registerItem(PICKAXE, "flintPickaxe"); + GameRegistry.registerItem(SHOVEL, "flintShovel"); + GameRegistry.registerItem(HOE, "flintHoe"); + } + + public static void registerRecipes() { + // Flint Sword Recipe, with + GameRegistry.addRecipe( + new EnchantedRecipe( + new ItemStack(FlintTools.SWORD), + " F ", + " F ", + " S ", + 'F', + Items.flint, + 'S', + Items.stick)); + + // Flint Pickaxe Recipe + GameRegistry + .addRecipe(new ItemStack(FlintTools.PICKAXE), "FFF", " S ", " S ", 'F', Items.flint, 'S', Items.stick); + + // Flint Axe Recipe with Fire Aspect I + GameRegistry.addRecipe( + new EnchantedRecipe( + new ItemStack(FlintTools.AXE), + "FF ", + "FS ", + " S ", + 'F', + Items.flint, + 'S', + Items.stick)); + + GameRegistry.addRecipe( + new EnchantedRecipe( + new ItemStack(FlintTools.AXE), + " FF", + " SF", + " S ", + 'F', + Items.flint, + 'S', + Items.stick)); + + // Flint Shovel Recipe + GameRegistry + .addRecipe(new ItemStack(FlintTools.SHOVEL), " F ", " S ", " S ", 'F', Items.flint, 'S', Items.stick); + + // Flint Hoe Recipe + GameRegistry.addRecipe(new ItemStack(FlintTools.HOE), "FF ", " S ", " S ", 'F', Items.flint, 'S', Items.stick); + + GameRegistry.addRecipe(new ItemStack(FlintTools.HOE), " FF", " S ", " S ", 'F', Items.flint, 'S', Items.stick); + } + + public static NBTTagCompound transformFlintTool(NBTTagCompound tagCompound) { + int oldId = tagCompound.getShort("Damage"); + int id; + boolean fireAspect = false; + + switch (oldId) { + case 0: + id = Item.getIdFromItem(FlintTools.SWORD); + fireAspect = true; + break; + case 2: + id = Item.getIdFromItem(FlintTools.PICKAXE); + break; + case 4: + id = Item.getIdFromItem(FlintTools.SHOVEL); + break; + case 6: + id = Item.getIdFromItem(FlintTools.AXE); + fireAspect = true; + break; + case 8: + id = Item.getIdFromItem(FlintTools.HOE); + break; + case 40: // Sense tool + id = 0; + break; + default: + return tagCompound; // No transform needed. + } + + tagCompound.setShort("id", (short) id); + tagCompound.setShort("Damage", (short) 0); + tagCompound.setTag("tag", new NBTTagCompound()); // Erase old GT data. + + // Apply Fire Aspect enchantment if fireAspect is true + if (fireAspect) { + NBTTagCompound enchantTag = getEnchantedTagCompound(); + + // Attach the new tag containing the enchantments to the tool + tagCompound.setTag("tag", enchantTag); + } + + return tagCompound; + } + + @NotNull + private static NBTTagCompound getEnchantedTagCompound() { + NBTTagCompound enchantTag = new NBTTagCompound(); + NBTTagList enchantments = new NBTTagList(); + + // Add Fire Aspect enchantment + NBTTagCompound fireAspectTag = new NBTTagCompound(); + fireAspectTag.setShort("id", (short) Enchantment.fireAspect.effectId); // Fire Aspect ID + fireAspectTag.setShort("lvl", (short) 1); // Level 1 + enchantments.appendTag(fireAspectTag); + + // Attach enchantments list to the "tag" NBTTagCompound + enchantTag.setTag("ench", enchantments); + return enchantTag; + } + + public static void registerPosteaTransformations() { + ItemStackReplacementManager.addItemReplacement("gregtech:gt.metatool.01", FlintTools::transformFlintTool); + } + + private static class EnchantedRecipe extends ShapedOreRecipe { + + private final ItemStack result; + + public EnchantedRecipe(ItemStack result, Object... recipe) { + super(result, recipe); + this.result = result; + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting inventory) { + ItemStack craftedItem = result.copy(); + craftedItem.addEnchantment(Enchantment.fireAspect, 1); // Add Fire Aspect I + return craftedItem; + } + + @Override + public ItemStack getRecipeOutput() { + return result; + } + } +} diff --git a/src/main/java/gregtech/common/tools/ToolAxe.java b/src/main/java/gregtech/common/tools/ToolAxe.java deleted file mode 100644 index 03b761227c7..00000000000 --- a/src/main/java/gregtech/common/tools/ToolAxe.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.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/ToolHoe.java b/src/main/java/gregtech/common/tools/ToolHoe.java deleted file mode 100644 index 8c68d41b44c..00000000000 --- a/src/main/java/gregtech/common/tools/ToolHoe.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.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/ToolKnife.java b/src/main/java/gregtech/common/tools/ToolKnife.java index 908a9daaadc..c5b8273d254 100644 --- a/src/main/java/gregtech/common/tools/ToolKnife.java +++ b/src/main/java/gregtech/common/tools/ToolKnife.java @@ -1,5 +1,7 @@ package gregtech.common.tools; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; @@ -9,8 +11,10 @@ import gregtech.api.enums.Textures; import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; -public class ToolKnife extends ToolSword { +public class ToolKnife extends GTTool { @Override public int getToolDamagePerBlockBreak() { @@ -52,11 +56,55 @@ public float getMaxDurabilityMultiplier() { return 1.0F; } + @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; // Copied from ToolSword + } + @Override public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { return aIsToolHead ? Textures.ItemIcons.KNIFE : 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( diff --git a/src/main/java/gregtech/common/tools/ToolPickaxe.java b/src/main/java/gregtech/common/tools/ToolPickaxe.java deleted file mode 100644 index 91be7dae29f..00000000000 --- a/src/main/java/gregtech/common/tools/ToolPickaxe.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.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 deleted file mode 100644 index e0f25fa2f13..00000000000 --- a/src/main/java/gregtech/common/tools/ToolPlow.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.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/ToolSense.java b/src/main/java/gregtech/common/tools/ToolSense.java deleted file mode 100644 index 55a3882db54..00000000000 --- a/src/main/java/gregtech/common/tools/ToolSense.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.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 deleted file mode 100644 index d4676efeedb..00000000000 --- a/src/main/java/gregtech/common/tools/ToolShovel.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.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/ToolSword.java b/src/main/java/gregtech/common/tools/ToolSword.java deleted file mode 100644 index 03c76f92c6f..00000000000 --- a/src/main/java/gregtech/common/tools/ToolSword.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.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/ToolUniversalSpade.java b/src/main/java/gregtech/common/tools/ToolUniversalSpade.java deleted file mode 100644 index 9333e1f19ca..00000000000 --- a/src/main/java/gregtech/common/tools/ToolUniversalSpade.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.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/loaders/oreprocessing/ProcessingShaping.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java index 0f4b3d28b65..9a42178b1c4 100644 --- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java +++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java @@ -327,47 +327,6 @@ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDic } } - 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 (GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial.mSmeltInto, 1L) != null) { - GTValues.RA.stdBuilder() - .itemInputs(GTUtility.copyAmount(3, aStack), ItemList.Shape_Extruder_Pickaxe.get(0L)) - .itemOutputs( - GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial.mSmeltInto, tAmount)) - .duration(((int) Math.max(aMaterialMass * 3L * tAmount, tAmount)) * TICKS) - .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier)) - .addTo(extruderRecipes); - } - 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 (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 (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 (GTOreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial.mSmeltInto, 1L) != null) { GTValues.RA.stdBuilder() .itemInputs(GTUtility.copyAmount(6, aStack), ItemList.Shape_Extruder_Hammer.get(0L)) diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHead.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHead.java index 888c6221af0..f03cccaddb4 100644 --- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHead.java +++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHead.java @@ -16,7 +16,6 @@ import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.SubTag; import gregtech.api.enums.TierEU; -import gregtech.api.enums.ToolDictNames; import gregtech.api.util.GTModHandler; import gregtech.api.util.GTOreDictUnificator; import gregtech.api.util.GTUtility; @@ -28,19 +27,11 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg // HEAD??? generator public ProcessingToolHead() { - OrePrefixes.toolHeadAxe.add(this); OrePrefixes.toolHeadBuzzSaw.add(this); OrePrefixes.toolHeadChainsaw.add(this); OrePrefixes.toolHeadDrill.add(this); OrePrefixes.toolHeadFile.add(this); - OrePrefixes.toolHeadHoe.add(this); - OrePrefixes.toolHeadPickaxe.add(this); - OrePrefixes.toolHeadPlow.add(this); OrePrefixes.toolHeadSaw.add(this); - OrePrefixes.toolHeadSense.add(this); - OrePrefixes.toolHeadShovel.add(this); - OrePrefixes.toolHeadSword.add(this); - OrePrefixes.toolHeadUniversalSpade.add(this); OrePrefixes.toolHeadWrench.add(this); OrePrefixes.toolHeadHammer.add(this); OrePrefixes.turbineBlade.add(this); @@ -57,34 +48,6 @@ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDic boolean aProducesSoftMallet = aMaterial.contains(SubTag.BOUNCY) || aMaterial.contains(SubTag.WOOD) || aMaterial.contains(SubTag.SOFT); switch (aPrefix) { - case toolHeadAxe -> { - GTModHandler.addShapelessCraftingRecipe( - MetaGeneratedTool01.INSTANCE - .getToolWithStats(IDMetaTool01.AXE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null), - new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) }); - if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) { - GTValues.RA.stdBuilder() - .itemInputs( - GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L), - GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial, 1L), - GTUtility.getIntegratedCircuit(2)) - .itemOutputs( - MetaGeneratedTool01.INSTANCE - .getToolWithStats(IDMetaTool01.AXE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - } - 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) GTModHandler.addCraftingRecipe( - GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial, 1L), - GTProxy.tBits, - new Object[] { "GG ", "G ", "f ", 'G', OrePrefixes.gem.get(aMaterial) }); - } case toolHeadBuzzSaw -> { GTModHandler.addCraftingRecipe( MetaGeneratedTool01.INSTANCE.getToolWithStats( @@ -555,105 +518,6 @@ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDic .addTo(assemblerRecipes); } } - case toolHeadHoe -> { - if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) { - GTModHandler.addShapelessCraftingRecipe( - MetaGeneratedTool01.INSTANCE - .getToolWithStats(IDMetaTool01.HOE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null), - new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) }); - } - if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) { - GTValues.RA.stdBuilder() - .itemInputs( - GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L), - GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial, 1L), - GTUtility.getIntegratedCircuit(16)) - .itemOutputs( - 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) 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) 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) { - - GTModHandler.addShapelessCraftingRecipe( - MetaGeneratedTool01.INSTANCE - .getToolWithStats(IDMetaTool01.PICKAXE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null), - new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) }); - - 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) GTModHandler.addCraftingRecipe( - GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial, 1L), - GTProxy.tBits, - new Object[] { "GGG", "f ", 'G', OrePrefixes.gem.get(aMaterial) }); - } - if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) { - GTValues.RA.stdBuilder() - .itemInputs( - GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L), - GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial, 1L), - GTUtility.getIntegratedCircuit(5)) - .itemOutputs( - MetaGeneratedTool01.INSTANCE.getToolWithStats( - IDMetaTool01.PICKAXE.ID, - 1, - aMaterial, - aMaterial.mHandleMaterial, - null)) - .duration(10 * SECONDS) - .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV)) - .addTo(assemblerRecipes); - } - } - case toolHeadPlow -> { - if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) { - - GTModHandler.addShapelessCraftingRecipe( - MetaGeneratedTool01.INSTANCE - .getToolWithStats(IDMetaTool01.PLOW.ID, 1, aMaterial, aMaterial.mHandleMaterial, null), - new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) }); - - if (aSpecialRecipeReq1) GTModHandler.addCraftingRecipe( - GTOreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L), - GTProxy.tBits, - new Object[] { "PP", "PP", "hf", 'P', OrePrefixes.plate.get(aMaterial) }); - - if (!aNoWorking) GTModHandler.addCraftingRecipe( - GTOreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L), - GTProxy.tBits, - new Object[] { "GG", "GG", " f", 'G', OrePrefixes.gem.get(aMaterial) }); - } - if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) { - GTValues.RA.stdBuilder() - .itemInputs( - GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L), - GTOreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L), - GTUtility.getIntegratedCircuit(6)) - .itemOutputs( - MetaGeneratedTool01.INSTANCE - .getToolWithStats(IDMetaTool01.PLOW.ID, 1, aMaterial, aMaterial.mHandleMaterial, null)) - .duration(10 * SECONDS) - .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV)) - .addTo(assemblerRecipes); - } - } case toolHeadSaw -> { if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) { @@ -687,134 +551,6 @@ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDic .addTo(assemblerRecipes); } } - case toolHeadSense -> { - if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) { - - GTModHandler.addShapelessCraftingRecipe( - MetaGeneratedTool01.INSTANCE - .getToolWithStats(IDMetaTool01.SENSE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null), - new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) }); - - 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) GTModHandler.addCraftingRecipe( - GTOreDictUnificator.get(OrePrefixes.toolHeadSense, aMaterial, 1L), - GTProxy.tBits, - new Object[] { "GGG", " f ", " ", 'G', OrePrefixes.gem.get(aMaterial) }); - } - if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) { - GTValues.RA.stdBuilder() - .itemInputs( - GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L), - GTOreDictUnificator.get(OrePrefixes.toolHeadSense, aMaterial, 1L), - GTUtility.getIntegratedCircuit(8)) - .itemOutputs( - 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 -> { - GTModHandler.addShapelessCraftingRecipe( - MetaGeneratedTool01.INSTANCE - .getToolWithStats(IDMetaTool01.SHOVEL.ID, 1, aMaterial, aMaterial.mHandleMaterial, null), - new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) }); - if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) { - GTValues.RA.stdBuilder() - .itemInputs( - GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L), - GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial, 1L), - GTUtility.getIntegratedCircuit(9)) - .itemOutputs( - MetaGeneratedTool01.INSTANCE.getToolWithStats( - IDMetaTool01.SHOVEL.ID, - 1, - aMaterial, - aMaterial.mHandleMaterial, - null)) - .duration(10 * SECONDS) - .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV)) - .addTo(assemblerRecipes); - } - 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) 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) { - - GTModHandler.addShapelessCraftingRecipe( - MetaGeneratedTool01.INSTANCE - .getToolWithStats(IDMetaTool01.SWORD.ID, 1, aMaterial, aMaterial.mHandleMaterial, null), - new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) }); - - 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) GTModHandler.addCraftingRecipe( - GTOreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial, 1L), - GTProxy.tBits, - new Object[] { " G", "fG", 'G', OrePrefixes.gem.get(aMaterial) }); - } - if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) { - GTValues.RA.stdBuilder() - .itemInputs( - GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L), - GTOreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial, 1L), - GTUtility.getIntegratedCircuit(10)) - .itemOutputs( - 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 -> { - 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 (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null - && GTOreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L) != null) { - GTValues.RA.stdBuilder() - .itemInputs( - GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L), - GTOreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L), - GTOreDictUnificator.get(OrePrefixes.toolHeadUniversalSpade, aMaterial, 1L), - GTUtility.getIntegratedCircuit(11)) - .itemOutputs( - MetaGeneratedTool01.INSTANCE.getToolWithStats( - IDMetaTool01.UNIVERSALSPADE.ID, - 1, - aMaterial, - aMaterial.mHandleMaterial, - null)) - .duration(10 * SECONDS) - .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV)) - .addTo(assemblerRecipes); - } - if (aSpecialRecipeReq2) GTModHandler.addCraftingRecipe( - GTOreDictUnificator.get(OrePrefixes.toolHeadUniversalSpade, aMaterial, 1L), - GTProxy.tBits, - new Object[] { "fX", 'X', OrePrefixes.toolHeadShovel.get(aMaterial) }); - } case toolHeadWrench -> { GTModHandler.addCraftingRecipe( MetaGeneratedTool01.INSTANCE.getToolWithStats( diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolOther.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolOther.java index 04aac52d4f2..252ce171604 100644 --- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolOther.java +++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolOther.java @@ -118,14 +118,7 @@ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDic 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) }); - 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', - OrePrefixes.toolHeadSword.get(aMaterial), 'G', Dyes.dyeBlue }); + } } } diff --git a/src/main/java/gregtech/loaders/postload/BookAndLootLoader.java b/src/main/java/gregtech/loaders/postload/BookAndLootLoader.java index e227d7f21a2..ddeca38d976 100644 --- a/src/main/java/gregtech/loaders/postload/BookAndLootLoader.java +++ b/src/main/java/gregtech/loaders/postload/BookAndLootLoader.java @@ -259,20 +259,6 @@ public void run() { 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)); @@ -319,19 +305,5 @@ public void run() { 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 index fb7871992fd..f54d15bcd79 100644 --- a/src/main/java/gregtech/loaders/postload/CraftingRecipeLoader.java +++ b/src/main/java/gregtech/loaders/postload/CraftingRecipeLoader.java @@ -1838,12 +1838,6 @@ public void run() { 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( diff --git a/src/main/java/gregtech/loaders/postload/GTPostLoad.java b/src/main/java/gregtech/loaders/postload/GTPostLoad.java index 35c4e2d874b..d30ed643f29 100644 --- a/src/main/java/gregtech/loaders/postload/GTPostLoad.java +++ b/src/main/java/gregtech/loaders/postload/GTPostLoad.java @@ -15,16 +15,13 @@ import static gregtech.api.util.GTRecipeBuilder.TICKS; 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; @@ -33,8 +30,6 @@ 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; @@ -52,7 +47,6 @@ 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; @@ -439,53 +433,6 @@ public static void doActualRegistration(Materials m) { 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( diff --git a/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java index 02a9442f323..04616669f23 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java @@ -2939,356 +2939,6 @@ public void run() { .eut(20) .addTo(assemblerRecipes); - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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); - - GTValues.RA.stdBuilder() - .itemInputs( - 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) - .addTo(assemblerRecipes); - // fuel rod assembler recipes GTValues.RA.stdBuilder() diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java b/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java index 62fc892d094..ee757fc03ef 100644 --- a/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java @@ -273,9 +273,9 @@ private static void gt4FarmManager() { CI.getRobotArm(aTier, 1), CI.getSensor(aTier, 1), CI.getRobotArm(aTier, 1), - ItemUtils.getOrePrefixStack(OrePrefixes.toolHeadSense, CI.tieredMaterials[aTier], 1), + ItemUtils.getOrePrefixStack(OrePrefixes.plate, CI.tieredMaterials[aTier], 1), CI.getTieredMachineHull(aTier, 1), - ItemUtils.getOrePrefixStack(OrePrefixes.toolHeadSense, CI.tieredMaterials[aTier], 1), + ItemUtils.getOrePrefixStack(OrePrefixes.plate, CI.tieredMaterials[aTier], 1), CI.getTieredCircuitOreDictName(aTier), aInputHatches[i].get(1), CI.getTieredCircuitOreDictName(aTier), diff --git a/src/main/java/gtneioreplugin/GTNEIOrePlugin.java b/src/main/java/gtneioreplugin/GTNEIOrePlugin.java index 5c970fd032a..a5db5901692 100644 --- a/src/main/java/gtneioreplugin/GTNEIOrePlugin.java +++ b/src/main/java/gtneioreplugin/GTNEIOrePlugin.java @@ -2,8 +2,6 @@ import java.io.File; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; import net.minecraftforge.common.MinecraftForge; import org.apache.logging.log4j.LogManager; @@ -17,7 +15,6 @@ 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.NEIPluginConfig; @@ -47,14 +44,6 @@ public class GTNEIOrePlugin { 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; diff --git a/src/main/java/gtneioreplugin/plugin/item/ItemDimensionDisplay.java b/src/main/java/gtneioreplugin/plugin/item/ItemDimensionDisplay.java index 39fdacda99d..9c7c7b06fe6 100644 --- a/src/main/java/gtneioreplugin/plugin/item/ItemDimensionDisplay.java +++ b/src/main/java/gtneioreplugin/plugin/item/ItemDimensionDisplay.java @@ -17,7 +17,6 @@ public class ItemDimensionDisplay extends ItemBlock { public ItemDimensionDisplay(Block block) { super(block); - setCreativeTab(GTNEIOrePlugin.creativeTab); if (FMLCommonHandler.instance() .getEffectiveSide() == Side.CLIENT) { diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang index 78ea8d1d537..850e013a73c 100644 --- a/src/main/resources/assets/gregtech/lang/en_US.lang +++ b/src/main/resources/assets/gregtech/lang/en_US.lang @@ -1630,6 +1630,12 @@ gt.solar.system.mercury=Mercury gt.solar.system.titan=Titan gt.solar.system.phobos=Phobos +item.flintSword.name=Flint Sword +item.flintAxe.name=Flint Axe +item.flintShovel.name=Flint Shovel +item.flintPickaxe.name=Flint Pickaxe +item.flintHoe.name=Flint Hoe + gt.multiBlock.controller.cokeOven=Coke Oven gt.locker.waila_armor_slot_none=Slot %s: §7None diff --git a/src/main/resources/assets/gregtech/textures/items/tools/flintAxe.png b/src/main/resources/assets/gregtech/textures/items/tools/flintAxe.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1a8c8334b2c0048848083e97b18badf7a983da GIT binary patch literal 865 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|6p}rHd>I(3 z)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N#&bHNrE^*Ox&H$mU>RWfWpy z2C^7|kbzN(ffdYVVDMs;hO>hhHK1yk7#P|!8CaldqJT6AcmOd_HH=czRX7;#aZAHS8?tx|+mh4$+(B?z>s|E>Eak-A())7fPKQmi9h)d-FTC9P_09U?UIIu28Zyk|4&W|yGgLS zJT_%m_VfDscpe`gpA)|xihGFfi&T>A6; zynI`=e5=H}{S{0?ZOkJ754bMmi8#=h!vDmnew zj=lFkFzcf3!R&_RGhfuRJ1e#^i{CT4Q}Jc0V2bgkw+e>~su-6@rWpGe?>cK>7slLi zmB*N+l`Zp~Px$}!ipP6}Vl}!ZSZL@iSbf%`uff1kvnL`wIb)d%Fn#Svb5aaQnG8xh Mp00i_>zopr0659~vH$=8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/tools/flintHoe.png b/src/main/resources/assets/gregtech/textures/items/tools/flintHoe.png new file mode 100644 index 0000000000000000000000000000000000000000..ed788a127f6fe182c193d297b8c8b5773c4d966e GIT binary patch literal 840 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|6p}rHd>I(3 z)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N#&bHNrE^*Ox&H$mU>RWfWpy z2C^7|kbzN(ffdYVVDMs;hO>hhHK1yk7#P|!8CaldqJT6AcmOd_HH=czRX7;#aZAHS8?tx|+mh4$+(B?z>qxS>Eak-A())7K)~S9WqoDk&+=;jpPUq4leLkn$)wSwyQ9P4&!3;d zIme!#pD(#VvgtCz3`K=mvuDq4?Ck7hOzBv6#h8@clzT7B5Xu#W4*2NU7H{~v7TxS=qi(ct}qQpPh36VfJZ{$F2v zq+yMuTK{ym%y&NF|JN%X=j|6v;jP%quvzlSbLswlk3ze1G-mjoNSnd7X4$2qX>0Tr ptUhZXe&8jKz2%%h)^HbYHipKxX>;;i?LaA= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/tools/flintPickaxe.png b/src/main/resources/assets/gregtech/textures/items/tools/flintPickaxe.png new file mode 100644 index 0000000000000000000000000000000000000000..d26be7b33fef0bfc124d66b8cd4b9ad5ca3321ce GIT binary patch literal 887 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|6p}rHd>I(3 z)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N#&bHNrE^*Ox&H$mU>RWfWpy z2C^7|kbzN(ffdYVVDMs;hO>hhHK1yk7#P|!8CaldqJT6AcmOd_HH=czRX7;#aZAHS8?tx|+mh4$+(B?z>xgy>Eak-A()&Xk#V5oG^3G`(f^B2=h;*?EtGR+Si-p^G9X~W!}Ig) zdH(=abMJ9%D0Grq`*C+gXpW-~96Xd%lP`2M32i!-i%> z=EHy9`aig}VHbm5_mK}K!hioi*vxUmRo<>9q2lK!)d+pzNm6rsCZtW+{J*}IB}`dG z<%oiw9$%TFBeTOSS)Nu2zL<*B1&=R=A6p;4|IlI96sb7o1heKpJePXTc3SW{Y?q8Q z)^JN;IM~$5km+Q$c|$_4O$VpK*|{%Y{WpEGBXE)6$(jm=rXvA=ST{?GC7hVWv8i*T mI(3 z)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N#&bHNrE^*Ox&H$mU>RWfWpy z2C^7|kbzN(ffdYVVDMs;hO>hhHK1yk7#P|!8CaldqJT6AcmOd_HH=czRX7;#aZAHS8?tx|+mh4$+(B?z>vJ<>Eak-A()&Xk#WGIi#a7F<=^2e_LZMl)=bY}c9_M=%6jlu{oh|l zKRi6l-Zou7-e}VSpCj&vP5%G<-2U+X{(7FAoScHEJ_TZYY`fCb)IxMu*yyx1{Lwo6 zlPSm8!;l z(W4JHG6Z)Ti#g1Cs%jz07gKS%;PJ)qIj<7f7G8K^w%B7)p@EOu)wCUq3iVoE1%?ew zIsd+?yI4!haX-mm`^h#>X#4ys-XdN%jm4ESf5k9-`5U9aG-L7(P=fJv^>bP0l+XkK D10wa) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/tools/flintSword.png b/src/main/resources/assets/gregtech/textures/items/tools/flintSword.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c538a4fe76940c0bb3787c8e221fc4cfcd5a12 GIT binary patch literal 1257 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBDAAG{;hE;^%b*2hb1<+n z3NbJPS&Tr)z$nE4G7ZRL@M4sPvx68lplX;H7}_%#SfFa6fHVkr05M1pgl1mAh%j*h z6I`{x0%imor0saV%ts)_S>O>_%)r1c48n{Iv*t)JFfg6S42dX-@b$4u&d=3LOvz75 z)vL%Y0O?||sjvbvb5lza6)JLb@`|l0Y?Z(&tblBgu)dN4SV>8?tx|+H?jfSfFg)+ zA4CH}eP~{0i5*M}nlQSq2!uSs8e~Cq4gN)$slb2)yUP&jEMzex^&sC_1!PvF=0vz; z=BDNqgZyG>W}}Z)0$rnXeolT-a6w{nsvXcCuofgCbk$&MB5_%RBmvcEqYsK}q_~G9 zEU+jrW!Z7r=)+T~9hY78;(5S?``gpSF~mY}?nFbbW(NUR_wbFIB6+kp<|+EV+G3g7 zH^C_V1aDA#!;KvAgHAp5DJoj)W@);~KL0!S=j#jd6H_C(*JMfsRaYJe6qy**wQ7}8 zd4I!!(%4`DmL98U)@22OA|cb3ZuU&zJoa!klUap|z;Q$C?u{vHO(klTg)f_^3f^LJ zKH%*1Am#q|=(VN~J68*BKe}OG@f>&I2h(HDi%I-FyzhrY!WRRclM;vT@1IwYIH^rE zVE-Jx+<7}nswJA_XDsTzre?&!U?*=H`~Lm8etxyb(Tx*)j|gA?tdj8KXVMH`)|;%{ wU)O(rOsuAkIfKCP@6R4_4ky85}Sb4q9e05;2f0ssI2 literal 0 HcmV?d00001 From 860e05e885a20a564ccc117c3d91f3405833ead4 Mon Sep 17 00:00:00 2001 From: Ableytner <56540036+Ableytner@users.noreply.github.com> Date: Thu, 12 Dec 2024 21:33:13 +0100 Subject: [PATCH 123/181] Add missing goodgenerator solidifier recipes (#3645) --- .../java/goodgenerator/items/GGMaterial.java | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/main/java/goodgenerator/items/GGMaterial.java b/src/main/java/goodgenerator/items/GGMaterial.java index aa9aedf9bbb..82a622f166e 100644 --- a/src/main/java/goodgenerator/items/GGMaterial.java +++ b/src/main/java/goodgenerator/items/GGMaterial.java @@ -285,7 +285,8 @@ public class GGMaterial implements Runnable { .addCraftingMetalWorkingItems() .addSimpleMetalWorkingItems() .addMultipleIngotMetalWorkingItems() - .addMetaSolidifierRecipes(), + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes(), OffsetID + 21, TextureSet.SET_SHINY, new Pair<>(GGMaterial.orundum, 2), @@ -639,7 +640,8 @@ public class GGMaterial implements Runnable { new Werkstoff.GenerationFeatures().disable() .onlyDust() .addMolten() - .addMetalItems(), + .addMetalItems() + .addMetalCraftingSolidifierRecipes(), OffsetID + 52, TextureSet.SET_SHINY, new Pair<>(Zinc, 1), @@ -1000,6 +1002,8 @@ public class GGMaterial implements Runnable { .addMolten() .addMetalItems() .addCraftingMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .addMixerRecipes((short) 4), OffsetID + 81, TextureSet.SET_METALLIC, @@ -1020,6 +1024,8 @@ public class GGMaterial implements Runnable { .addMolten() .addMetalItems() .addCraftingMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .addMixerRecipes((short) 2), OffsetID + 82, TextureSet.SET_METALLIC, @@ -1042,6 +1048,8 @@ public class GGMaterial implements Runnable { .addMetalItems() .addCraftingMetalWorkingItems() .addSimpleMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .addMixerRecipes((short) 6), OffsetID + 83, TextureSet.SET_METALLIC, @@ -1068,6 +1076,8 @@ public class GGMaterial implements Runnable { .addCraftingMetalWorkingItems() .addSimpleMetalWorkingItems() .addMultipleIngotMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .addMixerRecipes((short) 3), OffsetID + 84, TextureSet.SET_SHINY, @@ -1192,6 +1202,8 @@ public class GGMaterial implements Runnable { .addCraftingMetalWorkingItems() .addSimpleMetalWorkingItems() .addMultipleIngotMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .addMixerRecipes((short) 7), OffsetID + 95, TextureSet.SET_SHINY, @@ -1219,7 +1231,9 @@ public class GGMaterial implements Runnable { .addMetalItems() .addCraftingMetalWorkingItems() .addSimpleMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), + .addMultipleIngotMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes(), OffsetID + 96, TextureSet.SET_METALLIC, new Pair<>(marM200, 18), @@ -1248,7 +1262,9 @@ public class GGMaterial implements Runnable { new Werkstoff.GenerationFeatures().onlyDust() .addMolten() .addMetalItems() - .addCraftingMetalWorkingItems(), + .addCraftingMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes(), OffsetID + 98, TextureSet.SET_SHINY, new Pair<>(AnnealedCopper, 4), @@ -1274,7 +1290,9 @@ public class GGMaterial implements Runnable { new Werkstoff.GenerationFeatures().onlyDust() .addMolten() .addMetalItems() - .addCraftingMetalWorkingItems(), + .addCraftingMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes(), OffsetID + 100, TextureSet.SET_SHINY, new Pair<>(TinAlloy, 4), @@ -1292,6 +1310,8 @@ public class GGMaterial implements Runnable { .addMolten() .addMetalItems() .addCraftingMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .addMixerRecipes((short) 6), OffsetID + 101, TextureSet.SET_SHINY, @@ -1313,6 +1333,8 @@ public class GGMaterial implements Runnable { .addMolten() .addMetalItems() .addCraftingMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .addMixerRecipes((short) 5), OffsetID + 102, TextureSet.SET_METALLIC, @@ -1355,6 +1377,8 @@ public class GGMaterial implements Runnable { .addMolten() .addMetalItems() .addCraftingMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .addMixerRecipes((short) 3), OffsetID + 104, TextureSet.SET_SHINY, @@ -1449,6 +1473,8 @@ public class GGMaterial implements Runnable { .addCraftingMetalWorkingItems() .addSimpleMetalWorkingItems() .addMultipleIngotMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .addMixerRecipes((short) 4), OffsetID + 109, TextureSet.SET_METALLIC, From af1cc12262d4e5f58e176e45082f23f9c816bf23 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:55:10 -0600 Subject: [PATCH 124/181] Deprecate BW low power lasers (#3644) --- .../common/loaders/ItemRegistry.java | 2 + .../common/loaders/recipes/Assembler.java | 106 ------------------ .../tileentites/tiered/LowPowerLaser.java | 1 + .../tileentites/tiered/LowPowerLaserBase.java | 1 + .../tiered/MTELowPowerLaserBox.java | 4 +- .../tiered/MTELowPowerLaserDynamo.java | 8 +- .../tiered/MTELowPowerLaserHatch.java | 8 +- .../tiered/MTELowPowerLaserPipe.java | 4 +- 8 files changed, 24 insertions(+), 110 deletions(-) diff --git a/src/main/java/bartworks/common/loaders/ItemRegistry.java b/src/main/java/bartworks/common/loaders/ItemRegistry.java index a644e6c838e..4117a32563e 100644 --- a/src/main/java/bartworks/common/loaders/ItemRegistry.java +++ b/src/main/java/bartworks/common/loaders/ItemRegistry.java @@ -386,7 +386,9 @@ public class ItemRegistry { public static ItemStack giantOutputHatch; public static ItemStack humongousInputHatch; + @Deprecated public static ItemStack[][][] TecTechLaserAdditions = new ItemStack[3][4][4]; + @Deprecated public static ItemStack TecTechPipeEnergyLowPower; public static void run() { diff --git a/src/main/java/bartworks/common/loaders/recipes/Assembler.java b/src/main/java/bartworks/common/loaders/recipes/Assembler.java index b96c6653b21..d3bf75812fc 100644 --- a/src/main/java/bartworks/common/loaders/recipes/Assembler.java +++ b/src/main/java/bartworks/common/loaders/recipes/Assembler.java @@ -9,7 +9,6 @@ import net.minecraftforge.fluids.FluidRegistry; import bartworks.common.loaders.ItemRegistry; -import bartworks.system.material.WerkstoffLoader; import goodgenerator.items.GGMaterial; import gregtech.api.GregTechAPI; import gregtech.api.enums.GTValues; @@ -24,19 +23,6 @@ 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), @@ -134,98 +120,6 @@ public void run() { .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), - 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), diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaser.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaser.java index 7dc3eca2f8b..077be58a71f 100644 --- a/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaser.java +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaser.java @@ -20,6 +20,7 @@ import tectech.mechanics.pipe.IConnectsToEnergyTunnel; import tectech.thing.metaTileEntity.pipe.MTEPipeEnergy; +@Deprecated public interface LowPowerLaser extends IMetaTileEntity, IConnectsToEnergyTunnel { boolean isSender(); diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaserBase.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaserBase.java index a4e21be96f5..b9ddf8df4bb 100644 --- a/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaserBase.java +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaserBase.java @@ -25,6 +25,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +@Deprecated public abstract class LowPowerLaserBase extends MTETieredMachineBlock implements LowPowerLaser { protected long AMPERES; diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserBox.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserBox.java index e4eba7d464d..d2a862d5787 100644 --- a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserBox.java +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserBox.java @@ -23,6 +23,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GTUtility; +@Deprecated public class MTELowPowerLaserBox extends LowPowerLaserBase { public MTELowPowerLaserBox(int aID, String aName, String aNameRegional, int aTier, long aAmperes, @@ -161,7 +162,8 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec @Override public String[] getDescription() { - return new String[] { "Like a transformer... but for LASERS!", + return new String[] { EnumChatFormatting.RED + "DEPRECATED! This will be removed in the next major update.", + "Like a transformer... but for LASERS!", "Transfer rate: " + EnumChatFormatting.YELLOW + GTUtility.formatNumbers(this.getTotalPower()) + EnumChatFormatting.WHITE diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserDynamo.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserDynamo.java index da3e3e4ac2b..678cf380d05 100644 --- a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserDynamo.java +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserDynamo.java @@ -13,11 +13,14 @@ package bwcrossmod.tectech.tileentites.tiered; +import net.minecraft.util.EnumChatFormatting; + import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoTunnel; +@Deprecated public class MTELowPowerLaserDynamo extends MTEHatchDynamoTunnel implements LowPowerLaser { public MTELowPowerLaserDynamo(int aID, String aName, String aNameRegional, int aTier, int aAmp) { @@ -55,7 +58,10 @@ public long getAMPERES() { @Override public String[] getDescription() { - return mDescriptionArray; + String[] desc = new String[mDescriptionArray.length + 1]; + desc[0] = EnumChatFormatting.RED + "DEPRECATED! This machine will be removed in the next major update."; + System.arraycopy(mDescriptionArray, 0, desc, 1, mDescriptionArray.length); + return desc; } @Override diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserHatch.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserHatch.java index b9fa9c14b67..7cc2b8c345a 100644 --- a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserHatch.java +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserHatch.java @@ -13,11 +13,14 @@ package bwcrossmod.tectech.tileentites.tiered; +import net.minecraft.util.EnumChatFormatting; + import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyTunnel; +@Deprecated public class MTELowPowerLaserHatch extends MTEHatchEnergyTunnel implements LowPowerLaser { public MTELowPowerLaserHatch(int aID, String aName, String aNameRegional, int aTier, int aAmp) { @@ -30,7 +33,10 @@ public MTELowPowerLaserHatch(String aName, int aTier, int aAmp, String[] aDescri @Override public String[] getDescription() { - return mDescriptionArray; + String[] desc = new String[mDescriptionArray.length + 1]; + desc[0] = EnumChatFormatting.RED + "DEPRECATED! This machine will be removed in the next major update."; + System.arraycopy(mDescriptionArray, 0, desc, 1, mDescriptionArray.length); + return desc; } @Override diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserPipe.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserPipe.java index 0a8ddb19d30..0d4bf98282d 100644 --- a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserPipe.java +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserPipe.java @@ -33,6 +33,7 @@ import gregtech.common.GTClient; import ic2.core.Ic2Items; +@Deprecated public class MTELowPowerLaserPipe extends MTECable implements LowPowerLaser { public MTELowPowerLaserPipe(int aID, String aName, String aNameRegional) { @@ -74,7 +75,8 @@ public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirec @Override public String[] getDescription() { - return new String[] { "Primitive Laser Cable intended for Low Power Applications", "Does not auto-connect", + return new String[] { EnumChatFormatting.RED + "DEPRECATED! This will be removed in the next major update.", + "Primitive Laser Cable intended for Low Power Applications", "Does not auto-connect", "Does not turn or bend", EnumChatFormatting.WHITE + "Must be " + EnumChatFormatting.YELLOW From 20672ce983c9275202b7a1d128ba9ad9efa3670d Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Thu, 12 Dec 2024 15:03:37 -0600 Subject: [PATCH 125/181] Migrate GalaxySpace materials to GT5u (#3520) Co-authored-by: Martin Robertz Co-authored-by: RecursivePineapple --- .../system/material/WerkstoffLoader.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/main/java/bartworks/system/material/WerkstoffLoader.java b/src/main/java/bartworks/system/material/WerkstoffLoader.java index 079238c28a4..c3d326042ca 100644 --- a/src/main/java/bartworks/system/material/WerkstoffLoader.java +++ b/src/main/java/bartworks/system/material/WerkstoffLoader.java @@ -1570,6 +1570,55 @@ public static void setUp() { 104, TextureSet.SET_SHINY); + // Extracted from GalaxySpace + public static final Werkstoff LiquidHelium = new Werkstoff( + new short[] { 210, 230, 250 }, + "Liquid Helium", + "He", + new Werkstoff.Stats().setBoilingPoint(4) + .setGas(false) + .setMeltingPoint(1), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 11500, + TextureSet.SET_FLUID); + + public static final Werkstoff HafniumCarbide = new Werkstoff( + new short[] { 125, 135, 125 }, + "Hafnium Carbide", + "HfC", + new Werkstoff.Stats().setMass(192), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().onlyDust(), + 11501, + TextureSet.SET_METALLIC); + + public static final Werkstoff TantalumCarbideHafniumCarbideMixture = new Werkstoff( + new short[] { 75, 85, 75 }, + "Tantalum Carbide / Hafnium Carbide Mixture", + subscriptNumbers("(TaC)4HfC"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().onlyDust(), + 11502, + TextureSet.SET_METALLIC); + + public static final Werkstoff TantalumHafniumCarbide = new Werkstoff( + new short[] { 80, 90, 80 }, + "Tantalum Hafnium Carbide", + subscriptNumbers("Ta4HfC5"), + new Werkstoff.Stats().setMass(192) + .setMass(962) + .setMeltingPoint(4263), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().onlyDust() + .addMetalItems() + .addMolten() + .setBlacklist(OrePrefixes.plate), + 11503, + TextureSet.SET_METALLIC); + public static HashMap items = new HashMap<>(); public static HashBiMap fluids = HashBiMap.create(); public static HashBiMap molten = HashBiMap.create(); From 0c3832cccc2e5467133012c6379b93f39dd75b23 Mon Sep 17 00:00:00 2001 From: BlueHero233 <87818077+BlueHero233@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:22:03 -0300 Subject: [PATCH 126/181] Add Signalium, Lumiium and Enderium ABS recipes (#3355) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> Co-authored-by: StaffiX <32968022+StaffiX@users.noreply.github.com> --- .../core/recipe/RecipesGregTech.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java b/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java index ffac299ae2f..d00e8c7e8c0 100644 --- a/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java @@ -721,6 +721,49 @@ private static void extruderRecipes() { private static void blastSmelterRecipes() { + // Enderium + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(5), + Materials.Tin.getDust(2), + Materials.Platinum.getDust(1), + Materials.Silver.getDust(1), + Materials.Thaumium.getDust(2), + Materials.EnderPearl.getDust(2)) + .fluidOutputs(Materials.Enderium.getMolten(8 * 144)) + .eut(TierEU.RECIPE_EV) + .duration(20 * SECONDS + 1 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + + // Signalium + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(3), + Materials.AnnealedCopper.getDust(30), + Materials.Ardite.getDust(10), + Materials.Redstone.getDust(50)) + .fluidOutputs(GGMaterial.signalium.getMolten(5 * 144)) + .eut(TierEU.RECIPE_LuV) + .noOptimize() + .duration(5 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + + // Lumiium + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + Materials.Tin.getDust(10), + Materials.Iron.getDust(10), + Materials.Copper.getDust(2), + Materials.Silver.getDust(8), + GGMaterial.lumiinessence.get(OrePrefixes.dust, 10), + Materials.Glowstone.getDust(10)) + .fluidOutputs(GGMaterial.lumiium.getMolten(5 * 144)) + .eut(TierEU.RECIPE_LuV) + .noOptimize() + .duration(5 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + // Eglin Steel GTValues.RA.stdBuilder() .itemInputs( From 5db70f27aef9560fbb2d90976a1b77cea6756224 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Thu, 12 Dec 2024 22:39:59 +0100 Subject: [PATCH 127/181] update --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 4618fba8432..68b03943f7a 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -80,8 +80,8 @@ dependencies { compileOnly rfg.deobf("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:Nuclear-Control:2.6.7:dev") { transitive = false } compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") { transitive = false } - implementation("com.github.GTNewHorizons:Hodgepodge:2.5.82:dev") - compileOnly('com.github.GTNewHorizons:Botania:1.11.6-GTNH:dev') { transitive = false } + implementation("com.github.GTNewHorizons:Hodgepodge:2.6.0:dev") + compileOnly('com.github.GTNewHorizons:Botania:1.12.1-GTNH:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:HoloInventory:2.4.13-GTNH:dev') { transitive = false } compileOnly rfg.deobf("curse.maven:extra-utilities-225561:2264384") compileOnly rfg.deobf('curse.maven:minefactory-reloaded-66672:2366150') From 09769ca9a50be0f32fecf47a4fb8fdb172081e73 Mon Sep 17 00:00:00 2001 From: Benjamin Kirkbride Date: Thu, 12 Dec 2024 17:13:08 -0500 Subject: [PATCH 128/181] =?UTF-8?q?Rotate=20Screwdriver=2090=C2=B0=20From?= =?UTF-8?q?=20File=20(#3640)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Martin Robertz --- .../ggfab/textures/items/gt.ggfab.d1/36.png | Bin 418 -> 633 bytes .../ggfab/textures/items/gt.ggfab.d1/6.png | Bin 318 -> 305 bytes .../textures/gui/picture/tic_bolt_molding.png | Bin 320 -> 298 bytes .../iconsets/HANDLE_ELECTRIC_SCREWDRIVER.png | Bin 317 -> 380 bytes .../HANDLE_ELECTRIC_SCREWDRIVER_OVERLAY.png | Bin 186 -> 241 bytes .../items/iconsets/HANDLE_SCREWDRIVER.png | Bin 238 -> 278 bytes .../iconsets/HANDLE_SCREWDRIVER_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/Botania-Dragonstone/bolt.png | Bin 2769 -> 250 bytes .../Botania-Dragonstone/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../materialicons/CUSTOM/Dreamwood/bolt.png | Bin 1161 -> 1368 bytes .../CUSTOM/Dreamwood/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/Dreamwood/toolHeadScrewdriver.png | Bin 1189 -> 1398 bytes .../Dreamwood/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../materialicons/CUSTOM/Livingrock/bolt.png | Bin 153 -> 258 bytes .../CUSTOM/Livingrock/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/Livingrock/toolHeadScrewdriver.png | Bin 189 -> 309 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../materialicons/CUSTOM/Livingwood/bolt.png | Bin 1156 -> 1368 bytes .../CUSTOM/Livingwood/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/Livingwood/toolHeadScrewdriver.png | Bin 1182 -> 1398 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../bolt.png | Bin 1499 -> 1314 bytes .../bolt_OVERLAY.png | Bin 4896 -> 4586 bytes .../toolHeadScrewdriver.png | Bin 1356 -> 2041 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 5035 -> 4638 bytes .../CUSTOM/WhiteDwarfMatter/bolt.png | Bin 4831 -> 4077 bytes .../CUSTOM/WhiteDwarfMatter/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../materialicons/CUSTOM/bedrockium/bolt.png | Bin 162 -> 204 bytes .../CUSTOM/bedrockium/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/bedrockium/toolHeadScrewdriver.png | Bin 243 -> 238 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../materialicons/CUSTOM/eternity/bolt.png | Bin 2045 -> 1757 bytes .../CUSTOM/eternity/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/eternity/toolHeadScrewdriver.png | Bin 2959 -> 2813 bytes .../eternity/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/exohalkonite/bolt.png | Bin 3097 -> 956 bytes .../CUSTOM/exohalkonite/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/hotexohalkonite/bolt.png | Bin 12671 -> 11749 bytes .../CUSTOM/hotexohalkonite/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../hotexohalkonite/toolHeadScrewdriver.png | Bin 3980 -> 1286 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/hotprotohalkonite/bolt.png | Bin 557 -> 730 bytes .../CUSTOM/hotprotohalkonite/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../materialicons/CUSTOM/infinity/bolt.png | Bin 643 -> 757 bytes .../CUSTOM/infinity/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/infinity/toolHeadScrewdriver.png | Bin 965 -> 1185 bytes .../infinity/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../materialicons/CUSTOM/magmatter/bolt.png | Bin 993 -> 705 bytes .../CUSTOM/magmatter/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/magmatter/toolHeadScrewdriver.png | Bin 1577 -> 981 bytes .../magmatter/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/protohalkonite/bolt.png | Bin 211 -> 258 bytes .../CUSTOM/protohalkonite/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../materialicons/CUSTOM/spacetime/bolt.png | Bin 5775 -> 1136 bytes .../CUSTOM/spacetime/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../CUSTOM/spacetime/toolHeadScrewdriver.png | Bin 9334 -> 2160 bytes .../spacetime/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../materialicons/CUSTOM/universium/bolt.png | Bin 531 -> 737 bytes .../CUSTOM/universium/bolt_OVERLAY.png | Bin 143 -> 183 bytes .../CUSTOM/universium/toolHeadScrewdriver.png | Bin 566 -> 745 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 143 -> 183 bytes .../items/materialicons/DIAMOND/bolt.png | Bin 161 -> 194 bytes .../materialicons/DIAMOND/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../DIAMOND/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../DIAMOND/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/DULL/bolt.png | Bin 161 -> 194 bytes .../items/materialicons/DULL/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../DULL/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../DULL/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/EMERALD/bolt.png | Bin 161 -> 194 bytes .../materialicons/EMERALD/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../EMERALD/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../EMERALD/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/ENRICHED/bolt.png | Bin 161 -> 194 bytes .../materialicons/ENRICHED/bolt_OVERLAY.png | Bin 206 -> 224 bytes .../ENRICHED/toolHeadScrewdriver.png | Bin 178 -> 204 bytes .../ENRICHED/toolHeadScrewdriver_OVERLAY.png | Bin 231 -> 234 bytes .../items/materialicons/FIERY/bolt.png | Bin 161 -> 194 bytes .../materialicons/FIERY/bolt_OVERLAY.png | Bin 186 -> 224 bytes .../FIERY/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../FIERY/toolHeadScrewdriver_OVERLAY.png | Bin 203 -> 234 bytes .../items/materialicons/FINE/bolt.png | Bin 161 -> 194 bytes .../items/materialicons/FINE/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../FINE/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../FINE/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/FLINT/bolt.png | Bin 161 -> 194 bytes .../materialicons/FLINT/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../FLINT/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../FLINT/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/FLUID/bolt.png | Bin 161 -> 194 bytes .../materialicons/FLUID/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../FLUID/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../FLUID/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/GEM_A/bolt.png | Bin 161 -> 194 bytes .../materialicons/GEM_A/bolt_OVERLAY.png | Bin 143 -> 183 bytes .../GEM_A/toolHeadScrewdriver.png | Bin 178 -> 204 bytes .../GEM_A/toolHeadScrewdriver_OVERLAY.png | Bin 143 -> 183 bytes .../materialicons/GEM_HORIZONTAL/bolt.png | Bin 161 -> 194 bytes .../GEM_HORIZONTAL/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../GEM_HORIZONTAL/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/GEM_VERTICAL/bolt.png | Bin 161 -> 194 bytes .../GEM_VERTICAL/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../GEM_VERTICAL/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/GLASS/bolt.png | Bin 161 -> 194 bytes .../materialicons/GLASS/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../GLASS/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../GLASS/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/LAPIS/bolt.png | Bin 161 -> 194 bytes .../materialicons/LAPIS/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../LAPIS/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../LAPIS/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/LEAF/bolt.png | Bin 161 -> 194 bytes .../items/materialicons/LEAF/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../LEAF/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../LEAF/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/LIGNITE/bolt.png | Bin 161 -> 194 bytes .../materialicons/LIGNITE/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../LIGNITE/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../LIGNITE/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/MAGNETIC/bolt.png | Bin 161 -> 194 bytes .../materialicons/MAGNETIC/bolt_OVERLAY.png | Bin 245 -> 344 bytes .../MAGNETIC/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../MAGNETIC/toolHeadScrewdriver_OVERLAY.png | Bin 327 -> 505 bytes .../items/materialicons/METALLIC/bolt.png | Bin 107 -> 173 bytes .../materialicons/METALLIC/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../METALLIC/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../METALLIC/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/NETHERSTAR/bolt.png | Bin 161 -> 194 bytes .../materialicons/NETHERSTAR/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../NETHERSTAR/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/NONE/bolt.png | Bin 161 -> 194 bytes .../items/materialicons/NONE/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../NONE/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../NONE/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/NUCLEAR/bolt.png | Bin 161 -> 194 bytes .../materialicons/NUCLEAR/bolt_OVERLAY.png | Bin 143 -> 183 bytes .../NUCLEAR/toolHeadScrewdriver.png | Bin 178 -> 204 bytes .../NUCLEAR/toolHeadScrewdriver_OVERLAY.png | Bin 143 -> 183 bytes .../items/materialicons/OPAL/bolt.png | Bin 161 -> 194 bytes .../items/materialicons/OPAL/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../OPAL/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../OPAL/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/PAPER/bolt.png | Bin 161 -> 194 bytes .../materialicons/PAPER/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../PAPER/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../PAPER/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/POWDER/bolt.png | Bin 161 -> 194 bytes .../materialicons/POWDER/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../POWDER/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../POWDER/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/QUARTZ/bolt.png | Bin 161 -> 194 bytes .../materialicons/QUARTZ/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../QUARTZ/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../QUARTZ/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/REFINED/bolt.png | Bin 161 -> 194 bytes .../materialicons/REFINED/bolt_OVERLAY.png | Bin 143 -> 183 bytes .../REFINED/toolHeadScrewdriver.png | Bin 178 -> 204 bytes .../REFINED/toolHeadScrewdriver_OVERLAY.png | Bin 143 -> 183 bytes .../items/materialicons/ROUGH/bolt.png | Bin 161 -> 194 bytes .../materialicons/ROUGH/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../ROUGH/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../ROUGH/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/RUBY/bolt.png | Bin 161 -> 194 bytes .../items/materialicons/RUBY/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../RUBY/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../RUBY/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/SAND/bolt.png | Bin 161 -> 194 bytes .../items/materialicons/SAND/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../SAND/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../SAND/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/SHARDS/bolt.png | Bin 161 -> 194 bytes .../materialicons/SHARDS/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../SHARDS/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../SHARDS/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/SHINY/bolt.png | Bin 161 -> 194 bytes .../materialicons/SHINY/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../SHINY/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../SHINY/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes .../items/materialicons/WOOD/bolt.png | Bin 161 -> 194 bytes .../items/materialicons/WOOD/bolt_OVERLAY.png | Bin 141 -> 183 bytes .../WOOD/toolHeadScrewdriver.png | Bin 155 -> 204 bytes .../WOOD/toolHeadScrewdriver_OVERLAY.png | Bin 141 -> 183 bytes 185 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/ggfab/textures/items/gt.ggfab.d1/36.png b/src/main/resources/assets/ggfab/textures/items/gt.ggfab.d1/36.png index 951edab1172e18def54f14dadee0a6207b2c9c39..56856961d6c3a6b681782f884d591ec1b9d98e5c 100644 GIT binary patch delta 599 zcmV-d0;v6>1Nj7y8Gi!+001a04^sdD03c&XQcVB=dL{q>fP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0Rm7=R7C&)08mg+R8&+~SXWzHTV7sYVq#)tWo2n;X>4n2 zaBy&Ra&mTdc1cP~PEJlxP*PY}S6^OVWoBh;Y;1INaz;i*N`Fa7P*PG@SXgCcWE=+ z_TIbx|F?MYRr8R&IkUSnA>{YiI6HOlPQm5&c&)cj^m73kN(9kE1;iZM<`PaNU_ zB&4KhgQR!@0i-jMB4)W9CHaC72C$+fYKc&8tz4-Bbe6733L*6d)tYfYOK0s4s){{Y z6QSGF8HzR4ry7zm=;1bp%19l{6U3=8!{)iUK+jSJtk%Y6yJLIEK|KOatFv+0UfIpO lV~Tv`0eP~QIeh>5`v+ao__!U002ovPDHLkV1mlU)IHaZwNaB1x7XWzZU{^4iU?o@;tbYzRY~yj7W&l_LKv%v~ z9LnuZ8#dFSgzjJoJ{%4u?JmItNti@1@}0dPXvz}aUf<^9@mNHHZosrnW(-SU#2}EI z1R>DGZnv9Hr&Dp%D3yq0f=ReKSTzTBbQRioetDkX-#-cfOw%;ya0i&=a9{_>F$YCJ zRPXw7xfEMaXn%+-2^!cW)JP;uwJHGk{QN520sX55wX6oEthIi)-EKR{^?EI)L4V&9 zh*?{U5N&WKg2ZOC=_KD|IyT1;+qT)P3zO<&>cV=xo)xW;5g}VpU6LBbTCB3hOpfP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u069=hR7C&)0RR90*z)qZ=;+Vy@8806^y0W&i*H0b)x> zL;?Q-E#8qK7;Oi1Nliru=nM=1I4qo^vF-o>07XeeK~xyiV_+Z&FfyX?nV5;^v!Khf zu%fAFV`b++;&QTaakKKE@EN&ySy*lWLSsOZ+vD-7jdN|#^nW}N z8iVX~0szE$UJL*Lb=O5|EmCU{XpN6J=5W2{T>zCNOs&OWxkP`lK-c#XXbrbq#$U+I zbi$A=rAU%3rTDqupG};50B@BFs#2mooucde7)24PQWiVyc(dVq6#X&*08tbY=Q-xa gpx0=Kr##^oj7y>|ZSpc900000Ne4wvM6N<$g8OQJO8@`> diff --git a/src/main/resources/assets/gregtech/textures/gui/picture/tic_bolt_molding.png b/src/main/resources/assets/gregtech/textures/gui/picture/tic_bolt_molding.png index f2ec0bc144cc7295732fcde0a0a27fd5be47257b..7a3049a297846a0624c51be4b37294125db27a85 100644 GIT binary patch delta 283 zcmX@Ww2EnhL_G^L0|Ud`yN`l^ltQvckS_y6l^O#>Lkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j)!2Ka=y0_hJQX1;v&NmE1P%tXK9iiUNY_cr)z{l7ia$ss1v&TH?Q zRo2Qza~hlf|Nr0dSpF(d15-(mUoZnh+2pepKwdp#lDE4HU;bVLe;|*&#M9T6{RIyX zBcG^u<)I}&p*T+$#}JO|$q5cjTmoG;BW~Wf!EnN$kk{ASn9b-+bcpkERc1*yDKE!a z3T>Gc;Tak;1Xt}9IkSQ1>Q2_wmU*#KJV{I1j@@B0UdGre#w>ZvINh(;k|%{jTH1My b13QDr94Sd@LFag0pj8Z>u6{1-oD!M<1GZeo delta 305 zcmV-10nYxa0>A>07=H)`0000V^Z#K0009R{L_t(I%VS`m2YC7F(|=rYEXW*94Go+M zk>#%6xWNcxGomYK?VgIF@#xXRaCW5RIR*v>28P(_x8Q~_AuEPyp3*y?;poxBaLr{! zMGTRW=NOE=ycxFayMx<_>o)KG@8l5k|K+Ps|6jiP^uM^G0e{Z^e|sjJjqDv3bb|~n zR2aJY`r!P6kO+olbNv|_OC~aW)_jgX5YfT2W2YEW@)8(c@q1v^j1dOtnw_038S2VA zP{hxlxP#jOSfIf)&tJ5j!6MWT#Y+TTfUX%CSXfP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0D(|UR7L;)|KH!=LPA0zAtA}h$^QTTIyyQT85zRD!uIy| z=jZ3x*w`~OG7=IJySuyX?Csy(-O$g_!NI|@va%~HE3~z=cq0x2dYB zn3$N`+uY60&c46DudlD6p`ekGk;KKswY9aUr>K~jn2U;vo}QkMkC23fg#Z8loh#7? z00002bW%=J004HA%{Tx600Cl4M??UK1szC{As%Vy3=9AnF>^b})BpegM@d9MR2b7^ zV4xphL>FLUM&+}xvauucIXJnvd3X_gK7Ii~Az=}?Iih0X5|UEV2n8~-a`Fm_NG2#L jtEj4>*rBeWiO-Dy=aDeaoELSV`hXbe6nMQBy zI1ZvO7>&k+VJ66Wv!?NoY}=;W?csSIUt8h}mE-w!{tyQ800000NkvXXu0mjfuQ`6A diff --git a/src/main/resources/assets/gregtech/textures/items/iconsets/HANDLE_ELECTRIC_SCREWDRIVER_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/iconsets/HANDLE_ELECTRIC_SCREWDRIVER_OVERLAY.png index e3033547c38c92fb62b6ab929eb4a174f5dfc3da..0ffbdb9db836e184650a6b473fbfb22b94b3ffb0 100644 GIT binary patch delta 201 zcmdnR_>pmfL_G^L0|Ud`yN`l^ltQvckS_y6l^O#>Lkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j&e2Ka=y{{R2q$;nAkQPIlEN>Wmi;Xi}1v5}CF(0>L7ZEbC!?EKbk z=YWbCOM?7@862M7NCR<_yxm*&w0Sd@^x;Tb#Tu)9| sAY!0(AVMv`s$ngIPqBf4kHS?GhGYiDEtbj!B|wD?p00i_>zopr0EopoH~;_u delta 170 zcmey!xQlUuL_G%^0|SHn=l_X7inG8YvY3H^TM&d9>r>(<0tMMiJbhi+@9~I>=$jmg zoU{fg#Fpgk?!xdN1Q+aGJ{c(D?&;zfVsSe8$N&HK%&IdIuQV)7YFM=BQN6nQ^8YE4 z3YwZf@1HvL%05z0KuG9UeooF8`Gqqc+IzAoXJlt5-#XKfbt1!RK@%gx&dd)BP9`*p Q0nKFaboFyt=akR{0EZzy1poj5 diff --git a/src/main/resources/assets/gregtech/textures/items/iconsets/HANDLE_SCREWDRIVER.png b/src/main/resources/assets/gregtech/textures/items/iconsets/HANDLE_SCREWDRIVER.png index eed4a90317c4e3fe8ada2b0edecd9c5764015076..d18b8d74c6d04e253040efa82a1e2cde6b1cf008 100644 GIT binary patch delta 235 zcmVfP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u00Lr5M??VshmXv^ks%&`=nM=188LG^$kYG;0DDP9K~yNu z)sZ0%!axv3-!xS?l4g@$g!A-f?H!Pq3P^**A-O?=AwfOFx^~lQX2ghj|L0F8WVinMJNX?bY71vg`^PCOQThQt1rI>dAXS lFCj1<*mC3)C4<;|_YX3uLKgmHAJPB-002ovPDHLkV1k@WT-g8s delta 195 zcmV;!06hPe0`38j83+ad001BJ|6!3^9)I2i3JC%y+fY=E00006VoOIv0RI600RN!9 zr;`8x0DDP9K~y-)?b0C%Kp_kUVDEnkZ(v#R0D@S|HjBk#w*4}LAQ;s5cS3-Gvb6&unlO+M x!a%kF=NwkZ(HR-B)=tRrBQc`29^qF$u>p_Z3^9%3DsTV*002ovPDHLkV1m@@POSg{ diff --git a/src/main/resources/assets/gregtech/textures/items/iconsets/HANDLE_SCREWDRIVER_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/iconsets/HANDLE_SCREWDRIVER_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..844e4365af706bff7ff97e32b137a3af9a0a13d2 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Botania-Dragonstone/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Botania-Dragonstone/bolt.png index 622a45dc42c5448c20c45165f11dd4d8788ffc9c..1986d0e057fbcee6524b3ed644c30dd0e7077e44 100644 GIT binary patch delta 233 zcmca8`ipUbWIZzj1A~Sxe=v|zNcITwWnidMV_;}#VPNf4lwpgAG^y|Nk#C>%T2f8)He3UoeBivl~fiAYPKUyNkfoO}sil4tt5G zuPgft9v((Mu}cM$<$yw(o-U3d5|@(`7Dy(zJT^95+`VDLriGmwiWhVj6csM+{P5w^ f!p;xD=Pxpte_?3g=a^{))WqQF>gTe~DWM4f6#HSf literal 2769 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 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Dreamwood/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Dreamwood/bolt.png index 3a8108a64d23e5498f9b643a9cf0889bb12a5ce2..3f4ec3ed10ade1d446eda2f97b9a4e890e953920 100644 GIT binary patch delta 365 zcmeC=yumd=LV|^vfq~)e-A6$T49qVwot*Ol;L@T^(}HJ2qn86K)JFE p=P|ga=A{;8CMyKFJ1GPd<)>xlq)IKf=mRQe@O1TaS?83{1ORVQfbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Dreamwood/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Dreamwood/toolHeadScrewdriver.png index 6d6a4c0221508946f659cdfef4b02ae2bf861c0c..c4dfd1f7fa580f57fa1bd368853b95deab364329 100644 GIT binary patch delta 394 zcmZ3=`HgFWq&PDJ1A~Sxe=q|B^NUPp=YY)QWCjL{-i;Oynd_%;?biZIDsZTGq@7;ap(Szd`&+k0AfAh}mcb+`@|NnoL*%S?+ zPR5cTzhDN3XE)O7LA)eycNf7&TWxm%IqW5#zOL*qcz75j4U4T$TmcH1dAc};NL)@% zP~bE$TKH+^jL3kWYjQMd%EI_U?9{d9cXms+oDRm>~_Pc_*XGEXp^ zxX66&InV^#64!_lps%fx^9w4AGSf3k7@Q$2AXCA}z`$I=v7jI)RlzeaSx-kHF(*d> ztg2X{D784Xs4O)_Z(iCRO`u82Fq2YJi<65o3raHc^BCMy^HPg4lNEy8ofHC!^3yVN VQl*w#^Z}JKc)I$ztaD0e0swbUmh%7r delta 184 zcmV;p07w7!3Z)5<86O4!001BJ|6u?C1Mq1>Lr_UWLm*IcZ)Rz1WdHzpoUt(B1AkzY zbRqx%0B}h}K~y-)V_+CG;KQ#U|6hK7|DS9Fj+{I7|J0=m|3LsW$1M&^od2m12I~2KO^Um#* m#}3FPcb+`@&oBxw0073PV_6ixTn&E!0000bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingrock/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingrock/bolt.png index bbfdedeba934990d63c46d4a35f344ec059194c0..8107f13b938a6bc5248b4f0a95a0851cc0da73a8 100644 GIT binary patch delta 241 zcmbQq*u*qJvYwfNfk8u;KNv_UBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3l zfkC`r&aOZkpoC?BPlzj!zHs)?f&JT_Kfib3;^~to_g}kq{^+sY2lj5eee?Y3Gy9Jm z*?sxK(NjnFZr`%(?#)YQPVU>Yd&~d-|Jwsix`CP*OM@RqD82Q956-<@`3Tb<~IEF}EPEJ@Lnc(u+*l_cL&JCM3F77NSC|cNA n@cF}{&JQ2C7j$w2oxjN7{D@)Jw6pL1Kt_4G`njxgN@xNA(3fN* delta 136 zcmV;30C)d_0+|7j8Gi-<001BJ|6u?C0ANW(K~xwS?ZHb9Krj?Q(YODFSb;F8s)$PJ zlNO0YgsEj*TTlZd=g99vVXTq2!qjtJCzZ*NShiKHtH(Km#OepbzIiI0A+b8ES%Rf$ q6cTH2CC4_CrwQ^_p;F}c$PEw{ILIe{r@jCH002ovPDHLkU;%>Z200A? diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingrock/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingrock/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingrock/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingrock/toolHeadScrewdriver.png index 377e34f18883f02cf9894ba6068bac483b76545c..5f61ea6fd7587f2a3136f885fb268af20eefe6e3 100644 GIT binary patch delta 293 zcmV+=0owk(0kr~<8Gi!+001a04^sdD03c&XQcVB=dL{q>fP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u09sH?R7C&)0PgVU>FDF&;o9Eb+Re|&=;_?n(#y!iz~kiE z($vS#&cx^F;nmmA#>vCuJ(YgPfNQ|Jc5!hr! z5JZ$L#>K)=7~Agw?548tJ^3AT@I04*Xcg8l3?0|8L$tDFMeTNkxkt2Ync%7vKedR~ z*2Ekd%RP*UR&GbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/bolt.png index 8bc1fd827629f56107a25c6766326ca015bed1e1..c8cfa63b216e981c59b32612c725b7174b0b1a0c 100644 GIT binary patch delta 365 zcmZqSyumd=LV|^vfq~)e-A6$T49qVwot*RtkHI}P kFSRH$Ss}>XNg<#pKP@vSRcg6KA5b}ir>mdKI;Vst03fGrhyVZp delta 151 zcmV;I0BHZ%3WN!e7$67+0000V^Z#K000Z!8LqkwWLqi}?a&Km7Y-Iodc$~2?;R9=6 zlyo8h002)(L_t(I%VS^|1@r@625SGw)*PUx@;}g2`+tI-9O;H+m}&iwFj4#OuB}L( z<}3>h@-&0|oMr-ax~@Fwnv)F`|Azr>CrdL7P^5W;0RYPg9ATOj=Sctn002ovPDHLk FV1m6YI)nfK diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/toolHeadScrewdriver.png index 44714a5336323e6e6fab9ada90f58a3c2f9dd2ab..a345b8344fceb89fe662a07a2618ea007c932c59 100644 GIT binary patch delta 394 zcmbQo`HgFWq&PDJ1A~Sxe=q|B^NUPp=YY)QWCjL{-i;Oynd_%;?biZID3ouZLv(d>k*Yr2muC|o-)>jR&Fvu{|2r*Fd(o@N`*8Ttg|Jwz5^+27BB|(0{ z3=Yq3q=9)!-tI1fkG9(G0!p!$c>21szu@6vkTfi|K5+$PpQnpsh{WaO1O-k5qlKSl z&WH^7xh6-WrYwvv#7-oc{y0y-qY)`YZU&YK4@KlqHA@c;oiHpqVo&!y= zEpd$~0s7i1IlrK?C^J2yguxlY0x}hh3=GT_9199^QWZS&lJ#^H5_57Cz^aNBic*VH zi^@_{^ya1A(FB^L3^OSuwK%ybv!En1KaasZH7~U&Gg%?X-AN&!C_gPTCsk^>MITT( NgQu&X%Q~loCIDRmd@KL} delta 177 zcmV;i08an*3Z4m&86O4!001BJ|6u?C1Mq1>Lr_UWLm*IcZ)Rz1WdHzpoUt(B1AkzY zbRqx%0BK1?K~y-)V_+CGpvb}Kf3CImf3gioF;e;;VxsjQWDwbg1Q@9N&oEP?%#ciT zO|T(xHae6U;%}@?nIYc#s{gAkbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/bolt.png index 4880804fee020778421551b4d99a8cee203039d2..0917982fa05c9cce67775b9af55e4121cb01c5ce 100644 GIT binary patch literal 1314 zcmWlXdo&by9L0YV^EOzaFf+a*1mC`1~R4CdOTcejaXUVgN zUZ<_&kzU(mr`7HhiQNu*DCVO=)zewyJ`DI$AU7NkG5cMqoeng_m|%|)ip=qP_2hdA zbPJJTg(OQPn2j%Dy>O&X4$1H}7Vkn)Vv8&rL{G0VXHNLik-$MD2PgQbwVQeyfDswq z`QxGk)b==T_tb%b{kGU>h!t#<%)&lvlscio0auMt$HjAZ95TW^Kiv0$oPl#LIK&xq zrC^%ai<3SP+^2q1Q`S|1iJ_h5EL-cE<#@bVhMH- zY#@jvNFi8Du##X4!6yBlHaQdke<~CNasnAaAi)zibPC^zSnwi4^QMi9Xb3XIEvu(O z`UfBOxXAF~OnNh)_1=*-6k&=8f_#HfZ|d+8CRUqHc~jek^ct>7uM2%-wIxDXh&M$h z6G1fWx5OsS$1vuA4-3iG*fkTm+zDqYJPFpZvGqGt+To5HGR?5la!^d0iZMmHH7>c0 z%r!u%06H&>N8zjh$AvFlSlu2}BwFI~T>Pb&9FhY+LFQ$8MZ8(EbjSd@Wt+e=JW+Y(nS4pnqFweu!++luhkLLayJ9`XJ&!fRcRm&_e8h~qt(m5Bsnpv2 z*C+@rXwgVUBck{Z3mVGnF0IOWb-O8xf1$lJRrURo^}@lFfd!?hUp|*7c3ih=Ov>{M zx!blica(9TXMU3xr`1IZW;ZNRwwkHMdo<>KS50a+W_X3%-!D^fE48!FYhT(6q!NWk zA5X)Jvp8IS*!##1y8^zmqBtlgPq8@IT)d({Yjs{4HeVbT=E#p%>Z+RUqeoktM;>@7 z)NC_#UXdW`UvEKu`Prt?2NlvOM^*2H0>6Ss&wLHFGdP{dZga7rYKvQ9}Tajej^xkh$kU{TtOW;~7)UiK$W?f&J S7T>8Sf&@#J1zrw_Iq*N-y>6KR delta 1474 zcmV;z1wHzr3fl{i86^e)006!y@#6ph00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y%? z?*bQp1#n43K~#8N?V4F^R8<(q|995TOqZc8dmBkvqd-|wWhoMn#U+G@@IcfDi7^<| z7sVIUKzPuYkdW{oyfm1o7+exV0wE&CxPZ|V#Z(im3rlJ#Eu8{wr!#Z=_sq~%$UXPo zxo1!&&H26Dlg#&>dv0>R-<*5yf#!dNzdpf#q2?|4hOUmVc{wqCJ~Dlqq@6g@Ss&u{ zwIQ-;f%jxK8XQU`k<~=`#>|QD9i_4j}Q|=FcS|d_+a;BqB9NDM__C@=iLWW5##Aiat12r+uI)LhO8y*F0y}3L+Q=Qz`hWPu`N_?t^`z zCbEn5S_8($R&RyHX9DD|yVx?VM8OAtO;gBCF;^c*otX21F9gi0z{8#W-iAGl_JO82 z;iuE2Gc&*S!Ji8WGYNiDZt29e1AeuHxKIk5Nx)ct)uRtyFC*WdO|Db%L30DSt&Dy3 zhJp{8#)~BJnlrr$(I2UOpczf@wSaVH=I4VS>WOp)d=ZvT+PR=DlgFsaj#^)Y~J&g8&ra0k4@|wuc2Oo?T zwPAoOReaFgNJMIYu|XIoRebREi~@bIS;Yr`EEdn4zTtyIsy=92rhT9(LRx3a7u@;z z;9wbRtAL+t!j?{?n{hY86H|$QiM8;bZ^O7RtQ+-?m6r7Z`b1T>^}%>m{<2})0S^m} zo$UiMBIphKEkXHy;*}LdN<40N4~$n7_Y=*Yb=n7-BILIC;JtWE!3W1gNmo?D-`<6} zrv@yAuj_td`|L2k z?1;d;nnca%q@}PND=p`P{wS`+OHuxAhcwpq5pq7r{#p~VP0r%(g9CCCxx$^!C#5x- zI|J8*)P2Bb%ZR0aad3g24UMS&0AGweUO?NB;Ty@ zKJ2UyxFts3D@LG-_JO82;qzmpGc!LQ?5rd(z z!d`pU2YhZEFEq$scN`hPFCd+-0J-jgNgAFa(2b$3Yzh5t%nfa{`PBjt>?}M38 zIDX63VRB7`+&@ntIqQQ*OW0g1-wt);(){2JA8fC1OqSMq&Ig?_T>CbO@)r4*4Og@e c@&)(@w%4%{m%hM6jQ{`u07*qoM6N<$f^Y@R&Hw-a diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/bolt_OVERLAY.png index 33336d7ff8b19a243bfeb695e93249091969ff06..46f1b5dd517e1394c8c3a301de01ce4ef88988bf 100644 GIT binary patch literal 4586 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 z zuCuV%WXu`8S6bsII!=tu@5qZW0I+1S15erCNke-_hD#9gf5cGk|8S2Wkn z994O!*dffJUM4MCKB1%HY|^^Qxn-3v#4qhmS*GCI?jN49@gzNm=C?W(_SkoFMry)# zN4wE*SWowwm=l4_v}h+tKefP$dg#9O+pn%yR%LGad|`ypX7xhn4%G2ZyJZx${-sYs zev6I$a;x%Z*(X{CD|{qc^6<|N&@pOsbRrKQeyq(ReaFx%TVvcqX1R@A)y3`EE3&V) z?73W1U3Fn;4+SIU-W~hPFZOG5-Ild?w5PNiUL7qGpKzJlu3snZI>!b5F_{2;aGvx_ z7}cto2&R?eOru%{`Xq%S@-^xZbO}z<kW+NU|P} zOb(Ty$xBdgjPC1WD>A}>K#h|K&8Svs46sp5H}k^a-ehLcX=VtyL`(0y!aB0Z*nBLZjiQGh2gJ&q)GFpHI#n8-}zGPQaoi|y_0&4M^A4u=5{ z3`3HJM2rlLVWNqmmm?52pn5__5?T$-#EHnY@uZke2jjGN@u_uE>3e#Op-%;%2g``) zSZpT5Qma}0Jq%<}0wC!N=r27CGVpW4iogxpcs+^-CEyxzVt)z@eebV}*Q?CwU?>Y$ z;c5UifLYleO&KhahQIePNuVUuIqVcBiB!ObOX?_^fq67w;Zy_O@yREVZU&Rn9gBBA1vW2gj4_rF86-yCeQc7 zQm~&eghT=n5(lIZhYLe&n9Y$ve3_s~SWYaT)v!2C&O zQ}33F#FzFy^**Wy^IoFS%)0_c(B2dbNCJ+T;{;s2LueeLQR1L|^wsM-JMkB_AY^le z2nQ4q8|Pr4oNz8fr~nJ-#lulH*9#E}yo4XK8?*{C5z*s*N}waq3e=}rE1FyHO1Xaw zPmIG&%K#K(Ky1dJ6=U^f%rbS2cPWcle-cGx2J~w)z^~T^+85}CtoQA(Pc&2G`5Rw- zi}5$k0H_Bh`6PV@`K;hTO19}e(uXktSZs75^9>Y=orCGJSb@cE0!C|6A`P004R>004l5008;`004mK004C`008P>0026e000+o zoVrmw00006VoOIv0RI600RN!9r;`8x00(qQO+^Rj3=9AnGU_s!ZU6uWZ%IT!RCwC$ z+ih%9*Bu7%=O4!}v7O+!NeC}-iA{LP3QYqHu@%%&=(-4^u7A=xRcj~IR?}K-42=p+ zAWiBRgq1<74n8nVLq(ft>88I@urH$T zL7~oBV|j2}I@X)!Tttfd>LRfAgg*5*9RXiC%i7e=Y~Am zrRc$$TEZ6x`mRCdbf{J3+f)4A}w~l|c?FZgT+3gWDwBHj%uvEPa|w zRew4s=DLZ)mx1uXbX)Nrtnv^M0cN@(KkifXfR7VS6R5LgbOws?p#2_ViW4v*kf(YT zJvh0TaG5YoLRv1U?H9PFmblghoF9PAwok1pk4>xm%!BWUo(HLiU3>5S~(?3Xmr<7v2SD z!1g8rF`&i?SrJzB;K)n@(YzkyULS0(A)+xLZldJwzvryVtOI<~TtRnV93`$KWYuN0 zlIE5=o}KC8J9m2YN_ua|$A31ISsvWl;ra@)vvG_b>^YxqyX8GN7$O|;ydLB%Rex@- zAvgj!2w63(=7DjqhwL^`QYnyi!|EP{?=I8#;LLQd<-x5Vu5^(v`}Fn;pLq}ix?<_J z;`a+_54;&Aee*rY-}yIA@}qmnk7nhpjr{9_{vn|23Z&(drU&C)mIqcopKyB}x!O4f z58mto{MXwG?%uB-xtgV^Yd`>yUw=c>gGxZQW+GH@fV2m_VaN-L*Vgz9$nb;YnOW+! z!Ob<~BOq66Jb%DeH&Y3LZ9)XHQ+3)e1}qP(6b%2=Os??i?H4|7tROa>1d!4=^7d+S zv5?C%YeUV0354uZt&R33^4%Han!*?AM|Wa}mhzR6W=>+48_j!SJ~dxi+Bb z!An8nGG@!k+HD3CVQdvEPc1iDpntiX{HdFKC!oGx zNIV&!J=_ntM>IU(&&lB*l27|JJviQKd0-`P_*4bCr$N($7pD-36cCyQzV#MxoM7*O9Y@cXqywE(BX zc|FK}J@H&CkxBs{^gzD(4@FFNHIf}m$mi=V53J-2+oqCyT7T~}bGe5{gI@B$B8}fK zY^WgO0vwG%+LIa{7#^UxCZlsvGvHb~Q6s>+2~7{;0=P|e5Be9Dvud^r=74fKF5j0e#d<-<3z;w69W@BxT=bGF+GE=jp_stl`eb(<6l=5G{36g3yfuCdm0000< KMNUMnLSTZTMAf|j delta 1338 zcmV-A1;zUL56lXXBYy=GNkl6;37{~Eb+S$)6v}H;c3QRjd2ZkXeE`)Sig8d^8 zX-sqRe!vB5M?@ZS$g9(w;XzXs%>`jNJwY(yP6VUHgK~S6dBBo^LJ!85Y@#5f z&ItzsP$u|@Zso?(=6CW*X1oC&tjkay^mY$^D1?@P%ma#SLJwX@fO!^}YZZnpu)_BR zf{+7);MzEN&o2n+oC?Q-@Lh=@WoB-V zkxa0+d4FMn4$nFSAuqXMg$~IKCE*IJy@B*Z@H3Bc~2^=cEe6Vn@fWm_9X-5MtG1T^x)Vq zIFTjvV0RL1@d`q!o!pt`;Ci0m6`vaH;8KbnWXksESn{{5|Ay5H62{-4>w- zt2O0;s-E;9Y=NDFBps>-(>0+7OEsv}gdRMn8Q{St%>WNB2BCc#EY<`eVGYWq9z3RT zXMdUlO6>-CP@k?m=d=%Y+~o_Ixf+l(9VHqR#0Wi@ZG;EQH8?ZEAPwdnO&(Rw$O7)epr$z6mx;HZAYhU|~N4JZSYB;K7lR zFu`nq2c^2ugBQK_}4{^mY%b(|=*DWZA1}5|r7X!54YR%~2+(ONH}eBwv8BiYdb`Q1; zhHAk)kaLehI1%;-gdQ9Z!Hp@B^GJ!XF#(Pa{jWVZl@6=z{G8_$dQfEJc9rDqEPslJ z&ZmL(LJ!WCDi8XC2aSH1FKPY1m;v(~P%pW=vsi~ic|s3fPKPzg26^y~_=L}d=YegK(_*8Q2YtnZZwvVS5y=hv^AB+)#|}%}l3PSpIG7BLse+JZ zzkwd?l01{w;vj6MbF#EwSd|Paoy(+YF*LbLA@EOP0`@NlLPp1yrk)94#H+1)C!(S*9@@Qq*6bTh2zPiKXT wwtPXzi7Z?96tG$_P7Zr@4v%mv5B{P40vIYTb<4SS-2eap07*qoM6N<$f}=`mHvj+t diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/toolHeadScrewdriver_OVERLAY.png index 4a65b594014d2c136b874dda0bce681f44066626..efd85f140baa014b69a2aa28d28438e3b5196982 100644 GIT binary patch literal 4638 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 literal 5035 zcmeHKc~lcu7Y|lYP!w9(L}ZB7iaOZ?$w*L4Kq5v$hzJF(lgT8El7(a>0i`Gk7AY1* z6s=k*2wIoA;DU-20V(bj7phVewA5OuR$IhM?Mpz!)1LDk&-wbF$(dy4zI%V~-rrr4 zmnEGw-O*vB1BF6y6o-mr;M>V^4YmWH-j83P6v{jIQ{>U43^hS|gHA;x;1HRt$06KI zs3;Wk^#>bb*SC!yn%NRlJIO{oxXN&JYvbgCyB9x`$nwdrChxp(_MAs#&{EvziTy8z zwqLy)yEC%u7rR}SonxlN`K&x=n{(&lu2I}B{pI6r^qkKVO%+w{?}qY^`)a$-^13|3 z=`8j;)a%EPh}=;J5L!u1%~i zDvxsZ)RgZ@Z+R?aSzF5(|q%HU6x+C61}Hn(?TNj z3)fADn|5zsAA9fS_O|Cg?T-x?bh6^1{1A7fb>Eth(Kz)=$x)Az3p`E9Ms>ODMs(T) zy0l1=Gh7zdu=g@!K@v0QKChv6=r>Ka0}^8gU#&k}&?WMDNIg=}^=Vu9y4%Gx)fQK# z)6nJ7AIxpy2WHU>X*K6#j@~}qGPd3Im|K1Kxd+aNPX6Hi07~jOHLewEV&!*5A3FJ>TtVQJ&L@#G7@ubLQ042|M79=cjVDy7ZYHn-SZwUJm;<<~pj~ zN=HP0ApC&0MD5~v{_EJF?jze5N3A*HX5Q{oFAR96R`W-0NLIa9cfmMTd42iT64oPC zb3>}^*c|VpGp^6t`Nf{h);s!ULs`VWG}95g>daMT*Q%3SYrm>vRp!#3hun@SA9|%R zdu>8|#PwxgvGQ$8Yf5)NpWx}!9DCr=L?K;0W^F^oSkH*^(h(U`q-~AmALm}c@{(GD zxl ziky)hSATr|dHR#e!WWr7)&Ac-Q+Ik#*;00X;6zAFq1db-ghHuUD16!WpxHO4t`US* zOGjjcM`lx9Rwg+mek+|E z5jkzxh@TV7MxOkAQFyc5WWV)pOQ+g#hi$fv%^LH1j}pm=pnwX(b8}}_(e6pRYT9eC zadUH@uDQRePPaLXHY9+(K*fGs6QS6Dxps!z!2>&;!=3BolF}tU?fcIpXCI8(bMOyA z*N|%4RD9$8vXI*o4~hK+Y!*2#WW65v#B`|R3@@ak~$^OA;63P01Zx}kXe(U zH6msK)ryONdyAM(g{&&%LIE{eB87xH0}gR$92x@-HWNuKYM=uYU{I2t7&Yw2%c8 zRp=Ix0xA`(LofZ)=p~Xqc&)LQ1;7X0jOyu38iTIU(ED2$$>1aa((BN_S{UWv*NiU1 zjk-k!3=dAiwd9!o5K64iUcbnYU=2r!(eVUa15}M*SLSP5P8Un0eHIo9)PzQFwE|?n zrb!a2S7g2Bn`OlsPJc&$c^~d;+Am|bDg!Nv1QF@5MHctOA_3L1KcduOgc7mda!@|X z#{5wjL%B+r!&50>9#g@GnK;uA<1_evEUvO2lvrydQ7wjBpa3|H05~|VQt-KaKbVUu zP?&?UlrUe(^M^6ElB@D(@tL@S)ej=vK!B=56Z(5)fl>k}9;W0dfI7@$a}_X$@27-$ zetsCtWnd_S!{f1)JdPDgi6J36g9ZiZBs8cRr|Y$9>w<-FBuFY2P+2s_D~U7#B~`#c zK$V~v6dw6%MNVk&ND{Ts$@KGQa~Vt?*oejFu=<%t;RYipMGGjCL1XuXW628wq5;gJ zmO=#pR#*@WA~fJAsWZrRx$;uB=C>|2(Aeo~?&DndydfHGKYguz6ZEIEUVu>BDh zZz6+%F#751l!Pkze`#B~2MXxPc_?87`zKpPJuMZ9C-yw`JSGsiWOY(9Dze$D_Je sdT-r=3o_K%+P&U=%5cfLE{@Au98X6~I# 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 w?IHlonE{B`g25ov&}}Z2$lO literal 4831 zcmeHLc~leU77uPHLd6AKsAdRQWtn8MlSmW{AVDJ#K*gmpnM}e6S(r=+pcGe*+o>9N zt5tj|h$})BL~*P8R-YS!S{3_H6lAeT9|G@7K*ZCY)8jd>|CyYb%-rSo-TV9Qy~$)* z#N-K14#OO1G@6qvG)MtHovlajUf@h`XhUhV?p|rp(;klC_2Lmb63(`^ zl=sef`gBNC=$s!X-sm6hz1OhhNnJ`+uGgNJ?ew|*{bW9k_Dqs4Z&Y_hmW3O}zvD;}huJW4zqh<4B;ZEGMRZXrBS~-r>ixp`C20 zoVC6t=b>lXBl-wpeW{#T2wMo(VTp=eE4q_2O4ruHuG4iB6VX&-N==WLZ-#hGN-bV&9<`Fa zs$1mS83&yQH%tQMU~%YTU-poao-ANKbgwZ>6!<2HZK5IAN^ zh&f;!le_x#<+CEAbME~07G>Ks@^x13PFYO;mgBAmV#zC8j7R-h=jSNBHcc0Bk16k- zU%O8uG_$_#JNV4*y(0(vd>gjcWvq|y)N2PLa!eKSqXk51z4`||zR#&Vd-on#nD97k z-?n1vAzfmA^?2f;G1aAEbIVLOi>pgEp8P8DCwFvLmPbFgu~%}0b4K0EuJ6Sc@2z9- zU8+NzPO3Nd*>Zo`WHs%Ad;g{7LGzuiuZ^X`mW?X9?CUx+W9Lf9#CgSAwji!-ndz7F z%-TT8(hTd){Cl{t)wc+_by8Ndx!h+?dh2%u!LR+6aQ8-Dc)w&{Q**3atNiKIa+Y*< zW-BHwZ82SrEX!9kc|3i;D2rZG@qj#WUfSHSzgF|C$nj)#TanYL{uj43*NWP1YMZvU zY2LNXeSfpAsrW(L@sJY7mS?D2dTVx*aJaaD=OoGWrqS#c6H;k}Oe+1*G@waWYwdr&dtP=cIP3(=t6*u}*^2b7=9|BrY@lVu;#=-=?c$GX)e0GV<7^k{q2AC! z=O9m&dZ^K|E>oZWC`x#D*4CT#Z<_NNbIvFO0z7}jGl_wE=Wu;lugdgiqkXP=*NN&1 zWrIDxdw%>`om-{lYPan}`T3hupN-C&R;Ap%BKEUloL`KFinuMTR(3#9hopl`vj?;Fxz`yChvH95|FIXvS)pKJ3hk6*;+dBnxJ z6&BXSUm0O2>h35Rdc><(v3f&se>DW<%1d-BA2h|jIp zrtRi;rpiWr_?T04GLOtYjQlzm47W4_46$kQNn%W|Wuhv*5@)7p4PeO8X#V3;3@Da> zQ;-tZ5IPCtP4OuPM5rW;seCyiH%Re#A~cP}qtYfvV`&MPNW~a8*12qc8nn0h>?VWBJ?`Q ziis-qCQ8C!06p{}KCMA6?}XPGJ6HgGuu@P1i_Jt>S}m)qhmi_S1|S^){iTO78hjV9 z6u41uA~8HT8P`!BT_IFhr@z5OCfd?bVJtim*8)=`Se5uvZN|V#E*A&sF_SesS&)QbU0oz&t;c1EYSp62=8;6cLHIxBwM)fs*Nr6sp5;D--}{5&(zoC*raNDilUl zDmKg$B0L!7iZGb%$L9zTj!5Xo<92}vCkarMXkyo>tWYWdh4GbsA`!xdl_E7C=3yKh zMo}(6Mz~x=fN+IMK4ybbVd4-ysYStd5?WM)vkW?oO<^Tm92g;!FgQ%)qa-2`rPRPd z!jPjF6dv_a6HRFGCIUQ0sxyFBqNrRI7;csXuUpB!m!2!Sv@<|a?npIltP103J0JFhbubB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/bedrockium/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/bedrockium/bolt.png index 829db27426ec03a731ef5ae0d274567c1dfad28f..8802a9de5e1a6fecd3231cc517911a42fbc18580 100644 GIT binary patch delta 187 zcmZ3)c!qI;WIY2ASj||l7f2~2dj$D1FjT2AFf_Cdx@v7EBgx`9!5T~O9hkVfI=3Y zE{-7*my;6~ND4R_%#;9vmK@g$Aq6IzKOUHIh6e=pKV5Ub#yRxxi?hw^R=czMx^z_a bu`yŒ&I&bxO&Ll`_={an^LB{Ts5P=q_* delta 145 zcmV;C0B--x0ipqr8Gi-<001BJ|6u?C00DDSM?wIu&K&6g003M`L_t(IjbmUK1@r?V zA|n5>i8B$a+1A#UK}bjlt08y+4-e0OHa52Z+}zw)H8T^k+0oIF;oG-w46k0jVkFsS zZ*TAajEsz=J6lCX<$q644^C$j1;`4p5efjC1R29vdy8QJ015yANkvXXu0mjfj!!q% diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/bedrockium/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/bedrockium/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/bedrockium/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/bedrockium/toolHeadScrewdriver.png index d08d1a0207a360ab6cae6d4301ef0befac82470c..7be220afbdea3869ab20fc5bf44450868b25cf37 100644 GIT binary patch delta 221 zcmey&_>OUcWIY2ASj||l7f2~2dj$D1FjT2AFf_Cdx@v7EBgx`9tKInV(SxEfI?B8 zE{-7*my;6|I3=Ww4K^rzJiPyZLPCN|*rfkopIb3A3k$`60#eMzJ@&CL|9G;owTN|8 zwRFAIxAarGE&lE}SF(|zfq{XK`HrvBY6s370D_v|BAIpy3=BUXiR4!3wJZl(!{F)a K=d#Wzp$Pz>AxPK& delta 226 zcmV<803HAC0rLTn8Gi-<001BJ|6u?C0J=#;K~#7FbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/bolt.png index 2b1e56eaad6aa902666ae2eef44fe5467ecf06bd..22e8e6314b0a67ff19570deedbf23002113c6c81 100644 GIT binary patch delta 1742 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 O0000i5o diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/toolHeadScrewdriver.png index b66fbe8061557e308e8717c2f93c60246e5985d4..9f8679b22ac4b62d57b90336cc79c27d3f7ae1ca 100644 GIT binary patch delta 2806 zcmV004R>004l5008;`004mK004C`008P>0026e000+o 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 IM6N<$f)jmTE&u=k literal 2959 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 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/toolHeadScrewdriver_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..844e4365af706bff7ff97e32b137a3af9a0a13d2 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/exohalkonite/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/exohalkonite/bolt.png index bbdfa256373e96d67e3bab47cfa0f196bdae5b97..6c0075bf7c58c96812d8aa6e2982120d77742e8b 100644 GIT binary patch delta 945 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 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/exohalkonite/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/exohalkonite/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotexohalkonite/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotexohalkonite/bolt.png index 3c63df6bfdc419c7cd2bfd09d0f6278dc973d314..8c753106aea56f0f85c2b02efbd4d78c4d616ddb 100644 GIT binary patch literal 11749 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 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotexohalkonite/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotexohalkonite/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotexohalkonite/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotexohalkonite/toolHeadScrewdriver.png index 8004e42d5298051e1a6188822a682e3403a39f7d..b6964c0f18a4aa5520dd40ec4bab3e8087606296 100644 GIT binary patch delta 1277 zcmVfP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0PRprR7C&)03>)x2DN4xc~2c-I}(_74vby|lT#vlPatbS z4|!Z*!Erl;O$VM-PMus6n@bONSuCq|4tZS@m2o48T>#DHBY%rv4tro6hgb=LT}*~) zft6;5hipB^b}*h@Oqp3fdQnG+TM>n20OI8gd{Zl(bpXoc0IgCDfK@S~U<{*nH_*=z zh-o&<%0&PE34~xCZbn9wV*uUdPo-}@gIEQkTR?_d0=jVllvx3%WgBEb9A7#gflLa6 zTx8_`QMu3ykbh+xb3_4`T%yUw3V>P1_wx;*aSD=YPqoXQ#K8d7WdNyA1dvf1cVz$n z|LOXAJOBUy0d!JMQvg8b*k%9#00Cl4M?_8;VR7F8000McNliru=nM=188YfJnQj08 z1A9qCK~!ko?b~g0(m)Ug@TM390|pvVgrc-4DrzJ|#D7$z_)wqy{$Iz}|NqWp=O(n- zAiTTbro;WZ*}L4{9UVD+JP+H)wOi2k>$joZXx@Q#(89Lgz6ff@@S(+zo17TJRaNj7}NOb=y7)L<`HTh6I&h) zG2iCL$Mt(WvE@PW@pSr(Jf15aFPuDP#yxm^vkBz`@))s4ub{_yxgPzfm`8W0%|{jU z@Yw^`TeHba#Up?HCOvRHCOlqQj}OhGXnefJAAeAGd=&NI_m?TJ@5$rz;87`$2Danj zn|zNsdtiTG@rVbUKgeTVvIot#v6fGpJ=WxrCLihd z^7znWBRnp1JyQ1Aaz3@?vC1euM7a8G3xHxX0!@kADyI!OlH0;~rvsm`{aA!tta$FG;oHgVz(@ z@|r!2%`dJV4dHP?{qsFG!sCZ2kB0D|@omv#&GQSdS7^Rvk1O%K{50*+6&_sAW)EE7 zN2*5$|NesaKa6?M{1R>R>-(CA*bgF)NO<7)rF+o(`)t7;_ zJ}>;f&mMvBzxSD#<6}IX!YB&&pQc>t9YQ7Hou7Y zV2?V-2Y!FkpHNwU_)|9z?L4lyPiXBvkmBLh`Mv_~7iss)G!JX_Z1yR~GabS@-w{ri7mfP*FzS00000NkvXXu0mjfo9cFu literal 3980 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 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotprotohalkonite/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotprotohalkonite/bolt.png index fe66371930997ea352989732a6d639aab786efab..75f19ac5026c3fa4ceb47183d9ef6c75156acecc 100644 GIT binary patch literal 730 zcmah`>r2y77(TnGP3E))IZSP}hzu=1^g$vhZ9})z>HH!2p;{`@ry67+eXwB{2@(R) zBnHW^M2n%8_Fl4fq+Rw|k|p5EX31A2Kc=RD`(eV=pAy{ydCu+XSb z##op>O>3eWA;b;|70%TJUkOX7tn;II!xLz+k&-0pcUu+*tz;-(@4tM~f z^#)qe(HP(dwtyCFy%MTm+rV@9o3TYSvbBK7fxz4qU;&`cq?y!i0KWqW$tIlcLQcZ| zY0K-ZD*Vt?<^5DL++H%!_IP2eY~+n~u%p>OUNh16(9`2yo~fO3*N(bgFMTg|Hx&23 zpm8w(!ffuhF5b@f^*I%h6InS!9|!Vhew4~C&w20qe0wa*zfywa z0vCS)!bwCyR5(w?k;_XPVHCyBJVX-{GbD~E5~*N8s^Fr92u8?OH@YxeSN;+9f9cAF zn^ZK=F1jj)xR6?KRVeBr_#nhlM|>t`a(liwM8?LQ;DI}LzQ_5^y?5~D()`?3E3)Um z{jWvseKWrZ_$GI_#}yv@lMm)1AdCo2-IjM!0=GB=(jo% zaV>=0IN){jTmck0pmUo0nInu4y38?q>twau^lHbSWcV0Gci7XS#&QD&RLizXqx zVd&|tzlDwI(J6e{$$#%4fTmXEEkK3l8nek@y=EWH1f`36h1{?`jIwizrB8G7Y|Vdd z@LNq26{w)f;GtpAOh~#=`js2Ehfpe)kQ&Qm9eCSk1l%{TJt_dGbImH~MQZhEH#d<; z;>amu=0he+NAVU{j)Oaokd}foU~e7)pLf?c24ZpisT^ZrWHQT%7sD_d9Ub)>T%d%* z<{t=1&EQN#zZ6N-L}r(N=cOt#=ZIVMABdPcJpaL1krUtXs1`;6)Pf}$%&HBG6}ha) z`~$I-rB4y+0jU50 N002ovPDHLkV1g|U_A3AY diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotprotohalkonite/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotprotohalkonite/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/infinity/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/infinity/bolt.png index c3056f7ad04c328f80fde923f07707afb77d1699..62dc1cf05bad6463858fb2b85efea4f0d2dbb5d2 100644 GIT binary patch delta 744 zcmVfP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0Yp$tR7C&)0N#-DyNLSbssHDt=(?Qs;kNwnvevM@>F3?y z@5!#Z;;8TGt?tv8(c+H$^_cG1eA?o3;GXZnm-Xnl|K_ph!+)#r(ai(;koeZzU-j-^|hD@$B#F z+RxD6%J1yY>f5~7-?94jzUrl>S>74M-hR@@B{q%+K)oa@0V1NJr|67}1IRF3v0d!JMQvg8b z*k%9#00Cl4M?`B7s_}1^4XkSG}0ii<$0mIO>)r%*`!M zNNZa=q<^E+1?lSUfw+77ApP|#VPgg`dj`D_-_S5*WONKNKH-N1CZ`}l(^a)Hjd^Bv z4l*BFfGjSBA6t|e=a7rbE6BC!s#>|he0z6q>8i6I)?qb8NXc|ntvuA!wWc+ut7^rjuCgDp z9}Te|^8QdG-xoD<{!k<5Q#EpbQ6u+THS+&MO&N3L@d@($@(Ou-|A2gceM5eJtB^nY a9{L}i$wrV8Ez%bN0000AlC>Za zZePbmGK;!3E#Gm9bp;%IBzqWzSbk)>D<1sU!221ADSfh`pj(-sveXw3hmA5q$H%)( zS3KNnJw-n(-(QM@|&XXnV8wL4}Q_Y+70m&fdvna*-pzI;60@Wu2i7CCS!>=dU zE**=9kChq*y?+=xbz35=t|RW%u%~~NkV)qe&XO|P`br8P829M|l0odXUW)a>wu|Th z*m)&Uh<{`uGzMsFIpSf@(lAOA9ICo_I52h*pO{cJRYE3O5no4pP_&AC#~ta5^a07D z52|4bAGBNy?Q=9Lo_Hay>mrIGC@n)SJRXmsX_`dX(SH#|kz6=1H!&I6=x9y(j_YXa z^a05r&c2_*2eyl3IKg4vlJ|k!luqS?G&OtOwtUS$eV~7$4@d@aO)rHH{@JYjPiy`` zsxTpc&IhhbAJ7Mc&mjgu72<`Q&NrYf z0L5t;nQRnbHdV|QC3Y_QwcF?ib6D=qN`#x2@$Jhk)a+|1d|+Rq4}O#Hchg9yrDNby P00000NkvXXu0mjfgJLQ= diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/infinity/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/infinity/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/infinity/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/infinity/toolHeadScrewdriver.png index 118737756728b0f5f7ef27d9a34d4e5d4786f697..4c0e429e157b5abc9752104e30e1f5fcc961b922 100644 GIT binary patch delta 1176 zcmWksc}$ZB9Q_<~xP^d6=AwguS?1;z)MZl%DC$P%aFc=Jk$E6)9kImQrZx_mv*>dh7mrdB69P_mbc1^sab2e+lVD z5X9vmudN;k`th6X+X&*^a)QXrB?!Ccl&K|%)YSx`J4g_rHwfarq???W^#t+8p6Ksl z86E@9X5;i}Tr5CxDvlk-jY?!?AvFp2T5$Cm&Xaf~!rlA0k&hk&TDkV>a;XXwbNJ~Lg9rE*$lZloN+`5gTKhQmZ zre^0I7UU*$^;kId>IsaiM|FMNPBXe_gGeiQ;K03EW3@q;?=Th`r6?{%Q4#Lepx`Pl zYFA+#8KCtfw!DE8DVG(SRPBRacLSLdp%fb1oBJiOL9C6XB) z7gn2PbaYxG20+uaZg@ze(U_f3xS*J!hQ~)btkgd`724Y&>j$52YiPij#w8M&xm?Ux ztV2Ua(X&aVQmfVK+?XP1T4tsOv?J*2!{}?5SUe*Tz+|!w4jP|5GZ_q13WePbjfuwC z7}RP{rcJ4w_Eedgg3)Nw>nDeXkeG_ZM4ZjVPe-tK7cO1LsZ%&|2!B3A&IP0;;Xyl! zOK>?0PbP4`)?HrsR0fr#f0|F0-k!!i(`3^m>vubTa~dzvPma5dC(Qr0HQveg3~Wxy z_NX1iCXM{a|K!lOTOybnTQ?_rh<8flHioy>$A?(*S#nsn%p*UHjMyBzr$aBd?*9Iy ze;4&>1Y=q7Ck@Y|6HfG~q)`cp35C%^wL9(7110P#_PZsw-DC}usR|6S+R6+QHyw68 zrEs`Ht%Hu)eVg-(f!f(egd&Vck6tmd7TU^kTH@H3&)S_1P3hSzLi$60a*5{#Y6@xjKzj#)pSm+yV zkLnMng~vn=zofH_5BKfd|G}%4U1J=+W!dQrui!73MNOpNwnfT8={qe=g>fjuU{$J2ga&+=CH%;v<1 ztFD|PEB{?eVMt delta 954 zcmV;r14aCy3B?DH8Gi-<006!I^LPLN1B^*TK~#9!?VMdxQ&$v*`IWutU8i+AT(piY zcDzzVtk#(}A{J|h28>m-Fho8pHGE2;LehX~03ietNJ0|g$w>k+5T0H~yxPl)Gi0qF z@XWb+pS||ld!L2|#}pSY!lkR21HSwMzG;FRw*`=<^U&N3_kTPBNb6;|a~FC>1(16# zc=QCG`^_Ph-Y)pl2d{GGklcJ9v9$=xo0vl;(_Tgk`wZCv$bD;uj!K?ij|7k_c7V&( zJPle-E?QgRhD#8j@4khr*Pz2KfV5lzmkSN#&u+=4;=1;_IBv# z6r}Ka3*5c~kNO0Vwx7W5hLLe|NcBM{JR5|$pgE*GqJRB?(|zFaz~f#)l<&4dR~HQb zWez#%{tf#3VRpeB^3K}_lamnMFozVTCpZd)ASG$_Uk52A5>Praha|Tnqhm4PGzI&I_YFJ`SNZb4YRA z$8j(SyMJkO$lG9mgLoVc%Ys&aJBn@FfFMALMB?K?N|GpVCu6J^^Q>0|kiXNL%p9r@ zobH3^X<3xZ0|PKI0im!tq~!Ba_4{EbVGgnUiyTIyP!x3OnMg#Q!c;2dFdv8^S=%Ok zB7m%37X-O94;?xw?Kmg*qf+#O8Qh(mqfP!EEmt9|{kjptB%4g6Awrx{6 z5ke9LTYcbgA8c*G&W@zP4pNRpz_w*kE@rc5CCX>i2OkBZk#n{WEK9a3XQELG`}-PY z^?~|8`vdI{)CcMVoge7@K<5WKKRAOv(DQ}b?T?->d=R4N3w7cHy?^lD_DAm@ykC0% zpnr~hp!XANO7AD0F1?>vM?TQ^3$@!HeZO$3^!-8|`9R+{)|9?)JYD*}v5tJ8|39dO z=>HE+mHz*rj(pJA2#rmG0Dbxie0~ltT@yggeFhgUz|Ef}oyvJ=xemYlA%OhQ3?293 z>9k-R($xk}`r*Z%V6r*U$!0Lj%a9<2!!sE-J%tPp-wGf%?H7E1Y;mh1fP7v0hp$ew cKlo7n5BTs47v+pHBme*a07*qoM6N<$f`&-Q!vFvP diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/infinity/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/infinity/toolHeadScrewdriver_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..844e4365af706bff7ff97e32b137a3af9a0a13d2 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/magmatter/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/magmatter/bolt.png index 89fcf268793a1efa929989f188889f23ce75b577..ee3c68d8e070638881a7386c5893d86f7f6dda5f 100644 GIT binary patch delta 692 zcmV;l0!#hj2f+o98Gi!+001>h84v&f03c&XQcVB=dL{q>fP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0Vz;SR7C&)082_rMny$xX=+eVP)|=!WMpJXNl8aXM~jP# zmX?-UT3T6IS(uoZOG`^`Zf;OdP&YOr*F zJUTmZaBx#nQ&dz`E-o%aL_||kQfq5#VqsxeS65e8S9NuDN=ZpqR#%LSj7&>RW@TnD zFED0hWh5jdaBy%|RaS?GhcPiRcXxMQU0q>dU_U=UGBGiQg@rdaH*0EZVPRo9IXY@; zY8)IKe|~;BIDa@)Q&VkiZFzZllarGEN#&M(?rjndR$)O?|=OmIt&T=Ru6yN_#bpOBF z7p(oI%;w(^Rd!XOEG;k(HU3e4mOS~E)f)0UV%z@T2D07V aL;nNgGZ)C4$$L=%0000pyf8Gi-<0007&=^_9C1E@(vK~#7F?ODxATTu`mlY&VsMxrYbl7(g^ z){Uu&^`{FXCe(&TlO|%ojo?DB1K<)$AIqiAqIt zdPWeg_sqGstB7!gG0DvL&CDInoWBdkUl}V93`8jNFZ^P#1CW$4L=p+`4v3x!cwY9adxVR|A zk&h4z23dD^H&`qdO)>_O%H-svP%tUjFc=jmTLnU|L*&RLdqJJm@bEAL-cHXw9;UW& zwOV!mcV}lOdw*J01;37u;qdTKz-wlJ5#3EqP+wn9k};Iv5tS$y+39pbu~3Bcr?eDD zW-vB3#`shQrBX?gjDe)m+}tb_ObRv(Mg_`NfuX@ca%7Udpw24%Cd?Wd8sLSmLvUhJ zgVn!VT3VRNRB<~WeBJ#fbfutBI^Z42Y*s7$IXlBW0)L5pq9iE4zl}zj&1M5Dm(k7Zw&4Dku!< zNC$XcsDG@igoDfhq|@@v1v-$*^z^h)Fe&(v8;tZHQw0(uBjm{ZulazVqnX)khR9Gv za3bxpyXxRVi@WyJ>MC!pjDQyucSQUg9UbNS0~_rB*oVEnJrXN@1iqzVR=&B&WHM4R z1|er8Z+koQ`~7H#-S4|(3q^ECr9KMCtJP7~=`ss%+B3 z2I9yJUiS2`CVq2qd3mWxMh8*}NN#bZ1jArdpez-@wUP=XZ6+mHxmLbUChu{`&9;&p ziGM`c#l;1ne3+lVM@AgEI->z)e0-eM*lVD0R)E!1N+2VKRHC8J-^Xt*On~!2NbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/magmatter/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/magmatter/toolHeadScrewdriver.png index 1354d0b76f8719c170cccba04a38cd35f15205b7..d0add842f3e4a668d530948753e85db11cea8ed8 100644 GIT binary patch delta 970 zcmV;*12z1q4Alpa8Gi!+001>h84v&f03c&XQcVB=dL{q>fP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0nSiNR7C&)0BUJzR#jG)mzQB+U{q98UR_;HOidyoA!=!A zI5;>_QBfNk8(dsmTU%R&g@smDR$^gdl$4ZvdV4oEHezC8e}8{}OiWBMFfb}9DNIXD zS65eASy@R*Ni;MxOG`_JhK5s9Q+auLR#jDZc6L};SZ{7_KR!QQTwPmQT8D;)U|(N0 zHa2{Gd{ifJ{qEXJ%($U|@iMfTE$HPEAf=Utmv8PJf=Bo@;7qc6N4|n3;@>jA?0U zXJ=M418BHmCpq z00(qQO+^Rj3=9AnF>^b})BpehX-PyuR7l6g)KybLaS+B~1sfGGKm}1yM8(9w7VK{9 z#BQ(y3j@3B<9hu&ca9G1-7{y-%)2}PT|d8Hm4Cm876$~vLBS#X9vTKq!Xw~FsSK7& zqu}V6SXiNqV}SUC-!<^hrBc(0nj|<`tAkTg^>CUY9abh}z?sG@I9r_q=jP=zfQj?< zb`=!T+M;4u7ifk{O3T<^c?DcqRSjFLHE?ZRJ=|bz6a;GW={%Y(bc>`F)?3@)_748g z*?-jy_w@F`a+?Y69~gv(h9wLzBG?}<*Qj6~V-e%9Xo7jWC%G?Eg8A7syg$=3v+$hG z0MFYN7+`V9r}J1|p~b3Icx~MQJ2#y0rgjV7mhrvU@33E^V;A1r7aa5h?w7aAZlMpQ zF8D~#`*G|%fvZo?VE4HjzPP-CJ=Ztz?L*x?18nvBbRG{%diZe!o_tck&oAe&#rz64 sCceS%A9mQ~`Gk`dUkvcgd;I760fsC*6r7>~CIA2c07*qoM6N<$f^k`k&;S4c delta 1571 zcmV+;2Hg482dNB@8Gi-<0007&=^_9C1@K8kK~#7F?OAI~R7Vs(BPt455j0@bCf3jd zYyp)>Dz6wr!&=l>Lni+?{jIcfT|D%-p%>!hi1hgocFDOG_;RAshhPPtKmD=g)rz$Bx-UWmT1l4)t;(7@+dc@o_RYKL>VpM=WN7 z{z9UnqUfnpr|9k5w>862q!}6-N;~%-~cQy zEkS5Vh*=;e00>fBTT5nU{(?7eW+CnVeN7O>dHzjgB!69AUIAbht*x!>7i2#Y2HdK; zriRSU&BAdKzkCT4u2*=ec^(oqb@$=M0=^73SD@PsIe z%5b*8F0qwqWpxz>1_l)E6cvcB3ksqK*(}6;LS<#8tgXoypp&uu_Vg)nad80;cX#OS z?lx;ojQz!Nad9!db?X*QOG}f0s50OPDJd!B;(x`9U~6m3yY|}MIRY^;F|?|xN^+gG z*or)`va*84#zqKY>8s^rtT)N;fPesMZ*LEW4<81+OB)+19Sa6%(A(Q<*kEt`y8*E= zv1Wy1!T>=~Zr->-_wBQSLx&DQZC$Ob4ceiYFu)F!=9U&>#l~c7dkcJhd{vpKqMti= zj(-OD`!h@e<-e56+R8Fu9)>U5wGn4$XPB6n06$+}Sthcm25+Mue0D;^GiN@A$3H&C zL!nh=z^$5^n#lP0I4mu_%k9&g|f+_7N*Dp{XcqmF+2?JpSxQGA^;kG zZ6IrFYlb2ORx{MjYOFI!OH_o1hf~}mV1G3OXC?NjiD1Bua3!)~w=k>y`=Ny06M4VI z?cKX~sh5`*&B@83YR-}njE&>s;;8jOYnYy%f>!oSWvt`JssLyd;2%J*_*?-5%E`@< z*h|I$os6Zoua}JcJ_3`Iuc5M{LK2Q90D?8QG?Rse1?cH{hJW{D_l`hHaxyJ1FMpR@ zXD!Ae4{Yu1prfP1;wqj1C@d@_4h{~0YeLyiWo9#xm?;652_`;f)f0za3=x-4T_`@iAmEt>-Y@*|>J{KCBplwio7(rybB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/protohalkonite/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/protohalkonite/bolt.png index 587217e11dff91a7c3ec13b66a8fa96b1fcb6280..d6375b80e55392db85159c48c4c7c10b8515895c 100644 GIT binary patch delta 241 zcmcc2*u*qJvYwfNfk8u;KNv_UBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3l zfkC`r&aOZkpoC?BPlzj!X6UeFoSV(G%!i@hnW@#0aeg4fWN(Hx7sl1$j7!rPrpGeu zYi3wq&M-fh;Y>Hfk~D?|IsgCvKVswwG>n0BE$l4#{9#e& ihmYI~Iyr*QUu1B8#4u~x+4p`RqdZ;xT-G@yGywqDe@&SH delta 194 zcmV;z06qVL0@DGI8Gi-<001BJ|6u?C0GdfeK~#7F?T|4F!cY)IXQNmJQfRC9u(tFb z0nuJC7qGLi76i5S0%FdQGEIt9>C$Dw??QHenH1mg+NvVm!D~N wK0AYVOsrQxUIK@g*X$Pf>v>Xv`QdR-T28bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/spacetime/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/spacetime/bolt.png index 793a3600ebd2a68b78f022c6f7496d8470723796..ddbaa035bb1d12f775f0eb3898979c3a090d0705 100644 GIT binary patch delta 1126 zcmV-s1eyDfE$|4C8Gi!+008ZZG2H+F03c&XQcVB=dL{q>fP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0IN_;R7C&)02B=<6AUC64=yJVGL3g!BM&Yu6FMpqHaQhM zBM&W@fMYBZIVln~77i;W5HVI8N+b|2L>fj-8b_3zRzDa)#DC6%uD63m7(uqbdT=CP zY&lX`97<>*SgNCGo|j<~3?mm0EfftW0}2}z4k`oN&u!V9~u(`0q&7*l}PcIcaEE6{w4=xuDD}!%Vn4f0<|Nq;es^5T<_WBjZDhS`M%v`vrW>it-;ER;_sJ} z?Xu=oS+g^Rn%V23rh_)!a3P2V((htc3-fSgmEl3k z+ITb`Pi&K8emfM8Zqz(F0}tK%r8Dr*?LSQJWqCN=kBCPbZyS%sqw$F5F{bCS+A~Ty za~>0q4u9Sm;d}a>=%|D7sJNdQzSoM5O5$O1FU!N}zS5@rKYP(pO@-us2I;3I=^WPw z$^8t{&vTBqB=`O1`!2`x7|A_;M>EgapOW17o3FF|=%}Vbau0pX{_<^6^Da87i-*(w z3eq1O7B%mqqnZlI{Sl-;{!r9>jE-t5B=;wf{(qAO52yQ6s5#DgzmVLYz^4v!_NOHG zN05G*bG#+FUqSk$^IMX8nfX4+y$lbMdl?=i_p&^kSsRbWqw#1wcsxY*dpLQ>?tgK* zm)-y3bT7OA#p!;b%EP<=W%GN-tUO%qW%^T+dzt=}PNdNWQXn0iIUqE_U9wzq{9_6Rj(NSGIobE3m zebV*(B=<7=O-b$zJT9Z7I(fL3d#K~q`xlP z+(kzv@i4i+h4jD6nc`k_R2L7Y`+G?LCx7SoLUR9CWxOT1mpR{oXS>{2)(~m@UV+m+oJpSbd>E2@nem0>UY3W`y$lbMds!ZBzenTIcwaOg zjmQ7Sqs?zOw26*7Add$_8(kg-_s9dz0eFm#>g3^a4`)C;E^}TVB=@Tk-7gmRy8VaG sy(|x>ds!aCJ)dTMf6C!8=Dm66Gz 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 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/spacetime/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/spacetime/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/spacetime/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/spacetime/toolHeadScrewdriver.png index 1f97bc45d0b801abdd75a71dd9000e82bd46a817..bc04e6cf8a131dca442ad391aee97d099aabd41c 100644 GIT binary patch delta 2158 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 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/bolt.png index 2353a5ff6632301db08bd4b7f52a8e252ea547a2..42301e01a007acefc7e54da7b6b3fa39f9f6fc52 100644 GIT binary patch delta 354 zcmbQt@{o0cgaivS0|Ud`yN`kx7#M3Zot* z6q2m>ba4#fxSpJ#z-w?w;uKQ=+hpZHCzo0L48FXK%F#P*j{;Rmm$*ih03B_WoL^8` zl$oAU!VplJl#`jP;F6!4n3=b2qG2>pnG#G{N@{U(QD#9&W_})nyQgn}LQ-jFPKj=2 zo5WeC RbOy>Wc)I$ztaD0e0sz1GY=Hm( delta 146 zcmV;D0B!%_1(O7j7$67+0000V^Z#K000D$)LqkwWLqi}?a&Km7Y-Iodc$~2?bpd9V z!+q2M002r!L_t(|oMT`Z1@r^y>9zl{i8B$anT45!AvL8M!w^PdG&3!Hgmu9>!AY?OM7Z77JL4Ym5MgevJ06m^1IbqMnff2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`?NMQuIw*(co_M_E)`6c0}AnZx+pk?a9mIR@qd1!2n)ksKlz8n-OJVhr5HS2{an^L HB{Ts5H@7P# delta 100 zcmdna*v~jYLYjk(fq_B(^Z!I3#g^pl?gFHN;HUHM`iYrxcJ~;0`K8z@f7m$!1!X*4 y978NlC;$2X-=0~up|jD+AnU*i#>H$rV$2N5vzTSy*nS47WAJqKb6Mw<&;$T{8y&9z diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/toolHeadScrewdriver.png index 2343ef9d24b7be70628f3b567689d1d78efae7ef..c6bb503d4c427cfbc1f58deda404bd1e0cdfef4f 100644 GIT binary patch delta 362 zcmdnS@{)CegaivS0|Ud`yN`kx7#M3Zot*Qz@c^t@LFY)wsWq-lL!ysw&%4lXD zP)M=f)5S4_<9c$!0Y;XECX0=xD5f|B9AMO1(4=-?!664728PMA7~h9Zd@cr5EnVUo zQ37o8nRyDuLGDgI>5jq-ZVU{fFy*<4d8KKI$t9&lsYPJ*KJzA=0-DDMSCF5Q Yn!^Cn8=c_k43uH;boFyt=akR{02ZHg2><{9 delta 182 zcmV;n07?Jp1-1l`7$67+0000V^Z#K000D$)LqkwWLqi}?a&Km7Y-Iodc$~2?bpd~u z!+q2M003=CL_t(|obApr4uBvG1<*q8stX)}MUJ3@cvaHkgfT$SIx+aC(w3J33=?a7 zvc@OrKb?yhBM=ctkqg+vqL^8X==E|4e|(-$e%hVrGiwjdh2cb000UA07*qoM6N<$f}HC}tN;K2 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/toolHeadScrewdriver_OVERLAY.png index d83a131004a555d47a5656fbeecf79ad3a7ccc7f..5385a7b02536e36c893324a1872a6202c066f214 100644 GIT binary patch delta 167 zcmeBY+|D>bqMnff2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`?NMQuIw*(co-y&UK!2I0}AnZx+pk?a9mIR@qd1!2n)ksKlz8n-OJVhr5HS2{an^L HB{Ts5MVc#n delta 100 zcmdna*v~jYLYjk(fq_B(^Z!I3#g^pl?gFHN;HUHM`iYrxcJ~;0`K8z@f7m$!1!X*4 y978NlC;$2X-=0~up|jD+AnU*i#>H$rV$2N5vzTSy*nS47WAJqKb6Mw<&;$T{8y&9z diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/bolt_OVERLAY.png index 9c310b5b096b0db9e70013deac688fbe601845af..405c6c75fa69304a09aa4b57005c4e5cf40efb3e 100644 GIT binary patch delta 208 zcmX@d_<(VOL_G^L0|Ud`yN`l^ltQvckS_y6l^O#>Lkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j&81^9%x{{R2~-Me>p@813Ya{vFwtAX6ri{{=3$}*P(`2_>%Uu8$` z0V&2LZ+91l4pvzYAcwQSBeIx*fm;xSJsIm$;wJ({*-JcqUD;po@G$a;T`HI?2NaU@ xba4#fxSpJ#z-w?=qK_?rt=lNj$z>KlLqRIz$`>&#FM)~}JYD@<);T3K0RSZiLGu6r delta 163 zcmaFBc#d&`gfs^m0|SHn=l_X7iY>|8-G$*l2rk&WeDcJ0x!QX?VxkP|Q) O7(8A5T-G@yGywpIYDEzM diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/toolHeadScrewdriver.png index 6b0517b8791e9ff70f55ba3b70e934246d3790eb..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 187 zcmdnQc!qI;WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfAAG? aWMwcel}wl<+yyj?fx*+&&t;ucLK6UL9X9*` delta 134 zcmX@ZxQTIsq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJ#CtqUym|_oS9lx(%G-Oo zIEGl9PEL?8d0;OxVO2ltu^km3m6}(q&^Y`b2#k%4j3zzp;uhEYQ~&FWW~83vy0$rX iwN(~UhYYw37#NanCfn!SikJ>Giow&>&t;ucLK6T;{xiJ* diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/toolHeadScrewdriver_OVERLAY.png index 2aea2f961d4e75613ef1b4aee349b0d2a2ed2f37..02d3a495d96a4fa01d189b4cc6893e4c7f1c8e32 100644 GIT binary patch delta 218 zcmaFP_=<6YL_G^L0|Ud`yN`l^ltQvckS_y6l^O#>Lkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j(p2Ka=y{{R2~>C>nG-k$t_vE={R?EiOX0!7>e{C5BqFqH)P1v4;| zO+IS@Ih+L^k;M!Q+=2`Y!Q6t3^(pZafuigsp1!W^FL-zuB#mAf z&CCM|DSEm%hHzX@PB_3gWr4|LgDDF$90Cq7YAH0S9S}I=pu@nhu$9T6=}$^BP%(q2 LtDnm{r-UW|y@y67 delta 189 zcmV;u07C!j0p|gb7#j!%0000V^Z#K0000JJOGiWi{{a60|De66laYxYf8Goh6e<^^ z^>F?G004AJL_t(I%VYfi|33pIfQf-Z05{?Uc=E!47a0HmT`icA!p5wJ00000NkvXXu0mjfZ4gvJ diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/bolt_OVERLAY.png index d2c1f987c0ce19066438f44545955e460c96c385..405c6c75fa69304a09aa4b57005c4e5cf40efb3e 100644 GIT binary patch delta 181 zcmdnR_<(VOL_P~M0|Ud`yN`l^ltQvckS_y6l^O#>Lkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j&81^9%x{{R2~-Me>p@813Ya{vFwtAX6ri{{=3$}*P(`2_>%Uu8$` z0V&2LZ+91l4pv!@iHdU8FL-zu`NS?2OqK&mNqV|ChHzX@PEg=AI4se}7QohR6zJqK ai=Uw&m2u^Z7?zhnMGT&Eak-aXR_O|Nr*PsxuO=FbMHf?EG*4la0Z2fA#mihyNd6{qJecu;S;tySpPyh0PfH u&$jR?BpBB*cWjusfxF{^&8#Vk5)90e%#yz49$$b)GI+ZBxvXyYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYLkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j(p2Ka=y{{R2~>C>nG-k$t_vE={R?EiOX0!7>e{C5BqFqH)P1v4;| zO+IS@Ih+L^k;M!Q+=2`Y6ZHk0U-0lSNE*E|nwbZbQ}lFk4B@z* zoN$0~$^w(g22&PhI0PJE)KX|tJ0Nh#L5G21VJnkC)1Q=NpkfA3S3j3^P6Eak-aXR_O|Nr*Psxun1*#1;kf3oM8{JyDM_5Xak+EWgz6jv~%NHl4BEKS4gL zU1eh1gYri=bDG)&_%xW>1jJ)2cogj}GVuPaFMn2lOZDl(YzBte#w?Q`wkh#m09wM} M>FVdQ&MBb@0K8Z}fdBvi diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/bolt_OVERLAY.png index d83a131004a555d47a5656fbeecf79ad3a7ccc7f..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 167 zcmeBY+|D>bqMnff2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`?NMQuIw*(co_M_E)`6c0}AnZx+pk?a9mIR@qd1!2n)ksKlz8n-OJVhr5HS2{an^L HB{Ts5H@7P# delta 100 zcmdna*v~jYLYjk(fq_B(^Z!I3#g^pl?gFHN;HUHM`iYrxcJ~;0`K8z@f7m$!1!X*4 y978NlC;$2X-=0~up|jD+AnU*i#>H$rV$2N5vzTSy*nS47WAJqKb6Mw<&;$T{8y&9z diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/toolHeadScrewdriver.png index 6b0517b8791e9ff70f55ba3b70e934246d3790eb..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 187 zcmdnQc!qI;WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfAAG? aWMwcel}wl<+yyj?fx*+&&t;ucLK6UL9X9*` delta 134 zcmX@ZxQTIsq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJ#CtqUym|_oS9lx(%G-Oo zIEGl9PEL?8d0;OxVO2ltu^km3m6}(q&^Y`b2#k%4j3zzp;uhEYQ~&FWW~83vy0$rX iwN(~UhYYw37#NanCfn!SikJ>Giow&>&t;ucLK6T;{xiJ* diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/toolHeadScrewdriver_OVERLAY.png index d83a131004a555d47a5656fbeecf79ad3a7ccc7f..5385a7b02536e36c893324a1872a6202c066f214 100644 GIT binary patch delta 167 zcmeBY+|D>bqMnff2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`?NMQuIw*(co-y&UK!2I0}AnZx+pk?a9mIR@qd1!2n)ksKlz8n-OJVhr5HS2{an^L HB{Ts5MVc#n delta 100 zcmdna*v~jYLYjk(fq_B(^Z!I3#g^pl?gFHN;HUHM`iYrxcJ~;0`K8z@f7m$!1!X*4 y978NlC;$2X-=0~up|jD+AnU*i#>H$rV$2N5vzTSy*nS47WAJqKb6Mw<&;$T{8y&9z diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..eb576fed2ec67cd6a3d3b6dcb2e9da4f5e03e1bc 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96ZNhFMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@02t*nng9R* delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..c294368b8b481be1912cf226c7055b74df60444d 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0L@q@6#xJL delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..54e5f0dbc29b50c14ddaf000d8f781e8757f4161 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXk7F(aV0+dtsba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E0A%Sh#{d8T delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/bolt_OVERLAY.png index 036f53807f4b6876e2c3509bc054eb036e8c7df6..4da49f1a27cd976651fa0eb61c177d79f3e8eeee 100644 GIT binary patch delta 301 zcmey$c!OzzWIZzj1A~Sxe=v|zNcITwWnidMV_;}#VPNHyF%#*!evUYsnYZ(MiUj~a$oT9F!G6ADwr$>l=Aj;aSV~ToSfjm z)Z=sJL=2l)n3-Bx3L~GHnVDY-qh6kwT%3q)%^xP7FHB8Nhcs#g0}Tr~Qy4upH8l%U m7&9dW106+dHyJ6Nh+()lk*Qfr_r`Ldu?(KBelF{r5}E)vxM{)w delta 202 zcmV;*05$*E0`&oq83+ad001BJ|6!5M9)I2p4;CUS9npH600006VoOIv0RI600RN!9 zr;`8x0D?(GK~xwS?ZGWl!$1HA(C;?M1@d!%ooQ`rh$D^|);2SZZ*KhniChiu<%ieF z{$Tr%R?d_CAqj5_my5Kp?~+I&3DYbsY#YlW3DZR1Nh{YY^Gx5%zrWyk@>y9|(l_cj zsFn4d+nrKKi(36MjHJc7a=TLs<3Qh$R;4fwbRGHj1&$tT9-y~)6aWAK07*qoM6N<$ Ef~4nI*#H0l diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYw|D$^cmE$A0hIaQ(edBh z;(tZOe+~8j=H~w+BK~J&{MXR3A{wKu$&jWI6{+pVC zl$)9US68Q|nLr1^jjf(pcM9k}*^(eXkZ*B=$6-#^Kv~8lZ+91l4pvzYAcwQSBeIx* zfm;xS8S7KxCjtf8OFVsD*-q;rbrve0 zXh@fHa?jZKzxSx6{$AGat5@0SO<1CRCELO`Vei8d?R#01A156@Q_U%>^y*Q;lgp7# z>;0P*3wGXnb3EhC!}!nY!QD6iGOkDvJ9o77pH5uFAB`y=%#MjfxM_V*t?`zopr03dKBjfOQ!@nO*1M5n;ERH~VBButIe`Vw7)@G(B}K z;62K>$_N1+kG(lhRpvCocREQ>mZ?(+aJwzvpe!|DT?+U?89(YD04spDLGcMsgUbcC zWM~^0u(+m?%)sJjalKB5v@LwIRFy_rZ=|`eTvg-udLve5us@_Ui+$>hrdTJ5qCgfQ j8r<*8HzS00000NkvXXu0mjfE~|PQ diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/METALLIC/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/METALLIC/bolt.png index c6f1bc9d38ef2b1ef9d701cd89b477c4dbb7fce9..1acc21b98b68df0d590f5613010f8b2ecfd25696 100644 GIT binary patch delta 155 zcmc~^%Q!)@o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`m_0!d}PLH_gqL?C74>EaktF()}eg7ph?`uTZ({U<&ve}C`q{k_%ZFWctW sR)70{cX#>8>ozR8ZH!$e{RRvSt_D^-NkubB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/METALLIC/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/METALLIC/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..54e5f0dbc29b50c14ddaf000d8f781e8757f4161 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXk7F(aV0+dtsba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E0A%Sh#{d8T delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..eb576fed2ec67cd6a3d3b6dcb2e9da4f5e03e1bc 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96ZNhFMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@02t*nng9R* delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/bolt_OVERLAY.png index d83a131004a555d47a5656fbeecf79ad3a7ccc7f..c294368b8b481be1912cf226c7055b74df60444d 100644 GIT binary patch delta 167 zcmeBY+|D>bqMnff2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`?NMQuIw*(co_Lay(H$rV$2N5vzTSy*nS47WAJqKb6Mw<&;$T{8y&9z diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/toolHeadScrewdriver.png index 6b0517b8791e9ff70f55ba3b70e934246d3790eb..54e5f0dbc29b50c14ddaf000d8f781e8757f4161 100644 GIT binary patch delta 187 zcmdnQc!qI;WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfAAG%U70aRn%(?CIiY5+ZRqIYEK*&;RoW4m6#q|0Wgs?? aWMwcel}wl<+yyj?fx*+&&t;ucLK6UT12-Z7 delta 134 zcmX@ZxQTIsq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJ#CtqUym|_oS9lx(%G-Oo zIEGl9PEL?8d0;OxVO2ltu^km3m6}(q&^Y`b2#k%4j3zzp;uhEYQ~&FWW~83vy0$rX iwN(~UhYYw37#NanCfn!SikJ>Giow&>&t;ucLK6T;{xiJ* diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/toolHeadScrewdriver_OVERLAY.png index d83a131004a555d47a5656fbeecf79ad3a7ccc7f..844e4365af706bff7ff97e32b137a3af9a0a13d2 100644 GIT binary patch delta 167 zcmeBY+|D>bqMnff2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`?NMQuIw*(co-xNi>*&w0SfVXx+pk?a9mIR@qd1!2n)ksKlz8n-OJVhr5HS2{an^L HB{Ts5N@6Ra delta 100 zcmdna*v~jYLYjk(fq_B(^Z!I3#g^pl?gFHN;HUHM`iYrxcJ~;0`K8z@f7m$!1!X*4 y978NlC;$2X-=0~up|jD+AnU*i#>H$rV$2N5vzTSy*nS47WAJqKb6Mw<&;$T{8y&9z diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/bolt_OVERLAY.png index d83a131004a555d47a5656fbeecf79ad3a7ccc7f..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 167 zcmeBY+|D>bqMnff2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`?NMQuIw*(co_M_E)`6c0}AnZx+pk?a9mIR@qd1!2n)ksKlz8n-OJVhr5HS2{an^L HB{Ts5H@7P# delta 100 zcmdna*v~jYLYjk(fq_B(^Z!I3#g^pl?gFHN;HUHM`iYrxcJ~;0`K8z@f7m$!1!X*4 y978NlC;$2X-=0~up|jD+AnU*i#>H$rV$2N5vzTSy*nS47WAJqKb6Mw<&;$T{8y&9z diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/toolHeadScrewdriver.png index 6b0517b8791e9ff70f55ba3b70e934246d3790eb..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 187 zcmdnQc!qI;WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfAAG? aWMwcel}wl<+yyj?fx*+&&t;ucLK6UL9X9*` delta 134 zcmX@ZxQTIsq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJ#CtqUym|_oS9lx(%G-Oo zIEGl9PEL?8d0;OxVO2ltu^km3m6}(q&^Y`b2#k%4j3zzp;uhEYQ~&FWW~83vy0$rX iwN(~UhYYw37#NanCfn!SikJ>Giow&>&t;ucLK6T;{xiJ* diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/toolHeadScrewdriver_OVERLAY.png index d83a131004a555d47a5656fbeecf79ad3a7ccc7f..5385a7b02536e36c893324a1872a6202c066f214 100644 GIT binary patch delta 167 zcmeBY+|D>bqMnff2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`?NMQuIw*(co-y&UK!2I0}AnZx+pk?a9mIR@qd1!2n)ksKlz8n-OJVhr5HS2{an^L HB{Ts5MVc#n delta 100 zcmdna*v~jYLYjk(fq_B(^Z!I3#g^pl?gFHN;HUHM`iYrxcJ~;0`K8z@f7m$!1!X*4 y978NlC;$2X-=0~up|jD+AnU*i#>H$rV$2N5vzTSy*nS47WAJqKb6Mw<&;$T{8y&9z diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..eb576fed2ec67cd6a3d3b6dcb2e9da4f5e03e1bc 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96ZNhFMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@02t*nng9R* delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..c294368b8b481be1912cf226c7055b74df60444d 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0L@q@6#xJL delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..54e5f0dbc29b50c14ddaf000d8f781e8757f4161 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXk7F(aV0+dtsba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E0A%Sh#{d8T delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0NAA`TL1t6 delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/bolt.png index 8675564a9b1aa92cf3d9a38d1eb3197edf673315..29d3fd08b388aa225af0a781f5eb0dbada0c2144 100644 GIT binary patch delta 177 zcmZ3;c!+U=WIY2ASj||l7f2~2dj$D1FjT2AFf_CXMsm#F#`j)AP6(or^HVL3bL1Y z`ns~e;NfB96T4I}Sq>;9>FMIA6(VstIbngMMfb7$fBBrB=uN#6aQ-60y;Hnf_Z+*% Q160M}>FVdQ&MBb@01taJWB>pF delta 117 zcmX@axR7yzq!b$i1B3kM|A|0~Ey>&6h2cL4F4((#^2AKJfP0L5jG7vrc~_!<@_L>w zjv*GOlM^IZzc8ntpZC{);i#i diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/bolt_OVERLAY.png index 3f0d6efcacdbbcc2d9fd04d1dff1e63021f710d9..78d5f0c041659ba1ca6718083e25dd0bc5285f03 100644 GIT binary patch delta 140 zcmeBW+|D>bB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0LFGE-v9sr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/toolHeadScrewdriver.png index a4f9a3217885ff683a9ad5f3f5d402cfe21bc20c..4ec2f75ef3de243fae862f1587612a2143550315 100644 GIT binary patch delta 160 zcmbQuc!qI;WB>yYSj||l7f2~2dj$D1FjT2AFf_CFz@GwXky)v4a2b5Fxba4!k zxSX7z!1?F@`2z=<&eVUC3jOzzmFwqn&qu}!K5Mcv7?(;WOcL%A1S)6nboFyt=akR{ E09`3Ep#T5? delta 111 zcmX@ZIGb^TBnKM<1B3kM|A`Yb|H(?D5Bx% z;uvCaIyphYbB9M^*2+TVUodHq`$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oC zU=S~uvn$XBD8W<`zopr0Mr8~H2?qr delta 98 zcmdna*vmLUf|G-dfq_B(^Z&$&nR0&j7e9D`njxgN@xNAQN0}I From 9581fa31bffe3bc36c20ea3d6c7364036ec00b54 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Thu, 12 Dec 2024 23:15:20 +0100 Subject: [PATCH 129/181] update --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 68b03943f7a..7a97e78e071 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -70,7 +70,7 @@ dependencies { compileOnly("com.github.GTNewHorizons:ThaumicBases:1.7.7:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:EnderCore:0.4.6:dev") { transitive = false } compileOnly('com.github.GTNewHorizons:VisualProspecting:1.3.28:dev') { transitive = false } - compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.97-GTNH:dev") { transitive = false } + compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.100-GTNH:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.8-GTNH:dev") { transitive = false } implementation("com.github.GTNewHorizons:TinkersConstruct:1.12.16-GTNH:dev") From 926b34ffdbfed88b340f701b06013a4a1536366e Mon Sep 17 00:00:00 2001 From: chochem <40274384+chochem@users.noreply.github.com> Date: Fri, 13 Dec 2024 17:32:41 +0000 Subject: [PATCH 130/181] fix reservoir hatch crash (#3646) --- .../core/recipe/RecipesMachines.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java b/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java index ee757fc03ef..2124f9979d1 100644 --- a/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java @@ -2869,19 +2869,20 @@ private static void runModRecipes() { .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); + if (RemoteIO.isModLoaded()) { + 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 + int aCostMultiplier = 1; GTValues.RA.stdBuilder() .itemInputs( GregtechItemList.Casing_Multi_Use.get(1), From d716e5a04d3dd7fb4ef23f96ad68a868780b426e Mon Sep 17 00:00:00 2001 From: Yoshy <60155833+Yoshy2002@users.noreply.github.com> Date: Fri, 13 Dec 2024 18:40:19 +0100 Subject: [PATCH 131/181] Add Research Station to NEI Scanner List (#3647) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../thing/metaTileEntity/multi/MTEResearchStation.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java index 6b3d35986c7..136451fb0fb 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java @@ -16,6 +16,8 @@ import static net.minecraft.util.StatCollector.translateToLocalFormatted; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -53,6 +55,7 @@ import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.MTEHatch; import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.recipe.check.SimpleCheckRecipeResult; @@ -554,6 +557,12 @@ public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPla "gt.blockmachines.multimachine.em.research.mode." + machineType.replace(" ", "_"))); } + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(scannerFakeRecipes, TecTechRecipeMaps.researchStationFakeRecipes); + } + @Override protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { super.drawTexts(screenElements, inventorySlot); From 35495c23995a1852f1b5a408bd5fc2f18b48b7bc Mon Sep 17 00:00:00 2001 From: purebluez <81239247+purebluez@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:48:28 -0600 Subject: [PATCH 132/181] Refactor Steam Input Bus to extend MTEHatchInputBus (#3642) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../implementations/MTEMultiBlockBase.java | 2 + .../MTEHatchSteamBusInput.java | 51 ++++ .../MteHatchSteamBusInput.java | 272 ------------------ .../base/GTPPMultiBlockBase.java | 15 +- .../base/MTESteamMultiBase.java | 16 +- .../gregtech/GregtechSteamMultis.java | 4 +- 6 files changed, 65 insertions(+), 295 deletions(-) create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSteamBusInput.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MteHatchSteamBusInput.java diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index f7d03acc666..95d1da6940b 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -113,6 +113,7 @@ import gregtech.common.tileentities.machines.MTEHatchOutputBusME; import gregtech.common.tileentities.machines.MTEHatchOutputME; import gregtech.common.tileentities.machines.multi.MTELargeTurbine; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchSteamBusInput; import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; import mcp.mobius.waila.api.IWailaConfigHandler; @@ -1822,6 +1823,7 @@ public boolean addInputBusToMachineList(IGregTechTileEntity aTileEntity, int aBa hatch.updateCraftingIcon(this.getMachineCraftingIcon()); return mDualInputHatches.add(hatch); } + if (aMetaTileEntity instanceof MTEHatchSteamBusInput) return false; if (aMetaTileEntity instanceof ISmartInputHatch hatch) { mSmartInputHatches.add(hatch); } 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 00000000000..54cf4083cf7 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSteamBusInput.java @@ -0,0 +1,51 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +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.MTEHatchInputBus; +import gregtech.api.recipe.RecipeMap; +import gtPlusPlus.core.lib.GTPPCore; + +public class MTEHatchSteamBusInput extends MTEHatchInputBus { + + public RecipeMap mRecipeMap = null; + + public MTEHatchSteamBusInput(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, getSlots() + 1); + } + + public MTEHatchSteamBusInput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, getSlots() + 1, aDescription, aTextures); + } + + public static int getSlots() { + return 4; + } + + @Override + public String[] getDescription() { + return 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() }; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchSteamBusInput(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public int getCircuitSlot() { + return getSlots(); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } +} 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 deleted file mode 100644 index 5de87c4a500..00000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MteHatchSteamBusInput.java +++ /dev/null @@ -1,272 +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.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/GTPPMultiBlockBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GTPPMultiBlockBase.java index 9b5448ac491..03a32cf984f 100644 --- 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 @@ -83,7 +83,6 @@ 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; @@ -742,8 +741,7 @@ public boolean resetRecipeMapForHatch(IGregTechTileEntity aTileEntity, RecipeMap if (aMetaTileEntity == null) { return false; } - if (aMetaTileEntity instanceof MTEHatchInput || aMetaTileEntity instanceof MTEHatchInputBus - || aMetaTileEntity instanceof MteHatchSteamBusInput) { + if (aMetaTileEntity instanceof MTEHatchInput || aMetaTileEntity instanceof MTEHatchInputBus) { return resetRecipeMapForHatch((MTEHatch) aMetaTileEntity, aMap); } else { return false; @@ -758,8 +756,7 @@ public boolean resetRecipeMapForHatch(MTEHatch aTileEntity, RecipeMap aMap) { if (aTileEntity == null) { return false; } - if (aTileEntity instanceof MTEHatchInput || aTileEntity instanceof MTEHatchInputBus - || aTileEntity instanceof MteHatchSteamBusInput) { + if (aTileEntity instanceof MTEHatchInput || aTileEntity instanceof MTEHatchInputBus) { if (aTileEntity instanceof MTEHatchInput) { ((MTEHatchInput) aTileEntity).mRecipeMap = null; ((MTEHatchInput) aTileEntity).mRecipeMap = aMap; @@ -776,14 +773,6 @@ public boolean resetRecipeMapForHatch(MTEHatch aTileEntity, RecipeMap aMap) { } else { log("Cleared Input Bus."); } - } else { - ((MteHatchSteamBusInput) aTileEntity).mRecipeMap = null; - ((MteHatchSteamBusInput) aTileEntity).mRecipeMap = aMap; - if (aMap != null) { - log("Remapped Input Bus to " + aMap.unlocalizedName + "."); - } else { - log("Cleared Input Bus."); - } } return true; } else { 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 index 17c88caa20b..a9076840858 100644 --- 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 @@ -37,14 +37,14 @@ import gregtech.api.util.IGTHatchAdder; import gregtech.api.util.shutdown.ShutDownReasonRegistry; import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchSteamBusInput; 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 mSteamInputs = new ArrayList<>(); public ArrayList mSteamOutputs = new ArrayList<>(); public ArrayList mSteamInputFluids = new ArrayList<>(); @@ -173,7 +173,7 @@ public boolean addToMachineList(final IGregTechTileEntity aTileEntity, final int if (aMetaTileEntity instanceof MTEHatchCustomFluidBase) { log("Adding Steam Input Hatch"); aDidAdd = addToMachineListInternal(mSteamInputFluids, aMetaTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof MteHatchSteamBusInput) { + } else if (aMetaTileEntity instanceof MTEHatchSteamBusInput) { log( "Trying to set recipe map. Type: " + (getRecipeMap() != null ? getRecipeMap().unlocalizedName : "Null")); @@ -228,7 +228,7 @@ public boolean depleteInput(ItemStack aStack) { } } } - for (MteHatchSteamBusInput tHatch : validMTEList(mSteamInputs)) { + for (MTEHatchSteamBusInput tHatch : validMTEList(mSteamInputs)) { tHatch.mRecipeMap = getRecipeMap(); for (int i = tHatch.getBaseMetaTileEntity() .getSizeInventory() - 1; i >= 0; i--) { @@ -265,7 +265,7 @@ public ArrayList getStoredFluids() { @Override public ArrayList getStoredInputs() { ArrayList rList = new ArrayList<>(); - for (MteHatchSteamBusInput tHatch : validMTEList(mSteamInputs)) { + for (MTEHatchSteamBusInput tHatch : validMTEList(mSteamInputs)) { tHatch.mRecipeMap = getRecipeMap(); for (int i = tHatch.getBaseMetaTileEntity() .getSizeInventory() - 1; i >= 0; i--) { @@ -335,7 +335,7 @@ public List getItemOutputSlots(ItemStack[] toOutput) { @Override public void updateSlots() { for (MTEHatchCustomFluidBase tHatch : validMTEList(mSteamInputFluids)) tHatch.updateSlots(); - for (MteHatchSteamBusInput tHatch : validMTEList(mSteamInputs)) tHatch.updateSlots(); + for (MTEHatchSteamBusInput tHatch : validMTEList(mSteamInputs)) tHatch.updateSlots(); } @Override @@ -355,7 +355,7 @@ public void clearHatches() { @Override public boolean resetRecipeMapForAllInputHatches(RecipeMap aMap) { boolean ret = super.resetRecipeMapForAllInputHatches(aMap); - for (MteHatchSteamBusInput hatch : mSteamInputs) { + for (MTEHatchSteamBusInput hatch : mSteamInputs) { if (resetRecipeMapForHatch(hatch, aMap)) { ret = true; } @@ -428,7 +428,7 @@ protected enum SteamHatchElement implements IHatchElement> @Override public List> mteClasses() { - return Collections.singletonList(MteHatchSteamBusInput.class); + return Collections.singletonList(MTEHatchSteamBusInput.class); } @Override 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 465ca37b387..a9a29b3c37c 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java @@ -11,8 +11,8 @@ import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchSteamBusInput; 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; @@ -54,7 +54,7 @@ public static void run() { .getStackForm(1)); GregtechItemList.Hatch_Input_Bus_Steam.set( - new MteHatchSteamBusInput(Hatch_Input_Bus_Steam.ID, "hatch.input_bus.tier.steam", "Input Bus (Steam)", 0) + 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 MTEHatchSteamBusOutput( From fa1a907ab1bcf15ad9e4500b6c681e18e2328e93 Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Fri, 13 Dec 2024 18:55:05 +0100 Subject: [PATCH 133/181] Making Plasma Arc Furnace more useful (#3357) --- .../gregtech/api/recipe/RecipeCategories.java | 7 ------- .../java/gregtech/api/util/GTRecipeConstants.java | 8 ++++---- src/main/java/gregtech/common/config/Client.java | 4 ---- .../multi/processing/MTEIndustrialArcFurnace.java | 4 ++-- .../gui/picture/plasma_arc_furnace_recycling.png | Bin 325 -> 0 bytes 5 files changed, 6 insertions(+), 17 deletions(-) delete mode 100644 src/main/resources/assets/gregtech/textures/gui/picture/plasma_arc_furnace_recycling.png diff --git a/src/main/java/gregtech/api/recipe/RecipeCategories.java b/src/main/java/gregtech/api/recipe/RecipeCategories.java index 3112fce7053..8d0b0165434 100644 --- a/src/main/java/gregtech/api/recipe/RecipeCategories.java +++ b/src/main/java/gregtech/api/recipe/RecipeCategories.java @@ -17,13 +17,6 @@ public final class RecipeCategories { builder -> builder.setDisplayImage( createIcon(GregTech.getResourcePath("textures", "gui", "picture", "arc_furnace_recycling.png")))); - public static final RecipeCategory plasmaArcFurnaceRecycling = new RecipeCategory( - "gt.recipe.category.plasma_arc_furnace_recycling", - RecipeMaps.plasmaArcFurnaceRecipes, - () -> Client.nei.recipeCategories.plasmaArcFurnaceRecycling, - builder -> builder.setDisplayImage( - createIcon(GregTech.getResourcePath("textures", "gui", "picture", "plasma_arc_furnace_recycling.png")))); - public static final RecipeCategory maceratorRecycling = new RecipeCategory( "gt.recipe.category.macerator_recycling", RecipeMaps.maceratorRecipes, diff --git a/src/main/java/gregtech/api/util/GTRecipeConstants.java b/src/main/java/gregtech/api/util/GTRecipeConstants.java index 72b7a13fb81..e0af3d0d7d2 100644 --- a/src/main/java/gregtech/api/util/GTRecipeConstants.java +++ b/src/main/java/gregtech/api/util/GTRecipeConstants.java @@ -243,19 +243,20 @@ public class GTRecipeConstants { 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)); + builder.duration(Math.max(1, mat == Materials.Nitrogen ? aDuration / 4 : aDuration / 24)); + int tPlasmaAmount = (int) Math.min(1L, aDuration / (mat.getMass() * 16L)); GTRecipeBuilder plasmaBuilder = builder.copy() .fluidInputs(mat.getPlasma(tPlasmaAmount)) .fluidOutputs(mat.getGas(tPlasmaAmount)); if (recycle) { - plasmaBuilder.recipeCategory(RecipeCategories.plasmaArcFurnaceRecycling); + continue; } ret.addAll(RecipeMaps.plasmaArcFurnaceRecipes.doAdd(plasmaBuilder)); } + builder.duration(aDuration); GTRecipeBuilder arcBuilder = builder.copy() .fluidInputs(Materials.Oxygen.getGas(aDuration)); if (recycle) { @@ -264,7 +265,6 @@ public class GTRecipeConstants { ret.addAll(RecipeMaps.arcFurnaceRecipes.doAdd(arcBuilder)); return ret; }); - /** * Add a chemical reactor recipe to both LCR and singleblocks. */ diff --git a/src/main/java/gregtech/common/config/Client.java b/src/main/java/gregtech/common/config/Client.java index 5f5041720f9..1fa2766f8ed 100644 --- a/src/main/java/gregtech/common/config/Client.java +++ b/src/main/java/gregtech/common/config/Client.java @@ -213,10 +213,6 @@ public static class RecipeCategories { @Config.DefaultEnum("ENABLE") public RecipeCategorySetting arcFurnaceRecycling = ENABLE; - @Config.LangKey("gt.recipe.category.plasma_arc_furnace_recycling") - @Config.DefaultEnum("ENABLE") - public RecipeCategorySetting plasmaArcFurnaceRecycling = ENABLE; - @Config.LangKey("gt.recipe.category.macerator_recycling") @Config.DefaultEnum("ENABLE") public RecipeCategorySetting maceratorRecycling = ENABLE; 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 index 65e7c72c238..ef7e29f49f4 100644 --- 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 @@ -88,7 +88,7 @@ protected MultiblockTooltipBuilder createTooltip() { MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); tt.addMachineType(getMachineType()) .addInfo("250% faster than using single block machines of the same voltage") - .addInfo("Processes 8 * voltage tier * W items") + .addInfo("Processes voltage tier * W items in Electric mode or 8 * voltage tier * W items in Plasma mode") .addInfo("Right-click controller with a Screwdriver to change modes") .addInfo("Max Size required to process Plasma recipes") .addPollutionAmount(getPollutionPerSecond(null)) @@ -250,7 +250,7 @@ protected ProcessingLogic createProcessingLogic() { @Override public int getMaxParallelRecipes() { - return (this.mSize * 8 * GTUtility.getTier(this.getMaxInputVoltage())); + return (this.mSize * (mPlasmaMode ? 8 : 1) * GTUtility.getTier(this.getMaxInputVoltage())); } @Override diff --git a/src/main/resources/assets/gregtech/textures/gui/picture/plasma_arc_furnace_recycling.png b/src/main/resources/assets/gregtech/textures/gui/picture/plasma_arc_furnace_recycling.png deleted file mode 100644 index 2dbf7ce07057896bc3d542500a8fe63c13d25b7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325 zcmV-L0lNN)P)q`a)sH#$V_DA z2UZ}Y8Rort^CbA^GO1*q=MwHkQ4IOEZAbN!XJ7#5+;F$niatjQVz6FXiB@x`z`|F z{FTFA Date: Fri, 13 Dec 2024 10:11:14 -0800 Subject: [PATCH 134/181] Adds Tin Alloy mixer recipe (#3542) Co-authored-by: Martin Robertz --- .../loaders/postload/recipes/MixerRecipes.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java index 09400b8ba71..1fd049feb0c 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java @@ -72,6 +72,16 @@ public void run() { .eut(8) .addTo(mixerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(GTOreDictUnificator.getDust(Materials.TinAlloy, 2L * OrePrefixes.dust.mMaterialAmount)) + .duration(5 * SECONDS) + .eut(8) + .addTo(mixerRecipes); + GTValues.RA.stdBuilder() .itemInputs( GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 4), From d523b675c6a37ffdd784df70e0675333ac94bac8 Mon Sep 17 00:00:00 2001 From: Yoshy <60155833+Yoshy2002@users.noreply.github.com> Date: Fri, 13 Dec 2024 21:12:52 +0100 Subject: [PATCH 135/181] Fix a few Glass Tooltips (#3648) --- .../machines/multi/MTEIndustrialElectromagneticSeparator.java | 2 +- .../tileentities/machines/multi/MTEIndustrialExtractor.java | 2 +- .../tileentities/machines/multi/MTEIndustrialLaserEngraver.java | 2 +- .../common/tileentities/machines/multi/MTEMultiLathe.java | 1 + .../machines/multi/compressor/MTEHIPCompressor.java | 2 +- .../machines/multi/compressor/MTEIndustrialCompressor.java | 2 +- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java index 4bdd7218f6a..7bcd39d1295 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java @@ -218,7 +218,7 @@ protected MultiblockTooltipBuilder createTooltip() { .beginStructureBlock(7, 6, 7, false) .addController("Front Center") .addCasingInfoMin("MagTech Casings", MIN_CASING, false) - .addOtherStructurePart("Any glass", "x12") + .addCasingInfoExactly("Any Glass", 12, false) .addOtherStructurePart("Magnetic Neodymium Frame Box", "x37") .addOtherStructurePart("Electromagnet Housing", "1 Block Above/Behind Controller", 2) .addInputBus("Any Casing", 1) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialExtractor.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialExtractor.java index a82e5555474..9ae573798e8 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialExtractor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialExtractor.java @@ -172,7 +172,7 @@ protected MultiblockTooltipBuilder createTooltip() { .addController("Front Center") .addCasingInfoMin("Stainless Steel Machine Casing", 45, false) .addCasingInfoExactly("Item Pipe Casing", 19, true) - .addCasingInfoExactly("EV+ Glass", 8, false) + .addCasingInfoExactly("Any Glass", 8, false) .addInputBus("Any Stainless Steel Casing", 1) .addOutputBus("Any Stainless Steel Casing", 1) .addEnergyHatch("Any Stainless Steel Casing", 1) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java index 36573c09928..314bbfb16e7 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java @@ -248,8 +248,8 @@ protected MultiblockTooltipBuilder createTooltip() { .addController("Front Center") .addCasingInfoMin("Laser Containment Casing", 35, false) .addCasingInfoExactly("Tungstensteel Frame Box", 9, false) + .addCasingInfoExactly("Glass", 3, true) .addOtherStructurePart("Laser Resistant Plate", "x1") - .addOtherStructurePart("Glass (Tiered)", "x3") .addOtherStructurePart("Laser Source Hatch", "x1", 3) .addInputBus("Any Casing", 1) .addInputHatch("Any Casing", 1) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java index d85eead5148..7206abafd9f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java @@ -243,6 +243,7 @@ protected MultiblockTooltipBuilder createTooltip() { .addController("Front Center") .addCasingInfoMin("Solid Steel Machine Casing", 42, false) .addCasingInfoExactly("Grate Machine Casing", 9, false) + .addCasingInfoExactly("Any Glass", 32, false) .addInputBus("Any Solid Steel Casing", 1) .addOutputBus("Any Solid Steel Casing", 1) .addEnergyHatch("Any Solid Steel Casing", 1) 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 index 19bb69fbced..8ac1025d481 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java @@ -269,7 +269,7 @@ protected MultiblockTooltipBuilder createTooltip() { .addCasingInfoMin("Compressor Pipe Casing", 60, false) .addCasingInfoExactly("Coolant Duct", 12, false) .addCasingInfoExactly("Heating Duct", 12, false) - .addCasingInfoExactly("EV+ Glass", 22, false) + .addCasingInfoExactly("Any Glass", 22, false) .addCasingInfoExactly("Coil", 30, true) .addOtherStructurePart("Heat Sensor Hatch", "Any Electric Compressor Casing", 1) .addInputBus("Pipe Casings on Side", 2) 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 index a8f4fd5752d..c62cf22896b 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java @@ -150,7 +150,7 @@ protected MultiblockTooltipBuilder createTooltip() { .addController("Front Center") .addCasingInfoMin("Electric Compressor Casing", 95, false) .addCasingInfoMin("Compressor Pipe Casing", 45, false) - .addCasingInfoExactly("EV+ Glass", 6, false) + .addCasingInfoExactly("Any Glass", 6, false) .addInputBus("Pipe Casings on Side", 2) .addInputHatch("Pipe Casings on Side", 2) .addOutputBus("Pipe Casings on Side", 2) From 121edb5f26fa849f9144c35d55eaec0239db40b1 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Fri, 13 Dec 2024 22:44:24 +0100 Subject: [PATCH 136/181] update --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 7a97e78e071..02203ab58fd 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -42,7 +42,7 @@ dependencies { api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") - api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-500-GTNH:dev") + api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-501-GTNH:dev") api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.3.51-gtnh:dev") api('com.github.GTNewHorizons:Yamcl:0.6.0:dev') api("com.github.GTNewHorizons:Postea:1.0.13:dev") @@ -58,7 +58,7 @@ dependencies { compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.56:dev") - compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta25:api') { transitive = false } + compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta26:api') { transitive = false } compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.4:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.8.22:dev") { transitive = false } From 45bd4d2e766713c61a1a13c96b588c8a18f4b420 Mon Sep 17 00:00:00 2001 From: Ableytner <56540036+Ableytner@users.noreply.github.com> Date: Sat, 14 Dec 2024 18:05:50 +0100 Subject: [PATCH 137/181] Add some more missing solidifier recipes (#3649) --- .../system/material/WerkstoffLoader.java | 21 +++++++++++++++---- .../register/WerkstoffMaterialPool.java | 3 ++- .../java/gtnhlanth/loader/RecipeLoader.java | 10 --------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/main/java/bartworks/system/material/WerkstoffLoader.java b/src/main/java/bartworks/system/material/WerkstoffLoader.java index c3d326042ca..cc3fdd749e5 100644 --- a/src/main/java/bartworks/system/material/WerkstoffLoader.java +++ b/src/main/java/bartworks/system/material/WerkstoffLoader.java @@ -702,6 +702,7 @@ public static void setUp() { .onlyDust() .addMetalItems() .addMolten() + .addMetalCraftingSolidifierRecipes() .enforceUnification(), 39, TextureSet.SET_METALLIC @@ -1049,6 +1050,8 @@ public static void setUp() { .addMolten() .addMetalItems() .addCraftingMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .enforceUnification(), 64, TextureSet.SET_METALLIC @@ -1237,6 +1240,8 @@ public static void setUp() { .addMetalItems() .addMolten() .addCraftingMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes() .enforceUnification(), 78, TextureSet.SET_METALLIC); @@ -1346,7 +1351,9 @@ public static void setUp() { .addMixerRecipes((short) 1) .addSimpleMetalWorkingItems() .addCraftingMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), + .addMultipleIngotMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes(), 88, TextureSet.SET_METALLIC, new Pair<>(Materials.Palladium, 3), @@ -1382,7 +1389,9 @@ public static void setUp() { .addMixerRecipes((short) 1) .addSimpleMetalWorkingItems() .addCraftingMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), + .addMultipleIngotMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes(), 90, TextureSet.SET_METALLIC, new Pair<>(WerkstoffLoader.Ruthenium, 2), @@ -1412,7 +1421,9 @@ public static void setUp() { .addMixerRecipes() .addSimpleMetalWorkingItems() .addCraftingMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), + .addMultipleIngotMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes(), 92, TextureSet.SET_SHINY, new Pair<>(Materials.TungstenSteel, 12), @@ -1473,7 +1484,9 @@ public static void setUp() { .addCraftingMetalWorkingItems() .addMolten() .addSimpleMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), + .addMultipleIngotMetalWorkingItems() + .addMetaSolidifierRecipes() + .addMetalCraftingSolidifierRecipes(), 96, TextureSet.SET_METALLIC, new Pair<>(Materials.Steel, 2), diff --git a/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java b/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java index d35c444ff7f..7000bf86ec4 100644 --- a/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java +++ b/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java @@ -1034,7 +1034,8 @@ public class WerkstoffMaterialPool implements Runnable { new Werkstoff.GenerationFeatures().disable() .onlyDust() .addMolten() - .addMetalItems(), + .addMetalItems() + .addMetalCraftingSolidifierRecipes(), offsetID3 + 12, TextureSet.SET_DULL); diff --git a/src/main/java/gtnhlanth/loader/RecipeLoader.java b/src/main/java/gtnhlanth/loader/RecipeLoader.java index db86e8c63dd..e26a318bc20 100644 --- a/src/main/java/gtnhlanth/loader/RecipeLoader.java +++ b/src/main/java/gtnhlanth/loader/RecipeLoader.java @@ -3426,16 +3426,6 @@ public static void addRandomChemCrafting() { .eut(TierEU.RECIPE_MV) .addTo(fluidHeaterRecipes); - // PTMEG Manipulation - - 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); - GTValues.RA.stdBuilder() .fluidInputs(WerkstoffMaterialPool.HotSuperCoolant.getFluidOrGas(1000)) .fluidOutputs(Materials.SuperCoolant.getFluid(1000)) From d225cea7b65bedd1d0f90ce6150645a46d8a07e1 Mon Sep 17 00:00:00 2001 From: LazyFleshWasTaken <40587985+LazyFleshWasTaken@users.noreply.github.com> Date: Sat, 14 Dec 2024 11:22:32 -0800 Subject: [PATCH 138/181] PArt 1 of Wire/cable rebalance, take 2 (#3510) Co-authored-by: chochem <40274384+chochem@users.noreply.github.com> Co-authored-by: Martin Robertz --- .../java/goodgenerator/loader/Loaders.java | 2 +- .../preload/LoaderMetaTileEntities.java | 33 +++++++++---------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/main/java/goodgenerator/loader/Loaders.java b/src/main/java/goodgenerator/loader/Loaders.java index e3648b855dc..ac70c82ab62 100644 --- a/src/main/java/goodgenerator/loader/Loaders.java +++ b/src/main/java/goodgenerator/loader/Loaders.java @@ -374,7 +374,7 @@ public static void GTMetaTileRegister() { "ComponentAssemblyLine", "Component Assembly Line").getStackForm(1L); CrackRecipeAdder.registerPipe(MetaTileEntityIDs.PipeIncoloy903.ID, GGMaterial.incoloy903, 15000, 8000, true); - CrackRecipeAdder.registerWire(MetaTileEntityIDs.WireSignalium.ID, GGMaterial.signalium, 12, 131072, 16, true); + CrackRecipeAdder.registerWire(MetaTileEntityIDs.WireSignalium.ID, GGMaterial.signalium, 12, 131072, 32, true); CrackRecipeAdder.registerWire(MetaTileEntityIDs.WireLumiium.ID, GGMaterial.lumiium, 8, 524288, 64, true); Loaders.AMForge = new AntimatterForge( IDs_GoodGenerator.AntimatterForge.ID, diff --git a/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java b/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java index baf687c5cda..6cb64fd5ff7 100644 --- a/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java @@ -12368,47 +12368,46 @@ private static void generateWiresAndPipes() { 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.Cobalt, 1200, 1L, 2L, 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.Cupronickel, 1340, 3L, 6L, 4L, GTValues.V[2], true, false); makeWires(Materials.Copper, 1360, 2L, 4L, 1L, GTValues.V[2], true, false); makeWires(Materials.AnnealedCopper, 1380, 1L, 2L, 1L, GTValues.V[2], true, false); - makeWires(Materials.Kanthal, 1400, 3L, 6L, 4L, GTValues.V[3], true, false); + makeWires(Materials.Kanthal, 1400, 3L, 6L, 5L, 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.Electrum, 1440, 1L, 2L, 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.Nichrome, 1500, 4L, 8L, 6L, GTValues.V[4], true, false); + makeWires(Materials.Steel, 1520, 3L, 6L, 2L, GTValues.V[4], true, false); + makeWires(Materials.BlackSteel, 1540, 1L, 2L, 4L, 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.TPV, 1840, 1L, 2L, 6L, 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.TungstenSteel, 1660, 4L, 8L, 4L, GTValues.V[5], true, false); + makeWires(Materials.Tungsten, 1680, 2L, 4L, 6L, GTValues.V[5], true, false); + makeWires(Materials.Osmium, 1620, 2L, 4L, 4L, GTValues.V[6], 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.VanadiumGallium, 1740, 4L, 8L, 4L, GTValues.V[6], true, false); + makeWires(Materials.YttriumBariumCuprate, 1760, 3L, 6L, 6L, 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); + makeWires(Materials.NaquadahAlloy, 1800, 4L, 8L, 6L, GTValues.V[8], true, false); + makeWires(Materials.Duranium, 1820, 2L, 4L, 4L, GTValues.V[8], true, false); // Superconductor base. makeWires(Materials.Pentacadmiummagnesiumhexaoxid, 2200, 1L, 2L, 1L, GTValues.V[2], false, false); @@ -12444,7 +12443,7 @@ private static void generateWiresAndPipes() { 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(Materials.Ichorium, 2600, 4L, 8L, 12L, GTValues.V[9], false, true); makeWires(MaterialsUEVplus.SpaceTime, 2606, 0L, 0L, 1_000_000L, GTValues.V[14], false, true); GTOreDictUnificator.registerOre( From 0cdaa56bcd8ac1201112c8bb987fcccec5f715cb Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Sat, 14 Dec 2024 20:35:40 +0100 Subject: [PATCH 139/181] Make Uncertain Resolver X the default version (#3408) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../java/tectech/loader/recipe/Assembler.java | 17 +------ .../tectech/loader/thing/MachineLoader.java | 4 +- .../hatch/MTEHatchUncertainty.java | 45 +++++++++---------- .../resources/assets/tectech/lang/en_US.lang | 5 ++- .../resources/assets/tectech/lang/zh_CN.lang | 4 +- 5 files changed, 28 insertions(+), 47 deletions(-) diff --git a/src/main/java/tectech/loader/recipe/Assembler.java b/src/main/java/tectech/loader/recipe/Assembler.java index cbb6691a6ab..3af64082174 100644 --- a/src/main/java/tectech/loader/recipe/Assembler.java +++ b/src/main/java/tectech/loader/recipe/Assembler.java @@ -3034,7 +3034,7 @@ public void cleanroomRecipes() { .duration(40 * SECONDS) .eut(TierEU.RECIPE_ZPM) .addTo(assemblerRecipes); - // Uncertainty + // Uncertainty X GTValues.RA.stdBuilder() .itemInputs( CustomItemList.eM_Computer_Casing.get(1), @@ -3043,21 +3043,6 @@ public void cleanroomRecipes() { 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() diff --git a/src/main/java/tectech/loader/thing/MachineLoader.java b/src/main/java/tectech/loader/thing/MachineLoader.java index bf8f2e740a8..6b181bf124b 100644 --- a/src/main/java/tectech/loader/thing/MachineLoader.java +++ b/src/main/java/tectech/loader/thing/MachineLoader.java @@ -2279,10 +2279,10 @@ public void run() { // for // NH Uncertainty_Hatch.set( - new MTEHatchUncertainty(UncertaintyResolver.ID, "hatch.certain.tier.07", "Uncertainty Resolver", 7) + new MTEHatchUncertainty(UncertaintyResolver.ID, "hatch.certain.tier.05", "Uncertainty Resolver", 5) .getStackForm(1L)); UncertaintyX_Hatch.set( - new MTEHatchUncertainty(UncertaintyResolverX.ID, "hatch.certain.tier.10", "Uncertainty Resolver X", 10) + new MTEHatchUncertainty(UncertaintyResolverX.ID, "hatch.certain.tier.07", "Uncertainty Resolver X", 7) .getStackForm(1L)); dataIn_Hatch.set( new MTEHatchDataInput(OpticalSlaveConnector.ID, "hatch.datain.tier.07", "Optical Reception Connector", 7) diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchUncertainty.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchUncertainty.java index 38b90e47709..507f1aa8d83 100644 --- a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchUncertainty.java +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchUncertainty.java @@ -199,13 +199,15 @@ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlaye @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 - }; + String[] description = new String[4]; + description[0] = CommonValues.TEC_MARK_EM; + description[1] = translateToLocal("gt.blockmachines.hatch.certain.desc.0"); // Feeling certain, or not? + description[2] = EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.hatch.certain.desc.1"); // Schrödinger equation in a box + if (mTier < 6) { + description[3] = EnumChatFormatting.DARK_RED + translateToLocal("gt.blockmachines.hatch.certain.desc.2"); + } + return description; } private boolean balanceCheck(int sideLenY, short... masses) { @@ -343,7 +345,6 @@ public void addGregTechLogo(ModularWindow.Builder builder) { @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - final boolean isAdvanced = mTier > 7; builder.widget( new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE) @@ -431,23 +432,17 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont @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); - } - } + 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); } }.setDrawable(TecTechUITextures.PICTURE_UNCERTAINTY_INDICATOR) .setPos(47 + (i / 4) * 12, 28 + (i % 4) * 12) diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index dfdaeb93a3f..f2986f0a5c8 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -503,10 +503,11 @@ gt.blockmachines.hatch.param.tier.10.name=Parametrizer tXt gt.blockmachines.hatch.param.desc.0=For parametrization of Multiblocks gt.blockmachines.hatch.param.desc.1=E=mine*craft -gt.blockmachines.hatch.certain.tier.07.name=Uncertainty Resolver -gt.blockmachines.hatch.certain.tier.10.name=Uncertainty Resolver X +gt.blockmachines.hatch.certain.tier.05.name=Uncertainty Resolver +gt.blockmachines.hatch.certain.tier.07.name=Uncertainty Resolver X gt.blockmachines.hatch.certain.desc.0=Feeling certain, or not? gt.blockmachines.hatch.certain.desc.1=Schrödinger equation in a box +gt.blockmachines.hatch.certain.desc.2=Deprecated! Use Uncertainty Resolver X gt.blockmachines.hatch.datain.tier.07.name=Optical Reception Connector gt.blockmachines.hatch.datain.desc.0=Quantum Data Input for Multiblocks diff --git a/src/main/resources/assets/tectech/lang/zh_CN.lang b/src/main/resources/assets/tectech/lang/zh_CN.lang index e031090a288..01515076f2b 100644 --- a/src/main/resources/assets/tectech/lang/zh_CN.lang +++ b/src/main/resources/assets/tectech/lang/zh_CN.lang @@ -403,8 +403,8 @@ gt.blockmachines.hatch.param.tier.10.name=参数仪 tXt gt.blockmachines.hatch.param.desc.0=多方块机器的参数化 gt.blockmachines.hatch.param.desc.1=E=mine*craft² -gt.blockmachines.hatch.certain.tier.07.name=未定元解析器 -gt.blockmachines.hatch.certain.tier.10.name=未定元解析器 X +gt.blockmachines.hatch.certain.tier.05.name=未定元解析器 +gt.blockmachines.hatch.certain.tier.07.name=未定元解析器 X gt.blockmachines.hatch.certain.desc.0=你真的很确定吗? gt.blockmachines.hatch.certain.desc.1=盒子里的薛定谔方程 From 6333cd0e66796bccf834d1b814d510d35e343222 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sat, 14 Dec 2024 20:39:57 +0100 Subject: [PATCH 140/181] update --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 02203ab58fd..f6249e81ce6 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -34,7 +34,7 @@ * For more details, see https://docs.gradle.org/8.0.1/userguide/java_library_plugin.html#sec:java_library_configurations_graph */ dependencies { - api("com.github.GTNewHorizons:StructureLib:1.3.6:dev") + api("com.github.GTNewHorizons:StructureLib:1.4.0:dev") api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") api("com.github.GTNewHorizons:NotEnoughItems:2.6.51-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") From 5f23816fdf043e8dfa4ff7117cd1a1db5cd98be0 Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Sat, 14 Dec 2024 21:23:10 -0300 Subject: [PATCH 141/181] Revisiting Neutron Accelerators (#3538) Co-authored-by: GDCloud <93287602+GDCloudstrike@users.noreply.github.com> --- .../MTENeutronAccelerator.java | 12 ++- .../java/goodgenerator/loader/Loaders.java | 8 +- .../goodgenerator/loader/RecipeLoader.java | 98 +++++++++++++++++-- .../gregtech/api/enums/MetaTileEntityIDs.java | 6 +- 4 files changed, 111 insertions(+), 13 deletions(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronAccelerator.java b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronAccelerator.java index a9c70d92849..fb63e673020 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronAccelerator.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronAccelerator.java @@ -1,6 +1,9 @@ package goodgenerator.blocks.tileEntity.GTMetaTileEntity; import static gregtech.api.enums.GTValues.V; +import static gregtech.api.util.GTUtility.formatNumbers; + +import net.minecraft.util.EnumChatFormatting; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -28,9 +31,12 @@ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { @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." }; + return new String[] { "Uses Energy to Accelerate the Neutrons!", + "Max consumption: " + EnumChatFormatting.YELLOW + + formatNumbers(this.getMaxEUConsume()) + + EnumChatFormatting.WHITE + + " EU/t", + "Every EU gets converted into 10-20 eV Neutron Kinetic Energy." }; } @Override diff --git a/src/main/java/goodgenerator/loader/Loaders.java b/src/main/java/goodgenerator/loader/Loaders.java index ac70c82ab62..a3b0b6d13e0 100644 --- a/src/main/java/goodgenerator/loader/Loaders.java +++ b/src/main/java/goodgenerator/loader/Loaders.java @@ -281,7 +281,7 @@ public class Loaders { public static ItemStack CT; public static ItemStack[] LFC = new ItemStack[5]; - public static ItemStack[] NeutronAccelerators = new ItemStack[9]; + public static ItemStack[] NeutronAccelerators = new ItemStack[13]; public static ItemStack[] Generator_Diesel = new ItemStack[2]; public static ItemStack CompAssline; @@ -303,8 +303,10 @@ public static void GTMetaTileRegister() { MetaTileEntityIDs.NeutronAcceleratorLV.ID, MetaTileEntityIDs.NeutronAcceleratorMV.ID, MetaTileEntityIDs.NeutronAcceleratorHV.ID, MetaTileEntityIDs.NeutronAcceleratorEV.ID, MetaTileEntityIDs.NeutronAcceleratorIV.ID, MetaTileEntityIDs.NeutronAcceleratorLuV.ID, - MetaTileEntityIDs.NeutronAcceleratorZPM.ID, MetaTileEntityIDs.NeutronAcceleratorUV.ID, }; - for (int i = 0; i < 9; i++) { + MetaTileEntityIDs.NeutronAcceleratorZPM.ID, MetaTileEntityIDs.NeutronAcceleratorUV.ID, + MetaTileEntityIDs.NeutronAcceleratorUHV.ID, MetaTileEntityIDs.NeutronAcceleratorUEV.ID, + MetaTileEntityIDs.NeutronAcceleratorUIV.ID, MetaTileEntityIDs.NeutronAcceleratorUMV.ID, }; + for (int i = 0; i < 13; i++) { Loaders.NeutronAccelerators[i] = new MTENeutronAccelerator( neutronAcceleratorIDs[i], "Neutron Accelerator " + GTValues.VN[i], diff --git a/src/main/java/goodgenerator/loader/RecipeLoader.java b/src/main/java/goodgenerator/loader/RecipeLoader.java index 306c4c1de11..7ad35781956 100644 --- a/src/main/java/goodgenerator/loader/RecipeLoader.java +++ b/src/main/java/goodgenerator/loader/RecipeLoader.java @@ -44,6 +44,7 @@ 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; @@ -52,6 +53,7 @@ import gregtech.api.util.GTOreDictUnificator; import gregtech.api.util.GTRecipeConstants; import gregtech.api.util.GTUtility; +import gtPlusPlus.core.material.MaterialsElements; public class RecipeLoader { @@ -1122,8 +1124,7 @@ public static void RecipeLoad() { 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), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NeodymiumMagnetic, 8), ItemList.Electric_Motor_LuV.get(2), GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorMV, 4)) .fluidInputs(Materials.Argon.getGas(3000)) @@ -1141,8 +1142,7 @@ public static void RecipeLoad() { 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), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.SamariumMagnetic, 8), ItemList.Electric_Motor_ZPM.get(2), GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorEV, 4)) .fluidInputs(WerkstoffLoader.Xenon.getFluidOrGas(3000)) @@ -1160,9 +1160,8 @@ public static void RecipeLoad() { 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), + ItemList.ZPM_Coil.get(8), GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.NickelZincFerrite, 16), - ItemList.ZPM_Coil.get(4), ItemList.Electric_Motor_UV.get(2), GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorLuV, 4)) .fluidInputs(WerkstoffLoader.Oganesson.getFluidOrGas(3000)) @@ -1171,6 +1170,93 @@ public static void RecipeLoad() { .duration(15 * SECONDS) .addTo(AssemblyLine); + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Loaders.NeutronAccelerators[8].copy()) + .metadata(RESEARCH_TIME, 16 * MINUTES) + .itemInputs( + ItemRefer.Inverter.get(8), + ItemList.Hull_MAX.get(1L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 4), + GGMaterial.orundum.get(OrePrefixes.plate, 2), + GTOreDictUnificator.get(OrePrefixes.plateTriple, MaterialsKevlar.Kevlar, 8), + ItemList.UV_Coil.get(8), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Neutronium, 16), + ItemList.Electric_Motor_UHV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorZPM, 4)) + .fluidInputs(WerkstoffLoader.Oganesson.getFluidOrGas(12000), Materials.Grade5PurifiedWater.getFluid(16000)) + .itemOutputs(Loaders.NeutronAccelerators[9].copy()) + .eut(TierEU.RECIPE_UHV) + .duration(15 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Loaders.NeutronAccelerators[9].copy()) + .metadata(RESEARCH_TIME, 16 * MINUTES) + .itemInputs( + ItemRefer.Inverter.get(16), + ItemList.Hull_UEV.get(1L), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Draconium, 4), + GGMaterial.orundum.get(OrePrefixes.plate, 8), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsKevlar.Kevlar, 16), + ItemList.UHV_Coil.get(8), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.TengamAttuned, 16), + ItemList.Electric_Motor_UEV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUV, 4)) + .fluidInputs( + GGMaterial.metastableOganesson.getMolten(3 * 144), + Materials.Grade6PurifiedWater.getFluid(16000)) + .itemOutputs(Loaders.NeutronAccelerators[10].copy()) + .eut(TierEU.RECIPE_UEV) + .duration(15 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Loaders.NeutronAccelerators[10].copy()) + .metadata(RESEARCH_TIME, 16 * MINUTES) + .itemInputs( + ItemRefer.Inverter.get(32), + ItemList.Hull_UIV.get(1L), + MaterialsElements.STANDALONE.HYPOGEN.getWire01(4), + MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getPlate(8), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.RadoxPolymer, 16), + ItemList.Tesseract.get(8), + ItemList.Electromagnet_Tengam.get(1), + ItemList.Electric_Motor_UIV.get(2), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Infinity, 16), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 4)) + .fluidInputs( + GGMaterial.metastableOganesson.getMolten(12 * 144), + MaterialsUEVplus.DimensionallyShiftedSuperfluid.getFluid(4000), + Materials.Grade7PurifiedWater.getFluid(16000)) + .itemOutputs(Loaders.NeutronAccelerators[11].copy()) + .eut(TierEU.RECIPE_UIV) + .duration(15 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Loaders.NeutronAccelerators[11].copy()) + .metadata(RESEARCH_TIME, 16 * MINUTES) + .itemInputs( + ItemRefer.Inverter.get(64), + ItemList.Hull_UMV.get(1L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 4), + MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getPlate(32), + GTOreDictUnificator.get(OrePrefixes.plateSuperdense, Materials.RadoxPolymer, 1), + ItemList.EnergisedTesseract.get(12), + ItemList.Electromagnet_Tengam.get(1), + ItemList.Electric_Motor_UMV.get(2), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Creon, 16), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Mellion, 16), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 4)) + .fluidInputs( + GGMaterial.shirabon.getMolten(3 * 144), + MaterialsUEVplus.DimensionallyShiftedSuperfluid.getFluid(8000), + Materials.Grade8PurifiedWater.getFluid(16000)) + .itemOutputs(Loaders.NeutronAccelerators[12].copy()) + .eut(TierEU.RECIPE_UMV) + .duration(15 * SECONDS) + .addTo(AssemblyLine); + GTValues.RA.stdBuilder() .itemInputs( ItemList.Casing_IV.get(1L), diff --git a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java index 1d761dd315e..e22c8028298 100644 --- a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java +++ b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java @@ -1940,7 +1940,11 @@ public enum MetaTileEntityIDs { ComponentAssemblyLine(32026), AntimatterForge(32027), WireLumiium(32737), - WireSignalium(32749),; + WireSignalium(32749), + NeutronAcceleratorUHV(32761), + NeutronAcceleratorUEV(32762), + NeutronAcceleratorUIV(32763), + NeutronAcceleratorUMV(32764),; public final int ID; From 34f74b605039dc7457b8c59a1c3fbe0ae600b63d Mon Sep 17 00:00:00 2001 From: chochem <40274384+chochem@users.noreply.github.com> Date: Sun, 15 Dec 2024 09:33:12 +0000 Subject: [PATCH 142/181] fix bug in werkstoff recipe autogen (#3652) --- .../werkstoff_loaders/recipe/MoltenCellLoader.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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 index 60869619a44..96676b889ab 100644 --- a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MoltenCellLoader.java +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MoltenCellLoader.java @@ -110,8 +110,10 @@ public void run(Werkstoff werkstoff) { .itemOutputs(werkstoff.get(ingot)) .fluidInputs(werkstoff.getMolten(144)) .duration( - (int) werkstoff.getStats() - .getMass()) + Math.max( + 1, + (int) werkstoff.getStats() + .getMass())) .eut( werkstoff.getStats() .getMass() > 128 ? 64 : 30) @@ -122,8 +124,10 @@ public void run(Werkstoff werkstoff) { .itemOutputs(werkstoff.get(nugget)) .fluidInputs(werkstoff.getMolten(16)) .duration( - (int) ((double) werkstoff.getStats() - .getMass() / 9D)) + Math.max( + 1, + (int) ((double) werkstoff.getStats() + .getMass() / 9D))) .eut( werkstoff.getStats() .getMass() > 128 ? 64 : 30) From e62e5f7a5b4394716a97f3c7daa75bb4762bc4a5 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sun, 15 Dec 2024 13:41:01 +0100 Subject: [PATCH 143/181] update --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index f6249e81ce6..5a6ae8ee554 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -80,12 +80,12 @@ dependencies { compileOnly rfg.deobf("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:Nuclear-Control:2.6.7:dev") { transitive = false } compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") { transitive = false } - implementation("com.github.GTNewHorizons:Hodgepodge:2.6.0:dev") + implementation("com.github.GTNewHorizons:Hodgepodge:2.6.2:dev") compileOnly('com.github.GTNewHorizons:Botania:1.12.1-GTNH:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:HoloInventory:2.4.13-GTNH:dev') { transitive = false } compileOnly rfg.deobf("curse.maven:extra-utilities-225561:2264384") compileOnly rfg.deobf('curse.maven:minefactory-reloaded-66672:2366150') - compileOnly("com.github.GTNewHorizons:OpenComputers:1.10.27-GTNH:dev") {transitive = false} + compileOnly("com.github.GTNewHorizons:OpenComputers:1.11.0-GTNH:dev") {transitive = false} // https://www.curseforge.com/minecraft/mc-mods/advancedsolarpanels compileOnlyApi rfg.deobf('curse.maven:advsolar-362768:2885953') compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.6.27-GTNH:dev') {transitive = false} From 2355a65031413a83cc02e6d02f031759facb572e Mon Sep 17 00:00:00 2001 From: Yannick Marcotte-Gourde Date: Sun, 15 Dec 2024 10:53:40 -0500 Subject: [PATCH 144/181] Single-block boilers accept empty containers again (#3651) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../gregtech/common/tileentities/boilers/MTEBoiler.java | 9 +++++---- .../common/tileentities/generators/MTEBoilerBase.java | 5 ----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/boilers/MTEBoiler.java b/src/main/java/gregtech/common/tileentities/boilers/MTEBoiler.java index a84cb8ac910..9364fd35b24 100644 --- a/src/main/java/gregtech/common/tileentities/boilers/MTEBoiler.java +++ b/src/main/java/gregtech/common/tileentities/boilers/MTEBoiler.java @@ -361,7 +361,7 @@ public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aInde @Override public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, ItemStack aStack) { - return isAutomatable() && (aIndex == 0 && isItemValidFluidFilledItem(aStack)) + return isAutomatable() && (aIndex == 0 && isValidFluidInputSlotItem(aStack)) || (aIndex == 2 && isItemValidFuel(aStack)); } @@ -432,7 +432,7 @@ protected IDrawable[] getAshSlotBackground() { @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { builder.widget( - new SlotWidget(inventoryHandler, 0).setFilter(this::isItemValidFluidFilledItem) + new SlotWidget(inventoryHandler, 0).setFilter(this::isValidFluidInputSlotItem) .setPos(43, 25) .setBackground(getGUITextureSet().getItemSlot(), getOverlaySlotIn())) .widget( @@ -473,8 +473,9 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont .setSize(18, 18)); } - private boolean isItemValidFluidFilledItem(@NotNull ItemStack stack) { - return isFluidInputAllowed(GTUtility.getFluidForFilledItem(stack, true)); + private boolean isValidFluidInputSlotItem(@NotNull ItemStack stack) { + return GTUtility.fillFluidContainer(GTModHandler.getSteam(getSteamCapacity()), stack, false, true) != null + || isFluidInputAllowed(GTUtility.getFluidForFilledItem(stack, true)); } protected Widget createFuelSlot() { 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 index 97167ca7986..af4fcc4598b 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerBase.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerBase.java @@ -161,11 +161,6 @@ public int maxProgresstime() { return 1000 + (250 * tier); } - @Override - public boolean isElectric() { - return false; - } - @Override public int getCapacity() { return (16000 + (16000 * tier)); From f809df981a20ca4cc10556d0a8f8513106316710 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sun, 15 Dec 2024 14:03:58 -0600 Subject: [PATCH 145/181] Reallow dynamo hatches on Data Bank for power pass (#3653) --- .../metaTileEntity/multi/MTEDataBank.java | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEDataBank.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEDataBank.java index e1f6078741c..87c77e4afbe 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/MTEDataBank.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEDataBank.java @@ -3,10 +3,12 @@ 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.Dynamo; import static gregtech.api.enums.HatchElement.Energy; import static gregtech.api.enums.HatchElement.Maintenance; import static gregtech.api.util.GTStructureUtility.buildHatchAdder; import static net.minecraft.util.StatCollector.translateToLocal; +import static tectech.thing.metaTileEntity.multi.base.TTMultiblockBase.HatchElement.DynamoMulti; import static tectech.thing.metaTileEntity.multi.base.TTMultiblockBase.HatchElement.EnergyMulti; import java.util.ArrayList; @@ -15,7 +17,6 @@ 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; @@ -25,8 +26,8 @@ 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.structure.ISurvivalBuildEnvironment; import gregtech.api.enums.SoundResource; import gregtech.api.enums.Textures; @@ -83,7 +84,7 @@ public class MTEDataBank extends TTMultiblockBase implements ISurvivalConstructa .addElement('B', ofBlock(TTCasingsContainer.sBlockCasingsTT, 2)) .addElement( 'C', - buildHatchAdder(MTEDataBank.class).atLeast(Maintenance, Energy, EnergyMulti) + buildHatchAdder(MTEDataBank.class).atLeast(Maintenance, Energy, EnergyMulti, Dynamo, DynamoMulti) .casingIndex(BlockGTCasingsTT.textureOffset) .dot(1) .buildAndChain(TTCasingsContainer.sBlockCasingsTT, 0)) @@ -281,9 +282,9 @@ public void construct(ItemStack stackSize, boolean hintsOnly) { } @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { if (mMachine) return -1; - return survivialBuildPiece("main", stackSize, 2, 1, 0, elementBudget, source, actor, false, true); + return survivialBuildPiece("main", stackSize, 2, 1, 0, elementBudget, env, false, true); } @Override @@ -345,18 +346,8 @@ public IGTHatchAdder adder() { } } - @Override - public boolean isPowerPassButtonEnabled() { - return true; - } - @Override public boolean isSafeVoidButtonEnabled() { return false; } - - @Override - public boolean isAllowedToWorkButtonEnabled() { - return true; - } } From 751981a426d3ca4093648213d0f92c17567ee200 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Sun, 15 Dec 2024 17:20:12 -0600 Subject: [PATCH 146/181] Migrate Research Completer to GT5u (#3620) Co-authored-by: Martin Robertz Co-authored-by: boubou19 --- .../java/gregtech/api/enums/ItemList.java | 2 +- .../gregtech/api/enums/MetaTileEntityIDs.java | 2 +- .../gregtech/api/net/GTPacketNodeInfo.java | 68 +++ .../java/gregtech/api/net/GTPacketTypes.java | 1 + .../machines/multi/MTEResearchCompleter.java | 389 ++++++++++++++++++ .../preload/LoaderMetaTileEntities.java | 8 + 6 files changed, 468 insertions(+), 2 deletions(-) create mode 100644 src/main/java/gregtech/api/net/GTPacketNodeInfo.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEResearchCompleter.java diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index d1242c3c1b2..6910c0d72ed 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -2566,7 +2566,7 @@ public enum ItemList implements IItemContainer { Thermal_Superconductor, Relativistic_Heat_Capacitor, Phononic_Seed_Crystal, - ResearchCompleter, // Populated in EMT + ResearchCompleter, SpaceElevatorController, // Populated in GTNH-Intergalactic Spray_Color_Infinite, // semicolon after the comment to reduce merge conflicts diff --git a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java index e22c8028298..2aa902b8357 100644 --- a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java +++ b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java @@ -1467,7 +1467,7 @@ public enum MetaTileEntityIDs { AcidGeneratorLV(12793), HumongousInputHatch(12799), CreativeScanner(12800), - ResearchCompleter(13001), // In EMT + ResearchCompleter(13001), sofc1(13101), sofc2(13102), tfft(13104), diff --git a/src/main/java/gregtech/api/net/GTPacketNodeInfo.java b/src/main/java/gregtech/api/net/GTPacketNodeInfo.java new file mode 100644 index 00000000000..6d0a0648196 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketNodeInfo.java @@ -0,0 +1,68 @@ +package gregtech.api.net; + +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.common.tileentities.machines.multi.MTEResearchCompleter; +import io.netty.buffer.ByteBuf; + +public class GTPacketNodeInfo extends GTPacket { + + private int mBlockX, mBlockY, mBlockZ, mDim, nodeDistance, nodeColor; + + public GTPacketNodeInfo() { + super(); + } + + public GTPacketNodeInfo(int mBlockX, int mBlockY, int mBlockZ, int mDim, int nodeDistance, int nodeColor) { + this.mBlockX = mBlockX; + this.mBlockY = mBlockY; + this.mBlockZ = mBlockZ; + this.mDim = mDim; + this.nodeDistance = nodeDistance; + this.nodeColor = nodeColor; + } + + @Override + public byte getPacketID() { + return GTPacketTypes.NODE_INFO.id; + } + + @Override + public void encode(ByteBuf buf) { + buf.writeInt(mBlockX); + buf.writeInt(mBlockY); + buf.writeInt(mBlockZ); + buf.writeInt(mDim); + buf.writeInt(nodeDistance); + buf.writeInt(nodeColor); + } + + @Override + public GTPacket decode(ByteArrayDataInput buf) { + return new GTPacketNodeInfo( + buf.readInt(), + buf.readInt(), + buf.readInt(), + buf.readInt(), + buf.readInt(), + buf.readInt()); + } + + @Override + public void process(IBlockAccess world) { + if (world instanceof WorldClient worldClient) { + if (worldClient.blockExists(mBlockX, mBlockY, mBlockZ)) { + TileEntity tileEntity = world.getTileEntity(mBlockX, mBlockY, mBlockZ); + if (tileEntity instanceof IGregTechTileEntity igtte + && igtte.getMetaTileEntity() instanceof MTEResearchCompleter completer) { + completer.setNodeValues(nodeDistance, nodeColor); + } + } + } + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketTypes.java b/src/main/java/gregtech/api/net/GTPacketTypes.java index 915d03b88ee..0179fe5c0a2 100644 --- a/src/main/java/gregtech/api/net/GTPacketTypes.java +++ b/src/main/java/gregtech/api/net/GTPacketTypes.java @@ -36,6 +36,7 @@ public enum GTPacketTypes { SERVER_JOINED(26, new PacketServerJoined()), EIC(27, new PacketEIC()), CREATE_TILE_ENTITY(28, new GTPacketCreateTE()), + NODE_INFO(29, new GTPacketNodeInfo()), // merge conflict prevention comment, keep a trailing comma above ; diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEResearchCompleter.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEResearchCompleter.java new file mode 100644 index 00000000000..2ce4950f1d9 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEResearchCompleter.java @@ -0,0 +1,389 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.common.network.NetworkRegistry; +import gregtech.api.GregTechAPI; +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.MTEEnhancedMultiBlockBase; +import gregtech.api.net.GTPacketNodeInfo; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.research.ResearchCategories; +import thaumcraft.api.research.ResearchItem; +import thaumcraft.common.Thaumcraft; +import thaumcraft.common.config.ConfigBlocks; +import thaumcraft.common.config.ConfigItems; +import thaumcraft.common.lib.research.ResearchManager; +import thaumcraft.common.lib.research.ResearchNoteData; +import thaumcraft.common.tiles.TileNode; + +public class MTEResearchCompleter extends MTEEnhancedMultiBlockBase { + + private static final int CASING_INDEX = 184; + private static final int MAX_LENGTH = 13; + private static final int RECIPE_LENGTH = 1200; + private static final int RECIPE_EUT = 120; + private static final float NODE_COST_MULTIPLIER = 1.0f; + + private int recipeAspectCost; + private int aspectsAbsorbed; + + protected int mLength; + protected int mCasing; + protected boolean endFound; + + // For displaying beam + private int lastNodeDistance; + private int lastNodeColor; + private int syncTimer; + + 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 String STRUCTURE_PIECE_LATER_HINT = "laterHint"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_FIRST, transpose(new String[][] { { "ccc" }, { "g~g" }, { "ccc" }, })) + .addShape(STRUCTURE_PIECE_LATER, transpose(new String[][] { { "c c" }, { "gxg" }, { "c c" }, })) + .addShape(STRUCTURE_PIECE_LAST, transpose(new String[][] { { "c" }, { "g" }, { "c" }, })) + .addShape(STRUCTURE_PIECE_LATER_HINT, transpose(new String[][] { { "c c" }, { "g g" }, { "c c" }, })) + .addElement( + 'c', + ofChain( // Magical machine casing or hatch + ofHatchAdder(MTEResearchCompleter::addEnergyInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEResearchCompleter::addInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEResearchCompleter::addOutputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEResearchCompleter::addMaintenanceToMachineList, CASING_INDEX, 1), + onElementPass(MTEResearchCompleter::onCasingFound, ofBlock(GregTechAPI.sBlockCasings8, 8)))) + .addElement( + 'x', + ofChain( // Check for the end but otherwise treat as a skipped spot + onElementPass(MTEResearchCompleter::onEndFound, ofBlock(ConfigBlocks.blockCosmeticOpaque, 2)), + isAir(), // Forgive me + notAir())) + .addElement('g', ofBlock(ConfigBlocks.blockCosmeticOpaque, 2)) // Warded glass + .build(); + + public MTEResearchCompleter(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEResearchCompleter(String aName) { + super(aName); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("recipeAspectCost", recipeAspectCost); + aNBT.setInteger("aspectsAbsorbed", aspectsAbsorbed); + aNBT.setInteger("mLength", mLength); + + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + recipeAspectCost = aNBT.getInteger("recipeAspectCost"); + aspectsAbsorbed = aNBT.getInteger("aspectsAbsorbed"); + mLength = aNBT.getInteger("mLength"); + + super.loadNBTData(aNBT); + } + + // For client beam animation + public void setNodeValues(int nodeDistance, int nodeColor) { + this.lastNodeDistance = nodeDistance; + this.lastNodeColor = nodeColor; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isClientSide()) { + if (aBaseMetaTileEntity.isActive()) { + int xDir = aBaseMetaTileEntity.getBackFacing().offsetX; + int yDir = aBaseMetaTileEntity.getBackFacing().offsetY; + int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ; + double xCoord = aBaseMetaTileEntity.getXCoord() + 0.5; + double yCoord = aBaseMetaTileEntity.getYCoord() + 0.5; + double zCoord = aBaseMetaTileEntity.getZCoord() + 0.5; + Thaumcraft.proxy.beam( + aBaseMetaTileEntity.getWorld(), + xCoord + 0.5 * xDir, + yCoord + 0.5 * yDir, + zCoord + 0.5 * zDir, + xCoord + xDir * lastNodeDistance, + yCoord + yDir * lastNodeDistance, + zCoord + zDir * lastNodeDistance, + 3, + lastNodeColor, + true, + 2, + 1); + } else { + lastNodeDistance = 0; + lastNodeColor = 0; + } + } + + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + float progressAmount = ((float) this.mProgresstime) / this.mMaxProgresstime; + int requiredVis = (int) Math.ceil(progressAmount * recipeAspectCost - aspectsAbsorbed); + syncTimer--; + + IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); + int xDir = aBaseMetaTileEntity.getBackFacing().offsetX; + int yDir = aBaseMetaTileEntity.getBackFacing().offsetY; + int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ; + int i = 1; + + // Loop through node spaces and drain them from front to back + while (i < this.mLength - 1 && requiredVis > 0) { + int nodeX = aBaseMetaTileEntity.getXCoord() + xDir * i; + int nodeY = aBaseMetaTileEntity.getYCoord() + yDir * i; + int nodeZ = aBaseMetaTileEntity.getZCoord() + zDir * i; + TileEntity tileEntity = aBaseMetaTileEntity.getWorld() + .getTileEntity(nodeX, nodeY, nodeZ); + + if (tileEntity instanceof TileNode) { + TileNode aNode = (TileNode) tileEntity; + AspectList aspectsBase = aNode.getAspectsBase(); + + for (Aspect aspect : aspectsBase.getAspects()) { + int aspectAmount = aspectsBase.getAmount(aspect); + int drainAmount = Math.min(requiredVis, aspectAmount); + aNode.setNodeVisBase(aspect, (short) (aspectAmount - drainAmount)); + aNode.takeFromContainer(aspect, drainAmount); + requiredVis -= drainAmount; + aspectsAbsorbed += drainAmount; + + if (requiredVis <= 0) { + if (i != lastNodeDistance || aspect.getColor() != lastNodeColor) + sendClientAnimationUpdate(aBaseMetaTileEntity, i, aspect.getColor()); + + break; + } + } + + if (aspectsBase.visSize() <= 0) aBaseMetaTileEntity.getWorld() + .setBlockToAir(nodeX, nodeY, nodeZ); + else { + aNode.markDirty(); + aBaseMetaTileEntity.getWorld() + .markBlockForUpdate(nodeX, nodeY, nodeZ); + } + } + i++; + } + + if (syncTimer <= 0) sendClientAnimationUpdate(aBaseMetaTileEntity, lastNodeDistance, lastNodeColor); + + if (requiredVis > 0) this.stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); + + return super.onRunningTick(aStack); + } + + private void sendClientAnimationUpdate(IGregTechTileEntity aBaseMetaTileEntity, int nodeDistance, int nodeColor) { + int xCoord = aBaseMetaTileEntity.getXCoord(); + int yCoord = aBaseMetaTileEntity.getYCoord(); + int zCoord = aBaseMetaTileEntity.getZCoord(); + int dim = aBaseMetaTileEntity.getWorld().provider.dimensionId; + + GTPacketNodeInfo packet = new GTPacketNodeInfo(xCoord, yCoord, zCoord, dim, nodeDistance, nodeColor); + GTValues.NW.sendToAllAround(packet, new NetworkRegistry.TargetPoint(dim, xCoord, yCoord, zCoord, 128)); + + lastNodeDistance = nodeDistance; + lastNodeColor = nodeColor; + syncTimer = 100; + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public boolean checkRecipe(ItemStack itemStack) { + ArrayList tInputList = this.getStoredInputs(); + + for (ItemStack stack : tInputList) { + if (GTUtility.isStackValid(stack) && stack.stackSize > 0) { + if (stack.getItem() == ConfigItems.itemResearchNotes + && !stack.stackTagCompound.getBoolean("complete")) { + ResearchNoteData noteData = ResearchManager.getData(stack); + if (noteData == null) continue; + ResearchItem researchItem = ResearchCategories.getResearch(noteData.key); + if (researchItem == null) continue; + + this.mEfficiency = 10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000; + this.mEfficiencyIncrease = 10000; + this.calculateOverclockedNessMultiInternal( + RECIPE_EUT, + RECIPE_LENGTH, + 1, + this.getMaxInputVoltage(), + false); + if (this.mMaxProgresstime == 2147483646 && this.mEUt == 2147483646) { + return false; + } + if (this.mEUt > 0) { + this.mEUt = -this.mEUt; + } + + // Create a completed version of the note to output + this.mOutputItems = new ItemStack[] { GTUtility.copyAmount(1, stack) }; + this.mOutputItems[0].stackTagCompound.setBoolean("complete", true); + this.mOutputItems[0].setItemDamage(64); + stack.stackSize -= 1; + this.aspectsAbsorbed = 0; + this.recipeAspectCost = (int) Math.ceil(researchItem.tags.visSize() * NODE_COST_MULTIPLIER); + + this.lastNodeDistance = 0; + this.lastNodeColor = 0; + + this.sendLoopStart((byte) 20); + this.updateSlots(); + return true; + } + } + } + + return false; + } + + @Override + public boolean checkMachine(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + mLength = 1; + mCasing = 0; + endFound = false; + + // check front + if (!checkPiece(STRUCTURE_PIECE_FIRST, 1, 1, 0)) return false; + + // check middle pieces + while (!endFound && mLength++ < MAX_LENGTH) { + if (!checkPiece(STRUCTURE_PIECE_LATER, 1, 1, -(mLength - 1))) return false; + } + + return endFound && mLength >= 3 + && checkPiece(STRUCTURE_PIECE_LAST, 0, 1, -(mLength - 1)) + && mCasing >= mLength * 3; + } + + @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 MTEResearchCompleter(this.mName); + } + + protected void onCasingFound() { + mCasing++; + } + + protected void onEndFound() { + endFound = true; + } + + @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_RESEARCH_COMPLETER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_RESEARCH_COMPLETER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_RESEARCH_COMPLETER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Research Completer") + .addInfo("Completes Thaumcraft research notes using EU and Thaumcraft nodes") + .addInfo("Place nodes in the center row") + .beginVariableStructureBlock(3, 3, 3, 3, 3, MAX_LENGTH, true) + .addController("Front center") + .addOtherStructurePart("Magical machine casing", "Top and bottom layers outside. 3 x L minimum") + .addOtherStructurePart("Warded glass", "Middle layer outside") + .addEnergyHatch("Any casing") + .addMaintenanceHatch("Any casing") + .addInputBus("Any casing") + .addOutputBus("Any casing") + .toolTipFinisher(); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_FIRST, stackSize, hintsOnly, 1, 1, 0); + int tTotalLength = Math.min(MAX_LENGTH, stackSize.stackSize + 2); + for (int i = 1; i < tTotalLength; i++) { + buildPiece(STRUCTURE_PIECE_LATER_HINT, stackSize, hintsOnly, 1, 1, -i); + } + buildPiece(STRUCTURE_PIECE_LAST, stackSize, hintsOnly, 0, 1, -(tTotalLength - 1)); + } +} diff --git a/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java b/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java index 6cb64fd5ff7..b34cd031ea3 100644 --- a/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java @@ -885,6 +885,7 @@ 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.enums.Mods.Thaumcraft; import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; import static gregtech.api.recipe.RecipeMaps.amplifierRecipes; import static gregtech.api.recipe.RecipeMaps.arcFurnaceRecipes; @@ -1071,6 +1072,7 @@ 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.MTEResearchCompleter; import gregtech.common.tileentities.machines.multi.MTETranscendentPlasmaMixer; import gregtech.common.tileentities.machines.multi.MTEVacuumFreezer; import gregtech.common.tileentities.machines.multi.MTEWormholeGenerator; @@ -1630,6 +1632,12 @@ private static void registerMultiblockControllers() { ItemList.LargeFluidExtractor.set( new MTELargeFluidExtractor(LARGE_FLUID_EXTRACTOR.ID, "multimachine.fluidextractor", "Large Fluid Extractor") .getStackForm(1)); + + if (Thaumcraft.isModLoaded()) { + ItemList.ResearchCompleter.set( + new MTEResearchCompleter(ResearchCompleter.ID, "Research Completer", "Research Completer") + .getStackForm(1)); + } } private static void registerSteamMachines() { From b860dddcc547b2a03fa73e4a4dc0d5fa93a6f004 Mon Sep 17 00:00:00 2001 From: Ableytner <56540036+Ableytner@users.noreply.github.com> Date: Mon, 16 Dec 2024 16:08:22 +0100 Subject: [PATCH 147/181] Fix Zircaloy-4 dust recipe conflict (#3654) --- .../java/gregtech/loaders/postload/recipes/MixerRecipes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java index 1fd049feb0c..5081f8b585f 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java @@ -76,7 +76,7 @@ public void run() { .itemInputs( GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1), GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1), - GTUtility.getIntegratedCircuit(4)) + GTUtility.getIntegratedCircuit(5)) .itemOutputs(GTOreDictUnificator.getDust(Materials.TinAlloy, 2L * OrePrefixes.dust.mMaterialAmount)) .duration(5 * SECONDS) .eut(8) From 188fb888f98a94c52e30682ffca6a307ed032b2a Mon Sep 17 00:00:00 2001 From: Spacebuilder2020 Date: Mon, 16 Dec 2024 08:16:05 -0700 Subject: [PATCH 148/181] Add a small bonus applied to fuels with large burntime to GT large boilers. (#3418) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../tileentities/machines/multi/MTELargeBoiler.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoiler.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoiler.java index 4c310eb2f8b..e566dcb44ab 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoiler.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoiler.java @@ -334,7 +334,8 @@ public CheckRecipeResult checkProcessing() { this.mMaxProgresstime += this.excessFuel / 80; this.excessFuel %= 80; this.mEfficiencyIncrease = this.mMaxProgresstime * getEfficiencyIncrease(); - this.mMaxProgresstime = adjustBurnTimeForConfig(runtimeBoost(this.mMaxProgresstime)); + int burnTime = (int) (this.mMaxProgresstime * getLongBurntimeRatio(tInput)); + this.mMaxProgresstime = adjustBurnTimeForConfig(runtimeBoost(burnTime)); this.mEUt = adjustEUtForConfig(getEUt()); this.mOutputItems = new ItemStack[] { GTUtility.getContainerItem(tInput, true) }; tInput.stackSize -= 1; @@ -354,6 +355,11 @@ public CheckRecipeResult checkProcessing() { return CheckRecipeResultRegistry.NO_FUEL_FOUND; } + private double getLongBurntimeRatio(ItemStack tInput) { + double logScale = Math.log((float) GTModHandler.getFuelValue(tInput) / 1600) / Math.log(9); + return 1 + logScale * 0.025; + } + abstract int runtimeBoost(int mTime); abstract boolean isSuperheated(); From 7ec1617a1db0746fb76864663735c4bf24f1b8c3 Mon Sep 17 00:00:00 2001 From: HoleFish <48403212+HoleFish@users.noreply.github.com> Date: Mon, 16 Dec 2024 23:28:56 +0800 Subject: [PATCH 149/181] Align multiblock text to left (#3553) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../common/tileentities/multis/MTELESU.java | 15 ++++-- .../tileentities/multis/MTEWindmill.java | 3 +- src/main/java/ggfab/mte/MTEAdvAssLine.java | 4 +- .../blocks/tileEntity/AntimatterForge.java | 5 ++ .../tileEntity/AntimatterGenerator.java | 4 ++ .../tileEntity/MTENeutronActivator.java | 6 ++- .../blocks/tileEntity/MTEYottaFluidTank.java | 5 ++ .../base/MTELargeFusionComputer.java | 3 ++ .../implementations/MTEMultiBlockBase.java | 47 ++++++++++++------- .../machines/multi/MTEFusionComputer.java | 3 +- .../machines/multi/MTENanoForge.java | 2 + .../machines/multi/MTEWormholeGenerator.java | 6 ++- .../purification/MTEPurificationPlant.java | 18 ++++--- .../base/GTPPMultiBlockBase.java | 28 ++++++++++- ...aTileEntity_PowerSubStationController.java | 7 +++ .../MTELapotronicSuperCapacitor.java | 39 +++++++++++---- .../KubaTechGTMultiBlockBase.java | 6 +-- .../MTEExtremeIndustrialGreenhouse.java | 6 +-- .../multiblock/MTEMegaIndustrialApiary.java | 6 +-- .../multi/base/TTMultiblockBase.java | 4 +- .../multi/godforge/MTEBaseModule.java | 6 +-- 21 files changed, 164 insertions(+), 59 deletions(-) diff --git a/src/main/java/bartworks/common/tileentities/multis/MTELESU.java b/src/main/java/bartworks/common/tileentities/multis/MTELESU.java index e2c393f889a..3fd6df356b5 100644 --- a/src/main/java/bartworks/common/tileentities/multis/MTELESU.java +++ b/src/main/java/bartworks/common/tileentities/multis/MTELESU.java @@ -31,6 +31,7 @@ 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.math.Alignment; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; @@ -528,11 +529,11 @@ public int getSlotStackLimit() { private long clientAmps; private void drawTexts(DynamicPositionedColumn screenElements) { - screenElements.setSpace(0) - .setPos(11, 8); + screenElements.setSpace(0); screenElements.widget( new TextWidget().setStringSupplier(() -> "EU: " + numberFormat.format(this.clientEU)) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(this.COLOR_TEXT_WHITE.get())) .widget( new FakeSyncWidget.LongSyncer( @@ -541,6 +542,7 @@ private void drawTexts(DynamicPositionedColumn screenElements) { val -> clientEU = val)) .widget( new TextWidget().setStringSupplier(() -> "MAX: " + numberFormat.format(clientMaxEU)) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(this.COLOR_TEXT_WHITE.get())) .widget( new FakeSyncWidget.LongSyncer( @@ -552,6 +554,7 @@ private void drawTexts(DynamicPositionedColumn screenElements) { val -> clientMaxEU = val)) .widget( new TextWidget().setStringSupplier(() -> "MAX EU/t IN: " + numberFormat.format(clientMaxIn)) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(this.COLOR_TEXT_WHITE.get())) .widget( new FakeSyncWidget.LongSyncer( @@ -560,6 +563,7 @@ private void drawTexts(DynamicPositionedColumn screenElements) { val -> clientMaxIn = val)) .widget( new TextWidget().setStringSupplier(() -> "EU/t OUT: " + numberFormat.format(clientMaxOut)) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(this.COLOR_TEXT_WHITE.get())) .widget( new FakeSyncWidget.LongSyncer( @@ -568,6 +572,7 @@ private void drawTexts(DynamicPositionedColumn screenElements) { val -> clientMaxOut = val)) .widget( new TextWidget().setStringSupplier(() -> "AMP/t IN/OUT: " + numberFormat.format(clientAmps)) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(this.COLOR_TEXT_WHITE.get())) .widget( new FakeSyncWidget.LongSyncer( @@ -575,10 +580,12 @@ private void drawTexts(DynamicPositionedColumn screenElements) { .getInputAmperage(), val -> clientAmps = val)) .widget( - new TextWidget(Text.localised("tooltip.LESU.0.name")).setDefaultColor(Color.YELLOW.getRGB()) + new TextWidget(Text.localised("tooltip.LESU.0.name")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(Text.localised("tooltip.LESU.1.name")).setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(Color.RED.getRGB()) .setEnabled( widget -> !this.getBaseMetaTileEntity() .isActive())); diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEWindmill.java b/src/main/java/bartworks/common/tileentities/multis/MTEWindmill.java index b6636f97c3c..61f925c5e20 100644 --- a/src/main/java/bartworks/common/tileentities/multis/MTEWindmill.java +++ b/src/main/java/bartworks/common/tileentities/multis/MTEWindmill.java @@ -50,6 +50,7 @@ import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; import com.gtnewhorizon.structurelib.structure.StructureDefinition; import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; +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; @@ -617,7 +618,7 @@ else if (System.currentTimeMillis() / DIVIDER % 40 == 0) val -> this.getBaseMetaTileEntity() .setActive(val))) .widget( - new TextWidget(GTUtility.trans("138", "Incomplete Structure.")) + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setTextAlignment(Alignment.CenterLeft) .setDefaultColor(this.COLOR_TEXT_WHITE.get()) .setMaxWidth(150) .setEnabled(widget -> !this.mMachine) diff --git a/src/main/java/ggfab/mte/MTEAdvAssLine.java b/src/main/java/ggfab/mte/MTEAdvAssLine.java index 3ca3826f6aa..a4c913207ce 100644 --- a/src/main/java/ggfab/mte/MTEAdvAssLine.java +++ b/src/main/java/ggfab/mte/MTEAdvAssLine.java @@ -522,9 +522,11 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve * l -> { currentInputLength = l; for (SliceStatusWidget w : arr) { w.updateText(); } })); */ screenElements.widget( - new TextWidget(Text.localised("ggfab.gui.advassline.shutdown")).setEnabled(this::hasAbnormalStopReason)); + new TextWidget(Text.localised("ggfab.gui.advassline.shutdown")).setTextAlignment(Alignment.CenterLeft) + .setEnabled(this::hasAbnormalStopReason)); screenElements.widget( new TextWidget().setTextSupplier(() -> Text.localised(lastStopReason)) + .setTextAlignment(Alignment.CenterLeft) .attachSyncer( new FakeSyncWidget.StringSyncer(() -> lastStopReason, r -> this.lastStopReason = r), screenElements) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java index d694efc36b1..3e1169d1182 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java @@ -28,6 +28,7 @@ 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.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.SlotWidget; @@ -813,6 +814,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve + numberFormat.format(antimatterAmountCache) + EnumChatFormatting.WHITE + " L") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get())) .widget(new FakeSyncWidget.LongSyncer(this::getAntimatterAmount, val -> antimatterAmountCache = val)) .widget( @@ -823,6 +825,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve + standardFormat.format(passiveCostCache) + EnumChatFormatting.WHITE + " EU/t") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get())) .widget(new FakeSyncWidget.LongSyncer(this::getPassiveConsumption, val -> passiveCostCache = val)) .widget( @@ -833,6 +836,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve + standardFormat.format(activeCostCache) + EnumChatFormatting.WHITE + " EU") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get())) .widget(new FakeSyncWidget.LongSyncer(this::getActiveConsumption, val -> activeCostCache = val)) .widget( @@ -843,6 +847,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve + numberFormat.format(antimatterChangeCache) + EnumChatFormatting.WHITE + " L") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get())) .widget(new FakeSyncWidget.LongSyncer(this::getAntimatterChange, val -> antimatterChangeCache = val)); } diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java index 1966a42d02d..d6a99ff9758 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java @@ -33,6 +33,7 @@ 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.screen.ModularWindow; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.common.widget.ButtonWidget; @@ -499,6 +500,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve + standardFormat.format(energyProducedCache) + EnumChatFormatting.WHITE + " EU") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get())) .widget(new FakeSyncWidget.LongSyncer(this::getEnergyProduced, val -> energyProducedCache = val)) .widget( @@ -509,6 +511,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve + numberFormat.format(Math.ceil(efficiencyCache * 100)) + EnumChatFormatting.WHITE + " %") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get())) .widget(new FakeSyncWidget.FloatSyncer(this::getEfficiency, val -> efficiencyCache = val)) .widget( @@ -519,6 +522,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve + numberFormat.format(Math.ceil(avgEffCache * 100)) + EnumChatFormatting.WHITE + " % ⟩₁₀") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get())) .widget(new FakeSyncWidget.FloatSyncer(this::getAvgEfficiency, val -> avgEffCache = val)); } diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java b/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java index 4f0ebb78569..ef5e45bbfe7 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java @@ -24,6 +24,7 @@ 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.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.SlotWidget; @@ -465,9 +466,12 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve screenElements .widget( new TextWidget(StatCollector.translateToLocal("gui.NeutronActivator.0")) - .setDefaultColor(COLOR_TEXT_WHITE.get())) + .setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) .widget( new TextWidget().setStringSupplier(() -> numberFormat.format(eV / 1_000_000d) + " MeV") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) .widget(new FakeSyncWidget.IntegerSyncer(() -> eV, val -> eV = val)); diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java index 85bc452160b..5fa8d163525 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java @@ -32,6 +32,7 @@ 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.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; @@ -646,12 +647,14 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve .widget( new TextWidget().setStringSupplier( () -> StatCollector.translateToLocal("gui.YOTTank.0") + " " + numberFormat.format(mStorage) + " L") + .setTextAlignment(Alignment.CenterLeft) .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()) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val)) @@ -661,6 +664,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve () -> StatCollector.translateToLocal("gui.YOTTank.2") + " " + numberFormat.format(mStorageCurrent) + " L") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) .widget(new FakeSyncWidget.BigIntegerSyncer(() -> mStorageCurrent, val -> mStorageCurrent = val)) @@ -669,6 +673,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve .setStringSupplier( () -> StatCollector.translateToLocal("gui.YOTTank.3") + " " + getLockedFluidName()) .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setTextAlignment(Alignment.CenterLeft) .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) .widget(new FakeSyncWidget.FluidStackSyncer(() -> mLockedFluid, val -> mLockedFluid = val)) .widget(new FakeSyncWidget.BooleanSyncer(() -> isFluidLocked, val -> isFluidLocked = val)) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java index 1f7dc47f629..458504384ee 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java @@ -27,6 +27,7 @@ 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.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.SlotWidget; @@ -579,6 +580,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve () -> StatCollector.translateToLocal("gui.LargeFusion.0") + " " + numberFormat.format(energyStorageCache) + " EU") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) .widget(new FakeSyncWidget.LongSyncer(this::maxEUStore, val -> energyStorageCache = val)) @@ -588,6 +590,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve () -> StatCollector.translateToLocal("gui.LargeFusion.1") + " " + numberFormat.format(getEUVar()) + " EU") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) .widget(new FakeSyncWidget.LongSyncer(this::getEUVar, this::setEUVar)); diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index 95d1da6940b..ee20acbc93e 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -2507,9 +2507,9 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont drawTexts(screenElements, inventorySlot); builder.widget( new Scrollable().setVerticalScroll() - .widget(screenElements.setPos(10, 0)) - .setPos(0, 7) - .setSize(190, 79)); + .widget(screenElements) + .setPos(10, 7) + .setSize(182, 79)); setMachineModeIcons(); builder.widget(createPowerSwitchButton(builder)) @@ -2617,38 +2617,44 @@ protected String generateCurrentRecipeInfoString() { protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { screenElements.setSynced(false) - .setSpace(0) - .setPos(10, 7); + .setSpace(0); if (supportsMachineModeSwitch()) { screenElements.widget( - TextWidget.dynamicString( - () -> EnumChatFormatting.WHITE + GTUtility.trans("400", "Running mode: ") - + EnumChatFormatting.GOLD - + getMachineModeName())); + TextWidget + .dynamicString( + () -> EnumChatFormatting.WHITE + GTUtility.trans("400", "Running mode: ") + + EnumChatFormatting.GOLD + + getMachineModeName()) + .setTextAlignment(Alignment.CenterLeft)); } screenElements .widget( - new TextWidget(GTUtility.trans("132", "Pipe is loose.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + new TextWidget(GTUtility.trans("132", "Pipe is loose.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("133", "Screws are loose.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("134", "Something is stuck.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("135", "Platings are dented.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("136", "Circuitry burned out.")).setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> !mSolderingTool)) .widget(new FakeSyncWidget.BooleanSyncer(() -> mSolderingTool, val -> mSolderingTool = val)); screenElements.widget( @@ -2657,14 +2663,17 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve .widget(new FakeSyncWidget.BooleanSyncer(() -> mCrowbar, val -> mCrowbar = val)); screenElements .widget( - new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget("Too Uncertain.").setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> (getBaseMetaTileEntity().getErrorDisplayID() & 128) != 0)); screenElements.widget( - new TextWidget("Invalid Parameters.").setDefaultColor(COLOR_TEXT_WHITE.get()) + new TextWidget("Invalid Parameters.").setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> (getBaseMetaTileEntity().getErrorDisplayID() & 256) != 0)); screenElements.widget( @@ -2701,6 +2710,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve time.getSeconds() % 60); }) .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) .setEnabled( widget -> shouldDisplayShutDownReason() && !getBaseMetaTileEntity().isActive() && getBaseMetaTileEntity().wasShutdown())) @@ -2775,7 +2785,8 @@ public boolean isFluidEqual(FluidStack other) { } screenElements.widget( - new TextWidget(GTUtility.trans("144", "Missing Turbine Rotor")).setDefaultColor(COLOR_TEXT_WHITE.get()) + new TextWidget(GTUtility.trans("144", "Missing Turbine Rotor")).setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> { if (getBaseMetaTileEntity().isAllowedToWork()) return false; if (getBaseMetaTileEntity().getErrorDisplayID() == 0 && this instanceof MTELargeTurbine) { diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer.java index 66f78a09dba..17a55c45204 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer.java @@ -583,7 +583,8 @@ public int getGUIHeight() { public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { builder .widget( - new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> !mMachine) .setPos(10, 8)) .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTENanoForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTENanoForge.java index 91e011f9e1c..d0bf7d39a67 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTENanoForge.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTENanoForge.java @@ -29,6 +29,7 @@ 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.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.SlotWidget; @@ -349,6 +350,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve screenElements .widget( new TextWidget(StatCollector.translateToLocal("GT5U.gui.button.tier") + " " + mSpecialTier) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) .widget( diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java index 283aee3c293..022dd14d2d0 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java @@ -42,6 +42,7 @@ 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.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.SlotWidget; @@ -1150,7 +1151,8 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve } return "§7Wormhole status: Inactive§f"; - }), + }) + .setTextAlignment(Alignment.CenterLeft), TextWidget.dynamicString(() -> { if (mLink == null) { @@ -1162,6 +1164,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve return String.format("§7Wormhole diameter: §b%,d§7 ŧf", (long) (radius * 2)); }) + .setTextAlignment(Alignment.CenterLeft) .setEnabled(w -> mWormholeEnergy_UI > 0), TextWidget.dynamicString(() -> { @@ -1175,6 +1178,7 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve return String.format("§7Max I/O per hatch: §b%,d§7 EU/t§f", (long) (mLink.mWormholeEnergy / 20)); } }) + .setTextAlignment(Alignment.CenterLeft) .setEnabled(w -> mWormholeEnergy_UI > 0), new FakeSyncWidget.DoubleSyncer( 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 index e3bbfe60d2d..ffd76fc04d8 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationPlant.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationPlant.java @@ -568,17 +568,18 @@ public void onBlockDestroyed() { private void drawTopText(DynamicPositionedColumn screenElements) { screenElements.setSynced(false) - .setSpace(0) - .setPos(10, 8); + .setSpace(0); screenElements .widget( - new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setDefaultColor(EnumChatFormatting.RED) + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setTextAlignment(Alignment.CenterLeft) + .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) + new TextWidget("Hit with Soft Mallet to start.").setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(EnumChatFormatting.BLACK) .setEnabled( widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())) .widget( @@ -590,7 +591,8 @@ private void drawTopText(DynamicPositionedColumn screenElements) { () -> getBaseMetaTileEntity().isActive(), val -> getBaseMetaTileEntity().setActive(val))); screenElements.widget( - new TextWidget(GTUtility.trans("142", "Running perfectly.")).setDefaultColor(EnumChatFormatting.GREEN) + new TextWidget(GTUtility.trans("142", "Running perfectly.")).setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(EnumChatFormatting.GREEN) .setEnabled( widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && getBaseMetaTileEntity().isActive())); screenElements.widget( @@ -721,7 +723,11 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont // Draw basic recipe info final DynamicPositionedColumn controlTextArea = new DynamicPositionedColumn(); drawTopText(controlTextArea); - builder.widget(controlTextArea); + builder.widget( + new Scrollable().setVerticalScroll() + .widget(controlTextArea) + .setPos(10, 7) + .setSize(182, 28)); // Draw line separator builder.widget( 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 index 03a32cf984f..d0184f5c75b 100644 --- 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 @@ -35,6 +35,7 @@ import com.gtnewhorizon.structurelib.structure.IStructureElement; import com.gtnewhorizon.structurelib.structure.StructureUtility; import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; +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; @@ -1239,7 +1240,8 @@ protected void drawTextsNoPlayerInventory(DynamicPositionedColumn screenElements screenElements .widget( - new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> !mMachine)) .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)) .widget( @@ -1250,6 +1252,7 @@ protected void drawTextsNoPlayerInventory(DynamicPositionedColumn screenElements + ": " + EnumChatFormatting.GREEN + GTValues.VOLTAGE_NAMES[(int) getInputTier()]) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine && getInputTier() > 0)) .widget( @@ -1260,6 +1263,7 @@ protected void drawTextsNoPlayerInventory(DynamicPositionedColumn screenElements + ": " + EnumChatFormatting.GREEN + GTValues.VOLTAGE_NAMES[(int) getOutputTier()]) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine && getOutputTier() > 0)) .widget( @@ -1274,10 +1278,12 @@ protected void drawTextsNoPlayerInventory(DynamicPositionedColumn screenElements + getBaseMetaTileEntity().getMaxProgress() / 20 + EnumChatFormatting.RESET + " s") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( new TextWidget(StatCollector.translateToLocal("GTPP.multiblock.energy") + ":") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( @@ -1292,20 +1298,24 @@ protected void drawTextsNoPlayerInventory(DynamicPositionedColumn screenElements + getMaxEnergyStorageOfAllEnergyHatches() + EnumChatFormatting.RESET + " EU")) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( new TextWidget(StatCollector.translateToLocal("GTPP.multiblock.usage") + ":") + .setTextAlignment(Alignment.CenterLeft) .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")) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine && getLastRecipeEU() > 0 && getLastRecipeDuration() > 0)) .widget( TextWidget.dynamicString(() -> StatCollector.translateToLocal("GTPP.multiblock.generation") + ":") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine && getLastRecipeEU() < 0 && getLastRecipeDuration() > 0)) .widget( @@ -1316,6 +1326,7 @@ protected void drawTextsNoPlayerInventory(DynamicPositionedColumn screenElements + getLastRecipeEU() + EnumChatFormatting.RESET + " EU/t/parallel")) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine && getLastRecipeEU() < 0 && getLastRecipeDuration() > 0)) .widget( @@ -1326,6 +1337,7 @@ protected void drawTextsNoPlayerInventory(DynamicPositionedColumn screenElements + getLastRecipeDuration() + EnumChatFormatting.RESET + " ticks") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine && getLastRecipeEU() != 0 && getLastRecipeDuration() > 0)) .widget( @@ -1335,6 +1347,7 @@ protected void drawTextsNoPlayerInventory(DynamicPositionedColumn screenElements + EnumChatFormatting.RED + getLastRecipeEU() + EnumChatFormatting.RESET) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled( widget -> mMachine && getLastRecipeEU() != 0 @@ -1342,6 +1355,7 @@ && getLastRecipeDuration() > 0 && (mLastRecipe != null ? mLastRecipe.mSpecialValue : 0) > 0)) .widget( new TextWidget(StatCollector.translateToLocal("GTPP.multiblock.mei") + ":") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( @@ -1357,6 +1371,7 @@ && getLastRecipeDuration() > 0 + EnumChatFormatting.YELLOW + GTValues.VN[GTUtility.getTier(getMaxInputVoltage())] + EnumChatFormatting.RESET)) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( @@ -1367,6 +1382,7 @@ && getLastRecipeDuration() > 0 + (mEfficiency / 100.0F) + EnumChatFormatting.RESET + " %") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( @@ -1377,6 +1393,7 @@ && getLastRecipeDuration() > 0 + (getPollutionPerTick(null) * 20) + EnumChatFormatting.RESET + "/sec") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( @@ -1387,10 +1404,12 @@ && getLastRecipeDuration() > 0 + getAveragePollutionPercentage() + EnumChatFormatting.RESET + " %") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( - new TextWidget("Total Time Since Built: ").setDefaultColor(COLOR_TEXT_WHITE.get()) + new TextWidget("Total Time Since Built: ").setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( TextWidget @@ -1399,6 +1418,7 @@ && getLastRecipeDuration() > 0 + getRuntimeWeeksDisplay() + EnumChatFormatting.RESET + " Weeks,") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( @@ -1408,6 +1428,7 @@ && getLastRecipeDuration() > 0 + getRuntimeDaysDisplay() + EnumChatFormatting.RESET + " Days,") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( @@ -1417,6 +1438,7 @@ && getLastRecipeDuration() > 0 + getRuntimeHoursDisplay() + EnumChatFormatting.RESET + " Hours,") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( @@ -1426,6 +1448,7 @@ && getLastRecipeDuration() > 0 + getRuntimeMinutesDisplay() + EnumChatFormatting.RESET + " Minutes,") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)) .widget( @@ -1435,6 +1458,7 @@ && getLastRecipeDuration() > 0 + getRuntimeSecondsDisplay() + EnumChatFormatting.RESET + " Seconds") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> mMachine)); } 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 b92fc8a6ccf..492cb11081e 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 @@ -40,6 +40,7 @@ import com.gtnewhorizons.modularui.api.NumberFormatMUI; import com.gtnewhorizons.modularui.api.drawable.Text; import com.gtnewhorizons.modularui.api.forge.PlayerMainInvWrapper; +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; @@ -857,6 +858,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont ? getBaseMetaTileEntity().isActive() ? "Running perfectly" : "Turn on with Mallet" : "") .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(10, 8)) .widget( @@ -876,17 +878,20 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont .widget(new FakeSyncWidget.LongSyncer(this::getAverageEuAdded, val -> clientEUIn = val)) .widget( new TextWidget().setStringSupplier(() -> "Avg In: " + numberFormat.format(clientEUIn) + " EU") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(10, 20)) .widget(new FakeSyncWidget.LongSyncer(this::getAverageEuConsumed, val -> clientEUOut = val)) .widget( new TextWidget().setStringSupplier(() -> "Avg Out: " + numberFormat.format(clientEUOut) + " EU") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(10, 30)) .widget(new FakeSyncWidget.LongSyncer(this::computeEnergyTax, val -> clientEULoss = val)) .widget( new TextWidget() .setStringSupplier(() -> "Powerloss: " + numberFormat.format(clientEULoss) + " EU per tick") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(10, 40)) .widget( @@ -902,6 +907,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont .setSize(147, 5)) .widget( new TextWidget("Stored:").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setTextAlignment(Alignment.CenterLeft) .setPos(10, 132)) .widget( new FakeSyncWidget.LongSyncer(() -> getBaseMetaTileEntity().getStoredEU(), val -> clientEUStored = val)) @@ -910,6 +916,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont return new Text(numberFormat.format(clientEUStored) + " EU") .color(Utils.rgbtoHexValue((255 - colorScale), colorScale, 0)); }) + .setTextAlignment(Alignment.CenterLeft) .setPos(10, 142)) .widget( new TextWidget().setStringSupplier(() -> numberFormat.format(clientProgress * 100) + "%") diff --git a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java index af28462d37a..68848207920 100644 --- a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java +++ b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java @@ -1106,41 +1106,49 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve .setPos(10, 7); screenElements .widget( - new TextWidget(GTUtility.trans("132", "Pipe is loose.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + new TextWidget(GTUtility.trans("132", "Pipe is loose.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("133", "Screws are loose.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("134", "Something is stuck.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("135", "Platings are dented.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("136", "Circuitry burned out.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("137", "That doesn't belong there.")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> !mMachine)) .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)); screenElements.widget( - new TextWidget(GTUtility.trans("139", "Hit with Soft Mallet")).setDefaultColor(COLOR_TEXT_WHITE.get()) + new TextWidget(GTUtility.trans("139", "Hit with Soft Mallet")).setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled( widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())) .widget( @@ -1152,11 +1160,13 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve () -> getBaseMetaTileEntity().isActive(), val -> getBaseMetaTileEntity().setActive(val))); screenElements.widget( - new TextWidget(GTUtility.trans("140", "to (re-)start the Machine")).setDefaultColor(COLOR_TEXT_WHITE.get()) + new TextWidget(GTUtility.trans("140", "to (re-)start the Machine")).setTextAlignment(Alignment.CenterLeft) + .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()) + new TextWidget(GTUtility.trans("141", "if it doesn't start.")).setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled( widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())); @@ -1168,6 +1178,8 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve time.toMinutes() % 60, time.getSeconds() % 60); }) + .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) .setEnabled( widget -> shouldDisplayShutDownReason() && !getBaseMetaTileEntity().isActive() && getBaseMetaTileEntity().wasShutdown())) @@ -1196,6 +1208,7 @@ && getBaseMetaTileEntity().wasShutdown())) screenElements.widget( new TextWidget().setStringSupplier( () -> "Total Capacity: " + EnumChatFormatting.BLUE + capacityCache + EnumChatFormatting.WHITE + " EU") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> isActiveCache)) .widget(new FakeSyncWidget.StringSyncer(this::getCapacityCache, val -> capacityCache = val)) @@ -1203,6 +1216,7 @@ && getBaseMetaTileEntity().wasShutdown())) new TextWidget() .setStringSupplier( () -> "Stored: " + EnumChatFormatting.RED + storedEUCache + EnumChatFormatting.WHITE + " EU") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> isActiveCache)) .widget(new FakeSyncWidget.StringSyncer(this::getStoredCache, val -> storedEUCache = val)) @@ -1218,6 +1232,7 @@ && getBaseMetaTileEntity().wasShutdown())) + passiveDischargeAmountCache + EnumChatFormatting.WHITE + " EU/t") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> isActiveCache)) .widget( @@ -1232,6 +1247,7 @@ && getBaseMetaTileEntity().wasShutdown())) : numberFormat.format(avgInCache)) + EnumChatFormatting.WHITE + " last 5s") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> isActiveCache)) .widget(new FakeSyncWidget.LongSyncer(this::getAvgIn, val -> avgInCache = val)) @@ -1243,11 +1259,13 @@ && getBaseMetaTileEntity().wasShutdown())) : numberFormat.format(avgOutCache)) + EnumChatFormatting.WHITE + " last 5s") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> isActiveCache)) .widget(new FakeSyncWidget.LongSyncer(this::getAvgOut, val -> avgOutCache = val)) .widget( new TextWidget().setStringSupplier(() -> EnumChatFormatting.WHITE + timeToCache) + .setTextAlignment(Alignment.CenterLeft) .setEnabled(widget -> isActiveCache)) .widget(new FakeSyncWidget.StringSyncer(this::getTimeTo, val -> timeToCache = val)) .widget( @@ -1257,6 +1275,7 @@ && getBaseMetaTileEntity().wasShutdown())) + wirelessStoreCache + EnumChatFormatting.WHITE + " EU") + .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> isActiveCache)) .widget(new FakeSyncWidget.StringSyncer(this::getWirelessStoredCache, val -> wirelessStoreCache = val)) diff --git a/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java b/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java index a1afd3561a3..8dce7a18938 100644 --- a/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java +++ b/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java @@ -314,9 +314,9 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont drawTexts(screenElements, !slotWidgets.isEmpty() ? slotWidgets.get(0) : null); builder.widget( new Scrollable().setVerticalScroll() - .widget(screenElements.setPos(10, 0)) - .setPos(0, 7) - .setSize(190, 79)); + .widget(screenElements) + .setPos(10, 7) + .setSize(182, 79)); builder.widget(createPowerSwitchButton(builder)) .widget(createVoidExcessButton(builder)) diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java index d67eae03a3a..7655b083a4f 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java @@ -1019,9 +1019,9 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont drawTexts(screenElements, null); builder.widget( new Scrollable().setVerticalScroll() - .widget(screenElements.setPos(10, 0)) - .setPos(0, 7) - .setSize(190, 79) + .widget(screenElements) + .setPos(10, 7) + .setSize(182, 79) .setEnabled(w -> !isInInventory)); builder.widget(createPowerSwitchButton(builder)) diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java index f78835bb318..624b686f335 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java @@ -745,9 +745,9 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont drawTexts(screenElements, null); builder.widget( new Scrollable().setVerticalScroll() - .widget(screenElements.setPos(10, 0)) - .setPos(0, 7) - .setSize(190, 79) + .widget(screenElements) + .setPos(10, 7) + .setSize(182, 79) .setEnabled(w -> !isInInventory)); builder.widget(createPowerSwitchButton(builder)) diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/base/TTMultiblockBase.java b/src/main/java/tectech/thing/metaTileEntity/multi/base/TTMultiblockBase.java index 28790f4492a..2bf6804e747 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/base/TTMultiblockBase.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/base/TTMultiblockBase.java @@ -2308,8 +2308,8 @@ public int getSlotStackLimit() { builder.widget( new Scrollable().setVerticalScroll() .widget(screenElements) - .setPos(0, 7) - .setSize(190, doesBindPlayerInventory() ? 79 : 165)); + .setPos(10, 7) + .setSize(182, doesBindPlayerInventory() ? 79 : 165)); Widget powerPassButton = createPowerPassButton(); builder.widget(powerPassButton) diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEBaseModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEBaseModule.java index 85cc5b11b59..d6bd8a55ed5 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEBaseModule.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEBaseModule.java @@ -322,9 +322,9 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont .setSize(18, 6)) .widget( new Scrollable().setVerticalScroll() - .widget(screenElements.setPos(10, 0)) - .setPos(0, 7) - .setSize(190, 79)) + .widget(screenElements) + .setPos(10, 7) + .setSize(182, 79)) .widget( TextWidget.dynamicText(this::connectionStatus) .setDefaultColor(EnumChatFormatting.BLACK) From 5948fe3faedb0b7c9cfc2d7935cbbce74a38b100 Mon Sep 17 00:00:00 2001 From: Crystie <50521339+CrystieColon3@users.noreply.github.com> Date: Mon, 16 Dec 2024 19:22:34 +0300 Subject: [PATCH 150/181] Refactoring LES code for better readability (#3569) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../blocks/tileEntity/MTELargeEssentiaSmeltery.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java index 50c45858c32..b1b5d07e957 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java @@ -132,7 +132,7 @@ protected boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemS if (this.mCasing >= 24 && this.mMaintenanceHatches.size() == 1 && !this.mInputBusses.isEmpty() && !this.mEssentiaOutputHatches.isEmpty()) { - this.mParallel = Math.floor(this.mParallel += 1 << this.pTier); + this.mParallel = (len + 1) * Math.pow(2, this.pTier); return true; } return false; @@ -259,8 +259,7 @@ protected void onCasingFound() { } protected void onEssentiaCellFound(int tier) { - this.mParallel += (1 << tier) * 0.25f; - this.pTier = Math.max(this.pTier, tier); + this.pTier = tier; } private boolean addEnergyHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { From 36b0ac47b66576ace1f8d8ceca8fe37c99bc9d6d Mon Sep 17 00:00:00 2001 From: HoleFish <48403212+HoleFish@users.noreply.github.com> Date: Tue, 17 Dec 2024 01:16:11 +0800 Subject: [PATCH 151/181] Fix lag probably caused by crib (#3655) --- .../tileentities/machines/MTEHatchCraftingInputME.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputME.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputME.java index d1bc27310a1..b6a8cacc8e3 100644 --- a/src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputME.java +++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputME.java @@ -187,7 +187,7 @@ public void updateSlotFluids() { public boolean isItemEmpty() { updateSlotItems(); - return itemInventory.isEmpty() && sharedItemGetter.getSharedItem().length == 0; + return itemInventory.isEmpty(); } public boolean isFluidEmpty() { @@ -201,13 +201,13 @@ public boolean isEmpty() { @Override public ItemStack[] getItemInputs() { - if (isItemEmpty()) return new ItemStack[0]; + if (isEmpty()) return new ItemStack[0]; return ArrayUtils.addAll(itemInventory.toArray(new ItemStack[0]), sharedItemGetter.getSharedItem()); } @Override public FluidStack[] getFluidInputs() { - if (isFluidEmpty()) return new FluidStack[0]; + if (isEmpty()) return new FluidStack[0]; return fluidInventory.toArray(new FluidStack[0]); } From 61358d763024d0650ac47d5a9b153cf4fb3f3ca2 Mon Sep 17 00:00:00 2001 From: Crystie <50521339+CrystieColon3@users.noreply.github.com> Date: Tue, 17 Dec 2024 00:26:55 +0300 Subject: [PATCH 152/181] LES Tricorder Parallel count info (#3656) --- .../blocks/tileEntity/MTELargeEssentiaSmeltery.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java index b1b5d07e957..fa9fe3d250e 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java @@ -220,7 +220,11 @@ public String[] getStructureDescription(ItemStack itemStack) { @Override public String[] getInfoData() { String[] info = super.getInfoData(); - info[8] = "Node Power: " + EnumChatFormatting.RED + info[8] = "Parallel: " + EnumChatFormatting.YELLOW + + Math.round(this.mParallel) + + EnumChatFormatting.RESET + + " Node Power: " + + EnumChatFormatting.RED + this.nodePower + EnumChatFormatting.RESET + " Purification Efficiency: " From e91089066ccc2c60c379fae3c67af80fba440466 Mon Sep 17 00:00:00 2001 From: RecursivePineapple Date: Mon, 16 Dec 2024 16:36:27 -0500 Subject: [PATCH 153/181] Change scanner to respect fake recipe item count (#3657) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../common/tileentities/machines/basic/MTEScanner.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEScanner.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEScanner.java index 742a6a0e842..628b8b62baa 100644 --- a/src/main/java/gregtech/common/tileentities/machines/basic/MTEScanner.java +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEScanner.java @@ -349,14 +349,16 @@ else if (stackItemDamage == 2 && aStack.toString() 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; + GTRecipe matchingRecipe = null; + for (GTRecipe scannerRecipe : scannerFakeRecipes.getAllRecipes()) { if (GTUtility.areStacksEqual(scannerRecipe.mInputs[0], aStack, true)) { - failScanner = false; + matchingRecipe = scannerRecipe; break; } } - if (failScanner) { + + if (matchingRecipe == null || aStack.stackSize < matchingRecipe.mInputs[0].stackSize) { return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; } @@ -364,7 +366,7 @@ else if (stackItemDamage == 2 && aStack.toString() // Use Assline Utils if (AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(this.mOutputItems[0], tRecipe)) { - aStack.stackSize -= 1; + aStack.stackSize -= matchingRecipe.mInputs[0].stackSize; calculateOverclockedNess(30, tRecipe.mResearchTime); // In case recipe is too OP for that machine if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) From 96f74f8ca1f845fba2cb184d303c8060bd6bfb99 Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Mon, 16 Dec 2024 17:10:50 -0500 Subject: [PATCH 154/181] HIP Unit mini rework (#3658) Co-authored-by: Martin Robertz --- .../java/gregtech/api/enums/Textures.java | 2 + .../common/blocks/BlockCasings10.java | 4 +- .../multi/compressor/MTEHIPCompressor.java | 93 ++++++++++-------- .../blocks/iconsets/COOLANT_DUCT_CASING.png | Bin 0 -> 231 bytes .../blocks/iconsets/HEATING_DUCT_CASING.png | Bin 0 -> 207 bytes 5 files changed, 55 insertions(+), 44 deletions(-) create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/COOLANT_DUCT_CASING.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/HEATING_DUCT_CASING.png diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index 92a213fb30b..cf8750fe197 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -1451,6 +1451,8 @@ public enum BlockIcons implements IIconContainer, Runnable { BLOCK_QUARK_CONTAINMENT_CASING, COMPRESSOR_CASING, COMPRESSOR_PIPE_CASING, + HEATING_DUCT_CASING, + COOLANT_DUCT_CASING, NEUTRONIUM_CASING, NEUTRONIUM_ACTIVE_CASING, NEUTRONIUM_STABLE_CASING, diff --git a/src/main/java/gregtech/common/blocks/BlockCasings10.java b/src/main/java/gregtech/common/blocks/BlockCasings10.java index ada1c589270..e8b976ab3aa 100644 --- a/src/main/java/gregtech/common/blocks/BlockCasings10.java +++ b/src/main/java/gregtech/common/blocks/BlockCasings10.java @@ -72,8 +72,8 @@ public IIcon getIcon(int ordinalSide, int aMeta) { 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 9 -> Textures.BlockIcons.COOLANT_DUCT_CASING.getIcon(); + case 10 -> Textures.BlockIcons.HEATING_DUCT_CASING.getIcon(); case 11 -> Textures.BlockIcons.EXTREME_DENSITY_CASING.getIcon(); case 12 -> Textures.BlockIcons.RADIATION_ABSORBENT_CASING.getIcon(); case 13 -> Textures.BlockIcons.MACHINE_CASING_MS160.getIcon(); 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 index 8ac1025d481..c582cd80232 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java @@ -106,7 +106,7 @@ public class MTEHIPCompressor extends MTEExtendedPowerMultiBlockBase currentTip, IWailaDat + EnumChatFormatting.RESET); } - private boolean doingHIP = false; - @Override protected ProcessingLogic createProcessingLogic() { return new ProcessingLogic() { @@ -365,18 +368,24 @@ protected ProcessingLogic createProcessingLogic() { @NotNull @Override protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { - doingHIP = false; setSpeedBonus(1F / 3.5F); setEuModifier(0.75F); - if (cooling) { + int recipeReq = recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0); + + // Nerf when heated + if (overheated) { setSpeedBonus(2.5F); setEuModifier(1.1F); } - int recipeReq = recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0); + // If HIP required, check for overheat and potentially crash + // If Black Hole required, no recipe if (recipeReq == 1) { - doingHIP = true; + if (overheated) { + stopMachine(SimpleShutDownReason.ofCritical("overheated")); + return CheckRecipeResultRegistry.NO_RECIPE; + } } else if (recipeReq == 2) { return CheckRecipeResultRegistry.NO_RECIPE; } @@ -385,35 +394,35 @@ protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { }.setMaxParallelSupplier(this::getMaxParallelRecipes); } - @Override - public boolean onRunningTick(ItemStack aStack) { - if (cooling && doingHIP) { - stopMachine(SimpleShutDownReason.ofCritical("overheated")); - doingHIP = false; - } - return super.onRunningTick(aStack); - } + private int coolingTimer = 0; @Override public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { super.onPostTick(aBaseMetaTileEntity, aTick); - if (aTick % 20 == 0) { + if (aTick % 20 != 0 || aBaseMetaTileEntity.isClientSide()) return; - // Default to cooling by 2% - float heatMod = -2; + // 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)); - } + // If the machine is running, heat by 5% x 0.90 ^ (Coil Tier) + // Cupronickel is 0, so base will be 5% increase + // Also reset cooling speed + if (this.maxProgresstime() != 0) { + heatMod = (float) (5 * Math.pow(0.9, coilTier)); + coolingTimer = 0; + } else { + // If the machine isn't running, add and increment the cooling timer + heatMod -= coolingTimer; + coolingTimer += 2; + } - heat = MathUtils.clamp(heat + heatMod, 0, 100); + heat = MathUtils.clamp(heat + heatMod, 0, 100); - if ((cooling && heat <= 0) || (!cooling && heat >= 100)) { - cooling = !cooling; - } + // Switch overheated conditionally and reset the cooling speed + if ((overheated && heat <= 0) || (!overheated && heat >= 100)) { + overheated = !overheated; + coolingTimer = 0; } // Update all the sensors @@ -424,7 +433,7 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } public int getMaxParallelRecipes() { - return cooling ? GTUtility.getTier(this.getMaxInputVoltage()) + return overheated ? GTUtility.getTier(this.getMaxInputVoltage()) : (4 * GTUtility.getTier(this.getMaxInputVoltage())); } diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/COOLANT_DUCT_CASING.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/COOLANT_DUCT_CASING.png new file mode 100644 index 0000000000000000000000000000000000000000..05a642390b84118d8393bd8fd7c8d5da3e44a288 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|7J9lkhFJ8z zoxG9vkb!_}e2*(*Z*`Pb#DPid3r_p!98|ie7^L=r$>6|Lkv^x!b6pw-mMwZPefj@? zv4#6@zx6k6u>RuFbtU8FR;v>SA2-PSiN3*?{L!ncj@TNz^h}nm@AI>@ zw^^8Hyyo>3T%5T!=$Ogm_0#__*QqY}%00d3s$9+IQ+yjHC239+dwMzTt5?@~v#gFK f9HLY8;vO)r`Q$YBLVZ#@(6J1ju6{1-oD!M Date: Tue, 17 Dec 2024 01:06:16 +0100 Subject: [PATCH 155/181] Reduce Naquadria plasma amount in stellar catalyst (#3659) --- .../java/gregtech/loaders/postload/recipes/MixerRecipes.java | 2 +- .../postload/recipes/TranscendentPlasmaMixerRecipes.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java index 5081f8b585f..f6ed72c1f71 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java @@ -1614,7 +1614,7 @@ public void registerSingleBlockAndMulti() { MaterialsUEVplus.DimensionallyTranscendentExoticCatalyst.getFluid(1000L), Materials.Lead.getPlasma(1000), Materials.Thorium.getPlasma(1000), - Materials.Naquadria.getPlasma(1000L), + Materials.Naquadria.getPlasma(100L), MaterialsUEVplus.RawStarMatter.getFluid(25L)) .fluidOutputs(MaterialsUEVplus.DimensionallyTranscendentStellarCatalyst.getFluid(1000L)) .duration(41 * MINUTES + 40 * SECONDS) diff --git a/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java index ab40600d497..797697bc840 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java @@ -123,7 +123,7 @@ public void run() { Materials.Tin.getPlasma(1000), Materials.Lead.getPlasma(1000), Materials.Thorium.getPlasma(1000), - Materials.Naquadria.getPlasma(1000L), + Materials.Naquadria.getPlasma(100L), MaterialsUEVplus.RawStarMatter.getFluid(25L)) .fluidOutputs(MaterialsUEVplus.ExcitedDTSC.getFluid(1000L)) .duration(100) From 25fd6cbb41fd74a725f0da121d53657ed4aec68d Mon Sep 17 00:00:00 2001 From: chochem <40274384+chochem@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:35:35 +0000 Subject: [PATCH 156/181] Remove priest tier skip (#3660) --- src/main/java/gregtech/mixin/Mixin.java | 6 +++++ .../early/minecraft/VanillaTradingMixin.java | 26 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaTradingMixin.java diff --git a/src/main/java/gregtech/mixin/Mixin.java b/src/main/java/gregtech/mixin/Mixin.java index 001477b5d1d..9d1a0164b3c 100644 --- a/src/main/java/gregtech/mixin/Mixin.java +++ b/src/main/java/gregtech/mixin/Mixin.java @@ -105,6 +105,12 @@ public enum Mixin { .setSide(Side.BOTH) .setApplyIf(() -> PollutionConfig.pollution && PollutionConfig.explosionPollutionAmount != 0F) .addTargetedMod(TargetedMod.VANILLA)), + + VANILLA_TRADING(new Builder("Change Vanilla Trades").setPhase(Phase.EARLY) + .addMixinClasses("minecraft.VanillaTradingMixin") + .addTargetedMod(VANILLA) + .setApplyIf(() -> true) + .setSide(Side.BOTH)), POLLUTION_IC2_IRON_FURNACE( new Builder("Ic2 Iron Furnace Pollutes").addMixinClasses("ic2.MixinIC2IronFurnacePollution") .setPhase(Phase.LATE) diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaTradingMixin.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaTradingMixin.java new file mode 100644 index 00000000000..1c050d0ed83 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/VanillaTradingMixin.java @@ -0,0 +1,26 @@ +package gregtech.mixin.mixins.early.minecraft; + +import java.util.Random; + +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.village.MerchantRecipeList; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +@Mixin(EntityVillager.class) +public class VanillaTradingMixin { + + @Inject(method = "func_146089_b", at = @At("HEAD"), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true) + private static void gt5u$removeEyeOfEnder(MerchantRecipeList p_146089_0_, Item p_146089_1_, Random p_146089_2_, + float p_146089_3_, CallbackInfo ci) { + if (p_146089_1_.equals(Items.ender_eye)) { + ci.cancel(); + } + } +} From c92d794be2b1ccd42d6d4aad74e5ff0735c7ad8d Mon Sep 17 00:00:00 2001 From: combusterf Date: Tue, 17 Dec 2024 19:10:50 +0100 Subject: [PATCH 157/181] change: fix symmetry of decontaminant degasser (#3661) Co-authored-by: Marcel Sondaar --- .../multi/purification/MTEPurificationUnitDegasser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 59b9be0c178..bf503ed6a34 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitDegasser.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitDegasser.java @@ -66,7 +66,7 @@ public class MTEPurificationUnitDegasser extends MTEPurificationUnitBase Date: Tue, 17 Dec 2024 19:16:44 +0100 Subject: [PATCH 158/181] update --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 5a6ae8ee554..d3698542f75 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -67,7 +67,7 @@ dependencies { compileOnlyApi("com.github.GTNewHorizons:Railcraft:9.15.15:dev") { transitive = false } compileOnly("TGregworks:TGregworks:1.7.10-GTNH-1.0.27:deobf") {transitive = false} - compileOnly("com.github.GTNewHorizons:ThaumicBases:1.7.7:dev") { transitive = false } + compileOnly("com.github.GTNewHorizons:ThaumicBases:1.8.0:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:EnderCore:0.4.6:dev") { transitive = false } compileOnly('com.github.GTNewHorizons:VisualProspecting:1.3.28:dev') { transitive = false } compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.100-GTNH:dev") { transitive = false } @@ -85,7 +85,7 @@ dependencies { compileOnly('com.github.GTNewHorizons:HoloInventory:2.4.13-GTNH:dev') { transitive = false } compileOnly rfg.deobf("curse.maven:extra-utilities-225561:2264384") compileOnly rfg.deobf('curse.maven:minefactory-reloaded-66672:2366150') - compileOnly("com.github.GTNewHorizons:OpenComputers:1.11.0-GTNH:dev") {transitive = false} + compileOnly("com.github.GTNewHorizons:OpenComputers:1.11.1-GTNH:dev") {transitive = false} // https://www.curseforge.com/minecraft/mc-mods/advancedsolarpanels compileOnlyApi rfg.deobf('curse.maven:advsolar-362768:2885953') compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.6.27-GTNH:dev') {transitive = false} From 682edc1187bf7b41cc2ae4da873f2b77bf00a8cb Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Wed, 18 Dec 2024 00:00:27 -0300 Subject: [PATCH 159/181] Add Oredict Tag to Beamline Masks (#3663) --- src/main/java/gregtech/api/enums/OrePrefixes.java | 5 ++++- .../java/gtnhlanth/common/register/LanthItemList.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java index ff6360bf75e..159e0461881 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -592,7 +592,10 @@ public enum OrePrefixes { false, false, 0, M * 1, 64, -1), // subatomic particles particle("A Subatomic Particle", "", "", false, false, true, false, false, false, false, false, false, false, 0, -1, - 64, -1); + 64, -1), + // Beamline Masks + mask("A Photolithographic Mask", "", "", false, false, true, false, false, false, false, false, false, false, 0, -1, + 1, -1); public static final ImmutableList CELL_TYPES = ImmutableList.of( cell, diff --git a/src/main/java/gtnhlanth/common/register/LanthItemList.java b/src/main/java/gtnhlanth/common/register/LanthItemList.java index 400c1a8638e..9c3cedc3426 100644 --- a/src/main/java/gtnhlanth/common/register/LanthItemList.java +++ b/src/main/java/gtnhlanth/common/register/LanthItemList.java @@ -7,7 +7,9 @@ import net.minecraft.item.ItemStack; import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.OrePrefixes; import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; import gtnhlanth.common.beamline.MTEBeamlinePipe; import gtnhlanth.common.block.BlockAntennaCasing; import gtnhlanth.common.block.BlockCasing; @@ -163,6 +165,14 @@ public static void registerTypical() { descSpectrum); GameRegistry.registerItem(maskItem, maskItem.getUnlocalizedName()); + if (!mask.getName() + .contains("blank")) { + GTOreDictUnificator.registerOre( + OrePrefixes.mask + mask.getName() + .toUpperCase(), + new ItemStack(maskItem)); + } + GTLanguageManager.addStringLocalization(maskItem.getUnlocalizedName() + ".name", "Mask (" + english + ")"); maskMap.put(mask, maskItem); From 9a3541bbb92d84751f05209c7ccbb6dd1c8e7133 Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Tue, 17 Dec 2024 22:11:59 -0500 Subject: [PATCH 160/181] Move ingot macerating and ingot/dust fluid extracting out of recycling (#3664) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../api/util/GTRecipeRegistrator.java | 29 +++++++++++-------- .../loaders/oreprocessing/ProcessingDust.java | 9 ++++-- .../oreprocessing/ProcessingIngot.java | 12 ++++++-- .../oreprocessing/ProcessingNugget.java | 4 +-- 4 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/main/java/gregtech/api/util/GTRecipeRegistrator.java b/src/main/java/gregtech/api/util/GTRecipeRegistrator.java index 1898e5f084e..e474316ddb9 100644 --- a/src/main/java/gregtech/api/util/GTRecipeRegistrator.java +++ b/src/main/java/gregtech/api/util/GTRecipeRegistrator.java @@ -181,7 +181,7 @@ public static void registerMaterialRecycling(ItemStack aStack, ItemData aData) { || aData.mMaterial.mMaterial.mSubTags.contains(SubTag.NO_RECIPES)) return; // Prevents registering a quartz block -> 9x quartz dust recipe if (!GTUtility.areStacksEqual(new ItemStack(Blocks.quartz_block, 1), aStack)) { - registerReverseMacerating(GTUtility.copyAmount(1, aStack), aData, aData.mPrefix == null); + registerReverseMacerating(GTUtility.copyAmount(1, aStack), aData, aData.mPrefix == null, true); } if (!GTUtility.areStacksEqual(GTModHandler.getIC2Item("iridiumOre", 1L), aStack)) { registerReverseSmelting( @@ -193,7 +193,8 @@ public static void registerMaterialRecycling(ItemStack aStack, ItemData aData) { GTUtility.copyAmount(1, aStack), aData.mMaterial.mMaterial, aData.mMaterial.mAmount, - aData.getByProduct(0)); + aData.getByProduct(0), + true); registerReverseArcSmelting(GTUtility.copyAmount(1, aStack), aData); } } @@ -202,9 +203,10 @@ public static void registerMaterialRecycling(ItemStack aStack, ItemData aData) { * @param aStack the stack to be recycled. * @param aMaterial the Material. * @param aMaterialAmount the amount of it in Material Units. + * @param isRecycling whether to put in recycling tab. */ public static void registerReverseFluidSmelting(ItemStack aStack, Materials aMaterial, long aMaterialAmount, - MaterialStack aByproduct) { + MaterialStack aByproduct, boolean isRecycling) { if (aStack == null || aMaterial == null || aMaterial.mSmeltInto.mStandardMoltenFluid == null || !aMaterial.contains(SubTag.SMELTING_TO_FLUID) @@ -232,9 +234,9 @@ public static void registerReverseFluidSmelting(ItemStack aStack, Materials aMat } 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); + .eut(powerUsage); + if (isRecycling) builder.recipeCategory(RecipeCategories.fluidExtractorRecycling); + builder.addTo(fluidExtractionRecipes); } /** @@ -355,7 +357,8 @@ public static void registerReverseArcSmelting(ItemStack aStack, ItemData aData) } public static void registerReverseMacerating(ItemStack aStack, Materials aMaterial, long aMaterialAmount, - MaterialStack aByProduct01, MaterialStack aByProduct02, MaterialStack aByProduct03, boolean aAllowHammer) { + MaterialStack aByProduct01, MaterialStack aByProduct02, MaterialStack aByProduct03, boolean aAllowHammer, + boolean isRecycling) { registerReverseMacerating( aStack, new ItemData( @@ -363,10 +366,12 @@ public static void registerReverseMacerating(ItemStack aStack, Materials aMateri aByProduct01, aByProduct02, aByProduct03), - aAllowHammer); + aAllowHammer, + isRecycling); } - public static void registerReverseMacerating(ItemStack aStack, ItemData aData, boolean aAllowHammer) { + public static void registerReverseMacerating(ItemStack aStack, ItemData aData, boolean aAllowHammer, + boolean isRecycling) { if (aStack == null || aData == null) return; aData = new ItemData(aData); @@ -401,9 +406,9 @@ public static void registerReverseMacerating(ItemStack aStack, ItemData aData, b .itemOutputs(outputsArray) .duration( (aData.mMaterial.mMaterial == Materials.Marble ? 1 : (int) Math.max(16, tAmount / M)) * TICKS) - .eut(4) - .recipeCategory(RecipeCategories.maceratorRecycling) - .addTo(maceratorRecipes); + .eut(4); + if (isRecycling) recipeBuilder.recipeCategory(RecipeCategories.maceratorRecycling); + recipeBuilder.addTo(maceratorRecipes); } } diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java index 58c59fa895e..01510eece20 100644 --- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java +++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java @@ -70,7 +70,8 @@ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDic .addTo(cannerRecipes); } if (!aMaterial.mBlastFurnaceRequired) { - GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null); + GTRecipeRegistrator + .registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null, false); if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) { GTRecipeRegistrator.registerReverseArcSmelting( GTUtility.copyAmount(1, aStack), @@ -518,7 +519,8 @@ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDic .eut(4) .addTo(packagerRecipes); if (!aMaterial.mBlastFurnaceRequired) { - GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null); + GTRecipeRegistrator + .registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null, true); if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) { GTRecipeRegistrator.registerReverseArcSmelting( GTUtility.copyAmount(1, aStack), @@ -538,7 +540,8 @@ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDic .eut(4) .addTo(packagerRecipes); if (!aMaterial.mBlastFurnaceRequired) { - GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null); + GTRecipeRegistrator + .registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null, true); if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) { GTRecipeRegistrator.registerReverseArcSmelting( GTUtility.copyAmount(1, aStack), diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot.java index 6724a877988..e937f3f6a5d 100644 --- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot.java +++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot.java @@ -74,9 +74,17 @@ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDic } // Reverse recipes { - GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null); GTRecipeRegistrator - .registerReverseMacerating(aStack, aMaterial, aPrefix.mMaterialAmount, null, null, null, false); + .registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null, false); + GTRecipeRegistrator.registerReverseMacerating( + aStack, + aMaterial, + aPrefix.mMaterialAmount, + null, + null, + null, + false, + false); if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) { GTRecipeRegistrator.registerReverseArcSmelting( GTUtility.copyAmount(1, aStack), diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java index b4df540003e..c0fa36ab323 100644 --- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java +++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java @@ -66,9 +66,9 @@ public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDic } } - GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null); + GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null, true); GTRecipeRegistrator - .registerReverseMacerating(aStack, aMaterial, aPrefix.mMaterialAmount, null, null, null, false); + .registerReverseMacerating(aStack, aMaterial, aPrefix.mMaterialAmount, null, null, null, false, true); if (!aMaterial.contains(SubTag.NO_SMELTING) && GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) { GTValues.RA.stdBuilder() From 7009657b5d30a43f15282e3dd194ba6458374047 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Wed, 18 Dec 2024 09:02:25 -0600 Subject: [PATCH 161/181] Set an owner in force load chunk NBT for opis (#3666) --- src/main/java/gregtech/api/objects/GTChunkManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gregtech/api/objects/GTChunkManager.java b/src/main/java/gregtech/api/objects/GTChunkManager.java index 2fc87f148d2..4a2d381e5cd 100644 --- a/src/main/java/gregtech/api/objects/GTChunkManager.java +++ b/src/main/java/gregtech/api/objects/GTChunkManager.java @@ -136,6 +136,7 @@ public static boolean requestPlayerChunkLoad(TileEntity owner, ChunkCoordIntPair tag.setInteger("OwnerX", owner.xCoord); tag.setInteger("OwnerY", owner.yCoord); tag.setInteger("OwnerZ", owner.zCoord); + tag.setString("OwnerType", owner.getClass().getSimpleName()); ForgeChunkManager.forceChunk(ticket, chunkXZ); if (GTValues.alwaysReloadChunkloaders) ForgeChunkManager.forceChunk(ticket, new ChunkCoordIntPair(owner.xCoord >> 4, owner.zCoord >> 4)); From 0dfa42adb5c6643fd939870db38ec9c0c3889181 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 15:13:48 +0000 Subject: [PATCH 162/181] Spotless apply for branch chunkloader-add-type-information for #3666 (#3667) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- src/main/java/gregtech/api/objects/GTChunkManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/objects/GTChunkManager.java b/src/main/java/gregtech/api/objects/GTChunkManager.java index 4a2d381e5cd..2e0a272cf1f 100644 --- a/src/main/java/gregtech/api/objects/GTChunkManager.java +++ b/src/main/java/gregtech/api/objects/GTChunkManager.java @@ -136,7 +136,10 @@ public static boolean requestPlayerChunkLoad(TileEntity owner, ChunkCoordIntPair tag.setInteger("OwnerX", owner.xCoord); tag.setInteger("OwnerY", owner.yCoord); tag.setInteger("OwnerZ", owner.zCoord); - tag.setString("OwnerType", owner.getClass().getSimpleName()); + tag.setString( + "OwnerType", + owner.getClass() + .getSimpleName()); ForgeChunkManager.forceChunk(ticket, chunkXZ); if (GTValues.alwaysReloadChunkloaders) ForgeChunkManager.forceChunk(ticket, new ChunkCoordIntPair(owner.xCoord >> 4, owner.zCoord >> 4)); From f9a26b5754851670c2609f872129c3d295c6eb69 Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Wed, 18 Dec 2024 12:20:53 -0300 Subject: [PATCH 163/181] Updated Maintenance texts to become easier to identify (#3541) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../implementations/MTEMultiBlockBase.java | 23 +++++++++++------- .../gregtech/api/util/GTLanguageManager.java | 12 +++++----- .../MTELapotronicSuperCapacitor.java | 24 ++++++++++++------- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index ee20acbc93e..faa799a4e5c 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -2629,37 +2629,44 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve } screenElements .widget( - new TextWidget(GTUtility.trans("132", "Pipe is loose.")).setTextAlignment(Alignment.CenterLeft) + new TextWidget(GTUtility.trans("132", "Pipe is loose. (Wrench)")).setTextAlignment(Alignment.CenterLeft) .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.")).setTextAlignment(Alignment.CenterLeft) + new TextWidget(GTUtility.trans("133", "Screws are loose. (Screwdriver)")) + .setTextAlignment(Alignment.CenterLeft) .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.")).setTextAlignment(Alignment.CenterLeft) + new TextWidget(GTUtility.trans("134", "Something is stuck. (Soft Mallet)")) + .setTextAlignment(Alignment.CenterLeft) .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.")).setTextAlignment(Alignment.CenterLeft) + new TextWidget(GTUtility.trans("135", "Platings are dented. (Hammer)")) + .setTextAlignment(Alignment.CenterLeft) .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.")).setTextAlignment(Alignment.CenterLeft) + new TextWidget(GTUtility.trans("136", "Circuitry burned out. (Soldering)")) + .setTextAlignment(Alignment.CenterLeft) .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)) + screenElements + .widget( + new TextWidget(GTUtility.trans("137", "That doesn't belong there. (Crowbar)")) + .setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mCrowbar)) .widget(new FakeSyncWidget.BooleanSyncer(() -> mCrowbar, val -> mCrowbar = val)); screenElements .widget( diff --git a/src/main/java/gregtech/api/util/GTLanguageManager.java b/src/main/java/gregtech/api/util/GTLanguageManager.java index 1a4c3bf0826..02bbbc99f28 100644 --- a/src/main/java/gregtech/api/util/GTLanguageManager.java +++ b/src/main/java/gregtech/api/util/GTLanguageManager.java @@ -334,12 +334,12 @@ public static void writePlaceholderStrings() { 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_132", "Pipe is loose. (Wrench)"); + addStringLocalization("Interaction_DESCRIPTION_Index_133", "Screws are loose. (Screwdriver)"); + addStringLocalization("Interaction_DESCRIPTION_Index_134", "Something is stuck. (Soft Mallet)"); + addStringLocalization("Interaction_DESCRIPTION_Index_135", "Platings are dented. (Hammer)"); + addStringLocalization("Interaction_DESCRIPTION_Index_136", "Circuitry burned out. (Soldering)"); + addStringLocalization("Interaction_DESCRIPTION_Index_137", "That doesn't belong there. (Crowbar)"); 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"); diff --git a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java index 68848207920..6d8c525b1c0 100644 --- a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java +++ b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java @@ -1106,38 +1106,44 @@ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inve .setPos(10, 7); screenElements .widget( - new TextWidget(GTUtility.trans("132", "Pipe is loose.")).setTextAlignment(Alignment.CenterLeft) + new TextWidget(GTUtility.trans("132", "Pipe is loose. (Wrench)")).setTextAlignment(Alignment.CenterLeft) .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.")).setTextAlignment(Alignment.CenterLeft) + new TextWidget(GTUtility.trans("133", "Screws are loose. (Screwdriver)")) + .setTextAlignment(Alignment.CenterLeft) .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.")).setTextAlignment(Alignment.CenterLeft) + new TextWidget(GTUtility.trans("134", "Something is stuck. (Soft Mallet)")) + .setTextAlignment(Alignment.CenterLeft) .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.")).setTextAlignment(Alignment.CenterLeft) + new TextWidget(GTUtility.trans("135", "Platings are dented. (Hammer)")) + .setTextAlignment(Alignment.CenterLeft) .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.")).setTextAlignment(Alignment.CenterLeft) + new TextWidget(GTUtility.trans("136", "Circuitry burned out. (Soldering)")) + .setTextAlignment(Alignment.CenterLeft) .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.")).setTextAlignment(Alignment.CenterLeft) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> !mCrowbar)) + screenElements + .widget( + new TextWidget(GTUtility.trans("137", "That doesn't belong there. (Crowbar)")) + .setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mCrowbar)) .widget(new FakeSyncWidget.BooleanSyncer(() -> mCrowbar, val -> mCrowbar = val)); screenElements .widget( From c6e60d9a6ffc3d598f8ef2a1193873838a1fabea Mon Sep 17 00:00:00 2001 From: HoleFish <48403212+HoleFish@users.noreply.github.com> Date: Wed, 18 Dec 2024 23:42:43 +0800 Subject: [PATCH 164/181] Fix multi ui text position (#3665) Co-authored-by: Martin Robertz --- .../java/bartworks/common/tileentities/multis/MTELESU.java | 3 ++- .../machines/multi/purification/MTEPurificationPlant.java | 2 +- .../common/tileentities/MTELapotronicSuperCapacitor.java | 3 +-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/bartworks/common/tileentities/multis/MTELESU.java b/src/main/java/bartworks/common/tileentities/multis/MTELESU.java index 3fd6df356b5..f51548253f4 100644 --- a/src/main/java/bartworks/common/tileentities/multis/MTELESU.java +++ b/src/main/java/bartworks/common/tileentities/multis/MTELESU.java @@ -529,7 +529,8 @@ public int getSlotStackLimit() { private long clientAmps; private void drawTexts(DynamicPositionedColumn screenElements) { - screenElements.setSpace(0); + screenElements.setSpace(0) + .setPos(11, 8); screenElements.widget( new TextWidget().setStringSupplier(() -> "EU: " + numberFormat.format(this.clientEU)) 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 index ffd76fc04d8..b5385ff5a10 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationPlant.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationPlant.java @@ -727,7 +727,7 @@ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildCont new Scrollable().setVerticalScroll() .widget(controlTextArea) .setPos(10, 7) - .setSize(182, 28)); + .setSize(182, 24)); // Draw line separator builder.widget( diff --git a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java index 6d8c525b1c0..37bb2c18675 100644 --- a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java +++ b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java @@ -1102,8 +1102,7 @@ public String[] getInfoData() { protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { screenElements.setSynced(false) - .setSpace(0) - .setPos(10, 7); + .setSpace(0); screenElements .widget( new TextWidget(GTUtility.trans("132", "Pipe is loose. (Wrench)")).setTextAlignment(Alignment.CenterLeft) From 981d9b2697fca86353166c6c7fbb8fdfdf7513bc Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Wed, 18 Dec 2024 17:47:08 +0100 Subject: [PATCH 165/181] update --- dependencies.gradle | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index d3698542f75..503433b259f 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -36,19 +36,19 @@ dependencies { api("com.github.GTNewHorizons:StructureLib:1.4.0:dev") api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") - api("com.github.GTNewHorizons:NotEnoughItems:2.6.51-GTNH:dev") + api("com.github.GTNewHorizons:NotEnoughItems:2.7.0-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") api("com.github.GTNewHorizons:GTNHLib:0.5.22:dev") api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") - api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-501-GTNH:dev") - api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.3.51-gtnh:dev") + api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-502-GTNH:dev") + api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.4.0-gtnh:dev") api('com.github.GTNewHorizons:Yamcl:0.6.0:dev') api("com.github.GTNewHorizons:Postea:1.0.13:dev") compileOnlyApi('com.github.GTNewHorizons:ThaumicTinkerer:2.10.2:dev') - compileOnlyApi("com.github.GTNewHorizons:Mobs-Info:0.4.7-GTNH:dev") + compileOnlyApi("com.github.GTNewHorizons:Mobs-Info:0.5.0-GTNH:dev") compileOnlyApi("com.github.GTNewHorizons:Navigator:1.0.15:dev") implementation('com.github.GTNewHorizons:Baubles:1.0.4:dev') {transitive=false} // Required to prevent an older bauble api from Extra Utilities from loading first in the javac classpath @@ -56,9 +56,9 @@ dependencies { devOnlyNonPublishable("com.github.GTNewHorizons:Infernal-Mobs:1.10.0-GTNH:dev") - compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.56:dev") + compileOnlyApi("com.github.GTNewHorizons:Avaritia:1.57:dev") - compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta26:api') { transitive = false } + compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta27:api') { transitive = false } compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.4:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.8.22:dev") { transitive = false } @@ -75,7 +75,7 @@ dependencies { compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.8-GTNH:dev") { transitive = false } implementation("com.github.GTNewHorizons:TinkersConstruct:1.12.16-GTNH:dev") - compileOnly("com.github.GTNewHorizons:Chisel:2.15.3-GTNH:dev") { transitive = false } + compileOnly("com.github.GTNewHorizons:Chisel:2.16.0-GTNH:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:Translocators:1.2.1:dev") { transitive = false } compileOnly rfg.deobf("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:Nuclear-Control:2.6.7:dev") { transitive = false } From 45ab57cbffb91bcd026904db34a756dfd9b19696 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:33:25 -0600 Subject: [PATCH 166/181] Alternate lsc info fix (#3669) Co-authored-by: Glease <4586901+Glease@users.noreply.github.com> --- .../MTEEnhancedMultiBlockBase.java | 1 + src/main/java/gregtech/api/util/LongData.java | 23 +++ .../gregtech/api/util/LongRunningAverage.java | 175 +++++++++++++++++ .../MTELapotronicSuperCapacitor.java | 180 ++++-------------- .../api/util/LongRunningAverageTest.java | 171 +++++++++++++++++ 5 files changed, 405 insertions(+), 145 deletions(-) create mode 100644 src/main/java/gregtech/api/util/LongData.java create mode 100644 src/main/java/gregtech/api/util/LongRunningAverage.java create mode 100644 src/test/java/gregtech/api/util/LongRunningAverageTest.java diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEEnhancedMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEEnhancedMultiBlockBase.java index 512552e9f06..345ce96dbc2 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEEnhancedMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEEnhancedMultiBlockBase.java @@ -121,6 +121,7 @@ protected void setAlignmentLimits(IAlignmentLimits mLimits) { * 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. */ + @Override public abstract IStructureDefinition getStructureDefinition(); protected abstract MultiblockTooltipBuilder createTooltip(); diff --git a/src/main/java/gregtech/api/util/LongData.java b/src/main/java/gregtech/api/util/LongData.java new file mode 100644 index 00000000000..6ad23bb0fe7 --- /dev/null +++ b/src/main/java/gregtech/api/util/LongData.java @@ -0,0 +1,23 @@ +package gregtech.api.util; + +import java.math.BigInteger; + +public interface LongData { + + default double avg() { + int size = size(); + if (size == 0) return 0d; + return sum().doubleValue() / size; + } + + default long avgLong() { + int size = size(); + if (size == 0) return 0; + return sum().divide(BigInteger.valueOf(size)) + .longValueExact(); + } + + int size(); + + BigInteger sum(); +} diff --git a/src/main/java/gregtech/api/util/LongRunningAverage.java b/src/main/java/gregtech/api/util/LongRunningAverage.java new file mode 100644 index 00000000000..c1e578bd6f7 --- /dev/null +++ b/src/main/java/gregtech/api/util/LongRunningAverage.java @@ -0,0 +1,175 @@ +package gregtech.api.util; + +import java.math.BigInteger; +import java.nio.ByteBuffer; +import java.util.Collection; +import java.util.Collections; +import java.util.WeakHashMap; + +public class LongRunningAverage implements LongData { + + private final long[] data; + private long sumHigh, sumLow; + private int ptr; + private boolean filled; + private final Collection views = Collections.newSetFromMap(new WeakHashMap<>()); + + public LongRunningAverage(final int size) { + if (size <= 1) { + throw new IllegalArgumentException("Size must be greater than 1"); + } + data = new long[size]; + } + + public void update(final long value) { + if (value < 0) { + throw new IllegalArgumentException("Value must not be negative"); + } + long high = sumHigh, low = sumLow; + low += value; + high += low < 0 ? 1 : 0; + low = low & 0x7FFFFFFFFFFFFFFFL; + if (filled) { + low -= data[ptr]; + high -= low < 0 ? 1 : 0; + low = low & 0x7FFFFFFFFFFFFFFFL; + } + sumHigh = high; + sumLow = low; + for (View view : views) { + view.update(value); + } + data[ptr++] = value; + if (ptr == data.length) { + ptr = 0; + filled = true; + } + } + + @Override + public int size() { + int length; + if (filled) { + length = data.length; + } else { + length = ptr; + } + return length; + } + + @Override + public BigInteger sum() { + long high = sumHigh, low = sumLow; + if ((high & 1) == 1) { + low |= 0x8000000000000000L; + } + high >>>= 1; + byte[] byteArray = new byte[16]; + ByteBuffer byteBuffer = ByteBuffer.wrap(byteArray); + byteBuffer.putLong(high); + byteBuffer.putLong(low); + return new BigInteger(byteArray); + } + + public LongData view(int size) { + if (size <= 1) { + throw new IllegalArgumentException("Size must be greater than 1"); + } + if (size > data.length) { + throw new IllegalArgumentException("Size must be less than or equal to limit of current ring buffer"); + } + if (size == data.length) { + return this; + } + return new View(size); + } + + private class View implements LongData { + + private final int size; + private long sumHigh, sumLow; + + public View(int size) { + this.size = size; + views.add(this); + if (ptr > 0 || filled) { + ByteBuffer buf = ByteBuffer.allocate(16); + buf.put(sumSlow().toByteArray()); + buf.flip(); + sumLow = buf.getLong(); + sumHigh = buf.getLong(); + } + } + + @Override + public int size() { + return Math.min(LongRunningAverage.this.size(), size); + } + + @Override + public BigInteger sum() { + long high = sumHigh, low = sumLow; + if ((high & 1) == 1) { + low |= 0x8000000000000000L; + } + high >>>= 1; + byte[] byteArray = new byte[16]; + ByteBuffer byteBuffer = ByteBuffer.wrap(byteArray); + byteBuffer.putLong(high); + byteBuffer.putLong(low); + return new BigInteger(byteArray); + } + + public BigInteger sumSlow() { + int start = getStart(); + long high = 0, low = data[start]; + int end = ptr; + for (int i = start + 1; i != end; i++) { + if (i == data.length) { + i = 0; + if (end == 0) break; + } + long num = data[i]; + low += num; + high += low < 0 ? 1 : 0; + low = low & 0x7FFFFFFFFFFFFFFFL; + } + if ((high & 1) == 1) { + low |= 0x8000000000000000L; + } + high >>>= 1; + byte[] byteArray = new byte[16]; + ByteBuffer byteBuffer = ByteBuffer.wrap(byteArray); + byteBuffer.putLong(high); + byteBuffer.putLong(low); + return new BigInteger(byteArray); + } + + private int getStart() { + int start = ptr - size; + if (start < 0) { + if (filled) { + start += data.length; + } else { + start = 0; + } + } + return start; + } + + public void update(long value) { + long high = sumHigh, low = sumLow; + low += value; + high += low < 0 ? 1 : 0; + low = low & 0x7FFFFFFFFFFFFFFFL; + int start = getStart(); + if (size() == size) { + low -= data[start]; + high -= low < 0 ? 1 : 0; + low = low & 0x7FFFFFFFFFFFFFFFL; + } + sumHigh = high; + sumLow = low; + } + } +} diff --git a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java index 37bb2c18675..3b45f7a35e9 100644 --- a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java +++ b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java @@ -23,10 +23,8 @@ import java.util.Arrays; import java.util.Comparator; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Locale; -import java.util.Queue; import java.util.Set; import java.util.UUID; import java.util.function.Consumer; @@ -50,6 +48,7 @@ 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.StructureUtility; import com.gtnewhorizon.structurelib.util.ItemStackPredicate.NBTMode; import com.gtnewhorizons.modularui.api.drawable.IDrawable; @@ -80,6 +79,8 @@ import gregtech.api.render.TextureFactory; import gregtech.api.util.GTUtility; import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.LongData; +import gregtech.api.util.LongRunningAverage; import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.common.gui.modularui.widget.ShutDownReasonSyncer; import gregtech.common.misc.WirelessNetworkManager; @@ -106,14 +107,14 @@ private enum TopState { private int counter = 1; private boolean balanced = false; - private final Queue energyInputValues = new LinkedList<>(); - private final Queue energyOutputValues = new LinkedList<>(); + private final LongRunningAverage energyInputValues1h = new LongRunningAverage(3600 * 20); + private final LongRunningAverage energyOutputValues1h = new LongRunningAverage(3600 * 20); - private final Queue energyInputValues5m = new LinkedList<>(); - private final Queue energyOutputValues5m = new LinkedList<>(); + private final LongData energyInputValues = energyInputValues1h.view(DURATION_AVERAGE_TICKS); + private final LongData energyOutputValues = energyOutputValues1h.view(DURATION_AVERAGE_TICKS); - private final Queue energyInputValues1h = new LinkedList<>(); - private final Queue energyOutputValues1h = new LinkedList<>(); + private final LongData energyInputValues5m = energyInputValues1h.view(5 * 60 * 20); + private final LongData energyOutputValues5m = energyOutputValues1h.view(5 * 60 * 20); 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; @@ -240,7 +241,7 @@ public boolean check(MTELapotronicSuperCapacitor t, World world, int x, int y, i } private int getHint(ItemStack stack) { - return Capacitor.VALUES_BY_TIER[Math.min( + return Capacitor.VALUES_BY_TIER[min( Capacitor.VALUES_BY_TIER.length, ChannelDataAccessor.getChannelData(stack, "capacitor")) - 1].getMinimalGlassTier() + 1; @@ -266,13 +267,12 @@ public PlaceResult survivalPlaceBlock(MTELapotronicSuperCapacitor t, World world 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); + ItemStack targetStack = source.takeOne( + s -> s != null && s.stackSize >= 0 + && s.getItem() == LSC_PART_ITEM + && Capacitor.VALUES[min(s.getItemDamage(), Capacitor.VALUES.length) - 1] + .getMinimalGlassTier() > glassTier, + true); if (targetStack == null) return PlaceResult.REJECT; return StructureUtility.survivalPlaceBlock( targetStack, @@ -629,45 +629,16 @@ public void construct(ItemStack stackSize, boolean hintsOnly) { } @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { if (mMachine) return -1; - int layer = Math.min(ChannelDataAccessor.getChannelData(stackSize, "height") + 3, 50); + int layer = min(ChannelDataAccessor.getChannelData(stackSize, "height") + 3, 50); int built; - built = survivialBuildPiece( - STRUCTURE_PIECE_BASE, - stackSize, - 2, - 1, - 0, - elementBudget, - source, - actor, - false, - true); + built = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 2, 1, 0, elementBudget, env, 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); + for (int i = 2; i < layer - 1; i++) + built = survivialBuildPiece(STRUCTURE_PIECE_MID, stackSize, 2, i, 0, elementBudget, env, false, true); if (built >= 0) return built; - return survivialBuildPiece( - STRUCTURE_PIECE_TOP, - stackSize, - 2, - layer - 1, - 0, - elementBudget, - source, - actor, - false, - true); + return survivialBuildPiece(STRUCTURE_PIECE_TOP, stackSize, 2, layer - 1, 0, elementBudget, env, false, true); } @Override @@ -788,42 +759,9 @@ public boolean onRunningTick(ItemStack stack) { 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); - - // Add I/O values to Queues 5 min - if (energyInputValues5m.size() > 6000) { - energyInputValues5m.remove(); - } - energyInputValues5m.offer(inputLastTick); - - if (energyOutputValues5m.size() > 6000) { - energyOutputValues5m.remove(); - } - - energyOutputValues5m.offer(outputLastTick); - - // Add I/O values to Queues 1 hour - if (energyInputValues1h.size() > 72000) { - energyInputValues1h.remove(); - } - energyInputValues1h.offer(inputLastTick); - - if (energyOutputValues1h.size() > 72000) { - energyOutputValues1h.remove(); - } - - energyOutputValues1h.offer(outputLastTick); - + // collect stats + energyInputValues1h.update(inputLastTick); + energyOutputValues1h.update(outputLastTick); return true; } @@ -923,57 +861,9 @@ private long getPowerToPush(long hatchWatts) { 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); - } - - private long getAvgIn5m() { - double sum = 0; - for (long l : energyInputValues5m) { - sum += l; - } - return (long) sum / Math.max(energyInputValues5m.size(), 1); - } - - private long getAvgOut5m() { - double sum = 0; - for (long l : energyOutputValues5m) { - sum += l; - } - return (long) sum / Math.max(energyOutputValues5m.size(), 1); - } - - private long getAvgIn1h() { - double sum = 0; - for (long l : energyInputValues1h) { - sum += l; - } - return (long) sum / Math.max(energyInputValues1h.size(), 1); - } - - private long getAvgOut1h() { - double sum = 0; - for (long l : energyOutputValues1h) { - sum += l; - } - return (long) sum / Math.max(energyOutputValues1h.size(), 1); - } - private String getTimeTo() { - double avgIn = getAvgIn(); - double avgOut = getAvgOut(); + double avgIn = energyInputValues.avgLong(); + double avgOut = energyOutputValues.avgLong(); double passLoss = passiveDischargeAmount; double cap = capacity.doubleValue(); double sto = stored.doubleValue(); @@ -1033,12 +923,12 @@ public String[] getInfoData() { 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(getAvgIn()) + " (last " + secInterval + " seconds)"); - ll.add("Avg EU OUT: " + nf.format(getAvgOut()) + " (last " + secInterval + " seconds)"); - ll.add("Avg EU IN: " + nf.format(getAvgIn5m()) + " (last " + 5 + " minutes)"); - ll.add("Avg EU OUT: " + nf.format(getAvgOut5m()) + " (last " + 5 + " minutes)"); - ll.add("Avg EU IN: " + nf.format(getAvgIn1h()) + " (last " + 1 + " hour)"); - ll.add("Avg EU OUT: " + nf.format(getAvgOut1h()) + " (last " + 1 + " hour)"); + ll.add("Avg EU IN: " + nf.format(energyInputValues.avgLong()) + " (last " + secInterval + " seconds)"); + ll.add("Avg EU OUT: " + nf.format(energyOutputValues.avgLong()) + " (last " + secInterval + " seconds)"); + ll.add("Avg EU IN: " + nf.format(energyInputValues5m.avgLong()) + " (last 5 minutes)"); + ll.add("Avg EU OUT: " + nf.format(energyOutputValues5m.avgLong()) + " (last 5 minutes)"); + ll.add("Avg EU IN: " + nf.format(energyInputValues1h.avgLong()) + " (last 1 hour)"); + ll.add("Avg EU OUT: " + nf.format(energyOutputValues1h.avgLong()) + " (last 1 hour)"); ll.add(getTimeTo()); @@ -1255,7 +1145,7 @@ && getBaseMetaTileEntity().wasShutdown())) .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> isActiveCache)) - .widget(new FakeSyncWidget.LongSyncer(this::getAvgIn, val -> avgInCache = val)) + .widget(new FakeSyncWidget.LongSyncer(() -> energyInputValues.avgLong(), val -> avgInCache = val)) .widget( new TextWidget() .setStringSupplier( @@ -1267,7 +1157,7 @@ && getBaseMetaTileEntity().wasShutdown())) .setTextAlignment(Alignment.CenterLeft) .setDefaultColor(COLOR_TEXT_WHITE.get()) .setEnabled(widget -> isActiveCache)) - .widget(new FakeSyncWidget.LongSyncer(this::getAvgOut, val -> avgOutCache = val)) + .widget(new FakeSyncWidget.LongSyncer(() -> energyOutputValues.avgLong(), val -> avgOutCache = val)) .widget( new TextWidget().setStringSupplier(() -> EnumChatFormatting.WHITE + timeToCache) .setTextAlignment(Alignment.CenterLeft) diff --git a/src/test/java/gregtech/api/util/LongRunningAverageTest.java b/src/test/java/gregtech/api/util/LongRunningAverageTest.java new file mode 100644 index 00000000000..9342f27fc8f --- /dev/null +++ b/src/test/java/gregtech/api/util/LongRunningAverageTest.java @@ -0,0 +1,171 @@ +package gregtech.api.util; + +import static org.junit.jupiter.api.Assertions.*; + +import java.math.BigInteger; + +import org.junit.jupiter.api.Test; + +import it.unimi.dsi.fastutil.longs.LongArrayList; +import it.unimi.dsi.fastutil.longs.LongList; + +// the main test subject is the internal 127-bit long arithmetic and ring buffer management +// so BigIntegers and Lists with manually maintained size limit is used as test reference +class LongRunningAverageTest { + + private static final long[] data; + + static { + data = new long[200000]; + // some random number close to long max + for (int i = 0; i < 100000; i++) { + data[i] = Long.MAX_VALUE / (long) Math.sqrt(i + 1); + } + for (int i = 100000; i > 0; i--) { + data[200000 - i] = Long.MAX_VALUE / (long) Math.sqrt(i + 1); + } + } + + @Test + void avg() { + BigInteger expectedSum = BigInteger.ZERO; + LongRunningAverage average = new LongRunningAverage(data.length); + for (int i = 0; i < data.length; i++) { + long val = data[i]; + expectedSum = expectedSum.add(BigInteger.valueOf(val)); + average.update(val); + int ii = i + 1; + assertEquals( + expectedSum.divide(BigInteger.valueOf(i + 1)) + .doubleValue(), + average.avg(), + val / 1e8d, + () -> "Iteration #" + ii); + } + average = new LongRunningAverage(10); + LongList l = new LongArrayList(); + for (int i = 0; i < data.length; i++) { + long val = data[i]; + average.update(val); + l.add(val); + if (l.size() > 10) { + l.removeElements(0, 1); + } + BigInteger avg = l.longStream() + .mapToObj(BigInteger::valueOf) + .reduce(BigInteger::add) + .get() + .divide(BigInteger.valueOf(Math.min(i + 1, 10))); + int ii = i + 1; + assertEquals(avg.doubleValue(), average.avg(), val / 1e8d, () -> "Iteration #" + ii); + } + } + + @Test + void avgLong() { + BigInteger expectedSum = BigInteger.ZERO; + LongRunningAverage average = new LongRunningAverage(data.length); + for (int i = 0; i < data.length; i++) { + long val = data[i]; + expectedSum = expectedSum.add(BigInteger.valueOf(val)); + average.update(val); + int ii = i + 1; + assertEquals( + expectedSum.divide(BigInteger.valueOf(i + 1)) + .longValueExact(), + average.avgLong(), + () -> "Iteration #" + ii); + } + average = new LongRunningAverage(10); + LongList l = new LongArrayList(); + for (int i = 0; i < data.length; i++) { + long val = data[i]; + average.update(val); + l.add(val); + if (l.size() > 10) { + l.removeElements(0, 1); + } + BigInteger avg = l.longStream() + .mapToObj(BigInteger::valueOf) + .reduce(BigInteger::add) + .get() + .divide(BigInteger.valueOf(Math.min(i + 1, 10))); + int ii = i + 1; + assertEquals(avg.longValueExact(), average.avgLong(), () -> "Iteration #" + ii); + } + } + + @Test + void size() { + LongRunningAverage average = new LongRunningAverage(data.length); + for (int i = 0; i < data.length; i++) { + long val = data[i]; + average.update(val); + int ii = i + 1; + assertEquals(i + 1, average.size(), () -> "Iteration #" + ii); + } + average = new LongRunningAverage(10); + for (int i = 0; i < data.length; i++) { + long val = data[i]; + average.update(val); + int ii = i + 1; + assertEquals(Math.min(10, i + 1), average.size(), () -> "Iteration #" + ii); + } + } + + @Test + void sum() { + BigInteger expected = BigInteger.ZERO; + LongRunningAverage average = new LongRunningAverage(data.length); + for (int i = 0; i < data.length; i++) { + long val = data[i]; + expected = expected.add(BigInteger.valueOf(val)); + average.update(val); + BigInteger our = average.sum(); + int ii = i + 1; + assertEquals(expected, our, () -> "Iteration #" + ii); + } + average = new LongRunningAverage(10); + LongList l = new LongArrayList(); + for (int i = 0; i < data.length; i++) { + long val = data[i]; + average.update(val); + l.add(val); + if (l.size() > 10) { + l.removeElements(0, 1); + } + int ii = i + 1; + assertEquals( + l.longStream() + .mapToObj(BigInteger::valueOf) + .reduce(BigInteger::add) + .get(), + average.sum(), + () -> "Iteration #" + ii); + } + } + + @Test + void view() { + LongRunningAverage average = new LongRunningAverage(data.length / 10); + LongData view = average.view(10); + LongList l = new LongArrayList(); + for (int i = 0; i < data.length; i++) { + long val = data[i]; + average.update(val); + l.add(val); + if (l.size() > 10) { + l.removeElements(0, 1); + } + int ii = i + 1; + assertEquals(l.size(), view.size(), () -> "Iteration #" + ii); + assertEquals( + l.longStream() + .mapToObj(BigInteger::valueOf) + .reduce(BigInteger::add) + .get(), + view.sum(), + () -> "Iteration #" + ii); + } + } +} From 1c9816aecdf3f345a20db363e5917e8e17fff0be Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Thu, 19 Dec 2024 02:30:46 +0100 Subject: [PATCH 167/181] Fix Bio Lab recipe voltages that uses transform module (#3671) --- .../bartworks/common/tileentities/tiered/MTEBioLab.java | 4 ++-- .../material/processingLoaders/AdditionalRecipes.java | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/bartworks/common/tileentities/tiered/MTEBioLab.java b/src/main/java/bartworks/common/tileentities/tiered/MTEBioLab.java index 992c7188fa2..0c9d86d8d2f 100644 --- a/src/main/java/bartworks/common/tileentities/tiered/MTEBioLab.java +++ b/src/main/java/bartworks/common/tileentities/tiered/MTEBioLab.java @@ -325,7 +325,7 @@ public int checkRecipe(boolean skipOC) { 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()) + if (this.mTier < 1 + 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) @@ -338,7 +338,7 @@ public int checkRecipe(boolean skipOC) { } this.mOutputItems[1] = ItemList.Cell_Empty.get(1L); this.calculateOverclockedNess( - BWUtil.getMachineVoltageFromTier(3 + rTier + cultureDNABioData.getTier()), + BWUtil.getMachineVoltageFromTier(1 + rTier + cultureDNABioData.getTier()), 500); return MTEBasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; } diff --git a/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java b/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java index a4d413a0625..f76877734ff 100644 --- a/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java +++ b/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java @@ -169,6 +169,7 @@ private static void runBWRecipes() { } } + long energyUsageWithTransformModule = 1; for (ItemStack stack : BioItemList.getAllPetriDishes()) { BioData DNA = BioData.getBioDataFromNBTTag( stack.getTagCompound() @@ -177,6 +178,11 @@ private static void runBWRecipes() { stack.getTagCompound() .getCompoundTag("Plasmid")); if (!Objects.equals(DNA.getName(), Plasmid.getName())) { + if (DNA.getName() == "TCetiEis Fucus Serratus") { + energyUsageWithTransformModule = TierEU.RECIPE_LuV; + } else if (DNA.getName() == "Escherichia koli") { + energyUsageWithTransformModule = TierEU.RECIPE_EV; + } GTValues.RA.stdBuilder() .itemInputs( BioItemList.getPetriDish(BioCulture.getBioCulture(DNA.getName())), @@ -187,7 +193,7 @@ private static void runBWRecipes() { .fluidInputs(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) .special(BioItemList.mBioLabParts[3]) .duration(25 * SECONDS) - .eut(TierEU.RECIPE_EV) + .eut(energyUsageWithTransformModule) .ignoreCollision() .fake() .addTo(bioLabRecipes); From b98fc90d82110057b31e50cf7e28bcb2b6e2279f Mon Sep 17 00:00:00 2001 From: Guillaume Mercier Date: Wed, 18 Dec 2024 20:38:28 -0500 Subject: [PATCH 168/181] Fix structure of mapiary (#3670) Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../gregtech/multiblock/MTEMegaIndustrialApiary.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java index 624b686f335..ae8ab881199 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java @@ -148,8 +148,8 @@ public class MTEMegaIndustrialApiary extends KubaTechGTMultiBlockBase Date: Thu, 19 Dec 2024 00:47:10 -0600 Subject: [PATCH 169/181] Fix SLAM structure and Antimatter Multi Tooltips (#3672) --- .../goodgenerator/blocks/structures/AntimatterStructures.java | 2 +- .../java/goodgenerator/blocks/tileEntity/AntimatterForge.java | 1 + .../goodgenerator/blocks/tileEntity/AntimatterGenerator.java | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/goodgenerator/blocks/structures/AntimatterStructures.java b/src/main/java/goodgenerator/blocks/structures/AntimatterStructures.java index e199e680cc8..d83704c646f 100644 --- a/src/main/java/goodgenerator/blocks/structures/AntimatterStructures.java +++ b/src/main/java/goodgenerator/blocks/structures/AntimatterStructures.java @@ -3368,7 +3368,7 @@ public class AntimatterStructures { " A A ", " A A ", " C C ", " FCG GCF ", " DDGDDG GDDGDD ", " DDGDDGDCDGGGGGDCDGDDGDD ", - " FDDDDDDDDDDDDDDDDDDDDDDDFF " }, + " FDDDDDDDDDDDDDDDDDDDDDDDF " }, { " CCC ", " EEEEEEEEE ", " E E ", " E E ", " E E ", " E E ", diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java index 3e1169d1182..d45aebbf8db 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java @@ -292,6 +292,7 @@ protected MultiblockTooltipBuilder createTooltip() { + "+0.10" + EnumChatFormatting.GRAY) .addInfo("Each stabilization can only use one of the fluids at a time") + .beginStructureBlock(53, 53, 47, false) .addCasingInfoMin("Antimatter Containment Casing", 512, false) .addCasingInfoMin("Magnetic Flux Casing", 2274, false) .addCasingInfoMin("Gravity Stabilization Casing", 623, false) diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java index d6a99ff9758..96a0310ed6a 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java @@ -342,6 +342,7 @@ protected MultiblockTooltipBuilder createTooltip() { .addInfo("Enable wireless EU mode with screwdriver") .addInfo("Wireless mode requires SC UMV Base or better") .addInfo("Wireless mode uses hatch capacity limit") + .beginStructureBlock(35, 43, 35, false) .addCasingInfoMin("Transcendentally Reinforced Borosilicate Glass", 1008, false) .addCasingInfoMin("Magnetic Flux Casing", 4122, false) .addCasingInfoMin("Gravity Stabilization Casing", 2418, false) From f23df3c0df2747ec58c7a22f543d349780b60f7d Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Thu, 19 Dec 2024 21:01:49 +0100 Subject: [PATCH 170/181] update --- dependencies.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 503433b259f..1f829fd963c 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -38,11 +38,11 @@ dependencies { api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") api("com.github.GTNewHorizons:NotEnoughItems:2.7.0-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") - api("com.github.GTNewHorizons:GTNHLib:0.5.22:dev") + api("com.github.GTNewHorizons:GTNHLib:0.5.23:dev") api("com.github.GTNewHorizons:ModularUI:1.2.17:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.16-1.7.10:dev") api("com.github.GTNewHorizons:waila:1.8.2:dev") - api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-502-GTNH:dev") + api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-503-GTNH:dev") api("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.4.0-gtnh:dev") api('com.github.GTNewHorizons:Yamcl:0.6.0:dev') api("com.github.GTNewHorizons:Postea:1.0.13:dev") @@ -62,7 +62,7 @@ dependencies { compileOnlyApi("com.github.GTNewHorizons:AppleCore:3.3.4:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:EnderIO:2.8.22:dev") { transitive = false } - compileOnlyApi("com.github.GTNewHorizons:ForestryMC:4.9.19:dev") { transitive = false } + compileOnlyApi("com.github.GTNewHorizons:ForestryMC:4.10.0:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:ProjectRed:4.10.5-GTNH:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:Railcraft:9.15.15:dev") { transitive = false } @@ -80,7 +80,7 @@ dependencies { compileOnly rfg.deobf("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:Nuclear-Control:2.6.7:dev") { transitive = false } compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") { transitive = false } - implementation("com.github.GTNewHorizons:Hodgepodge:2.6.2:dev") + implementation("com.github.GTNewHorizons:Hodgepodge:2.6.3:dev") compileOnly('com.github.GTNewHorizons:Botania:1.12.1-GTNH:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:HoloInventory:2.4.13-GTNH:dev') { transitive = false } compileOnly rfg.deobf("curse.maven:extra-utilities-225561:2264384") @@ -103,7 +103,7 @@ dependencies { annotationProcessor("com.google.auto.value:auto-value:1.10.1") // For testing forestry integration (iApiary, combs, tree growth simulator) - // runtimeOnlyNonPublishable("com.github.GTNewHorizons:ForestryMC:4.9.19:dev") + // runtimeOnlyNonPublishable("com.github.GTNewHorizons:ForestryMC:4.10.0:dev") // runtimeOnlyNonPublishable('com.github.GTNewHorizons:neiaddons:1.16.0:dev') // runtimeOnlyNonPublishable('com.github.GTNewHorizons:MagicBees:2.8.5-GTNH:dev') // runtimeOnlyNonPublishable('com.github.GTNewHorizons:Binnie:2.4.4:dev') From f39168588d2ef98e744089bb91330cc3cd9af77d Mon Sep 17 00:00:00 2001 From: GDCloud <93287602+GDCloudstrike@users.noreply.github.com> Date: Fri, 20 Dec 2024 03:19:37 +0100 Subject: [PATCH 171/181] Fix autobuild of first godforge ring (#3675) --- .../thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java index 35ae839406e..7afef33b649 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge/MTEForgeOfGods.java @@ -269,7 +269,7 @@ public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBu survivialBuildPiece(STRUCTURE_PIECE_SHAFT, stackSize, 63, 14, 1, realBudget, env, false, true); - if (stackSize.stackSize > 0 && ringAmount < 1) { + if (stackSize.stackSize > 0) { built += survivialBuildPiece( STRUCTURE_PIECE_FIRST_RING, stackSize, From 41a61fc8a829f393b034b2dfe735e4e23dffcda4 Mon Sep 17 00:00:00 2001 From: lordIcocain <62835225+lordIcocain@users.noreply.github.com> Date: Fri, 20 Dec 2024 04:53:05 +0200 Subject: [PATCH 172/181] Prevent fill by hand reservoir/air intake hatch with incorrect fluid (#3673) Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../metatileentity/implementations/METHatchAirIntake.java | 8 ++++++++ .../metatileentity/implementations/MTEHatchReservoir.java | 7 +++++++ 2 files changed, 15 insertions(+) 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 index 6786fabc313..83c18070309 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/METHatchAirIntake.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/METHatchAirIntake.java @@ -4,6 +4,9 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; +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; @@ -124,4 +127,9 @@ public void generateParticles(World aWorld, String name) { -ySpd, zSpd); } + + @Override + protected FluidSlotWidget createFluidSlot() { + return super.createFluidSlot().setFilter(f -> f == Materials.Air.mGas); + } } 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 index 23231cc6e97..4351133d535 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchReservoir.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchReservoir.java @@ -4,6 +4,8 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; +import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; + import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; @@ -71,4 +73,9 @@ public ITexture[] getTexturesActive(final ITexture aBaseTexture) { public ITexture[] getTexturesInactive(final ITexture aBaseTexture) { return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Water) }; } + + @Override + protected FluidSlotWidget createFluidSlot() { + return super.createFluidSlot().setFilter(f -> f == FluidRegistry.WATER); + } } From 53cadee85d08841a43771f7c8054a9c5ffcd6319 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Fri, 20 Dec 2024 12:00:22 +0100 Subject: [PATCH 173/181] update --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 1f829fd963c..5ca969b15e8 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -80,7 +80,7 @@ dependencies { compileOnly rfg.deobf("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:Nuclear-Control:2.6.7:dev") { transitive = false } compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") { transitive = false } - implementation("com.github.GTNewHorizons:Hodgepodge:2.6.3:dev") + implementation("com.github.GTNewHorizons:Hodgepodge:2.6.4:dev") compileOnly('com.github.GTNewHorizons:Botania:1.12.1-GTNH:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:HoloInventory:2.4.13-GTNH:dev') { transitive = false } compileOnly rfg.deobf("curse.maven:extra-utilities-225561:2264384") From d3e13bebc54d6c83770de27d6827210da14c1d50 Mon Sep 17 00:00:00 2001 From: HoleFish <48403212+HoleFish@users.noreply.github.com> Date: Fri, 20 Dec 2024 22:36:12 +0800 Subject: [PATCH 174/181] Remove transitional platinum concentrate recipe (#3676) Co-authored-by: Martin Robertz --- .../gtenhancement/PlatinumSludgeOverHaul.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/main/java/bartworks/system/material/gtenhancement/PlatinumSludgeOverHaul.java b/src/main/java/bartworks/system/material/gtenhancement/PlatinumSludgeOverHaul.java index e6582dd7b17..df806929112 100644 --- a/src/main/java/bartworks/system/material/gtenhancement/PlatinumSludgeOverHaul.java +++ b/src/main/java/bartworks/system/material/gtenhancement/PlatinumSludgeOverHaul.java @@ -372,18 +372,7 @@ private static void runHelperrecipes() { .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)) From 8dc5d9fae051f913ff4ac18ff46c2800794a7061 Mon Sep 17 00:00:00 2001 From: fall <66188216+kumquat-ir@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:24:13 -0800 Subject: [PATCH 175/181] Fix flipped bolt/screwdriver image encoding issues (#3678) --- .../ggfab/textures/items/gt.ggfab.d1/36.png | Bin 633 -> 466 bytes .../ggfab/textures/items/gt.ggfab.d1/6.png | Bin 305 -> 284 bytes .../textures/gui/picture/tic_bolt_molding.png | Bin 298 -> 320 bytes .../iconsets/HANDLE_ELECTRIC_SCREWDRIVER.png | Bin 380 -> 286 bytes .../HANDLE_ELECTRIC_SCREWDRIVER_OVERLAY.png | Bin 241 -> 139 bytes .../items/iconsets/HANDLE_SCREWDRIVER.png | Bin 278 -> 245 bytes .../iconsets/HANDLE_SCREWDRIVER_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/Botania-Dragonstone/bolt.png | Bin 250 -> 2770 bytes .../Botania-Dragonstone/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../materialicons/CUSTOM/Dreamwood/bolt.png | Bin 1368 -> 1182 bytes .../CUSTOM/Dreamwood/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/Dreamwood/toolHeadScrewdriver.png | Bin 1398 -> 1248 bytes .../Dreamwood/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../materialicons/CUSTOM/Livingrock/bolt.png | Bin 258 -> 193 bytes .../CUSTOM/Livingrock/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/Livingrock/toolHeadScrewdriver.png | Bin 309 -> 240 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../materialicons/CUSTOM/Livingwood/bolt.png | Bin 1368 -> 1206 bytes .../CUSTOM/Livingwood/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/Livingwood/toolHeadScrewdriver.png | Bin 1398 -> 1271 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../bolt.png | Bin 1314 -> 1356 bytes .../bolt_OVERLAY.png | Bin 4586 -> 488 bytes .../toolHeadScrewdriver.png | Bin 2041 -> 1926 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 4638 -> 511 bytes .../CUSTOM/WhiteDwarfMatter/bolt.png | Bin 4077 -> 504 bytes .../CUSTOM/WhiteDwarfMatter/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../materialicons/CUSTOM/bedrockium/bolt.png | Bin 204 -> 154 bytes .../CUSTOM/bedrockium/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/bedrockium/toolHeadScrewdriver.png | Bin 238 -> 205 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../materialicons/CUSTOM/eternity/bolt.png | Bin 1757 -> 1684 bytes .../CUSTOM/eternity/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/eternity/toolHeadScrewdriver.png | Bin 2813 -> 2713 bytes .../eternity/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/exohalkonite/bolt.png | Bin 956 -> 1812 bytes .../CUSTOM/exohalkonite/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/hotexohalkonite/bolt.png | Bin 11749 -> 11712 bytes .../CUSTOM/hotexohalkonite/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../hotexohalkonite/toolHeadScrewdriver.png | Bin 1286 -> 2740 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/hotprotohalkonite/bolt.png | Bin 730 -> 483 bytes .../CUSTOM/hotprotohalkonite/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../materialicons/CUSTOM/infinity/bolt.png | Bin 757 -> 756 bytes .../CUSTOM/infinity/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/infinity/toolHeadScrewdriver.png | Bin 1185 -> 1171 bytes .../infinity/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../materialicons/CUSTOM/magmatter/bolt.png | Bin 705 -> 889 bytes .../CUSTOM/magmatter/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/magmatter/toolHeadScrewdriver.png | Bin 981 -> 1333 bytes .../magmatter/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/protohalkonite/bolt.png | Bin 258 -> 193 bytes .../CUSTOM/protohalkonite/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../materialicons/CUSTOM/spacetime/bolt.png | Bin 1136 -> 3216 bytes .../CUSTOM/spacetime/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/spacetime/toolHeadScrewdriver.png | Bin 2160 -> 5000 bytes .../spacetime/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../materialicons/CUSTOM/universium/bolt.png | Bin 737 -> 548 bytes .../CUSTOM/universium/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../CUSTOM/universium/toolHeadScrewdriver.png | Bin 745 -> 549 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/DIAMOND/bolt.png | Bin 194 -> 102 bytes .../materialicons/DIAMOND/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../DIAMOND/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../DIAMOND/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/DULL/bolt.png | Bin 194 -> 102 bytes .../items/materialicons/DULL/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../DULL/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../DULL/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/EMERALD/bolt.png | Bin 194 -> 102 bytes .../materialicons/EMERALD/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../EMERALD/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../EMERALD/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/ENRICHED/bolt.png | Bin 194 -> 102 bytes .../materialicons/ENRICHED/bolt_OVERLAY.png | Bin 224 -> 149 bytes .../ENRICHED/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../ENRICHED/toolHeadScrewdriver_OVERLAY.png | Bin 234 -> 172 bytes .../items/materialicons/FIERY/bolt.png | Bin 194 -> 102 bytes .../materialicons/FIERY/bolt_OVERLAY.png | Bin 224 -> 149 bytes .../FIERY/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../FIERY/toolHeadScrewdriver_OVERLAY.png | Bin 234 -> 172 bytes .../items/materialicons/FINE/bolt.png | Bin 194 -> 102 bytes .../items/materialicons/FINE/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../FINE/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../FINE/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/FLINT/bolt.png | Bin 194 -> 102 bytes .../materialicons/FLINT/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../FLINT/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../FLINT/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/FLUID/bolt.png | Bin 194 -> 102 bytes .../materialicons/FLUID/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../FLUID/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../FLUID/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/GEM_A/bolt.png | Bin 194 -> 102 bytes .../materialicons/GEM_A/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../GEM_A/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../GEM_A/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../materialicons/GEM_HORIZONTAL/bolt.png | Bin 194 -> 102 bytes .../GEM_HORIZONTAL/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../GEM_HORIZONTAL/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/GEM_VERTICAL/bolt.png | Bin 194 -> 102 bytes .../GEM_VERTICAL/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../GEM_VERTICAL/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/GLASS/bolt.png | Bin 194 -> 102 bytes .../materialicons/GLASS/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../GLASS/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../GLASS/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/LAPIS/bolt.png | Bin 194 -> 102 bytes .../materialicons/LAPIS/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../LAPIS/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../LAPIS/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/LEAF/bolt.png | Bin 194 -> 102 bytes .../items/materialicons/LEAF/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../LEAF/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../LEAF/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/LIGNITE/bolt.png | Bin 194 -> 102 bytes .../materialicons/LIGNITE/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../LIGNITE/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../LIGNITE/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/MAGNETIC/bolt.png | Bin 194 -> 102 bytes .../materialicons/MAGNETIC/bolt_OVERLAY.png | Bin 344 -> 229 bytes .../MAGNETIC/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../MAGNETIC/toolHeadScrewdriver_OVERLAY.png | Bin 505 -> 280 bytes .../items/materialicons/METALLIC/bolt.png | Bin 173 -> 102 bytes .../materialicons/METALLIC/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../METALLIC/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../METALLIC/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/NETHERSTAR/bolt.png | Bin 194 -> 102 bytes .../materialicons/NETHERSTAR/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../NETHERSTAR/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/NONE/bolt.png | Bin 194 -> 102 bytes .../items/materialicons/NONE/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../NONE/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../NONE/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/NUCLEAR/bolt.png | Bin 194 -> 102 bytes .../materialicons/NUCLEAR/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../NUCLEAR/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../NUCLEAR/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/OPAL/bolt.png | Bin 194 -> 102 bytes .../items/materialicons/OPAL/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../OPAL/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../OPAL/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/PAPER/bolt.png | Bin 194 -> 102 bytes .../materialicons/PAPER/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../PAPER/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../PAPER/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/POWDER/bolt.png | Bin 194 -> 102 bytes .../materialicons/POWDER/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../POWDER/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../POWDER/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/QUARTZ/bolt.png | Bin 194 -> 102 bytes .../materialicons/QUARTZ/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../QUARTZ/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../QUARTZ/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/REFINED/bolt.png | Bin 194 -> 102 bytes .../materialicons/REFINED/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../REFINED/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../REFINED/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/ROUGH/bolt.png | Bin 194 -> 102 bytes .../materialicons/ROUGH/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../ROUGH/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../ROUGH/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/RUBY/bolt.png | Bin 194 -> 102 bytes .../items/materialicons/RUBY/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../RUBY/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../RUBY/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/SAND/bolt.png | Bin 194 -> 102 bytes .../items/materialicons/SAND/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../SAND/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../SAND/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/SHARDS/bolt.png | Bin 194 -> 102 bytes .../materialicons/SHARDS/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../SHARDS/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../SHARDS/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/SHINY/bolt.png | Bin 194 -> 102 bytes .../materialicons/SHINY/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../SHINY/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../SHINY/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes .../items/materialicons/WOOD/bolt.png | Bin 194 -> 102 bytes .../items/materialicons/WOOD/bolt_OVERLAY.png | Bin 183 -> 85 bytes .../WOOD/toolHeadScrewdriver.png | Bin 204 -> 116 bytes .../WOOD/toolHeadScrewdriver_OVERLAY.png | Bin 183 -> 85 bytes 185 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/ggfab/textures/items/gt.ggfab.d1/36.png b/src/main/resources/assets/ggfab/textures/items/gt.ggfab.d1/36.png index 56856961d6c3a6b681782f884d591ec1b9d98e5c..746dd4ee96f9ebb9af24a9d798ce545699b22c32 100644 GIT binary patch delta 451 zcmV;!0X+Ws1kwYL8Gi-<001BJ|6u?C0hvieK~#90rIRsk+%ObGANfbQ$sQnZ?aocM za^X~41-`=`!WVGu04V~bGLS8T6b4-6P?}Gski=cPOb8GZK>pF2`6T@3DBH*F?QNGt zC{Tz9Aq5eEB%)R{O{i9?#KXfw0jL0<_WRyi!)~OLOfS<(W`E)|*&4QSYqVyL$72T& zK-!ev(FAS+pW*t3*as{iRLvmB)^H}XXPUkI$tH85@wz@fK97UC3j!M?x{buwEfB!9?k^v*j0KoU78WrEY`*GMg$&>1#CNb^}BGpSUJLGbeXWfbrC`<|=s z0+ilYK)n?xr6Ygf_0Q`lzPY*STbQG;6e1JKWd_Y)(dvkh>+9=2dm*Z=E{DszyDf=?9DX?>NMF`7aC~I5GWr&-{N?-wNtIKw(EIc9^%f=Mvb`QV1-L6LjQ%qFV t002ovPDHLkV1feM+GGF# delta 619 zcmcb_{F7yZWIZzj1A~Sxe=v|zNcITwWnidMV_;}#VPNcXxMP zZCxuXD@O+hFK@5^|NnE|6R!Y<17k^$UoeBivm0q3PLj8~OXy^l9mYToXMsm#F#`j) zAP6(or^HVL3bL1Y`ns~e;Nhufuu$hN$N=d&;_2cTB5^tQ{B@xw0|C|x9fBJZT{k9m zc69Ak_;zpizyI4SK8Ajtu-9_)ZeztK-)~r0mwxa&`1D)F+U@>diW#MzI6K{t-RRQQ zW$5STFY|~|Wyz9^<|P$Oj7y9sDW&a{QT^E@z_wwLYF1~!+L)D0CDYbKWxG17 z(7`+XE#Imx+bH3Mw=YX}nO@zOYh3A zl-NemXOmZ9NORw({OWII9t3G&o?KKl*~c+uckY^ILA${rNq+zU(d7bHN~H`uy~0=s zGRkGleIKoA6#&pN43+zMgRJaW7KZCJMw<;z=kr4*FBuC#i{p`O&WVV~=9~tutCe^W z0GfN(H?}Lz()|xdMC_mG=jT S^KJkD002ovP6b4+LSTZOqjp^Y delta 289 zcmbQkw2^6oWIZzj1A~Sxe=v|zNcITwWnidMV_;}#VPNm2{L!QQ^XIRB z`gHHhm$vKIkG^@+d-LYHCr?&CemwQgoz>QH{y@!)B|-Im!3+-1Zlr;DN#5=*jQ^Q* z?*TcS1s;*b3=G_YAk0{w5<>&pIuhljyJXU?LH?|?$Co-U3d5|@(`6gUlx z7JZyKqx1RZ1*bP}ShO-dIrX{2qoPfPg_}Pu_#nBnA~NDZjh(`Lc~9mU`VA@!Pq>vn hH!4Xvt*9|!VCZUMoN9XUNfppU22WQ%mvv4FO#qKKb`$^r diff --git a/src/main/resources/assets/gregtech/textures/gui/picture/tic_bolt_molding.png b/src/main/resources/assets/gregtech/textures/gui/picture/tic_bolt_molding.png index 7a3049a297846a0624c51be4b37294125db27a85..f2ec0bc144cc7295732fcde0a0a27fd5be47257b 100644 GIT binary patch delta 305 zcmV-10nYxa0>A>07=H)`0000V^Z#K0009R{L_t(I%VS`m2YC7F(|=rYEXW*94Go+M zk>#%6xWNcxGomYK?VgIF@#xXRaCW5RIR*v>28P(_x8Q~_AuEPyp3*y?;poxBaLr{! zMGTRW=NOE=ycxFayMx<_>o)KG@8l5k|K+Ps|6jiP^uM^G0e{Z^e|sjJjqDv3bb|~n zR2aJY`r!P6kO+olbNv|_OC~aW)_jgX5YfT2W2YEW@)8(c@q1v^j1dOtnw_038S2VA zP{hxlxP#jOSfIf)&tJ5j!6MWT#Y+TTfUX%CSXLkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j)!2Ka=y0_hJQX1;v&NmE1P%tXK9iiUNY_cr)z{l7ia$ss1v&TH?Q zRo2Qza~hlf|Nr0dSpF(d15-(mUoZnh+2pepKwdp#lDE4HU;bVLe;|*&#M9T6{RIyX zBcG^u<)I}&p*T+$#}JO|$q5cjTmoG;BW~Wf!EnN$kk{ASn9b-+bcpkERc1*yDKE!a z3T>Gc;Tak;1Xt}9IkSQ1>Q2_wmU*#KJV{I1j@@B0UdGre#w>ZvINh(;k|%{jTH1My b13QDr94Sd@LFag0pj8Z>u6{1-oD!M<1GZeo diff --git a/src/main/resources/assets/gregtech/textures/items/iconsets/HANDLE_ELECTRIC_SCREWDRIVER.png b/src/main/resources/assets/gregtech/textures/items/iconsets/HANDLE_ELECTRIC_SCREWDRIVER.png index 06265e54140fe909ea093c3ea3f081dc813ee92d..8233bfdc9b067036c903922b3f969d9ceed38488 100644 GIT binary patch delta 270 zcmV+p0rCF)0-gep8Gi-<001BJ|6u?C0Od(UK~#90?UJo-!%z%`Po_OV*oC1h*iTu? z@<2f=?p~@xL1Ezm0i6_f8AttiWq!!Xc$&wr+AxLiIlj^jzl=s{5w zT-+@n-a|Tph+wmMfpc!slUo4TzHa$&{|MO&G$_;p)C|XuBkH=2raX*DVz+yv^#)ai zh5$1~2#P$HT}2{-uIq4kKU^&yPnZ**RNLnc Uwm5&I00000Ne4wvM6N<$g0&QTfdBvi delta 364 zcmV-y0h9io0{jAy8Gi!+001a04^sdD03c&XQcVB=dL{q>fP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0D(|UR7L;)|KH!=LPA0zAtA}h$^QTTIyyQT85zRD!uIy| z=jZ3x*w`~OG7=IJySuyX?Csy(-O$g_!NI|@va%~HE3~z=cq0x2dYB zn3$N`+uY60&c46DudlD6p`ekGk;KKswY9aUr>K~jn2U;vo}QkMkC23fg#Z8loh#7? z00002bW%=J004HA%{Tx600Cl4M??UK1szBL000SaNLh0L01FWS01FWTe`H^g00007 zbV*G`2j~n80A(35b34e?0000-Nkl0B2|C z|4K?q#KrIb|NpUKD=Vx2l9H1Damm9l76AshCSzlx|3X4Scnv`nU|_&dtgWq$*8s-R cq)fR10L=}L1W%U$l>h($07*qoM6N<$f}&(J3;+NC delta 225 zcmeBX{Kz;#qMn7Bfq~)e-A6${N+H=J$d`ekN{xY`p@o6r7f`6-1p`B=0RzLU1O^7H z84L{K1#@-<+5jaK1AIbU|NsB*Eal|aXmR=K~#90?UOyKgFqC8KSL@zVHj{Du4i^O zvj e?XO;dPxSyZCZH@h;PP1j0000dAqwX{BQ3+vmeOgEbxddW?3-j?D)J#{A$lGM{!mK6D~|rt3Pp zw^#3N-t>k`O3jK*D(EH8$yX<<9rYCrZWKKcQEk3a{hi-vrIXmd6!}X)cQAOm`njxg HN@xNAhkIcp diff --git a/src/main/resources/assets/gregtech/textures/items/iconsets/HANDLE_SCREWDRIVER_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/iconsets/HANDLE_SCREWDRIVER_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Botania-Dragonstone/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Botania-Dragonstone/bolt.png index 1986d0e057fbcee6524b3ed644c30dd0e7077e44..4059c4f7d5d095fafe1800277aeb15e26b9b4d64 100644 GIT binary patch literal 2770 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 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Botania-Dragonstone/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Botania-Dragonstone/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*DQ-m|!*J;?3*-51l$e gnIU9r9svLV!YeL=BF8h}00000Nks-uM6N<$g4u>g!2kdN delta 365 zcmbQod4p?$gaivS0|Ud`yN`kx7?@vVIy(nsCMPp6SoChRc*tBog=@bSP+B3`BgmJ5 zp-PQ`p`nF=;TKS-;RORjsR0ASs{{rHs~HRo;stYd1=;{5v;urWT!HlF-8(n$-F@!L zmF@fYE?cwa`1!LZFP^{s^zoW4o6g<1cJb!*L#Iys|No!KwEjC#HDgJTUoeBivm0q3 zPLj8~3-7lriS=KBJoXY#Usv`QJUoniVwVag%K?Q{JY5_^IIbrrDDWB_k~qZ|z?N<0 zqp^tL)Poof;aRl|YA#EDGCWjcUT!Ep2k15i+Y;A^5}?1VlJg5Hi!#$QN*J7BECnM2 z19Jt(f`Xh>1<$->JspL_oE!zPqGC^lqSWHlqO#N!y?JSOG=U~5!%Rv^Elw`VEGWs$ p&tq^;%}XuHOjZbTcTxx_%1_J8NtIe|(Fat{;OXk;vd$@?2>^{kf>r@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*Lr_UWLm*IcZ)Rz1WdHzpoUt(B1AkzY zbRqx%0INwvK~#90<&V1x!axv3ZzQPyA|eV3f`4rxslq3u6^Q z%!Am8r<>uP;STU~XnqJeE7ctKk;z#(#W9?Buic=Jtds%~VY65T)jnvGDpI3`nNgM{ zmXqn5(|I5@TCSNwI39k;K*tN@tVrmQfaqQ;w>C(!i&*c$%vjInjk($esZTGq@7;ap(Szd`&+k0AfAh}mcb+`@|NnoL*%S?+ zPR5cTzhDN3XE)O7LA)eycNf7&TWxm%IqW5#zOL*qcz75j4U4T$TmcH1dAc};NL)@% zP~bE$TKH+^jL3kWYjQMd%EI_U?9{d9cXms+oDRm>~_Pc_*XGEXp^ zxX66&InV^#64!_lps%fx^9w4AGSf3k7@Q$2AXCA}z`$I=v7jI)RlzeaSx-kHF(*d> ztg2X{D784Xs4O)_Z(iCRO`u82Fq2YJi<65o3raHc^BCMy^HPg4lNEy8ofHC!^3yVN VQl*w#^Z}JKc)I$ztaD0e0szt-mo5MR diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Dreamwood/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Dreamwood/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingrock/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingrock/bolt.png index 8107f13b938a6bc5248b4f0a95a0851cc0da73a8..7129de0b6e3156d39640e8a48d0e034bfb1cacca 100644 GIT binary patch delta 176 zcmV;h08jsd0>J^08Gi-<001BJ|6u?C0EkIMK~#90V_+Bsv;h~+9{NwLS|)UX1N*oA z7nhP@xNz|_QHC&L6Fhlx|9@Uy0fzS<-Y{5Oxnfm=(*+C+3=HPxj*PFKKW7jV7GXGj zWbPU+(&f4Vt_rn ew~()S1ONbHjwx&c-T0#b0000Yd&~d-|Jwsix`CP*OM@RqD82Q956-<@`3Tb<~IEF}EPEJ@Lnc(u+*l_cL&JCM3F77NSC|cNA n@cF}{&JQ2C7j$w2oxjN7{D@)Jw6pL1Kt_4G`njxgN@xNA_CI7x diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingrock/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingrock/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*jD6q?S)_&==<3mU6A( zUoNmr$Ebbd6I6?x)+Cj{y}H93&0m<#23LNhILVP_w+7tVfLO5=6=j7u$zYq)x4W$k z_}QgIYe*Ti!mR=RX-7p~q9|{0#>fP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u09sH?R7C&)0PgVU>FDF&;o9Eb+Re|&=;_?n(#y!iz~kiE z($vS#&cx^F;nmmA#>vCu@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/bolt.png index c8cfa63b216e981c59b32612c725b7174b0b1a0c..85f3d73f364e45a9f56848a998200da2c3ee8fa2 100644 GIT binary patch delta 202 zcmV;*05$*E3bqN57$67+0000V^Z#K000Z!8LqkwWLqi}?a&Km7Y-Iodc$~2?;RAnQ zlyo8h004nWL_t(|oMT`Z1+)QP25SF_Rm+4fkf0~`pPiMJAwW-sC_@;r3A$@5{uktA zWe{LuVVH618dfzpUBJM=z_9b`ea83Se={&K{bR^5)57Z#tOmdgdH(e~!@qyO@P-Lq z=P@uaFa+w#|7YdoX5jt(onh|z`ve}<<1~aUjUxmA059JnkMZPtA^-pY07*qoM6N<$ Ef&}(ga{vGU delta 365 zcmdnSd4p?$gaivS0|Ud`yN`kx7?@vVIy(nsCMPp6SoChRc*tBog=@bSP+B3`BgmJ5 zp-PQ`p`nF=;TKS-;RORjsR0ASs{{rHs~HRo;stYd1=;{5v;urWT!FNgfm(u|T%f6T zfS!uGwqk^dT85ccmW4*3u6&w_N|>2evZ3Pt|NpI|)cAm^8B2ovf*Bm1-ADs*lDyqr zc)x8)tp5t+v6p!Iy0X9E;bG(xyHqe)4k)DJ>Eal|aXmRff!E-W#3{Z2wrndOjYSNn z9>j16&#Glmb6N6};h`GyazpVsK({g2mbgZg0R3f^oL^8`l$oAU!r%;JDHs_Tm@7CI z6y&5Tc;+SR=_n-TQLOadJ^+K}lwQ9)o*o kUTRThvO6eKA>_2Pgg&ebxsLQ0B7-Sx&QzG diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*Lr_UWLm*IcZ)Rz1WdHzpoUt(B1AkzY zbRqx%0K!Q`K~#90V_+C^AlF*^f02XHe;A*M6wO5rM*pAx{Lk>|(+9X13n`kvefz@j z=g&WeIT!9RlH`Io8=e2(zI|a}WMpR8aN!OkvK&DJ;%s#OfBgQRfsv7!VfxAIjOg-s zy-?&}^q=$RTZXrP*chgty^Wz6uU`Qn76$*nefz@jje(P4>%|*bH8U_UFkqD^axnUT z_w!E%*1z8w)*uBKQ7(Xm_V3^S7&czQuNkWWzkmN`c=PKI!!{x`j{*n)06qs!s7&OV Q#sB~S07*qoM6N<$g0mxhcmMzZ delta 394 zcmey)`HgFWq&PDJ1A~Sxe=q|B^NUPp=YY)QWCjL{-i;Oynd_%;?biZID3ouZLv(d>k*Yr2muC|o-)>jR&Fvu{|2r*Fd(o@N`*8Ttg|Jwz5^+27BB|(0{ z3=Yq3q=9)!-tI1fkG9(G0!p!$c>21szu@6vkTfi|K5+$PpQnpsh{WaO1O-k5qlKSl z&WH^7xh6-WrYwvv#7-oc{y0y-qY)`YZU&YK4@KlqHA@c;oiHpqVo&!y= zEpd$~0s7i1IlrK?C^J2yguxlY0x}hh3=GT_9199^QWZS&lJ#^H5_57Cz^aNBic*VH zi^@_{^ya1A(FB^L3^OSuwK%ybv!En1KaasZH7~U&Gg%?X-AN&!C_gPTCsk^>MITT( NgQu&X%Q~loCIIF9e1!l2 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/Livingwood/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/bolt.png index 0917982fa05c9cce67775b9af55e4121cb01c5ce..63a4a47d8a656dc31d350e0cb2ab33f0ac8d1314 100644 GIT binary patch delta 1348 zcmV-K1-ts93d{F#-++w)x>7vJ}v+jHMN9Q(eW?|+`}a|2ZWP5kje=6bB{ z-(N^hZzXD4!RT!{50ZHXy~{bdN#j_vW_^&OK`-NNZn9k%4k8TCq|?E%VJFBW!UGAz zV|6=Mt&!XPn~QREXNDmtb35Uyn!fR4o27JG)UGN#upY7u@n$bLL3;k zHVcmiy^P=Lm4EZ#e2tSnpTp3DjQ8N$D$gdw#AFJktzIY(R0Wuv2eCVeMH=|~JrW-D zRuBU-K*$O4+^^O>;6p)E4-D%Ic{tndB6k$&4r1uR-D5MtS*`&MC6XQ-uTmbU^3Ys7 z$e60>u?`AN0}^qF;7QY|oZW+C)xWhZ=7D#B0yRMZ4zPEj@<3H+@%h{@sF@z@29ZdD-!@zH;8h4*24E`(2RBJf zpeF+4$A1mv;UyA-tcRQj;v@uuUO-EOCz_N8szQr*LBfL$5SjqrE4Aps2?&%r0Z#;s zwo7{O#Z8hPbjx~h_-_vq;LsY0Gr71|bU&i0;h=zEn(%8zqI+2PIOF}sXMcQz13;4(;{MUO?=Of~rUXI&BBkK? zdh1gUoKf^qv%ZvoVNiZ0QVc;)i?KGWC{oa zVt-%uW6eFN0#NAz&$LJwd8tErpvpt@ z?lC?SV-Fq%F$16!5U*SD;4KIQ0faO;4^lDZfhr$Kd$6o51$N1J&

|APIlJ=m)V*^)9co1u{(PMK!bI(G2Wx<2M zcWI%8(?G@l$AixnD-Tq8NXmo3Mi&mFRW-9ulM59v7!lF^w)7yBZ9j(;?` ztnV*OYzwm}HVJs94L#7E&c*NiCJ@m88^E3Viwt8A4#wumgS{T*fhrGiWA2|a&U_xJ z$3d(OfR9P+H%@K#urK20Xq#7Jzj1dNVNU}?BZeLr#(fda);ekAf%zb}fb8*6d7vu5 zxT_@R-#kagi{Gvy%KczaQ0%q%QGaDV6=q+=&+&EUGU@(=^!5P7QZI1&qJ#(Ux0-rj zygs<^l(_0h12aCgK2Q~6JX9y)L3A}yeTuq%bbbwK$VyHO_$97Kja*1mC`1~R4CdOTcejaXUVgN zUZ<_&kzU(mr`7HhiQNu*DCVO=)zewyJ`DI$AU7NkG5cMqoeng_m|%|)ip=qP_2hdA zbPJJTg(OQPn2j%Dy>O&X4$1H}7Vkn)Vv8&rL{G0VXHNLik-$MD2PgQbwVQeyfDswq z`QxGk)b==T_tb%b{kGU>h!t#<%)&lvlscio0auMt$HjAZ95TW^Kiv0$oPl#LIK&xq zrC^%ai<3SP+^2q1Q`S|1iJ_h5EL-cE<#@bVhMH- zY#@jvNFi8Du##X4!6yBlHaQdke<~CNasnAaAi)zibPC^zSnwi4^QMi9Xb3XIEvu(O z`UfBOxXAF~OnNh)_1=*-6k&=8f_#HfZ|d+8CRUqHc~jek^ct>7uM2%-wIxDXh&M$h z6G1fWx5OsS$1vuA4-3iG*fkTm+zDqYJPFpZvGqGt+To5HGR?5la!^d0iZMmHH7>c0 z%r!u%06H&>N8zjh$AvFlSlu2}BwFI~T>Pb&9FhY+LFQ$8MZ8(EbjSd@Wt+e=JW+Y(nS4pnqFweu!++luhkLLayJ9`XJ&!fRcRm&_e8h~qt(m5Bsnpv2 z*C+@rXwgVUBck{Z3mVGnF0IOWb-O8xf1$lJRrURo^}@lFfd!?hUp|*7c3ih=Ov>{M zx!blica(9TXMU3xr`1IZW;ZNRwwkHMdo<>KS50a+W_X3%-!D^fE48!FYhT(6q!NWk zA5X)Jvp8IS*!##1y8^zmqBtlgPq8@IT)d({Yjs{4HeVbT=E#p%>Z+RUqeoktM;>@7 z)NC_#UXdW`UvEKu`Prt?2NlvOM^*2H0>6Ss&wLHFGdP{dZga7rYKvQ9}Tajej^xkh$kU{TtOW;~7)UiK$W?f&J S7T>8Sf&@#J1zrw_Iq*N-y>6KR diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/bolt_OVERLAY.png index 46f1b5dd517e1394c8c3a301de01ce4ef88988bf..82559bbcee8d5668e0049f165c5a81132bdc9eba 100644 GIT binary patch delta 103 zcmaE*{DOIcgaQW}0|SHn=l_We42&(A&dvdz&dv$}Mfqu&IjIZ`6>~NklrmahR9SEZ zq|DRBF{ENna)Jb_3DbA~zv}UyuO9yI&bx4_;$jAE1_mQe`RZ%g4AX&189ZJ6T-G@y GGywp^fFZg7 literal 4586 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 KMNUMnLSTZQHPw6o diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/MagnetohydrodynamicallyConstrainedStarMatter/toolHeadScrewdriver_OVERLAY.png index efd85f140baa014b69a2aa28d28438e3b5196982..39d9cfc1274b07bb761304da0a8bebe71f85efb9 100644 GIT binary patch delta 126 zcmbQI@}GHvgaQW}0|SHn=l_We42&(A&dvdz&dv$}Mfqu&IjIZ`6>~NklrjcgR9SEZ zsLagM#WAE}PI7`oQNz=Jt^akt>;F-YHf9Eb!|OtqNE<9N&5yO3Vq$Cn1aofwonLcS cS(t(0skPBL!K;iffF>|_y85}Sb4q9e0GC88Bme*a literal 4638 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 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/WhiteDwarfMatter/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/WhiteDwarfMatter/bolt.png index 62b7cfaa53be821d221971179e4efe8c914c093d..0828889f9b96b4d5f17a31881b0dce251eae5a57 100644 GIT binary patch delta 489 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 w?IHlonE{B`g25ov&}}Z2$lO diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/WhiteDwarfMatter/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/WhiteDwarfMatter/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*6g-B~2+!RXg%>I~m~T9YP44{oRfSGh@#AmSjLx>71kY{!%g&06_0uVvH!IJS!0q r)>@}ZPEl31)|gUSmzdf5_yg>6_!nLY?ul&x0000dx@v7EBgx`9!5T~O9hkVfI=3Y zE{-7*my;6~ND4R_%#;9vmK@g$Aq6IzKOUHIh6e=pKV5Ub#yRxxi?hw^R=czMx^z_a bu`yŒ&I&bxO&Ll`_={an^LB{Ts5N~}BA diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/bedrockium/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/bedrockium/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*)~k0rac-@_7z08G z7k58_g%BU`R|yc2a?aqKo8aw&RqS^yPe4SHQUd3E2`^=>B{gFVF~(>&J0(CwQc6Ke q33~5a=jji;_fSfK7~@&&Kh_gRB1^AA3N6e40000OUcWIY2ASj||l7f2~2dj$D1FjT2AFf_Cdx@v7EBgx`9tKInV(SxEfI?B8 zE{-7*my;6|I3=Ww4K^rzJiPyZLPCN|*rfkopIb3A3k$`60#eMzJ@&CL|9G;owTN|8 zwRFAIxAarGE&lE}SF(|zfq{XK`HrvBY6s370D_v|BAIpy3=BUXiR4!3wJZl(!{F)a K=d#Wzp$PzgQ%JG^ diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/bedrockium/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/bedrockium/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/bolt.png index 22e8e6314b0a67ff19570deedbf23002113c6c81..de1762e3954cb596be64c73adf066c2e51f97f5e 100644 GIT binary patch delta 1668 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 GGywn*=5GgPnhj%uTASh z12v_Xf;UFUm^>K-g{AvLg}lkyw9Rj}7h9xl(WHoM9YWhQX$q<$5EID;@|Gz|W(0WM z$RZPr)3kQm*QCr=dw3v0PuVEkeHY8@l_5OJn(iCXRC*6a}(aX#)GncZN7)1B+qA{ zElNne8)Nj~Q-8;IF7b+rP#-GGT#^>}cL5r4UJB79$A^x(Up2=Vq>Sgb(s z$9;?*90-%DNVv(M;jM%o55yT1mK98&ta?zv2?)E$>)fi>gY6{dKg0r=R>#V2;Bj{o z*V+Wv_M4H+zQ^Xl0bi6pk~2^>2~#On4_=6qyOT%bCREcX2|Y`0rwNu86M|tz4|WM*(o_kYS;Lqv59ApX3JRvCs~%Kv0(%AW zwmEgK7j}6_JfDY(`qicMY&A}q_9z4YE!4u@}+=TjO6P^q* zdVlaWAxw%Yq28?FB|RQwc>~N!LmK*a(C1E zTdZ*Ga3Gn$KiJj_r^Gb1bpacB1CC8F zt`~+!hRM9*LGT71tobcO9uHA=ZWP*r34h;V_28%wrVmsJ1+#*o#H;Kc%*r!ZC@2`O zdQizZ6cEU}N2dn|{T{j?=AmBF;X$|iK{9eyG`So|&N6xs^&O=KLk(&sHH>}6gOVR% zv^P#?&z!PEF|qRVySo7<_GcK81ejm*tpiB;*t&0;%P!x6Ab)D^iLeuU)b&U&X{!1ZnAQ1u(@_3m1Onc zkdHE#WJpUIV(&0}@Eq}5_rg}s6&06ES`;ZhHARC1&$I7O93B}VV|)9`{NO$|4~|Ac zwBEfHCd+N;3qHf>!5sogntuwd$&8^x6VQb)uic2PaR;2jk6b%jx z==7ka9ip5=kKf1U!Pg@p+UVW|lcf!P!4RVdUld4MP@&yq#?Y&JJb##zp{NCnk5xUW z;0S?x$mw7s_%D60p*?h!?pr@SnpM*C=WtZWbN?{<^b#KEz_g>3R9n+M;B`pD2=z?IrbB;ud;pyWr0 z$9w7hQ)f_ENaAlV7H`rwd%ij={W?6TH@4%Pn8Q;&jPrv~QIezpjF_IIsrVEf8`QBsab$Re+KpQ+#e1yolv> z>gpJS2R_;T}?@ zi!d)5k$6SV{SRhNqo6Eedc5?>&eeQw6MqmMqz=6v_&t6)mp`x5gNHu3UmEY=Fw1D^hNKG(%kftu&1l~}Ki2*(LM=}~$Jb03Ae(-cC zLU-9)U@@r(_Wg*_gKvgO%}FpXX-K@T$Aj4!6ch#1Z&t5wEI0oH?CT#>rESfM01E&B M07*qoM6N<$g5kk4{{R30 delta 2806 zcmVEBYyxOV@Og>004R>004l5008;`004mK004C`008P>0026e000+o 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 IM6N<$f@?2dHUIzs diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/eternity/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/exohalkonite/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/exohalkonite/bolt.png index 6c0075bf7c58c96812d8aa6e2982120d77742e8b..f62242c2af736952d77a3b0a9771c3e40f2a8b98 100644 GIT binary patch delta 1808 zcmV+r2k-d22b2zw8Gi-<001zn@gx8M2HQzQK~#90?VVj{R7VuY&&`L~B;F(@cG)Bf ziY8R6$hJ|trNvMr)U?vNw2S7!O7l=Ggy4e>7Sci$X@nq4=!*?lgvJsv4?<|kzSK$+ zM1>k^Q6Uz^*tLo2x*xguFqu9?C3JW1y}2{y-r4+rkI6FJ*?;W$<;?8NIYi*aP~6hM z%)U13|36Th{A^!X$`Q|>J$w=D&TmML)%UNRR9o&GkmabSq`5MRyNi$Rn6h^ zfvW{R081MoK7a6@=Jdh4ksMP`@?w3UHu)Ld9%6dafe%0?!{>wM0ArOd+WnomL6UtC z>{d!g;ptk{QK}v>+7fp;C_mVC?W%Pj)V2GWHZ#lT z15bkwJ^(hb5FaF=Hu)J1j_LkGolnZ(sB8DLZCNGM5r3XA44}pF0atzi9{`Er_rZvH zAEe9=yuV+~wEUn}^-$YT1U>+=vHZ&qGr|s%TkaoTBX2MPFiKzAU zf;b;s66AxU596e@p0V~MHH~k>2fzlL;e+f%8TBU;ndF1c`*FJSHGBZ1!Wrv@(cy?w z)(ibk$bS!3HrB!izy{!hd4oLlf!=hIrZAsaM~_lBaF~3ogz}G?JEN5n_yE`gpAVV? zoIVJ4Klgz{?k{lpAlMBb0GU~0`9a!nj-9-$jLsC1wpPplo~4T$l00iwHn18+Bm=bTOk9iKi$GG+n#Q1=f((DSw z^!4qOctd^c_^Hnrd;lawh!3~}NFE;;?kDP)dwlVbWLl3#j+mLlZi6x=M#nQA8`4gVmOzoSLDM7Kt}j|FgV7PZ#m8@uW1di z@_+0&{i&5Wzz5@1vwS|NygN&qvWwvZAR`O$K~gNZS^{ixW1;o>i4$$zO63iWzn-eF z{R2K91iPR6z|3^g0v`Z-;I5CvDqVc_RAb{2s-Dbq$oGv#J}^A_sC?sR<>N$&NtgAL zlJEhr2m5_cIudt^4@~3-rs^k7DNp!(fPZ=@z#di|c*D96JPke;ef4GQJ_vUWNah1m z>jf10W;t!5r`b08a5iZXxG-!GFDf zJ1ZF^JHJ`lQIFn>Fpl~TcV>?eCFcm-&_`nydm9q<8=4gUIx z55{yGn9L_-n0iBftn802x)PqUe&1P$4@PHHyZX|7_XXjfDdrr z8Q24SFb8}90DSNa_yB;6@qy6$&hP00jBK za{tDOHbMQ~h53N5e`By4{eK&Q%q(g@*OWM~Ka*ZNO2c|6>tFkrKAJ{Q zHv%9iKj7-uR@d%lgW)OCvWo29KS2LRu*9+72hQr(rmfY8&h4@8gNor?I{t4td;nyG z-v@(ZOfP`uvs8TW{@qpZ0gw@{{*7vrpG{Y1>juz#Qio}0J@efsK7SvWJ)fwH+T>@{ zKcuTSb-*;`}FXz)=1`n3Vsu)km1cr;9IZIrLRvQQsz^=r#HR?pm1F7$5%GGf0E zq6Hb{1L~}2756xOpdP|~XJ7{lsgIQO*;bqUOsOiNm$WA|)M9*AKW#tP4D!LVey&;f z!iMEx(}H>^z#h2kCx4FYT+P?NvHTVzw>HXmK2eMhnge2duv(qs+dn|PG++;0>xGKF zTiL|s8Teox@BxsRh4>%|waL%uhJf=28*+>3w~0xL9@k%VEP@X%3G%`9NRi=m(t`B@ yum|q_M6UcG*3qMs-(plfndg-J06vg_{{W|hZ8?@CJZ}I100{s|MNUMnLSTX=sD3~I delta 945 zcmV;i15W&u4!j4D8Gi!+000Md0TuuN03c&XQcVB=dL{q>fP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0MAfNR7C&)01tOs4Q)~fq*o(}ULbu|NrGh#dR`52Hz9CD z4R2Ne+TA^hP<)SK6k|XLcUCc+UhTx`vu+ z41QFCf@lE4-3fzUG-E;{eqK3%N&v>)2AEM8bxaM2TN8grNt$N?m0AUySWk>?1*l&E zh*BDUQXF798dxSf)J2J4GI6euE10}lQ&Z|m3x?s$#haEtZmyOe}4zXZL+6S-XVJ`RazC+psG$k zQ(0e#&3f!oj|O-&6??S6gMJ1*f*MpQ@d(>{;9(yhVGXL3cmze7Y@ang4#=JeJUXtU z$~?N%BVu_#l@^a4O%}_>$6+=-jszYRkw-S>54%Tn%<$-=#|hbU>N;v#9%Y%wnNpAV zoZ)d{AAcVW*HJg>0i#NZM`-Y1+`p*x5RQ*Qo;^AYkJx*t^ay(`n(UI!ALtQY(ffTp z9*|7rp=JJP8ax>1OO8BB*PQtSs)kBDx;Hc#XFeT)$E^~Nv3)(+Fn<_4U{%d^RMrN+ zbekrdlqKV1GKEzW*HKgQC^0+?<71l5^`JX?)PJdYz&E>&D)P98`C}$JUuJXoX4g@L z9uE?aN2u~1dGUCn=@(U6_57mO;}tw0y}<*jyoXMYw|BDV13XOU3sh@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*?3HnsPTtv0o4kJ>Bt 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 literal 11749 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 GGywn* zUu;`f8NffA#7*kht>d)$=aQ+j)Dj}C)wCg1lntp+MX46X9v0}vqOB>K1}T1+6{(xF z36(_SWe->igaT`+2CAk(MJK2>K}K0vqN>qKD+Ws=+L$zMQ@8$ili0o=59NAE?zMgH zIdSgpz2EPxcF(;h(LKL>=Y02^55RN;2Rbo0(22^woq8I(&K}0J!v%|TiNa?N*2eY2 zVa%m&KxRW4a^HWe(2nT>+mCjmd?x{MZ!6p#{Pl`9Wq*X;(GWJ*%9@SK_Mm<^jA_?Z z*pD@E<~eoak{9rgbfIT5195i~+fvzwM!?vHbtm;Jz2WikrgU z;%iKp1^-Bwm=AW&IpL_cM?#pD=3z??nS7w?f#=F3IAU3*#)N4hADG4m zd&dNQkgB~7Uw~See3sJ(HUF$;YD}1xHTMDY!=gN)f%!U^dhye!o#_IFfyL{CKCjno zJ}7is#0Ou?R>L2@TYmkZs1H~g6Q)Jj2OZNcejj9|dDw!^6+U3>WtHa+==kkPno^9hVQ3C-kx7 zPwDqTV6X?%vWL$H%EDYRACyE{2Hkz4x9Hfgq7Qt>`p5^?CotH9{z!=52Yp^I;vcQ zZHU)z;`hPLtu37E2Zs1yAIjM7ZV_8QVD*8D&-Z_w)(@;tV6cZj->CS2Yk#A#52|M7 zV17#jpAXvdX}G<)&1^nsu9Xe)0lj}<3)aL3(K=K5Ant87(|kek!Me;BRFDsBfn9x& zPe^9;fg}U@fT$e8K4|y21$;2Y=>sKk$L#~x)he_3pm#JR?gM&XnJ9(9@d2+7l!3+V z14#z6tsiusI&!buBI^fV`C$+FfGCPdQR;M4;FejmJ(zXgv>rz__J%`cqi zLWuJz@O-pT_Q-VAmvtw@xQJ26C1k+wah!+J@b?MW@UI1?#)N4x&Ik3wYv2Q}^O2VO zKf^7+7fX#yNEw#I~MSrZ>{?RO3ibfV+UKC$(Kd}c{CDw%vR-LVz2 zi>NuInSBub`ClsI1J&uq0QaUjmveFOUfihvytLpzC&n7KFrTNY>On5K0N&Y8VCszz z$OqP??bQP-e4zOx7Nh&r5tQO7I3Hgue8w!4;6Nw-c{UD92?;VU>pUMx$OngJu%r)4 z;*W%|`ouwe{7;hxtS3%)Y~?#YF*wkPvrPebFqwq+U;YiB4}7zi;eGOfl@aoR^IQn8 z&8NWokyQAM`C(E1VhPo2fa@jg&pAUM#8@8oa6-cOQz^;mMr1!#P4 zntWhwgzB|9&xKIRX8GzjDu1yu8zjKzb;bwE`T@5Ol=TB{ADsB`1N}Z|d-VW1Vrj^w z7Gb8uz|ypG_o*Xz#+iXyOhG0h;DgL7tQCWE(j7dp; zA1KQnTt4u;5kmj?WLX~+jSo_;6vVbPm29ke0rCOCf{+gm%^?1_ZA8Ze_@cY2H`GOQr!FkN^&leWrX^Ibs zq6qmwN#t|S7qk-j|uJ^ zl!3*aU)bSqgjiE6zYnwP&JpUl@%pTg$WNn0f zaHFw>Z@%DNkq|fa=DCK-mvRNvY9*tOn!TRv^ZdhhF2zme*_ z+Y`I`AfJ%T=mX>GwfTDE&M)kU9BP?=z)A-3ry?-_oXbv>o@WH z;I4b?I{QHA{lr2US`i=IKlC*DfGCP_KJZ6E2-l+c*zu_cM?#pD z<{_~y!Sp9y(+7@Nmf{0z;~(h~d;g$+sg>{j10|7fG9T0rhY>CqwSKU3&dK!tK~W#D z)^Akxz;k619I-4@W5Tqoxeu5h7NuU>qdpnVJg2ihlQOWl&Pyu{tj!$frJ2+RRL_-Q zLC6QLvxm`jwTjONN(J)O^&6Rb;2-Hi@1+TF%*!hpGhLu}G*s{bcYLt>#An$D>O22` u{eU~aKfP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0PRprR7C&)03>)x2DN4xc~2c-I}(_74vby|lT#vlPatbS z4|!Z*!Erl;O$VM-PMus6n@bONSuCq|4tZS@m2o48T>#DHBY%rv4tro6hgb=LT}*~) zft6;5hipB^b}*h@Oqp3fdQnG+TM>n20OI8gd{Zl(bpXoc0IgCDfK@S~U<{*nH_*=z zh-o&<%0&PE34~xCZbn9wV*uUdPo-}@gIEQkTR?_d0=jVllvx3%WgBEb9A7#gflLa6 zTx8_`QMu3ykbh+xb3_4`T%yUw3V>P1_wx;*aSD=YPqoXQ#K8d7WdNyA1dvf1cVz$n z|LOXAJOBUy0d!JMQvg8b*k%9#00Cl4M?_8;VR7F8000McNliru=nM=188YfJnQj08 z1A9qCK~!ko?b~g0(m)Ug@TM390|pvVgrc-4DrzJ|#D7$z_)wqy{$Iz}|NqWp=O(n- zAiTTbro;WZ*}L4{9UVD+JP+H)wOi2k>$joZXx@Q#(89Lgz6ff@@S(+zo17TJRaNj7}NOb=y7)L<`HTh6I&h) zG2iCL$Mt(WvE@PW@pSr(Jf15aFPuDP#yxm^vkBz`@))s4ub{_yxgPzfm`8W0%|{jU z@Yw^`TeHba#Up?HCOvRHCOlqQj}OhGXnefJAAeAGd=&NI_m?TJ@5$rz;87`$2Danj zn|zNsdtiTG@rVbUKgeTVvIot#v6fGpJ=WxrCLihd z^7znWBRnp1JyQ1Aaz3@?vC1euM7a8G3xHxX0!@kADyI!OlH0;~rvsm`{aA!tta$FG;oHgVz(@ z@|r!2%`dJV4dHP?{qsFG!sCZ2kB0D|@omv#&GQSdS7^Rvk1O%K{50*+6&_sAW)EE7 zN2*5$|NesaKa6?M{1R>R>-(CA*bgF)NO<7)rF+o(`)t7;_ zJ}>;f&mMvBzxSD#<6}IX!YB&&pQc>t9YQ7Hou7Y zV2?V-2Y!FkpHNwU_)|9z?L4lyPiXBvkmBLh`Mv_~7iss)G!JX_Z1yR~GabS@-w{ri7mfP*FzS00000NkvXXu0mjfF{yU0 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotexohalkonite/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotexohalkonite/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotprotohalkonite/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/hotprotohalkonite/bolt.png index 75f19ac5026c3fa4ceb47183d9ef6c75156acecc..4f25d09cc93a8666acc6fabde3fa05f91ff95184 100644 GIT binary patch delta 468 zcmV;_0W1F61>*yd8Gi-<001BJ|6u?C0jfzvK~#90#nQh|Q&AYk@$WhJUc9X>p3q)` zF%n21F>1m>QW8soqlN?ryE^$t=>NjR;8G1RFgV(jfdB~;i9r&}57Xdny#%nf_TJZp zmd5@VTzsZ?IPWLtoILQqqgum?9P~Z(N=*+2zKU=JRJowWxqpsmDnK+=Vi=n{54To@XfTv1z0lGD~pi^KxVwn%0-hW9ll8rO$#c=HeFa}gb z`U4u217>+=ePjN?6E;5=*5c@F0@5k4Js=6lUq~B>Kz>8;dUokW+5gU@H%alJkoO=v z3TXqj4K#qW4u7N#{DP6r2y77(TnGP3E))IZSP}hzu=1^g$vhZ9})z>HH!2p;{`@ry67+eXwB{2@(R) zBnHW^M2n%8_Fl4fq+Rw|k|p5EX31A2Kc=RD`(eV=pAy{ydCu+XSb z##op>O>3eWA;b;|70%TJUkOX7tn;II!xLz+k&-0pcUu+*tz;-(@4tM~f z^#)qe(HP(dwtyCFy%MTm+rV@9o3TYSvbBK7fxz4qU;&`cq?y!i0KWqW$tIlcLQcZ| zY0K-ZD*Vt?<^5DL++H%!_IP2eY~+n~u%p>OUNh16(9`2yo~fO3*N(bgFMTg|Hx&23 zpm8w(!ffuhF5b@f^*I%h6InS!9|!Vhew4~C&w20qe0wa*zfywa@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*K~#90?VQVN6Hye#Z^TfkR_g=ty%1c8 zxNzZLAh>WVh)b7>OLxVcBJOnM10*0tu~fxcDYR;>1Y2rr+l0oZNi&nlG&9L$GD%ye zO`F2!GSz6P=eA@t=eHd0`8YG2^Kob9-YW#NIVkt%vEH#;et*62{_YBz4z>vMS!UfL zRrEb^q4lhy`1U(ptmXW%%f8gI zCUze82`74!emk+$4SF!ckVys#bU*m~(8abxt-|Os>E#>jEMhiTLVh4d7x^@3AeYV{ z7w)I~!56I;r+=FLV%4_AzLS?~j{PH($pFf3C-Sj-^xKJRx7iPvI-tFD=zcKtd=AZr zcMG#$!VgCJEM!71a$_o8WHh8>&Mv@;jnhRY)UPPm_6p1cW;wa=bWRqhO zQ+*|f<;4kDN;h3(M(tofVCsNAl#^)Xpow|C3}Z^d4`NeEIF19ukPuN61xrgy@*VTn1ynp(8uM7X9Ovu3uL&h7m@0~96PA24Fh9TpP+V@TudM6WdFvF1XM(um23%!#G zIhbL{@b?3+WQ^ z!}}X6@cu@o(c$wC)?~uxA21D0;?@G)4|>`F|6qX~!g!ormq?Ysg*!f9XrU}hyY`EP z_AtE%+PiINkvNJ20lFW&ntgfP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0Yp$tR7C&)0N#-DyNLSbssHDt=(?Qs;kNwnvevM@>F3?y z@5!#Z;;8TGt?tv8(c+H$^_cG1eA?o3;GXZnm-Xnl|K_ph!+)#r(ai(;koeZzU-j-^|hD@$B#F z+RxD6%J1yY>f5~7-?94jzUrl>S>74M-hR@@B{q%+K)oa@0V1NJr|67}1IRF3v0d!JMQvg8b z*k%9#00Cl4M?`B7s_}1^4XkSG}0ii<$0mIO>)r%*`!M zNNZa=q<^E+1?lSUfw+77ApP|#VPgg`dj`D_-_S5*WONKNKH-N1CZ`}l(^a)Hjd^Bv z4l*BFfGjSBA6t|e=a7rbE6BC!s#>|he0z6q>8i6I)?qb8NXc|ntvuA!wWc+ut7^rjuCgDp z9}Te|^8QdG-xoD<{!k<5Q#EpbQ6u+THS+&MO&N3L@d@($@(Ou-|A2gceM5eJtB^nY a9{L}i$wrV8Ez%bN0000@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*NsFQf*8RY}?-F~rpL zl3eaCm%H2DyWQJAH(wt@L+Krtoeh|-na|tJ?ssl)x!-4(*?*Y@Vh4ABK=$h7dvjDTa+!ne69_c6C3Xt$2jvN(A9q{Bi!Z(4GggDSAuHUv|2R#1=Ax)sehj{mW zapU&39q_jj!3z9N2jZ32o5F3mbcM`JOtCb4itYAm+3U9^nG_{#axUQUJ9f1F=BABD zeKMelqF|+y_64=tn9h^)(=#lL{;2MQ zp&FTJl+kHl#v^xaQ}e-qPfBSZRhz^!w?C@xgDeaboPSKHuqL+f@GC&D$CeDKa5MIZb+Lijbvq=eY@hN2I~Gen~XH`ze)`Ii)ZFmKbR4J#R7<5TUg z(oHOy7;6Ul_X&46QuTH7^VAdyvV?tI9+;jK6YCgCaknjwotO6ds^Zp1v z2u$SdaA8es;o0-#>C+K?Ff>ef4rHaY+!o#k>3<2rwc(+G;qFbXo@P+uB|xK#P-@ z^Gqz*i=o1r*utSZZt03x z(tit6?XS{p!?|4UKlZ_@!UahdqlN(>T{AeI%R~!n;sVoS7O0Fbp-5!S>7&d!q4(-D1Onsi+kmFs*E zK1{M&EXK8@W9EZZg#lnyVNG11Ws#LiM1LQUta=`bUI?di-E5!g~Bbb917fFDMdIAL!=`nlR}32YUWNEA;$>^@*OJsOKlPLeEcJpXl`q zdi_Ex^!kPMiC*8R*EhC8uWwwR==UG!_aC%EzyDx;!tS@o?(T>_*!>~l8Gun-Zhs5! zgWit`w*({th%W{deelUwgjWGNB*dqmDf(bwkdS3ygAdW$r|5$p@&p&bO?8N#_ta|R zmo#~0WQ^sXkEstnd|oC`S_?e0a9n*n@qkAL2?GiHcf5V;lPex}>c)ndlmX#P;9!Wb cW{H0R0i#pCRS$@i00000NkvXXt^-0~g0O)`IsgCw delta 1176 zcmWksc}$ZB9Q_<~=t96FbJ0P-EV{V`b=gz`in`G`++?75WFCl{2P{(*5OvUxOQ+6^ zawv`o1yS*Uah1brTM9B5NGY`zw6v7NQVK2ozLvK1dh7mrdB69P_mbbspI+t>9wvz3n*{NG!YyvpMuK>2U*vbu z47UO2GjaATF6SaK87Ge7W;rr4keq<~O~}8FizFWR;NAn=WT8usW}dCGRHDSlD}}zZ zibJD`H0oNkHGkPrXrqb@ZKRV*r$xBT!o`ayWFs>hDM_fP0gHvKbTqZ$_8k=bfzEz3 zG&=6GF2&2(DIB0nO+^E-2$>lZ|)J7U( zV^FEwnO22j+FfO83I>Bwr<)uaLVPmf<8eM4KOMvVJ-BiMXU^c*5&ZcGS(lKKfQPLp zEW*_cJe|OUYFBCAGbxl}*|dNxzB7&c#>s|B_U|_Q<}h5LpPqCXPR;z=QhztoJ+L`R zJ0o@xThs%`{wGJi-4@2&+`Ki>O+1srcQ8CPUS7n~&k{pArEd9Ac-YqHeQmk{%iix# z`*u*DhB1~0ep2@$GVWBDQW6mtAD0(7RK43KIaI`{;JjCK$3<2#nM(g4i?u{Qam#Mg zQF6O8*fMCJJ+PHk5EyKd{UVQ5_=Uu7O7l3^fAXt=6TOGdu_@-jGpX15rl6KN-al;L zzoomj?w*fdV@8herg!`|pI#Jt^w(vL^(pCoy+K0J>f^C{H>7y0hFAUUe@My6srH}p zUoejy;{Ud1O!GW4hMPKY*Yt1N3$&A!a2Xs<`oH4Nrl!IIe?`6BN~ zTZAl>?mp3D_enU&s9Ltn)$81l;@@Qyemw2-^(=pF*KAgl zsN&igGPb}TSnj}K{xxyTwhk3_CH!2x?SqY<+x=WrqIXHmzU;yqq)@Qem5}~&oo;or a_rc>`3*(NMTGzS1NrW>Z!v6m9aOQuST=9GW diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/infinity/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/infinity/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/magmatter/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/magmatter/bolt.png index ee3c68d8e070638881a7386c5893d86f7f6dda5f..2e4a0a0818716b77db3f4800290072ee88feba2d 100644 GIT binary patch delta 877 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 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/magmatter/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/magmatter/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/protohalkonite/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/protohalkonite/bolt.png index d6375b80e55392db85159c48c4c7c10b8515895c..1e4812c68ab46c279d364e9984d5ed1ec95c12d8 100644 GIT binary patch delta 176 zcmZo-I>Hfk~D?|IsgCvKVswwG>n0BE$l4#{9#e& ihmYI~Iyr*QUu1B8#4u~x+4p`RqdZ;xT-G@yGywp{jZKFD diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/protohalkonite/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/protohalkonite/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*5UZkj5knBsjb+e?g&5RK(dML`cl5n%c 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 GGywn*-~H_U#~P7PCb!Cy^VP_eJjQkK* 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 P*!WPEwicDfP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u0d7!CR7C&)0EI?oF%>^b9ZbQ?k~|kZ#LmJj5;!LjGba!- z8WA!p5;qqQEEEkV@%`^?Ia4_mJ0=h@NE=H)7(*}>J|__}lYe|*X(3uc8AGYDa?sk0 zIu<<^4=fW6Clw7S84)oA3?VxfJxLr(y2E{vdtYE4Qg$U}T^&#{6+TrQPbd*HG8I2| zJzE$LENM1TlxJv$a#u+kOoUurP8vvrMP`F4JTn9QghG;i)(^zRi&+O|NsBdbGeoP0004WQchCeT; zX^RkEjepXJeMD2MZDK)E@PY3rQbAkmThTw?pXYnex!*Hqx4pBQ@Y|eCXy?;;-8*yd zMv>~@R4nCF)2HS0>F0zTC#OMvp2#l|7=$Qjy4-8PRn135Y8)qgjBnb`yIApT*EM^-}~I(;2^PRg}< zxp+AC(FFaPujJyx;-@(t5KqrLJhb+5As>(VSHto^`$#W>e*SneOYOrSKNpb4VptwE zh#y&9$0JUbgN-jhqM2ojh{+?A@&kA!}7rO zt)2(QPbCkqm#ArLz3=LOMe0NIiJu40w|{}x`@o~6&97;`d~0oe8>{1o-0#U-uUlK+ zvi)SX-!rLC$GkoT|8RNWeyQJIvO3nMw(Ae(AAG+QcoF@vpBc>su0L|tW6XbWeG(Hn zw0)@ib4+&ncc6cYGQ`isdi==QuOt0^^rt8_mS56*`(v(*@#CtOPw0H>?2obiLVvWM z2F6eMyp`bk&2KN(d9eNEYuEkzA#8n*{kyXBaQgY_4fsCzi}CuD@^Jh`>VI>Y^ygAC zFV)8SAVTNP{w*g+Sl#QTk;nOY#*y@QeNKx|L?vnjU?{GOD1gO7w9Cm#zrOC+Bt`6MWhPa%HvHzkkZ zuH^CXzU1-nGpRrF>F-J&y-mqur2{;c1M>j;=(nZ63fd@D#VX1vOepf+*yLpFTwvO^;^Yyq=WtvwjR^=qnvtd`3CvE zfB)w;+QXOS>d)OI^T=8r=709ba`r3Z>k}SAZd8m%!TZT-9&^TdsP_XaW*=IAq5d&u zJdWEw0?&^fI}g%tar!S6=fTduxcw;WJT8#u`Od#s=b@eVzYtNG z=<~?H1NF_QzWI18p#F>B1m%$d4?d5cj|a{pj~0#dpyxM;oDv>j4mkA9KQkAC&?iNJnNoCm~H)Hfsk(t`P_ z-+q_*>5n7%_eVZY4$(gT49bJAUohYL_uCKl{{lX8f9&8;{(t?~_Cf!^@dJ5a{l)g% z|0eZHt1aWf8swM9^=j>(vh$TJ-{SojrQ2Vp{T4qDdY?hrcsTc0=DgpbV*Li~eHXOf zV4jCRpHLoYxq0M2udlQZ^YQc_ul{-O|F9lUpDE)9z274B_bc)K;OfsyVSjVH=Erz{ zbG&%upQpp~>VLNKOYuDZ6>{dB-?z0tRy2=i;vCtp?@C=@Mxm^U#WQD`#$vVLy`KOZ~FOI zuRo?5em?wtD3f|j#lzZppwK)jZy&gSq_hv?@s!DY|7WOb=YjIgCzst{)bq(&9&n#F zo}aQmzh3P6mft^Cvh{vLyS}Yfy*@c#SuhW>Ua=le_2-TKGFz{h=MmapCOm*g*m@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/bolt.png index 42301e01a007acefc7e54da7b6b3fa39f9f6fc52..9c88c6e3a30e424eb1aa0ac30d1736586230c9ae 100644 GIT binary patch delta 163 zcmV;U09^m!1*8O!7$67+0000V^Z#K000D$)LqkwWLqi}?a&Km7Y-Iodc$~2?bpdym z!+q2M003J_L_t(|oMT`Z1+)R_>9zlfRm+4fkeX8cpM{x)XhRsW38to0|7T%gVfgp| zAH&R<%~;jobO8ec1HeD008a!B|82O R;cx%|002ovPDHLkV1kP4L>K@7 delta 354 zcmZ3&@{o0cgaivS0|Ud`yN`kx7#M3Zot* z6q2m>ba4#fxSpJ#z-w?w;uKQ=+hpZHCzo0L48FXK%F#P*j{;Rmm$*ih03B_WoL^8` zl$oAU!VplJl#`jP;F6!4n3=b2qG2>pnG#G{N@{U(QD#9&W_})nyQgn}LQ-jFPKj=2 zo5WeC RbOy>Wc)I$ztaD0e0sz-~Y?1%~ diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*Qz@c^t@LFY)wsWq-lL!ysw&%4lXD zP)M=f)5S4_<9c$!0Y;XECX0=xD5f|B9AMO1(4=-?!664728PMA7~h9Zd@cr5EnVUo zQ37o8nRyDuLGDgI>5jq-ZVU{fFy*<4d8KKI$t9&lsYPJ*KJzA=0-DDMSCF5Q Yn!^Cn8=c_k43uH;boFyt=akR{0RDz^_y7O^ diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/CUSTOM/universium/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DIAMOND/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/DULL/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/EMERALD/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/bolt_OVERLAY.png index 405c6c75fa69304a09aa4b57005c4e5cf40efb3e..9b93e46cff378eaf93da43a328001f32ed59b574 100644 GIT binary patch delta 132 zcmV-~0DJ%70hIxe7<~u^0000V^Z#K0003M`L_t(|oMZg||33pIfQcgA!`XmW2Z#*`Tw3(pOI)o{{R1vi65{2fA{WPhW{`3|HmqigmFtgUj6^wyLSW)!D~7(F2QdA m5iTKY0Mrm%a*U&SfdK$RYyxncWO9%I0000Lkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j&81^9%x{{R2~-Me>p@813Ya{vFwtAX6ri{{=3$}*P(`2_>%Uu8$` z0V&2LZ+91l4pvzYAcwQSBeIx*fm;xSJsIm$;wJ({*-JcqUD;po@G$a;T`HI?2NaU@ xba4#fxSpJ#z-w?=qK_?rt=lNj$z>KlLqRIz$`>&#FM)~}JYD@<);T3K0RZ-=LAn3{ diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/toolHeadScrewdriver.png index 4ec2f75ef3de243fae862f1587612a2143550315..141b62f5b138ae24f09396aaa542322e6609be1f 100644 GIT binary patch delta 97 zcmX@ZSTaE}nvH>hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ENRICHED/toolHeadScrewdriver_OVERLAY.png index 02d3a495d96a4fa01d189b4cc6893e4c7f1c8e32..dce77e23166203bb3f82e424a6935e38e913d154 100644 GIT binary patch delta 156 zcmV;N0Av5^0jvR#7=H)`0000V^Z#K00047IL_t(|oYm8<4S+BZK;a&9upyRZn1M-X zf?xm~4T@?M57$)m4~n75nM=NxGZjG9yrxRO31Br??aqD_z-soh71>5_2}N@q6UG?D z(&O)|a8V$Ivw<8=1{|KdD2@h7aWL=%hc8$MN-?11e}Ccgz!eQvYnYMN+jW=#0000< KMNUMnLSTaWoLkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j(p2Ka=y{{R2~>C>nG-k$t_vE={R?EiOX0!7>e{C5BqFqH)P1v4;| zO+IS@Ih+L^k;M!Q+=2`Y!Q6t3^(pZafuigsp1!W^FL-zuB#mAf z&CCM|DSEm%hHzX@PB_3gWr4|LgDDF$90Cq7YAH0S9S}I=pu@nhu$9T6=}$^BP%(q2 LtDnm{r-UW|i%CW6 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/bolt_OVERLAY.png index 405c6c75fa69304a09aa4b57005c4e5cf40efb3e..9b93e46cff378eaf93da43a328001f32ed59b574 100644 GIT binary patch delta 132 zcmV-~0DJ%70hIxe7<~u^0000V^Z#K0003M`L_t(|oMZg||33pIfQcgA!`XmW2Z#*`Tw3(pOI)o{{R1vi65{2fA{WPhW{`3|HmqigmFtgUj6^wyLSW)!D~7(F2QdA m5iTKY0Mrm%a*U&SfdK$RYyxncWO9%I0000Lkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j&81^9%x{{R2~-Me>p@813Ya{vFwtAX6ri{{=3$}*P(`2_>%Uu8$` z0V&2LZ+91l4pvzYAcwQSBeIx*fm;xSJsIm$;wJ({*-JcqUD;po@G$a;T`HI?2NaU@ xba4#fxSpJ#z-w?=qK_?rt=lNj$z>KlLqRIz$`>&#FM)~}JYD@<);T3K0RZ-=LAn3{ diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/toolHeadScrewdriver.png index 4ec2f75ef3de243fae862f1587612a2143550315..141b62f5b138ae24f09396aaa542322e6609be1f 100644 GIT binary patch delta 97 zcmX@ZSTaE}nvH>hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FIERY/toolHeadScrewdriver_OVERLAY.png index 02d3a495d96a4fa01d189b4cc6893e4c7f1c8e32..dce77e23166203bb3f82e424a6935e38e913d154 100644 GIT binary patch delta 156 zcmV;N0Av5^0jvR#7=H)`0000V^Z#K00047IL_t(|oYm8<4S+BZK;a&9upyRZn1M-X zf?xm~4T@?M57$)m4~n75nM=NxGZjG9yrxRO31Br??aqD_z-soh71>5_2}N@q6UG?D z(&O)|a8V$Ivw<8=1{|KdD2@h7aWL=%hc8$MN-?11e}Ccgz!eQvYnYMN+jW=#0000< KMNUMnLSTaWoLkk1LFQ8Dv3kHT#0|tgy2@DKY zGZ+}e3+C(!v;j(p2Ka=y{{R2~>C>nG-k$t_vE={R?EiOX0!7>e{C5BqFqH)P1v4;| zO+IS@Ih+L^k;M!Q+=2`Y!Q6t3^(pZafuigsp1!W^FL-zuB#mAf z&CCM|DSEm%hHzX@PB_3gWr4|LgDDF$90Cq7YAH0S9S}I=pu@nhu$9T6=}$^BP%(q2 LtDnm{r-UW|i%CW6 diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FINE/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLINT/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/FLUID/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_A/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_HORIZONTAL/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/bolt.png index eb576fed2ec67cd6a3d3b6dcb2e9da4f5e03e1bc..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK?({QW diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/bolt_OVERLAY.png index c294368b8b481be1912cf226c7055b74df60444d..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82LoKD-SIJ3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn?{VN~< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/toolHeadScrewdriver.png index 54e5f0dbc29b50c14ddaf000d8f781e8757f4161..141b62f5b138ae24f09396aaa542322e6609be1f 100644 GIT binary patch delta 97 zcmX@ZSTaE}nvH>hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?TiHsb&Q diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GEM_VERTICAL/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/GLASS/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LAPIS/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LEAF/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/LIGNITE/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/bolt_OVERLAY.png index 4da49f1a27cd976651fa0eb61c177d79f3e8eeee..425c21fc04dac0700bc6815a0534f44437988f1c 100644 GIT binary patch delta 212 zcmV;_04x940_6da8Gi-<001BJ|6u?C0IW$wK~#90?UJz#!axuN=Mky@-&NoSz!ZSw z792W*$SIFR2)#fD1nvpmE?@~PArW3c#!46N?A_`dM(MB@F+wPDr{tW;+%zJVxcd#I zBgE2}UT+0_Mk#4wBIGBk>lxOz@Ooi70YFtXcMv1)@i6=U`b~u#K-Woyhfu)fYWvQ` zZYSjtrVQf*=d)y5VZG6p`rZauP8sSA_yC26;7$2+2dkA7{0tceTL*6rkVI9pF;+VO O0000HyF%#*!evUYsnYZ(MnDc{fk$L90|U1p2s75F#7_hYvX^-Jy0X9E z;bG(xyHqe)4k+a9>Eak7aXC4`fvLym%!wE_u`n~WvJ^%>Gcz;46h=qAJTtjC5!;$S zOgvwhnw$=4)CdL|7ILOAdTMHF7N#&}N(u%#ir8*4QaTaCaBm`0vzG3S8JYD@< J);T3K0Ra0hZT0{F diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/toolHeadScrewdriver.png index 4ec2f75ef3de243fae862f1587612a2143550315..141b62f5b138ae24f09396aaa542322e6609be1f 100644 GIT binary patch delta 97 zcmX@ZSTaE}nvH>hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/MAGNETIC/toolHeadScrewdriver_OVERLAY.png index 5927291a27cea53656f27143113c874e33479f5a..faa140a72d9edb85f2d553054b6f3dda53875314 100644 GIT binary patch delta 264 zcmV+j0r&p-1DFDk8Gi-<001BJ|6u?C0N+VOK~#90?UFsNf0Aj=rAkAN=}edYcS0AK}BmJnNTG1R}yhO$Hh)|lN+FSB)EE!6e2dB1;~pDdev ze6CeBbH);zTq9MLw7PZR^FA@Q;OzYRQ>>9hn)VOt;Br~+AWhMLHFxJTlk_xOk5d2u O002ovPDHLkU;%=-Cwut- literal 505 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=Ijcz0ZOb3@CkAK4+I(M|0~M>w|D$^cmE$A0hIaQ(edBh z;(tZOe+~8j=H~w+BK~J&{MXR3A{wKu$&jWI6{+pVC zl$)9US68Q|nLr1^jjf(pcM9k}*^(eXkZ*B=$6-#^Kv~8lZ+91l4pvzYAcwQSBeIx* zfm;xS8S7KxCjtf8OFVsD*-q;rbrve0 zXh@fHa?jZKzxSx6{$AGat5@0SO<1CRCELO`Vei8d?R#01A156@Q_U%>^y*Q;lgp7# z>;0P*3wGXnb3EhC!}!nY!QD6iGOkDvJ9o77pH5uFAB`y=%#MjfxM_V*t?`zopr03dm^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y<^B@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?TiHsb&Q diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/METALLIC/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/METALLIC/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NETHERSTAR/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NONE/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/bolt.png index eb576fed2ec67cd6a3d3b6dcb2e9da4f5e03e1bc..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK?({QW diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/bolt_OVERLAY.png index c294368b8b481be1912cf226c7055b74df60444d..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82LoKD-SIJ3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn?{VN~< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/toolHeadScrewdriver.png index 54e5f0dbc29b50c14ddaf000d8f781e8757f4161..141b62f5b138ae24f09396aaa542322e6609be1f 100644 GIT binary patch delta 97 zcmX@ZSTaE}nvH>hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?TiHsb&Q diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/NUCLEAR/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/OPAL/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/PAPER/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/POWDER/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/QUARTZ/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/REFINED/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/ROUGH/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/RUBY/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SAND/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/bolt.png index eb576fed2ec67cd6a3d3b6dcb2e9da4f5e03e1bc..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK?({QW diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/bolt_OVERLAY.png index c294368b8b481be1912cf226c7055b74df60444d..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82LoKD-SIJ3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn?{VN~< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/toolHeadScrewdriver.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/toolHeadScrewdriver.png index 54e5f0dbc29b50c14ddaf000d8f781e8757f4161..141b62f5b138ae24f09396aaa542322e6609be1f 100644 GIT binary patch delta 97 zcmX@ZSTaE}nvH>hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?TiHsb&Q diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHARDS/toolHeadScrewdriver_OVERLAY.png index 844e4365af706bff7ff97e32b137a3af9a0a13d2..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$gmgtxsG53h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywo3kSk^Y diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/SHINY/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/bolt.png b/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/bolt.png index 29d3fd08b388aa225af0a781f5eb0dbada0c2144..fc2d7c88b712616b3bfa1b9955b74e407dffe480 100644 GIT binary patch delta 83 zcmX@am^MMumyLmeLH_gqL?ET>>EaktF()}ef^`dH`uTZ({kJ{4ySw~<{r7iw>$`Y& mR)5!f+Qwr%eZtyG76t~5Xe*u?CQDPGMg~t;KbLh*2~7Y`!XK;v delta 176 zcmYd0#5h5+o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`bP0l+XkK<%%;X diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/bolt_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/bolt_OVERLAY.png index 78d5f0c041659ba1ca6718083e25dd0bc5285f03..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD82Q956-<@`3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn*hLH_gqL?C7D>EaktF()}eqUeFW$bla^OS0;|y^%cp`uh5ln}5E% zy!^j@%#IK9H@ted^yinCmz_P0nSsD{mb(T6LtstnpG1Rc-9Td)JYD@<);T3K0RTA~ BDyskh delta 186 zcmXRp!#F{*o&gA~W-QnXq!f}pf_xbms?-=58d?|_egTCVUNA6}8Za=tN&u;1U=S~u zvn$XBD8W<`$4n$FaJlM4O!l9lV{a?eM`3qEVI ZG8mUiCQK6U0-D9Z;OXk;vd$@?2>?5!HoX7< diff --git a/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/toolHeadScrewdriver_OVERLAY.png b/src/main/resources/assets/gregtech/textures/items/materialicons/WOOD/toolHeadScrewdriver_OVERLAY.png index 5385a7b02536e36c893324a1872a6202c066f214..1f1e672d0dbb0ff65fd40651903ba50ace2fbade 100644 GIT binary patch delta 67 zcmdna7&<}1mV=FffkFQB|3n}q@RqD7$l8e8O_WC3h{ZmC^&|2Tu=V-e}1C~3&USO`G>{b%hmv;7(8A5T-G@y GGywn}$SXhq From 873283c10fb725ee4d3809a4c9af5c8c203259eb Mon Sep 17 00:00:00 2001 From: Yoshy <60155833+Yoshy2002@users.noreply.github.com> Date: Fri, 20 Dec 2024 22:22:03 +0100 Subject: [PATCH 176/181] Fix circuit 9 Heavy Oil (#3680) --- .../loaders/postload/recipes/DistilleryRecipes.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/loaders/postload/recipes/DistilleryRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/DistilleryRecipes.java index 4f12d8d1980..14f812dc6fc 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/DistilleryRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/DistilleryRecipes.java @@ -543,9 +543,9 @@ public void distillationTowerRecipes() { .itemInputs(GTUtility.getIntegratedCircuit(9)) .fluidInputs(Materials.OilHeavy.getFluid(1000)) .fluidOutputs( - Materials.SulfuricHeavyFuel.getFluid(450), - Materials.SulfuricLightFuel.getFluid(150), - Materials.SulfuricNaphtha.getFluid(300), + Materials.SulfuricHeavyFuel.getFluid(1000), + Materials.SulfuricLightFuel.getFluid(450), + Materials.SulfuricNaphtha.getFluid(150), MaterialsKevlar.NaphthenicAcid.getFluid(50), Materials.SulfuricGas.getGas(600)) .duration(5 * SECONDS) From 5082ad5369a6278f1c384cf6cd1b52885cd1aeb1 Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Fri, 20 Dec 2024 16:42:43 -0500 Subject: [PATCH 177/181] Remove duplicate stone dust recipe (#3681) --- .../java/gregtech/loaders/preload/LoaderGTBlockFluid.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java index c05ff7523ec..dfb1c39788b 100644 --- a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java +++ b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java @@ -2036,13 +2036,6 @@ public void run() { } } - 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)) From 7d0e0e786917fb0e5c469caa15ab65605a37497d Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:48:53 -0600 Subject: [PATCH 178/181] Fix lsc crash at full capacity (#3679) --- .../common/tileentities/MTELapotronicSuperCapacitor.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java index 3b45f7a35e9..83bba48cbc7 100644 --- a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java +++ b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java @@ -845,6 +845,7 @@ private long recalculateLossWithMaintenance(int repairStatus) { * @return EU amount */ private long getPowerToDraw(long hatchWatts) { + if (stored.compareTo(capacity) >= 0) return 0; final BigInteger remcapActual = capacity.subtract(stored); final BigInteger recampLimited = (MAX_LONG.compareTo(remcapActual) > 0) ? remcapActual : MAX_LONG; return min(hatchWatts, recampLimited.longValue()); From e6ff50aee86a7a6b5c645adbe9f6e4e0e45d9cb6 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Fri, 20 Dec 2024 16:30:17 -0600 Subject: [PATCH 179/181] Fix fluid shaper glass amount range tooltip (#3683) --- .../common/tileentities/machines/multi/MTEMultiSolidifier.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiSolidifier.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiSolidifier.java index c371c8cd2c0..26403cbaa5b 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiSolidifier.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiSolidifier.java @@ -209,7 +209,7 @@ protected MultiblockTooltipBuilder createTooltip() { .addCasingInfoRange("Solidifier Radiator", 13, 73, false) .addCasingInfoRange("Heat Proof Machine Casing", 4, 16, false) .addCasingInfoRange("Clean Stainless Steel Machine Casing", 4, 16, false) - .addCasingInfoRange("Glass", 21, 117, true) + .addCasingInfoRange("Glass", 14, 117, true) .addInputBus("Any Casing", 1) .addOutputBus("Any Casing", 1) .addInputHatch("Any Casing", 1) From 394b0b1cafa1343286189f47b8dcbd1ab6e457c3 Mon Sep 17 00:00:00 2001 From: StaffiX <32968022+StaffiX@users.noreply.github.com> Date: Sat, 21 Dec 2024 01:08:53 +0100 Subject: [PATCH 180/181] Swap Draconic and Wyvern DEFC textures (#3684) Co-authored-by: Martin Robertz --- .../kubatech/textures/blocks/casing/defc_2.png | Bin 647 -> 469 bytes .../kubatech/textures/blocks/casing/defc_3.png | Bin 469 -> 647 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/kubatech/textures/blocks/casing/defc_2.png b/src/main/resources/assets/kubatech/textures/blocks/casing/defc_2.png index 18948e711d12ed9a36f0f224062947d981ce6f76..7aa78f8f3cc9435557de0a0b8938178188d56136 100644 GIT binary patch delta 406 zcmV;H0crk+1=RzP83+OZ005AYXf}}{G=BkVNkl=!3GyMLAxB<*QAGKL>4 zeJZvEQG1PV}5Vh51W+H`;Q>q)biTwKwb#c>Y_fNj9xIF{li zdM+Gs{yUrj9c+kaqW?tcka*BC#DDT>%IAQSUycJEN*B)CvZi~xYiXY6u{;R8o+63L z2VZb{=ph9R1dP=pyqW(&u^^Be;5bh7!u|6V9JCqiX?VW^!Oo!5+s9^fJ*@wR3SIzo zu!+j&`-@I*9@r$~5>bO6)In^X0q-}II7m+4NbLgZN=^C(00000NkvXXt^-0~g6LAc AL;wH) delta 585 zcmV-P0=E6t1BV5W83+ad001BJ|6!3KG=BmdNklh)+}>qHK|3!q+bWF$KK-P)q@{XMeCa zd8hu)Ry5dIhh}R*ZNtF`AqIjHSFg6EUI)A5of0rNTf>{l0a~p#1I^E`CzPw5?v0Th zu+!hd^3^3gD>n6x7f!#7Wbk0?zMe&`slZVU)$+Wtc~4jIP0=Z=L~@a@rf9L!y@}ur zMojxje*=%H#bC(v4OW+LA;z*lY=6Ntl9H0un%N(9n7k}7-)N%OzJ@EERWzE57!3ys zkr45fW{Z>n2G!2yT7u9&`hBKa)-S*iN?Qz;z6Onj%e?v3AMI{raO9e;k=WfyJPIBh|#Ld^kci^Z5MjQwb2_zX|Xi XEz1{(3T@K100000NkvXXu0mjfB<&fb diff --git a/src/main/resources/assets/kubatech/textures/blocks/casing/defc_3.png b/src/main/resources/assets/kubatech/textures/blocks/casing/defc_3.png index 7aa78f8f3cc9435557de0a0b8938178188d56136..18948e711d12ed9a36f0f224062947d981ce6f76 100644 GIT binary patch delta 585 zcmV-P0=E6t1BV5W83+ad001BJ|6!3KG=BmdNklh)+}>qHK|3!q+bWF$KK-P)q@{XMeCa zd8hu)Ry5dIhh}R*ZNtF`AqIjHSFg6EUI)A5of0rNTf>{l0a~p#1I^E`CzPw5?v0Th zu+!hd^3^3gD>n6x7f!#7Wbk0?zMe&`slZVU)$+Wtc~4jIP0=Z=L~@a@rf9L!y@}ur zMojxje*=%H#bC(v4OW+LA;z*lY=6Ntl9H0un%N(9n7k}7-)N%OzJ@EERWzE57!3ys zkr45fW{Z>n2G!2yT7u9&`hBKa)-S*iN?Qz;z6Onj%e?v3AMI{raO9e;k=WfyJPIBh|#Ld^kci^Z5MjQwb2_zX|Xi XEz1{(3T@K100000NkvXXu0mjfB<&fb delta 406 zcmV;H0crk+1=RzP83+OZ005AYXf}}{G=BkVNkl=!3GyMLAxB<*QAGKL>4 zeJZvEQG1PV}5Vh51W+H`;Q>q)biTwKwb#c>Y_fNj9xIF{li zdM+Gs{yUrj9c+kaqW?tcka*BC#DDT>%IAQSUycJEN*B)CvZi~xYiXY6u{;R8o+63L z2VZb{=ph9R1dP=pyqW(&u^^Be;5bh7!u|6V9JCqiX?VW^!Oo!5+s9^fJ*@wR3SIzo zu!+j&`-@I*9@r$~5>bO6)In^X0q-}II7m+4NbLgZN=^C(00000NkvXXt^-0~g6LAc AL;wH) From 2a5068688c0781f236114977994f996a151d60e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A5=93?= Date: Sat, 21 Dec 2024 12:24:55 +0800 Subject: [PATCH 181/181] Fix the Sound of Saplings from GT++ (#3685) --- src/main/java/gtPlusPlus/xmod/bop/blocks/base/SaplingBase.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gtPlusPlus/xmod/bop/blocks/base/SaplingBase.java b/src/main/java/gtPlusPlus/xmod/bop/blocks/base/SaplingBase.java index d0728304c43..2ef2d9764ba 100644 --- a/src/main/java/gtPlusPlus/xmod/bop/blocks/base/SaplingBase.java +++ b/src/main/java/gtPlusPlus/xmod/bop/blocks/base/SaplingBase.java @@ -46,6 +46,7 @@ protected SaplingBase(String blockNameLocalized, String blockNameUnlocalized, St this.setBlockName(blockName); ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(this), "treeSapling", true); this.setCreativeTab(AddToCreativeTab.tabBOP); + this.setStepSound(Block.soundTypeGrass); } /**