From a47a5c61ec14ad0f3a2640dd338c05765b9b67de Mon Sep 17 00:00:00 2001 From: tgstyle <5832709+tgstyle@users.noreply.github.com> Date: Sat, 12 Sep 2026 12:50:29 -0600 Subject: [PATCH 1/6] Update gradle --- build.gradle | 10 ++++++++++ gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 1d1789a..c78102d 100644 --- a/build.gradle +++ b/build.gradle @@ -74,6 +74,13 @@ repositories { mavenCentral() } +configurations { + clientRuntime { + canBeConsumed = false + canBeResolved = true + } +} + def icJar = null def icDir = file('../ImmersiveConvergence-Legacy/build/libs') def icJars = icDir.exists() ? fileTree(icDir) { @@ -113,10 +120,13 @@ dependencies { implementation files(itJar) } runtimeOnly('zone.rong:mixinbooter:10.7') { transitive = false } + + clientRuntime rfg.deobf("curse.maven:${common.bf3r_version}") } tasks.named('runClient').configure { extraArgs.addAll('--width', '1920', '--height', '1080') + classpath configurations.clientRuntime } tasks.named('runServer').configure { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5dc98db..c56b367 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 6d715b48d99a9cbc5c123b161346040df6c41711 Mon Sep 17 00:00:00 2001 From: tgstyle <5832709+tgstyle@users.noreply.github.com> Date: Sat, 12 Sep 2026 12:51:10 -0600 Subject: [PATCH 2/6] Fix new IC integrations flipping multiblocks backwards --- .../util/ESMultiblocks.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/tech/muddykat/engineered_schematics/util/ESMultiblocks.java b/src/main/java/tech/muddykat/engineered_schematics/util/ESMultiblocks.java index e34c8a2..a49ee1e 100644 --- a/src/main/java/tech/muddykat/engineered_schematics/util/ESMultiblocks.java +++ b/src/main/java/tech/muddykat/engineered_schematics/util/ESMultiblocks.java @@ -18,10 +18,12 @@ public class ESMultiblocks { private static final String METHOD_TRIGGER = "primaryTrigger"; private static final String IC_REGISTRY = "com.immersiveconvergence.common.multiblock.IEMultiblockRegistry"; + private static final String IC_API_REGISTRY = "com.immersiveconvergence.api.multiblock.MultiblockRegistry"; private static final String IC_TEMPLATE = "com.immersiveconvergence.api.multiblock.TemplateMultiblock"; private static final BlockPos NO_TRIGGER = new BlockPos(Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE); private static final Map TRIGGERS = triggers(); private static final Map RESOLVED = new HashMap<>(); + private static final Map IC_OBJECTS = new HashMap<>(); private static final Set REVERSED_LENGTH = new HashSet<>(Arrays.asList("IE:Crusher", "IE:Squeezer", "IE:Fermenter", "IE:Mixer", "IE:Refinery", "IE:DieselGenerator", "IE:ArcFurnace", "IE:Excavator", "IE:AutoWorkbench", "IE:BottlingMachine", "IP:Pumpjack")); @@ -57,18 +59,45 @@ private static Map triggers() { public static boolean hasReversedLength(MultiblockHandler.IMultiblock multiblock) { return REVERSED_LENGTH.contains(multiblock.getUniqueName()) || isTemplateMultiblock(multiblock); } private static boolean isTemplateMultiblock(MultiblockHandler.IMultiblock multiblock) { + if (walksToTemplate(multiblock)) { return true; } + return walksToTemplate(fromConvergenceApi(multiblock.getUniqueName())); + } + + private static boolean walksToTemplate(@Nullable Object multiblock) { + if (multiblock == null) { return false; } for (Class type = multiblock.getClass(); type != null; type = type.getSuperclass()) { if (IC_TEMPLATE.equals(type.getName())) { return true; } } return false; } + @Nullable + private static Object fromConvergenceApi(String uniqueName) { + Object cached = IC_OBJECTS.get(uniqueName); + if (cached != null) { return cached == IC_OBJECTS ? null : cached; } + Object found = null; + try { + Object list = Class.forName(IC_API_REGISTRY).getMethod("getMultiblocks").invoke(null); + if (list instanceof Iterable) { + for (Object candidate : (Iterable)list) { + Object name = candidate.getClass().getMethod("getUniqueName").invoke(candidate); + if (uniqueName.equals(name)) { found = candidate; break; } + } + } + } + catch (ReflectiveOperationException | LinkageError exception) { + } + IC_OBJECTS.put(uniqueName, found == null ? IC_OBJECTS : found); + return found; + } + @Nullable public static BlockPos getTriggerOffset(MultiblockHandler.IMultiblock multiblock) { String uniqueName = multiblock.getUniqueName(); BlockPos resolved = RESOLVED.get(uniqueName); if (resolved == null) { resolved = toCanonical(multiblock, fromConvergence(uniqueName)); + if (resolved == null) { resolved = toCanonical(multiblock, readTriggerField(fromConvergenceApi(uniqueName))); } if (resolved == null) { resolved = TRIGGERS.get(uniqueName); } if (resolved == null) { resolved = toCanonical(multiblock, readTriggerField(multiblock)); } RESOLVED.put(uniqueName, resolved == null ? NO_TRIGGER : resolved); @@ -95,7 +124,8 @@ private static BlockPos fromConvergence(String uniqueName) { } @Nullable - private static BlockPos readTriggerField(MultiblockHandler.IMultiblock multiblock) { + private static BlockPos readTriggerField(@Nullable Object multiblock) { + if (multiblock == null) { return null; } try { Object value = multiblock.getClass().getMethod(METHOD_TRIGGER).invoke(multiblock); return value instanceof BlockPos ? (BlockPos)value : null; From 0938ff3c43aed6361370f4b5ed04163ea91ce474 Mon Sep 17 00:00:00 2001 From: tgstyle <5832709+tgstyle@users.noreply.github.com> Date: Sat, 12 Sep 2026 12:51:25 -0600 Subject: [PATCH 3/6] Build 8 --- version.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.properties b/version.properties index b4b7dd5..64df72f 100644 --- a/version.properties +++ b/version.properties @@ -1,4 +1,4 @@ -#Wed Sep 02 01:37:58 MDT 2026 -build_number=7 +#Sat Sep 12 12:10:01 MDT 2026 +build_number=8 stage=release version=1.0 From 21b65f1f3ff4bfd563cedb4c0aba68622778b284 Mon Sep 17 00:00:00 2001 From: tgstyle <5832709+tgstyle@users.noreply.github.com> Date: Sat, 12 Sep 2026 13:02:28 -0600 Subject: [PATCH 4/6] Missed empty catch block --- .../util/ESMultiblocks.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/tech/muddykat/engineered_schematics/util/ESMultiblocks.java b/src/main/java/tech/muddykat/engineered_schematics/util/ESMultiblocks.java index a49ee1e..2b08c0f 100644 --- a/src/main/java/tech/muddykat/engineered_schematics/util/ESMultiblocks.java +++ b/src/main/java/tech/muddykat/engineered_schematics/util/ESMultiblocks.java @@ -75,20 +75,23 @@ private static boolean walksToTemplate(@Nullable Object multiblock) { private static Object fromConvergenceApi(String uniqueName) { Object cached = IC_OBJECTS.get(uniqueName); if (cached != null) { return cached == IC_OBJECTS ? null : cached; } - Object found = null; + Object found = findInConvergenceApi(uniqueName); + IC_OBJECTS.put(uniqueName, found == null ? IC_OBJECTS : found); + return found; + } + + @Nullable + private static Object findInConvergenceApi(String uniqueName) { try { Object list = Class.forName(IC_API_REGISTRY).getMethod("getMultiblocks").invoke(null); - if (list instanceof Iterable) { - for (Object candidate : (Iterable)list) { - Object name = candidate.getClass().getMethod("getUniqueName").invoke(candidate); - if (uniqueName.equals(name)) { found = candidate; break; } - } + if (!(list instanceof Iterable)) { return null; } + for (Object candidate : (Iterable)list) { + Object name = candidate.getClass().getMethod("getUniqueName").invoke(candidate); + if (uniqueName.equals(name)) { return candidate; } } + return null; } - catch (ReflectiveOperationException | LinkageError exception) { - } - IC_OBJECTS.put(uniqueName, found == null ? IC_OBJECTS : found); - return found; + catch (ReflectiveOperationException | LinkageError exception) { return null; } } @Nullable From 530067f88c809f3d82c27554e1fb56d3436f1f6e Mon Sep 17 00:00:00 2001 From: tgstyle <5832709+tgstyle@users.noreply.github.com> Date: Sat, 12 Sep 2026 13:04:19 -0600 Subject: [PATCH 5/6] Update ru_ru from PR14 Thanks Nerzu1 for the updates! --- .../resources/assets/engineered_schematics/lang/ru_ru.lang | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/engineered_schematics/lang/ru_ru.lang b/src/main/resources/assets/engineered_schematics/lang/ru_ru.lang index 11e1d7c..36d3bda 100644 --- a/src/main/resources/assets/engineered_schematics/lang/ru_ru.lang +++ b/src/main/resources/assets/engineered_schematics/lang/ru_ru.lang @@ -70,9 +70,9 @@ desc.engineered_schematics.multiblock.II:Radar=Радар desc.engineered_schematics.multiblock.II:Emplacement=Огневая точка desc.engineered_schematics.multiblock.II:ChemicalPainter=Химический маляр desc.engineered_schematics.multiblock.II:Vulcanizer=Вулканизатор -desc.engineered_schematics.multiblock.II:SkycratePost=Фуникулёрный пост -desc.engineered_schematics.multiblock.II:SkycrateStation=Фуникулёрная станция -desc.engineered_schematics.multiblock.II:SkycartStation=Фуникулёрная пассажирская станция +desc.engineered_schematics.multiblock.II:SkycratePost=Фуникулёрный столб +desc.engineered_schematics.multiblock.II:SkycrateStation=Станция фуникулёра +desc.engineered_schematics.multiblock.II:SkycartStation=Станция пассажирского фуникулёра desc.engineered_schematics.multiblock.II:Sawmill=Лесопилка desc.engineered_schematics.multiblock.II:WoodenFenceGate=Деревянные ворота desc.engineered_schematics.multiblock.II:WoodenChainFenceGate=Деревянные сеточные ворота From ff8da55d6942272504bc04a6e354124c3d7a08cf Mon Sep 17 00:00:00 2001 From: tgstyle <5832709+tgstyle@users.noreply.github.com> Date: Sat, 12 Sep 2026 13:04:58 -0600 Subject: [PATCH 6/6] Build 9 --- version.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.properties b/version.properties index 64df72f..cdddcd7 100644 --- a/version.properties +++ b/version.properties @@ -1,4 +1,4 @@ -#Sat Sep 12 12:10:01 MDT 2026 -build_number=8 +#Sat Sep 12 13:04:31 MDT 2026 +build_number=9 stage=release version=1.0