From 5e71ecdc7907e4f32a335b09bdbe8acaceccc9a0 Mon Sep 17 00:00:00 2001 From: iczero Date: Sat, 4 Jan 2025 01:45:11 -0800 Subject: [PATCH] Attempt to fix level emitter crafting --- gradle.properties | 6 +-- gradlew | 0 .../mixins/cpu/MixinCraftingService.java | 51 +++++++++++++------ 3 files changed, 39 insertions(+), 18 deletions(-) mode change 100644 => 100755 gradlew diff --git a/gradle.properties b/gradle.properties index fac9da1c..2ad733cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,13 +1,13 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false org.gradle.parallel=true -parchment_minecraft_version=1.21 -parchment_mappings_version=2024.07.28 +parchment_minecraft_version=1.21.1 +parchment_mappings_version=2024.11.17 ## Environment Properties minecraft_release=1.21.1 minecraft_version=1.21.1 minecraft_version_range=1.21.1 -neoforge_version=21.1.62 +neoforge_version=21.1.92 neoforge_version_range=[21.1.1,) loader_version_range=[4,) ## Mod Properties diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/src/main/java/net/pedroksl/advanced_ae/mixins/cpu/MixinCraftingService.java b/src/main/java/net/pedroksl/advanced_ae/mixins/cpu/MixinCraftingService.java index d65f3e13..31bd34ff 100644 --- a/src/main/java/net/pedroksl/advanced_ae/mixins/cpu/MixinCraftingService.java +++ b/src/main/java/net/pedroksl/advanced_ae/mixins/cpu/MixinCraftingService.java @@ -6,10 +6,10 @@ import java.util.Set; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; import com.llamalad7.mixinextras.sugar.Local; import org.apache.commons.lang3.mutable.MutableObject; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -71,28 +71,49 @@ public class MixinCraftingService { @Shadow public void addLink(CraftingLink link) {} - @Inject(method = "onServerEndTick", at = @At("TAIL")) - private void tickAdvClusters(CallbackInfo ci) { - var previouslyCrafting = this.currentlyCrafting; + @Shadow + private long lastProcessedCraftingLogicChangeTick; + + @Inject( + method = "onServerEndTick", + at = + @At( + value = "FIELD", + target = "Lappeng/me/service/CraftingService;lastProcessedCraftingLogicChangeTick:J", + opcode = Opcodes.GETFIELD, + ordinal = 0)) + private void tickAdvClusters1(CallbackInfo ci, @Local long latestChange) { + long latestChangeLocal = 0; for (var cluster : this.advancedAE$advCraftingCPUClusters) { if (cluster != null) { for (var cpu : cluster.getActiveCPUs()) { cpu.craftingLogic.tickCraftingLogic(energyGrid, (CraftingService) (Object) this); - cpu.craftingLogic.getAllWaitingFor(this.currentlyCrafting); + latestChangeLocal = Math.max(latestChangeLocal, cpu.craftingLogic.getLastModifiedOnTick()); } } } - // Notify watchers about items no longer being crafted - var changed = new HashSet(); - changed.addAll(Sets.difference(previouslyCrafting, currentlyCrafting)); - changed.addAll(Sets.difference(currentlyCrafting, previouslyCrafting)); - for (var what : changed) { - for (var watcher : interestManager.get(what)) { - watcher.getHost().onRequestChange(what); - } - for (var watcher : interestManager.getAllStacksWatchers()) { - watcher.getHost().onRequestChange(what); + if (latestChangeLocal > latestChange) { + // our crafting CPUs did something, fire notifications + this.lastProcessedCraftingLogicChangeTick = -1; + } + } + + @Inject( + method = "onServerEndTick", + at = + @At( + value = "FIELD", + target = + "Lappeng/me/service/CraftingService;interests:Lcom/google/common/collect/Multimap;", + opcode = Opcodes.GETFIELD, + ordinal = 0)) + private void tickAdvClusters2(CallbackInfo ci) { + for (var cluster : this.advancedAE$advCraftingCPUClusters) { + if (cluster != null) { + for (var cpu : cluster.getActiveCPUs()) { + cpu.craftingLogic.getAllWaitingFor(this.currentlyCrafting); + } } } }