diff --git a/PATCHES.md b/PATCHES.md index 65faa991..ea827d76 100644 --- a/PATCHES.md +++ b/PATCHES.md @@ -58,7 +58,6 @@ # Patches | server | Fix LightEngineThreaded memory leak | Ivan Pekov | | | server | Fix exp drop of zombie pigmen (MC-56653) | Phoenix616 | | | server | Fix lead fall dmg config | tr7zw | | -| server | Fix merging spawning values | Mariell Hoversholm | | | server | Fix the dead lagging the server | William Blake Galbreath | | | server | Global Eula file | tr7zw | | | server | Heavily optimize furnance fuel and recipe lookups | tr7zw | Mykyta Komarn | @@ -81,13 +80,15 @@ # Patches | server | Optimize Villagers | Ivan Pekov | | | server | Optimize advancement loading | Ivan Pekov | | | server | Optimize inventory API item handling | Phoenix616 | | -| server | Optimize player loops around weather | MrIvanPlays | | +| server | Optimize some stuff in WorldServer ticking | MrIvanPlays | | | server | Optimize whitelist command for multiple additions / removals | Ivan Pekov | | | server | Option for simpler Villagers | tr7zw | | | server | Option to toggle milk curing bad omen | William Blake Galbreath | | | server | Origami Server Config | Phoenix616 | | | server | PaperPR - Add hex color code support for console logging | Esophose | | | server | PaperPR: Fix harming potion dupe | PepperCode1 | | +| server | PaperPR: Fix merging spawning values | Mariell Hoversholm | | +| server | PaperPR: Use block distance in portal search radius | Patrick Hemmer | | | server | Per entity (type) collision settings | MrIvanPlays | tr7zw | | server | Persistent TileEntity Lore and DisplayName | jmp | | | api | PlayerAttackEntityEvent | Ivan Pekov | | @@ -98,7 +99,6 @@ # Patches | server | Redirect Configs | tr7zw | | | server | Remove some streams and object allocations | Phoenix616 | | | server | Remove vanilla profiler callers | Sotr | | -| server | Replace some hot streams | Ivan Pekov | | | server | Respect PlayerKickEvent leaveMessage | Ivan Pekov | | | server | Respect rotation when respawning | Ivan Pekov | | | server | Send more packets immediately | MrIvanPlays | | @@ -113,7 +113,6 @@ # Patches | server | Use Glue List as delegate for NonNullList | Mykyta Komarn | | | server | Use Glue List in WeightedList | Ivan Pekov | | | server | Use GlueList for some list initialisations in packets | Ivan Pekov | | -| server | Use block distance in portal search radius | Patrick Hemmer | | | server | Use faster block collision check for entity suffocation check | Mykyta Komarn | | | server | Use offline uuids if we need to | Ivan Pekov | | | api | Yatopia API Bundle | Bud Gidiere | | diff --git a/patches/server/0063-Replace-some-hot-streams.patch b/patches/removed/server/0063-Replace-some-hot-streams.patch similarity index 100% rename from patches/server/0063-Replace-some-hot-streams.patch rename to patches/removed/server/0063-Replace-some-hot-streams.patch diff --git a/patches/removed/server/0010-Player-saving-async-FileIO.patch b/patches/removed/server/no longer needed/0010-Player-saving-async-FileIO.patch similarity index 100% rename from patches/removed/server/0010-Player-saving-async-FileIO.patch rename to patches/removed/server/no longer needed/0010-Player-saving-async-FileIO.patch diff --git a/patches/removed/server/0024-Akarin-Updated-Save-json-list-async.patch b/patches/removed/server/no longer needed/0024-Akarin-Updated-Save-json-list-async.patch similarity index 100% rename from patches/removed/server/0024-Akarin-Updated-Save-json-list-async.patch rename to patches/removed/server/no longer needed/0024-Akarin-Updated-Save-json-list-async.patch diff --git a/patches/removed/server/0029-Akarin-updated-Async-Path-Finding.patch b/patches/removed/server/no longer needed/0029-Akarin-updated-Async-Path-Finding.patch similarity index 100% rename from patches/removed/server/0029-Akarin-updated-Async-Path-Finding.patch rename to patches/removed/server/no longer needed/0029-Akarin-updated-Async-Path-Finding.patch diff --git a/patches/removed/server/0030-Optimize-Villagers.patch b/patches/removed/server/no longer needed/0030-Optimize-Villagers.patch similarity index 100% rename from patches/removed/server/0030-Optimize-Villagers.patch rename to patches/removed/server/no longer needed/0030-Optimize-Villagers.patch diff --git a/patches/removed/server/0037-Load-also-the-chunk-that-you-re-teleporting-to.patch b/patches/removed/server/no longer needed/0037-Load-also-the-chunk-that-you-re-teleporting-to.patch similarity index 100% rename from patches/removed/server/0037-Load-also-the-chunk-that-you-re-teleporting-to.patch rename to patches/removed/server/no longer needed/0037-Load-also-the-chunk-that-you-re-teleporting-to.patch diff --git a/patches/removed/server/0048-Fix-villager-dupe.patch b/patches/removed/server/no longer needed/under question/0048-Fix-villager-dupe.patch similarity index 100% rename from patches/removed/server/0048-Fix-villager-dupe.patch rename to patches/removed/server/no longer needed/under question/0048-Fix-villager-dupe.patch diff --git a/patches/server/0028-Optimize-player-loops-around-weather.patch b/patches/server/0028-Optimize-player-loops-around-weather.patch deleted file mode 100644 index 704a3294..00000000 --- a/patches/server/0028-Optimize-player-loops-around-weather.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: MrIvanPlays -Date: Sun, 9 Aug 2020 16:58:18 -0500 -Subject: [PATCH] Optimize player loops around weather - - -diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 7c60ad59e7dbb2fd4089f762c9bbe1cb5f7b6054..274b7e04ff09e459cd63040b1c29e3d197aafe72 100644 ---- a/src/main/java/net/minecraft/server/WorldServer.java -+++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -821,12 +821,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { - this.server.getPlayerList().sendAll(new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.i, this.thunderLevel)); - } - // */ -- for (int idx = 0; idx < this.players.size(); ++idx) { -- if (((EntityPlayer) this.players.get(idx)).world == this) { -- ((EntityPlayer) this.players.get(idx)).tickWeather(); -+ // Yatopia start -+ for (EntityPlayer player : players) { -+ if (player.world == this) { -+ player.tickWeather(); -+ if (flag != this.isRaining()) player.setPlayerWeather((!flag ? WeatherType.DOWNFALL : WeatherType.CLEAR), false); -+ player.updateWeather(this.lastRainLevel, this.rainLevel, this.lastThunderLevel, this.thunderLevel); -+ // Yatopia end - } - } - -+ /* // Yatopia start - moved up - if (flag != this.isRaining()) { - // Only send weather packets to those affected - for (int idx = 0; idx < this.players.size(); ++idx) { -@@ -841,6 +846,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { - } - } - // CraftBukkit end -+ */ // Yatopia end - - if (this.everyoneSleeping && this.players.stream().noneMatch((entityplayer) -> { - return !entityplayer.isSpectator() && !entityplayer.isDeeplySleeping() && !entityplayer.fauxSleeping; // CraftBukkit diff --git a/patches/server/0028-Optimize-some-stuff-in-WorldServer-ticking.patch b/patches/server/0028-Optimize-some-stuff-in-WorldServer-ticking.patch new file mode 100644 index 00000000..81e809bb --- /dev/null +++ b/patches/server/0028-Optimize-some-stuff-in-WorldServer-ticking.patch @@ -0,0 +1,95 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MrIvanPlays +Date: Sun, 9 Aug 2020 16:58:18 -0500 +Subject: [PATCH] Optimize some stuff in WorldServer ticking + +Replaced some streams and some array lists with glue lists + +diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java +index 7c60ad59e7dbb2fd4089f762c9bbe1cb5f7b6054..57b1152cdedce9a2c566ca59dfbf52a20bbabe70 100644 +--- a/src/main/java/net/minecraft/server/WorldServer.java ++++ b/src/main/java/net/minecraft/server/WorldServer.java +@@ -60,11 +60,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { + public final Int2ObjectMap entitiesById = new Int2ObjectLinkedOpenHashMap(); final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet entitiesForIteration = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(2048, 0.5f, 2048, 0.2, true); // Tuinity - make removing entities while ticking safe + private final Map entitiesByUUID = Maps.newHashMap(); + private final Queue entitiesToAdd = Queues.newArrayDeque(); +- public final List players = Lists.newArrayList(); // Paper - private -> public ++ public final List players = new net.yatopia.server.list.GlueList<>(); // Paper - private -> public // Yatopia + public final ChunkProviderServer chunkProvider; // Paper - public + boolean tickingEntities; + // Paper start +- List afterEntityTickingTasks = Lists.newArrayList(); ++ List afterEntityTickingTasks = new net.yatopia.server.list.GlueList<>(); // Yatopia + public void doIfNotEntityTicking(java.lang.Runnable run) { + if (tickingEntities) { + afterEntityTickingTasks.add(run); +@@ -821,12 +821,21 @@ public class WorldServer extends World implements GeneratorAccessSeed { + this.server.getPlayerList().sendAll(new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.i, this.thunderLevel)); + } + // */ +- for (int idx = 0; idx < this.players.size(); ++idx) { +- if (((EntityPlayer) this.players.get(idx)).world == this) { +- ((EntityPlayer) this.players.get(idx)).tickWeather(); ++ // Yatopia start ++ boolean sleepyMatch = true; ++ for (EntityPlayer player : players) { ++ if (player.world == this) { ++ player.tickWeather(); ++ if (flag != this.isRaining()) player.setPlayerWeather((!flag ? WeatherType.DOWNFALL : WeatherType.CLEAR), false); ++ player.updateWeather(this.lastRainLevel, this.rainLevel, this.lastThunderLevel, this.thunderLevel); + } ++ if (sleepyMatch && !player.isSpectator() && !player.isDeeplySleeping() && !player.fauxSleeping) { ++ sleepyMatch = false; ++ } ++ // Yatopia end + } + ++ /* // Yatopia start - moved up + if (flag != this.isRaining()) { + // Only send weather packets to those affected + for (int idx = 0; idx < this.players.size(); ++idx) { +@@ -841,10 +850,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { + } + } + // CraftBukkit end ++ */ // Yatopia end + +- if (this.everyoneSleeping && this.players.stream().noneMatch((entityplayer) -> { +- return !entityplayer.isSpectator() && !entityplayer.isDeeplySleeping() && !entityplayer.fauxSleeping; // CraftBukkit +- })) { ++ if (this.everyoneSleeping && sleepyMatch) { // Yatopia + // CraftBukkit start + long l = this.worldData.getDayTime() + 24000L; + TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (l - l % 24000L) - this.getDayTime()); +@@ -1014,9 +1022,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { + } + + private void wakeupPlayers() { +- (this.players.stream().filter(EntityLiving::isSleeping).collect(Collectors.toList())).forEach((entityplayer) -> { // CraftBukkit - decompile error ++ for (EntityPlayer entityplayer : players) { if (entityplayer.isSleeping()) { // Yatopia + entityplayer.wakeup(false, false); +- }); ++ }} // Yatopia + } + + // Paper start - optimise random block ticking +@@ -1781,8 +1789,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { + // Spigot start + if ( entity instanceof EntityHuman ) + { +- this.getMinecraftServer().worldServer.values().stream().map( WorldServer::getWorldPersistentData ).forEach( (worldData) -> ++ for ( WorldServer worldServer : getMinecraftServer().worldServer.values() ) // Yatopia + { ++ WorldPersistentData worldData = worldServer.getWorldPersistentData(); // Yatopia + for (Object o : worldData.data.values() ) + { + if ( o instanceof WorldMap ) +@@ -1799,7 +1808,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { + } + } + } +- } ); ++ } // Yatopia + } + // Spigot end + // Spigot Start diff --git a/patches/server/0030-Use-block-distance-in-portal-search-radius.patch b/patches/server/0030-PaperPR-Use-block-distance-in-portal-search-radius.patch similarity index 97% rename from patches/server/0030-Use-block-distance-in-portal-search-radius.patch rename to patches/server/0030-PaperPR-Use-block-distance-in-portal-search-radius.patch index 09e20e35..aa9bdc6e 100644 --- a/patches/server/0030-Use-block-distance-in-portal-search-radius.patch +++ b/patches/server/0030-PaperPR-Use-block-distance-in-portal-search-radius.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Patrick Hemmer Date: Tue, 11 Aug 2020 22:11:53 +0300 -Subject: [PATCH] Use block distance in portal search radius +Subject: [PATCH] PaperPR: Use block distance in portal search radius Original author: Patrick Hemmer diff --git a/patches/server/0034-lithium-collision-optimizations.patch b/patches/server/0034-lithium-collision-optimizations.patch index e6bdb193..821b60b4 100644 --- a/patches/server/0034-lithium-collision-optimizations.patch +++ b/patches/server/0034-lithium-collision-optimizations.patch @@ -1088,7 +1088,7 @@ index 4bdadffee07c54f6f538ba09db72d562d05cb337..eb358d4453fce1de7f15f38b32e594fa } else if (shape instanceof VoxelShapeArray) { VoxelShapeArray shapeCasted = (VoxelShapeArray)shape; diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 274b7e04ff09e459cd63040b1c29e3d197aafe72..97db7999968bceb2f069eb449c64e7da874d787f 100644 +index 57b1152cdedce9a2c566ca59dfbf52a20bbabe70..1c9368951044fe92a284bd94a743178613100028 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -656,8 +656,14 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -1106,7 +1106,7 @@ index 274b7e04ff09e459cd63040b1c29e3d197aafe72..97db7999968bceb2f069eb449c64e7da } @Override -@@ -1730,12 +1736,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1732,12 +1738,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { } // Spigot End this.tileEntityListUnload.addAll(chunk.getTileEntities().values()); diff --git a/patches/server/0043-Fix-LightEngineThreaded-memory-leak.patch b/patches/server/0043-Fix-LightEngineThreaded-memory-leak.patch index 1f81b5e4..c04ecc13 100644 --- a/patches/server/0043-Fix-LightEngineThreaded-memory-leak.patch +++ b/patches/server/0043-Fix-LightEngineThreaded-memory-leak.patch @@ -18,10 +18,10 @@ index 2f9c97dd4e1d705a87772d18c7ab4883a876af08..f3494ac1ad659352ca5595adf9e6919b return this.size == 0 && this.pendingTasks.isEmpty(); } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 97db7999968bceb2f069eb449c64e7da874d787f..b739e19cb50e4f86f1cb100b88cf91fbbbf796b4 100644 +index 1c9368951044fe92a284bd94a743178613100028..11cb25dca79d2db50170252397e9a63223b2e2a5 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -1772,6 +1772,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1774,6 +1774,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } // Paper end diff --git a/patches/server/0053-Fix-merging-spawning-values.patch b/patches/server/0053-PaperPR-Fix-merging-spawning-values.patch similarity index 96% rename from patches/server/0053-Fix-merging-spawning-values.patch rename to patches/server/0053-PaperPR-Fix-merging-spawning-values.patch index 4577c1f3..c5eb6214 100644 --- a/patches/server/0053-Fix-merging-spawning-values.patch +++ b/patches/server/0053-PaperPR-Fix-merging-spawning-values.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Mariell Hoversholm Date: Mon, 28 Sep 2020 16:25:34 +0300 -Subject: [PATCH] Fix merging spawning values +Subject: [PATCH] PaperPR: Fix merging spawning values diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java diff --git a/patches/server/0064-Use-GlueList-for-some-list-initialisations-in-packet.patch b/patches/server/0063-Use-GlueList-for-some-list-initialisations-in-packet.patch similarity index 100% rename from patches/server/0064-Use-GlueList-for-some-list-initialisations-in-packet.patch rename to patches/server/0063-Use-GlueList-for-some-list-initialisations-in-packet.patch diff --git a/patches/server/0065-PaperPR-Fix-harming-potion-dupe.patch b/patches/server/0064-PaperPR-Fix-harming-potion-dupe.patch similarity index 87% rename from patches/server/0065-PaperPR-Fix-harming-potion-dupe.patch rename to patches/server/0064-PaperPR-Fix-harming-potion-dupe.patch index 4ca142d2..fed1ea89 100644 --- a/patches/server/0065-PaperPR-Fix-harming-potion-dupe.patch +++ b/patches/server/0064-PaperPR-Fix-harming-potion-dupe.patch @@ -5,7 +5,7 @@ Subject: [PATCH] PaperPR: Fix harming potion dupe diff --git a/src/main/java/net/minecraft/server/ItemPotion.java b/src/main/java/net/minecraft/server/ItemPotion.java -index 7862b63a245222d9a3d0896bdb2741b0e5e7ac40..105665d6688e860a30fe52980419818ee8ef5a2c 100644 +index 7862b63a245222d9a3d0896bdb2741b0e5e7ac40..47a6e8428f5a9dd19514ee0ad487bcb16dc34214 100644 --- a/src/main/java/net/minecraft/server/ItemPotion.java +++ b/src/main/java/net/minecraft/server/ItemPotion.java @@ -22,6 +22,8 @@ public class ItemPotion extends Item { @@ -26,14 +26,17 @@ index 7862b63a245222d9a3d0896bdb2741b0e5e7ac40..105665d6688e860a30fe52980419818e } else { entityliving.addEffect(new MobEffect(mobeffect), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.POTION_DRINK); // CraftBukkit } -@@ -44,7 +46,21 @@ public class ItemPotion extends Item { +@@ -44,7 +46,24 @@ public class ItemPotion extends Item { } } + // Yatopia start - fix harming potion dupe + if (!world.isClientSide) { -+ for (MobEffect mobeffect : instantLater) { ++ int len = instantLater.size(); ++ while (len > 0) { ++ MobEffect mobeffect = instantLater.remove(0); + mobeffect.getMobEffect().applyInstantEffect(entityhuman, entityhuman, entityliving, mobeffect.getAmplifier(), 1.0D); ++ len--; + } + } + // Yatopia end