implement more config options

This commit is contained in:
2026-07-21 18:55:50 +02:00
parent 19a7187bae
commit f515819369
4 changed files with 35 additions and 2 deletions
+1
View File
@@ -5,6 +5,7 @@ All notable changes since version 1.0.0 are documented in this file.
## Unreleased ## Unreleased
### Added ### 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 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. - 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. - NPC helpers only begin a rescue when they have no hostile target and no living threats remain nearby.
@@ -6,6 +6,10 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player; 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 { public class KnockedbackAdvancements {
private static final String CRITERION = "triggered"; private static final String CRITERION = "triggered";
@@ -37,6 +41,14 @@ public class KnockedbackAdvancements {
ResourceLocation.fromNamespaceAndPath(KnockedBack.MOD_ID, "carry_player_10"); ResourceLocation.fromNamespaceAndPath(KnockedBack.MOD_ID, "carry_player_10");
public static final ResourceLocation CARRY_PLAYER_50 = public static final ResourceLocation CARRY_PLAYER_50 =
ResourceLocation.fromNamespaceAndPath(KnockedBack.MOD_ID, "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) { public static void award(ServerPlayer player, ResourceLocation advancementId) {
MinecraftServer server = player.getServer(); MinecraftServer server = player.getServer();
@@ -74,6 +86,17 @@ public class KnockedbackAdvancements {
awardAt(player, count, 50, CARRY_PLAYER_50); 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) { private static void awardAt(ServerPlayer player, int count, int threshold, ResourceLocation advancementId) {
if (count >= threshold) { if (count >= threshold) {
award(player, advancementId); award(player, advancementId);
@@ -87,6 +87,7 @@ public final class NpcHelpUpHandler {
helper.getNavigation().stop(); helper.getNavigation().stop();
KnockedManager.removeKnockedState(player); KnockedManager.removeKnockedState(player);
player.heal(Config.COMMON.npcHelpUpHealAmount.get().floatValue()); player.heal(Config.COMMON.npcHelpUpHealAmount.get().floatValue());
KnockedbackAdvancements.recordNpcRescue(player, helper);
} }
private static Mob findHelper(ServerPlayer player) { private static Mob findHelper(ServerPlayer player) {
@@ -36,7 +36,7 @@
"advancements.knockedback.knocked.description": "Enter the knocked state.", "advancements.knockedback.knocked.description": "Enter the knocked state.",
"advancements.knockedback.knocked_10.title": "Built Different", "advancements.knockedback.knocked_10.title": "Built Different",
"advancements.knockedback.knocked_10.description": "Enter the knocked state 10 times.", "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.knocked_50.description": "Enter the knocked state 50 times.",
"advancements.knockedback.execute_player.title": "Coup de Grace", "advancements.knockedback.execute_player.title": "Coup de Grace",
"advancements.knockedback.execute_player.description": "Execute a knocked player.", "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.title": "Evac Team",
"advancements.knockedback.carry_player_10.description": "Carry 10 knocked players.", "advancements.knockedback.carry_player_10.description": "Carry 10 knocked players.",
"advancements.knockedback.carry_player_50.title": "Extraction Expert", "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."
} }