From 4018b122dcf0f5a1678bdbc141db9844092b6b89 Mon Sep 17 00:00:00 2001 From: illuc Date: Wed, 25 Feb 2026 21:17:19 +0200 Subject: [PATCH] fixed occasional crashes with offline players and readded oxygen loss on sprinting/jumping --- .../events/OfflinePlayerEvents.java | 38 ++++++++++--------- .../events/RunOutOfBreathEvents.java | 28 ++++++++++++++ 2 files changed, 48 insertions(+), 18 deletions(-) create mode 100644 src/main/java/xyz/illuc/neuralgiacore/events/RunOutOfBreathEvents.java diff --git a/src/main/java/xyz/illuc/neuralgiacore/events/OfflinePlayerEvents.java b/src/main/java/xyz/illuc/neuralgiacore/events/OfflinePlayerEvents.java index b51ffa5..fa346c4 100644 --- a/src/main/java/xyz/illuc/neuralgiacore/events/OfflinePlayerEvents.java +++ b/src/main/java/xyz/illuc/neuralgiacore/events/OfflinePlayerEvents.java @@ -23,7 +23,7 @@ public class OfflinePlayerEvents { public static void onPlayerLogOut(PlayerEvent.PlayerLoggedOutEvent event) { ServerPlayer player = (ServerPlayer) event.getEntity(); - System.out.println("event triggered"); + //System.out.println("event triggered"); player.level().addFreshEntity(OfflinePlayerEntity.createFromPlayer(player)); } @@ -34,14 +34,14 @@ public class OfflinePlayerEvents { return; } ServerPlayer player = (ServerPlayer) event.getEntity(); - System.out.println("event triggered"); + //System.out.println("event triggered"); boolean foundPlayer = false; for (ServerLevel world : player.level().getServer().getAllLevels()) { Optional persistentPlayer = findPersistentPlayer(world, player.getUUID()); if (persistentPlayer.isPresent()) { - System.out.println("Player present"); + //System.out.println("Player present"); OfflinePlayerEntity p = persistentPlayer.get(); p.toPlayer(player); p.remove(Entity.RemovalReason.DISCARDED); @@ -50,7 +50,7 @@ public class OfflinePlayerEvents { } } if (!foundPlayer) { - System.out.println("Player not found!"); + //System.out.println("Player not found!"); } } @@ -88,21 +88,23 @@ public class OfflinePlayerEvents { float passDamage = damage; - ph.applyPain(randLimb, ph.painFromDamage((float)((double)passDamage * (Math.random() / (double)2.0F + (double)1.0F)))); - ph.applyMuscleDamage(randLimb, (float)((double)passDamage * (Math.random() / (double)2.0F + (double)0.5F)), (Player) event.getSource().getEntity()); - ph.applySkinDamage(randLimb, (float)((double)passDamage * (Math.random() / (double)2.0F + (double)0.5F))); - if (Math.random() < (double)i * 0.2) { - ph.applyPain(randLimb, ph.painFromDamage((float)((double)passDamage * (Math.random() / (double)2.0F + (double)1.5F)))); - ph.applyMuscleDamage(randLimb, (float)((double)passDamage * (Math.random() / (double)2.0F + (double)0.7F)), (Player) event.getSource().getEntity()); - ph.applySkinDamage(randLimb, (float)((double)passDamage * (Math.random() / (double)2.0F + (double)0.7F))); - ph.applyBleedDamage(randLimb, (float)((double)passDamage * (Math.random() / (double)2.0F + (double)0.7F)), null); - damage -= damage_pass; - } + if (event.getSource().getEntity() instanceof Player fp) { //pmo why do some damage things need a player and some dont + ph.applyPain(randLimb, ph.painFromDamage((float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 1.0F)))); + ph.applyMuscleDamage(randLimb, (float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 0.5F)), fp); + ph.applySkinDamage(randLimb, (float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 0.5F))); + if (Math.random() < (double) i * 0.2) { + ph.applyPain(randLimb, ph.painFromDamage((float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 1.5F)))); + ph.applyMuscleDamage(randLimb, (float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 0.7F)), fp); + ph.applySkinDamage(randLimb, (float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 0.7F))); + ph.applyBleedDamage(randLimb, (float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 0.7F)), fp); + damage -= damage_pass; + } - damage -= damage_pass; - boolean amputated = ph.handleAmputation(randLimb, passDamage, 26.0F, (Player) event.getSource().getEntity()); - if (amputated) { - damage /= 4.0F; + damage -= damage_pass; + boolean amputated = ph.handleAmputation(randLimb, passDamage, 26.0F, fp); + if (amputated) { + damage /= 4.0F; + } } } diff --git a/src/main/java/xyz/illuc/neuralgiacore/events/RunOutOfBreathEvents.java b/src/main/java/xyz/illuc/neuralgiacore/events/RunOutOfBreathEvents.java new file mode 100644 index 0000000..280447e --- /dev/null +++ b/src/main/java/xyz/illuc/neuralgiacore/events/RunOutOfBreathEvents.java @@ -0,0 +1,28 @@ +package xyz.illuc.neuralgiacore.events; + +import net.adinvas.prototype_pain.PlayerHealthProvider; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +public class RunOutOfBreathEvents { + @SubscribeEvent + public static void onLivingJumpEvent(LivingEvent.LivingJumpEvent event) { + if (!(event.getEntity() instanceof ServerPlayer player))return; + player.getCapability(PlayerHealthProvider.PLAYER_HEALTH_DATA, null).ifPresent(cap-> { + cap.setOxygen(cap.getOxygen() - 3); + } ); + + } + + @SubscribeEvent + public static void onSprintEvent(TickEvent.PlayerTickEvent event) { + if (!(event.player instanceof ServerPlayer player))return; + player.getCapability(PlayerHealthProvider.PLAYER_HEALTH_DATA, null).ifPresent(cap-> { + if (player.isSprinting() && !player.isSwimming()){ + cap.setOxygen(cap.getOxygen() - 0.15f); + } + }); + } +}