From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: IPECTER Date: Sun, 26 Mar 2023 13:17:24 +0900 Subject: [PATCH] Implement FixMySpawnR Original: AbsolemJackdaw/FixMySpawnR Copyright (C) 2023 AbsolemJackdaw diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java index 64d911bee1607880514061c75116d8672df8bb8f..4dcf2c5e4efa645572c7a646e7233232c49a130c 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -46,6 +46,8 @@ public abstract class BaseSpawner { public int requiredPlayerRange = 16; public int spawnRange = 4; private int tickDelay = 0; // Paper + private int blockExistsTick = 0; // Plazma + private boolean blockLockedByTime = false; // Plazma public BaseSpawner() {} @@ -81,6 +83,18 @@ public abstract class BaseSpawner { } public void serverTick(ServerLevel world, BlockPos pos) { + // Plazma start - FixMySpawnR + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().fixMySpawnR.enabled) { + if (!blockLockedByTime) { + if (blockExistsTick > org.plazmamc.plazma.configurations.GlobalConfiguration.get().fixMySpawnR.timerTimeOut) { + blockLockedByTime = true; + } else { + blockExistsTick++; + } + } + } + if (blockLockedByTime && world.getBestNeighborSignal(pos) > 0) return; + // Plazma end if (spawnCount <= 0 || maxNearbyEntities <= 0) return; // Paper - Ignore impossible spawn tick // Paper start - Configurable mob spawner tick rate if (spawnDelay > 0 && --tickDelay > 0) return; @@ -286,6 +300,13 @@ public abstract class BaseSpawner { this.spawnRange = nbt.getShort("SpawnRange"); } + // Plazma start - FixMySpawnR + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().fixMySpawnR.enabled && nbt.contains("SpawnRange", 99)) { + this.blockExistsTick = nbt.getInt("fixmyspawnrTicks"); + this.blockLockedByTime = nbt.getBoolean("fixMySpawnerLocked"); + } + // Plazma end + this.displayEntity = null; } @@ -315,6 +336,12 @@ public abstract class BaseSpawner { } nbt.put("SpawnPotentials", (Tag) SpawnData.LIST_CODEC.encodeStart(NbtOps.INSTANCE, this.spawnPotentials).result().orElseThrow()); + // Plazma start - FixMySpawnR + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().fixMySpawnR.enabled) { + nbt.putInt("fixmyspawnrTicks", blockExistsTick); + nbt.putBoolean("fixMySpawnerLocked", blockLockedByTime); + } + // Plazma end return nbt; }