Skip to content

Commit

Permalink
fix: wrong logic of task test result & remove unused mixin on newer h…
Browse files Browse the repository at this point in the history
…eracles
  • Loading branch information
SettingDust committed Aug 9, 2024
1 parent cf4b947 commit 4ff73d5
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 111 deletions.
2 changes: 2 additions & 0 deletions mod/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ dependencies {

modRuntimeOnly(catalog.jade)
modRuntimeOnly(catalog.reputation)

modRuntimeOnly("maven.modrinth:beans-backpacks:20.1-2.0.2")
}

java {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,132 +1,26 @@
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;
import org.spongepowered.asm.mixin.injection.Inject;
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 <I> void heraclesForVillagers(
private <I> 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<NbtElement> beforeTask
) {
Codec<QuestTask<?, ?, ?>> codec =
(Codec<QuestTask<?, ?, ?>>) 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<NbtElement> beforeTask
) {
Codec<QuestTask<?, ?, ?>> codec =
(Codec<QuestTask<?, ?, ?>>) 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()));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -49,10 +51,8 @@ fun init() {
GuardVillagerInteractTask.TYPE
)
return@register if (taskTestFlag) {
taskTestFlag = false
ActionResult.SUCCESS
} else {
taskTestFlag = true
ActionResult.PASS
}
}
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand Down

0 comments on commit 4ff73d5

Please sign in to comment.