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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ public class KnockedManager {
|
|||||||
Map.Entry<UUID, Integer> entry = it.next();
|
Map.Entry<UUID, Integer> entry = it.next();
|
||||||
UUID playerId = entry.getKey();
|
UUID playerId = entry.getKey();
|
||||||
int timeLeft = entry.getValue();
|
int timeLeft = entry.getValue();
|
||||||
if ( grippedEntities.contains(playerId)
|
if (grippedEntities.contains(playerId)
|
||||||
|| CarryManager.isBeingCarried(playerId) ) {
|
|| CarryManager.isBeingCarried(playerId)) {
|
||||||
ServerPlayer p = NetworkHandlerHelper.getPlayerByUuid(server, playerId);
|
ServerPlayer p = NetworkHandlerHelper.getPlayerByUuid(server, playerId);
|
||||||
if (p != null) {
|
if (p != null) {
|
||||||
NetworkHandler.CHANNEL.send(
|
NetworkHandler.CHANNEL.send(
|
||||||
@@ -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(
|
||||||
@@ -142,8 +143,8 @@ public class MobKillHandler {
|
|||||||
if (!(p.level() instanceof ServerLevel world)) return null;
|
if (!(p.level() instanceof ServerLevel world)) return null;
|
||||||
double r = 2.5;
|
double r = 2.5;
|
||||||
AABB box = new AABB(
|
AABB box = new AABB(
|
||||||
p.getX()-r, p.getY()-r, p.getZ()-r,
|
p.getX() - r, p.getY() - r, p.getZ() - r,
|
||||||
p.getX()+r, p.getY()+r, p.getZ()+r
|
p.getX() + r, p.getY() + r, p.getZ() + r
|
||||||
);
|
);
|
||||||
return world.getEntitiesOfClass(Mob.class, box).stream()
|
return world.getEntitiesOfClass(Mob.class, box).stream()
|
||||||
.filter(m -> isHostile(m) || isAggressiveNeutral(m))
|
.filter(m -> isHostile(m) || isAggressiveNeutral(m))
|
||||||
@@ -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