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:
@@ -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"));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -65,6 +65,17 @@ public class KnockedManager {
|
||||
Map.Entry<UUID, Integer> 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);
|
||||
|
||||
@@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user