diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a961689..c43624c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: name: Release Plazma strategy: matrix: - base_jdk: [17] + base_jdk: [21] os: [ubuntu-22.04] if: "!startsWith(github.event.commits[0].message, '[CI-Skip]')" diff --git a/patches/api/0005-Implement-No-Chat-Reports.patch b/patches/api/0005-Implement-No-Chat-Reports.patch deleted file mode 100644 index a44a0f8..0000000 --- a/patches/api/0005-Implement-No-Chat-Reports.patch +++ /dev/null @@ -1,19 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 -Date: Thu, 28 Sep 2023 12:21:36 +0900 -Subject: [PATCH] Implement No Chat Reports - - -diff --git a/src/main/java/org/bukkit/event/player/PlayerKickEvent.java b/src/main/java/org/bukkit/event/player/PlayerKickEvent.java -index b8bf61bea73086c61dce6230686e627dc324ebe0..4b91f99f2ca9c68378ea23cbd78908c6f8d46bc7 100644 ---- a/src/main/java/org/bukkit/event/player/PlayerKickEvent.java -+++ b/src/main/java/org/bukkit/event/player/PlayerKickEvent.java -@@ -218,6 +218,8 @@ public class PlayerKickEvent extends PlayerEvent implements Cancellable { - * Fallback cause - */ - UNKNOWN, -+ -+ NCR_NOT_INSTALLED, // Plazma - Implement No Chat Reports - } - // Paper end - } diff --git a/patches/unapplied/server/0021-Do-not-refresh-LootTable-for-non-player-interaction.patch b/patches/server/0019-Do-not-refresh-LootTable-for-non-player-interaction.patch similarity index 92% rename from patches/unapplied/server/0021-Do-not-refresh-LootTable-for-non-player-interaction.patch rename to patches/server/0019-Do-not-refresh-LootTable-for-non-player-interaction.patch index f6be859..e6eaa51 100644 --- a/patches/unapplied/server/0021-Do-not-refresh-LootTable-for-non-player-interaction.patch +++ b/patches/server/0019-Do-not-refresh-LootTable-for-non-player-interaction.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Do not refresh LootTable for non player interaction diff --git a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java -index fa64bf5ad13c278438039b663ea3134e72108411..3ec9cb7c98cd5d3cb26e4a27174a75fe243c81c0 100644 +index 17da915ffa638500a83b67db0940a7b9a9b333a1..27a112818c000f4e649f044b7960ca988976876b 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java -@@ -68,6 +68,7 @@ public abstract class RandomizableContainerBlockEntity extends BaseContainerBloc +@@ -74,6 +74,7 @@ public abstract class RandomizableContainerBlockEntity extends BaseContainerBloc @Override public void unpackLootTable(@org.jetbrains.annotations.Nullable final Player player) { diff --git a/patches/unapplied/server/0022-Do-not-load-chunks-to-spawn-phantom.patch b/patches/server/0020-Do-not-load-chunks-to-spawn-phantom.patch similarity index 92% rename from patches/unapplied/server/0022-Do-not-load-chunks-to-spawn-phantom.patch rename to patches/server/0020-Do-not-load-chunks-to-spawn-phantom.patch index 6a41f78..4fa4c4a 100644 --- a/patches/unapplied/server/0022-Do-not-load-chunks-to-spawn-phantom.patch +++ b/patches/server/0020-Do-not-load-chunks-to-spawn-phantom.patch @@ -5,10 +5,10 @@ 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 0847aef56d8608cb1403485f231f30b2527f35ab..fee30f686a5d1ee50a00c2073efd5b0a80e85179 100644 +index 04f67f7b43d2f461c776c76614dc3e5f060aea63..b3fe0dd152b3e2e1b83b4ec2270d387e6117ec1c 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -@@ -71,6 +71,7 @@ public class PhantomSpawner implements CustomSpawner { +@@ -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)); diff --git a/patches/unapplied/server/0023-Add-option-to-disable-moved-to-quickly-check-for-spe.patch b/patches/server/0021-Add-option-to-disable-moved-to-quickly-check-for-spe.patch similarity index 84% rename from patches/unapplied/server/0023-Add-option-to-disable-moved-to-quickly-check-for-spe.patch rename to patches/server/0021-Add-option-to-disable-moved-to-quickly-check-for-spe.patch index b8dbcb2..2c8d934 100644 --- a/patches/unapplied/server/0023-Add-option-to-disable-moved-to-quickly-check-for-spe.patch +++ b/patches/server/0021-Add-option-to-disable-moved-to-quickly-check-for-spe.patch @@ -6,16 +6,16 @@ Subject: [PATCH] Add option to disable moved to quickly check for specific diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index f7ac60e1aa188ec25a4c5d326cdd4a109a54101c..613f12a7194920690c42ffca2fdf6908700516e5 100644 +index 6d9242bc79526ebe4fdfe1f5d0ded429da2a9f95..4578339fc2ae7bff119a10744e2c2b3d4ac6cfd4 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1472,6 +1472,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1444,6 +1444,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } // Paper end - Prevent moving into unloaded chunks + if (!this.player.getBukkitEntity().hasPermission("plazma.bypass-moved-to-quickly-check") || !(org.plazmamc.plazma.configurations.GlobalConfiguration.get().player.checkSpectatorMovedToQuickly && this.player.isSpectator())) // Plazma - Options to bypass moved to quickly check - if (!this.player.isChangingDimension() && (!this.player.level().getGameRules().getBoolean(GameRules.RULE_DISABLE_ELYTRA_MOVEMENT_CHECK) || !this.player.isFallFlying())) { - float f2 = this.player.isFallFlying() ? 300.0F : 100.0F; + if (!this.player.isChangingDimension() && (!this.player.level().getGameRules().getBoolean(GameRules.RULE_DISABLE_ELYTRA_MOVEMENT_CHECK) || !flag)) { + float f2 = flag ? 300.0F : 100.0F; diff --git a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java index a060257a62da7ed02b342b426e18e5f02ecdbdc9..f7e4d14a7eaa3e35c9b03f3c6a01ae8712ded569 100644 diff --git a/patches/unapplied/server/0024-Ignore-useless-entity-packets.patch b/patches/server/0022-Ignore-useless-entity-packets.patch similarity index 93% rename from patches/unapplied/server/0024-Ignore-useless-entity-packets.patch rename to patches/server/0022-Ignore-useless-entity-packets.patch index a5ce977..6d9adba 100644 --- a/patches/unapplied/server/0024-Ignore-useless-entity-packets.patch +++ b/patches/server/0022-Ignore-useless-entity-packets.patch @@ -7,10 +7,10 @@ Subject: [PATCH] Ignore useless entity packets - PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index cf098d4a3111771c13766285c5ec5f1fc1f539a4..433e9a06db191f8a0ff6c23d1ac6122606e67959 100644 +index b86ae3929ec5d3c4eb69d92774dc445aa5b3093e..44e4a768a0ccde83cae5547c7ba07744cec4c693 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -207,6 +207,8 @@ public class ServerEntity { +@@ -205,6 +205,8 @@ public class ServerEntity { flag4 = true; flag5 = true; } @@ -19,7 +19,7 @@ index cf098d4a3111771c13766285c5ec5f1fc1f539a4..433e9a06db191f8a0ff6c23d1ac61226 } if ((this.trackDelta || this.entity.hasImpulse || this.entity instanceof LivingEntity && ((LivingEntity) this.entity).isFallFlying()) && this.tickCount > 0) { -@@ -281,6 +283,19 @@ public class ServerEntity { +@@ -288,6 +290,19 @@ public class ServerEntity { }); } diff --git a/patches/unapplied/server/0026-Configurable-entity-sensor-tick.patch b/patches/server/0023-Configurable-entity-sensor-tick.patch similarity index 68% rename from patches/unapplied/server/0026-Configurable-entity-sensor-tick.patch rename to patches/server/0023-Configurable-entity-sensor-tick.patch index c189ea6..574681c 100644 --- a/patches/unapplied/server/0026-Configurable-entity-sensor-tick.patch +++ b/patches/server/0023-Configurable-entity-sensor-tick.patch @@ -5,22 +5,22 @@ 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 41ee792f572b13054084b9ad6c6e4cf67ed10290..0d83baabdfabff925c11d363a78414afebe513d3 100644 +index 274ca06fbda0f54805fc82614d43b6e1a4a5d4a8..688f3c01cb939a6c959efbb3b59ac8ee60db3633 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -938,10 +938,11 @@ public abstract class Mob extends LivingEntity implements Targeting { - } - // Paper end - Allow nerfed mobs to jump and float - //this.level().getProfiler().push("sensing"); // Purpur +@@ -995,10 +995,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti + //ProfilerFiller gameprofilerfiller = this.level().getProfiler(); // Purpur + + //gameprofilerfiller.push("sensing"); // Purpur - this.sensing.tick(); + //this.sensing.tick(); // Plazma - Moved down - //this.level().getProfiler().pop(); // Purpur - int i = this.level().getServer().getTickCount() + this.getId(); + //gameprofilerfiller.pop(); // Purpur + 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) { - //this.level().getProfiler().push("targetSelector"); // Purpur - if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking + //gameprofilerfiller.push("targetSelector"); // Purpur + this.targetSelector.tickRunningGoals(false); diff --git a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java index c8a3e91d0d6510b519e927027f5a534cddf7d0a3..bc283729cab4df2c596febf1df54241571227564 100644 --- a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java diff --git a/patches/unapplied/server/0027-Configurable-cave-lava-sea-level.patch b/patches/server/0024-Configurable-cave-lava-sea-level.patch similarity index 97% rename from patches/unapplied/server/0027-Configurable-cave-lava-sea-level.patch rename to patches/server/0024-Configurable-cave-lava-sea-level.patch index 0d5b060..7de9c11 100644 --- a/patches/unapplied/server/0027-Configurable-cave-lava-sea-level.patch +++ b/patches/server/0024-Configurable-cave-lava-sea-level.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Configurable cave lava sea level This patch also fix MC-237017. diff --git a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java -index 98c7f695093acbcf9382a5f07a7a89e373709763..a85b1ebb4236f131b9be0104c4aa56f22e661441 100644 +index 8ce870a5341a61fbbaf42021ef7f7f615a6a3e09..e3990d5f5a49aca501289e92f7462a5f2709db9b 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java @@ -72,6 +72,15 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { diff --git a/patches/unapplied/server/0028-Variable-entity-wakeup-duration.patch b/patches/server/0025-Variable-entity-wakeup-duration.patch similarity index 96% rename from patches/unapplied/server/0028-Variable-entity-wakeup-duration.patch rename to patches/server/0025-Variable-entity-wakeup-duration.patch index 9b8b96b..4f6cd20 100644 --- a/patches/unapplied/server/0028-Variable-entity-wakeup-duration.patch +++ b/patches/server/0025-Variable-entity-wakeup-duration.patch @@ -30,10 +30,10 @@ index bc283729cab4df2c596febf1df54241571227564..1e7c23c8851ba1d0f37d2b17fd334220 public Structure structure; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 56e52b16b419c882440a15947f037ae1a902bc70..583647f6c9ca0fb092f30c97693bd548f692dfd3 100644 +index de2b469f06f6679aed1d20156052bfbef5e7c30b..ebd0764dde2e1d79fb41b5d881990ee07a0590b1 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -68,29 +68,36 @@ public class ActivationRange +@@ -64,29 +64,36 @@ public class ActivationRange Activity.PANIC }; diff --git a/patches/unapplied/server/0029-Optimise-state-lookup-more.patch b/patches/server/0026-Optimise-state-lookup-more.patch similarity index 91% rename from patches/unapplied/server/0029-Optimise-state-lookup-more.patch rename to patches/server/0026-Optimise-state-lookup-more.patch index a1e1afa..1d0695c 100644 --- a/patches/unapplied/server/0029-Optimise-state-lookup-more.patch +++ b/patches/server/0026-Optimise-state-lookup-more.patch @@ -17,10 +17,10 @@ index 57d0cd3ad6f972e986c72a57f1a6e36003f190c2..50d97c5ab33f33b81dbafd7cf42da5af public ZeroCollidingReferenceStateTable(final StateHolder state, final Map, Comparable> this_map) { diff --git a/src/main/java/net/minecraft/world/level/block/state/StateHolder.java b/src/main/java/net/minecraft/world/level/block/state/StateHolder.java -index 2630f54d499abbe52798f97c8ea14a8d0bd75e99..014ccbafd8beecb7f3bfeea0cdaa6627a81796bd 100644 +index 45744d86e9582a93a0cec26009deea091080fbbe..5dd9473c55a08a775aa406901a0e54ef6f63837a 100644 --- a/src/main/java/net/minecraft/world/level/block/state/StateHolder.java +++ b/src/main/java/net/minecraft/world/level/block/state/StateHolder.java -@@ -115,6 +115,12 @@ public abstract class StateHolder { +@@ -114,6 +114,12 @@ public abstract class StateHolder { } public , V extends T> S trySetValue(Property property, V value) { @@ -33,7 +33,7 @@ index 2630f54d499abbe52798f97c8ea14a8d0bd75e99..014ccbafd8beecb7f3bfeea0cdaa6627 Comparable comparable = this.values.get(property); if (comparable != null && !comparable.equals(value)) { S object = this.neighbours.get(property, value); -@@ -126,10 +132,11 @@ public abstract class StateHolder { +@@ -125,10 +131,11 @@ public abstract class StateHolder { } else { return (S)this; } @@ -46,7 +46,7 @@ index 2630f54d499abbe52798f97c8ea14a8d0bd75e99..014ccbafd8beecb7f3bfeea0cdaa6627 throw new IllegalStateException(); } else { Table, Comparable, S> table = HashBasedTable.create(); -@@ -144,7 +151,7 @@ public abstract class StateHolder { +@@ -143,7 +150,7 @@ public abstract class StateHolder { } } diff --git a/patches/unapplied/server/0030-Suppress-errors-from-dirty-attributes.patch b/patches/server/0027-Suppress-errors-from-dirty-attributes.patch similarity index 91% rename from patches/unapplied/server/0030-Suppress-errors-from-dirty-attributes.patch rename to patches/server/0027-Suppress-errors-from-dirty-attributes.patch index 7b0f4ac..19d252f 100644 --- a/patches/unapplied/server/0030-Suppress-errors-from-dirty-attributes.patch +++ b/patches/server/0027-Suppress-errors-from-dirty-attributes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Suppress errors from dirty attributes diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 433e9a06db191f8a0ff6c23d1ac6122606e67959..149ea6b62c88200ecfc50c825a1dcdffa56d9fcb 100644 +index 44e4a768a0ccde83cae5547c7ba07744cec4c693..7954be9d04d88444601144bab560701c04274aa7 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -404,7 +404,8 @@ public class ServerEntity { +@@ -406,7 +406,8 @@ public class ServerEntity { } if (this.entity instanceof LivingEntity) { @@ -18,7 +18,7 @@ index 433e9a06db191f8a0ff6c23d1ac6122606e67959..149ea6b62c88200ecfc50c825a1dcdff if (!set.isEmpty()) { // CraftBukkit start - Send scaled max health -@@ -415,7 +416,7 @@ public class ServerEntity { +@@ -417,7 +418,7 @@ public class ServerEntity { this.broadcastAndSend(new ClientboundUpdateAttributesPacket(this.entity.getId(), set)); } diff --git a/patches/api/0004-Optimize-Spigot-event-bus.patch b/patches/unapplied/api/0004-Optimize-Spigot-event-bus.patch similarity index 100% rename from patches/api/0004-Optimize-Spigot-event-bus.patch rename to patches/unapplied/api/0004-Optimize-Spigot-event-bus.patch diff --git a/patches/unapplied/server/0006-Reduce-allocations.patch b/patches/unapplied/server/0006-Reduce-allocations.patch new file mode 100644 index 0000000..d4f7df7 --- /dev/null +++ b/patches/unapplied/server/0006-Reduce-allocations.patch @@ -0,0 +1,897 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Wed, 10 Jan 2024 12:43:26 +0900 +Subject: [PATCH] Reduce allocations + + +diff --git a/src/main/java/ca/spottedleaf/starlight/common/light/StarLightEngine.java b/src/main/java/ca/spottedleaf/starlight/common/light/StarLightEngine.java +index ad1eeebe6de219143492b94da309cb54ae9e0a5b..f83bdcf5d2d6f676b2dc83bc1fc0a7453fc2b36a 100644 +--- a/src/main/java/ca/spottedleaf/starlight/common/light/StarLightEngine.java ++++ b/src/main/java/ca/spottedleaf/starlight/common/light/StarLightEngine.java +@@ -38,6 +38,7 @@ public abstract class StarLightEngine { + AxisDirection.POSITIVE_X, AxisDirection.NEGATIVE_X, + AxisDirection.POSITIVE_Z, AxisDirection.NEGATIVE_Z + }; ++ private static final AxisDirection[] EMPTY_DIRECTIONS = new AxisDirection[0]; // Plazma - Reduce allocations + + protected static enum AxisDirection { + +@@ -1094,7 +1095,7 @@ public abstract class StarLightEngine { + for (int bitset = i, len = Integer.bitCount(i), index = 0; index < len; ++index, bitset ^= IntegerUtil.getTrailingBit(bitset)) { + directions.add(AXIS_DIRECTIONS[IntegerUtil.trailingZeros(bitset)]); + } +- OLD_CHECK_DIRECTIONS[i] = directions.toArray(new AxisDirection[0]); ++ OLD_CHECK_DIRECTIONS[i] = directions.toArray(EMPTY_DIRECTIONS); // Plazma - Reduce allocations + } + } + +diff --git a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java +index e7fe98ea30ae6d0baea3ec1f9f98a89502a49a12..7663ccd247b9942ccfb7a320b047ee621fc1bebe 100644 +--- a/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java ++++ b/src/main/java/com/destroystokyo/paper/antixray/ChunkPacketBlockControllerAntiXray.java +@@ -97,8 +97,8 @@ public final class ChunkPacketBlockControllerAntiXray extends ChunkPacketBlockCo + Set presetBlockStateSet = new LinkedHashSet<>(); + // Therefore addAll(Collection) is used, which guarantees this order in the doc + presetBlockStateSet.addAll(presetBlockStateList); +- presetBlockStates = presetBlockStateSet.isEmpty() ? new BlockState[]{Blocks.DIAMOND_ORE.defaultBlockState()} : presetBlockStateSet.toArray(new BlockState[0]); +- presetBlockStatesFull = presetBlockStateSet.isEmpty() ? new BlockState[]{Blocks.DIAMOND_ORE.defaultBlockState()} : presetBlockStateList.toArray(new BlockState[0]); ++ presetBlockStates = presetBlockStateSet.isEmpty() ? new BlockState[]{Blocks.DIAMOND_ORE.defaultBlockState()} : presetBlockStateSet.toArray(org.plazmamc.plazma.constants.Empty.BLOCK_STATE); // Plazma - Reduce allocations ++ presetBlockStatesFull = presetBlockStateSet.isEmpty() ? new BlockState[]{Blocks.DIAMOND_ORE.defaultBlockState()} : presetBlockStateList.toArray(org.plazmamc.plazma.constants.Empty.BLOCK_STATE); // Plazma - Reduce allocations + presetBlockStatesStone = null; + presetBlockStatesDeepslate = null; + presetBlockStatesNetherrack = null; +diff --git a/src/main/java/com/destroystokyo/paper/util/maplist/EntityList.java b/src/main/java/com/destroystokyo/paper/util/maplist/EntityList.java +index 0133ea6feb1ab88f021f66855669f58367e7420b..a04049bc7738225633ac0b01c470cfbfde86c032 100644 +--- a/src/main/java/com/destroystokyo/paper/util/maplist/EntityList.java ++++ b/src/main/java/com/destroystokyo/paper/util/maplist/EntityList.java +@@ -17,9 +17,9 @@ public final class EntityList implements Iterable { + this.entityToIndex.defaultReturnValue(Integer.MIN_VALUE); + } + +- protected static final Entity[] EMPTY_LIST = new Entity[0]; ++ //protected static final Entity[] EMPTY_LIST = new Entity[0]; // Plazma - Reduce allocations + +- protected Entity[] entities = EMPTY_LIST; ++ protected Entity[] entities = org.plazmamc.plazma.constants.Empty.ENTITY; // Plazma - Reduce allocations + protected int count; + + public int size() { +diff --git a/src/main/java/com/destroystokyo/paper/util/maplist/IBlockDataList.java b/src/main/java/com/destroystokyo/paper/util/maplist/IBlockDataList.java +index 277cfd9d1e8fff5d9b5e534b75c3c5162d58b0b7..30d8d9c2dce5e4eb26cc52a03bc395c16c04c256 100644 +--- a/src/main/java/com/destroystokyo/paper/util/maplist/IBlockDataList.java ++++ b/src/main/java/com/destroystokyo/paper/util/maplist/IBlockDataList.java +@@ -20,9 +20,9 @@ public final class IBlockDataList { + this.map.defaultReturnValue(Long.MAX_VALUE); + } + +- private static final long[] EMPTY_LIST = new long[0]; ++ //private static final long[] EMPTY_LIST = new long[0]; // Plazma - Reduce allocations + +- private long[] byIndex = EMPTY_LIST; ++ private long[] byIndex = org.plazmamc.plazma.constants.Empty.LONG; // Plazma - Reduce allocations + private int size; + + public static int getLocationKey(final int x, final int y, final int z) { +diff --git a/src/main/java/com/destroystokyo/paper/util/maplist/ReferenceList.java b/src/main/java/com/destroystokyo/paper/util/maplist/ReferenceList.java +index 190c5f0b02a3d99054704ae1afbffb3498ddffe1..042ea49ec61ee327c0f67ddcf080774042e44c02 100644 +--- a/src/main/java/com/destroystokyo/paper/util/maplist/ReferenceList.java ++++ b/src/main/java/com/destroystokyo/paper/util/maplist/ReferenceList.java +@@ -15,9 +15,9 @@ public final class ReferenceList implements Iterable { + this.referenceToIndex.defaultReturnValue(Integer.MIN_VALUE); + } + +- protected static final Object[] EMPTY_LIST = new Object[0]; ++ //protected static final Object[] EMPTY_LIST = new Object[0]; // Plazma - Reduce allocations + +- protected Object[] references = EMPTY_LIST; ++ protected Object[] references = org.plazmamc.plazma.constants.Empty.OBJECT; // Plazma - Reduce allocations + protected int count; + + public int size() { +diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkTaskScheduler.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkTaskScheduler.java +index 049e20407..bbd0b944c 100644 +--- a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkTaskScheduler.java ++++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkTaskScheduler.java +@@ -42,6 +42,7 @@ import java.util.function.Consumer; + public final class ChunkTaskScheduler { + + private static final Logger LOGGER = LogUtils.getClassLogger(); ++ private static final ChunkInfo[] EMPTY_INFO = new ChunkInfo[0]; // Plazma - Reduce allocations + + static int newChunkSystemIOThreads; + static int newChunkSystemWorkerThreads; +@@ -854,7 +855,7 @@ public final class ChunkTaskScheduler { + + public static ChunkInfo[] getChunkInfos() { + synchronized (WAITING_CHUNKS) { +- return WAITING_CHUNKS.toArray(new ChunkInfo[0]); ++ return WAITING_CHUNKS.toArray(EMPTY_INFO); // Plazma - Reduce allocations + } + } + +diff --git a/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java b/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java +index ae60bd96b5284d54676d8e7e4dd5d170b526ec1e..359c4b080bd47234e569dce7055da03ddb7b1e90 100644 +--- a/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java ++++ b/src/main/java/io/papermc/paper/command/subcommands/VersionCommand.java +@@ -14,7 +14,7 @@ public final class VersionCommand implements PaperSubcommand { + public boolean execute(final CommandSender sender, final String subCommand, final String[] args) { + final @Nullable Command ver = MinecraftServer.getServer().server.getCommandMap().getCommand("version"); + if (ver != null) { +- ver.execute(sender, "paper", new String[0]); ++ ver.execute(sender, "paper", org.plazmamc.plazma.constants.Empty.STRING); // Plazma - Reduce allocations + } + return true; + } +diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java +index 3e82ea07c..692bef556 100644 +--- a/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java ++++ b/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java +@@ -47,6 +47,8 @@ import java.util.logging.Level; + class PaperPluginInstanceManager { + + private static final FileProviderSource FILE_PROVIDER_SOURCE = new FileProviderSource("File '%s'"::formatted); ++ private static final JavaPlugin[] EMPTY_JPLUGIN = new JavaPlugin[0]; // Plazma - Reduce allocations ++ private static final Plugin[] EMPTY_PLUGIN = new Plugin[0]; // Plazma - Reduce allocations + + private final List plugins = new ArrayList<>(); + private final Map lookupNames = new HashMap<>(); +@@ -68,7 +70,7 @@ class PaperPluginInstanceManager { + } + + public @NotNull Plugin[] getPlugins() { +- return this.plugins.toArray(new Plugin[0]); ++ return this.plugins.toArray(EMPTY_PLUGIN); // Plazma - Reduce allocations + } + + public boolean isPluginEnabled(@NotNull String name) { +@@ -133,7 +135,7 @@ class PaperPluginInstanceManager { + this.server.getLogger().log(Level.SEVERE, "Unknown error occurred while loading plugins through PluginManager.", e); + } + +- return runtimePluginEntrypointHandler.getPluginProviderStorage().getLoaded().toArray(new JavaPlugin[0]); ++ return runtimePluginEntrypointHandler.getPluginProviderStorage().getLoaded().toArray(EMPTY_JPLUGIN); // Plazma - Reduce allocations + } + + // The behavior of this is that all errors are logged instead of being thrown +diff --git a/src/main/java/io/papermc/paper/util/CollisionUtil.java b/src/main/java/io/papermc/paper/util/CollisionUtil.java +index ee8e9c0e3..f2598e139 100644 +--- a/src/main/java/io/papermc/paper/util/CollisionUtil.java ++++ b/src/main/java/io/papermc/paper/util/CollisionUtil.java +@@ -1149,7 +1149,7 @@ public final class CollisionUtil { + } + + private static final MergedVoxelCoordinateList EMPTY = new MergedVoxelCoordinateList( +- new double[] { 0.0 }, 0.0, new int[0], new int[0], 0 ++ new double[] { 0.0 }, 0.0, org.plazmamc.plazma.constants.Empty.INT, org.plazmamc.plazma.constants.Empty.INT, 0 // Plazma - Reduce allocations + ); + + private static int[] getIndices(final int length) { +diff --git a/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java b/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java +index c78cbec447032de9fe69748591bef6be300160ed..8ca248e844e73685a8d44a966144657315a799aa 100644 +--- a/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java ++++ b/src/main/java/io/papermc/paper/world/ChunkEntitySlices.java +@@ -304,7 +304,7 @@ public final class ChunkEntitySlices { + + protected static final class BasicEntityList { + +- protected static final Entity[] EMPTY = new Entity[0]; ++ //protected static final Entity[] EMPTY = new Entity[0]; // Plazma - Reduce allocations + protected static final int DEFAULT_CAPACITY = 4; + + protected E[] storage; +@@ -315,7 +315,7 @@ public final class ChunkEntitySlices { + } + + public BasicEntityList(final int cap) { +- this.storage = (E[])(cap <= 0 ? EMPTY : new Entity[cap]); ++ this.storage = (E[])(cap <= 0 ? org.plazmamc.plazma.constants.Empty.ENTITY : new Entity[cap]); + } + + public boolean isEmpty() { +@@ -327,7 +327,7 @@ public final class ChunkEntitySlices { + } + + private void resize() { +- if (this.storage == EMPTY) { ++ if (this.storage == org.plazmamc.plazma.constants.Empty.ENTITY) { + this.storage = (E[])new Entity[DEFAULT_CAPACITY]; + } else { + this.storage = Arrays.copyOf(this.storage, this.storage.length * 2); +diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java +index c5a3f9c2daf3da135cccecb757353534e1688821..e5585c6befeef62ecf130e8dabbe6b78f9e90a65 100644 +--- a/src/main/java/net/minecraft/CrashReport.java ++++ b/src/main/java/net/minecraft/CrashReport.java +@@ -30,7 +30,7 @@ public class CrashReport { + @Nullable + private File saveFile; + private boolean trackingStackTrace = true; +- private StackTraceElement[] uncategorizedStackTrace = new StackTraceElement[0]; ++ private StackTraceElement[] uncategorizedStackTrace = org.plazmamc.plazma.constants.Empty.TRACE; // Plazma - Reduce allocations + private final SystemReport systemReport = new SystemReport(); + + public CrashReport(String message, Throwable cause) { +diff --git a/src/main/java/net/minecraft/CrashReportCategory.java b/src/main/java/net/minecraft/CrashReportCategory.java +index 2176171954609fd88f97f93408e14e018c1d6eaa..2a5576dc66a9b1f56e06ba47bef4fe882935c382 100644 +--- a/src/main/java/net/minecraft/CrashReportCategory.java ++++ b/src/main/java/net/minecraft/CrashReportCategory.java +@@ -12,7 +12,7 @@ import net.minecraft.world.level.block.state.BlockState; + public class CrashReportCategory { + private final String title; + private final List entries = Lists.newArrayList(); +- private StackTraceElement[] stackTrace = new StackTraceElement[0]; ++ private StackTraceElement[] stackTrace = org.plazmamc.plazma.constants.Empty.TRACE; // Plazma - Reduce allocations + + public CrashReportCategory(String title) { + this.title = title; +diff --git a/src/main/java/net/minecraft/Util.java b/src/main/java/net/minecraft/Util.java +index 01a12f4d6f3c2f09bffc78692443b9fd391db45a..9a6e4538dd09263544f39c93f5f1480dc589fb4d 100644 +--- a/src/main/java/net/minecraft/Util.java ++++ b/src/main/java/net/minecraft/Util.java +@@ -409,7 +409,7 @@ public class Util { + } else if (futures.size() == 1) { + return futures.get(0).thenApply(List::of); + } else { +- CompletableFuture completableFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); ++ CompletableFuture completableFuture = CompletableFuture.allOf(futures.toArray(org.plazmamc.plazma.constants.Empty.FUTURE)); // Plazma - Reduce allocations + return completableFuture.thenApply(void_ -> futures.stream().map(CompletableFuture::join).toList()); + } + } +diff --git a/src/main/java/net/minecraft/nbt/ByteArrayTag.java b/src/main/java/net/minecraft/nbt/ByteArrayTag.java +index 06648f9751fd8a322d0809ffebf6a544596ee1a4..b0ea87e2ed8f9bf04b33c2ff8a827d4f6f57a435 100644 +--- a/src/main/java/net/minecraft/nbt/ByteArrayTag.java ++++ b/src/main/java/net/minecraft/nbt/ByteArrayTag.java +@@ -175,7 +175,7 @@ public class ByteArrayTag extends CollectionTag { + } + + public void clear() { +- this.data = new byte[0]; ++ this.data = org.plazmamc.plazma.constants.Empty.BYTE; // Plazma - Reduce allocations + } + + @Override +diff --git a/src/main/java/net/minecraft/nbt/CompoundTag.java b/src/main/java/net/minecraft/nbt/CompoundTag.java +index 4e005b7b0..059a1e49f 100644 +--- a/src/main/java/net/minecraft/nbt/CompoundTag.java ++++ b/src/main/java/net/minecraft/nbt/CompoundTag.java +@@ -409,7 +409,7 @@ public class CompoundTag implements Tag { + throw new ReportedException(this.createReport(key, ByteArrayTag.TYPE, var3)); + } + +- return new byte[0]; ++ return org.plazmamc.plazma.constants.Empty.BYTE; // Plazma - Reduce allocations + } + + public int[] getIntArray(String key) { +@@ -421,7 +421,7 @@ public class CompoundTag implements Tag { + throw new ReportedException(this.createReport(key, IntArrayTag.TYPE, var3)); + } + +- return new int[0]; ++ return org.plazmamc.plazma.constants.Empty.INT; // Plazma - Reduce allocations + } + + public long[] getLongArray(String key) { +@@ -433,7 +433,7 @@ public class CompoundTag implements Tag { + throw new ReportedException(this.createReport(key, LongArrayTag.TYPE, var3)); + } + +- return new long[0]; ++ return org.plazmamc.plazma.constants.Empty.LONG; // Plazma - Reduce allocations + } + + public CompoundTag getCompound(String key) { +diff --git a/src/main/java/net/minecraft/nbt/IntArrayTag.java b/src/main/java/net/minecraft/nbt/IntArrayTag.java +index ff13d67151c50ea11a45117e524c7524e2b1a202..5048ec707c147b9a5b2dd8736d518d938ba95df0 100644 +--- a/src/main/java/net/minecraft/nbt/IntArrayTag.java ++++ b/src/main/java/net/minecraft/nbt/IntArrayTag.java +@@ -186,7 +186,7 @@ public class IntArrayTag extends CollectionTag { + } + + public void clear() { +- this.data = new int[0]; ++ this.data = org.plazmamc.plazma.constants.Empty.INT; // Plazma - Reduce allocations + } + + @Override +diff --git a/src/main/java/net/minecraft/nbt/ListTag.java b/src/main/java/net/minecraft/nbt/ListTag.java +index 154bffd34..83c36d452 100644 +--- a/src/main/java/net/minecraft/nbt/ListTag.java ++++ b/src/main/java/net/minecraft/nbt/ListTag.java +@@ -258,7 +258,7 @@ public class ListTag extends CollectionTag { + } + } + +- return new int[0]; ++ return org.plazmamc.plazma.constants.Empty.INT; // Plazma - Reduce allocations + } + + public long[] getLongArray(int index) { +@@ -269,7 +269,7 @@ public class ListTag extends CollectionTag { + } + } + +- return new long[0]; ++ return org.plazmamc.plazma.constants.Empty.LONG; // Plazma - Reduce allocations + } + + public double getDouble(int index) { +diff --git a/src/main/java/net/minecraft/nbt/LongArrayTag.java b/src/main/java/net/minecraft/nbt/LongArrayTag.java +index 2e5c34ebb94a1536cf09d71bdf052a49ecb9159d..144d3bbe80fc0f459a06017a19929e3e849aabd0 100644 +--- a/src/main/java/net/minecraft/nbt/LongArrayTag.java ++++ b/src/main/java/net/minecraft/nbt/LongArrayTag.java +@@ -185,7 +185,7 @@ public class LongArrayTag extends CollectionTag { + + @Override + public void clear() { +- this.data = new long[0]; ++ this.data = org.plazmamc.plazma.constants.Empty.LONG; // Plazma - Reduce allocations + } + + @Override +diff --git a/src/main/java/net/minecraft/nbt/NbtIo.java b/src/main/java/net/minecraft/nbt/NbtIo.java +index 9f659af04..d2969c1ce 100644 +--- a/src/main/java/net/minecraft/nbt/NbtIo.java ++++ b/src/main/java/net/minecraft/nbt/NbtIo.java +@@ -277,7 +277,7 @@ public class NbtIo { + + @Nullable + public static CompoundTag read(Path path) throws IOException { +- if (!Files.exists(path, new LinkOption[0])) { ++ if (!Files.exists(path/*, new LinkOption[0]*/)) { // Plazma - Reduce allocations + return null; + } else { + InputStream inputstream = Files.newInputStream(path); +diff --git a/src/main/java/net/minecraft/network/CipherBase.java b/src/main/java/net/minecraft/network/CipherBase.java +index a2920b8a9eff77d9c5d1d7f70ad3abdacba8f0fa..70d776d5cfdb0612f65d92333d6f872afedc2207 100644 +--- a/src/main/java/net/minecraft/network/CipherBase.java ++++ b/src/main/java/net/minecraft/network/CipherBase.java +@@ -7,8 +7,8 @@ import javax.crypto.ShortBufferException; + + public class CipherBase { + private final Cipher cipher; +- private byte[] heapIn = new byte[0]; +- private byte[] heapOut = new byte[0]; ++ private byte[] heapIn = org.plazmamc.plazma.constants.Empty.BYTE; // Plazma - Reduce allocations ++ private byte[] heapOut = org.plazmamc.plazma.constants.Empty.BYTE; // Plazma - Reduce allocations + + protected CipherBase(Cipher cipher) { + this.cipher = cipher; +diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java +index 9f274048b..ba54c16f1 100644 +--- a/src/main/java/net/minecraft/network/Connection.java ++++ b/src/main/java/net/minecraft/network/Connection.java +@@ -316,7 +316,7 @@ public class Connection extends SimpleChannelInboundHandler> { + } + + private void validateListener(ProtocolInfo state, PacketListener listener) { +- Validate.notNull(listener, "packetListener", new Object[0]); ++ Validate.notNull(listener, "packetListener"/*, new Object[0]*/); // Plazma - Reduce allocations + PacketFlow enumprotocoldirection = listener.flow(); + String s; + +diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java +index 6dcade427..4a0b4b0fa 100644 +--- a/src/main/java/net/minecraft/network/chat/Component.java ++++ b/src/main/java/net/minecraft/network/chat/Component.java +@@ -189,7 +189,7 @@ public interface Component extends Message, FormattedText, Iterable { + } + + static MutableComponent translatable(String key) { +- return MutableComponent.create(new TranslatableContents(key, (String) null, TranslatableContents.NO_ARGS)); ++ return MutableComponent.create(new TranslatableContents(key, (String) null, org.plazmamc.plazma.constants.Empty.OBJECT)); // Plazma - Reduce allocations + } + + static MutableComponent translatable(String key, Object... args) { +@@ -209,7 +209,7 @@ public interface Component extends Message, FormattedText, Iterable { + } + + static MutableComponent translatableWithFallback(String key, @Nullable String fallback) { +- return MutableComponent.create(new TranslatableContents(key, fallback, TranslatableContents.NO_ARGS)); ++ return MutableComponent.create(new TranslatableContents(key, fallback, org.plazmamc.plazma.constants.Empty.OBJECT)); // Plazma - Reduce allocations + } + + static MutableComponent translatableWithFallback(String key, @Nullable String fallback, Object... args) { +diff --git a/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java b/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java +index 4aa6232bf..84e8a29f0 100644 +--- a/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java ++++ b/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java +@@ -29,7 +29,7 @@ import net.minecraft.util.ExtraCodecs; + import net.minecraft.world.entity.Entity; + + public class TranslatableContents implements ComponentContents { +- public static final Object[] NO_ARGS = new Object[0]; ++ // public static final Object[] NO_ARGS = new Object[0]; // Plazma - Reduce allocations + private static final Codec PRIMITIVE_ARG_CODEC = ExtraCodecs.JAVA.validate(TranslatableContents::filterAllowedArguments); + private static final Codec ARG_CODEC = Codec.either(PRIMITIVE_ARG_CODEC, ComponentSerialization.CODEC) + .xmap( +@@ -69,7 +69,7 @@ public class TranslatableContents implements ComponentContents { + } + + private static Object[] adjustArgs(Optional> args) { +- return args.map(list -> list.isEmpty() ? NO_ARGS : list.toArray()).orElse(NO_ARGS); ++ return args.map(list -> list.isEmpty() ? org.plazmamc.plazma.constants.Empty.OBJECT : list.toArray()).orElse(org.plazmamc.plazma.constants.Empty.OBJECT); // Plazma - Reduce allocations + } + + private static TranslatableContents create(String key, Optional fallback, Optional> args) { +diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSectionBlocksUpdatePacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSectionBlocksUpdatePacket.java +index 1a37654af..0e61f8cb3 100644 +--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSectionBlocksUpdatePacket.java ++++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundSectionBlocksUpdatePacket.java +@@ -66,7 +66,7 @@ public class ClientboundSectionBlocksUpdatePacket implements Packet blockChanges) { + this.sectionPos = sectionPos; + this.positions = blockChanges.keySet().toShortArray(); +- this.states = blockChanges.values().toArray(new BlockState[0]); ++ this.states = blockChanges.values().toArray(org.plazmamc.plazma.constants.Empty.BLOCK_STATE); // Plazma - Reduce allocations + } + // Paper end - Multi Block Change API + +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index e121cc57e..7b27af22a 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -1541,13 +1541,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop loadStatusIcon() { +- Optional optional = Optional.of(this.getFile("server-icon.png").toPath()).filter((path) -> { +- return Files.isRegularFile(path, new LinkOption[0]); +- }).or(() -> { +- return this.storageSource.getIconFile().filter((path) -> { +- return Files.isRegularFile(path, new LinkOption[0]); +- }); +- }); ++ // Plazma start - Reduce allocations ++ Optional optional = Optional.of(this.getFile("server-icon.png").toPath()).filter(Files::isRegularFile) ++ .or(() -> this.storageSource.getIconFile().filter(Files::isRegularFile)); ++ // Plazma end + + return optional.flatMap((path) -> { + try { +diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java +index ef520d1dd..b3b0c18b4 100644 +--- a/src/main/java/net/minecraft/server/PlayerAdvancements.java ++++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java +@@ -130,7 +130,7 @@ public class PlayerAdvancements { + } + + private void load(ServerAdvancementManager advancementLoader) { +- if (Files.isRegularFile(this.playerSavePath, new LinkOption[0])) { ++ if (Files.isRegularFile(this.playerSavePath/*, new LinkOption[0]*/)) { // Plazma - Reduce allocations + try { + JsonReader jsonreader = new JsonReader(Files.newBufferedReader(this.playerSavePath, StandardCharsets.UTF_8)); + +diff --git a/src/main/java/net/minecraft/server/RunningOnDifferentThreadException.java b/src/main/java/net/minecraft/server/RunningOnDifferentThreadException.java +index 0f52e8a61ca7e57e9f52473dceb9cc3464c0c86d..f54bde32760541a653460682e5a3ddd0b2ceec51 100644 +--- a/src/main/java/net/minecraft/server/RunningOnDifferentThreadException.java ++++ b/src/main/java/net/minecraft/server/RunningOnDifferentThreadException.java +@@ -4,12 +4,12 @@ public final class RunningOnDifferentThreadException extends RuntimeException { + public static final RunningOnDifferentThreadException RUNNING_ON_DIFFERENT_THREAD = new RunningOnDifferentThreadException(); + + private RunningOnDifferentThreadException() { +- this.setStackTrace(new StackTraceElement[0]); ++ this.setStackTrace(org.plazmamc.plazma.constants.Empty.TRACE); // Plazma - Reduce allocations + } + + @Override + public synchronized Throwable fillInStackTrace() { +- this.setStackTrace(new StackTraceElement[0]); ++ this.setStackTrace(org.plazmamc.plazma.constants.Empty.TRACE); // Plazma - Reduce allocations + return this; + } + } +diff --git a/src/main/java/net/minecraft/server/ServerFunctionLibrary.java b/src/main/java/net/minecraft/server/ServerFunctionLibrary.java +index bae0d208b31aa0a6977c30f2f8484ab3c316bc71..981c3023044f3cc6dc22ada20cd4bedcf7a28db3 100644 +--- a/src/main/java/net/minecraft/server/ServerFunctionLibrary.java ++++ b/src/main/java/net/minecraft/server/ServerFunctionLibrary.java +@@ -92,7 +92,7 @@ public class ServerFunctionLibrary implements PreparableReloadListener { + }, prepareExecutor)); + } + +- CompletableFuture[] completableFutures = map.values().toArray(new CompletableFuture[0]); ++ CompletableFuture[] completableFutures = map.values().toArray(org.plazmamc.plazma.constants.Empty.FUTURE); // Plazma - Reduce allocations + return CompletableFuture.allOf(completableFutures).handle((unused, ex) -> map); + } + ); +diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java +index 4e6fccec4..618dc900d 100644 +--- a/src/main/java/net/minecraft/server/level/ChunkMap.java ++++ b/src/main/java/net/minecraft/server/level/ChunkMap.java +@@ -112,6 +112,7 @@ import org.bukkit.craftbukkit.generator.CustomChunkGenerator; + + public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider { + ++ private static final ServerPlayerConnection[] EMPTY_CONNECTION = new ServerPlayerConnection[0]; // Plazma - Reduce allocations + private static final byte CHUNK_TYPE_REPLACEABLE = -1; + private static final byte CHUNK_TYPE_UNKNOWN = 0; + private static final byte CHUNK_TYPE_FULL = 1; +@@ -1361,7 +1362,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + // stuff could have been removed, so we need to check the trackedPlayers set + // for players that were removed + +- for (ServerPlayerConnection conn : this.seenBy.toArray(new ServerPlayerConnection[0])) { // avoid CME ++ for (ServerPlayerConnection conn : this.seenBy.toArray(EMPTY_CONNECTION)) { // avoid CME // Plazma - Reduce allocations + if (newTrackerCandidates == null || !newTrackerCandidates.contains(conn.getPlayer())) { + this.updatePlayer(conn.getPlayer()); + } +diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java +index f72af2feb..0aaa0e63f 100644 +--- a/src/main/java/net/minecraft/server/level/ServerLevel.java ++++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +@@ -1439,7 +1439,7 @@ public class ServerLevel extends Level implements WorldGenLevel { + + public static List getCurrentlyTickingEntities() { + Entity ticking = currentlyTickingEntity.get(); +- List ret = java.util.Arrays.asList(ticking == null ? new Entity[0] : new Entity[] { ticking }); ++ List ret = java.util.Arrays.asList(ticking == null ? org.plazmamc.plazma.constants.Empty.ENTITY : new Entity[] { ticking }); // Plazma - Reduce allocations + + return ret; + } +diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +index 3b4fadb37..f276fe09f 100644 +--- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +@@ -165,12 +165,12 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, + + @Override + public void handleHello(ServerboundHelloPacket packet) { +- Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet", new Object[0]); ++ Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet"/*, new Object[0]*/); // Plazma - Reduce allocations + // Paper start - Validate usernames + if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() + && io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.performUsernameValidation + && !this.iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation) { +- Validate.validState(StringUtil.isReasonablePlayerName(packet.name()), "Invalid characters in username", new Object[0]); ++ Validate.validState(StringUtil.isReasonablePlayerName(packet.name()), "Invalid characters in username"/*, new Object[0]*/); // Plazma - Reduce allocations + } + // Paper end - Validate usernames + this.requestedUsername = packet.name(); +@@ -268,7 +268,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, + + @Override + public void handleKey(ServerboundKeyPacket packet) { +- Validate.validState(this.state == ServerLoginPacketListenerImpl.State.KEY, "Unexpected key packet", new Object[0]); ++ Validate.validState(this.state == ServerLoginPacketListenerImpl.State.KEY, "Unexpected key packet"/*, new Object[0]*/); // Plazma - Reduce allocations + + final String s; + +@@ -448,7 +448,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, + + @Override + public void handleLoginAcknowledgement(ServerboundLoginAcknowledgedPacket packet) { +- Validate.validState(this.state == ServerLoginPacketListenerImpl.State.PROTOCOL_SWITCHING, "Unexpected login acknowledgement packet", new Object[0]); ++ Validate.validState(this.state == ServerLoginPacketListenerImpl.State.PROTOCOL_SWITCHING, "Unexpected login acknowledgement packet"/*, new Object[0]*/); // Plazma - Reduce allocations + this.connection.setupOutboundProtocol(ConfigurationProtocols.CLIENTBOUND); + CommonListenerCookie commonlistenercookie = CommonListenerCookie.createInitial((GameProfile) Objects.requireNonNull(this.authenticatedProfile), this.transferred); + ServerConfigurationPacketListenerImpl serverconfigurationpacketlistenerimpl = new ServerConfigurationPacketListenerImpl(this.server, this.connection, commonlistenercookie, this.player); // CraftBukkit +diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java +index b863f6fe6..068c7619b 100644 +--- a/src/main/java/net/minecraft/server/players/PlayerList.java ++++ b/src/main/java/net/minecraft/server/players/PlayerList.java +@@ -135,6 +135,7 @@ public abstract class PlayerList { + private static final Logger LOGGER = LogUtils.getLogger(); + private static final int SEND_PLAYER_INFO_INTERVAL = 600; + private static final SimpleDateFormat BAN_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); ++ private static final org.bukkit.event.player.PlayerRespawnEvent.RespawnFlag[] EMPTY_FLAG = new org.bukkit.event.player.PlayerRespawnEvent.RespawnFlag[0]; // Plazma - Reduce allocations + private final MinecraftServer server; + public final List players = new java.util.concurrent.CopyOnWriteArrayList(); // CraftBukkit - ArrayList -> CopyOnWriteArrayList: Iterator safety + private final Map playersByUUID = Maps.newHashMap(); +@@ -815,7 +816,7 @@ public abstract class PlayerList { + + public ServerPlayer respawn(ServerPlayer entityplayer, ServerLevel worldserver, boolean flag, Location location, boolean avoidSuffocation, RespawnReason reason) { + // Paper start - Expand PlayerRespawnEvent +- return respawn(entityplayer, worldserver, flag, location, avoidSuffocation, reason, new org.bukkit.event.player.PlayerRespawnEvent.RespawnFlag[0]); ++ return respawn(entityplayer, worldserver, flag, location, avoidSuffocation, reason, EMPTY_FLAG); // Plazma - Reduce allocations + } + + public ServerPlayer respawn(ServerPlayer entityplayer, ServerLevel worldserver, boolean flag, Location location, boolean avoidSuffocation, RespawnReason reason, org.bukkit.event.player.PlayerRespawnEvent.RespawnFlag...respawnFlags) { +diff --git a/src/main/java/net/minecraft/server/players/StoredUserList.java b/src/main/java/net/minecraft/server/players/StoredUserList.java +index c038da20b..b6cab933d 100644 +--- a/src/main/java/net/minecraft/server/players/StoredUserList.java ++++ b/src/main/java/net/minecraft/server/players/StoredUserList.java +@@ -76,7 +76,7 @@ public abstract class StoredUserList> { + } + + public String[] getUserList() { +- return (String[]) this.map.keySet().toArray(new String[0]); ++ return this.map.keySet().toArray(org.plazmamc.plazma.constants.Empty.STRING); // Plazma - Reduce allocations + } + + public boolean isEmpty() { +diff --git a/src/main/java/net/minecraft/util/MemoryReserve.java b/src/main/java/net/minecraft/util/MemoryReserve.java +index 0ee04fe6ff6a4d09754f326526ae04fe7226bab2..5663ce568a1daa638b7387bee8b9917ce1f64d14 100644 +--- a/src/main/java/net/minecraft/util/MemoryReserve.java ++++ b/src/main/java/net/minecraft/util/MemoryReserve.java +@@ -11,6 +11,6 @@ public class MemoryReserve { + } + + public static void release() { +- reserve = new byte[0]; ++ reserve = org.plazmamc.plazma.constants.Empty.BYTE; // Plazma - Reduce allocations + } + } +diff --git a/src/main/java/net/minecraft/util/ZeroBitStorage.java b/src/main/java/net/minecraft/util/ZeroBitStorage.java +index 01f5b946fabbe34f31110e75973dab9f39897346..2564c21900df7ca3c58872741ec8f68bce80a903 100644 +--- a/src/main/java/net/minecraft/util/ZeroBitStorage.java ++++ b/src/main/java/net/minecraft/util/ZeroBitStorage.java +@@ -5,7 +5,7 @@ import java.util.function.IntConsumer; + import org.apache.commons.lang3.Validate; + + public class ZeroBitStorage implements BitStorage { +- public static final long[] RAW = new long[0]; ++ // public static final long[] RAW = new long[0]; // Plazma - Reduce allocations + private final int size; + + public ZeroBitStorage(int size) { +@@ -33,7 +33,7 @@ public class ZeroBitStorage implements BitStorage { + + @Override + public long[] getRaw() { +- return RAW; ++ return org.plazmamc.plazma.constants.Empty.LONG; // Plazma - Reduce allocations + } + + @Override +diff --git a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java +index f34159f8d..4088ec804 100644 +--- a/src/main/java/net/minecraft/world/level/block/ComposterBlock.java ++++ b/src/main/java/net/minecraft/world/level/block/ComposterBlock.java +@@ -57,6 +57,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { + public static final Object2FloatMap COMPOSTABLES = new Object2FloatOpenHashMap(); + private static final int AABB_SIDE_THICKNESS = 2; + private static final VoxelShape OUTER_SHAPE = Shapes.block(); ++ private static final int[] ZERO_INT = new int[]{0}; // Plazma - Reduce allocations // Plazma - Reduce allocations + private static final VoxelShape[] SHAPES = (VoxelShape[]) Util.make(new VoxelShape[9], (avoxelshape) -> { + for (int i = 0; i < 8; ++i) { + avoxelshape[i] = Shapes.join(ComposterBlock.OUTER_SHAPE, Block.box(2.0D, (double) Math.max(2, 1 + i * 2), 2.0D, 14.0D, 16.0D, 14.0D), BooleanOp.ONLY_FIRST); +@@ -458,7 +459,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { + + @Override + public int[] getSlotsForFace(Direction side) { +- return side == Direction.DOWN ? new int[]{0} : new int[0]; ++ return side == Direction.DOWN ? ZERO_INT : org.plazmamc.plazma.constants.Empty.INT; // Plazma - Reduce allocations + } + + @Override +@@ -507,7 +508,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { + + @Override + public int[] getSlotsForFace(Direction side) { +- return side == Direction.UP ? new int[]{0} : new int[0]; ++ return side == Direction.UP ? ZERO_INT : org.plazmamc.plazma.constants.Empty.INT; // Plazma - Reduce allocations + } + + @Override +@@ -549,7 +550,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { + + @Override + public int[] getSlotsForFace(Direction side) { +- return new int[0]; ++ return org.plazmamc.plazma.constants.Empty.INT; // Plazma - Reduce allocations + } + + @Override +diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +index 1362a4794..2490b63cb 100644 +--- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java ++++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +@@ -445,7 +445,7 @@ public class RegionFile implements AutoCloseable { + this.path = path; + initOversizedState(); // Paper + this.version = compressionFormat; +- if (!Files.isDirectory(directory, new LinkOption[0])) { ++ if (!Files.isDirectory(directory/*, new LinkOption[0]*/)) { // Plazma - Reduce allocations + throw new IllegalArgumentException("Expected directory, got " + String.valueOf(directory.toAbsolutePath())); + } else { + this.externalFileDir = directory; +@@ -717,7 +717,7 @@ public class RegionFile implements AutoCloseable { + private DataInputStream createExternalChunkInputStream(ChunkPos pos, byte flags) throws IOException { + Path path = this.getExternalChunkPath(pos); + +- if (!Files.isRegularFile(path, new LinkOption[0])) { ++ if (!Files.isRegularFile(path/*, new LinkOption[0]*/)) { // Plazma - Reduce allocations + RegionFile.LOGGER.error("External chunk path {} is not file", path); + return null; + } else { +@@ -769,7 +769,7 @@ public class RegionFile implements AutoCloseable { + return false; + } + +- if (!Files.isRegularFile(this.getExternalChunkPath(pos), new LinkOption[0])) { ++ if (!Files.isRegularFile(this.getExternalChunkPath(pos)/*, new LinkOption[0]*/)) { // Plazma - Reduce allocations + return false; + } + } else { +diff --git a/src/main/java/net/minecraft/world/level/levelgen/DebugLevelSource.java b/src/main/java/net/minecraft/world/level/levelgen/DebugLevelSource.java +index b8e333e79..b6012d360 100644 +--- a/src/main/java/net/minecraft/world/level/levelgen/DebugLevelSource.java ++++ b/src/main/java/net/minecraft/world/level/levelgen/DebugLevelSource.java +@@ -89,7 +89,7 @@ public class DebugLevelSource extends ChunkGenerator { + + @Override + public NoiseColumn getBaseColumn(int x, int z, LevelHeightAccessor world, RandomState noiseConfig) { +- return new NoiseColumn(0, new BlockState[0]); ++ return new NoiseColumn(0, org.plazmamc.plazma.constants.Empty.BLOCK_STATE); // Plazma - Reduce allocations + } + + @Override +diff --git a/src/main/java/net/minecraft/world/level/storage/LevelStorageSource.java b/src/main/java/net/minecraft/world/level/storage/LevelStorageSource.java +index 399da9d43aefbb95897df4697860d5bce5317152..df7816c1c5f069d89a22dbd876a2d663ba68949f 100644 +--- a/src/main/java/net/minecraft/world/level/storage/LevelStorageSource.java ++++ b/src/main/java/net/minecraft/world/level/storage/LevelStorageSource.java +@@ -110,7 +110,7 @@ public class LevelStorageSource { + } + + public static DirectoryValidator parseValidator(Path allowedSymlinksFile) { +- if (Files.exists(allowedSymlinksFile, new LinkOption[0])) { ++ if (Files.exists(allowedSymlinksFile/*, new LinkOption[0]*/)) { // Plazma - Reduce allocations + try { + BufferedReader bufferedreader = Files.newBufferedReader(allowedSymlinksFile); + +@@ -189,7 +189,7 @@ public class LevelStorageSource { + } + + public LevelStorageSource.LevelCandidates findLevelCandidates() throws LevelStorageException { +- if (!Files.isDirectory(this.baseDir, new LinkOption[0])) { ++ if (!Files.isDirectory(this.baseDir/*, new LinkOption[0]*/)) { // Plazma - Reduce allocations + throw new LevelStorageException(Component.translatable("selectWorld.load_folder_access")); + } else { + try { +@@ -198,11 +198,12 @@ public class LevelStorageSource { + LevelStorageSource.LevelCandidates convertable_a; + + try { +- List list = stream.filter((path) -> { +- return Files.isDirectory(path, new LinkOption[0]); +- }).map(LevelStorageSource.LevelDirectory::new).filter((convertable_b) -> { +- return Files.isRegularFile(convertable_b.dataFile(), new LinkOption[0]) || Files.isRegularFile(convertable_b.oldDataFile(), new LinkOption[0]); +- }).toList(); ++ // Plazma start - Reduce allocations ++ List list = stream.filter(Files::isDirectory) ++ .map(LevelStorageSource.LevelDirectory::new) ++ .filter(convertable_b -> Files.isRegularFile(convertable_b.dataFile()) || Files.isRegularFile(convertable_b.oldDataFile())) ++ .toList(); ++ // Plazma end + + convertable_a = new LevelStorageSource.LevelCandidates(list); + } catch (Throwable throwable) { +@@ -312,7 +313,7 @@ public class LevelStorageSource { + private LevelSummary readLevelSummary(LevelStorageSource.LevelDirectory save, boolean locked) { + Path path = save.dataFile(); + +- if (Files.exists(path, new LinkOption[0])) { ++ if (Files.exists(path/*, new LinkOption[0]*/)) { // Plazma - Reduce allocations + try { + if (Files.isSymbolicLink(path)) { + List list = this.worldDirValidator.validateSymlink(path); +@@ -411,7 +412,7 @@ public class LevelStorageSource { + + public boolean levelExists(String name) { + try { +- return Files.isDirectory(this.getLevelPath(name), new LinkOption[0]); ++ return Files.isDirectory(this.getLevelPath(name)/*, new LinkOption[0]*/); // Plazma - Reduce allocations + } catch (InvalidPathException invalidpathexception) { + return false; + } +@@ -752,7 +753,7 @@ public class LevelStorageSource { + } + + public boolean hasWorldData() { +- return Files.exists(this.levelDirectory.dataFile(), new LinkOption[0]) || Files.exists(this.levelDirectory.oldDataFile(), new LinkOption[0]); ++ return Files.exists(this.levelDirectory.dataFile()/*, new LinkOption[0]*/) || Files.exists(this.levelDirectory.oldDataFile()/*, new LinkOption[0]*/); // Plazma - Reduce allocations + } + + public void close() throws IOException { +diff --git a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java +index 63e187c65cb855031f286aad0d25ac4694f7a331..e0f085169fafa5e574caf368efa343514540b348 100644 +--- a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java ++++ b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java +@@ -124,7 +124,7 @@ public class PlayerDataStorage { + String[] astring = this.playerDir.list(); + + if (astring == null) { +- astring = new String[0]; ++ astring = org.plazmamc.plazma.constants.Empty.STRING; // Plazma - Reduce allocations + } + + for (int i = 0; i < astring.length; ++i) { +diff --git a/src/main/java/net/minecraft/world/scores/Team.java b/src/main/java/net/minecraft/world/scores/Team.java +index f00791b89fdb1bb0fb358eff2af2e687bda15e85..aa16c93a4333b603729e2704b92f6d38aec0fd7b 100644 +--- a/src/main/java/net/minecraft/world/scores/Team.java ++++ b/src/main/java/net/minecraft/world/scores/Team.java +@@ -70,7 +70,7 @@ public abstract class Team { + public final int id; + + public static String[] getAllNames() { +- return BY_NAME.keySet().toArray(new String[0]); ++ return BY_NAME.keySet().toArray(org.plazmamc.plazma.constants.Empty.STRING); // Plazma - Reduce allocations + } + + @Nullable +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index fb2d05e43df3bfb72b1f6e325736dd3cbc6c3096..de4e1d713e5ec182ea8d4832b8359556095ac214 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -426,7 +426,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + public void sendTitle(Title title) { + Preconditions.checkNotNull(title, "Title is null"); + setTitleTimes(title.getFadeIn(), title.getStay(), title.getFadeOut()); +- setSubtitle(title.getSubtitle() == null ? new BaseComponent[0] : title.getSubtitle()); ++ setSubtitle(title.getSubtitle() == null ? org.plazmamc.plazma.constants.Empty.BASE_COMPONENT : title.getSubtitle()); // Plazma - Reduce allocations + showTitle(title.getTitle()); + } + +diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java +index c5d1ba7a1be3f102edcdfdc05fc50b30ef1f775b..66006d9ff581ac96f13389261de0cd647279b98a 100644 +--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java ++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java +@@ -610,7 +610,7 @@ public class CraftMetaBook extends CraftMetaItem implements BookMeta { + throw new IllegalArgumentException("Invalid page number " + page + "/" + CraftMetaBook.this.getPageCount()); + } + +- BaseComponent[] newText = text == null ? new BaseComponent[0] : text; ++ BaseComponent[] newText = text == null ? org.plazmamc.plazma.constants.Empty.BASE_COMPONENT : text; // Plazma - Reduce allocations + CraftMetaBook.this.pages.set(page - 1, this.componentsToPage(newText)); + } + +@@ -623,7 +623,7 @@ public class CraftMetaBook extends CraftMetaItem implements BookMeta { + public void addPage(final BaseComponent[]... pages) { + for (BaseComponent[] page : pages) { + if (page == null) { +- page = new BaseComponent[0]; ++ page = org.plazmamc.plazma.constants.Empty.BASE_COMPONENT; // Plazma - Reduce allocations + } + + CraftMetaBook.this.internalAddPage(this.componentsToPage(page)); +diff --git a/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java b/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java +index b25dc23b81687dd4d4e70b3615ffb91f8c03c68b..acb98770b9d01e930642a5794f9179660b411c02 100644 +--- a/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java +@@ -164,7 +164,7 @@ public final class WeakCollection implements Collection { + + @Override + public Object[] toArray() { +- return this.toArray(new Object[0]); ++ return this.toArray(org.plazmamc.plazma.constants.Empty.OBJECT); // Plazma - Reduce allocations + } + + @Override +diff --git a/src/main/java/org/plazmamc/plazma/constants/Empty.java b/src/main/java/org/plazmamc/plazma/constants/Empty.java +new file mode 100644 +index 0000000000000000000000000000000000000000..2b6eb7997986ab73ccb3b1baca945a3234ae916e +--- /dev/null ++++ b/src/main/java/org/plazmamc/plazma/constants/Empty.java +@@ -0,0 +1,20 @@ ++package org.plazmamc.plazma.constants; ++ ++public interface Empty { ++ ++ int[] INT = new int[0]; ++ long[] LONG = new long[0]; ++ byte[] BYTE = new byte[0]; ++ ++ Object[] OBJECT = new Object[0]; ++ String[] STRING = new String[0]; ++ StackTraceElement[] TRACE = new StackTraceElement[0]; ++ java.util.concurrent.CompletableFuture[] FUTURE = new java.util.concurrent.CompletableFuture[0]; ++ ++ net.minecraft.world.level.block.state.BlockState[] BLOCK_STATE = new net.minecraft.world.level.block.state.BlockState[0]; ++ net.minecraft.world.entity.Entity[] ENTITY = new net.minecraft.world.entity.Entity[0]; ++ ++ @SuppressWarnings("deprecation") ++ net.md_5.bungee.api.chat.BaseComponent[] BASE_COMPONENT = new net.md_5.bungee.api.chat.BaseComponent[0]; ++ ++} +diff --git a/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java b/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java +index 2621e54879e9ab0029a875f1d09eee67878b90d5..e7e959368c01de69261618d1eb749bebba3527af 100644 +--- a/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java ++++ b/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java +@@ -57,7 +57,7 @@ public class PurpurCommand extends Command { + } else if (args[0].equalsIgnoreCase("version")) { + Command verCmd = org.bukkit.Bukkit.getServer().getCommandMap().getCommand("version"); + if (verCmd != null) { +- return verCmd.execute(sender, commandLabel, new String[0]); ++ return verCmd.execute(sender, commandLabel, org.plazmamc.plazma.constants.Empty.STRING); // Plazma - Reduce allocations + } + } + diff --git a/patches/unapplied/server/0012-Optimize-default-configurations.diff b/patches/unapplied/server/0012-Optimize-default-configurations.diff new file mode 100644 index 0000000..e48dcdd --- /dev/null +++ b/patches/unapplied/server/0012-Optimize-default-configurations.diff @@ -0,0 +1,59 @@ +diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +index 8afc58f35deb49084a20b803e91ce4692ce6e4d6..1febd6d0743aadb4002b447c07ec43098ca96c18 100644 +--- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java ++++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +@@ -64,7 +64,7 @@ public class PufferfishConfig { + getString("info.version", "1.0"); + setComment("info", + "Pufferfish Configuration", +- "Check out Pufferfish Host for maximum performance server hosting: https://pufferfish.host", ++ //"Check out Pufferfish Host for maximum performance server hosting: https://pufferfish.host", // Plazma - Sponsorblock + "Join our Discord for support: https://discord.gg/reZw4vQV9H", + "Download new builds at https://ci.pufferfish.host/job/Pufferfish"); + +@@ -219,7 +219,7 @@ public class PufferfishConfig { + public static int maxProjectileLoadsPerTick; + public static int maxProjectileLoadsPerProjectile; + private static void projectileLoading() { +- maxProjectileLoadsPerTick = getInt("projectile.max-loads-per-tick", 10, "Controls how many chunks are allowed", "to be sync loaded by projectiles in a tick."); ++ maxProjectileLoadsPerTick = getInt("projectile.max-loads-per-tick", org.plazmamc.plazma.configurations.PlazmaConfigurations.optimize() ? 8 : 10, "Controls how many chunks are allowed", "to be sync loaded by projectiles in a tick."); // Plazma - Optimize default configurations + maxProjectileLoadsPerProjectile = getInt("projectile.max-loads-per-projectile", 10, "Controls how many chunks a projectile", "can load in its lifetime before it gets", "automatically removed."); + + setComment("projectile", "Optimizes projectile settings"); +@@ -233,7 +233,7 @@ public class PufferfishConfig { + public static int activationDistanceMod; + + private static void dynamicActivationOfBrains() throws IOException { +- dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", false); // Purpur ++ dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", org.plazmamc.plazma.configurations.PlazmaConfigurations.optimize()); // Purpur // Plazma - Optimize default configurations + startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12, + "This value determines how far away an entity has to be", + "from the player to start being effected by DEAR."); +@@ -241,7 +241,7 @@ public class PufferfishConfig { + maximumActivationPrio = getInt("dab.max-tick-freq", "activation-range.max-tick-freq", 20, + "This value defines how often in ticks, the furthest entity", + "will get their pathfinders and behaviors ticked. 20 = 1s"); +- activationDistanceMod = getInt("dab.activation-dist-mod", "activation-range.activation-dist-mod", 8, ++ activationDistanceMod = getInt("dab.activation-dist-mod", "activation-range.activation-dist-mod", org.plazmamc.plazma.configurations.PlazmaConfigurations.optimize() ? 7 : 8, // Plazma - Optimize default configurations + "This value defines how much distance modifies an entity's", + "tick frequency. freq = (distanceToPlayer^2) / (2^value)", + "If you want further away entities to tick less often, use 7.", +@@ -261,8 +261,18 @@ public class PufferfishConfig { + public static Map projectileTimeouts; + private static void projectileTimeouts() { + // Set some defaults ++ // Plazma start - Optimize default configurations ++ if (org.plazmamc.plazma.configurations.PlazmaConfigurations.optimize()) { ++ getInt("entity_timeouts.ARROW", 200); ++ getInt("entity_timeouts.EGG", 200); ++ getInt("entity_timeouts.ENDER_PEARL", 200); ++ getInt("entity_timeouts.SNOWBALL", 200); ++ getInt("entity_timeouts.LLAMA_SPIT", 200); ++ } else { ++ // Plazma end - Optimize default configurations + getInt("entity_timeouts.SNOWBALL", -1); + getInt("entity_timeouts.LLAMA_SPIT", -1); ++ } // Plazma - Optimize default configurations + setComment("entity_timeouts", + "These values define a entity's maximum lifespan. If an", + "entity is in this list and it has survived for longer than", \ No newline at end of file diff --git a/patches/unapplied/server/0015-Add-some-missing-Pufferfish-configurations.patch b/patches/unapplied/server/0015-Add-some-missing-Pufferfish-configurations.patch new file mode 100644 index 0000000..444ae74 --- /dev/null +++ b/patches/unapplied/server/0015-Add-some-missing-Pufferfish-configurations.patch @@ -0,0 +1,53 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Wed, 27 Sep 2023 18:29:51 +0900 +Subject: [PATCH] Add some missing Pufferfish configurations + + +diff --git a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java +index 77c1bcde8cc5c2f51418a6f385ce84f202a13787..8ac2f6749f3bd85b73ac543bc9040aacb6032623 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java ++++ b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java +@@ -170,11 +170,12 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl + return dimensions.height - 0.1F * this.getScale(); + } + ++ private int behaviorTick = 0; // Plazma - Add missing pufferfish configurations + @Override + protected void customServerAiStep() { + //this.level().getProfiler().push("camelBrain"); // Purpur + Brain behaviorcontroller = (Brain) this.getBrain(); // CraftBukkit - decompile error +- ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Plazma - Add missing pufferfish configurations + behaviorcontroller.tick((ServerLevel) this.level(), this); + //this.level().getProfiler().pop(); // Purpur + //this.level().getProfiler().push("camelActivityUpdate"); // Purpur +diff --git a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java +index 24e351b40745d15e065f4c3cd904596c6daf4cfb..aa60c4a251de2877a9b4ea72899f07194ce15ed7 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java ++++ b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java +@@ -527,9 +527,11 @@ public class Sniffer extends Animal { + return Brain.provider(SnifferAi.MEMORY_TYPES, SnifferAi.SENSOR_TYPES); + } + ++ private int behaviorTick; // Plazma - Add missing pufferfish configurations + @Override + protected void customServerAiStep() { + //this.level().getProfiler().push("snifferBrain"); // Purpur ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Plazma - Add missing pufferfish configurations + this.getBrain().tick((ServerLevel) this.level(), this); + //this.level().getProfiler().popPush("snifferActivityUpdate"); // Purpur + SnifferAi.updateActivity(this); +diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java +index 1f476a4fd148ac9a4c9ad5d12de46a16e4116239..707fd662c7f17986fffcabe774de176741456227 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java ++++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java +@@ -320,7 +320,7 @@ public class Warden extends Monster implements VibrationSystem { + ServerLevel worldserver = (ServerLevel) this.level(); + + //worldserver.getProfiler().push("wardenBrain"); // Purpur +- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Plazma - Add missing pufferfish configurations + this.getBrain().tick(worldserver, this); + //this.level().getProfiler().pop(); // Purpur + super.customServerAiStep(); diff --git a/patches/unapplied/server/0032-Optimize-spigot-event-bus.patch b/patches/unapplied/server/dropped/0032-Optimize-spigot-event-bus.patch similarity index 100% rename from patches/unapplied/server/0032-Optimize-spigot-event-bus.patch rename to patches/unapplied/server/dropped/0032-Optimize-spigot-event-bus.patch