Executions can now be cancelled, Properly implemented gripping progress bar, recovery timer is paused while getting carried, some bug fixes

This commit is contained in:
IM23a-spirgif
2025-04-27 22:03:13 +02:00
parent 9e6b1af77e
commit f803d277e0
4 changed files with 33 additions and 13 deletions
@@ -10,7 +10,6 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.event.entity.EntityMountEvent; import net.minecraftforge.event.entity.EntityMountEvent;
import net.minecraft.network.protocol.game.ClientboundSetPassengersPacket; import net.minecraft.network.protocol.game.ClientboundSetPassengersPacket;
import net.minecraftforge.network.PacketDistributor;
import java.util.*; import java.util.*;
@@ -61,17 +60,13 @@ public class CarryManager {
private static void stopCarry(Player knocked, ServerPlayer carrier) { private static void stopCarry(Player knocked, ServerPlayer carrier) {
knocked.stopRiding();
carrying.remove(knocked.getUUID()); carrying.remove(knocked.getUUID());
ClientboundSetPassengersPacket dismount = new ClientboundSetPassengersPacket(carrier); knocked.stopRiding();
NetworkHandler.CHANNEL.send( ClientboundSetPassengersPacket dismountPacket = new ClientboundSetPassengersPacket(carrier);
PacketDistributor.TRACKING_ENTITY.with(() -> carrier), carrier.connection.send(dismountPacket);
dismount if (knocked instanceof ServerPlayer spKnocked) {
); spKnocked.connection.send(dismountPacket);
NetworkHandler.CHANNEL.send( }
PacketDistributor.PLAYER.with(() -> carrier),
dismount
);
carrier.sendSystemMessage(Component.literal("Dropped " + knocked.getName().getString())); carrier.sendSystemMessage(Component.literal("Dropped " + knocked.getName().getString()));
knocked.sendSystemMessage(Component.literal("You have been dropped")); knocked.sendSystemMessage(Component.literal("You have been dropped"));
} }
@@ -6,6 +6,7 @@ import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import java.util.UUID;
import java.util.function.Supplier; import java.util.function.Supplier;
public class ExecuteKnockedPacket { public class ExecuteKnockedPacket {
@@ -24,8 +25,13 @@ public class ExecuteKnockedPacket {
if (executor == null) return; if (executor == null) return;
LivingEntity target = findNearestKnockedEntity(executor); LivingEntity target = findNearestKnockedEntity(executor);
if (target != null) { if (target != null) {
if (target instanceof Player targetPlayer) { if (target instanceof Player tp) {
PlayerExecutionHandler.startExecution(executor, targetPlayer); UUID tid = tp.getUUID();
if (PlayerExecutionHandler.isBeingPlayerExecuted(tid)) {
PlayerExecutionHandler.cancelExecution(tid);
} else {
PlayerExecutionHandler.startExecution(executor, tp);
}
} }
} }
}); });
@@ -65,6 +65,17 @@ public class KnockedManager {
Map.Entry<UUID, Integer> entry = it.next(); Map.Entry<UUID, Integer> entry = it.next();
UUID playerId = entry.getKey(); UUID playerId = entry.getKey();
int timeLeft = entry.getValue(); int timeLeft = entry.getValue();
if ( grippedEntities.contains(playerId)
|| CarryManager.isBeingCarried(playerId) ) {
ServerPlayer p = NetworkHandlerHelper.getPlayerByUuid(server, playerId);
if (p != null) {
NetworkHandler.CHANNEL.send(
PacketDistributor.PLAYER.with(() -> p),
new KnockedTimePacket(timeLeft)
);
}
continue;
}
if (MobKillHandler.isBeingMobExecuted(playerId) if (MobKillHandler.isBeingMobExecuted(playerId)
|| PlayerExecutionHandler.isBeingPlayerExecuted(playerId)) { || PlayerExecutionHandler.isBeingPlayerExecuted(playerId)) {
ServerPlayer p = NetworkHandlerHelper.getPlayerByUuid(server, playerId); ServerPlayer p = NetworkHandlerHelper.getPlayerByUuid(server, playerId);
@@ -84,10 +84,18 @@ public class PlayerExecutionHandler {
ServerPlayer knocked = getPlayerByUuid(knockedId); ServerPlayer knocked = getPlayerByUuid(knockedId);
if (knocked != null) { if (knocked != null) {
knocked.sendSystemMessage(Component.literal("Execution interrupted!")); knocked.sendSystemMessage(Component.literal("Execution interrupted!"));
NetworkHandler.CHANNEL.send(
PacketDistributor.PLAYER.with(() -> knocked),
new ExecutionProgressPacket(0)
);
} }
ServerPlayer executor = getPlayerByUuid(attempt.executorUuid); ServerPlayer executor = getPlayerByUuid(attempt.executorUuid);
if (executor != null) { if (executor != null) {
executor.sendSystemMessage(Component.literal("Your execution was interrupted!")); executor.sendSystemMessage(Component.literal("Your execution was interrupted!"));
NetworkHandler.CHANNEL.send(
PacketDistributor.PLAYER.with(() -> executor),
new ExecutionProgressPacket(0)
);
} }
} }
} }