fixed occasional crashes with offline players and readded oxygen loss on sprinting/jumping
This commit is contained in:
parent
6a717093b2
commit
4018b122dc
2 changed files with 48 additions and 18 deletions
|
|
@ -23,7 +23,7 @@ public class OfflinePlayerEvents {
|
||||||
public static void onPlayerLogOut(PlayerEvent.PlayerLoggedOutEvent event) {
|
public static void onPlayerLogOut(PlayerEvent.PlayerLoggedOutEvent event) {
|
||||||
ServerPlayer player = (ServerPlayer) event.getEntity();
|
ServerPlayer player = (ServerPlayer) event.getEntity();
|
||||||
|
|
||||||
System.out.println("event triggered");
|
//System.out.println("event triggered");
|
||||||
|
|
||||||
player.level().addFreshEntity(OfflinePlayerEntity.createFromPlayer(player));
|
player.level().addFreshEntity(OfflinePlayerEntity.createFromPlayer(player));
|
||||||
}
|
}
|
||||||
|
|
@ -34,14 +34,14 @@ public class OfflinePlayerEvents {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ServerPlayer player = (ServerPlayer) event.getEntity();
|
ServerPlayer player = (ServerPlayer) event.getEntity();
|
||||||
System.out.println("event triggered");
|
//System.out.println("event triggered");
|
||||||
|
|
||||||
boolean foundPlayer = false;
|
boolean foundPlayer = false;
|
||||||
for (ServerLevel world : player.level().getServer().getAllLevels()) {
|
for (ServerLevel world : player.level().getServer().getAllLevels()) {
|
||||||
Optional<OfflinePlayerEntity> persistentPlayer = findPersistentPlayer(world, player.getUUID());
|
Optional<OfflinePlayerEntity> persistentPlayer = findPersistentPlayer(world, player.getUUID());
|
||||||
|
|
||||||
if (persistentPlayer.isPresent()) {
|
if (persistentPlayer.isPresent()) {
|
||||||
System.out.println("Player present");
|
//System.out.println("Player present");
|
||||||
OfflinePlayerEntity p = persistentPlayer.get();
|
OfflinePlayerEntity p = persistentPlayer.get();
|
||||||
p.toPlayer(player);
|
p.toPlayer(player);
|
||||||
p.remove(Entity.RemovalReason.DISCARDED);
|
p.remove(Entity.RemovalReason.DISCARDED);
|
||||||
|
|
@ -50,7 +50,7 @@ public class OfflinePlayerEvents {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!foundPlayer) {
|
if (!foundPlayer) {
|
||||||
System.out.println("Player not found!");
|
//System.out.println("Player not found!");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -88,23 +88,25 @@ public class OfflinePlayerEvents {
|
||||||
|
|
||||||
float passDamage = damage;
|
float passDamage = damage;
|
||||||
|
|
||||||
ph.applyPain(randLimb, ph.painFromDamage((float)((double)passDamage * (Math.random() / (double)2.0F + (double)1.0F))));
|
if (event.getSource().getEntity() instanceof Player fp) { //pmo why do some damage things need a player and some dont
|
||||||
ph.applyMuscleDamage(randLimb, (float)((double)passDamage * (Math.random() / (double)2.0F + (double)0.5F)), (Player) event.getSource().getEntity());
|
ph.applyPain(randLimb, ph.painFromDamage((float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 1.0F))));
|
||||||
ph.applySkinDamage(randLimb, (float)((double)passDamage * (Math.random() / (double)2.0F + (double)0.5F)));
|
ph.applyMuscleDamage(randLimb, (float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 0.5F)), fp);
|
||||||
if (Math.random() < (double)i * 0.2) {
|
ph.applySkinDamage(randLimb, (float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 0.5F)));
|
||||||
ph.applyPain(randLimb, ph.painFromDamage((float)((double)passDamage * (Math.random() / (double)2.0F + (double)1.5F))));
|
if (Math.random() < (double) i * 0.2) {
|
||||||
ph.applyMuscleDamage(randLimb, (float)((double)passDamage * (Math.random() / (double)2.0F + (double)0.7F)), (Player) event.getSource().getEntity());
|
ph.applyPain(randLimb, ph.painFromDamage((float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 1.5F))));
|
||||||
ph.applySkinDamage(randLimb, (float)((double)passDamage * (Math.random() / (double)2.0F + (double)0.7F)));
|
ph.applyMuscleDamage(randLimb, (float) ((double) passDamage * (Math.random() / (double) 2.0F + (double) 0.7F)), fp);
|
||||||
ph.applyBleedDamage(randLimb, (float)((double)passDamage * (Math.random() / (double)2.0F + (double)0.7F)), null);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
damage -= damage_pass;
|
damage -= damage_pass;
|
||||||
boolean amputated = ph.handleAmputation(randLimb, passDamage, 26.0F, (Player) event.getSource().getEntity());
|
boolean amputated = ph.handleAmputation(randLimb, passDamage, 26.0F, fp);
|
||||||
if (amputated) {
|
if (amputated) {
|
||||||
damage /= 4.0F;
|
damage /= 4.0F;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
player.setPlayerHealthData(ph);
|
player.setPlayerHealthData(ph);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue