generated from SettingDust/FabricKotlinTemplate
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: wrong logic of task test result & remove unused mixin on newer h…
…eracles
- Loading branch information
1 parent
cf4b947
commit 4ff73d5
Showing
4 changed files
with
7 additions
and
111 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
110 changes: 2 additions & 108 deletions
110
mod/src/main/java/settingdust/heraclesforvillagers/mixin/QuestsProgressMixin.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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())); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters