diff --git a/src/main/java/net/fretux/knockedback/CarryManager.java b/src/main/java/net/fretux/knockedback/CarryManager.java index 6624ae3..d8fdaf7 100644 --- a/src/main/java/net/fretux/knockedback/CarryManager.java +++ b/src/main/java/net/fretux/knockedback/CarryManager.java @@ -10,7 +10,6 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.event.entity.EntityMountEvent; import net.minecraft.network.protocol.game.ClientboundSetPassengersPacket; -import net.minecraftforge.network.PacketDistributor; import java.util.*; @@ -61,17 +60,13 @@ public class CarryManager { private static void stopCarry(Player knocked, ServerPlayer carrier) { - knocked.stopRiding(); carrying.remove(knocked.getUUID()); - ClientboundSetPassengersPacket dismount = new ClientboundSetPassengersPacket(carrier); - NetworkHandler.CHANNEL.send( - PacketDistributor.TRACKING_ENTITY.with(() -> carrier), - dismount - ); - NetworkHandler.CHANNEL.send( - PacketDistributor.PLAYER.with(() -> carrier), - dismount - ); + knocked.stopRiding(); + ClientboundSetPassengersPacket dismountPacket = new ClientboundSetPassengersPacket(carrier); + carrier.connection.send(dismountPacket); + if (knocked instanceof ServerPlayer spKnocked) { + spKnocked.connection.send(dismountPacket); + } carrier.sendSystemMessage(Component.literal("Dropped " + knocked.getName().getString())); knocked.sendSystemMessage(Component.literal("You have been dropped")); } diff --git a/src/main/java/net/fretux/knockedback/ExecuteKnockedPacket.java b/src/main/java/net/fretux/knockedback/ExecuteKnockedPacket.java index 5aefb7e..07ce0e9 100644 --- a/src/main/java/net/fretux/knockedback/ExecuteKnockedPacket.java +++ b/src/main/java/net/fretux/knockedback/ExecuteKnockedPacket.java @@ -6,6 +6,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraftforge.network.NetworkEvent; +import java.util.UUID; import java.util.function.Supplier; public class ExecuteKnockedPacket { @@ -24,8 +25,13 @@ public class ExecuteKnockedPacket { if (executor == null) return; LivingEntity target = findNearestKnockedEntity(executor); if (target != null) { - if (target instanceof Player targetPlayer) { - PlayerExecutionHandler.startExecution(executor, targetPlayer); + if (target instanceof Player tp) { + UUID tid = tp.getUUID(); + if (PlayerExecutionHandler.isBeingPlayerExecuted(tid)) { + PlayerExecutionHandler.cancelExecution(tid); + } else { + PlayerExecutionHandler.startExecution(executor, tp); + } } } }); diff --git a/src/main/java/net/fretux/knockedback/KnockedManager.java b/src/main/java/net/fretux/knockedback/KnockedManager.java index 34dd0ae..96eaed4 100644 --- a/src/main/java/net/fretux/knockedback/KnockedManager.java +++ b/src/main/java/net/fretux/knockedback/KnockedManager.java @@ -65,6 +65,17 @@ public class KnockedManager { Map.Entry entry = it.next(); UUID playerId = entry.getKey(); 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) || PlayerExecutionHandler.isBeingPlayerExecuted(playerId)) { ServerPlayer p = NetworkHandlerHelper.getPlayerByUuid(server, playerId); diff --git a/src/main/java/net/fretux/knockedback/PlayerExecutionHandler.java b/src/main/java/net/fretux/knockedback/PlayerExecutionHandler.java index e0bab06..8134ec7 100644 --- a/src/main/java/net/fretux/knockedback/PlayerExecutionHandler.java +++ b/src/main/java/net/fretux/knockedback/PlayerExecutionHandler.java @@ -84,10 +84,18 @@ public class PlayerExecutionHandler { ServerPlayer knocked = getPlayerByUuid(knockedId); if (knocked != null) { knocked.sendSystemMessage(Component.literal("Execution interrupted!")); + NetworkHandler.CHANNEL.send( + PacketDistributor.PLAYER.with(() -> knocked), + new ExecutionProgressPacket(0) + ); } ServerPlayer executor = getPlayerByUuid(attempt.executorUuid); if (executor != null) { executor.sendSystemMessage(Component.literal("Your execution was interrupted!")); + NetworkHandler.CHANNEL.send( + PacketDistributor.PLAYER.with(() -> executor), + new ExecutionProgressPacket(0) + ); } } }