diff --git a/patches/server/0019-Do-not-load-chunks-to-spawn-phantom.patch b/patches/server/0019-Do-not-load-chunks-to-spawn-phantom.patch deleted file mode 100644 index 9fda6d2..0000000 --- a/patches/server/0019-Do-not-load-chunks-to-spawn-phantom.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Sun, 5 Nov 2023 12:07:06 +0900 -Subject: [PATCH] Do not load chunks to spawn phantom - - -diff --git a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -index 27eb9a365006884c85603dc6d9dd8eee009c98b3..958a48d05aba8e500c7b19a466dcca6fea8a8bcc 100644 ---- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -+++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -@@ -70,6 +70,7 @@ public class PhantomSpawner implements CustomSpawner { - - if (randomsource.nextInt(j) >= world.paperConfig().entities.behavior.playerInsomniaStartTicks) { // Paper - Ability to control player's insomnia and phantoms - BlockPos blockposition1 = blockposition.above(20 + randomsource.nextInt(15)).east(-10 + randomsource.nextInt(21)).south(-10 + randomsource.nextInt(21)); -+ if (!world.plazmaConfig().entity.phantom.loadChunksToSpawn && !world.hasChunkAt(blockposition1)) continue; // Plazma - Do not load chunks to spawn phantom - BlockState iblockdata = world.getBlockState(blockposition1); - FluidState fluid = world.getFluidState(blockposition1); - -diff --git a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -index c703237d46b114227cf0d5cdff2e033839bc5f57..a976e2b960a5f3b7ecf6e42afcb1dd3bd140b8bd 100644 ---- a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -+++ b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -@@ -31,6 +31,7 @@ public class WorldConfigurations extends ConfigurationPart { - public Phantom phantom; - public class Phantom extends ConfigurationPart { - -+ public boolean loadChunksToSpawn = !OPTIMIZE; - - } - diff --git a/patches/server/0020-Add-option-to-disable-moved-to-quickly-check-for-spe.patch b/patches/server/0020-Add-option-to-disable-moved-to-quickly-check-for-spe.patch deleted file mode 100644 index 6689672..0000000 --- a/patches/server/0020-Add-option-to-disable-moved-to-quickly-check-for-spe.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Sun, 5 Nov 2023 12:16:14 +0900 -Subject: [PATCH] Add option to disable moved to quickly check for specific - players - - -diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c783c17d45beda8297171d0834350197808a7335..611de28d27d75b73e33a552c8a23d6c0f53582da 100644 ---- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1749,7 +1749,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - } - } - -+ // Plazma start - Add option to bypass moved to quickly check - private boolean shouldCheckPlayerMovement(boolean elytra) { -+ return (!this.player.getBukkitEntity().hasPermission("plazma.bypass-moved-to-quickly-check") || !(org.plazmamc.plazma.configurations.GlobalConfiguration.get().player.checkSpectatorMovedToQuickly && this.player.isSpectator())) && shouldCheckPlayerMovement0(elytra); -+ } -+ -+ private boolean shouldCheckPlayerMovement0(boolean elytra) { -+ // Plazma end - Add option to bypass moved to quickly check - if (this.isSingleplayerOwner()) { - return false; - } else if (this.player.isChangingDimension()) { -diff --git a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java -index f99a281244f7b736bd979cfc0bcd0787d9da9a42..6d313edc60082a5f2d30ef8ad9fbd57772f361fe 100644 ---- a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java -+++ b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java -@@ -43,6 +43,7 @@ public class GlobalConfiguration extends ConfigurationPart { - public Player player; - public class Player extends ConfigurationPart { - -+ public boolean checkSpectatorMovedToQuickly = !OPTIMIZE; - - } - diff --git a/patches/server/0022-Configurable-entity-sensor-tick.patch b/patches/server/0022-Configurable-entity-sensor-tick.patch deleted file mode 100644 index 0d6d2a3..0000000 --- a/patches/server/0022-Configurable-entity-sensor-tick.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Mon, 6 Nov 2023 11:36:08 +0900 -Subject: [PATCH] Configurable entity sensor tick - - -diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 0be6582e50ccc94036bb6782a5f811c0f9c42f01..98b08a2e83cf1c4e1e45a42ddcad2198f42a05e2 100644 ---- a/src/main/java/net/minecraft/world/entity/Mob.java -+++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -951,10 +951,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab - ProfilerFiller gameprofilerfiller = Profiler.get(); - - gameprofilerfiller.push("sensing"); -- this.sensing.tick(); -+ //this.sensing.tick(); // Plazma - moved down - gameprofilerfiller.pop(); - int i = this.tickCount + this.getId(); - -+ if (i % this.level().plazmaConfig().entity.sensorTick == 0) this.sensing.tick(); // Plazma - Configurable entity sensor tick - if (i % 2 != 0 && this.tickCount > 1) { - gameprofilerfiller.push("targetSelector"); - if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking -diff --git a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -index a976e2b960a5f3b7ecf6e42afcb1dd3bd140b8bd..9e408d6c1826d36a935b3e382e8eb0283f3d1580 100644 ---- a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -+++ b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -@@ -28,6 +28,8 @@ public class WorldConfigurations extends ConfigurationPart { - public Entity entity; - public class Entity extends ConfigurationPart { - -+ public int sensorTick = 1; -+ - public Phantom phantom; - public class Phantom extends ConfigurationPart { - diff --git a/patches/server/0039-Configurable-water-flowing-speed.patch b/patches/server/0039-Configurable-water-flowing-speed.patch deleted file mode 100644 index 4e2e270..0000000 --- a/patches/server/0039-Configurable-water-flowing-speed.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Sun, 27 Oct 2024 13:48:01 +0900 -Subject: [PATCH] Configurable water flowing speed - - -diff --git a/src/main/java/net/minecraft/world/level/material/WaterFluid.java b/src/main/java/net/minecraft/world/level/material/WaterFluid.java -index 1e741f36b79585f33abe413beafe00cf5205d54f..028aea6640356ba80f5d682e3cc03b7f82f5b9c7 100644 ---- a/src/main/java/net/minecraft/world/level/material/WaterFluid.java -+++ b/src/main/java/net/minecraft/world/level/material/WaterFluid.java -@@ -123,7 +123,7 @@ public abstract class WaterFluid extends FlowingFluid { - - @Override - public int getTickDelay(LevelReader world) { -- return 5; -+ return world.getWorldBorder().world.plazmaConfig().block.waterFlowingTick; // Plazma - Configurable water flowing speed - } - - @Override -diff --git a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -index 0e27e4a1f767842d1dcd2ed235a6a45f120bf32e..c1d4a96cf5be77f4460c54ed19622f527d42ca06 100644 ---- a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -+++ b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java -@@ -64,7 +64,9 @@ public class WorldConfigurations extends ConfigurationPart { - - public Block block; - public class Block extends ConfigurationPart { -- -+ -+ public int waterFlowingTick = 5; -+ - public Hopper hopper; - public class Hopper extends ConfigurationPart { - diff --git a/patches/server/0062-Register-every-commands.patch b/plazma-server/minecraft-patches/sources/net/minecraft/commands/Commands.java.patch similarity index 87% rename from patches/server/0062-Register-every-commands.patch rename to plazma-server/minecraft-patches/sources/net/minecraft/commands/Commands.java.patch index 066758d..e79d679 100644 --- a/patches/server/0062-Register-every-commands.patch +++ b/plazma-server/minecraft-patches/sources/net/minecraft/commands/Commands.java.patch @@ -1,14 +1,6 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Wed, 22 Jan 2025 11:32:58 +0900 -Subject: [PATCH] Register every commands - - -diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 2ef4dc9169a9bec304b4922a2e91c31b966c711d..c416b1eaf27699de59aaa6b352ff1aa991d3f660 100644 ---- a/src/main/java/net/minecraft/commands/Commands.java -+++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -44,91 +44,7 @@ import net.minecraft.network.chat.MutableComponent; +--- a/net/minecraft/commands/Commands.java ++++ b/net/minecraft/commands/Commands.java +@@ -44,91 +_,7 @@ import net.minecraft.network.protocol.game.ClientboundCommandsPacket; import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; @@ -97,15 +89,15 @@ index 2ef4dc9169a9bec304b4922a2e91c31b966c711d..c416b1eaf27699de59aaa6b352ff1aa9 -import net.minecraft.server.commands.WeatherCommand; -import net.minecraft.server.commands.WhitelistCommand; -import net.minecraft.server.commands.WorldBorderCommand; -+import net.minecraft.server.commands.*; // Plazma - Register all commands ++import net.minecraft.server.commands.*; // Plazma - Register every commands import net.minecraft.server.commands.data.DataCommands; import net.minecraft.server.level.ServerPlayer; import net.minecraft.tags.TagKey; -@@ -234,6 +150,7 @@ public class Commands { +@@ -229,6 +_,7 @@ WardenSpawnTrackerCommand.register(this.dispatcher); SpawnArmorTrimsCommand.register(this.dispatcher); ServerPackCommand.register(this.dispatcher); -+ ChaseCommand.register(this.dispatcher); // Plazma - Register all commands - if (environment.includeDedicated) { ++ ChaseCommand.register(this.dispatcher); // Plazma - Register every commands + if (selection.includeDedicated) { DebugConfigCommand.register(this.dispatcher); } diff --git a/plazma-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch b/plazma-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch index 036a88d..41d4fd1 100644 --- a/plazma-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch +++ b/plazma-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch @@ -9,3 +9,41 @@ if (blockState2 != blockState) { this.player.level().setBlock(pos, blockState2, 2); blockEntity.setBlockState(blockState2); +@@ -1673,17 +_,28 @@ + } + } + ++ // Plazma start - Add option to bypass moved to quickly check ++ public static boolean useMovedToQuicklyBypassPermission; ++ public static boolean checkSpectatorMovedToQuickly; ++ + private boolean shouldCheckPlayerMovement(boolean isElytraMovement) { +- if (this.isSingleplayerOwner()) { +- return false; +- } else if (this.player.isChangingDimension()) { +- return false; +- } else { +- GameRules gameRules = this.player.serverLevel().getGameRules(); +- return !gameRules.getBoolean(GameRules.RULE_DISABLE_PLAYER_MOVEMENT_CHECK) +- && (!isElytraMovement || !gameRules.getBoolean(GameRules.RULE_DISABLE_ELYTRA_MOVEMENT_CHECK)); +- } ++ if (this.player.isChangingDimension()) { ++ return false; ++ } ++ ++ if (checkSpectatorMovedToQuickly && this.player.isSpectator()) { ++ return false; ++ } ++ ++ if (useMovedToQuicklyBypassPermission && this.player.getBukkitEntity().hasPermission("plazma.bypass-moved-to-quickly-check")) { ++ return false; ++ } ++ ++ final GameRules gameRules = this.player.serverLevel().getGameRules(); ++ return !gameRules.getBoolean(GameRules.RULE_DISABLE_PLAYER_MOVEMENT_CHECK) ++ && (!isElytraMovement || !gameRules.getBoolean(GameRules.RULE_DISABLE_ELYTRA_MOVEMENT_CHECK)); + } ++ // Plazma end - Add option to bypass moved to quickly check + + private boolean updateAwaitingTeleport() { + if (this.awaitingPositionFromClient != null) { diff --git a/plazma-server/minecraft-patches/sources/net/minecraft/world/entity/Mob.java.patch b/plazma-server/minecraft-patches/sources/net/minecraft/world/entity/Mob.java.patch new file mode 100644 index 0000000..532245e --- /dev/null +++ b/plazma-server/minecraft-patches/sources/net/minecraft/world/entity/Mob.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/world/entity/Mob.java ++++ b/net/minecraft/world/entity/Mob.java +@@ -884,9 +_,9 @@ + // Paper end - Allow nerfed mobs to jump and float + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("sensing"); +- this.sensing.tick(); + profilerFiller.pop(); + int i = this.tickCount + this.getId(); ++ if (i % this.level().plazmaConfig().entity.sensorTick == 0) this.sensing.tick(); // Plazma - Moved down; Configurable entity sensor tick + if (i % 2 != 0 && this.tickCount > 1) { + profilerFiller.push("targetSelector"); + this.targetSelector.tickRunningGoals(false); diff --git a/plazma-server/minecraft-patches/sources/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch b/plazma-server/minecraft-patches/sources/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch new file mode 100644 index 0000000..9fddaea --- /dev/null +++ b/plazma-server/minecraft-patches/sources/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch @@ -0,0 +1,177 @@ +--- a/net/minecraft/world/level/levelgen/PhantomSpawner.java ++++ b/net/minecraft/world/level/levelgen/PhantomSpawner.java +@@ -23,81 +_,101 @@ + + @Override + public int tick(ServerLevel level, boolean spawnEnemies, boolean spawnFriendlies) { +- if (!spawnEnemies) { +- return 0; +- } else if (!level.getGameRules().getBoolean(GameRules.RULE_DOINSOMNIA)) { +- return 0; +- } else { +- // Paper start - Ability to control player's insomnia and phantoms +- if (level.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds <= 0) { +- return 0; +- } +- // Paper end - Ability to control player's insomnia and phantoms +- RandomSource randomSource = level.random; +- this.nextTick--; +- if (this.nextTick > 0) { +- return 0; +- } else { +- // Paper start - Ability to control player's insomnia and phantoms +- int spawnAttemptMinSeconds = level.paperConfig().entities.behavior.phantomsSpawnAttemptMinSeconds; +- int spawnAttemptMaxSeconds = level.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds; +- this.nextTick += (spawnAttemptMinSeconds + randomSource.nextInt(spawnAttemptMaxSeconds - spawnAttemptMinSeconds + 1)) * 20; +- // Paper end - Ability to control player's insomnia and phantoms +- if (level.getSkyDarken() < level.purpurConfig.phantomSpawnMinSkyDarkness && level.dimensionType().hasSkyLight()) { // Purpur - Add phantom spawning options +- return 0; +- } else { +- int i = 0; +- +- for (ServerPlayer serverPlayer : level.players()) { +- if (!serverPlayer.isSpectator() && (!level.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers || !serverPlayer.isCreative())) { // Paper - Add phantom creative and insomniac controls +- BlockPos blockPos = serverPlayer.blockPosition(); +- if (!level.dimensionType().hasSkyLight() || (!level.purpurConfig.phantomSpawnOnlyAboveSeaLevel || blockPos.getY() >= level.getSeaLevel()) && (!level.purpurConfig.phantomSpawnOnlyWithVisibleSky || level.canSeeSky(blockPos))) { // Purpur - Add phantom spawning options +- DifficultyInstance currentDifficultyAt = level.getCurrentDifficultyAt(blockPos); +- if (currentDifficultyAt.isHarderThan(randomSource.nextFloat() * (float) level.purpurConfig.phantomSpawnLocalDifficultyChance)) { // Purpur - Add phantom spawning options +- ServerStatsCounter stats = serverPlayer.getStats(); +- int i1 = Mth.clamp(stats.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE); +- int i2 = 24000; +- if (randomSource.nextInt(i1) >= level.paperConfig().entities.behavior.playerInsomniaStartTicks) { // Paper - Ability to control player's insomnia and phantoms +- BlockPos blockPos1 = blockPos.above(20 + randomSource.nextInt(15)) +- .east(-10 + randomSource.nextInt(21)) +- .south(-10 + randomSource.nextInt(21)); +- BlockState blockState = level.getBlockState(blockPos1); +- FluidState fluidState = level.getFluidState(blockPos1); +- if (NaturalSpawner.isValidEmptySpawnBlock(level, blockPos1, blockState, fluidState, EntityType.PHANTOM)) { +- SpawnGroupData spawnGroupData = null; +- int i3 = level.purpurConfig.phantomSpawnMinPerAttempt + level.random.nextInt((level.purpurConfig.phantomSpawnMaxPerAttempt < 0 ? currentDifficultyAt.getDifficulty().getId() : level.purpurConfig.phantomSpawnMaxPerAttempt - level.purpurConfig.phantomSpawnMinPerAttempt) + 1); // Purpur - Add phantom spawning options +- +- for (int i4 = 0; i4 < i3; i4++) { +- // Paper start - PhantomPreSpawnEvent +- com.destroystokyo.paper.event.entity.PhantomPreSpawnEvent event = new com.destroystokyo.paper.event.entity.PhantomPreSpawnEvent(io.papermc.paper.util.MCUtil.toLocation(level, blockPos1), serverPlayer.getBukkitEntity(), org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL); +- if (!event.callEvent()) { +- if (event.shouldAbortSpawn()) { +- break; +- } +- continue; +- } +- // Paper end - PhantomPreSpawnEvent +- Phantom phantom = EntityType.PHANTOM.create(level, EntitySpawnReason.NATURAL); +- if (phantom != null) { +- phantom.spawningEntity = serverPlayer.getUUID(); // Paper - PhantomPreSpawnEvent +- phantom.moveTo(blockPos1, 0.0F, 0.0F); +- spawnGroupData = phantom.finalizeSpawn( +- level, currentDifficultyAt, EntitySpawnReason.NATURAL, spawnGroupData +- ); +- level.addFreshEntityWithPassengers(phantom, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL); // CraftBukkit +- i++; +- } +- } +- } +- } +- } +- } +- } ++ // Plazma start - Improve code quality ++ if (!spawnEnemies || !level.getGameRules().getBoolean(GameRules.RULE_DOINSOMNIA)) { ++ return 0; ++ } ++ ++ // Paper start - Ability to control player's insomnia and phantoms ++ if (level.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds <= 0) { ++ return 0; ++ } ++ // Paper end - Ability to control player's insomnia and phantoms ++ ++ this.nextTick--; ++ if (this.nextTick > 0) { ++ return 0; ++ } ++ ++ // Paper start - Ability to control player's insomnia and phantoms ++ final int spawnAttemptMinSeconds = level.paperConfig().entities.behavior.phantomsSpawnAttemptMinSeconds; ++ final int spawnAttemptMaxSeconds = level.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds; ++ ++ final RandomSource randomSource = level.random; // Plazma - moved down ++ this.nextTick += (spawnAttemptMinSeconds + randomSource.nextInt(spawnAttemptMaxSeconds - spawnAttemptMinSeconds + 1)) * 20; ++ // Paper end - Ability to control player's insomnia and phantoms ++ ++ if (level.getSkyDarken() < level.purpurConfig.phantomSpawnMinSkyDarkness && level.dimensionType().hasSkyLight()) { // Purpur - Add phantom spawning options ++ return 0; ++ } ++ ++ int totalSpawned = 0; ++ for (final ServerPlayer serverPlayer : level.players()) { ++ if (serverPlayer.isSpectator() || (level.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers && serverPlayer.isCreative())) { // Paper - Add phantom creative and insomniac controls ++ continue; ++ } ++ ++ final BlockPos blockPos = serverPlayer.blockPosition(); ++ if (level.dimensionType().hasSkyLight() ++ && ((level.purpurConfig.phantomSpawnOnlyAboveSeaLevel && blockPos.getY() < level.getSeaLevel()) ++ || (level.purpurConfig.phantomSpawnOnlyWithVisibleSky && !level.canSeeSky(blockPos)) ++ ) ++ ) { // Purpur - Add phantom spawning options ++ continue; ++ } ++ ++ final DifficultyInstance currentDifficultyAt = level.getCurrentDifficultyAt(blockPos); ++ if (!currentDifficultyAt.isHarderThan(randomSource.nextFloat() * (float) level.purpurConfig.phantomSpawnLocalDifficultyChance)) { // Purpur - Add phantom spawning options ++ continue; ++ } ++ ++ final ServerStatsCounter stats = serverPlayer.getStats(); ++ int timeSinceRest = Mth.clamp(stats.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE); ++ if (randomSource.nextInt(timeSinceRest) < level.paperConfig().entities.behavior.playerInsomniaStartTicks) { // Paper - Ability to control player's insomnia and phantoms ++ continue; ++ } ++ ++ final BlockPos blockPos1 = blockPos.above(20 + randomSource.nextInt(15)) ++ .east(-10 + randomSource.nextInt(21)) ++ .south(-10 + randomSource.nextInt(21)); ++ if (!level.plazmaConfig().entity.phantom.loadChunksToSpawn && !level.hasChunkAt(blockPos1)) { // Plazma - Do not load chunks to spawn phantom ++ continue; ++ } ++ ++ final BlockState blockState1 = level.getBlockState(blockPos1); ++ final FluidState fluidState1 = level.getFluidState(blockPos1); ++ if (!NaturalSpawner.isValidEmptySpawnBlock(level, blockPos1, blockState1, fluidState1, EntityType.PHANTOM)) { ++ continue; ++ } ++ ++ SpawnGroupData spawnGroupData = null; ++ int maxAttempts = level.purpurConfig.phantomSpawnMinPerAttempt + level.random.nextInt((level.purpurConfig.phantomSpawnMaxPerAttempt < 0 ? currentDifficultyAt.getDifficulty().getId() : level.purpurConfig.phantomSpawnMaxPerAttempt - level.purpurConfig.phantomSpawnMinPerAttempt) + 1); // Purpur - Add phantom spawning options ++ ++ for (int i = 0; i < maxAttempts; i++) { ++ // Paper start - PhantomPreSpawnEvent ++ com.destroystokyo.paper.event.entity.PhantomPreSpawnEvent event = new com.destroystokyo.paper.event.entity.PhantomPreSpawnEvent(io.papermc.paper.util.MCUtil.toLocation(level, blockPos1), serverPlayer.getBukkitEntity(), org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL); ++ if (!event.callEvent()) { ++ if (event.shouldAbortSpawn()) { ++ break; + } +- +- return i; +- } ++ continue; ++ } ++ // Paper end - PhantomPreSpawnEvent ++ ++ final Phantom phantom = EntityType.PHANTOM.create(level, EntitySpawnReason.NATURAL); ++ if (phantom == null) { ++ continue; ++ } ++ ++ phantom.spawningEntity = serverPlayer.getUUID(); // Paper - PhantomPreSpawnEvent ++ phantom.moveTo(blockPos1, 0.0F, 0.0F); ++ spawnGroupData = phantom.finalizeSpawn(level, currentDifficultyAt, EntitySpawnReason.NATURAL, spawnGroupData); ++ level.addFreshEntityWithPassengers(phantom, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL); // CraftBukkit ++ totalSpawned++; + } + } ++ ++ return totalSpawned; ++ // Plazma end - Improve code quality + } + } diff --git a/plazma-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch b/plazma-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch index de3b128..27e5398 100644 --- a/plazma-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch +++ b/plazma-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch @@ -8,4 +8,13 @@ + return Blocks.LAVA.defaultBlockState().setValue(LiquidBlock.LEVEL, getLegacyLevel(state)); } + @Override +@@ -167,7 +_,7 @@ + + @Override + public int getDropOff(LevelReader level) { +- return level.dimensionType().ultraWarm() ? 1 : 2; ++ return level.dimensionType().ultraWarm() ? level.getWorldBorder().world.plazmaConfig().block.lavaDropOffNether : level.getWorldBorder().world.plazmaConfig().block.lavaDropOffNormal; // Plazma - Configurable lava dropOff block + } + @Override diff --git a/plazma-server/minecraft-patches/sources/net/minecraft/world/level/material/WaterFluid.java.patch b/plazma-server/minecraft-patches/sources/net/minecraft/world/level/material/WaterFluid.java.patch index fba2a14..d11da0e 100644 --- a/plazma-server/minecraft-patches/sources/net/minecraft/world/level/material/WaterFluid.java.patch +++ b/plazma-server/minecraft-patches/sources/net/minecraft/world/level/material/WaterFluid.java.patch @@ -8,4 +8,19 @@ + return Blocks.WATER.defaultBlockState().setValue(LiquidBlock.LEVEL, getLegacyLevel(state)); } + @Override +@@ -110,12 +_,12 @@ + + @Override + public int getDropOff(LevelReader level) { +- return 1; ++ return level.getWorldBorder().world.plazmaConfig().block.waterDropOffSize; // Plazma - Configurable water dropOff block + } + + @Override + public int getTickDelay(LevelReader level) { +- return 5; ++ return level.getWorldBorder().world.plazmaConfig().block.waterFlowingTick; // Plazma - Configurable water flowing speed + } + @Override diff --git a/plazma-server/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/plazma-server/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java index 9d52e03..c6e49ae 100644 --- a/plazma-server/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java +++ b/plazma-server/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java @@ -24,10 +24,16 @@ public final class GlobalConfiguration extends ConfigurationPart { public Player player; public class Player extends ConfigurationPart { + boolean useMovedToQuicklyBypassPerm = OPTIMIZE; + boolean checkSpectatorMovedToQuickly = !OPTIMIZE; + int advancementCriterionTriggerIdleTick = OPTIMIZE ? 5 : 0; @PostProcess void postProcess() { + net.minecraft.server.network.ServerGamePacketListenerImpl.useMovedToQuicklyBypassPermission = this.useMovedToQuicklyBypassPerm; + net.minecraft.server.network.ServerGamePacketListenerImpl.checkSpectatorMovedToQuickly = this.checkSpectatorMovedToQuickly; + net.minecraft.advancements.critereon.InventoryChangeTrigger.idleTick = this.advancementCriterionTriggerIdleTick; } diff --git a/plazma-server/src/main/java/org/plazmamc/plazma/configurations/WorldConfiguration.java b/plazma-server/src/main/java/org/plazmamc/plazma/configurations/WorldConfiguration.java index 5364762..a82daf3 100644 --- a/plazma-server/src/main/java/org/plazmamc/plazma/configurations/WorldConfiguration.java +++ b/plazma-server/src/main/java/org/plazmamc/plazma/configurations/WorldConfiguration.java @@ -21,9 +21,29 @@ public final class WorldConfiguration extends ConfigurationPart { public Entity entity; public class Entity extends ConfigurationPart { + public int sensorTick = 1; + public boolean suppressErrorsFromDirtyAttributes = OPTIMIZE; public boolean populateLootTableOnlyForPlayerInteraction = OPTIMIZE; + public Phantom phantom; + public class Phantom extends ConfigurationPart { + + public boolean loadChunksToSpawn = false; + + } + + } + + public Block block; + public class Block extends ConfigurationPart { + + public int waterFlowingTick = 5; + public int waterDropOffSize = 1; + + public int lavaDropOffNormal = 2; + public int lavaDropOffNether = 1; + } }