2018-09-01 00:56:57 +02:00
|
|
|
From 75b8c8e24cd6b38751500103dee0b8add52379a5 Mon Sep 17 00:00:00 2001
|
2018-07-15 03:53:17 +02:00
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
Date: Fri, 18 Mar 2016 21:22:56 -0400
|
|
|
|
Subject: [PATCH] Optimized Light Level Comparisons
|
|
|
|
|
|
|
|
Use an optimized method to test if a block position meets a desired light level.
|
|
|
|
|
|
|
|
This method benefits from returning as soon as the desired light level matches.
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockCrops.java b/src/main/java/net/minecraft/server/BlockCrops.java
|
2018-08-26 20:11:49 +02:00
|
|
|
index 1506c9ede0..6ae6fc3ecb 100644
|
2018-07-15 03:53:17 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/BlockCrops.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/BlockCrops.java
|
|
|
|
@@ -44,7 +44,7 @@ public class BlockCrops extends BlockPlant implements IBlockFragilePlantElement
|
|
|
|
|
|
|
|
public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Random random) {
|
|
|
|
super.a(iblockdata, world, blockposition, random);
|
|
|
|
- if (world.getLightLevel(blockposition.up(), 0) >= 9) {
|
|
|
|
+ if (world.isLightLevel(blockposition.up(), 9)) { // Paper
|
2018-07-22 07:27:46 +02:00
|
|
|
int i = this.k(iblockdata);
|
2018-07-15 03:53:17 +02:00
|
|
|
|
2018-07-22 07:27:46 +02:00
|
|
|
if (i < this.e()) {
|
2018-07-15 03:53:17 +02:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockSapling.java b/src/main/java/net/minecraft/server/BlockSapling.java
|
2018-08-26 20:11:49 +02:00
|
|
|
index 42478d1fed..7426d14cbf 100644
|
2018-07-15 03:53:17 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/BlockSapling.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/BlockSapling.java
|
|
|
|
@@ -30,7 +30,7 @@ public class BlockSapling extends BlockPlant implements IBlockFragilePlantElemen
|
|
|
|
|
|
|
|
public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Random random) {
|
|
|
|
super.a(iblockdata, world, blockposition, random);
|
|
|
|
- if (world.getLightLevel(blockposition.up()) >= 9 && random.nextInt(Math.max(2, (int) (((100.0F / world.spigotConfig.saplingModifier) * 7) + 0.5F))) == 0) { // Spigot
|
|
|
|
+ if (world.isLightLevel(blockposition.up(), 9) && random.nextInt(Math.max(2, (int) (((100.0F / world.spigotConfig.saplingModifier) * 7) + 0.5F))) == 0) { // Spigot // Paper
|
|
|
|
// CraftBukkit start
|
|
|
|
world.captureTreeGeneration = true;
|
|
|
|
// CraftBukkit end
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockStem.java b/src/main/java/net/minecraft/server/BlockStem.java
|
2018-08-26 20:11:49 +02:00
|
|
|
index 4fc8c5d3c6..0fc39bb9fb 100644
|
2018-07-15 03:53:17 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/BlockStem.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/BlockStem.java
|
|
|
|
@@ -27,7 +27,7 @@ public class BlockStem extends BlockPlant implements IBlockFragilePlantElement {
|
|
|
|
|
|
|
|
public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Random random) {
|
|
|
|
super.a(iblockdata, world, blockposition, random);
|
|
|
|
- if (world.getLightLevel(blockposition.up(), 0) >= 9) {
|
|
|
|
+ if (world.isLightLevel(blockposition.up(), 9)) { // Paper
|
|
|
|
float f = BlockCrops.a((Block) this, (IBlockAccess) world, blockposition);
|
|
|
|
|
|
|
|
if (random.nextInt((int) ((100.0F / (this == Blocks.PUMPKIN_STEM ? world.spigotConfig.pumpkinModifier : world.spigotConfig.melonModifier)) * (25.0F / f)) + 1) == 0) { // Spigot
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityMonster.java b/src/main/java/net/minecraft/server/EntityMonster.java
|
2018-09-01 00:56:57 +02:00
|
|
|
index f3cc2cef0a..7cba60e475 100644
|
2018-07-15 03:53:17 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/EntityMonster.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EntityMonster.java
|
2018-09-01 00:56:57 +02:00
|
|
|
@@ -63,8 +63,18 @@ public abstract class EntityMonster extends EntityCreature implements IMonster {
|
2018-07-15 03:53:17 +02:00
|
|
|
if (this.world.getBrightness(EnumSkyBlock.SKY, blockposition) > this.random.nextInt(32)) {
|
|
|
|
return false;
|
|
|
|
} else {
|
2018-08-26 20:11:49 +02:00
|
|
|
- int i = this.world.Y() ? this.world.d(blockposition, 10) : this.world.getLightLevel(blockposition);
|
2018-07-15 03:53:17 +02:00
|
|
|
- return i <= this.random.nextInt(8);
|
|
|
|
+ // Paper start - optimized light check, returns faster
|
|
|
|
+ boolean passes;
|
2018-08-26 20:11:49 +02:00
|
|
|
+ if (this.world.Y()) {
|
|
|
|
+ final int orig = world.getSkylightSubtracted();
|
2018-07-15 03:53:17 +02:00
|
|
|
+ world.setSkylightSubtracted(10);
|
|
|
|
+ passes = !this.world.isLightLevel(blockposition, this.random.nextInt(8));
|
|
|
|
+ world.setSkylightSubtracted(orig);
|
|
|
|
+ } else {
|
|
|
|
+ passes = !this.world.isLightLevel(blockposition, this.random.nextInt(8));
|
|
|
|
+ }
|
|
|
|
+ return passes;
|
|
|
|
+ // Paper end
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java
|
2018-08-26 20:11:49 +02:00
|
|
|
index 1ab3072cc3..e5170bff5b 100644
|
2018-07-15 03:53:17 +02:00
|
|
|
--- a/src/main/java/net/minecraft/server/EntityZombie.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EntityZombie.java
|
2018-08-26 20:11:49 +02:00
|
|
|
@@ -263,7 +263,7 @@ public class EntityZombie extends EntityMonster {
|
2018-07-15 03:53:17 +02:00
|
|
|
int j1 = j + MathHelper.nextInt(this.random, 7, 40) * MathHelper.nextInt(this.random, -1, 1);
|
|
|
|
int k1 = k + MathHelper.nextInt(this.random, 7, 40) * MathHelper.nextInt(this.random, -1, 1);
|
|
|
|
|
|
|
|
- if (this.world.getType(new BlockPosition(i1, j1 - 1, k1)).q() && this.world.getLightLevel(new BlockPosition(i1, j1, k1)) < 10) {
|
|
|
|
+ if (this.world.getType(new BlockPosition(i1, j1 - 1, k1)).q() && !this.world.isLightLevel(new BlockPosition(i1, j1, k1), 10)) { // Paper
|
|
|
|
entityzombie.setPosition((double) i1, (double) j1, (double) k1);
|
2018-08-26 20:11:49 +02:00
|
|
|
if (!this.world.isPlayerNearby((double) i1, (double) j1, (double) k1, 7.0D) && this.world.a_(entityzombie, entityzombie.getBoundingBox()) && this.world.getCubes(entityzombie, entityzombie.getBoundingBox()) && !this.world.containsLiquid(entityzombie.getBoundingBox())) {
|
2018-07-15 03:53:17 +02:00
|
|
|
this.world.addEntity(entityzombie, CreatureSpawnEvent.SpawnReason.REINFORCEMENTS); // CraftBukkit
|
|
|
|
--
|
|
|
|
2.18.0
|
|
|
|
|