From d79a8973ef332fb7f6a030389719d029205d06e1 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 30 Nov 2019 03:30:17 -0600 Subject: [PATCH] Add sleep options --- .../net/minecraft/server/EntityHuman.java | 19 +++++++++++++++++-- .../net/pl3x/purpur/PurpurWorldConfig.java | 4 ++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java index 9d26bd1e4c..c99a338082 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -143,6 +143,21 @@ public abstract class EntityHuman extends EntityLiving { this.datawatcher.register(EntityHuman.bt, new NBTTagCompound()); } + // Purpur start + private javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); + + private boolean unableToSleepRightNow() { + if (world.purpurConfig.playerSleepOnlyWithCondition) { + try { + scriptEngine.eval("time = " + world.getDayTime()); + return !(Boolean) scriptEngine.eval(world.purpurConfig.playerSleepCondition); + } catch (Exception ignore) { + } + } + return world.isDay(); + } + // Purpur end + @Override public void tick() { this.noclip = this.isSpectator(); @@ -160,7 +175,7 @@ public abstract class EntityHuman extends EntityLiving { this.sleepTicks = 100; } - if (!this.world.isClientSide && this.world.isDay()) { + if (!this.world.isClientSide && unableToSleepRightNow()) { // Purpur this.wakeup(false, true); } } else if (this.sleepTicks > 0) { @@ -1334,7 +1349,7 @@ public abstract class EntityHuman extends EntityLiving { return Either.left(EntityHuman.EnumBedResult.NOT_POSSIBLE_HERE); } - if (this.world.isDay()) { + if (unableToSleepRightNow()) { // Purpur this.setRespawnPosition(blockposition, false, true); return Either.left(EntityHuman.EnumBedResult.NOT_POSSIBLE_NOW); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index 9e705db0bd..7b59bd638c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -159,6 +159,8 @@ public class PurpurWorldConfig { public boolean disableDropsOnCrammingDeath = false; public boolean fixClimbingBypassingCrammingRule = false; public boolean milkCuresBadOmen = true; + public boolean playerSleepOnlyWithCondition = false; + public String playerSleepCondition = "time >= 12541 && time <= 23458"; public boolean useBetterMending = false; private void gameplayMechanicsSettings() { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); @@ -183,6 +185,8 @@ public class PurpurWorldConfig { disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); fixClimbingBypassingCrammingRule = getBoolean("gameplay-mechanics.fix-climbing-bypassing-cramming-rule", fixClimbingBypassingCrammingRule); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); + playerSleepOnlyWithCondition = getBoolean("gameplay-mechanics.player.sleep.only-with-condition", playerSleepOnlyWithCondition); + playerSleepCondition = getString("gameplay-mechanics.player.sleep.condition", playerSleepCondition); useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); } -- 2.24.0