From b82489f9d30b24702ca94fbf6becd764b6d70df7 Mon Sep 17 00:00:00 2001 From: fretuks Date: Tue, 21 Jul 2026 19:19:51 +0200 Subject: [PATCH] update version number --- changelog.md | 1 + .../fretux/knockedback/NpcHelpUpHandler.java | 24 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index b8cff7e..bf88efc 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 the help-up progress bar when a friendly NPC is reviving the player. - 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. diff --git a/src/main/java/net/fretux/knockedback/NpcHelpUpHandler.java b/src/main/java/net/fretux/knockedback/NpcHelpUpHandler.java index 627a556..d6aab9d 100644 --- a/src/main/java/net/fretux/knockedback/NpcHelpUpHandler.java +++ b/src/main/java/net/fretux/knockedback/NpcHelpUpHandler.java @@ -13,6 +13,7 @@ import net.minecraft.world.phys.AABB; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.registries.ForgeRegistries; import java.util.HashMap; @@ -36,6 +37,9 @@ public final class NpcHelpUpHandler { if (attempt != null) { Mob helper = findMob(attempt.helperId); if (helper != null) helper.getNavigation().stop(); + ServerPlayer player = NetworkHandlerHelper.getPlayerByUuid( + net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer(), playerId); + if (player != null) clearProgress(player); } } @@ -75,7 +79,9 @@ public final class NpcHelpUpHandler { } else { helper.getNavigation().stop(); helper.getLookControl().setLookAt(player, 30.0F, 30.0F); - if (--attempt.timeLeft <= 0) complete(playerId, player, helper); + attempt.timeLeft--; + sendProgress(player, attempt.timeLeft); + if (attempt.timeLeft <= 0) complete(playerId, player, helper); } } @@ -85,11 +91,27 @@ public final class NpcHelpUpHandler { private static void complete(UUID playerId, ServerPlayer player, Mob helper) { ATTEMPTS.remove(playerId); helper.getNavigation().stop(); + clearProgress(player); KnockedManager.removeKnockedState(player); player.heal(Config.COMMON.npcHelpUpHealAmount.get().floatValue()); KnockedbackAdvancements.recordNpcRescue(player, helper); } + private static void sendProgress(ServerPlayer player, int timeLeft) { + NetworkHandler.CHANNEL.send( + PacketDistributor.PLAYER.with(() -> player), + new ExecutionProgressPacket(timeLeft, Config.COMMON.npcHelpUpTime.get(), + ExecutionProgressPacket.Action.HELP_UP, "", null) + ); + } + + private static void clearProgress(ServerPlayer player) { + NetworkHandler.CHANNEL.send( + PacketDistributor.PLAYER.with(() -> player), + new ExecutionProgressPacket(0, 1, ExecutionProgressPacket.Action.NONE, "", null) + ); + } + private static Mob findHelper(ServerPlayer player) { double range = Config.COMMON.npcHelpUpSearchRange.get(); return ((ServerLevel) player.level()).getEntitiesOfClass(Mob.class,