From f515819369a705f47f6b9ea744011567eb459a73 Mon Sep 17 00:00:00 2001 From: fretuks Date: Tue, 21 Jul 2026 18:55:50 +0200 Subject: [PATCH] implement more config options --- changelog.md | 1 + .../knockedback/KnockedbackAdvancements.java | 23 +++++++++++++++++++ .../fretux/knockedback/NpcHelpUpHandler.java | 1 + .../assets/knockedback/lang/en_us.json | 12 ++++++++-- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/changelog.md b/changelog.md index 6bd3e33..b8cff7e 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,7 @@ All notable changes since version 1.0.0 are documented in this file. ## Unreleased ### Added +- Added achievements for being rescued by an NPC, owned pet, friendly villager, or iron golem. - Added separate configuration for mob execution time, executor movement, and knocked-player movement. - Added configurable NPC help-up behavior for owned pets, friendly villagers, golems, and allowlisted modded NPCs. - NPC helpers only begin a rescue when they have no hostile target and no living threats remain nearby. diff --git a/src/main/java/net/fretux/knockedback/KnockedbackAdvancements.java b/src/main/java/net/fretux/knockedback/KnockedbackAdvancements.java index 4d5b536..8318861 100644 --- a/src/main/java/net/fretux/knockedback/KnockedbackAdvancements.java +++ b/src/main/java/net/fretux/knockedback/KnockedbackAdvancements.java @@ -6,6 +6,10 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.animal.IronGolem; +import net.minecraft.world.entity.npc.Villager; public class KnockedbackAdvancements { private static final String CRITERION = "triggered"; @@ -37,6 +41,14 @@ public class KnockedbackAdvancements { ResourceLocation.fromNamespaceAndPath(KnockedBack.MOD_ID, "carry_player_10"); public static final ResourceLocation CARRY_PLAYER_50 = ResourceLocation.fromNamespaceAndPath(KnockedBack.MOD_ID, "carry_player_50"); + public static final ResourceLocation NPC_RESCUE = + ResourceLocation.fromNamespaceAndPath(KnockedBack.MOD_ID, "npc_rescue"); + public static final ResourceLocation PET_RESCUE = + ResourceLocation.fromNamespaceAndPath(KnockedBack.MOD_ID, "pet_rescue"); + public static final ResourceLocation VILLAGER_RESCUE = + ResourceLocation.fromNamespaceAndPath(KnockedBack.MOD_ID, "villager_rescue"); + public static final ResourceLocation GOLEM_RESCUE = + ResourceLocation.fromNamespaceAndPath(KnockedBack.MOD_ID, "golem_rescue"); public static void award(ServerPlayer player, ResourceLocation advancementId) { MinecraftServer server = player.getServer(); @@ -74,6 +86,17 @@ public class KnockedbackAdvancements { awardAt(player, count, 50, CARRY_PLAYER_50); } + public static void recordNpcRescue(ServerPlayer player, Mob helper) { + award(player, NPC_RESCUE); + if (helper instanceof TamableAnimal) { + award(player, PET_RESCUE); + } else if (helper instanceof Villager) { + award(player, VILLAGER_RESCUE); + } else if (helper instanceof IronGolem) { + award(player, GOLEM_RESCUE); + } + } + private static void awardAt(ServerPlayer player, int count, int threshold, ResourceLocation advancementId) { if (count >= threshold) { award(player, advancementId); diff --git a/src/main/java/net/fretux/knockedback/NpcHelpUpHandler.java b/src/main/java/net/fretux/knockedback/NpcHelpUpHandler.java index 9a04902..627a556 100644 --- a/src/main/java/net/fretux/knockedback/NpcHelpUpHandler.java +++ b/src/main/java/net/fretux/knockedback/NpcHelpUpHandler.java @@ -87,6 +87,7 @@ public final class NpcHelpUpHandler { helper.getNavigation().stop(); KnockedManager.removeKnockedState(player); player.heal(Config.COMMON.npcHelpUpHealAmount.get().floatValue()); + KnockedbackAdvancements.recordNpcRescue(player, helper); } private static Mob findHelper(ServerPlayer player) { diff --git a/src/main/resources/assets/knockedback/lang/en_us.json b/src/main/resources/assets/knockedback/lang/en_us.json index aec7882..9560731 100644 --- a/src/main/resources/assets/knockedback/lang/en_us.json +++ b/src/main/resources/assets/knockedback/lang/en_us.json @@ -36,7 +36,7 @@ "advancements.knockedback.knocked.description": "Enter the knocked state.", "advancements.knockedback.knocked_10.title": "Built Different", "advancements.knockedback.knocked_10.description": "Enter the knocked state 10 times.", - "advancements.knockedback.knocked_50.title": "Refuses to Stay Down", + "advancements.knockedback.knocked_50.title": "I Refuse to Stay Down", "advancements.knockedback.knocked_50.description": "Enter the knocked state 50 times.", "advancements.knockedback.execute_player.title": "Coup de Grace", "advancements.knockedback.execute_player.description": "Execute a knocked player.", @@ -57,5 +57,13 @@ "advancements.knockedback.carry_player_10.title": "Evac Team", "advancements.knockedback.carry_player_10.description": "Carry 10 knocked players.", "advancements.knockedback.carry_player_50.title": "Extraction Expert", - "advancements.knockedback.carry_player_50.description": "Carry 50 knocked players." + "advancements.knockedback.carry_player_50.description": "Carry 50 knocked players.", + "advancements.knockedback.npc_rescue.title": "Help from an Unexpected Place", + "advancements.knockedback.npc_rescue.description": "Be helped up by a friendly NPC.", + "advancements.knockedback.pet_rescue.title": "Who's a Good Medic?", + "advancements.knockedback.pet_rescue.description": "Be helped up by one of your loyal pets.", + "advancements.knockedback.villager_rescue.title": "Reputation Pays", + "advancements.knockedback.villager_rescue.description": "Be helped up by a villager who thinks highly of you.", + "advancements.knockedback.golem_rescue.title": "Artificial Support", + "advancements.knockedback.golem_rescue.description": "Be helped up by an iron golem." }