Fixin' the problem of AFK people not in bed.

This commit is contained in:
sk89q 2011-04-11 11:48:31 -07:00
parent 2685de187a
commit 86c467cb50
3 changed files with 35 additions and 3 deletions

View File

@ -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

View File

@ -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 {

View File

@ -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;
}
}