refactor execution handling and add missing validation checks

This commit is contained in:
2026-05-20 13:42:33 +02:00
parent 4f2b169495
commit 25d0ae5229
8 changed files with 24 additions and 25 deletions
@@ -6,7 +6,6 @@ import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.event.entity.player.AttackEntityEvent;
@@ -34,6 +33,11 @@ public class PlayerExecutionHandler {
return executionAttempts.values().stream().anyMatch(attempt -> attempt.executorUuid.equals(playerUuid));
}
public static boolean isExecutingTarget(UUID executorId, UUID knockedId) {
PlayerExecutionAttempt attempt = executionAttempts.get(knockedId);
return attempt != null && attempt.executorUuid.equals(executorId);
}
@SubscribeEvent
public static void onPlayerTick(TickEvent.PlayerTickEvent event) {
if (event.side.isServer() && event.phase == TickEvent.Phase.END && event.player instanceof ServerPlayer sp && isExecuting(sp.getUUID())) {
@@ -61,19 +65,15 @@ public class PlayerExecutionHandler {
}
}
public static void register() {
MinecraftForge.EVENT_BUS.register(new PlayerExecutionHandler());
}
public static void startExecution(ServerPlayer executor, Player target) {
if (KnockedManager.isKnocked(executor)) {
executor.sendSystemMessage(Component.translatable("message.knockedback.cannot_carry_while_knocked"));
executor.sendSystemMessage(Component.translatable("message.knockedback.cannot_execute_while_knocked"));
return;
}
UUID knockedId = target.getUUID();
if (!KnockedManager.isKnocked(target)) return;
if (CarryManager.isBeingCarried(target.getUUID())) {
executor.sendSystemMessage(Component.translatable("message.knockedback.cannot_execute_while_knocked"));
executor.sendSystemMessage(Component.translatable("message.knockedback.cannot_execute_carried_player"));
return;
}
if (executionAttempts.containsKey(knockedId)) return;
@@ -124,8 +124,8 @@ public class PlayerExecutionHandler {
public static void executeKnockedPlayer(ServerPlayer executor, LivingEntity knockedPlayer) {
UUID id = knockedPlayer.getUUID();
executionAttempts.remove(id);
KnockedManager.removeKnockedState(knockedPlayer);
cancelExecution(id);
KnockedManager.markKillInProgress(knockedPlayer);
knockedPlayer.kill();
KnockedManager.unmarkKillInProgress(knockedPlayer);
@@ -139,9 +139,9 @@ public class PlayerExecutionHandler {
new ExecutionProgressPacket(0, null)
);
}
executor.sendSystemMessage(Component.translatable("message.knockedback.you_executed", knockedPlayer.getDisplayName(), "!"));
executor.sendSystemMessage(Component.translatable("message.knockedback.you_executed", knockedPlayer.getDisplayName()));
if (knockedPlayer instanceof ServerPlayer serverPlayer) {
serverPlayer.sendSystemMessage(Component.translatable("message.knockedback.you_were_executed", executor.getDisplayName(), "!"));
serverPlayer.sendSystemMessage(Component.translatable("message.knockedback.you_were_executed", executor.getDisplayName()));
}
}