package jas.spawner.modern.eventspawn.context; import jas.spawner.modern.eventspawn.SingleSpawnBuilder; import jas.spawner.modern.eventspawn.SpawnBuilder; import java.util.List; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer.EnumStatus; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; public class PlayerSleepContext extends EventContext { private PlayerSleepInBedEvent event; public PlayerSleepContext(PlayerSleepInBedEvent event) { super(event.entity.worldObj, event.x, event.y, event.z); this.event = event; } public boolean sleepResultOk() { return getResult().equals(EnumStatus.OK); } public boolean sleepResultNotSafe() { return getResult().equals(EnumStatus.NOT_SAFE); } public boolean sleepResult(String result) { return getResult().toString().equalsIgnoreCase(result); } public EntityPlayer.EnumStatus getResult() { if (event.result != null) { return event.result; } EntityPlayer player = event.entityPlayer; World worldObj = event.entityPlayer.worldObj; if (!worldObj.isRemote) { if (player.isPlayerSleeping() || !player.isEntityAlive()) { return EntityPlayer.EnumStatus.OTHER_PROBLEM; } if (!worldObj.provider.isSurfaceWorld()) { return EntityPlayer.EnumStatus.NOT_POSSIBLE_HERE; } if (worldObj.isDaytime()) { return EntityPlayer.EnumStatus.NOT_POSSIBLE_NOW; } if (Math.abs(player.posX - (double) event.x) > 3.0D || Math.abs(player.posY - (double) event.y) > 2.0D || Math.abs(player.posZ - (double) event.z) > 3.0D) { return EntityPlayer.EnumStatus.TOO_FAR_AWAY; } double horD = 8.0D; double verD = 5.0D; List list = worldObj.getEntitiesWithinAABB(EntityMob.class, AxisAlignedBB.getBoundingBox( (double) event.x - horD, (double) event.y - verD, (double) event.z - horD, (double) event.x + horD, (double) event.y + verD, (double) event.z + horD)); if (!list.isEmpty()) { return EntityPlayer.EnumStatus.NOT_SAFE; } } return EntityPlayer.EnumStatus.OK; } public SpawnBuilder spawn(String entityMapping) { return new SingleSpawnBuilder(entityMapping, event.entity.posX, event.entity.posY, event.entity.posZ); } }