refactor execution handling and add missing validation checks
This commit is contained in:
@@ -41,7 +41,9 @@ public class CarryManager {
|
|||||||
.getCommandSenderWorld()
|
.getCommandSenderWorld()
|
||||||
.getEntitiesOfClass(Player.class, box).stream()
|
.getEntitiesOfClass(Player.class, box).stream()
|
||||||
.filter(p -> KnockedManager.isKnocked(p)
|
.filter(p -> KnockedManager.isKnocked(p)
|
||||||
&& !p.getUUID().equals(carrier.getUUID()))
|
&& !p.getUUID().equals(carrier.getUUID())
|
||||||
|
&& !isBeingCarried(p.getUUID())
|
||||||
|
&& !PlayerExecutionHandler.isBeingPlayerExecuted(p.getUUID()))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ public class ExecuteKnockedPacket {
|
|||||||
if (target instanceof Player tp) {
|
if (target instanceof Player tp) {
|
||||||
UUID tid = tp.getUUID();
|
UUID tid = tp.getUUID();
|
||||||
if (PlayerExecutionHandler.isBeingPlayerExecuted(tid)) {
|
if (PlayerExecutionHandler.isBeingPlayerExecuted(tid)) {
|
||||||
PlayerExecutionHandler.cancelExecution(tid);
|
if (PlayerExecutionHandler.isExecutingTarget(executor.getUUID(), tid)) {
|
||||||
|
PlayerExecutionHandler.cancelExecution(tid);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
PlayerExecutionHandler.startExecution(executor, tp);
|
PlayerExecutionHandler.startExecution(executor, tp);
|
||||||
}
|
}
|
||||||
@@ -47,4 +49,4 @@ public class ExecuteKnockedPacket {
|
|||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
package net.fretux.knockedback;
|
package net.fretux.knockedback;
|
||||||
|
|
||||||
import com.mojang.logging.LogUtils;
|
import com.mojang.logging.LogUtils;
|
||||||
import net.fretux.knockedback.effects.KnockedEffect;
|
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.entity.living.LivingDeathEvent;
|
import net.minecraftforge.event.entity.living.LivingDeathEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.ModLoadingContext;
|
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.event.server.ServerStartingEvent;
|
import net.minecraftforge.event.server.ServerStartingEvent;
|
||||||
import net.minecraftforge.fml.config.ModConfig;
|
import net.minecraftforge.fml.config.ModConfig;
|
||||||
@@ -22,18 +20,15 @@ public class KnockedBack {
|
|||||||
public static final String MOD_ID = "knockedback";
|
public static final String MOD_ID = "knockedback";
|
||||||
private static final Logger LOGGER = LogUtils.getLogger();
|
private static final Logger LOGGER = LogUtils.getLogger();
|
||||||
|
|
||||||
public KnockedBack() {
|
public KnockedBack(FMLJavaModLoadingContext context) {
|
||||||
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.COMMON_SPEC);
|
context.registerConfig(ModConfig.Type.COMMON, Config.COMMON_SPEC);
|
||||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
|
context.getModEventBus().addListener(this::setup);
|
||||||
MinecraftForge.EVENT_BUS.register(this);
|
MinecraftForge.EVENT_BUS.register(this);
|
||||||
MinecraftForge.EVENT_BUS.register(new KnockedEffect());
|
|
||||||
MinecraftForge.EVENT_BUS.register(new MobKillHandler());
|
MinecraftForge.EVENT_BUS.register(new MobKillHandler());
|
||||||
MinecraftForge.EVENT_BUS.register(new PlayerExecutionHandler());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setup(final FMLCommonSetupEvent event) {
|
private void setup(final FMLCommonSetupEvent event) {
|
||||||
NetworkHandler.register();
|
NetworkHandler.register();
|
||||||
PlayerExecutionHandler.register();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import net.minecraft.resources.ResourceLocation;
|
|||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.entity.living.LivingHurtEvent;
|
import net.minecraftforge.event.entity.living.LivingHurtEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
|
||||||
import net.minecraftforge.network.PacketDistributor;
|
import net.minecraftforge.network.PacketDistributor;
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
|
||||||
@@ -21,7 +20,6 @@ import java.util.*;
|
|||||||
import static net.fretux.knockedback.KnockedManager.removeKnockedState;
|
import static net.fretux.knockedback.KnockedManager.removeKnockedState;
|
||||||
import static net.fretux.knockedback.KnockedManager.setGripped;
|
import static net.fretux.knockedback.KnockedManager.setGripped;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(modid = KnockedBack.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE)
|
|
||||||
public class MobKillHandler {
|
public class MobKillHandler {
|
||||||
public static int getExecutionTime() {
|
public static int getExecutionTime() {
|
||||||
return Config.COMMON.executionTime.get();
|
return Config.COMMON.executionTime.get();
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public class NetworkHandler {
|
|||||||
public static final String PROTOCOL_VERSION = "1";
|
public static final String PROTOCOL_VERSION = "1";
|
||||||
public static SimpleChannel CHANNEL;
|
public static SimpleChannel CHANNEL;
|
||||||
public static void register() {
|
public static void register() {
|
||||||
CHANNEL = NetworkRegistry.newSimpleChannel(new ResourceLocation(KnockedBack.MOD_ID, "main"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals);
|
CHANNEL = NetworkRegistry.newSimpleChannel(ResourceLocation.fromNamespaceAndPath(KnockedBack.MOD_ID, "main"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals);
|
||||||
int id = 0;
|
int id = 0;
|
||||||
CHANNEL.registerMessage(id++, ExecuteKnockedPacket.class, ExecuteKnockedPacket::encode, ExecuteKnockedPacket::decode, ExecuteKnockedPacket::handle);
|
CHANNEL.registerMessage(id++, ExecuteKnockedPacket.class, ExecuteKnockedPacket::encode, ExecuteKnockedPacket::decode, ExecuteKnockedPacket::handle);
|
||||||
CHANNEL.registerMessage(id++, KnockedTimePacket.class, KnockedTimePacket::encode, KnockedTimePacket::decode, KnockedTimePacket::handle);
|
CHANNEL.registerMessage(id++, KnockedTimePacket.class, KnockedTimePacket::encode, KnockedTimePacket::decode, KnockedTimePacket::handle);
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import net.minecraft.server.MinecraftServer;
|
|||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.entity.living.LivingHurtEvent;
|
import net.minecraftforge.event.entity.living.LivingHurtEvent;
|
||||||
import net.minecraftforge.event.entity.player.AttackEntityEvent;
|
import net.minecraftforge.event.entity.player.AttackEntityEvent;
|
||||||
@@ -34,6 +33,11 @@ public class PlayerExecutionHandler {
|
|||||||
return executionAttempts.values().stream().anyMatch(attempt -> attempt.executorUuid.equals(playerUuid));
|
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
|
@SubscribeEvent
|
||||||
public static void onPlayerTick(TickEvent.PlayerTickEvent event) {
|
public static void onPlayerTick(TickEvent.PlayerTickEvent event) {
|
||||||
if (event.side.isServer() && event.phase == TickEvent.Phase.END && event.player instanceof ServerPlayer sp && isExecuting(sp.getUUID())) {
|
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) {
|
public static void startExecution(ServerPlayer executor, Player target) {
|
||||||
if (KnockedManager.isKnocked(executor)) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
UUID knockedId = target.getUUID();
|
UUID knockedId = target.getUUID();
|
||||||
if (!KnockedManager.isKnocked(target)) return;
|
if (!KnockedManager.isKnocked(target)) return;
|
||||||
if (CarryManager.isBeingCarried(target.getUUID())) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
if (executionAttempts.containsKey(knockedId)) return;
|
if (executionAttempts.containsKey(knockedId)) return;
|
||||||
@@ -124,8 +124,8 @@ public class PlayerExecutionHandler {
|
|||||||
|
|
||||||
public static void executeKnockedPlayer(ServerPlayer executor, LivingEntity knockedPlayer) {
|
public static void executeKnockedPlayer(ServerPlayer executor, LivingEntity knockedPlayer) {
|
||||||
UUID id = knockedPlayer.getUUID();
|
UUID id = knockedPlayer.getUUID();
|
||||||
|
executionAttempts.remove(id);
|
||||||
KnockedManager.removeKnockedState(knockedPlayer);
|
KnockedManager.removeKnockedState(knockedPlayer);
|
||||||
cancelExecution(id);
|
|
||||||
KnockedManager.markKillInProgress(knockedPlayer);
|
KnockedManager.markKillInProgress(knockedPlayer);
|
||||||
knockedPlayer.kill();
|
knockedPlayer.kill();
|
||||||
KnockedManager.unmarkKillInProgress(knockedPlayer);
|
KnockedManager.unmarkKillInProgress(knockedPlayer);
|
||||||
@@ -139,9 +139,9 @@ public class PlayerExecutionHandler {
|
|||||||
new ExecutionProgressPacket(0, null)
|
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) {
|
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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
"message.knockedback.cannot_carry_while_knocked": "Du kannst niemanden tragen, während du betäubt bist!",
|
"message.knockedback.cannot_carry_while_knocked": "Du kannst niemanden tragen, während du betäubt bist!",
|
||||||
"message.knockedback.cannot_execute_while_knocked": "Du kannst niemanden hinrichten, während du betäubt bist!",
|
"message.knockedback.cannot_execute_while_knocked": "Du kannst niemanden hinrichten, während du betäubt bist!",
|
||||||
|
"message.knockedback.cannot_execute_carried_player": "Du kannst keinen Spieler hinrichten, der getragen wird!",
|
||||||
|
|
||||||
"message.knockedback.execution_started": "Hinrichtung gestartet...",
|
"message.knockedback.execution_started": "Hinrichtung gestartet...",
|
||||||
"message.knockedback.being_executed": "Du wirst hingerichtet!",
|
"message.knockedback.being_executed": "Du wirst hingerichtet!",
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
"key.categories.knockedback": "Knockedback Controls",
|
"key.categories.knockedback": "Knockedback Controls",
|
||||||
"message.knockedback.cannot_carry_while_knocked": "You cannot carry others while you are knocked!",
|
"message.knockedback.cannot_carry_while_knocked": "You cannot carry others while you are knocked!",
|
||||||
"message.knockedback.cannot_execute_while_knocked": "You cannot execute others while you are knocked!",
|
"message.knockedback.cannot_execute_while_knocked": "You cannot execute others while you are knocked!",
|
||||||
|
"message.knockedback.cannot_execute_carried_player": "You cannot execute a player who is being carried!",
|
||||||
"message.knockedback.picked_up": "Picked up %s",
|
"message.knockedback.picked_up": "Picked up %s",
|
||||||
"message.knockedback.being_carried": "You are being carried by %s",
|
"message.knockedback.being_carried": "You are being carried by %s",
|
||||||
"message.knockedback.dropped": "Dropped %s",
|
"message.knockedback.dropped": "Dropped %s",
|
||||||
@@ -16,4 +17,4 @@
|
|||||||
"message.knockedback.you_were_executed": "You were executed by %s!",
|
"message.knockedback.you_were_executed": "You were executed by %s!",
|
||||||
"overlay.knockedback.recovery_time": "Time until recovery: %s s",
|
"overlay.knockedback.recovery_time": "Time until recovery: %s s",
|
||||||
"death.attack.knockedback_execution": "%1$s was executed mercilessly."
|
"death.attack.knockedback_execution": "%1$s was executed mercilessly."
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user