diff --git a/mod/build.gradle.kts b/mod/build.gradle.kts index dc97e17..4ba93c0 100644 --- a/mod/build.gradle.kts +++ b/mod/build.gradle.kts @@ -74,6 +74,8 @@ dependencies { modRuntimeOnly(catalog.jade) modRuntimeOnly(catalog.reputation) + + modRuntimeOnly("maven.modrinth:beans-backpacks:20.1-2.0.2") } java { diff --git a/mod/src/main/java/settingdust/heraclesforvillagers/mixin/QuestsProgressMixin.java b/mod/src/main/java/settingdust/heraclesforvillagers/mixin/QuestsProgressMixin.java index 4ee2fd2..87f17a2 100644 --- a/mod/src/main/java/settingdust/heraclesforvillagers/mixin/QuestsProgressMixin.java +++ b/mod/src/main/java/settingdust/heraclesforvillagers/mixin/QuestsProgressMixin.java @@ -1,21 +1,7 @@ package settingdust.heraclesforvillagers.mixin; -import com.llamalad7.mixinextras.sugar.Local; -import com.llamalad7.mixinextras.sugar.Share; -import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef; -import com.llamalad7.mixinextras.sugar.ref.LocalRef; -import com.mojang.serialization.Codec; -import earth.terrarium.heracles.api.quests.Quest; -import earth.terrarium.heracles.api.tasks.QuestTask; import earth.terrarium.heracles.api.tasks.QuestTaskType; import earth.terrarium.heracles.common.handlers.progress.QuestsProgress; -import earth.terrarium.heracles.common.handlers.quests.QuestHandler; -import earth.terrarium.heracles.common.network.NetworkHandler; -import earth.terrarium.heracles.common.network.packets.quests.ClientboundUpdateQuestPacket; -import earth.terrarium.heracles.common.network.packets.quests.data.NetworkQuestData; -import net.minecraft.nbt.NbtElement; -import net.minecraft.nbt.NbtOps; -import net.minecraft.registry.RegistryOps; import net.minecraft.server.network.ServerPlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -23,110 +9,18 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import settingdust.heraclesforvillagers.EntrypointKt; -import java.util.Objects; - @Mixin(value = QuestsProgress.class) public class QuestsProgressMixin { @Inject( method = "testAndProgressTaskType", at = @At( value = "INVOKE", - target = "Learth/terrarium/heracles/common/handlers/progress/QuestsProgress;sendOutQuestComplete" + - "(Learth/terrarium/heracles/api/quests/QuestEntry;" + - "Lnet/minecraft/server/network/ServerPlayerEntity;)V" + target = "Learth/terrarium/heracles/common/handlers/progress/QuestsProgress;sendOutQuestComplete(Learth/terrarium/heracles/api/quests/QuestEntry;Lnet/minecraft/server/network/ServerPlayerEntity;)V" ) ) - private void heraclesForVillagers( + private void heraclesforvillagers$getTestResult( final ServerPlayerEntity player, final I input, final QuestTaskType taskType, final CallbackInfo ci ) { EntrypointKt.setTaskTestFlag(true); } - - @Inject( - method = "testAndProgressTaskType", - at = - @At( - value = "INVOKE", - target = - "Learth/terrarium/heracles/common/handlers/progress/TaskProgress;progress()" + - "Lnet/minecraft/nbt/NbtElement;", - ordinal = 0 - ) - ) - private void saveBeforeTask( - ServerPlayerEntity player, - Object input, - QuestTaskType taskType, - CallbackInfo ci, - @Local String id, - @Local QuestTask task, - @Share("beforeTask") LocalRef beforeTask - ) { - Codec> codec = - (Codec>) task.type().codec(task.id()); - beforeTask.set(codec.encodeStart( - RegistryOps.of(NbtOps.INSTANCE, player.getWorld().getRegistryManager()), task) - .result() - .orElseThrow()); - } - - @Inject( - method = "testAndProgressTaskType", - at = - @At( - value = "INVOKE", - target = - "Learth/terrarium/heracles/common/handlers/progress/TaskProgress;progress()" + - "Lnet/minecraft/nbt/NbtElement;", - ordinal = 1 - ) - ) - private void compareTask( - ServerPlayerEntity player, - Object input, - QuestTaskType taskType, - CallbackInfo ci, - @Local String id, - @Local QuestTask task, - @Share("needSync") LocalBooleanRef needSync, - @Share("beforeTask") LocalRef beforeTask - ) { - Codec> codec = - (Codec>) task.type().codec(task.id()); - final var afterTask = codec.encodeStart( - RegistryOps.of(NbtOps.INSTANCE, player.getWorld().getRegistryManager()), task) - .result() - .orElseThrow(); - if (!afterTask.equals(beforeTask)) { - QuestHandler.markDirty(id); - needSync.set(true); - } - } - - @Inject( - method = "testAndProgressTaskType", - at = - @At( - value = "INVOKE", - remap = false, - target = - "Learth/terrarium/heracles/common/handlers/progress/QuestProgress;update" + - "(Learth/terrarium/heracles/api/quests/Quest;)V" - ) - ) - private void saveQuest( - ServerPlayerEntity player, - Object input, - QuestTaskType taskType, - CallbackInfo ci, - @Local String id, - @Local Quest quest, - @Share("needSync") LocalBooleanRef needSync - ) { - if (needSync.get()) { - var packet = new ClientboundUpdateQuestPacket( - id, NetworkQuestData.builder().tasks(quest.tasks()).build()); - NetworkHandler.CHANNEL.sendToAllPlayers(packet, Objects.requireNonNull(player.getServer())); - } - } } diff --git a/mod/src/main/kotlin/settingdust/heraclesforvillagers/Entrypoint.kt b/mod/src/main/kotlin/settingdust/heraclesforvillagers/Entrypoint.kt index 83ee3a6..8e28caf 100644 --- a/mod/src/main/kotlin/settingdust/heraclesforvillagers/Entrypoint.kt +++ b/mod/src/main/kotlin/settingdust/heraclesforvillagers/Entrypoint.kt @@ -38,9 +38,11 @@ fun init() { UseEntityCallback.EVENT.register { player, _, _, entity, _ -> if (player !is ServerPlayerEntity) return@register ActionResult.PASS + taskTestFlag = false if (entity is VillagerEntity) QuestProgressHandler.getProgress(player.server, player.uuid) .testAndProgressTaskType(player, Pair(player, entity), VillagerInteractTask.TYPE) + if (compatGuardVillager && entity is GuardEntity) QuestProgressHandler.getProgress(player.server, player.uuid) .testAndProgressTaskType( @@ -49,10 +51,8 @@ fun init() { GuardVillagerInteractTask.TYPE ) return@register if (taskTestFlag) { - taskTestFlag = false ActionResult.SUCCESS } else { - taskTestFlag = true ActionResult.PASS } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 24fbe39..2b896fb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,7 +12,7 @@ dependencyResolutionManagement.versionCatalogs.named("catalog") { * ************ */ // https://modrinth.com/mod/heracles/versions - val heracles = "1.1.12" + val heracles = "1.1.13" library("heracles-fabric", "maven.modrinth", "heracles").version("$heracles-fabric") library("heracles-forge", "maven.modrinth", "heracles").version("$heracles-forge")