From dbd534d892b2d6b41560de30811efe76665dafea 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 d69854b5c1..0e16e03bb1 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 71872a3fe7..44786e1fc9 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -150,6 +150,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() { boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); @@ -174,6 +176,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