fix(pr-reviews): complete all PR comments resolutions and test coverage

This commit is contained in:
Marcos Paulo
2026-08-20 14:51:06 -03:00
parent cc5c983e41
commit b6e508c8c9
4 changed files with 141 additions and 22 deletions
@@ -144,6 +144,29 @@ final class ChunkLoaders {
return false;
}
/**
* Sets a specific expiration timestamp (or 0 for permanent) for a chunk loader.
*/
boolean setExpiresAt(long id, long expiresAt) {
ChunkLoader updated = null;
synchronized (loaders) {
for (int i = 0; i < loaders.size(); i++) {
ChunkLoader curr = loaders.get(i);
if (curr.id() == id) {
updated = curr.withExpiresAt(expiresAt).withEnabled(true);
loaders.set(i, updated);
break;
}
}
}
if (updated != null) {
addTicket(updated);
save();
return true;
}
return false;
}
/**
* Renames an existing chunk loader.
*/
@@ -459,15 +482,21 @@ final class ChunkLoaders {
}
static EntityType pickEntityType(World w, Block space, int light) {
World.Environment env = w.getEnvironment();
ThreadLocalRandom rnd = ThreadLocalRandom.current();
boolean isSlime = false;
try {
isSlime = space.getChunk().isSlimeChunk();
} catch (Exception ignored) {
}
return pickEntityType(w.getEnvironment(), isSlime, space.getY(), light, ThreadLocalRandom.current().nextInt(100));
}
static EntityType pickEntityType(World.Environment env, boolean isSlimeChunk, int y, int light, int roll) {
if (env == World.Environment.NETHER) {
if (light > 11) return null;
int roll = rnd.nextInt(100);
if (roll < 45) return EntityType.ZOMBIFIED_PIGLIN;
if (roll < 65) return EntityType.WITHER_SKELETON;
if (roll < 85) return EntityType.BLAZE;
int r = Math.floorMod(roll, 100);
if (r < 45) return EntityType.ZOMBIFIED_PIGLIN;
if (r < 65) return EntityType.WITHER_SKELETON;
if (r < 85) return EntityType.BLAZE;
return EntityType.MAGMA_CUBE;
}
@@ -475,8 +504,7 @@ final class ChunkLoaders {
return EntityType.ENDERMAN;
}
boolean isSlimeChunk = space.getChunk().isSlimeChunk() && space.getY() < 40;
if (isSlimeChunk && light <= 7 && rnd.nextInt(3) == 0) {
if (isSlimeChunk && y < 40 && light <= 7 && roll % 3 == 0) {
return EntityType.SLIME;
}
@@ -484,11 +512,11 @@ final class ChunkLoaders {
return null;
}
int roll = rnd.nextInt(100);
if (roll < 35) return EntityType.ZOMBIE;
if (roll < 65) return EntityType.SKELETON;
if (roll < 85) return EntityType.CREEPER;
if (roll < 95) return EntityType.SPIDER;
int r = Math.floorMod(roll, 100);
if (r < 35) return EntityType.ZOMBIE;
if (r < 65) return EntityType.SKELETON;
if (r < 85) return EntityType.CREEPER;
if (r < 95) return EntityType.SPIDER;
return EntityType.WITCH;
}
@@ -108,24 +108,35 @@ public final class VoidProtection {
}
static boolean isSafeGround(Block block) {
if (block == null) {
return block != null && isSafeGroundMaterial(block.getType());
}
public static boolean isSafeGroundMaterial(Material mat) {
if (mat == null || mat == Material.AIR || mat == Material.CAVE_AIR || mat == Material.VOID_AIR) {
return false;
}
Material mat = block.getType();
if (mat.isAir() || !mat.isSolid()) {
if (mat == Material.LAVA || mat == Material.WATER || mat == Material.FIRE || mat == Material.SOUL_FIRE
|| mat == Material.CACTUS || mat == Material.MAGMA_BLOCK || mat == Material.SWEET_BERRY_BUSH
|| mat == Material.WITHER_ROSE || mat == Material.POWDER_SNOW) {
return false;
}
return mat != Material.LAVA && mat != Material.FIRE && mat != Material.SOUL_FIRE
&& mat != Material.CACTUS && mat != Material.MAGMA_BLOCK && mat != Material.SWEET_BERRY_BUSH
&& mat != Material.WITHER_ROSE && mat != Material.POWDER_SNOW;
try {
return mat.isSolid();
} catch (Exception | LinkageError e) {
return true;
}
}
static boolean isReplaceable(Block block) {
if (block == null) {
return block != null && isReplaceableMaterial(block.getType());
}
public static boolean isReplaceableMaterial(Material mat) {
if (mat == null) {
return false;
}
Material mat = block.getType();
return mat.isAir() || mat == Material.SHORT_GRASS || mat == Material.TALL_GRASS
return mat == Material.AIR || mat == Material.CAVE_AIR || mat == Material.VOID_AIR
|| mat == Material.SHORT_GRASS || mat == Material.TALL_GRASS
|| mat == Material.SNOW || mat == Material.FERN || mat == Material.LARGE_FERN;
}