From 88f2451651aa35096ef2127b4e35ec7b19dd9053 Mon Sep 17 00:00:00 2001 From: Alexdoru <57050655+Alexdoru@users.noreply.github.com> Date: Sat, 9 Nov 2024 00:53:57 +0100 Subject: [PATCH 1/8] Delete the "PlayerActivity.log" (#3464) Co-authored-by: Martin Robertz --- src/main/java/gregtech/api/util/GTLog.java | 2 - .../common/GTPlayerActivityLogger.java | 34 ----------- src/main/java/gregtech/common/GTProxy.java | 59 ------------------- .../java/gregtech/common/config/Gregtech.java | 7 +-- .../gregtech/loaders/preload/GTPreLoad.java | 12 ---- 5 files changed, 1 insertion(+), 113 deletions(-) delete mode 100644 src/main/java/gregtech/common/GTPlayerActivityLogger.java diff --git a/src/main/java/gregtech/api/util/GTLog.java b/src/main/java/gregtech/api/util/GTLog.java index eba6b0fe50f..d9365bbea9d 100644 --- a/src/main/java/gregtech/api/util/GTLog.java +++ b/src/main/java/gregtech/api/util/GTLog.java @@ -16,11 +16,9 @@ public class GTLog { public static PrintStream out = System.out; public static PrintStream err = System.err; public static PrintStream ore = new LogBuffer(); - public static PrintStream pal = null; public static PrintStream exp = new LogBuffer(); public static File mLogFile; public static File mOreDictLogFile; - public static File mPlayerActivityLogFile; public static File mExplosionLog; public static class LogBuffer extends PrintStream { diff --git a/src/main/java/gregtech/common/GTPlayerActivityLogger.java b/src/main/java/gregtech/common/GTPlayerActivityLogger.java deleted file mode 100644 index 7bd5ba508e8..00000000000 --- a/src/main/java/gregtech/common/GTPlayerActivityLogger.java +++ /dev/null @@ -1,34 +0,0 @@ -package gregtech.common; - -import java.util.ArrayList; - -import gregtech.GTMod; -import gregtech.api.util.GTLog; - -public class GTPlayerActivityLogger implements Runnable { - - @Override - public void run() { - try { - ArrayList buffer = new ArrayList<>(); - for (;;) { - if (GTLog.pal == null) { - return; - } - String tLastOutput = ""; - // Block on first element for efficiency - buffer.add(GTMod.gregtechproxy.mBufferedPlayerActivity.take()); - GTMod.gregtechproxy.mBufferedPlayerActivity.drainTo(buffer); - for (String output : buffer) { - if (!output.equals(tLastOutput)) { - GTLog.pal.println(output); - tLastOutput = output; - } - } - buffer.clear(); - // TODO: swap from sleep to event bus - Thread.sleep(10000L); - } - } catch (Throwable ignored) {} - } -} diff --git a/src/main/java/gregtech/common/GTProxy.java b/src/main/java/gregtech/common/GTProxy.java index 8b2c1535919..ed5ffeb4c8f 100644 --- a/src/main/java/gregtech/common/GTProxy.java +++ b/src/main/java/gregtech/common/GTProxy.java @@ -36,11 +36,9 @@ import static net.minecraftforge.fluids.FluidRegistry.getFluidStack; import java.io.File; -import java.text.DateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Date; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; @@ -49,10 +47,8 @@ import java.util.Locale; import java.util.Map; import java.util.UUID; -import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @@ -535,8 +531,6 @@ public abstract class GTProxy implements IGTMod, IFuelHandler { "infusedteslatiteInsulated", "redalloyInsulated", "infusedteslatiteBundled")); - private final DateFormat mDateFormat = DateFormat.getInstance(); - public final BlockingQueue mBufferedPlayerActivity = new LinkedBlockingQueue<>(); public final GTBlockMap mCTMBlockCache = new GTBlockMap<>(); public boolean mDisableVanillaOres = true; public boolean mAllowSmallBoilerAutomation = false; @@ -1226,13 +1220,6 @@ public void onLoad() { public void onPostLoad() { GTLog.out.println("GTMod: Beginning PostLoad-Phase."); - GTLog.ore.println("GTMod: Beginning PostLoad-Phase."); - if (GTLog.pal != null) { - final Thread playerActivityLogger = new Thread(new GTPlayerActivityLogger()); - playerActivityLogger.setDaemon(true); - playerActivityLogger.setName("GT5U Player activity logger"); - playerActivityLogger.start(); - } GregTechAPI.sPostloadStarted = true; // This needs to happen late enough that all of the fluids we need have been registered. @@ -1531,10 +1518,6 @@ public void onOreGenEvent(OreGenEvent.GenerateMinable aGenerator) { } } - private String getDataAndTime() { - return this.mDateFormat.format(new Date()); - } - @SubscribeEvent public void onPlayerInteraction(PlayerInteractEvent aEvent) { if ((aEvent.entityPlayer == null) || (aEvent.entityPlayer.worldObj == null) @@ -1542,28 +1525,6 @@ public void onPlayerInteraction(PlayerInteractEvent aEvent) { || (aEvent.world.provider == null)) { return; } - if ((!aEvent.entityPlayer.worldObj.isRemote) && (aEvent.action != PlayerInteractEvent.Action.RIGHT_CLICK_AIR) - && (GTLog.pal != null)) { - this.mBufferedPlayerActivity.offer( - getDataAndTime() + ";" - + aEvent.action.name() - + ";" - + aEvent.entityPlayer.getDisplayName() - + ";DIM:" - + aEvent.world.provider.dimensionId - + ";" - + aEvent.x - + ";" - + aEvent.y - + ";" - + aEvent.z - + ";|;" - + aEvent.x / 10 - + ";" - + aEvent.y / 10 - + ";" - + aEvent.z / 10); - } ItemStack aStack = aEvent.entityPlayer.getCurrentEquippedItem(); if ((aStack != null) && (aEvent.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) && (aStack.getItem() == Items.flint_and_steel)) { @@ -1603,26 +1564,6 @@ public void onBlockBreakingEvent(BlockEvent.BreakEvent event) { public void onBlockHarvestingEvent(BlockEvent.HarvestDropsEvent aEvent) { if (aEvent.harvester == null) return; - if ((!aEvent.world.isRemote) && (GTLog.pal != null)) { - this.mBufferedPlayerActivity.offer( - getDataAndTime() + ";HARVEST_BLOCK;" - + aEvent.harvester.getDisplayName() - + ";DIM:" - + aEvent.world.provider.dimensionId - + ";" - + aEvent.x - + ";" - + aEvent.y - + ";" - + aEvent.z - + ";|;" - + aEvent.x / 10 - + ";" - + aEvent.y / 10 - + ";" - + aEvent.z / 10); - } - ItemStack aStack = aEvent.harvester.getCurrentEquippedItem(); if (aStack == null) return; diff --git a/src/main/java/gregtech/common/config/Gregtech.java b/src/main/java/gregtech/common/config/Gregtech.java index e852a6b0221..63a1057e960 100644 --- a/src/main/java/gregtech/common/config/Gregtech.java +++ b/src/main/java/gregtech/common/config/Gregtech.java @@ -368,15 +368,10 @@ public static class General { @Config.RequiresMcRestart public boolean loggingOreDict; - @Config.Comment("if true, logs all the oredict in logs/Explosion.log.") + @Config.Comment("if true, logs all the explosions in logs/Explosion.log.") @Config.DefaultBoolean(true) @Config.RequiresMcRestart public boolean loggingExplosions; - - @Config.Comment("if true, log all the oredict in logs/PlayerActivity.log.") - @Config.DefaultBoolean(true) - @Config.RequiresMcRestart - public boolean loggingPlayerActicity; } @Config.LangKey("GT5U.gui.config.gregtech.harvest_level") diff --git a/src/main/java/gregtech/loaders/preload/GTPreLoad.java b/src/main/java/gregtech/loaders/preload/GTPreLoad.java index a3d6572dd98..929660c0b71 100644 --- a/src/main/java/gregtech/loaders/preload/GTPreLoad.java +++ b/src/main/java/gregtech/loaders/preload/GTPreLoad.java @@ -179,18 +179,6 @@ public static void createLogFiles(File parentFile) { GTLog.exp = new PrintStream(GTLog.mExplosionLog); } catch (Throwable ignored) {} } - - if (Gregtech.general.loggingPlayerActicity) { - GTLog.mPlayerActivityLogFile = new File(parentFile, "logs/PlayerActivity.log"); - if (!GTLog.mPlayerActivityLogFile.exists()) { - try { - GTLog.mPlayerActivityLogFile.createNewFile(); - } catch (Throwable ignored) {} - } - try { - GTLog.pal = new PrintStream(GTLog.mPlayerActivityLogFile); - } catch (Throwable ignored) {} - } } public static void runMineTweakerCompat() { From 409f50d563831e7fb53ff5bf6deca805a91154c1 Mon Sep 17 00:00:00 2001 From: BlueHero233 <87818077+BlueHero233@users.noreply.github.com> Date: Fri, 8 Nov 2024 21:00:41 -0300 Subject: [PATCH 2/8] Turbine Texture Refactor (#3435) Co-authored-by: Martin Robertz --- src/main/java/gregtech/api/enums/Textures.java | 5 +++-- .../gregtech/common/blocks/BlockCasings4.java | 12 +++++++----- .../gregtech/common/blocks/BlockCasings8.java | 4 ++-- .../machines/multi/MTELargeTurbine.java | 6 +++--- .../machines/multi/MTELargeTurbineSteam.java | 2 +- .../blocks/GregtechMetaSpecialMultiCasings.java | 2 +- .../production/turbines/MTELargeTurbineSteam.java | 2 +- .../blocks/iconsets/MACHINE_CASING_TURBINE.png | Bin 473 -> 0 bytes ...CEDGAS.png => MACHINE_CASING_TURBINE_HSSS.png} | Bin .../iconsets/MACHINE_CASING_TURBINE_STEEL.png | Bin 0 -> 836 bytes 10 files changed, 18 insertions(+), 15 deletions(-) delete mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_TURBINE.png rename src/main/resources/assets/gregtech/textures/blocks/iconsets/{MACHINE_CASING_ADVANCEDGAS.png => MACHINE_CASING_TURBINE_HSSS.png} (100%) create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_TURBINE_STEEL.png diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index 5e21d6e9e98..92a213fb30b 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -997,11 +997,12 @@ public enum BlockIcons implements IIconContainer, Runnable { LARGETURBINE_TU_ACTIVE8, LARGETURBINE_TU_ACTIVE9, - MACHINE_CASING_TURBINE, + MACHINE_CASING_TURBINE_HSSS, MACHINE_CASING_TURBINE_STAINLESSSTEEL, + MACHINE_CASING_TURBINE_STEEL, MACHINE_CASING_TURBINE_TITANIUM, MACHINE_CASING_TURBINE_TUNGSTENSTEEL, - MACHINE_CASING_ADVANCEDGAS, + BLOCK_ADAMANTIUM, BLOCK_ALUMINIUM, BLOCK_AMERICIUM, diff --git a/src/main/java/gregtech/common/blocks/BlockCasings4.java b/src/main/java/gregtech/common/blocks/BlockCasings4.java index 0cba916548c..fbb73044a58 100644 --- a/src/main/java/gregtech/common/blocks/BlockCasings4.java +++ b/src/main/java/gregtech/common/blocks/BlockCasings4.java @@ -104,7 +104,7 @@ public IIcon getIcon(int ordinalSide, int aMeta) { case 6 -> Textures.BlockIcons.MACHINE_CASING_FUSION.getIcon(); case 7 -> Textures.BlockIcons.MACHINE_CASING_FUSION_COIL.getIcon(); case 8 -> Textures.BlockIcons.MACHINE_CASING_FUSION_2.getIcon(); - case 9 -> Textures.BlockIcons.MACHINE_CASING_TURBINE.getIcon(); + case 9 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_STEEL.getIcon(); case 10 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_STAINLESSSTEEL.getIcon(); case 11 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TITANIUM.getIcon(); case 12 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TUNGSTENSTEEL.getIcon(); @@ -118,6 +118,9 @@ public IIcon getIcon(int ordinalSide, int aMeta) { @Deprecated public IIcon getTurbineCasing(int meta, int iconIndex, boolean active, boolean hasTurbine) { return switch (meta) { + case 9 -> active ? Textures.BlockIcons.TURBINE_ACTIVE[iconIndex].getIcon() + : hasTurbine ? Textures.BlockIcons.TURBINE[iconIndex].getIcon() + : Textures.BlockIcons.TURBINE_EMPTY[iconIndex].getIcon(); case 10 -> active ? Textures.BlockIcons.TURBINE_ACTIVE1[iconIndex].getIcon() : hasTurbine ? Textures.BlockIcons.TURBINE1[iconIndex].getIcon() : Textures.BlockIcons.TURBINE_EMPTY1[iconIndex].getIcon(); @@ -127,9 +130,7 @@ public IIcon getTurbineCasing(int meta, int iconIndex, boolean active, boolean h case 12 -> active ? Textures.BlockIcons.TURBINE_ACTIVE3[iconIndex].getIcon() : hasTurbine ? Textures.BlockIcons.TURBINE3[iconIndex].getIcon() : Textures.BlockIcons.TURBINE_EMPTY3[iconIndex].getIcon(); - default -> active ? Textures.BlockIcons.TURBINE_ACTIVE[iconIndex].getIcon() - : hasTurbine ? Textures.BlockIcons.TURBINE[iconIndex].getIcon() - : Textures.BlockIcons.TURBINE_EMPTY[iconIndex].getIcon(); + default -> throw new IllegalStateException("Unexpected value: " + meta); }; } @@ -216,10 +217,11 @@ public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, in } } return switch (tMeta) { + case 9 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_STEEL.getIcon(); case 10 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_STAINLESSSTEEL.getIcon(); case 11 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TITANIUM.getIcon(); case 12 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TUNGSTENSTEEL.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + default -> throw new IllegalStateException("Unexpected value: " + tMeta); }; } int tStartIndex = tMeta == 6 ? 1 : 13; diff --git a/src/main/java/gregtech/common/blocks/BlockCasings8.java b/src/main/java/gregtech/common/blocks/BlockCasings8.java index 400f1aadacd..e21418b7915 100644 --- a/src/main/java/gregtech/common/blocks/BlockCasings8.java +++ b/src/main/java/gregtech/common/blocks/BlockCasings8.java @@ -90,7 +90,7 @@ public IIcon getIcon(int ordinalSide, int aMeta) { case 6 -> Textures.BlockIcons.MACHINE_CASING_RHODIUM_PALLADIUM.getIcon(); case 7 -> Textures.BlockIcons.MACHINE_CASING_IRIDIUM.getIcon(); case 8 -> Textures.BlockIcons.MACHINE_CASING_MAGICAL.getIcon(); - case 9 -> Textures.BlockIcons.MACHINE_CASING_ADVANCEDGAS.getIcon(); + case 9 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_HSSS.getIcon(); case 10 -> Textures.BlockIcons.MACHINE_CASING_RADIANT_NAQUADAH_ALLOY.getIcon(); case 11 -> Textures.BlockIcons.MACHINE_CASING_PCB_TIER_1.getIcon(); case 12 -> Textures.BlockIcons.MACHINE_CASING_PCB_TIER_2.getIcon(); @@ -183,6 +183,6 @@ public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, in } } - return Textures.BlockIcons.MACHINE_CASING_ADVANCEDGAS.getIcon(); + return Textures.BlockIcons.MACHINE_CASING_TURBINE_HSSS.getIcon(); } } 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 de35a7d3bcd..ffea5e40f6c 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java @@ -214,9 +214,9 @@ public boolean renderInWorld(IBlockAccess aWorld, int aX, int aY, int aZ, Block GTRenderUtil.renderBlockIcon( aRenderer, tBlock, - tX + tDirection.offsetX * 0.01, - tY + tDirection.offsetY * 0.01, - tZ + tDirection.offsetZ * 0.01, + tX + tDirection.offsetX * 0.001, + tY + tDirection.offsetY * 0.001, + tZ + tDirection.offsetZ * 0.001, tTextures[i].getIcon(), tFacing); } 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 28d8a21e83a..b0ad701cc98 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java @@ -92,7 +92,7 @@ public byte getCasingMeta() { @Override public int getCasingTextureIndex() { - return 16; + return 57; } @Override diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings.java index d3838099727..38d9146e65d 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings.java @@ -92,7 +92,7 @@ public IIcon getIcon(final int ordinalSide, final int aMeta) { public static IIcon getStaticIcon(final int ordinalSide, final byte aMeta) { return switch (aMeta) { case 0 -> TexturesGtBlock.Casing_Redox_1.getIcon(); - case 1 -> Textures.BlockIcons.MACHINE_CASING_TURBINE.getIcon(); + case 1 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_STEEL.getIcon(); case 2 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TITANIUM.getIcon(); case 3 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_STAINLESSSTEEL.getIcon(); case 4 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TUNGSTENSTEEL.getIcon(); 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 beeaa2726bd..6445e2ad238 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 @@ -40,7 +40,7 @@ public int getCasingMeta() { @Override public int getCasingTextureIndex() { - return 16; + return 57; } @Override diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_TURBINE.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_TURBINE.png deleted file mode 100644 index 340bfeddc4622fb037e372a9e24a411d24e43266..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmV;~0Ve*5P)987ctQ{dN~M;C8zfHAGLErm0A`b(t=r?uYVT`XyCzP~W*@N9~X`p3l`t*3cLOI%~J^8vxZ<%|zMg)Ox?B)S1_9{Yc)nwbUi7*Xt!y>M@YB zaFpIgY2P@GA5S=sXGK-^{pY(3ovneemNh9mcLg~g#EX>4Tx04R}tkv&MmKpe$iQ>9WW3hf{wlA$`ai;6gwDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR0!X3=we-NVDzyC~1X zDYDGy0}H5WEHaYi@7teVjf3S?X%}1~@nb zCQFpP-s9Z^-M#&LrrqBU=SOnY{|FoG00009a7bBm000XT000XT0n*)m`~Uy}W=TXr zR5;6RliiWyFbspS8P{+d$4RdL2GWaT+3AD$G#>uoXrS3R^@2c3Is3Ll~u$bh1mpJkJVSc4(fLU(Ci@ zmZkrvloSpbDgf5~b{93^cDoieL{FNgsYthVnJ%L4hw@(fB~@}zV!i>yIv=mQlMk-hXPxdaV!e426`ZeDpOk)hjYIb77^C4U&emn zP;g}5!HZ8UjKUlNT-jnb670!TpESi0%Aiwo*OHPm^g_F_5!x zl-@>Z-#CsRPdJZfMOF6w=erD@t%0zXH7PrH1vwwawvKVME Date: Sat, 9 Nov 2024 01:46:21 +0100 Subject: [PATCH 3/8] Readd missing iodine output to seaweed ash line (#3466) Co-authored-by: Martin Robertz --- src/main/java/gtnhlanth/loader/RecipeLoader.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gtnhlanth/loader/RecipeLoader.java b/src/main/java/gtnhlanth/loader/RecipeLoader.java index 2ad74da12b5..075bce0e6d4 100644 --- a/src/main/java/gtnhlanth/loader/RecipeLoader.java +++ b/src/main/java/gtnhlanth/loader/RecipeLoader.java @@ -996,6 +996,7 @@ public static void loadGeneral() { // Iodine GTValues.RA.stdBuilder() .itemInputs(Materials.Benzene.getCells(1)) + .itemOutputs(WerkstoffMaterialPool.Iodine.get(OrePrefixes.dust, 1)) .fluidInputs(WerkstoffMaterialPool.SeaweedConcentrate.getFluidOrGas(2000)) .fluidOutputs(WerkstoffMaterialPool.SeaweedByproducts.getFluidOrGas(200)) .eut(TierEU.RECIPE_HV) From 2a214adf7aeb30e9f4c54ae4c120430ee2918a60 Mon Sep 17 00:00:00 2001 From: Lyft <127234178+Lyfts@users.noreply.github.com> Date: Sat, 9 Nov 2024 01:47:00 +0100 Subject: [PATCH 4/8] Fix a few waterline nei previews (#3462) Co-authored-by: Martin Robertz --- .../multi/purification/MTEPurificationUnitPlasmaHeater.java | 4 ++-- .../multi/purification/MTEPurificationUnitUVTreatment.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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 dcb3b1116d3..b1301157da7 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 @@ -172,7 +172,7 @@ private enum CycleState { 'K', lazy( t -> GTStructureUtility.buildHatchAdder() - .atLeast(InputHatch) + .hatchClass(MTEHatchInput.class) .dot(2) .adder(MTEPurificationUnitPlasmaHeater::addCoolantHatchToMachineList) .cacheHint(() -> "Input Hatch (Coolant)") @@ -183,7 +183,7 @@ private enum CycleState { 'P', lazy( t -> GTStructureUtility.buildHatchAdder() - .atLeast(InputHatch) + .hatchClass(MTEHatchInput.class) .dot(3) .adder(MTEPurificationUnitPlasmaHeater::addPlasmaHatchToMachineList) .cacheHint(() -> "Input Hatch (Plasma)") 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 dbd6c645076..eaa5a0d5dfe 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 @@ -482,7 +482,7 @@ public long count(MTEPurificationUnitUVTreatment gtMetaTileEntityPurificationUni } }, - LensIndicator(MTEPurificationUnitUVTreatment::addLensIndicatorToMachineList, MTEHatchLensHousing.class) { + LensIndicator(MTEPurificationUnitUVTreatment::addLensIndicatorToMachineList, MTEHatchLensIndicator.class) { @Override public long count(MTEPurificationUnitUVTreatment gtMetaTileEntityPurificationUnitUVTreatment) { From 2309e34a6c471bceda6716231c3bed0fe7e93752 Mon Sep 17 00:00:00 2001 From: querns <33518699+querns@users.noreply.github.com> Date: Sat, 9 Nov 2024 11:22:17 -0600 Subject: [PATCH 5/8] Add ctrl-middle-click to suppress infinite spray can's left click shake (#3431) Co-authored-by: Martin Robertz --- .../api/net/GTPacketInfiniteSpraycan.java | 13 ++++ .../BehaviourSprayColorInfinite.java | 77 +++++++++++++++++-- .../resources/assets/gregtech/lang/en_US.lang | 7 ++ 3 files changed, 89 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java b/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java index b0127ba81f9..7ff2eb23b13 100644 --- a/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java +++ b/src/main/java/gregtech/api/net/GTPacketInfiniteSpraycan.java @@ -119,6 +119,19 @@ boolean execute(final BehaviourSprayColorInfinite behavior, final ItemStack item } return false; } + }, + TOGGLE_SHAKE_LOCK { + + @Override + boolean execute(final BehaviourSprayColorInfinite behavior, final ItemStack itemStack, + final EntityPlayerMP player, final int newColor) { + if (behavior.togglePreventShake(itemStack)) { + Action.playLockSound(player); + } else { + Action.playUnlockSound(player); + } + return true; + } }; private static void playShakeSound(final EntityPlayerMP player) { diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java index 924d160f2dd..72a701db9f9 100644 --- a/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorInfinite.java @@ -3,10 +3,12 @@ import static gregtech.api.enums.GTValues.AuthorQuerns; import static net.minecraft.util.MovingObjectPosition.MovingObjectType.BLOCK; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.function.Consumer; +import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -16,6 +18,8 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import org.lwjgl.input.Keyboard; + import com.google.common.collect.ImmutableList; import com.gtnewhorizon.gtnhlib.GTNHLib; import com.gtnewhorizons.modularui.api.UIInfos; @@ -38,6 +42,7 @@ public class BehaviourSprayColorInfinite extends BehaviourSprayColor { private static final List COLOR_SELECTIONS; public static final String COLOR_NBT_TAG = "current_color"; public static final String LOCK_NBT_TAG = "is_locked"; + public static final String PREVENT_SHAKE_TAG = "prevent_shake"; private byte mCurrentColor; @@ -106,9 +111,21 @@ protected boolean colorize(World aWorld, int aX, int aY, int aZ, ForgeDirection @Override public List getAdditionalToolTips(final MetaBaseItem aItem, final List aList, final ItemStack itemStack) { + final List statuses = new ArrayList<>(); + if (isLocked(itemStack)) { + statuses.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.locked")); + } + if (isPreventingShake(itemStack)) { + statuses.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.preventing_shake")); + } + aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.infinite")); aList.add(mTooltipChain); aList.add(" "); + + if (!statuses.isEmpty()) { + aList.add(String.join(" :: ", statuses)); + } aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.more_info")); aList.add(AuthorQuerns); return aList; @@ -117,6 +134,9 @@ public List getAdditionalToolTips(final MetaBaseItem aItem, final List> getAdditionalToolTipsWhileSneaking(final MetaBaseItem aItem, final List aList, final ItemStack aStack) { + final String ctrlKey = Minecraft.isRunningOnMac + ? StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.ctrl_mac") + : StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.ctrl_pc"); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.infinite")); aList.add(mTooltipChain); aList.add(" "); @@ -124,6 +144,8 @@ public Optional> getAdditionalToolTipsWhileSneaking(final MetaBaseI aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.gui")); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.pick")); aList.add(StatCollector.translateToLocal("gt.behaviour.paintspray.infinite.tooltip.lock")); + aList.add( + StatCollector.translateToLocalFormatted("gt.behaviour.paintspray.infinite.tooltip.prevent_shake", ctrlKey)); aList.add(" "); aList.add(AuthorQuerns); @@ -131,9 +153,13 @@ public Optional> getAdditionalToolTipsWhileSneaking(final MetaBaseI } // endregion - // region Raw Mouse Event Handlers + // region Raw Event Handlers @Override public boolean onLeftClick(MetaBaseItem item, ItemStack itemStack, EntityPlayer aPlayer) { + if (isPreventingShake(itemStack)) { + return false; + } + if (isLocked(itemStack)) { displayLockedMessage(); } else { @@ -146,6 +172,8 @@ public boolean onLeftClick(MetaBaseItem item, ItemStack itemStack, EntityPlayer public boolean onMiddleClick(final MetaBaseItem item, final ItemStack itemStack, final EntityPlayer player) { if (player.isSneaking()) { sendPacket(GTPacketInfiniteSpraycan.Action.LOCK_CAN); + } else if (isCtrlDown()) { + sendPacket(GTPacketInfiniteSpraycan.Action.TOGGLE_SHAKE_LOCK); } else if (isLocked(itemStack)) { displayLockedMessage(); } else { @@ -168,6 +196,26 @@ public boolean onMiddleClick(final MetaBaseItem item, final ItemStack itemStack, return true; } + + private boolean isCtrlDown() { + // Yes, there's a duplicate method in GT++, but I didn't feel right including GT++ code here. We can extract + // this later if it is useful elsewhere. + try { + // noinspection DuplicatedCode + if (!Keyboard.isCreated()) { + return false; + } + + boolean isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) + || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL); + if (!isCtrlKeyDown && Minecraft.isRunningOnMac) + isCtrlKeyDown = Keyboard.isKeyDown(Keyboard.KEY_LMETA) || Keyboard.isKeyDown(Keyboard.KEY_RMETA); + + return isCtrlKeyDown; + } catch (IllegalStateException ignored) { + return false; + } + } // endregion // region GUI @@ -255,14 +303,11 @@ public void setColor(final ItemStack itemStack, final byte color) { } public boolean toggleLock(final ItemStack itemStack) { - final NBTTagCompound tag = itemStack.hasTagCompound() ? itemStack.getTagCompound() : new NBTTagCompound(); - final boolean newLockStatus = !tag.getBoolean(LOCK_NBT_TAG); - - tag.setBoolean(LOCK_NBT_TAG, newLockStatus); - itemStack.setTagCompound(tag); - setItemStackName(itemStack); + return toggleBooleanTag(itemStack, LOCK_NBT_TAG); + } - return newLockStatus; + public boolean togglePreventShake(final ItemStack itemStack) { + return toggleBooleanTag(itemStack, PREVENT_SHAKE_TAG); } private void setItemStackName(final ItemStack itemStack) { @@ -277,6 +322,17 @@ private void setItemStackName(final ItemStack itemStack) { String.format("Infinite Spray Can %c" + Dyes.get(mCurrentColor).mName + "%c", lBracket, rBracket)); } } + + private boolean toggleBooleanTag(final ItemStack itemStack, final String tagName) { + final NBTTagCompound tag = itemStack.hasTagCompound() ? itemStack.getTagCompound() : new NBTTagCompound(); + final boolean newValue = !tag.getBoolean(tagName); + + tag.setBoolean(tagName, newValue); + itemStack.setTagCompound(tag); + setItemStackName(itemStack); + + return newValue; + } // endregion public static Dyes getDye(ItemStack itemStack) { @@ -296,6 +352,11 @@ public boolean isLocked(final ItemStack itemStack) { .getBoolean(LOCK_NBT_TAG); } + private boolean isPreventingShake(final ItemStack itemStack) { + return itemStack.hasTagCompound() && itemStack.getTagCompound() + .getBoolean(PREVENT_SHAKE_TAG); + } + private static class DyeSelectGUI extends SelectItemUIFactory { public DyeSelectGUI(final String header, final ItemStack headerItem, final Consumer selectedCallback, diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang index 6235554b138..f1a359b6a09 100644 --- a/src/main/resources/assets/gregtech/lang/en_US.lang +++ b/src/main/resources/assets/gregtech/lang/en_US.lang @@ -631,13 +631,20 @@ GT5U.item.tank.locked_to=Content locked to %s gt.behaviour.paintspray.infinite.gui.header=Select a Color gt.behaviour.paintspray.infinite.gui.lock_error=§eSpray can is §clocked§e! §bSneak middle-click to unlock. gt.behaviour.paintspray.infinite.gui.solvent=Solvent +gt.behaviour.paintspray.infinite.gui.shake_toggle=Allow/disallow color iteration gt.behaviour.paintspray.infinite.tooltip.infinite=Infinite uses gt.behaviour.paintspray.infinite.tooltip.more_info=Hold SHIFT for more information +gt.behaviour.paintspray.infinite.tooltip.locked=Locked +gt.behaviour.paintspray.infinite.tooltip.preventing_shake=Left click action disabled + gt.behaviour.paintspray.infinite.tooltip.switch=Left Click: Change color (sneak to reverse direction) gt.behaviour.paintspray.infinite.tooltip.pick=Middle Click block: Copy color to spray can gt.behaviour.paintspray.infinite.tooltip.lock=Sneak Middle Click: Lock or unlock spray can gt.behaviour.paintspray.infinite.tooltip.gui=Middle Click: Open color choice GUI +gt.behaviour.paintspray.infinite.tooltip.prevent_shake=%s-Middle Click: Allow/prevent left click action +gt.behaviour.paintspray.infinite.tooltip.ctrl_pc=Ctrl +gt.behaviour.paintspray.infinite.tooltip.ctrl_mac=Command GT5U.hatch.disableFilter.true=Input Filter §cOff§r GT5U.hatch.disableFilter.false=Input Filter §aOn§r From 269ac07061395f408678040978285c9478219370 Mon Sep 17 00:00:00 2001 From: Noc <95299389+Nockyx@users.noreply.github.com> Date: Sat, 9 Nov 2024 14:29:00 -0300 Subject: [PATCH 6/8] Add Ore Dictionary Tags for Subatomic Particles (#3465) Co-authored-by: Martin Robertz --- src/main/java/gregtech/api/enums/OrePrefixes.java | 5 ++++- .../java/gtPlusPlus/core/handler/CompatHandler.java | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java index 418fe716816..73a502bf4e8 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -613,7 +613,10 @@ public enum OrePrefixes { blockCasingAdvanced("An Advanced Casing block for a Multiblock-Machine", "Rebolted ", " Casing", true, true, true, true, false, true, false, true, false, false, 0, M * 9, 64, -1), capsuleMolten("Capsule of Molten stuff", "Molten ", " Capsule", true, true, true, true, false, false, false, true, - false, false, 0, M * 1, 64, -1); + 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); public static final ImmutableList CELL_TYPES = ImmutableList.of( cell, diff --git a/src/main/java/gtPlusPlus/core/handler/CompatHandler.java b/src/main/java/gtPlusPlus/core/handler/CompatHandler.java index 1c442163441..f6fe7485465 100644 --- a/src/main/java/gtPlusPlus/core/handler/CompatHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/CompatHandler.java @@ -14,6 +14,7 @@ import cpw.mods.fml.common.event.FMLLoadCompleteEvent; import gregtech.api.enums.GTValues; +import gregtech.api.enums.OrePrefixes; import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.interfaces.RunnableWithInfo; import gtPlusPlus.api.objects.Logger; @@ -25,8 +26,10 @@ import gtPlusPlus.core.common.compat.CompatWitchery; import gtPlusPlus.core.handler.Recipes.LateRegistrationHandler; import gtPlusPlus.core.handler.Recipes.RegistrationHandler; +import gtPlusPlus.core.item.chemistry.IonParticles; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.material.Particle; import gtPlusPlus.core.recipe.RecipesGregTech; import gtPlusPlus.core.recipe.RecipesLaserEngraver; import gtPlusPlus.core.recipe.ShapedRecipeObject; @@ -118,6 +121,14 @@ public static void registerMyModsOreDictEntries() { "bufferCore_" + GTValues.VN[i - 1], new ItemStack(ItemUtils.getItemFromFQRN("miscutils:item.itemBufferCore" + i))); } + for (Particle i : Particle.aMap) { + GTOreDictUnificator + .registerOre(OrePrefixes.particle + i.mParticleName.replace(" ", ""), Particle.getBaseParticle(i)); + } + + for (String i : IonParticles.ions) { + GTOreDictUnificator.registerOre(OrePrefixes.particle + i, Particle.getIon(i, 0)); + } } public static void registerGregtechMachines() { From d68b5f2c075dfec21d40bc1c2ab6517fefdff8a5 Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Sat, 9 Nov 2024 12:35:22 -0500 Subject: [PATCH 7/8] Blackhole fixes (#3470) --- .../compressor/MTEBlackHoleCompressor.java | 70 +++++++++++-------- 1 file changed, 39 insertions(+), 31 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 4558c732c88..d945dde089b 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 @@ -19,6 +19,7 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW; import static gregtech.api.util.GTStructureUtility.buildHatchAdder; import static gregtech.api.util.GTStructureUtility.ofFrame; +import static gregtech.api.util.GTUtility.filterValidMTEs; import java.util.ArrayList; import java.util.Arrays; @@ -77,6 +78,7 @@ import gregtech.api.util.OverclockCalculator; import gregtech.common.blocks.BlockCasings10; import gregtech.common.items.MetaGeneratedItem01; +import gregtech.common.tileentities.machines.IRecipeProcessingAwareHatch; import gregtech.common.tileentities.render.TileEntityBlackhole; import gtPlusPlus.core.util.minecraft.PlayerUtils; import mcp.mobius.waila.api.IWailaConfigHandler; @@ -474,33 +476,32 @@ private void searchAndDecrementCatalysts() { // Loop through all items and look for the Activation and Deactivation Catalysts // Deactivation resets stability to 100 and catalyzing cost to 1 - // Has to do this "start/endRecipeProcessing" nonsense, or it doesn't work with stocking bus. - for (MTEHatchInputBus bus : mInputBusses) { - ItemStack[] inv = bus.getRealInventory(); - if (inv != null) { - for (int i = 0; i < inv.length; i++) { - ItemStack inputItem = inv[i]; - if (inputItem != null) { - if (inputItem.getItem() instanceof MetaGeneratedItem01) { - if (inputItem.getItemDamage() == 32418 && (blackHoleStatus == 1)) { - startRecipeProcessing(); - bus.decrStackSize(i, 1); - endRecipeProcessing(); - blackHoleStatus = 2; - createRenderBlock(); - return; - } else if (inputItem.getItemDamage() == 32419 && !(blackHoleStatus == 1)) { - startRecipeProcessing(); - bus.decrStackSize(i, 1); - endRecipeProcessing(); - inputItem.stackSize -= 1; - blackHoleStatus = 1; - blackHoleStability = 100; - catalyzingCostModifier = 1; - if (rendererTileEntity != null) rendererTileEntity.startScaleChange(false); - collapseTimer = 40; - return; + for (MTEHatchInputBus bus : filterValidMTEs(mInputBusses)) { + for (int i = 0; i < bus.getSizeInventory(); i++) { + ItemStack inputItem = bus.getStackInSlot(i); + if (inputItem != null) { + if (inputItem.getItem() instanceof MetaGeneratedItem01) { + if (inputItem.getItemDamage() == 32418 && (blackHoleStatus == 1)) { + bus.decrStackSize(i, 1); + if (bus instanceof IRecipeProcessingAwareHatch aware) { + setResultIfFailure(aware.endRecipeProcessing(this)); + aware.startRecipeProcessing(); } + blackHoleStatus = 2; + createRenderBlock(); + return; + } else if (inputItem.getItemDamage() == 32419 && !(blackHoleStatus == 1)) { + bus.decrStackSize(i, 1); + if (bus instanceof IRecipeProcessingAwareHatch aware) { + setResultIfFailure(aware.endRecipeProcessing(this)); + aware.startRecipeProcessing(); + } + blackHoleStatus = 1; + blackHoleStability = 100; + catalyzingCostModifier = 1; + if (rendererTileEntity != null) rendererTileEntity.startScaleChange(false); + collapseTimer = 40; + return; } } } @@ -508,6 +509,12 @@ private void searchAndDecrementCatalysts() { } } + @Override + protected void setupProcessingLogic(ProcessingLogic logic) { + super.setupProcessingLogic(logic); + searchAndDecrementCatalysts(); + } + @Override protected ProcessingLogic createProcessingLogic() { return new ProcessingLogic() { @@ -515,8 +522,6 @@ protected ProcessingLogic createProcessingLogic() { @NotNull @Override protected Stream findRecipeMatches(@Nullable RecipeMap map) { - searchAndDecrementCatalysts(); - switch (getModeFromCircuit(inputItems)) { case MACHINEMODE_COMPRESSOR -> { return super.findRecipeMatches(RecipeMaps.compressorRecipes); @@ -582,9 +587,6 @@ public boolean onRunningTick(ItemStack aStack) { @Override public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { super.onPostTick(aBaseMetaTileEntity, aTick); - if (!aBaseMetaTileEntity.isServerSide()) { - playBlackHoleSounds(); - } if (collapseTimer != -1) { if (collapseTimer == 0) { @@ -593,6 +595,12 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { collapseTimer--; } + // Skip all the drain logic for clientside, just play sounds + if (!aBaseMetaTileEntity.isServerSide()) { + playBlackHoleSounds(); + return; + } + // Run stability checks once per second if a black hole is open if (blackHoleStatus == 1 || aTick % 20 != 0) return; From e45f9d80f1b1141a87aabee8a23930bcff85eb7c Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Sat, 9 Nov 2024 19:58:03 +0100 Subject: [PATCH 8/8] update --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index f8b333ca7be..94c3f47e522 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.4:dev") + api("com.github.GTNewHorizons:StructureLib:1.3.5:dev") api("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") api("com.github.GTNewHorizons:NotEnoughItems:2.6.44-GTNH:dev") api("com.github.GTNewHorizons:NotEnoughIds:2.1.6:dev") @@ -70,7 +70,7 @@ dependencies { compileOnly("com.github.GTNewHorizons:ThaumicBases:1.7.6: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.95-GTNH:dev") { transitive = false } + compileOnly("com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.96-GTNH:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:Galacticraft:3.2.5-GTNH:dev") { transitive = false } implementation("com.github.GTNewHorizons:TinkersConstruct:1.12.12-GTNH:dev")