From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Cryptite Date: Thu, 7 Dec 2023 08:48:41 -0600 Subject: [PATCH] Player spawnsOwnMobs diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..55281d6dc09ebdd262e05973e4d9c1e82681e05d 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -549,7 +549,7 @@ public class ServerChunkCache extends ChunkSource { // Paper start - optimise chunk tick iteration ChunkMap playerChunkMap = this.chunkMap; for (ServerPlayer player : this.level.players) { - if (!player.affectsSpawning || player.isSpectator()) { + if (!player.affectsSpawning || player.isSpectator() || player.spawnsOwnMobs) { playerChunkMap.playerMobSpawnMap.remove(player); player.playerNaturallySpawnedEvent = null; player.lastEntitySpawnRadiusSquared = -1.0; diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java index 4e2c23ccdf4e4a4d65b291dbe20952bae1838bff..b7c6ec93244da6ebba116ab5d17179f291314b29 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java @@ -2,7 +2,12 @@ package net.minecraft.world.entity.ai.goal; import java.util.EnumSet; import java.util.function.Predicate; + +import com.destroystokyo.paper.util.maplist.ReferenceList; +import io.papermc.paper.util.player.NearbyPlayers; import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Mob; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; @@ -31,11 +36,12 @@ public class EatBlockGoal extends Goal { @Override public boolean canUse() { - // Paper start - Fix MC-210802 - if (!((net.minecraft.server.level.ServerLevel) this.level).chunkSource.chunkMap.anyPlayerCloseEnoughForSpawning(this.mob.chunkPosition())) { + // Paper start - Fix MC-210802 // Slice start - adjust due to our spawnsOwnMobs logic + NearbyPlayers nearbyPlayers = ((ServerLevel) this.level).chunkSource.chunkMap.getNearbyPlayers(); + ReferenceList generalNearbyPlayers = nearbyPlayers.getPlayers(this.mob.chunkPosition(), NearbyPlayers.NearbyMapType.GENERAL); + if (generalNearbyPlayers == null || generalNearbyPlayers.size() == 0) { return false; - } - // Paper end + } // Slice end if (this.mob.getRandom().nextInt(this.mob.isBaby() ? 50 : 1000) != 0) { return false; } else { diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java index 7e2fa586ae255cb94e302c14d0811e36e860f188..55791ab44fd7c11ceedb4bdcc2c9c45cbe916a98 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -184,6 +184,8 @@ public abstract class Player extends LivingEntity { public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage + public boolean spawnsOwnMobs = false; // Slice + // CraftBukkit start public boolean fauxSleeping; public int oldLevel = -1;