Fixed Items and XP not dropping on kill
This commit is contained in:
@@ -2,6 +2,8 @@ package net.fretux.knockedback;
|
||||
|
||||
import com.mojang.logging.LogUtils;
|
||||
import net.fretux.knockedback.effects.KnockedEffect;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingDeathEvent;
|
||||
@@ -40,7 +42,8 @@ public class KnockedBack {
|
||||
|
||||
@SubscribeEvent
|
||||
public void onLivingDeath(LivingDeathEvent event) {
|
||||
if (KnockedManager.isKnocked(event.getEntity())) {
|
||||
LivingEntity victim = event.getEntity();
|
||||
if (victim instanceof Player player && KnockedManager.isKnocked(player)) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,16 +113,17 @@ public class KnockedManager {
|
||||
@SubscribeEvent
|
||||
public static void onLivingHurt(LivingHurtEvent event) {
|
||||
LivingEntity entity = event.getEntity();
|
||||
DamageSource source = event.getSource();
|
||||
String damageType = source.getMsgId();
|
||||
boolean isFatal = entity.getHealth() - event.getAmount() <= 0;
|
||||
if (!(entity instanceof Player player)) {
|
||||
return;
|
||||
}
|
||||
DamageSource src = event.getSource();
|
||||
String damageType = src.getMsgId();
|
||||
boolean isFatal = player.getHealth() - event.getAmount() <= 0;
|
||||
if (!isKnocked(entity)) {
|
||||
if (entity instanceof Player player && isFatal) {
|
||||
if (!(damageType.equals("fall") || damageType.equals("explosion") || damageType.equals("explosion.player") ||
|
||||
damageType.equals("fire") || damageType.equals("lava") || damageType.equals("onFire") ||
|
||||
damageType.equals("fireball"))) {
|
||||
if (isFatal) {
|
||||
if (src.getEntity() instanceof LivingEntity) {
|
||||
event.setCanceled(true);
|
||||
applyKnockedState(player);
|
||||
applyKnockedState(entity);
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -27,6 +27,7 @@ public class MobKillHandler {
|
||||
private static class KillAttempt {
|
||||
private final UUID mobUuid;
|
||||
private int timeLeft;
|
||||
|
||||
public KillAttempt(UUID mobUuid, int timeLeft) {
|
||||
this.mobUuid = mobUuid;
|
||||
this.timeLeft = timeLeft;
|
||||
@@ -124,7 +125,7 @@ public class MobKillHandler {
|
||||
|
||||
private void executeKnockedPlayer(Player knocked, Mob mob) {
|
||||
removeKnockedState(knocked);
|
||||
knocked.setHealth(0.0F);
|
||||
knocked.kill();
|
||||
mob.getNavigation().stop();
|
||||
if (knocked instanceof ServerPlayer sp) {
|
||||
NetworkHandler.CHANNEL.send(
|
||||
@@ -153,6 +154,7 @@ public class MobKillHandler {
|
||||
private boolean isHostile(Mob m) {
|
||||
return m instanceof net.minecraft.world.entity.monster.Monster;
|
||||
}
|
||||
|
||||
private boolean isAggressiveNeutral(Mob m) {
|
||||
if (m instanceof net.minecraft.world.entity.animal.Wolf w) return w.isAngry();
|
||||
if (m instanceof net.minecraft.world.entity.monster.EnderMan e) return e.isCreepy();
|
||||
|
||||
@@ -117,7 +117,7 @@ public class PlayerExecutionHandler {
|
||||
|
||||
public static void executeKnockedPlayer(ServerPlayer executor, LivingEntity knockedPlayer) {
|
||||
KnockedManager.removeKnockedState(knockedPlayer);
|
||||
knockedPlayer.setHealth(0.0F);
|
||||
knockedPlayer.kill();
|
||||
executor.sendSystemMessage(Component.literal("You executed " + knockedPlayer.getName().getString() + "!"));
|
||||
if (knockedPlayer instanceof ServerPlayer serverPlayer) {
|
||||
serverPlayer.sendSystemMessage(Component.literal("You were executed by " + executor.getName().getString() + "!"));
|
||||
|
||||
Reference in New Issue
Block a user