From 6008fe12c4429329fd28edcbe7cde65560146f97 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 26 Dec 2019 22:08:37 -0600 Subject: [PATCH] Add player death exp control options --- .../java/net/minecraft/server/EntityHuman.java | 15 ++++++++++++--- .../java/net/pl3x/purpur/PurpurWorldConfig.java | 7 +++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java index 3957daf751..15e342454c 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -1858,9 +1858,18 @@ public abstract class EntityHuman extends EntityLiving { @Override protected int getExpValue(EntityHuman entityhuman) { if (!this.world.getGameRules().getBoolean(GameRules.KEEP_INVENTORY) && !this.isSpectator()) { - int i = this.expLevel * 7; - - return i > 100 ? 100 : i; + // Purpur start + int toDrop; + try { + scriptEngine.eval("expLevel = " + expLevel); + scriptEngine.eval("expTotal = " + expTotal); + scriptEngine.eval("exp = " + exp); + toDrop = (int) Math.round((Double) scriptEngine.eval(world.purpurConfig.playerDeathExpDropEquation)); + } catch (ScriptException ignore) { + toDrop = expLevel * 7; + } + return Math.min(toDrop, world.purpurConfig.playerDeathExpDropMax); + // Purpur end } else { return 0; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index 0a933e29a4..60ba8c1e9b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -167,6 +167,13 @@ public class PurpurWorldConfig { elytraDamagePerTridentBoost = getInt("elytra.damage-per-boost.trident", elytraDamagePerTridentBoost); } + public String playerDeathExpDropEquation = "expLevel * 7"; + public int playerDeathExpDropMax = 100; + private void playerSettings() { + playerDeathExpDropEquation = getString("player.exp-dropped-on-death.equation", playerDeathExpDropEquation); + playerDeathExpDropMax = getInt("player.exp-dropped-on-death.maximum", playerDeathExpDropMax); + } + public boolean idleTimeoutKick = true; public boolean idleTimeoutTickNearbyEntities = false; public boolean idleTimeoutCountAsSleeping = false; -- 2.24.0