summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/net/minecraft/server/EntityHuman.java1
-rw-r--r--src/main/java/net/minecraft/server/World.java28
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java9
3 files changed, 35 insertions, 3 deletions
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
index 84631ee2..50835358 100644
--- a/src/main/java/net/minecraft/server/EntityHuman.java
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
@@ -37,6 +37,7 @@ public abstract class EntityHuman extends EntityLiving {
public double y;
// CraftBukkit start
public boolean sleeping;
+ public boolean fauxSleeping;
// CraftBukkit end
private ChunkCoordinates b;
// CraftBukkit start
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 7686f62b..28f24db1 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -1808,13 +1808,25 @@ public class World implements IBlockAccess {
while (iterator.hasNext()) {
EntityHuman entityhuman = (EntityHuman) iterator.next();
- if (!entityhuman.F()) {
+ // CraftBukkit start
+ if (!entityhuman.F() && !entityhuman.fauxSleeping) {
+ // CraftBukkit end
this.A = false;
break;
}
}
}
+ // CraftBukkit start
+ // Calls the method that checks to see if players are sleeping
+ // Called by CraftPlayer.setPermanentSleeping()
+ public void checkSleepStatus() {
+ if (!isStatic) {
+ q();
+ }
+ }
+ // CraftBukkit end
+
protected void r() {
this.A = false;
Iterator iterator = this.d.iterator();
@@ -1831,16 +1843,26 @@ public class World implements IBlockAccess {
public boolean s() {
if (this.A && !this.isStatic) {
Iterator iterator = this.d.iterator();
+
+ // CraftBukkit start
+ boolean foundActualSleepers = false;
+
+ // This allows us to assume that some people are in bed
+ // but not really, allowing time to pass in spite of AFKers
EntityHuman entityhuman;
do {
if (!iterator.hasNext()) {
- return true;
+ return foundActualSleepers;
}
entityhuman = (EntityHuman) iterator.next();
- } while (entityhuman.G());
+ if (entityhuman.G()) {
+ foundActualSleepers = true;
+ }
+ } while (entityhuman.G() || entityhuman.fauxSleeping);
+ // CraftBukkit end
return false;
} else {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 276939ca..d66e4eb2 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -212,4 +212,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void updateInventory() {
getHandle().m();
}
+
+ public void setSleepingIgnored(boolean isSleeping) {
+ getHandle().fauxSleeping = isSleeping;
+ ((CraftWorld)getWorld()).getHandle().checkSleepStatus();
+ }
+
+ public boolean isSleepingIgnored() {
+ return getHandle().fauxSleeping;
+ }
}