public double getBiteChance() { EntityFishingHook hook = getHandle(); if (this.biteChance == -1) { if (hook.world.isRainingAt(MathHelper.floor(hook.locX), MathHelper.floor(hook.locY) + 1, MathHelper.floor(hook.locZ))) { return 1/300.0; } return 1/500.0; } return this.biteChance; }
public void setDirection(Vector direction) { Validate.notNull(direction, "Direction can not be null"); double x = direction.getX(); double y = direction.getY(); double z = direction.getZ(); double magnitude = (double) MathHelper.sqrt(x * x + y * y + z * z); getHandle().dirX = x / magnitude; getHandle().dirY = y / magnitude; getHandle().dirZ = z / magnitude; }
public double getBiteChance() { EntityFishingHook hook = getHandle(); if (this.biteChance == -1) { if (hook.world.isRainingAt(new BlockPosition(MathHelper.floor(hook.locX), MathHelper.floor(hook.locY) + 1, MathHelper.floor(hook.locZ)))) { return 1/300.0; } return 1/500.0; } return this.biteChance; }
/** * Find what entities are in range of the players in the world and set * active if in range. * * @param world */ public static void activateEntities(World world) { SpigotTimings.entityActivationCheckTimer.startTiming(); final int miscActivationRange = world.spigotConfig.miscActivationRange; final int animalActivationRange = world.spigotConfig.animalActivationRange; final int monsterActivationRange = world.spigotConfig.monsterActivationRange; int maxRange = Math.max( monsterActivationRange, animalActivationRange ); maxRange = Math.max( maxRange, miscActivationRange ); maxRange = Math.min( ( world.spigotConfig.viewDistance << 4 ) - 8, maxRange ); for ( Entity player : new ArrayList<Entity>( world.players ) ) { player.activatedTick = MinecraftServer.currentTick; growBB( maxBB, player.boundingBox, maxRange, 256, maxRange ); growBB( miscBB, player.boundingBox, miscActivationRange, 256, miscActivationRange ); growBB( animalBB, player.boundingBox, animalActivationRange, 256, animalActivationRange ); growBB( monsterBB, player.boundingBox, monsterActivationRange, 256, monsterActivationRange ); int i = MathHelper.floor( maxBB.a / 16.0D ); int j = MathHelper.floor( maxBB.d / 16.0D ); int k = MathHelper.floor( maxBB.c / 16.0D ); int l = MathHelper.floor( maxBB.f / 16.0D ); for ( int i1 = i; i1 <= j; ++i1 ) { for ( int j1 = k; j1 <= l; ++j1 ) { if ( world.getWorld().isChunkLoaded( i1, j1 ) ) { activateChunkEntities( world.getChunkAt( i1, j1 ) ); } } } } SpigotTimings.entityActivationCheckTimer.stopTiming(); }
/** * Checks if the entity is active for this tick. * * @param entity * @return */ public static boolean checkIfActive(Entity entity) { SpigotTimings.checkIfActiveTimer.startTiming(); boolean isActive = entity.activatedTick >= MinecraftServer.currentTick || entity.defaultActivationState; // Should this entity tick? if ( !isActive ) { if ( ( MinecraftServer.currentTick - entity.activatedTick - 1 ) % 20 == 0 ) { // Check immunities every 20 ticks. if ( checkEntityImmunities( entity ) ) { // Triggered some sort of immunity, give 20 full ticks before we check again. entity.activatedTick = MinecraftServer.currentTick + 20; } isActive = true; } // Add a little performance juice to active entities. Skip 1/4 if not immune. } else if ( !entity.defaultActivationState && entity.ticksLived % 4 == 0 && !checkEntityImmunities( entity ) ) { isActive = false; } int x = MathHelper.floor( entity.locX ); int z = MathHelper.floor( entity.locZ ); // Make sure not on edge of unloaded chunk if ( isActive && !entity.world.areChunksLoaded( x, 0, z, 16 ) ) { isActive = false; } SpigotTimings.checkIfActiveTimer.stopTiming(); return isActive; }
/** * Find what entities are in range of the players in the world and set * active if in range. * * @param world */ public static void activateEntities(World world) { SpigotTimings.entityActivationCheckTimer.startTiming(); final int miscActivationRange = world.spigotConfig.miscActivationRange; final int animalActivationRange = world.spigotConfig.animalActivationRange; final int monsterActivationRange = world.spigotConfig.monsterActivationRange; int maxRange = Math.max( monsterActivationRange, animalActivationRange ); maxRange = Math.max( maxRange, miscActivationRange ); maxRange = Math.min( ( world.spigotConfig.viewDistance << 4 ) - 8, maxRange ); for ( Entity player : (List<Entity>) world.players ) { player.activatedTick = MinecraftServer.currentTick; growBB( maxBB, player.boundingBox, maxRange, 256, maxRange ); growBB( miscBB, player.boundingBox, miscActivationRange, 256, miscActivationRange ); growBB( animalBB, player.boundingBox, animalActivationRange, 256, animalActivationRange ); growBB( monsterBB, player.boundingBox, monsterActivationRange, 256, monsterActivationRange ); int i = MathHelper.floor( maxBB.a / 16.0D ); int j = MathHelper.floor( maxBB.d / 16.0D ); int k = MathHelper.floor( maxBB.c / 16.0D ); int l = MathHelper.floor( maxBB.f / 16.0D ); for ( int i1 = i; i1 <= j; ++i1 ) { for ( int j1 = k; j1 <= l; ++j1 ) { if ( world.getWorld().isChunkLoaded( i1, j1 ) ) { activateChunkEntities( world.getChunkAt( i1, j1 ) ); } } } } SpigotTimings.entityActivationCheckTimer.stopTiming(); }
/** * Checks if the entity is active for this tick. * * @param entity * @return */ public static boolean checkIfActive(Entity entity) { SpigotTimings.checkIfActiveTimer.startTiming(); boolean isActive = entity.activatedTick >= MinecraftServer.currentTick || entity.defaultActivationState; // Should this entity tick? if ( !isActive ) { if ( ( MinecraftServer.currentTick - entity.activatedTick - 1 ) % 20 == 0 ) { // Check immunities every 20 ticks. if ( checkEntityImmunities( entity ) ) { // Triggered some sort of immunity, give 20 full ticks before we check again. entity.activatedTick = MinecraftServer.currentTick + 20; } isActive = true; } // Add a little performance juice to active entities. Skip 1/4 if not immune. } else if ( !entity.defaultActivationState && entity.ticksLived % 4 == 0 && !checkEntityImmunities( entity ) ) { isActive = false; } int x = MathHelper.floor( entity.locX ); int z = MathHelper.floor( entity.locZ ); // Make sure not on edge of unloaded chunk Chunk chunk = entity.world.getChunkIfLoaded( x >> 4, z >> 4 ); if ( isActive && !( chunk != null && chunk.areNeighborsLoaded( 1 ) ) ) { isActive = false; } SpigotTimings.checkIfActiveTimer.stopTiming(); return isActive; }
/** * Find what entities are in range of the players in the world and set * active if in range. * * @param world */ public static void activateEntities(World world) { SpigotTimings.entityActivationCheckTimer.startTiming(); final int miscActivationRange = world.spigotConfig.miscActivationRange; final int animalActivationRange = world.spigotConfig.animalActivationRange; final int monsterActivationRange = world.spigotConfig.monsterActivationRange; int maxRange = Math.max( monsterActivationRange, animalActivationRange ); maxRange = Math.max( maxRange, miscActivationRange ); maxRange = Math.min( ( world.spigotConfig.viewDistance << 4 ) - 8, maxRange ); for ( EntityHuman player : world.players ) { player.activatedTick = MinecraftServer.currentTick; maxBB = player.getBoundingBox().grow( maxRange, 256, maxRange ); miscBB = player.getBoundingBox().grow( miscActivationRange, 256, miscActivationRange ); animalBB = player.getBoundingBox().grow( animalActivationRange, 256, animalActivationRange ); monsterBB = player.getBoundingBox().grow( monsterActivationRange, 256, monsterActivationRange ); int i = MathHelper.floor( maxBB.a / 16.0D ); int j = MathHelper.floor( maxBB.d / 16.0D ); int k = MathHelper.floor( maxBB.c / 16.0D ); int l = MathHelper.floor( maxBB.f / 16.0D ); for ( int i1 = i; i1 <= j; ++i1 ) { for ( int j1 = k; j1 <= l; ++j1 ) { if ( world.getWorld().isChunkLoaded( i1, j1 ) ) { activateChunkEntities( world.getChunkAt( i1, j1 ) ); } } } } SpigotTimings.entityActivationCheckTimer.stopTiming(); }
public double getBiteChance() { EntityFishingHook hook = getHandle(); if (this.biteChance == -1) { if (hook.world.F(MathHelper.floor(hook.locX), MathHelper.floor(hook.locY) + 1, MathHelper.floor(hook.locZ))) { return 1/300.0; } return 1/500.0; } return this.biteChance; }
/** * Checks if the entity is active for this tick. * * @param entity * @return */ public static boolean checkIfActive(Entity entity) { SpigotTimings.checkIfActiveTimer.startTiming(); // Never safe to skip fireworks or entities not yet added to chunk // PAIL: inChunk if ( !entity.aa || entity instanceof EntityFireworks ) { SpigotTimings.checkIfActiveTimer.stopTiming(); return true; } boolean isActive = entity.activatedTick >= MinecraftServer.currentTick || entity.defaultActivationState; // Should this entity tick? if ( !isActive ) { if ( ( MinecraftServer.currentTick - entity.activatedTick - 1 ) % 20 == 0 ) { // Check immunities every 20 ticks. if ( checkEntityImmunities( entity ) ) { // Triggered some sort of immunity, give 20 full ticks before we check again. entity.activatedTick = MinecraftServer.currentTick + 20; } isActive = true; } // Add a little performance juice to active entities. Skip 1/4 if not immune. } else if ( !entity.defaultActivationState && entity.ticksLived % 4 == 0 && !checkEntityImmunities( entity ) ) { isActive = false; } int x = MathHelper.floor( entity.locX ); int z = MathHelper.floor( entity.locZ ); // Make sure not on edge of unloaded chunk Chunk chunk = entity.world.getChunkIfLoaded( x >> 4, z >> 4 ); if ( isActive && !( chunk != null && chunk.areNeighborsLoaded( 1 ) ) ) { isActive = false; } SpigotTimings.checkIfActiveTimer.stopTiming(); return isActive; }