64 lines
4.3 KiB
Diff
64 lines
4.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Xymb <xymb@endcrystal.me>
|
|
Date: Thu, 22 Jun 2023 00:47:57 +0200
|
|
Subject: [PATCH] Option to disable creatures spawn events
|
|
|
|
|
|
diff --git a/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java b/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java
|
|
index 31d66bb2fcf4bb7262df2d8006e307fee92660ea..c9830912019079369268bfbf2c95de18ad598f52 100644
|
|
--- a/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java
|
|
+++ b/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java
|
|
@@ -151,6 +151,7 @@ public class KaiijuWorldConfig {
|
|
public boolean tickWhenEmpty = true;
|
|
public boolean enableEntityThrottling = false;
|
|
public boolean disableAchievements = false;
|
|
+ public boolean disableCreaturesSpawnEvents = false;
|
|
|
|
private void optimizationSettings() {
|
|
shulkerBoxDropContentsWhenDestroyed = getBoolean("optimization.shulker-box-drop-contents-when-destroyed", shulkerBoxDropContentsWhenDestroyed);
|
|
@@ -158,6 +159,7 @@ public class KaiijuWorldConfig {
|
|
tickWhenEmpty = getBoolean("optimization.tick-when-empty", tickWhenEmpty);
|
|
enableEntityThrottling = getBoolean("optimization.enable-entity-throttling", enableEntityThrottling);
|
|
disableAchievements = getBoolean("optimization.disable-achievements", disableAchievements);
|
|
+ disableCreaturesSpawnEvents = getBoolean("optimization.disable-creatures-spawn-events", disableCreaturesSpawnEvents);
|
|
}
|
|
|
|
public boolean fixVoidTrading = true;
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
|
index af35fd63b090aa3d89bc60cb9cb7694b5f502681..e5dded0363b14608e834e63e678563b1423d66e7 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
|
|
@@ -486,21 +486,29 @@ public class ServerChunkCache extends ChunkSource {
|
|
chunkRange = (chunkRange > viewDistance) ? (byte)viewDistance : chunkRange;
|
|
chunkRange = (chunkRange > DistanceManager.MOB_SPAWN_RANGE) ? DistanceManager.MOB_SPAWN_RANGE : chunkRange;
|
|
|
|
- com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event = new com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent(player.getBukkitEntity(), (byte)chunkRange);
|
|
+ // Kaiiju start - disable creatures spawn events
|
|
+ com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event = null;
|
|
+ if (!this.level.kaiijuConfig.disableCreaturesSpawnEvents) {
|
|
+ event = new com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent(player.getBukkitEntity(), (byte)chunkRange);
|
|
+ // Kaiiju end
|
|
event.callEvent();
|
|
if (event.isCancelled() || event.getSpawnRadius() < 0) { // Folia - region threading
|
|
player.lastEntitySpawnRadiusSquared = -1.0; player.playerNaturallySpawnedEvent = null; // Folia - region threading
|
|
regionizedWorldData.mobSpawnMap.remove(player); // Folia - region threading
|
|
continue;
|
|
}
|
|
+ // Kaiiju start - disable creatures spawn events
|
|
+ chunkRange = Math.min(event.getSpawnRadius(), 32);
|
|
+ }
|
|
+ // Kaiiju end
|
|
|
|
- int range = Math.min(event.getSpawnRadius(), 32); // limit to max view distance
|
|
+ int range = chunkRange; // limit to max view distance // Kaiiju
|
|
int chunkX = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getX());
|
|
int chunkZ = io.papermc.paper.util.MCUtil.getChunkCoordinate(player.getZ());
|
|
|
|
regionizedWorldData.mobSpawnMap.addOrUpdate(player, chunkX, chunkZ, range); // Folia - region threading
|
|
player.lastEntitySpawnRadiusSquared = (double)((range << 4) * (range << 4)); // used in anyPlayerCloseEnoughForSpawning
|
|
- player.playerNaturallySpawnedEvent = event;
|
|
+ if (!this.level.kaiijuConfig.disableCreaturesSpawnEvents) player.playerNaturallySpawnedEvent = event; // Kaiiju
|
|
}
|
|
// Paper end - optimize isOutisdeRange
|
|
LevelData worlddata = this.level.getLevelData();
|