diff --git a/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java b/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java index 045427e..1eedad9 100644 --- a/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java +++ b/src/main/java/net/minecraft/entity/player/EntityPlayerMP.java @@ -101,6 +101,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.ultramine.server.PermissionHandler; +import org.ultramine.server.event.PlayerDeathEvent; import org.ultramine.server.internal.UMHooks; import org.ultramine.server.chunk.ChunkSendManager; import org.ultramine.server.data.player.PlayerData; @@ -353,11 +354,12 @@ public void onDeath(DamageSource p_70645_1_) { if (ForgeHooks.onLivingDeath(this, p_70645_1_)) return; - if(p_70645_1_ != DamageSource.command) - this.mcServer.getConfigurationManager().sendChatMsg(this.func_110142_aN().func_151521_b()); + PlayerDeathEvent umEvent = UMEventFactory.firePlayerDeath(this, p_70645_1_, this.func_110142_aN().func_151521_b(), + this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")); + if(umEvent.getDeathMessage() != null) + this.mcServer.getConfigurationManager().sendChatMsg(umEvent.getDeathMessage()); - if (p_70645_1_ != DamageSource.outOfWorld && !this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory") && - !PermissionHandler.getInstance().has(this, "ability.admin.keepinventory")) + if (!umEvent.isKeepInventory() && umEvent.isProcessDrops()) { captureDrops = true; capturedDrops.clear(); @@ -376,7 +378,8 @@ } else { - keepInventoryOnClone = true; + if(umEvent.isKeepInventory()) + keepInventoryOnClone = true; } Collection collection = this.worldObj.getScoreboard().func_96520_a(IScoreObjectiveCriteria.deathCount); diff --git a/src/main/java/org/ultramine/server/event/PlayerDeathEvent.java b/src/main/java/org/ultramine/server/event/PlayerDeathEvent.java new file mode 100644 index 0000000..a4fef31 --- /dev/null +++ b/src/main/java/org/ultramine/server/event/PlayerDeathEvent.java @@ -0,0 +1,54 @@ +package org.ultramine.server.event; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.IChatComponent; +import net.minecraftforge.event.entity.player.PlayerEvent; + +import javax.annotation.Nullable; + +public class PlayerDeathEvent extends PlayerEvent +{ + public final DamageSource damageSource; + private @Nullable IChatComponent deathMessage; + private boolean keepInventory; + private boolean processDrops = true; + + public PlayerDeathEvent(EntityPlayer player, DamageSource damageSource, IChatComponent deathMessage, boolean keepInventory) + { + super(player); + this.damageSource = damageSource; + this.deathMessage = deathMessage; + this.keepInventory = keepInventory; + } + + public @Nullable IChatComponent getDeathMessage() + { + return deathMessage; + } + + public void setDeathMessage(@Nullable IChatComponent deathMessage) + { + this.deathMessage = deathMessage; + } + + public boolean isKeepInventory() + { + return keepInventory; + } + + public void setKeepInventory(boolean keepInventory) + { + this.keepInventory = keepInventory; + } + + public boolean isProcessDrops() + { + return processDrops; + } + + public void setProcessDrops(boolean processDrops) + { + this.processDrops = processDrops; + } +} diff --git a/src/main/java/org/ultramine/server/internal/UMEventFactory.java b/src/main/java/org/ultramine/server/internal/UMEventFactory.java index 6051092..8eceb3d 100644 --- a/src/main/java/org/ultramine/server/internal/UMEventFactory.java +++ b/src/main/java/org/ultramine/server/internal/UMEventFactory.java @@ -3,9 +3,11 @@ import net.minecraft.entity.EntityHanging; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.DamageSource; +import net.minecraft.util.IChatComponent; import net.minecraftforge.common.MinecraftForge; import org.ultramine.server.event.HangingEvent; import org.ultramine.server.event.InventoryCloseEvent; +import org.ultramine.server.event.PlayerDeathEvent; public class UMEventFactory { @@ -18,4 +20,11 @@ { return MinecraftForge.EVENT_BUS.post(new HangingEvent.HangingBreakEvent(entity, source)); } + + public static PlayerDeathEvent firePlayerDeath(EntityPlayerMP player, DamageSource damageSource, IChatComponent deathMessage, boolean keepInv) + { + PlayerDeathEvent event = new PlayerDeathEvent(player, damageSource, deathMessage, keepInv); + MinecraftForge.EVENT_BUS.post(event); + return event; + } } diff --git a/src/main/java/org/ultramine/server/internal/UMEventHandler.java b/src/main/java/org/ultramine/server/internal/UMEventHandler.java index f12db2c..b6590ad 100644 --- a/src/main/java/org/ultramine/server/internal/UMEventHandler.java +++ b/src/main/java/org/ultramine/server/internal/UMEventHandler.java @@ -1,5 +1,6 @@ package org.ultramine.server.internal; +import net.minecraft.util.DamageSource; import org.ultramine.economy.CurrencyRegistry; import org.ultramine.economy.PlayerHoldingsEvent; import org.ultramine.server.ConfigurationHandler; @@ -10,6 +11,7 @@ import org.ultramine.server.chunk.ChunkProfiler; import org.ultramine.server.data.player.PlayerCoreData; import org.ultramine.server.event.ForgeModIdMappingEvent; +import org.ultramine.server.event.PlayerDeathEvent; import org.ultramine.server.util.BasicTypeFormatter; import org.ultramine.server.util.BasicTypeParser; import org.ultramine.server.util.WarpLocation; @@ -341,4 +343,13 @@ { UMInternalRegistry.onRemap(); } + + @SubscribeEvent + public void onPlayerKeepInvCheckEvent(PlayerDeathEvent e) + { + if(e.damageSource == DamageSource.command) + e.setDeathMessage(null); + if(e.damageSource == DamageSource.outOfWorld || PermissionHandler.getInstance().has(e.entityPlayer, "ability.admin.keepinventory")) + e.setKeepInventory(true); + } }