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