From 0a19056af079bb5216c1b2970210d270dbd87e72 Mon Sep 17 00:00:00 2001 From: Ivan Pekov Date: Thu, 8 Oct 2020 14:04:22 +0300 Subject: [PATCH] Drop akarin's stream replacements Fixes bad performance out of the box for production. Apparently there's another issue which is thinkering our minds up, it is that after certain amount of time the gc just can't keep up. We're investigating into this, but until it is fixed - this is gonna be a stable build Co-authored-by: Mykyta Komarn --- PATCHES.md | 9 +- patches/Akarin/api.txt | 1 - patches/Akarin/server.txt | 2 +- .../server/0001-Yatopia-Server-Fixes.patch | 1349 ++--------------- patches/server/0003-Brandings.patch | 8 +- .../0004-Add-GameProfileLookupEvent.patch | 4 +- .../server/0005-Add-last-tick-time-API.patch | 10 +- .../server/0006-Yatopia-configuration.patch | 8 +- ...7-Per-entity-type-collision-settings.patch | 4 +- patches/server/0013-lithium-enum_values.patch | 2 +- .../0014-lithium-MixinGoalSelector.patch | 2 +- .../0018-Option-for-simpler-Villagers.patch | 18 +- ...ize-furnance-fuel-and-recipe-lookups.patch | 6 +- .../0027-Fix-lead-fall-dmg-config.patch | 2 +- ...Optimize-player-loops-around-weather.patch | 14 +- ...ock-distance-in-portal-search-radius.patch | 10 +- .../0032-Send-more-packets-immediately.patch | 2 +- ...0034-lithium-collision-optimizations.patch | 23 +- .../0035-lithium-VoxelShapesMixin.patch | 4 +- .../0036-lithium-MixinChunkSection.patch | 2 +- ...the-chunk-that-you-re-teleporting-to.patch | 6 +- ...ghly-optimize-VillagePlace-filtering.patch | 39 +- .../0039-Nuke-streams-off-BlockPosition.patch | 2 +- ...040-Nuke-streams-off-SectionPosition.patch | 2 +- .../server/0042-ProxyForwardDataEvent.patch | 2 +- ...-Fix-LightEngineThreaded-memory-leak.patch | 4 +- ...Respect-PlayerKickEvent-leaveMessage.patch | 6 +- .../0046-Shutdown-Bootstrap-thread-pool.patch | 2 +- patches/server/0047-Optimize-Villagers.patch | 44 - patches/server/0048-Fix-villager-dupe.patch | 8 +- ...st-command-for-multiple-additions-re.patch | 4 +- ...1-Ensure-pools-create-daemon-threads.patch | 2 +- .../0055-Fix-merging-spawning-values.patch | 4 +- ...-collision-check-for-entity-suffocat.patch | 2 +- patches/server/0059-Add-nspt-command.patch | 4 +- .../0060-Configurable-flight-checks.patch | 2 +- ...ze-recipe-lookups-in-CraftingManager.patch | 89 +- .../server/0064-Async-entity-tracking.patch | 36 +- .../0066-Replace-some-hot-streams.patch | 387 +++++ 39 files changed, 725 insertions(+), 1400 deletions(-) delete mode 100644 patches/Akarin/api.txt create mode 100644 patches/server/0066-Replace-some-hot-streams.patch diff --git a/PATCHES.md b/PATCHES.md index 65a41d4b..ad7d4122 100644 --- a/PATCHES.md +++ b/PATCHES.md @@ -62,8 +62,8 @@ # Patches | server | Fix the dead lagging the server | William Blake Galbreath | | | server | Fix villager dupe | Ivan Pekov | | | server | Global Eula file | tr7zw | | -| server | Heavily optimize furnance fuel and recipe lookups | tr7zw | | -| server | Heavily optimize recipe lookups in CraftingManager | Mykyta Komarn | | +| server | Heavily optimize furnance fuel and recipe lookups | tr7zw | Mykyta Komarn | +| server | Heavily optimize recipe lookups in CraftingManager | Mykyta Komarn | Ivan Pekov | | server | Highly optimize VillagePlace filtering | Ivan Pekov | | | server | Hopper Optimizations | Phoenix616 | | | server | Improve task performance | ishland | Mykyta Komarn | @@ -98,12 +98,9 @@ # Patches | server | ProxyForwardDataEvent | Ivan Pekov | | | server | Purpur config files | William Blake Galbreath | | | server | Redirect Configs | tr7zw | | -| api | Remove Streams using IntelliJ IDEA | ㄗㄠˋ ㄑㄧˊ | | -| server | Remove Streams using IntelliJ IDEA | ㄗㄠˋ ㄑㄧˊ | | -| server | Remove a few more streams | Sotr | | | server | Remove some streams and object allocations | Phoenix616 | | -| server | Remove stream for ender teleport | Sotr | | | 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 | | diff --git a/patches/Akarin/api.txt b/patches/Akarin/api.txt deleted file mode 100644 index c47cae8d..00000000 --- a/patches/Akarin/api.txt +++ /dev/null @@ -1 +0,0 @@ -Remove-Streams-using-IntelliJ-IDEA \ No newline at end of file diff --git a/patches/Akarin/server.txt b/patches/Akarin/server.txt index 013a7d14..0b740613 100644 --- a/patches/Akarin/server.txt +++ b/patches/Akarin/server.txt @@ -1 +1 @@ -Disable-the-Snooper&Avoid-double-I-O-operation-on-load-player-file&Remove-vanilla-profiler-callers&Swaps-the-predicate-order-of-collision&Remove-stream-for-ender-teleport&Remove-a-few-more-streams&Remove-Streams-using-IntelliJ-IDEA \ No newline at end of file +Disable-the-Snooper&Avoid-double-I-O-operation-on-load-player-file&Remove-vanilla-profiler-callers&Swaps-the-predicate-order-of-collision \ No newline at end of file diff --git a/patches/server/0001-Yatopia-Server-Fixes.patch b/patches/server/0001-Yatopia-Server-Fixes.patch index f257ece1..ab64367b 100644 --- a/patches/server/0001-Yatopia-Server-Fixes.patch +++ b/patches/server/0001-Yatopia-Server-Fixes.patch @@ -4,38 +4,6 @@ Date: Thu, 6 Aug 2020 19:47:50 -0500 Subject: [PATCH] Yatopia-Server-Fixes -diff --git a/src/main/java/com/destroystokyo/paper/PaperCommand.java.rej b/src/main/java/com/destroystokyo/paper/PaperCommand.java.rej -deleted file mode 100644 -index 8f31dba6a29514aad6e74e265bf000014cd1e3c3..0000000000000000000000000000000000000000 ---- a/src/main/java/com/destroystokyo/paper/PaperCommand.java.rej -+++ /dev/null -@@ -1,26 +0,0 @@ --diff a/src/main/java/com/destroystokyo/paper/PaperCommand.java b/src/main/java/com/destroystokyo/paper/PaperCommand.java (rejected hunks) --@@ -429,18 +439,18 @@ public class PaperCommand extends Command { -- ChunkProviderServer chunkProviderServer = world.getChunkProvider(); -- -- Collection entities = world.entitiesById.values(); --- entities.forEach(e -> { --- MinecraftKey key = e.getMinecraftKey(); --- if (e.shouldBeRemoved) return; // Paper --+ for (Entity entity : entities) { --+ MinecraftKey key = entity.getMinecraftKey(); --+ if (entity.shouldBeRemoved) continue; -- -- MutablePair> info = list.computeIfAbsent(key, k -> MutablePair.of(0, Maps.newHashMap())); --- ChunkCoordIntPair chunk = new ChunkCoordIntPair(e.getChunkX(), e.getChunkZ()); --+ ChunkCoordIntPair chunk = new ChunkCoordIntPair(entity.getChunkX(), entity.getChunkZ()); -- info.left++; -- info.right.put(chunk, info.right.getOrDefault(chunk, 0) + 1); --- if (!chunkProviderServer.isInEntityTickingChunk(e)) { --+ if (!chunkProviderServer.isInEntityTickingChunk(entity)) { -- nonEntityTicking.merge(key, Integer.valueOf(1), Integer::sum); -- } --- }); --+ } -- -- if (names.size() == 1) { -- MinecraftKey name = names.iterator().next(); diff --git a/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java b/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java index dee9655b89d061ec8218ea2c54660c6003e8548f..253b73cfc597d4c7106d969be7b18c68166128ae 100644 --- a/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java @@ -126,43 +94,6 @@ index 02f5ccf54210776770d3215afb7c8e82f750d57e..00000000000000000000000000000000 - public int pigmenPortalSpawn = 2000; - public double pigmenPortalBoost = 0.0; - public boolean pigmenFarmsWaterAi = false; -diff --git a/src/main/java/net/minecraft/server/AdvancementDataWorld.java b/src/main/java/net/minecraft/server/AdvancementDataWorld.java -index cc0aedf584095f59b4015acc45752d4d6009e154..7b6afeaab4486f90b954f2cd3b044e7bbe31f249 100644 ---- a/src/main/java/net/minecraft/server/AdvancementDataWorld.java -+++ b/src/main/java/net/minecraft/server/AdvancementDataWorld.java -@@ -45,7 +45,7 @@ public class AdvancementDataWorld extends ResourceDataJson { - AdvancementDataWorld.LOGGER.error("Parsing error loading custom advancement {}: {}", minecraftkey, jsonparseexception.getMessage()); - } - -- } -+ }); // Yatopia - fix akarin's shit - Advancements advancements = new Advancements(); - - advancements.a((Map) map1); -diff --git a/src/main/java/net/minecraft/server/AdvancementDataWorld.java.rej b/src/main/java/net/minecraft/server/AdvancementDataWorld.java.rej -deleted file mode 100644 -index e050fe9d3c77054d643570ef380a747c9d4812d4..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/AdvancementDataWorld.java.rej -+++ /dev/null -@@ -1,18 +0,0 @@ --diff a/src/main/java/net/minecraft/server/AdvancementDataWorld.java b/src/main/java/net/minecraft/server/AdvancementDataWorld.java (rejected hunks) --@@ -28,10 +29,12 @@ public class AdvancementDataWorld extends ResourceDataJson { -- protected void a(Map map, IResourceManager iresourcemanager, GameProfilerFiller gameprofilerfiller) { -- Map map1 = Maps.newHashMap(); -- --- map.forEach((minecraftkey, jsonelement) -> { --- // Spigot start --- if (org.spigotmc.SpigotConfig.disabledAdvancements != null && (org.spigotmc.SpigotConfig.disabledAdvancements.contains("*") || org.spigotmc.SpigotConfig.disabledAdvancements.contains(minecraftkey.toString()))) { --- return; --+ for (Map.Entry entry : map.entrySet()) { --+ MinecraftKey minecraftkey = entry.getKey(); --+ JsonElement jsonelement = entry.getValue(); --+// Spigot start --+ if (SpigotConfig.disabledAdvancements != null && (SpigotConfig.disabledAdvancements.contains("*") || SpigotConfig.disabledAdvancements.contains(minecraftkey.toString()))) { --+ continue; -- } -- // Spigot end -- diff --git a/src/main/java/net/minecraft/server/BaseBlockPosition.java b/src/main/java/net/minecraft/server/BaseBlockPosition.java index e811295b4d6afcd920f60e0ce5440e43300d9085..d1064bd1c76eb23ce12e4a0703ce9f2622952897 100644 --- a/src/main/java/net/minecraft/server/BaseBlockPosition.java @@ -222,203 +153,6 @@ index c3d129452b4f6ff2069bc066e594b1c632ceb0d4..00000000000000000000000000000000 - } - - public Behavior.Status a() { -diff --git a/src/main/java/net/minecraft/server/BehaviorInteractDoor.java b/src/main/java/net/minecraft/server/BehaviorInteractDoor.java -index 685351f11497a33ef4ba99055fa7da3a8de18af2..31f9001142ff8507499098f7da013b2b61d6847b 100644 ---- a/src/main/java/net/minecraft/server/BehaviorInteractDoor.java -+++ b/src/main/java/net/minecraft/server/BehaviorInteractDoor.java -@@ -127,6 +127,17 @@ public class BehaviorInteractDoor extends Behavior { - private static boolean a(WorldServer worldserver, EntityLiving entityliving, BlockPosition blockposition) { - BehaviorController behaviorcontroller = entityliving.getBehaviorController(); - -+ // Yatopia start - replaced logic -+ if (!behaviorcontroller.hasMemory(MemoryModuleType.MOBS)) return false; -+ for (EntityLiving entity : behaviorcontroller.getMemory(MemoryModuleType.MOBS).get()) { -+ if (entity.getEntityType() == entityliving.getEntityType() -+ && blockposition.distanceSquared(entity.getPositionVector(), 2.0D) -+ && b(worldserver, entity, blockposition)) { -+ return true; -+ } -+ } -+ return false; -+ /* - return !behaviorcontroller.hasMemory(MemoryModuleType.MOBS) ? false : (behaviorcontroller.getMemory(MemoryModuleType.MOBS).get()).stream().filter((entityliving1) -> { // CraftBukkit - decompile error - return entityliving1.getEntityType() == entityliving.getEntityType(); - }).filter((entityliving1) -> { -@@ -134,6 +145,7 @@ public class BehaviorInteractDoor extends Behavior { - }).anyMatch((entityliving1) -> { - return b(worldserver, entityliving1, blockposition); - }); -+ */ // Yatopia end - } - - private static boolean b(WorldServer worldserver, EntityLiving entityliving, BlockPosition blockposition) { -diff --git a/src/main/java/net/minecraft/server/BehaviorInteractDoor.java.rej b/src/main/java/net/minecraft/server/BehaviorInteractDoor.java.rej -deleted file mode 100644 -index 738aa0c089e2d1f1d8ecb983d3d6351a1d4f690c..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/BehaviorInteractDoor.java.rej -+++ /dev/null -@@ -1,59 +0,0 @@ --diff a/src/main/java/net/minecraft/server/BehaviorInteractDoor.java b/src/main/java/net/minecraft/server/BehaviorInteractDoor.java (rejected hunks) --@@ -2,6 +2,10 @@ package net.minecraft.server; -- -- import com.google.common.collect.ImmutableMap; -- import com.google.common.collect.Sets; --+import org.bukkit.craftbukkit.block.CraftBlock; --+import org.bukkit.event.entity.EntityInteractEvent; --+ --+import java.util.ArrayList; -- import java.util.Iterator; -- import java.util.List; -- import java.util.Set; --@@ -19,9 +23,12 @@ public class BehaviorInteractDoor extends Behavior { -- BehaviorController behaviorcontroller = entityliving.getBehaviorController(); -- PathEntity pathentity = (PathEntity) behaviorcontroller.getMemory(MemoryModuleType.PATH).get(); -- List list = (List) behaviorcontroller.getMemory(MemoryModuleType.INTERACTABLE_DOORS).get(); --- List list1 = (List) pathentity.d().stream().map((pathpoint) -> { --- return new BlockPosition(pathpoint.a, pathpoint.b, pathpoint.c); --- }).collect(Collectors.toList()); --+ List result = new ArrayList<>(); --+ for (PathPoint pathpoint : pathentity.d()) { --+ BlockPosition blockPosition = new BlockPosition(pathpoint.a, pathpoint.b, pathpoint.c); --+ result.add(blockPosition); --+ } --+ List list1 = (List) result; -- Set set = this.a(worldserver, list, list1); -- int j = pathentity.f() - 1; -- --@@ -38,7 +45,7 @@ public class BehaviorInteractDoor extends Behavior { -- } -- -- private void a(WorldServer worldserver, List list, Set set, int i, EntityLiving entityliving, BehaviorController behaviorcontroller) { --- set.forEach((blockposition) -> { --+ for (BlockPosition blockposition : set) { -- int j = list.indexOf(blockposition); -- IBlockData iblockdata = worldserver.getType(blockposition); -- Block block = iblockdata.getBlock(); --@@ -47,10 +54,10 @@ public class BehaviorInteractDoor extends Behavior { -- boolean flag = j >= i; -- -- // CraftBukkit start - entities opening doors --- org.bukkit.event.entity.EntityInteractEvent event = new org.bukkit.event.entity.EntityInteractEvent(entityliving.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(entityliving.world, blockposition)); --+ EntityInteractEvent event = new EntityInteractEvent(entityliving.getBukkitEntity(), CraftBlock.at(entityliving.world, blockposition)); -- entityliving.world.getServer().getPluginManager().callEvent(event); -- if (event.isCancelled()) { --- return; --+ continue; -- } -- // CaftBukkit end -- ((BlockDoor) block).setDoor(worldserver, blockposition, flag); --@@ -70,7 +77,7 @@ public class BehaviorInteractDoor extends Behavior { -- } -- } -- --- }); --+ } -- a(worldserver, list, i, entityliving, behaviorcontroller); -- } -- -diff --git a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java -index bdbb716a91cd320dd9ab39ed6b7442388c92d074..cc88e8c5f24a0f69b75b341ddc1bc2a38bda383e 100644 ---- a/src/main/java/net/minecraft/server/BiomeBase.java -+++ b/src/main/java/net/minecraft/server/BiomeBase.java -@@ -516,7 +516,7 @@ public final class BiomeBase { - private static final Map e; - - static { -- Map map = new HashMap<>(); -+ Map map = new java.util.HashMap<>(); // Yatopia - for (Precipitation biomebase_precipitation : values()) { - if (map.put(biomebase_precipitation.b(), biomebase_precipitation) != null) { - throw new IllegalStateException("Duplicate key"); -@@ -553,7 +553,7 @@ public final class BiomeBase { - private static final Map s; - - static { -- Map map = new HashMap<>(); -+ Map map = new java.util.HashMap<>(); // Yatopia - for (Geography biomebase_geography : values()) { - if (map.put(biomebase_geography.b(), biomebase_geography) != null) { - throw new IllegalStateException("Duplicate key"); -diff --git a/src/main/java/net/minecraft/server/BiomeBase.java.rej b/src/main/java/net/minecraft/server/BiomeBase.java.rej -deleted file mode 100644 -index 96bedf79efa73874a67a7ac6c7672497f3f94f67..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/BiomeBase.java.rej -+++ /dev/null -@@ -1,74 +0,0 @@ --diff a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java (rejected hunks) --@@ -7,15 +7,8 @@ import com.google.common.collect.Sets; -- import com.mojang.serialization.Codec; -- import com.mojang.serialization.codecs.RecordCodecBuilder; -- import it.unimi.dsi.fastutil.longs.Long2FloatLinkedOpenHashMap; ---import java.util.Arrays; ---import java.util.Collection; ---import java.util.Comparator; ---import java.util.Iterator; ---import java.util.List; ---import java.util.Map; ---import java.util.Optional; ---import java.util.Random; ---import java.util.Set; --+ --+import java.util.*; -- import java.util.function.Function; -- import java.util.stream.Collectors; -- import java.util.stream.Stream; --@@ -41,7 +34,14 @@ public class BiomeBase { -- WorldGenSurfaceComposite.a.fieldOf("surface_builder").forGetter(biome -> biome.m), -- Codec.simpleMap(WorldGenStage.Features.c, WorldGenCarverWrapper.a.listOf().promotePartial(SystemUtils.a("Carver: ", LOGGER::error)), INamable.a(WorldGenStage.Features.values())).fieldOf("carvers").forGetter(biome -> biome.q), -- Codec.simpleMap((Codec) k1, WorldGenFeatureConfigured.b.listOf().promotePartial(SystemUtils.a("Feature: ", LOGGER::error)), INamable.a(WorldGenStage.Decoration.values())).fieldOf("features").forGetter(biome -> biome.r), --- StructureFeature.a.listOf().promotePartial(SystemUtils.a("Structure start: ", LOGGER::error)).fieldOf("starts").forGetter(biome -> biome.u.values().stream().sorted(Comparator.comparing(cf -> IRegistry.STRUCTURE_FEATURE.getKey(cf.b))).collect(Collectors.toList())), --+ StructureFeature.a.listOf().promotePartial(SystemUtils.a("Structure start: ", LOGGER::error)).fieldOf("starts").forGetter(biome -> { --+ List> list = new ArrayList<>(); --+ for (StructureFeature structureFeature : biome.u.values()) { --+ list.add(structureFeature); --+ } --+ list.sort(Comparator.comparing(cf -> IRegistry.STRUCTURE_FEATURE.getKey(cf.b))); --+ return list; --+ }), -- Codec.simpleMap(EnumCreatureType.g, BiomeMeta.b.listOf().promotePartial(SystemUtils.a("Spawn data: ", LOGGER::error)), INamable.a(EnumCreatureType.values())).fieldOf("spawners").forGetter(biome -> biome.v), -- d.a.listOf().fieldOf("climate_parameters").forGetter(biome -> biome.x), -- Codec.STRING.optionalFieldOf("parent").forGetter(biome -> Optional.ofNullable(biome.l)) --@@ -159,9 +159,13 @@ public class BiomeBase { -- this.m = worldgensurfacecomposite; -- this.q = map; -- this.r = map1; --- this.u = (Map) list.stream().collect(Collectors.toMap((structurefeature) -> { --- return structurefeature.b; --- }, Function.identity())); --+ Map, StructureFeature> result = new HashMap<>(); --+ for (StructureFeature structurefeature : list) { --+ if (result.put(structurefeature.b, structurefeature) != null) { --+ throw new IllegalStateException("Duplicate key"); --+ } --+ } --+ this.u = (Map) result; -- this.v = Maps.newEnumMap(EnumCreatureType.class); this.v.putAll(map2); // Paper -- this.x = list1; -- this.l = (String) optional.orElse(null); // Paper - decompile fix --@@ -727,9 +749,18 @@ public class BiomeBase { -- -- OCEAN("ocean"), COLD("cold"), MEDIUM("medium"), WARM("warm"); -- --- private static final Map e = (Map) Arrays.stream(values()).collect(Collectors.toMap(BiomeBase.EnumTemperature::a, (biomebase_enumtemperature) -> { --- return biomebase_enumtemperature; --- })); --+ private static final Map e; --+ --+ static { --+ Map map = new HashMap<>(); --+ for (EnumTemperature biomebase_enumtemperature : values()) { --+ if (map.put(biomebase_enumtemperature.a(), biomebase_enumtemperature) != null) { --+ throw new IllegalStateException("Duplicate key"); --+ } --+ } --+ e = (Map) map; --+ } --+ -- private final String f; -- -- private EnumTemperature(String s) { diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java index 65e5b15dc3bf83206438f67053afde6857c97daa..9dfb331652c00904c29d1c6e700f68cf0bce67e8 100644 --- a/src/main/java/net/minecraft/server/Block.java @@ -524,53 +258,6 @@ index 371ae8819eb4f8e20bc765e09bfee9611f047595..00000000000000000000000000000000 - public static void dropItem(World world, BlockPosition blockposition, ItemStack itemstack) { a(world, blockposition, itemstack); } // Purpur - OBFHELPER - public static void a(World world, BlockPosition blockposition, ItemStack itemstack) { - if (!world.isClientSide && !itemstack.isEmpty() && world.getGameRules().getBoolean(GameRules.DO_TILE_DROPS)) { -diff --git a/src/main/java/net/minecraft/server/BlockBase.java b/src/main/java/net/minecraft/server/BlockBase.java -index 100afe2000c981c6837b98436bd53add96e17a29..5541531223456d9890dee154fec058314d56f256 100644 ---- a/src/main/java/net/minecraft/server/BlockBase.java -+++ b/src/main/java/net/minecraft/server/BlockBase.java -@@ -721,9 +721,14 @@ public abstract class BlockBase { - } - - this.b = block.c(iblockdata, BlockAccessAir.INSTANCE, BlockPosition.ZERO, VoxelShapeCollision.a()); -- this.c = Arrays.stream(EnumDirection.EnumAxis.values()).anyMatch((enumdirection_enumaxis) -> { -- return this.b.b(enumdirection_enumaxis) < 0.0D || this.b.c(enumdirection_enumaxis) > 1.0D; -- }); -+ boolean result = false; -+ for (EnumDirection.EnumAxis axis : EnumDirection.EnumAxis.values()) { -+ if (this.b.b(axis) < 0.0D || this.b.c(axis) > 1.0D) { -+ result = true; -+ break; -+ } -+ } -+ this.c = result; - this.j = new boolean[BlockBase.BlockData.Cache.e.length * BlockBase.BlockData.Cache.f]; - EnumDirection[] aenumdirection1 = BlockBase.BlockData.Cache.e; - int k = aenumdirection1.length; -diff --git a/src/main/java/net/minecraft/server/BlockBase.java.rej b/src/main/java/net/minecraft/server/BlockBase.java.rej -deleted file mode 100644 -index 4e6f3d695d5c1a888fe73ea81e936642f3667f48..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/BlockBase.java.rej -+++ /dev/null -@@ -1,19 +0,0 @@ --diff a/src/main/java/net/minecraft/server/BlockBase.java b/src/main/java/net/minecraft/server/BlockBase.java (rejected hunks) --@@ -700,9 +700,14 @@ public abstract class BlockBase { -- } -- -- this.b = block.c(iblockdata, BlockAccessAir.INSTANCE, BlockPosition.ZERO, VoxelShapeCollision.a()); --- this.c = Arrays.stream(EnumDirection.EnumAxis.values()).anyMatch((enumdirection_enumaxis) -> { --- return this.b.b(enumdirection_enumaxis) < 0.0D || this.b.c(enumdirection_enumaxis) > 1.0D; --- }); --+ boolean result = false; --+ for (EnumDirection.EnumAxis enumdirection_enumaxis : EnumDirection.EnumAxis.values()) { --+ if (this.b.b(enumdirection_enumaxis) < 0.0D || this.b.c(enumdirection_enumaxis) > 1.0D) { --+ result = true; --+ break; --+ } --+ } --+ this.c = result; -- this.d = new boolean[6]; -- EnumDirection[] aenumdirection1 = f; -- int k = aenumdirection1.length; diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java index 2291135eaef64c403183724cb6e413cd7e472672..6fcc7ed7c129e6a33386d65b37cbba4a44e96f0f 100644 --- a/src/main/java/net/minecraft/server/BlockPosition.java @@ -693,141 +380,8 @@ index c2b788bb29fdfec9b4b6768a42e32e5af966f0ae..00000000000000000000000000000000 - } - - // Tuinity start - controlled flush for entity tracker packets -diff --git a/src/main/java/net/minecraft/server/ContainerSmithing.java b/src/main/java/net/minecraft/server/ContainerSmithing.java -index 61ef3adcfb021e222042de62ad06a2e7d808f5b5..f53ff805c5edf6398498aad396144d0fc964c74f 100644 ---- a/src/main/java/net/minecraft/server/ContainerSmithing.java -+++ b/src/main/java/net/minecraft/server/ContainerSmithing.java -@@ -73,9 +73,12 @@ public class ContainerSmithing extends ContainerAnvilAbstract { - - @Override - protected boolean a(ItemStack itemstack) { -- return this.i.stream().anyMatch((recipesmithing) -> { -- return recipesmithing.a(itemstack); -- }); -+ for (RecipeSmithing recipe : this.i) { -+ if (recipe.a(itemstack)) { -+ return true; -+ } -+ } -+ return false; - } - - @Override -diff --git a/src/main/java/net/minecraft/server/ContainerSmithing.java.rej b/src/main/java/net/minecraft/server/ContainerSmithing.java.rej -deleted file mode 100644 -index 2317638f225d0ccba97020c4e739d7dea99b78db..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/ContainerSmithing.java.rej -+++ /dev/null -@@ -1,17 +0,0 @@ --diff a/src/main/java/net/minecraft/server/ContainerSmithing.java b/src/main/java/net/minecraft/server/ContainerSmithing.java (rejected hunks) --@@ -70,9 +70,12 @@ public class ContainerSmithing extends ContainerAnvilAbstract { -- -- @Override -- protected boolean a(ItemStack itemstack) { --- return this.i.stream().anyMatch((recipesmithing) -> { --- return recipesmithing.a(itemstack); --- }); --+ for (RecipeSmithing recipesmithing : this.i) { --+ if (recipesmithing.a(itemstack)) { --+ return true; --+ } --+ } --+ return false; -- } -- -- // CraftBukkit start -diff --git a/src/main/java/net/minecraft/server/CraftingManager.java b/src/main/java/net/minecraft/server/CraftingManager.java -index b0b49904e9590b91743ebafb7983a392a6c95083..2cbfef98508bcb07db1ad1e5bdafc4cc2bff1393 100644 ---- a/src/main/java/net/minecraft/server/CraftingManager.java -+++ b/src/main/java/net/minecraft/server/CraftingManager.java -@@ -124,15 +124,22 @@ public class CraftingManager extends ResourceDataJson { - } - - public Optional> getRecipe(MinecraftKey minecraftkey) { -- return this.recipes.values().stream().map((map) -> { -- return map.get(minecraftkey); // CraftBukkit - decompile error -- }).filter(Objects::nonNull).findFirst(); -+ // CraftBukkit - decompile error -+ for (Object2ObjectLinkedOpenHashMap> map : this.recipes.values()) { -+ IRecipe iRecipe = map.get(minecraftkey); -+ if (iRecipe != null) { -+ return Optional.>of(iRecipe); -+ } -+ } -+ return Optional.empty(); - } - - public Collection> b() { -- return (Collection) this.recipes.values().stream().flatMap((map) -> { -- return map.values().stream(); -- }).collect(Collectors.toSet()); -+ Set> set = new HashSet<>(); -+ for (Object2ObjectLinkedOpenHashMap> map : this.recipes.values()) { -+ set.addAll(map.values()); -+ } -+ return set; - } - - public Stream d() { -diff --git a/src/main/java/net/minecraft/server/CraftingManager.java.rej b/src/main/java/net/minecraft/server/CraftingManager.java.rej -deleted file mode 100644 -index adeca862cc3a3d1001c9d515fa2083acef0520e2..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/CraftingManager.java.rej -+++ /dev/null -@@ -1,32 +0,0 @@ --diff a/src/main/java/net/minecraft/server/CraftingManager.java b/src/main/java/net/minecraft/server/CraftingManager.java (rejected hunks) --@@ -127,15 +124,24 @@ public class CraftingManager extends ResourceDataJson { -- } -- -- public Optional> a(MinecraftKey minecraftkey) { --- return this.recipes.values().stream().map((map) -> { --- return map.get(minecraftkey); // CraftBukkit - decompile error --- }).filter(Objects::nonNull).findFirst(); --+ // CraftBukkit - decompile error --+ for (Object2ObjectLinkedOpenHashMap> map : this.recipes.values()) { --+ IRecipe iRecipe = map.get(minecraftkey); --+ if (iRecipe != null) { --+ return Optional.>of(iRecipe); --+ } --+ } --+ return Optional.empty(); -- } -- -- public Collection> b() { --- return (Collection) this.recipes.values().stream().flatMap((map) -> { --- return map.values().stream(); --- }).collect(Collectors.toSet()); --+ Set> set = new HashSet<>(); --+ for (Object2ObjectLinkedOpenHashMap> map : this.recipes.values()) { --+ for (IRecipe iRecipe : map.values()) { --+ set.add(iRecipe); --+ } --+ } --+ return (Collection) set; -- } -- -- public Stream d() { -diff --git a/src/main/java/net/minecraft/server/DispenserRegistry.java.rej b/src/main/java/net/minecraft/server/DispenserRegistry.java.rej -deleted file mode 100644 -index 8347faf8a7ee62d27cf5eb9f285695fddadfa624..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/DispenserRegistry.java.rej -+++ /dev/null -@@ -1,13 +0,0 @@ --diff a/src/main/java/net/minecraft/server/DispenserRegistry.java b/src/main/java/net/minecraft/server/DispenserRegistry.java (rejected hunks) --@@ -156,9 +156,9 @@ public class DispenserRegistry { -- throw new IllegalArgumentException("Not bootstrapped"); -- } else { -- if (SharedConstants.d) { --- b().forEach((s) -> { --+ for (String s : b()) { -- DispenserRegistry.LOGGER.error("Missing translations: " + s); --- }); --+ } -- } -- -- AttributeDefaults.a(); diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 00a46bed2dce148b5adec8aff4267f97f6f90607..6c8368c40501e4c30fb24496a348d9994695ee9a 100644 +index d280ff20082fa526fa08c38eeff5ef21d3134e76..1ec7046dd79c07203d7c4a8c60145db9d0ac3b82 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -440,7 +440,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -896,93 +450,97 @@ index 00a46bed2dce148b5adec8aff4267f97f6f90607..6c8368c40501e4c30fb24496a348d999 return entity; } } else { -@@ -3063,7 +3063,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke - entity.a(entity1, Entity::teleportAndSync); - } - -- } -+ }); // Yatopia - } - } - diff --git a/src/main/java/net/minecraft/server/Entity.java.rej b/src/main/java/net/minecraft/server/Entity.java.rej deleted file mode 100644 -index 4383822bece27e6f165c3c6bdd20458f09da58f5..0000000000000000000000000000000000000000 +index 2ed1659910c17646f3407a2245109501bc4c568a..0000000000000000000000000000000000000000 --- a/src/main/java/net/minecraft/server/Entity.java.rej +++ /dev/null -@@ -1,10 +0,0 @@ +@@ -1,85 +0,0 @@ -diff a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java (rejected hunks) --@@ -3015,7 +3015,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke -- WorldServer worldserver = (WorldServer) this.world; +-@@ -523,7 +523,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +- } - -- this.setPositionRotation(d0, d1, d2, this.yaw, this.pitch); --- this.collectPassengers().forEach((entity) -> { // Akarin - remove stream --+ for (Entity entity : this.collectPassengers()) {// Akarin - remove stream -- worldserver.chunkCheck(entity); -- entity.aE = true; -- Iterator iterator = entity.passengers.iterator(); -diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java.rej b/src/main/java/net/minecraft/server/EntityEnderDragon.java.rej -deleted file mode 100644 -index 39583978bd58994a70718fd009ae8e57f7c60af8..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/EntityEnderDragon.java.rej -+++ /dev/null -@@ -1,13 +0,0 @@ --diff a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java (rejected hunks) --@@ -462,9 +462,9 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { -- TileEntity tileentity = nmsBlock.isTileEntity() ? this.world.getTileEntity(blockposition) : null; -- LootTableInfo.Builder loottableinfo_builder = (new LootTableInfo.Builder((WorldServer) this.world)).a(this.world.random).set(LootContextParameters.POSITION, blockposition).set(LootContextParameters.TOOL, ItemStack.b).set(LootContextParameters.EXPLOSION_RADIUS, 1.0F / event.getYield()).setOptional(LootContextParameters.BLOCK_ENTITY, tileentity); +- this.justCreated = false; +-- this.world.getMethodProfiler().exit(); +-+ //this.world.getMethodProfiler().exit(); // Akarin - remove caller +- } - --- craftBlock.getNMS().a(loottableinfo_builder).forEach((itemstack) -> { --+ for (ItemStack itemstack : craftBlock.getNMS().a(loottableinfo_builder)) { -- Block.a(world, blockposition, itemstack); --- }); --+ } -- craftBlock.getNMS().dropNaturally(world, blockposition, ItemStack.b); +- // Paper start +-@@ -679,7 +679,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke - } -- // Paper start - TNTPrimeEvent -diff --git a/src/main/java/net/minecraft/server/EntityFox.java.rej b/src/main/java/net/minecraft/server/EntityFox.java.rej -deleted file mode 100644 -index c3c7738570d3670b50f144f145b61dcc2d35bb85..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/EntityFox.java.rej -+++ /dev/null -@@ -1,37 +0,0 @@ --diff a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java (rejected hunks) --@@ -1404,12 +1398,29 @@ public class EntityFox extends EntityAnimal { +- } - -- RED(0, "red", new BiomeBase[]{Biomes.TAIGA, Biomes.TAIGA_HILLS, Biomes.TAIGA_MOUNTAINS, Biomes.GIANT_TREE_TAIGA, Biomes.GIANT_SPRUCE_TAIGA, Biomes.GIANT_TREE_TAIGA_HILLS, Biomes.GIANT_SPRUCE_TAIGA_HILLS}), SNOW(1, "snow", new BiomeBase[]{Biomes.SNOWY_TAIGA, Biomes.SNOWY_TAIGA_HILLS, Biomes.SNOWY_TAIGA_MOUNTAINS}); +-- this.world.getMethodProfiler().enter("move"); +-+ //this.world.getMethodProfiler().enter("move"); // Akarin - remove caller +- if (this.x.g() > 1.0E-7D) { +- vec3d = vec3d.h(this.x); +- this.x = Vec3D.a; +-@@ -688,7 +688,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +- // Paper start - ignore movement changes while inactive. +- if (isTemporarilyActive && !(this instanceof EntityItem || this instanceof EntityMinecartAbstract) && vec3d == getMot() && enummovetype == EnumMoveType.SELF) { +- setMot(Vec3D.a); +-- this.world.getMethodProfiler().exit(); +-+ //this.world.getMethodProfiler().exit(); // Akarin - remove caller +- return; +- } +- // Paper end +-@@ -2376,7 +2376,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +- WorldServer worldserver1 = minecraftserver.getWorldServer(resourcekey); - --- private static final EntityFox.Type[] c = (EntityFox.Type[]) Arrays.stream(values()).sorted(Comparator.comparingInt(EntityFox.Type::c)).toArray((i) -> { --- return new EntityFox.Type[i]; --- }); --- private static final Map d = (Map) Arrays.stream(values()).collect(Collectors.toMap(EntityFox.Type::a, (entityfox_type) -> { --- return entityfox_type; --- })); --+ private static final EntityFox.Type[] c; --+ --+ static { --+ List list = new ArrayList<>(); --+ for (Type type : values()) { --+ list.add(type); --+ } --+ list.sort(Comparator.comparingInt(Type::c)); --+ c = (Type[]) list.toArray(new Type[0]); --+ } --+ --+ private static final Map d; --+ --+ static { --+ Map map = new HashMap<>(); --+ for (Type entityfox_type : values()) { --+ if (map.put(entityfox_type.a(), entityfox_type) != null) { --+ throw new IllegalStateException("Duplicate key"); --+ } --+ } --+ d = (Map) map; --+ } --+ -- private final int e; -- private final String f; -- private final List g; +- if (true && !this.isPassenger() && this.portalTicks++ >= i) { // CraftBukkit +-- this.world.getMethodProfiler().enter("portal"); +-+ //this.world.getMethodProfiler().enter("portal"); // Akarin - remove caller +- this.portalTicks = i; +- this.portalCooldown = this.getDefaultPortalCooldown(); +- // CraftBukkit start +-@@ -2386,7 +2386,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +- this.a(worldserver1); +- } +- // CraftBukkit end +-- this.world.getMethodProfiler().exit(); +-+ //this.world.getMethodProfiler().exit(); // Akarin - remove caller +- } +- +- this.inPortal = false; +-@@ -2770,14 +2770,14 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +- } +- // Paper end +- if (this.world instanceof WorldServer && !this.dead) { +-- this.world.getMethodProfiler().enter("changeDimension"); +-+ //this.world.getMethodProfiler().enter("changeDimension"); // Akarin - remove caller +- // CraftBukkit start +- // this.decouple(); +- if (worldserver == null){ +- return null; +- } +- // CraftBukkit end +-- this.world.getMethodProfiler().enter("reposition"); +-+ //this.world.getMethodProfiler().enter("reposition"); // Akarin - remove caller +- Vec3D vec3d = this.getMot(); +- float f = 0.0F; +- BlockPosition blockposition = location; // CraftBukkit +-@@ -2856,7 +2856,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +- this.decouple(); +- // CraftBukkit end +- +-- this.world.getMethodProfiler().exitEnter("reloading"); +-+ //this.world.getMethodProfiler().exitEnter("reloading"); // Akarin - remove caller +- Entity entity = this.getEntityType().a((World) worldserver); +- +- if (entity != null) { +-@@ -2878,10 +2878,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +- } +- +- this.bJ(); +-- this.world.getMethodProfiler().exit(); +-+ //this.world.getMethodProfiler().exit(); // Akarin - remove caller +- ((WorldServer) this.world).resetEmptyTime(); +- worldserver.resetEmptyTime(); +-- this.world.getMethodProfiler().exit(); +-+ //this.world.getMethodProfiler().exit(); // Akarin - remove caller +- return entity; +- } else { +- return null; diff --git a/src/main/java/net/minecraft/server/EntityHoglin.java b/src/main/java/net/minecraft/server/EntityHoglin.java index cf64c8ca2c5348782bf65a13f210564856b69311..5e3094198ce5b720a17db704ab295b1cd5a99ce9 100644 --- a/src/main/java/net/minecraft/server/EntityHoglin.java @@ -1181,7 +739,7 @@ index bccb7cd89241ca30549f5442a4ef9847cfdb67a9..00000000000000000000000000000000 - } - diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index cb624505b93391d09361cc6140759468c65b3f2f..7623705cab7c749fc53187e4d0324fe5f061c545 100644 +index c3ab2adf438ec60248eafeaa169e6c5080f5ec0a..154cb30369fdda685dcb82051a5244dba4d5b912 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -366,7 +366,7 @@ public abstract class EntityLiving extends Entity { @@ -1216,7 +774,7 @@ index cb624505b93391d09361cc6140759468c65b3f2f..7623705cab7c749fc53187e4d0324fe5 this.aL += f2; if (this.isGliding()) { ++this.be; -@@ -2753,19 +2753,19 @@ public abstract class EntityLiving extends Entity { +@@ -2751,19 +2751,19 @@ public abstract class EntityLiving extends Entity { } this.setMot(d4, d5, d6); @@ -1241,7 +799,7 @@ index cb624505b93391d09361cc6140759468c65b3f2f..7623705cab7c749fc53187e4d0324fe5 if (this.jumping && this.cS()) { double d7; -@@ -2792,8 +2792,8 @@ public abstract class EntityLiving extends Entity { +@@ -2790,8 +2790,8 @@ public abstract class EntityLiving extends Entity { this.jumpTicks = 0; } @@ -1252,7 +810,7 @@ index cb624505b93391d09361cc6140759468c65b3f2f..7623705cab7c749fc53187e4d0324fe5 this.aR *= 0.98F; this.aT *= 0.98F; this.r(); -@@ -2802,15 +2802,15 @@ public abstract class EntityLiving extends Entity { +@@ -2800,15 +2800,15 @@ public abstract class EntityLiving extends Entity { // SpigotTimings.timerEntityAIMove.startTiming(); // Spigot // Paper this.g(new Vec3D((double) this.aR, (double) this.aS, (double) this.aT)); // SpigotTimings.timerEntityAIMove.stopTiming(); // Spigot // Paper @@ -1364,64 +922,6 @@ index 947d12a17358d209be65c828e9dd297c54af91ac..00000000000000000000000000000000 - if (!this.world.isClientSide && this.dN() && this.aC()) { - this.damageEntity(DamageSource.DROWN, 1.0F); - } -diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java -index b1d96013e38f4ef1af0c1e398795be53fd9d81e5..ad42bc283e5b64cce893b65a101b8220aef9c5c2 100644 ---- a/src/main/java/net/minecraft/server/EntityPigZombie.java -+++ b/src/main/java/net/minecraft/server/EntityPigZombie.java -@@ -103,15 +103,11 @@ public class EntityPigZombie extends EntityZombie implements IEntityAngerable { - double d0 = this.b(GenericAttributes.FOLLOW_RANGE); - AxisAlignedBB axisalignedbb = AxisAlignedBB.a(this.getPositionVector()).grow(d0, 10.0D, d0); - -- this.world.b(EntityPigZombie.class, axisalignedbb).stream().filter((entitypigzombie) -> { -- return entitypigzombie != this; -- }).filter((entitypigzombie) -> { -- return entitypigzombie.getGoalTarget() == null; -- }).filter((entitypigzombie) -> { -- return !entitypigzombie.r(this.getGoalTarget()); -- }).forEach((entitypigzombie) -> { -- entitypigzombie.setGoalTarget(this.getGoalTarget(), org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_ATTACKED_NEARBY_ENTITY, true); // CraftBukkit -- }); -+ for (EntityPigZombie pigZombie : this.world.b(EntityPigZombie.class, axisalignedbb)) { -+ if (pigZombie != this && pigZombie.getGoalTarget() == null && !pigZombie.r(this.getGoalTarget())) { -+ pigZombie.setGoalTarget(this.getGoalTarget(), EntityTargetEvent.TargetReason.TARGET_ATTACKED_NEARBY_ENTITY, true); -+ } -+ } - } - - private void fa() { -diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java.rej b/src/main/java/net/minecraft/server/EntityPigZombie.java.rej -deleted file mode 100644 -index 39ea87798a00d40a1512c337b74d10c41330cc99..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/EntityPigZombie.java.rej -+++ /dev/null -@@ -1,27 +0,0 @@ --diff a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java (rejected hunks) --@@ -101,15 +103,16 @@ public class EntityPigZombie extends EntityZombie implements IEntityAngerable { -- double d0 = this.b(GenericAttributes.FOLLOW_RANGE); -- AxisAlignedBB axisalignedbb = AxisAlignedBB.a(this.getPositionVector()).grow(d0, 10.0D, d0); -- --- this.world.b(EntityPigZombie.class, axisalignedbb).stream().filter((entitypigzombie) -> { --- return entitypigzombie != this; --- }).filter((entitypigzombie) -> { --- return entitypigzombie.getGoalTarget() == null; --- }).filter((entitypigzombie) -> { --- return !entitypigzombie.r(this.getGoalTarget()); --- }).forEach((entitypigzombie) -> { --- entitypigzombie.setGoalTarget(this.getGoalTarget(), org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_ATTACKED_NEARBY_ENTITY, true); // CraftBukkit --- }); --+ // CraftBukkit --+ for (EntityPigZombie entitypigzombie : this.world.b(EntityPigZombie.class, axisalignedbb)) { --+ if (entitypigzombie != this) { --+ if (entitypigzombie.getGoalTarget() == null) { --+ if (!entitypigzombie.r(this.getGoalTarget())) { --+ entitypigzombie.setGoalTarget(this.getGoalTarget(), EntityTargetEvent.TargetReason.TARGET_ATTACKED_NEARBY_ENTITY, true); --+ } --+ } --+ } --+ } -- } -- -- private void fb() { diff --git a/src/main/java/net/minecraft/server/EntityPiglin.java b/src/main/java/net/minecraft/server/EntityPiglin.java index e1b4330074cf3c3de31dbfcd9e1b99feb7baf669..2581c6da77c3fcec5a18f5fcacf30a36bf6b5ee6 100644 --- a/src/main/java/net/minecraft/server/EntityPiglin.java @@ -1459,54 +959,27 @@ index e1b4330074cf3c3de31dbfcd9e1b99feb7baf669..2581c6da77c3fcec5a18f5fcacf30a36 @Override diff --git a/src/main/java/net/minecraft/server/EntityPiglin.java.rej b/src/main/java/net/minecraft/server/EntityPiglin.java.rej deleted file mode 100644 -index d1016d22fbb2dd15042fd6ccdf2ee7848351e518..0000000000000000000000000000000000000000 +index 9f3608357280a269c655b00feed22ebc29922d52..0000000000000000000000000000000000000000 --- a/src/main/java/net/minecraft/server/EntityPiglin.java.rej +++ /dev/null -@@ -1,23 +0,0 @@ +@@ -1,13 +0,0 @@ -diff a/src/main/java/net/minecraft/server/EntityPiglin.java b/src/main/java/net/minecraft/server/EntityPiglin.java (rejected hunks) --@@ -63,7 +63,9 @@ public class EntityPiglin extends EntityMonster implements ICrossbow { +-@@ -235,9 +235,9 @@ public class EntityPiglin extends EntityMonster implements ICrossbow { +- - @Override -- protected void dropDeathLoot(DamageSource damagesource, int i, boolean flag) { -- super.dropDeathLoot(damagesource, i, flag); --- this.bB.f().forEach(this::a); --+ for (ItemStack itemStack : this.bB.f()) { --+ a(itemStack); --+ } -- } -- -- protected ItemStack k(ItemStack itemstack) { --@@ -259,7 +261,9 @@ public class EntityPiglin extends EntityMonster implements ICrossbow { -- -- private void b(WorldServer worldserver) { -- PiglinAI.c(this); --- this.bB.f().forEach(this::a); --+ for (ItemStack itemStack : this.bB.f()) { --+ a(itemStack); --+ } -- EntityPigZombie entitypigzombie = (EntityPigZombie) this.b(EntityTypes.ZOMBIFIED_PIGLIN); -- -- entitypigzombie.addEffect(new MobEffect(MobEffects.CONFUSION, 200, 0)); +- protected void mobTick() { +-- this.world.getMethodProfiler().enter("piglinBrain"); +-+ //this.world.getMethodProfiler().enter("piglinBrain"); // Akarin - remove caller +- this.getBehaviorController().a((WorldServer) this.world, this); // CraftBukkit - decompile error +-- this.world.getMethodProfiler().exit(); +-+ //this.world.getMethodProfiler().exit(); // Akarin - remove caller +- PiglinAI.b(this); +- if (this.eO()) { +- ++this.bA; diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 8e1655a975af24f6781a95be7030afa8f1b14472..e6f2021e8406f7b14ce41429e871ffaffa52f108 100644 +index 8e1655a975af24f6781a95be7030afa8f1b14472..b43b02c0bdd5dbf0b7d30de90bdc2f74c015ecc8 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -761,11 +761,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { - private void eV() { - AxisAlignedBB axisalignedbb = (new AxisAlignedBB(this.getChunkCoordinates())).grow(32.0D, 10.0D, 32.0D); - -- this.world.b(EntityInsentient.class, axisalignedbb).stream().filter((entityinsentient) -> { -- return entityinsentient instanceof IEntityAngerable; -- }).forEach((entityinsentient) -> { -- ((IEntityAngerable) entityinsentient).b(this); -- }); -+ for (EntityInsentient entityinsentient : this.world.b(EntityInsentient.class, axisalignedbb)) { -+ if (entityinsentient instanceof IEntityAngerable) { -+ ((IEntityAngerable) entityinsentient).b(this); -+ } -+ } - } - - @Override @@ -916,7 +916,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { ShapeDetectorShape shapedetectorshape = this.a(worldserver); @@ -1538,62 +1011,45 @@ index 8e1655a975af24f6781a95be7030afa8f1b14472..e6f2021e8406f7b14ce41429e871ffaf this.playerConnection.sendPacket(new PacketPlayOutAbilities(this.abilities)); diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java.rej b/src/main/java/net/minecraft/server/EntityPlayer.java.rej deleted file mode 100644 -index f9b99b3e7e041b2b9d538de1afe0de30560a569e..0000000000000000000000000000000000000000 +index f5c0ccfcbfeda191e3a077bb4313a8c8b8b4178d..0000000000000000000000000000000000000000 --- a/src/main/java/net/minecraft/server/EntityPlayer.java.rej +++ /dev/null -@@ -1,18 +0,0 @@ +@@ -1,30 +0,0 @@ -diff a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java (rejected hunks) --@@ -756,11 +756,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { -- private void eW() { -- AxisAlignedBB axisalignedbb = (new AxisAlignedBB(this.getChunkCoordinates())).grow(32.0D, 10.0D, 32.0D); +-@@ -900,7 +900,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +- float f1 = this.yaw; +- float f2 = f1; - --- this.world.b(EntityInsentient.class, axisalignedbb).stream().filter((entityinsentient) -> { --- return entityinsentient instanceof IEntityAngerable; --- }).forEach((entityinsentient) -> { --- ((IEntityAngerable) entityinsentient).b((EntityHuman) this); --- }); --+ for (EntityInsentient entityinsentient : this.world.b(EntityInsentient.class, axisalignedbb)) { --+ if (entityinsentient instanceof IEntityAngerable) { --+ ((IEntityAngerable) entityinsentient).b(this); --+ } --+ } -- } +-- worldserver1.getMethodProfiler().enter("moving"); +-+ //worldserver1.getMethodProfiler().enter("moving"); // Akarin - remove caller +- double d3; - -- @Override -diff --git a/src/main/java/net/minecraft/server/EntitySheep.java.rej b/src/main/java/net/minecraft/server/EntitySheep.java.rej -deleted file mode 100644 -index 1137eb4819b638cd04d630ec1692b67ec40c740f..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/EntitySheep.java.rej -+++ /dev/null -@@ -1,23 +0,0 @@ --diff a/src/main/java/net/minecraft/server/EntitySheep.java b/src/main/java/net/minecraft/server/EntitySheep.java (rejected hunks) --@@ -35,9 +33,18 @@ public class EntitySheep extends EntityAnimal implements IShearable { -- enummap.put(EnumColor.RED, Blocks.RED_WOOL); -- enummap.put(EnumColor.BLACK, Blocks.BLACK_WOOL); -- }); --- private static final Map bx = Maps.newEnumMap((Map) Arrays.stream(EnumColor.values()).collect(Collectors.toMap((enumcolor) -> { --- return enumcolor; --- }, EntitySheep::c))); --+ private static final Map bx; --+ --+ static { --+ Map map = new HashMap<>(); --+ for (EnumColor enumcolor : EnumColor.values()) { --+ if (map.put(enumcolor, c(enumcolor)) != null) { --+ throw new IllegalStateException("Duplicate key"); --+ } --+ } --+ bx = Maps.newEnumMap((Map) map); --+ } --+ -- private int by; -- private PathfinderGoalEatTile bz; +- if (worldserver == null) { } else // CraftBukkit - empty to fall through to null to event +-@@ -951,8 +951,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +- // CraftBukkit end - +- // this.setPositionRotation(d0, d1, d2, f1, f); // CraftBukkit - PlayerTeleportEvent handles position changes +-- worldserver1.getMethodProfiler().exit(); +-- worldserver1.getMethodProfiler().enter("placing"); +-+ //worldserver1.getMethodProfiler().exit(); // Akarin - remove caller +-+ //worldserver1.getMethodProfiler().enter("placing"); // Akarin - remove caller +- // Spigot start - SPIGOT-5677, MC-114796: Fix portals generating outside world border +- double d4 = Math.max(-2.9999872E7D, worldserver.getWorldBorder().e() + 16.0D); +- +-@@ -1001,7 +1001,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +- // CraftBukkit end +- } +- +-- worldserver1.getMethodProfiler().exit(); +-+ //worldserver1.getMethodProfiler().exit(); // Akarin - remove caller +- // CraftBukkit start - PlayerTeleportEvent +- PlayerTeleportEvent tpEvent = new PlayerTeleportEvent(this.getBukkitEntity(), enter, exit, cause); +- Bukkit.getServer().getPluginManager().callEvent(tpEvent); diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 7a2ebe663d7c38f93b32f91b43f0a9bd5176f2cc..962257cc86abe5aaa96c03c6db6611843ab59c7f 100644 +index f880a38bf6f829e1503ede67c72848fe3bfc240b..8c58564ee9397e549a51c1a7cb76156c26a82e0c 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -88,6 +88,13 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -92,6 +92,13 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation return behaviorcontroller; } @@ -1607,7 +1063,7 @@ index 7a2ebe663d7c38f93b32f91b43f0a9bd5176f2cc..962257cc86abe5aaa96c03c6db661184 public void c(WorldServer worldserver) { BehaviorController behaviorcontroller = this.getBehaviorController(); -@@ -163,13 +170,13 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -167,13 +174,13 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @Override protected void mobTick() { mobTick(false); } protected void mobTick(boolean inactive) { @@ -1623,40 +1079,6 @@ index 7a2ebe663d7c38f93b32f91b43f0a9bd5176f2cc..962257cc86abe5aaa96c03c6db661184 if (this.bF) { this.bF = false; } -@@ -815,9 +822,12 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation - private int fv() { - InventorySubcontainer inventorysubcontainer = this.getInventory(); - -- return EntityVillager.bp.entrySet().stream().mapToInt((entry) -> { -- return inventorysubcontainer.a((Item) entry.getKey()) * (Integer) entry.getValue(); -- }).sum(); -+ int sum = 0; -+ for (Map.Entry entry : EntityVillager.bp.entrySet()) { -+ int i1 = inventorysubcontainer.a(entry.getKey()) * entry.getValue(); -+ sum += i1; -+ } -+ return sum; - } - - public boolean canPlant() { -@@ -865,9 +875,14 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation - if (this.a(i)) { - AxisAlignedBB axisalignedbb = this.getBoundingBox().grow(10.0D, 10.0D, 10.0D); - List list = worldserver.a(EntityVillager.class, axisalignedbb); -- List list1 = (List) list.stream().filter((entityvillager) -> { -- return entityvillager.a(i); -- }).limit(5L).collect(Collectors.toList()); -+ List list1 = new ArrayList<>(); -+ long limit = 5L; -+ for (EntityVillager villager : list) { -+ if (villager.a(i)) { -+ if (limit-- == 0) break; -+ list1.add(villager); -+ } -+ } - - if (list1.size() >= j) { - EntityIronGolem entityirongolem = this.d(worldserver); diff --git a/src/main/java/net/minecraft/server/EntityVillager.java.rej b/src/main/java/net/minecraft/server/EntityVillager.java.rej deleted file mode 100644 index 538b2c92e050176a1ac0bb4c2315f5b22c7f8eac..0000000000000000000000000000000000000000 @@ -1677,7 +1099,7 @@ index 538b2c92e050176a1ac0bb4c2315f5b22c7f8eac..00000000000000000000000000000000 - - @Override diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java -index 755931841fa5f9c9f4672a281623a8a3e9ecfe9c..3aee7b444ef16d4d30744efdee1f6b071ccaaecb 100644 +index 8886f7934df3549c4d28ab6359f4508ecc23f78d..43fe49e63ec2cdc4073f3c573ad4ac3a45cb993c 100644 --- a/src/main/java/net/minecraft/server/Explosion.java +++ b/src/main/java/net/minecraft/server/Explosion.java @@ -291,7 +291,7 @@ public class Explosion { @@ -1758,35 +1180,11 @@ index 963c90c065a9e362c8c3030bb36ac6bf0c14a8e2..00000000000000000000000000000000 - } - - public boolean checkIfLeftOwner() { return this.h(); } // Purpur - OBFHELPER -diff --git a/src/main/java/net/minecraft/server/LightEngineThreaded.java.rej b/src/main/java/net/minecraft/server/LightEngineThreaded.java.rej -deleted file mode 100644 -index 74d10212e547adf96762155adb03c0158df00a16..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/LightEngineThreaded.java.rej -+++ /dev/null -@@ -1,18 +0,0 @@ --diff a/src/main/java/net/minecraft/server/LightEngineThreaded.java b/src/main/java/net/minecraft/server/LightEngineThreaded.java (rejected hunks) --@@ -288,10 +288,14 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { -- int i = Math.min(queue.size(), 4); -- boolean ran = false; -- while (i-- > 0 && queue.poll(pre, post)) { --- pre.forEach(Runnable::run); --+ for (Runnable runnable1 : pre) { --+ runnable1.run(); --+ } -- pre.clear(); -- super.a(Integer.MAX_VALUE, true, true); --- post.forEach(Runnable::run); --+ for (Runnable runnable : post) { --+ runnable.run(); --+ } -- post.clear(); -- ran = true; -- } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ad2c60a04d7d239f4621613acfb265db7512d162..bb3e62ace9b0e9f599b5434f6f1dd4eede842593 100644 +index 18d50e11a94aa2b093d88a9ffcb40859e1516990..6da7e4acb1993b919afc5c5c063010a26568e707 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1288,7 +1288,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant 0 && this.ticks % autosavePeriod == 0) { // Paper - this.playerList.savePlayers(); - }// Paper -diff --git a/src/main/java/net/minecraft/server/PiglinAI.java b/src/main/java/net/minecraft/server/PiglinAI.java -index 0407fa1751d89a037da8cb01f5ceef9b9833dd18..65abc7fbddf78662c4eb2a918848f775a0cd2eb0 100644 ---- a/src/main/java/net/minecraft/server/PiglinAI.java -+++ b/src/main/java/net/minecraft/server/PiglinAI.java -@@ -359,16 +359,17 @@ public class PiglinAI { - public static void a(EntityHuman entityhuman, boolean flag) { - List list = entityhuman.world.a(EntityPiglin.class, entityhuman.getBoundingBox().g(16.0D)); // CraftBukkit - decompile error - -- list.stream().filter(PiglinAI::d).filter((entitypiglin) -> { -- return !flag || BehaviorUtil.c(entitypiglin, entityhuman); -- }).forEach((entitypiglin) -> { -- if (entitypiglin.world.getGameRules().getBoolean(GameRules.UNIVERSAL_ANGER)) { -- d((EntityPiglinAbstract) entitypiglin, (EntityLiving) entityhuman); -- } else { -- c((EntityPiglinAbstract) entitypiglin, (EntityLiving) entityhuman); -+ for (EntityPiglinAbstract entitypiglin : list) { -+ if (d(entitypiglin)) { -+ if (!flag || BehaviorUtil.c(entitypiglin, entityhuman)) { -+ if (entitypiglin.world.getGameRules().getBoolean(GameRules.UNIVERSAL_ANGER)) { -+ d(entitypiglin, entityhuman); -+ } else { -+ c(entitypiglin, entityhuman); -+ } -+ } - } -- -- }); -+ } - } - - public static EnumInteractionResult a(EntityPiglin entitypiglin, EntityHuman entityhuman, EnumHand enumhand) { -@@ -460,9 +461,13 @@ public class PiglinAI { - } - - protected static boolean e(EntityPiglin entitypiglin) { -- return entitypiglin.getBehaviorController().hasMemory(MemoryModuleType.HUNTED_RECENTLY) || m(entitypiglin).stream().anyMatch((entitypiglinabstract) -> { -- return entitypiglinabstract.getBehaviorController().hasMemory(MemoryModuleType.HUNTED_RECENTLY); -- }); -+ if (entitypiglin.getBehaviorController().hasMemory(MemoryModuleType.HUNTED_RECENTLY)) return true; -+ for (EntityPiglinAbstract entitypiglin1 : m(entitypiglin)) { -+ if (entitypiglin1.getBehaviorController().hasMemory(MemoryModuleType.HUNTED_RECENTLY)) { -+ return true; -+ } -+ } -+ return false; - } - - private static List m(EntityPiglin entitypiglin) { -diff --git a/src/main/java/net/minecraft/server/PiglinAI.java.rej b/src/main/java/net/minecraft/server/PiglinAI.java.rej -deleted file mode 100644 -index c15111ef7bbb8f71d1b5e5ce812f4526746a3651..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/PiglinAI.java.rej -+++ /dev/null -@@ -1,90 +0,0 @@ --diff a/src/main/java/net/minecraft/server/PiglinAI.java b/src/main/java/net/minecraft/server/PiglinAI.java (rejected hunks) --@@ -358,16 +358,18 @@ public class PiglinAI { -- public static void a(EntityHuman entityhuman, boolean flag) { -- List list = entityhuman.world.a(EntityPiglin.class, entityhuman.getBoundingBox().g(16.0D)); -- --- list.stream().filter(PiglinAI::k).filter((entitypiglin) -> { --- return !flag || BehaviorUtil.c(entitypiglin, entityhuman); --- }).forEach((entitypiglin) -> { --- if (entitypiglin.world.getGameRules().getBoolean(GameRules.UNIVERSAL_ANGER)) { --- f(entitypiglin, entityhuman); --- } else { --- c(entitypiglin, (EntityLiving) entityhuman); --- } --+ for (EntityPiglin entitypiglin : list) { --+ if (k(entitypiglin)) { --+ if (!flag || BehaviorUtil.c(entitypiglin, entityhuman)) { --+ if (entitypiglin.world.getGameRules().getBoolean(GameRules.UNIVERSAL_ANGER)) { --+ f(entitypiglin, entityhuman); --+ } else { --+ c(entitypiglin, entityhuman); --+ } -- --- }); --+ } --+ } --+ } -- } -- -- public static EnumInteractionResult a(EntityPiglin entitypiglin, EntityHuman entityhuman, EnumHand enumhand) { --@@ -459,9 +461,13 @@ public class PiglinAI { -- } -- -- protected static boolean e(EntityPiglin entitypiglin) { --- return entitypiglin.getBehaviorController().hasMemory(MemoryModuleType.HUNTED_RECENTLY) || q(entitypiglin).stream().anyMatch((entitypiglin1) -> { --- return entitypiglin1.getBehaviorController().hasMemory(MemoryModuleType.HUNTED_RECENTLY); --- }); --+ if (entitypiglin.getBehaviorController().hasMemory(MemoryModuleType.HUNTED_RECENTLY)) return true; --+ for (EntityPiglin entitypiglin1 : q(entitypiglin)) { --+ if (entitypiglin1.getBehaviorController().hasMemory(MemoryModuleType.HUNTED_RECENTLY)) { --+ return true; --+ } --+ } --+ return false; -- } -- -- private static List q(EntityPiglin entitypiglin) { --@@ -501,23 +507,25 @@ public class PiglinAI { -- } -- -- protected static void b(EntityPiglin entitypiglin, EntityLiving entityliving) { --- r(entitypiglin).forEach((entitypiglin1) -> { --+ for (EntityPiglin entitypiglin1 : r(entitypiglin)) { -- if (entityliving.getEntityType() != EntityTypes.HOGLIN || entitypiglin1.eN() && ((EntityHoglin) entityliving).eP()) { -- g(entitypiglin1, entityliving); -- } --- }); --+ } -- } -- -- protected static void f(EntityPiglin entitypiglin) { --- r(entitypiglin).forEach((entitypiglin1) -> { --+ for (EntityPiglin entitypiglin1 : r(entitypiglin)) { -- i(entitypiglin1).ifPresent((entityhuman) -> { --- c(entitypiglin1, (EntityLiving) entityhuman); --+ c(entitypiglin1, entityhuman); -- }); --- }); --+ } -- } -- -- protected static void g(EntityPiglin entitypiglin) { --- q(entitypiglin).forEach(PiglinAI::j); --+ for (EntityPiglin entityPiglin : q(entitypiglin)) { --+ j(entityPiglin); --+ } -- } -- -- protected static void c(EntityPiglin entitypiglin, EntityLiving entityliving) { --@@ -568,9 +576,9 @@ public class PiglinAI { -- } -- -- private static void h(EntityPiglin entitypiglin, EntityLiving entityliving) { --- q(entitypiglin).forEach((entitypiglin1) -> { --+ for (EntityPiglin entitypiglin1 : q(entitypiglin)) { -- i(entitypiglin1, entityliving); --- }); --+ } -- } -- -- private static void i(EntityPiglin entitypiglin, EntityLiving entityliving) { -diff --git a/src/main/java/net/minecraft/server/PlayerChunk.java.rej b/src/main/java/net/minecraft/server/PlayerChunk.java.rej -deleted file mode 100644 -index fce02f5fcef5179e63997c0b06277601c911ecb7..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/PlayerChunk.java.rej -+++ /dev/null -@@ -1,22 +0,0 @@ --diff a/src/main/java/net/minecraft/server/PlayerChunk.java b/src/main/java/net/minecraft/server/PlayerChunk.java (rejected hunks) --@@ -2,6 +2,7 @@ package net.minecraft.server; -- -- import com.mojang.datafixers.util.Either; -- import java.util.List; --+import java.util.Map; -- import java.util.Optional; -- import java.util.concurrent.CompletableFuture; -- import java.util.concurrent.atomic.AtomicReferenceArray; --@@ -745,7 +746,11 @@ public class PlayerChunk { -- if (getCurrentPriority() != priority) { -- this.v.a(this.location, this::getCurrentPriority, priority, this::setPriority); // use preferred priority -- int neighborsPriority = getNeighborsPriority(); --- this.neighbors.forEach((neighbor, neighborDesired) -> neighbor.setNeighborPriority(this, neighborsPriority)); --+ for (Map.Entry entry : this.neighbors.entrySet()) { --+ PlayerChunk neighbor = entry.getKey(); --+ ChunkStatus neighborDesired = entry.getValue(); --+ neighbor.setNeighborPriority(this, neighborsPriority); --+ } -- } -- // Paper end -- this.oldTicketLevel = this.ticketLevel; -diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java.rej b/src/main/java/net/minecraft/server/PlayerChunkMap.java.rej -deleted file mode 100644 -index 759862aba781ec6f1ae0c9a76c4ab6352d603a4c..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/PlayerChunkMap.java.rej -+++ /dev/null -@@ -1,84 +0,0 @@ --diff a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java (rejected hunks) --@@ -480,53 +471,53 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { -- double playerChunkZ = MathHelper.floor(player.locZ()) >> 4; -- pos.setValues(player.locX(), 0, player.locZ()); -- double twoThirdModifier = 2D / 3D; --- MCUtil.getSpiralOutChunks(pos, Math.min(6, viewDistance)).forEach(coord -> { --- if (shouldSkipPrioritization(coord)) return; --+ for (ChunkCoordIntPair coordIntPair : MCUtil.getSpiralOutChunks(pos, Math.min(6, viewDistance))) { --+ if (shouldSkipPrioritization(coordIntPair)) continue; -- --- double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, coord.x, 0, coord.z); --+ double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, coordIntPair.x, 0, coordIntPair.z); -- // Prioritize immediate -- if (dist <= 4 * 4) { --- updateChunkPriorityMap(priorities, coord.pair(), (int) (27 - Math.sqrt(dist))); --- return; --+ updateChunkPriorityMap(priorities, coordIntPair.pair(), (int) (27 - Math.sqrt(dist))); --+ continue; -- } -- -- // Prioritize nearby chunks --- updateChunkPriorityMap(priorities, coord.pair(), (int) (20 - Math.sqrt(dist) * twoThirdModifier)); --- }); --+ updateChunkPriorityMap(priorities, coordIntPair.pair(), (int) (20 - Math.sqrt(dist) * twoThirdModifier)); --+ } -- -- // Prioritize Frustum near 3 -- ChunkCoordIntPair front3 = player.getChunkInFront(3); -- pos.setValues(front3.x << 4, 0, front3.z << 4); --- MCUtil.getSpiralOutChunks(pos, Math.min(5, viewDistance)).forEach(coord -> { --- if (shouldSkipPrioritization(coord)) return; --+ for (ChunkCoordIntPair chunkCoordIntPair : MCUtil.getSpiralOutChunks(pos, Math.min(5, viewDistance))) { --+ if (shouldSkipPrioritization(chunkCoordIntPair)) continue; -- --- double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, coord.x, 0, coord.z); --- updateChunkPriorityMap(priorities, coord.pair(), (int) (25 - Math.sqrt(dist) * twoThirdModifier)); --- }); --+ double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, chunkCoordIntPair.x, 0, chunkCoordIntPair.z); --+ updateChunkPriorityMap(priorities, chunkCoordIntPair.pair(), (int) (25 - Math.sqrt(dist) * twoThirdModifier)); --+ } -- -- // Prioritize Frustum near 5 -- if (viewDistance > 4) { -- ChunkCoordIntPair front5 = player.getChunkInFront(5); -- pos.setValues(front5.x << 4, 0, front5.z << 4); --- MCUtil.getSpiralOutChunks(pos, 4).forEach(coord -> { --- if (shouldSkipPrioritization(coord)) return; --+ for (ChunkCoordIntPair coord : MCUtil.getSpiralOutChunks(pos, 4)) { --+ if (shouldSkipPrioritization(coord)) continue; -- -- double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, coord.x, 0, coord.z); -- updateChunkPriorityMap(priorities, coord.pair(), (int) (25 - Math.sqrt(dist) * twoThirdModifier)); --- }); --+ } -- } -- -- // Prioritize Frustum far 7 -- if (viewDistance > 6) { -- ChunkCoordIntPair front7 = player.getChunkInFront(7); -- pos.setValues(front7.x << 4, 0, front7.z << 4); --- MCUtil.getSpiralOutChunks(pos, 3).forEach(coord -> { --+ for (ChunkCoordIntPair coord : MCUtil.getSpiralOutChunks(pos, 3)) { -- if (shouldSkipPrioritization(coord)) { --- return; --+ continue; -- } -- double dist = MCUtil.distance(playerChunkX, 0, playerChunkZ, coord.x, 0, coord.z); -- updateChunkPriorityMap(priorities, coord.pair(), (int) (25 - Math.sqrt(dist) * twoThirdModifier)); --- }); --+ } -- } -- -- pos.close(); --@@ -1122,7 +1131,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { -- if (ioThrowable != null) { -- com.destroystokyo.paper.util.SneakyThrow.sneaky(ioThrowable); -- } --- chunkHolder.tasks.forEach(Runnable::run); --+ for (Runnable task : chunkHolder.tasks) { --+ task.run(); --+ } -- // Paper end -- -- if (chunkHolder.protoChunk != null) {try (Timing ignored2 = this.world.timings.chunkLoadLevelTimer.startTimingIfSync()) { // Paper start - timings // Paper - chunk is created async diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java -index e10995ec30dd9a10d781b3c1709fd2db5a9becdd..dbd6efb897ed62d0a9eda503e9af819e3243c174 100644 +index e10995ec30dd9a10d781b3c1709fd2db5a9becdd..f6ffefd7e356c9c68cb6591cab55de9363442faf 100644 --- a/src/main/java/net/minecraft/server/PortalTravelAgent.java +++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java -@@ -23,15 +23,17 @@ public class PortalTravelAgent { +@@ -23,15 +23,19 @@ public class PortalTravelAgent { // CraftBukkit end villageplace.a(this.world, blockposition, i); - Optional optional = villageplace.b((villageplacetype) -> { - return villageplacetype == VillagePlaceType.v; - }, blockposition, i, VillagePlace.Occupancy.ANY).sorted(Comparator.comparingDouble((VillagePlaceRecord villageplacerecord) -> { // CraftBukkit - decompile error -+ Comparator comparator = Comparator.comparingDouble((VillagePlaceRecord villageplacerecord) -> { // CraftBukkit - decompile error ++ Comparator comparator = Comparator.comparingDouble((VillagePlaceRecord villageplacerecord) -> { // CraftBukkit - decompile error // Yatopia return villageplacerecord.f().j(blockposition); }).thenComparingInt((villageplacerecord) -> { return villageplacerecord.f().getY(); - })).filter((villageplacerecord) -> { - return this.world.getType(villageplacerecord.f()).b(BlockProperties.E); - }).findFirst(); -+ }); ++ }); // Yatopia ++ // Yatopia start + java.util.List list = villageplace.b(type -> type == VillagePlaceType.v, blockposition, i, VillagePlace.Occupancy.ANY).collect(java.util.stream.Collectors.toList()); + Optional optional = Optional.empty(); + if (!list.isEmpty()) { + list.sort(comparator); + optional = Optional.ofNullable(retrieveRecord(list)); + } ++ // Yatopia end return optional.map((villageplacerecord) -> { BlockPosition blockposition1 = villageplacerecord.f(); -@@ -45,6 +47,12 @@ public class PortalTravelAgent { +@@ -45,6 +49,12 @@ public class PortalTravelAgent { }); } @@ -2114,71 +1252,6 @@ index e10995ec30dd9a10d781b3c1709fd2db5a9becdd..dbd6efb897ed62d0a9eda503e9af819e public Optional createPortal(BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) { // CraftBukkit start return this.createPortal(blockposition, enumdirection_enumaxis, null, 16); -diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java.rej b/src/main/java/net/minecraft/server/PortalTravelAgent.java.rej -deleted file mode 100644 -index e8002e718bce73e4cfedcab7636a85a773dfb099..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/PortalTravelAgent.java.rej -+++ /dev/null -@@ -1,24 +0,0 @@ --diff a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java (rejected hunks) --@@ -57,11 +57,20 @@ public class PortalTravelAgent { -- List list = (List) villageplace.b((villageplacetype) -> { -- return villageplacetype == VillagePlaceType.v; -- }, blockposition, searchRadius, VillagePlace.Occupancy.ANY).collect(Collectors.toList()); // CraftBukkit - searchRadius --- Optional optional = list.stream().min(Comparator.comparingDouble((villageplacerecord) -> { // CraftBukkit - decompile error --+ boolean seen = false; --+ VillagePlaceRecord best = null; --+ Comparator comparator = Comparator.comparingDouble((villageplacerecord) -> { // CraftBukkit - decompile error -- return villageplacerecord.f().j(blockposition); -- }).thenComparingInt((villageplacerecord) -> { -- return villageplacerecord.f().getY(); --- })); --+ }); --+ for (VillagePlaceRecord villagePlaceRecord : list) { --+ if (!seen || comparator.compare(villagePlaceRecord, best) < 0) { --+ seen = true; --+ best = villagePlaceRecord; --+ } --+ } --+ Optional optional = seen ? Optional.of(best) : Optional.empty(); -- -- return (ShapeDetector.Shape) optional.map((villageplacerecord) -> { -- BlockPosition blockposition1 = villageplacerecord.f(); -diff --git a/src/main/java/net/minecraft/server/RegistryMaterials.java.rej b/src/main/java/net/minecraft/server/RegistryMaterials.java.rej -deleted file mode 100644 -index c29a9979eb97870b2b13c4b5fa68395aa40e8059..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/RegistryMaterials.java.rej -+++ /dev/null -@@ -1,29 +0,0 @@ --diff a/src/main/java/net/minecraft/server/RegistryMaterials.java b/src/main/java/net/minecraft/server/RegistryMaterials.java (rejected hunks) --@@ -181,17 +181,22 @@ public class RegistryMaterials extends IRegistryWritable { -- return Codec.unboundedMap(MinecraftKey.a.xmap(ResourceKey.a(resourcekey), ResourceKey::a), mapcodec.codec()).xmap((map) -> { -- RegistryMaterials registrymaterials = new RegistryMaterials<>(resourcekey, lifecycle); -- --- map.forEach((resourcekey1, object) -> { --+ for (Entry, T> entry : map.entrySet()) { --+ ResourceKey resourcekey1 = entry.getKey(); --+ T object = entry.getValue(); -- registrymaterials.a(registrymaterials.bd, resourcekey1, object); -- registrymaterials.d(resourcekey1); --- }); --+ } -- return registrymaterials; -- }, (registrymaterials) -> { -- com.google.common.collect.ImmutableMap.Builder, T> com_google_common_collect_immutablemap_builder = ImmutableMap.builder(); -- --- registrymaterials.bb.entrySet().stream().filter((entry) -> { --- return registrymaterials.c((ResourceKey) entry.getKey()); --- }).forEach(entry1 -> com_google_common_collect_immutablemap_builder.put((java.util.Map.Entry,? extends T>) entry1)); // Paper - compiler fix (expand method reference + add cast) --+ // Paper - compiler fix (expand method reference + add cast) --+ for (Entry, T> entry : registrymaterials.bb.entrySet()) { --+ if (registrymaterials.c(entry.getKey())) { --+ com_google_common_collect_immutablemap_builder.put(entry); --+ } --+ } -- return com_google_common_collect_immutablemap_builder.build(); -- }); -- } diff --git a/src/main/java/net/minecraft/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java index c3bd58069d8dbdf36f70f1dafd7c24000f31708b..f915cb4e1110e39178527903ae93508f9459d7ca 100644 --- a/src/main/java/net/minecraft/server/StructureGenerator.java @@ -2214,34 +1287,6 @@ index 2ae4a20ca763c60c9661661d2ae558bd5b6f79a1..00000000000000000000000000000000 - // Origami start - option to only find generated features to not generate new chunks - IChunkAccess ichunkaccess = iworldreader.getChunkAt(chunkcoordintpair.x, chunkcoordintpair.z, ChunkStatus.STRUCTURE_STARTS, !(iworldreader instanceof World) || !((World) iworldreader).origamiConfig.onlyFindGeneratedFeatures); - if (ichunkaccess == null) { -diff --git a/src/main/java/net/minecraft/server/TileEntityShulkerBox.java.rej b/src/main/java/net/minecraft/server/TileEntityShulkerBox.java.rej -deleted file mode 100644 -index bada470cba41cce9beb9eb04227b42c1d489d731..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/TileEntityShulkerBox.java.rej -+++ /dev/null -@@ -1,22 +0,0 @@ --diff a/src/main/java/net/minecraft/server/TileEntityShulkerBox.java b/src/main/java/net/minecraft/server/TileEntityShulkerBox.java (rejected hunks) --@@ -10,7 +11,19 @@ import org.bukkit.entity.HumanEntity; -- -- public class TileEntityShulkerBox extends TileEntityLootable implements IWorldInventory, ITickable { -- --- private static final int[] a = IntStream.range(0, 27).toArray(); --+ private static final int[] a; --+ --+ static { --+ int[] arr = new int[10]; --+ int count = 0; --+ for (int i1 = 0; i1 < 27; i1++) { --+ if (arr.length == count) arr = Arrays.copyOf(arr, count * 2); --+ arr[count++] = i1; --+ } --+ arr = Arrays.copyOfRange(arr, 0, count); --+ a = arr; --+ } --+ -- private NonNullList contents; -- private int c; -- private TileEntityShulkerBox.AnimationPhase i; diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index c0815269be89c2b9d316ccaf8ccfa15beec98cc4..b06264b2315d7fed50946050445117c8aa930b3c 100644 --- a/src/main/java/net/minecraft/server/World.java @@ -2298,41 +1343,6 @@ index 313aa8f7d47c53a6a0130994c9d61d7c073c95c6..00000000000000000000000000000000 - this.chunkPacketBlockController = this.paperConfig.antiXray ? new ChunkPacketBlockControllerAntiXray(this, executor) : ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray - this.generator = gen; - this.world = new CraftWorld((WorldServer) this, gen, env); -diff --git a/src/main/java/net/minecraft/server/WorldDataServer.java b/src/main/java/net/minecraft/server/WorldDataServer.java -index a7e623044aece1f46e2d039cd2dcf710120ac267..dbcee8f22389e8a1ce58539cd8839bcc4fc3c720 100644 ---- a/src/main/java/net/minecraft/server/WorldDataServer.java -+++ b/src/main/java/net/minecraft/server/WorldDataServer.java -@@ -122,7 +122,10 @@ public class WorldDataServer implements IWorldDataServer, SaveData { - private void a(IRegistryCustom iregistrycustom, NBTTagCompound nbttagcompound, @Nullable NBTTagCompound nbttagcompound1) { - NBTTagList nbttaglist = new NBTTagList(); - -- this.C.stream().map(NBTTagString::a).forEach(nbttaglist::add); -+ for (String s : C) { -+ NBTTagString a = NBTTagString.a(s); -+ nbttaglist.add(a); -+ } - nbttagcompound.set("ServerBrands", nbttaglist); - nbttagcompound.setBoolean("WasModded", this.D); - NBTTagCompound nbttagcompound2 = new NBTTagCompound(); -diff --git a/src/main/java/net/minecraft/server/WorldDataServer.java.rej b/src/main/java/net/minecraft/server/WorldDataServer.java.rej -deleted file mode 100644 -index ce6a0e3807550ef3652d4e1ab8695f7afe9fc8f8..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/WorldDataServer.java.rej -+++ /dev/null -@@ -1,13 +0,0 @@ --diff a/src/main/java/net/minecraft/server/WorldDataServer.java b/src/main/java/net/minecraft/server/WorldDataServer.java (rejected hunks) --@@ -120,7 +120,10 @@ public class WorldDataServer implements IWorldDataServer, SaveData { -- private void a(IRegistryCustom iregistrycustom, NBTTagCompound nbttagcompound, @Nullable NBTTagCompound nbttagcompound1) { -- NBTTagList nbttaglist = new NBTTagList(); -- --- this.B.stream().map(NBTTagString::a).forEach(nbttaglist::add); --+ for (String s : this.B) { --+ NBTTagString a = NBTTagString.a(s); --+ nbttaglist.add(a); --+ } -- nbttagcompound.set("ServerBrands", nbttaglist); -- nbttagcompound.setBoolean("WasModded", this.C); -- NBTTagCompound nbttagcompound2 = new NBTTagCompound(); diff --git a/src/main/java/net/minecraft/server/WorldNBTStorage.java b/src/main/java/net/minecraft/server/WorldNBTStorage.java index d627a25830646d8808950238f451fa0adbab4ec6..a959672f5857b987001252c3fd7ace9e83e07c9b 100644 --- a/src/main/java/net/minecraft/server/WorldNBTStorage.java @@ -2363,10 +1373,10 @@ index 3a35169eaf680c45fe42922eb5f0014fa422c31c..00000000000000000000000000000000 - } - // Spigot Start diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 333b003d62e27492220af30b361f105d3c7cbd4c..72d033f2dae5d8a4670265fbd9c125701b945be1 100644 +index ba04eefa0c0017e3b321187dfae85c6a89be57c5..7c60ad59e7dbb2fd4089f762c9bbe1cb5f7b6054 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -869,11 +869,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -868,11 +868,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { this.P(); this.b(); @@ -2380,7 +1390,7 @@ index 333b003d62e27492220af30b361f105d3c7cbd4c..72d033f2dae5d8a4670265fbd9c12570 timings.scheduledBlocks.startTiming(); // Paper if (!this.isDebugWorld()) { this.nextTickListBlock.b(); -@@ -882,17 +882,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -881,17 +881,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { timings.scheduledBlocks.stopTiming(); // Paper // Tuinity - replace logic @@ -2401,7 +1411,7 @@ index 333b003d62e27492220af30b361f105d3c7cbd4c..72d033f2dae5d8a4670265fbd9c12570 boolean flag3 = true || !this.players.isEmpty() || !this.getForceLoadedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players if (flag3) { -@@ -1038,7 +1038,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1031,7 +1031,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { int k = chunkcoordintpair.e(); GameProfilerFiller gameprofilerfiller = this.getMethodProfiler(); @@ -2410,7 +1420,7 @@ index 333b003d62e27492220af30b361f105d3c7cbd4c..72d033f2dae5d8a4670265fbd9c12570 final BlockPosition.MutableBlockPosition blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change if (!this.paperConfig.disableThunder && flag && this.V() && this.random.nextInt(100000) == 0) { // Paper - Disable thunder -@@ -1278,13 +1278,13 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1271,13 +1271,13 @@ public class WorldServer extends World implements GeneratorAccessSeed { gameprofilerfiller.a(() -> { return IRegistry.ENTITY_TYPE.getKey(entity.getEntityType()).toString(); }); @@ -2426,7 +1436,7 @@ index 333b003d62e27492220af30b361f105d3c7cbd4c..72d033f2dae5d8a4670265fbd9c12570 } this.chunkCheck(entity); -@@ -1326,7 +1326,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1319,7 +1319,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { gameprofilerfiller.a(() -> { return IRegistry.ENTITY_TYPE.getKey(entity1.getEntityType()).toString(); }); @@ -2435,7 +1445,7 @@ index 333b003d62e27492220af30b361f105d3c7cbd4c..72d033f2dae5d8a4670265fbd9c12570 // Paper start - EAR 2 if (isActive) { entity1.passengerTick(); -@@ -1337,7 +1337,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1330,7 +1330,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { entity.syncPositionOf(entity1); } // Paper end - EAR 2 @@ -2521,7 +1531,7 @@ index 72e1528c1250a4b59abed862c8ccb2507a66c862..00000000000000000000000000000000 - - this.chunkCheck(entity1); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 4a7285bd8e9ba3b7ad94c67c1880cc216cea5bc9..b7000990cfbf8116e9c3e98ea8e84e6541a989c8 100644 +index 4a7285bd8e9ba3b7ad94c67c1880cc216cea5bc9..75a1524791923864f325100c0e9ed3fa8f187247 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -129,11 +129,6 @@ public class PurpurConfig { @@ -2536,16 +1546,6 @@ index 4a7285bd8e9ba3b7ad94c67c1880cc216cea5bc9..b7000990cfbf8116e9c3e98ea8e84e65 public static double laggingThreshold = 19.0D; private static void tickLoopSettings() { laggingThreshold = getDouble("settings.lagging-threshold", laggingThreshold); -@@ -172,4 +167,9 @@ public class PurpurConfig { - private static void fixItemPositionDesync() { - fixItemPositionDesync = getBoolean("settings.fix-item-position-desync", fixItemPositionDesync); - } -+ -+ public static boolean tpsCatchup = true; -+ private static void tpsCatchup() { -+ tpsCatchup = getBoolean("settings.tps-catchup", tpsCatchup); -+ } - } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index 361f7857e461578e90cb71e15027dadaf794cb69..9fd735bb4e5590be1eec958f10acb76abb719dc1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -2704,10 +1704,10 @@ index c32fd03bad569d36b2225e89e9b550b08f83e4e2..00000000000000000000000000000000 - voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); - raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 7d6e9e3b284b062db5ecf9fb9b1de31d2c0ba769..b07659d2df48f3d131c8ddf94ff2a1e12afc3d08 100644 +index 3cc0feac5e69e70a996d45696682f1b638c23eec..ed594eb6c8102b0ce1b52f2d2db714aa9fdeffd0 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -844,6 +844,7 @@ public final class CraftServer implements Server { +@@ -858,6 +858,7 @@ public final class CraftServer implements Server { com.destroystokyo.paper.PaperConfig.init((File) console.options.valueOf("paper-settings")); // Paper com.tuinity.tuinity.config.TuinityConfig.init((File) console.options.valueOf("tuinity-settings")); // Tuinity - Server Config net.pl3x.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur @@ -2715,7 +1715,7 @@ index 7d6e9e3b284b062db5ecf9fb9b1de31d2c0ba769..b07659d2df48f3d131c8ddf94ff2a1e1 for (WorldServer world : console.getWorlds()) { world.worldDataServer.setDifficulty(config.difficulty); world.setSpawnFlags(config.spawnMonsters, config.spawnAnimals); -@@ -880,6 +881,7 @@ public final class CraftServer implements Server { +@@ -894,6 +895,7 @@ public final class CraftServer implements Server { world.paperConfig.init(); // Paper world.tuinityConfig.init(); // Tuinity - Server Config world.purpurConfig.init(); // Purpur @@ -2723,7 +1723,7 @@ index 7d6e9e3b284b062db5ecf9fb9b1de31d2c0ba769..b07659d2df48f3d131c8ddf94ff2a1e1 } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -2265,6 +2267,13 @@ public final class CraftServer implements Server { +@@ -2279,6 +2281,13 @@ public final class CraftServer implements Server { } // Purpur end @@ -2737,7 +1737,7 @@ index 7d6e9e3b284b062db5ecf9fb9b1de31d2c0ba769..b07659d2df48f3d131c8ddf94ff2a1e1 @Override public void restart() { org.spigotmc.RestartCommand.restart(); -@@ -2404,4 +2413,11 @@ public final class CraftServer implements Server { +@@ -2416,4 +2425,11 @@ public final class CraftServer implements Server { return mobGoals; } // Paper end @@ -2808,44 +1808,3 @@ index 27a6c3279b77f24edcea24f3a01559145d2f4da1..00000000000000000000000000000000 - // Paper start - acceptsAll(asList("server-name"), "Name of the server") - .withRequiredArg() -diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index 30cd34fb26ff0c4fe9b9ff5cede6c118160909f8..026ebaecfd8edf36cb85d868dd855ec4aa8a8415 100644 ---- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -@@ -682,8 +682,12 @@ public class CraftBlock implements Block { - - // Modelled off EntityHuman#hasBlock - if (item == null || !iblockdata.isRequiresSpecialTool() || nms.canDestroySpecialBlock(iblockdata)) { -- return net.minecraft.server.Block.getDrops(iblockdata, (WorldServer) world.getMinecraftWorld(), position, world.getTileEntity(position), entity == null ? null : ((CraftEntity) entity).getHandle(), nms) -- .stream().map(CraftItemStack::asBukkitCopy).collect(Collectors.toList()); -+ List list = new ArrayList<>(); -+ for (net.minecraft.server.ItemStack itemStack : net.minecraft.server.Block.getDrops(iblockdata, world.getMinecraftWorld(), position, world.getTileEntity(position), entity == null ? null : ((CraftEntity) entity).getHandle(), nms)) { -+ ItemStack stack = CraftItemStack.asBukkitCopy(itemStack); -+ list.add(stack); -+ } -+ return list; - } else { - return Collections.emptyList(); - } -diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java.rej b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java.rej -deleted file mode 100644 -index a0c4f6c35175538d82f4019f306aeca122522e20..0000000000000000000000000000000000000000 ---- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java.rej -+++ /dev/null -@@ -1,16 +0,0 @@ --diff a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java (rejected hunks) --@@ -675,8 +677,12 @@ public class CraftBlock implements Block { -- -- // Modelled off EntityHuman#hasBlock -- if (item == null || !iblockdata.isAlwaysDestroyable() || nms.canDestroySpecialBlock(iblockdata)) { --- return net.minecraft.server.Block.getDrops(iblockdata, (WorldServer) world.getMinecraftWorld(), position, world.getTileEntity(position), entity == null ? null : ((CraftEntity) entity).getHandle(), nms) --- .stream().map(CraftItemStack::asBukkitCopy).collect(Collectors.toList()); --+ List list = new ArrayList<>(); --+ for (net.minecraft.server.ItemStack itemStack : net.minecraft.server.Block.getDrops(iblockdata, (WorldServer) world.getMinecraftWorld(), position, world.getTileEntity(position), entity == null ? null : ((CraftEntity) entity).getHandle(), nms)) { --+ ItemStack stack = CraftItemStack.asBukkitCopy(itemStack); --+ list.add(stack); --+ } --+ return list; -- } else { -- return Collections.emptyList(); -- } diff --git a/patches/server/0003-Brandings.patch b/patches/server/0003-Brandings.patch index b75e140c..5f6de36f 100644 --- a/patches/server/0003-Brandings.patch +++ b/patches/server/0003-Brandings.patch @@ -39,10 +39,10 @@ index 74ed02fa9296583977bb721014b10ff8b708b43c..a13c7b2b5bc79ecaea404779149ed02c .completer(new ConsoleCommandCompleter(this.server)) ); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index bb3e62ace9b0e9f599b5434f6f1dd4eede842593..a610187193cc0b19a34e93939fa2a96105157810 100644 +index 6da7e4acb1993b919afc5c5c063010a26568e707..96943eae34eb95d14f45cd59bc73c7901baf27c4 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1513,7 +1513,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a610187193cc0b19a34e93939fa2a96105157810..680c139e249fce8dedf5a63ac5034b930b8e8540 100644 +index 96943eae34eb95d14f45cd59bc73c7901baf27c4..ac31ce44ec5605a9f6bede0e68c13a7696ad0521 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -928,6 +928,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant list = com.tuinity.tuinity.util.CachedLists.getTempGetEntitiesList(); diff --git a/patches/server/0013-lithium-enum_values.patch b/patches/server/0013-lithium-enum_values.patch index 6496f906..9d6cd660 100644 --- a/patches/server/0013-lithium-enum_values.patch +++ b/patches/server/0013-lithium-enum_values.patch @@ -39,7 +39,7 @@ index 5d3bb5f393a1e0e4a2e8b9a466530a91279697a9..7f084e7f11a829c10d113c7fb39eec0b if (enumdirection2 != EnumDirection.DOWN && world.isBlockFacePowered(blockposition1.shift(enumdirection2), enumdirection2)) { return true; diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index bf1cea04d5c997106a55775a4ad5b27267032f87..3fcf1c09def4675ecf815cb161561574ef802d0c 100644 +index f09fc6460f514367aad146e4122e18a679961e2a..d7e72ae7c33c55f05b59932404c81544ab483864 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2580,10 +2580,12 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/server/0014-lithium-MixinGoalSelector.patch b/patches/server/0014-lithium-MixinGoalSelector.patch index 9a20d956..651590ea 100644 --- a/patches/server/0014-lithium-MixinGoalSelector.patch +++ b/patches/server/0014-lithium-MixinGoalSelector.patch @@ -9,7 +9,7 @@ Original code by JellySquid, licensed under GNU Lesser General Public License v3 you can find the original code on https://github.com/jellysquid3/lithium-fabric/tree/1.16.x/fabric (Yarn mappings) diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java -index b783028e5526df722d98e4760ffb214d5d2f83dd..9be854ebef1eb23ee4cc5d733e43dfca7d6439f7 100644 +index 81df1cf34db8a1477bd394acd4e10b0da197c595..3cac9ebf4f9e2d9289a71e2065260b628b8ad19f 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java @@ -11,6 +11,7 @@ import java.util.function.Supplier; diff --git a/patches/server/0018-Option-for-simpler-Villagers.patch b/patches/server/0018-Option-for-simpler-Villagers.patch index b4f490aa..0c061ae1 100644 --- a/patches/server/0018-Option-for-simpler-Villagers.patch +++ b/patches/server/0018-Option-for-simpler-Villagers.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for simpler Villagers diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 962257cc86abe5aaa96c03c6db6611843ab59c7f..16e52c38788719b275c92390893a6e9c0e769eb7 100644 +index 8c58564ee9397e549a51c1a7cb76156c26a82e0c..939ef3bd6439a68dba4224661d050c6af0164178 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -27,6 +27,7 @@ import org.bukkit.event.entity.VillagerReplenishTradeEvent; +@@ -31,6 +31,7 @@ import org.bukkit.event.entity.VillagerReplenishTradeEvent; public class EntityVillager extends EntityVillagerAbstract implements ReputationHandler, VillagerDataHolder { @@ -16,7 +16,7 @@ index 962257cc86abe5aaa96c03c6db6611843ab59c7f..16e52c38788719b275c92390893a6e9c private static final DataWatcherObject br = DataWatcher.a(EntityVillager.class, DataWatcherRegistry.q); public static final Map bp = ImmutableMap.of(Items.BREAD, 4, Items.POTATO, 1, Items.CARROT, 1, Items.BEETROOT, 1); private static final Set bs = ImmutableSet.of(Items.BREAD, Items.POTATO, Items.CARROT, Items.WHEAT, Items.WHEAT_SEEDS, Items.BEETROOT, new Item[]{Items.BEETROOT_SEEDS}); -@@ -63,13 +64,55 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -67,13 +68,55 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation public EntityVillager(EntityTypes entitytypes, World world, VillagerType villagertype) { super(entitytypes, world); this.by = new Reputation(); @@ -72,7 +72,7 @@ index 962257cc86abe5aaa96c03c6db6611843ab59c7f..16e52c38788719b275c92390893a6e9c @Override public BehaviorController getBehaviorController() { return (BehaviorController) super.getBehaviorController(); // CraftBukkit - decompile error -@@ -82,6 +125,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -86,6 +129,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @Override protected BehaviorController a(Dynamic dynamic) { @@ -80,7 +80,7 @@ index 962257cc86abe5aaa96c03c6db6611843ab59c7f..16e52c38788719b275c92390893a6e9c BehaviorController behaviorcontroller = this.cJ().a(dynamic); this.a(behaviorcontroller); -@@ -167,10 +211,39 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -171,10 +215,39 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } // Spigot End @@ -120,7 +120,7 @@ index 962257cc86abe5aaa96c03c6db6611843ab59c7f..16e52c38788719b275c92390893a6e9c // Purpur start boolean tick = (world.getTime() + brainTickOffset) % world.purpurConfig.villagerBrainTicks == 0; if (((WorldServer) world).getMinecraftServer().lagging ? tick : world.purpurConfig.villagerUseBrainTicksOnlyWhenLagging || tick) -@@ -340,6 +413,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -344,6 +417,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation return this.bD == 0 || this.bD < 2 && this.world.getTime() > this.bC + 2400L; } @@ -128,7 +128,7 @@ index 962257cc86abe5aaa96c03c6db6611843ab59c7f..16e52c38788719b275c92390893a6e9c public boolean fc() { long i = this.bC + 12000L; long j = this.world.getTime(); -@@ -362,6 +436,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -366,6 +440,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation return this.fn() && this.fm(); } @@ -136,7 +136,7 @@ index 962257cc86abe5aaa96c03c6db6611843ab59c7f..16e52c38788719b275c92390893a6e9c private void fo() { int i = 2 - this.bD; -@@ -592,6 +667,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -596,6 +671,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } private void a(Entity entity) { @@ -144,7 +144,7 @@ index 962257cc86abe5aaa96c03c6db6611843ab59c7f..16e52c38788719b275c92390893a6e9c if (this.world instanceof WorldServer) { Optional> optional = this.bg.getMemory(MemoryModuleType.VISIBLE_MOBS); -@@ -617,6 +693,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -612,6 +688,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } public void a(MemoryModuleType memorymoduletype) { diff --git a/patches/server/0019-Heavily-optimize-furnance-fuel-and-recipe-lookups.patch b/patches/server/0019-Heavily-optimize-furnance-fuel-and-recipe-lookups.patch index 3ef9d5a3..19aff42e 100644 --- a/patches/server/0019-Heavily-optimize-furnance-fuel-and-recipe-lookups.patch +++ b/patches/server/0019-Heavily-optimize-furnance-fuel-and-recipe-lookups.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Heavily optimize furnance fuel and recipe lookups Co-authored-by: Mykyta Komarn diff --git a/src/main/java/net/minecraft/server/TileEntityFurnace.java b/src/main/java/net/minecraft/server/TileEntityFurnace.java -index 99bd8626b28a837f0da2268d89fddb6d28b2a944..ba9424eafc02a5311e0cbd43c340ca8962917acc 100644 +index 1d3c2dd93657fb5dc71ee6b444c585b54619d1e8..77ea56c5a25fe09a1721429d42965ad34d905870 100644 --- a/src/main/java/net/minecraft/server/TileEntityFurnace.java +++ b/src/main/java/net/minecraft/server/TileEntityFurnace.java @@ -83,7 +83,14 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I @@ -32,7 +32,7 @@ index 99bd8626b28a837f0da2268d89fddb6d28b2a944..ba9424eafc02a5311e0cbd43c340ca89 return map; } -@@ -273,7 +281,10 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I +@@ -271,7 +279,10 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I this.cookTime = MathHelper.clamp(this.cookTime - 2, 0, this.cookTimeTotal); } } else { @@ -44,7 +44,7 @@ index 99bd8626b28a837f0da2268d89fddb6d28b2a944..ba9424eafc02a5311e0cbd43c340ca89 if (!this.isBurning() && this.canBurn(irecipe)) { // CraftBukkit start -@@ -599,4 +610,18 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I +@@ -597,4 +608,18 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I } } diff --git a/patches/server/0027-Fix-lead-fall-dmg-config.patch b/patches/server/0027-Fix-lead-fall-dmg-config.patch index 58430643..d317e46f 100644 --- a/patches/server/0027-Fix-lead-fall-dmg-config.patch +++ b/patches/server/0027-Fix-lead-fall-dmg-config.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix lead fall dmg config diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 6c8368c40501e4c30fb24496a348d9994695ee9a..7fda4b1492783e37b5bf83f7d33df92d46fa8ff0 100644 +index 1ec7046dd79c07203d7c4a8c60145db9d0ac3b82..898446130f264055eeca2e5de3c30201e05f484a 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -1264,6 +1264,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke diff --git a/patches/server/0028-Optimize-player-loops-around-weather.patch b/patches/server/0028-Optimize-player-loops-around-weather.patch index 4ab2c67f..704a3294 100644 --- a/patches/server/0028-Optimize-player-loops-around-weather.patch +++ b/patches/server/0028-Optimize-player-loops-around-weather.patch @@ -5,10 +5,10 @@ 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 72d033f2dae5d8a4670265fbd9c125701b945be1..0c8500ddc5a6662da7de292639e976b07d3a29d6 100644 +index 7c60ad59e7dbb2fd4089f762c9bbe1cb5f7b6054..274b7e04ff09e459cd63040b1c29e3d197aafe72 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -814,12 +814,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -821,12 +821,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { this.server.getPlayerList().sendAll(new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.i, this.thunderLevel)); } // */ @@ -19,8 +19,8 @@ index 72d033f2dae5d8a4670265fbd9c125701b945be1..0c8500ddc5a6662da7de292639e976b0 + for (EntityPlayer player : players) { + if (player.world == this) { + player.tickWeather(); -+ player.updateWeather(this.lastRainLevel, this.rainLevel, this.lastThunderLevel, this.thunderLevel); + if (flag != this.isRaining()) player.setPlayerWeather((!flag ? WeatherType.DOWNFALL : WeatherType.CLEAR), false); ++ player.updateWeather(this.lastRainLevel, this.rainLevel, this.lastThunderLevel, this.thunderLevel); + // Yatopia end } } @@ -29,11 +29,11 @@ index 72d033f2dae5d8a4670265fbd9c125701b945be1..0c8500ddc5a6662da7de292639e976b0 if (flag != this.isRaining()) { // Only send weather packets to those affected for (int idx = 0; idx < this.players.size(); ++idx) { -@@ -833,6 +838,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { - ((EntityPlayer) this.players.get(idx)).updateWeather(this.lastRainLevel, this.rainLevel, this.lastThunderLevel, this.thunderLevel); +@@ -841,6 +846,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } } -+ */ // Yatopia end // CraftBukkit end ++ */ // Yatopia end - if (this.everyoneSleeping) { + if (this.everyoneSleeping && this.players.stream().noneMatch((entityplayer) -> { + return !entityplayer.isSpectator() && !entityplayer.isDeeplySleeping() && !entityplayer.fauxSleeping; // CraftBukkit diff --git a/patches/server/0030-Use-block-distance-in-portal-search-radius.patch b/patches/server/0030-Use-block-distance-in-portal-search-radius.patch index 337f7a95..09e20e35 100644 --- a/patches/server/0030-Use-block-distance-in-portal-search-radius.patch +++ b/patches/server/0030-Use-block-distance-in-portal-search-radius.patch @@ -28,14 +28,13 @@ index 4230872de3551393a35c567d07a570dd07976fb8..febd0a7413382e059b681a43cc9ac42a } diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java -index dbd6efb897ed62d0a9eda503e9af819e3243c174..99c641e409a416f22ba6c7d0d321a8816977d344 100644 +index f6ffefd7e356c9c68cb6591cab55de9363442faf..eddf3dff9a00bf3c7318745e52befd4c04fa2af7 100644 --- a/src/main/java/net/minecraft/server/PortalTravelAgent.java +++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java -@@ -29,6 +29,15 @@ public class PortalTravelAgent { - return villageplacerecord.f().getY(); - }); +@@ -30,6 +30,13 @@ public class PortalTravelAgent { + }); // Yatopia + // Yatopia start java.util.List list = villageplace.b(type -> type == VillagePlaceType.v, blockposition, i, VillagePlace.Occupancy.ANY).collect(java.util.stream.Collectors.toList()); -+ // Yatopia start - fix portal bug + if (world.origamiConfig.useBlockDistanceInPortalSearchRadius) { + list.removeIf(villagePlaceRecord -> { + BlockPosition portalPosition = villagePlaceRecord.getPosition(); @@ -43,7 +42,6 @@ index dbd6efb897ed62d0a9eda503e9af819e3243c174..99c641e409a416f22ba6c7d0d321a881 + || Math.abs(portalPosition.getZ() - blockposition.getZ()) > i; + }); + } -+ // Yatopia end Optional optional = Optional.empty(); if (!list.isEmpty()) { list.sort(comparator); diff --git a/patches/server/0032-Send-more-packets-immediately.patch b/patches/server/0032-Send-more-packets-immediately.patch index 104ab049..0029d15c 100644 --- a/patches/server/0032-Send-more-packets-immediately.patch +++ b/patches/server/0032-Send-more-packets-immediately.patch @@ -11,7 +11,7 @@ as the server shouldn't really care about those packets - they're not related wi Additionally, I'm thinking of making those packets send asynchronously. diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index fe123dc746c96b465393b2af788fae9519e5e55c..5b4901acf7d4661e52839a7ab0ebe24b93bec0d6 100644 +index aa1597c77251ce18da47532209476cd42239e874..332f8ec16f48fb158b8cd058d3115b006ba34134 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java @@ -229,7 +229,11 @@ public class NetworkManager extends SimpleChannelInboundHandler> { diff --git a/patches/server/0034-lithium-collision-optimizations.patch b/patches/server/0034-lithium-collision-optimizations.patch index 39956b1b..0f2ec847 100644 --- a/patches/server/0034-lithium-collision-optimizations.patch +++ b/patches/server/0034-lithium-collision-optimizations.patch @@ -849,7 +849,7 @@ index ac6e5e3309affc830d4db07fd9b8d809c3085033..b7fcbef8d38c9406a891d64f8016bc16 @Override public NBTTagCompound i(BlockPosition blockposition) { diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 7fda4b1492783e37b5bf83f7d33df92d46fa8ff0..a86f958ad01b5b935413b093540f8d3a2f4fb41a 100644 +index 898446130f264055eeca2e5de3c30201e05f484a..ebb35de9a2293594c1ec936463ea175cc0a8bec0 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -73,7 +73,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -1029,10 +1029,10 @@ index 882b82d8952d34f6e3c639404d1a1521dedf1bb0..ccf1416000354b78ccef78b072062ce0 default EntityHuman findNearbyPlayer(Entity entity, double d0, @Nullable Predicate predicate) { return this.findNearbyPlayer(entity.locX(), entity.locY(), entity.locZ(), d0, predicate); } // Paper diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index c3eb85c71539ebdb1b6c9a386e4de9ba717f030e..9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e 100644 +index e94d99f2284aec0e0c374a880122ff7d30f9c2be..6c8cb39ac8786734cda994ef29ba74c685f3b9be 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -1343,11 +1343,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1334,11 +1334,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { chunk.setLoaded(true); this.world.a(chunk.getTileEntities().values()); List list = null; @@ -1046,17 +1046,8 @@ index c3eb85c71539ebdb1b6c9a386e4de9ba717f030e..9f32a26fdbfaf024cfe5c0996c2253f2 Iterator iterator = entityslice.iterator(); while (iterator.hasNext()) { -@@ -1640,7 +1640,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { - // CraftBukkit - decompile error - csvwriter.a(chunkcoordintpair.x, chunkcoordintpair.z, playerchunk.getTicketLevel(), optional.isPresent(), optional.map(IChunkAccess::getChunkStatus).orElse(null), optional1.map(Chunk::getState).orElse(null), a(playerchunk.c()), a(playerchunk.a()), a(playerchunk.b()), this.chunkDistanceManager.c(entry.getLongKey()), !this.isOutsideOfRange(chunkcoordintpair), optional1.map((chunk) -> { - int sum = 0; -- for (List entities : chunk.getEntitySlices()) { -+ for (EntitySlice entities : chunk.getAsSlices()) { // Yatopia - this was caused due to md_5 being stupid - int size = entities.size(); - sum += size; - } diff --git a/src/main/java/net/minecraft/server/VoxelShapes.java b/src/main/java/net/minecraft/server/VoxelShapes.java -index f9a1f5e92a7559a50dfb72d7455a8fc03dbad25f..3094ce00b3fa5b266f5d0ad0875f160e80c62e18 100644 +index 4bdadffee07c54f6f538ba09db72d562d05cb337..eb358d4453fce1de7f15f38b32e594fa63e4deb5 100644 --- a/src/main/java/net/minecraft/server/VoxelShapes.java +++ b/src/main/java/net/minecraft/server/VoxelShapes.java @@ -40,7 +40,9 @@ public final class VoxelShapes { @@ -1070,10 +1061,10 @@ index f9a1f5e92a7559a50dfb72d7455a8fc03dbad25f..3094ce00b3fa5b266f5d0ad0875f160e } 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 0c8500ddc5a6662da7de292639e976b07d3a29d6..a991fb7b6123ebcf7b6e42f8cdd2f3377ab14970 100644 +index 274b7e04ff09e459cd63040b1c29e3d197aafe72..97db7999968bceb2f069eb449c64e7da874d787f 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -649,8 +649,14 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -656,8 +656,14 @@ public class WorldServer extends World implements GeneratorAccessSeed { } public final void getCollisions(@Nullable Entity entity, AxisAlignedBB axisalignedbb, List list, boolean loadChunks) { @@ -1088,7 +1079,7 @@ index 0c8500ddc5a6662da7de292639e976b07d3a29d6..a991fb7b6123ebcf7b6e42f8cdd2f337 } @Override -@@ -1737,12 +1743,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1730,12 +1736,12 @@ public class WorldServer extends World implements GeneratorAccessSeed { } // Spigot End this.tileEntityListUnload.addAll(chunk.getTileEntities().values()); diff --git a/patches/server/0035-lithium-VoxelShapesMixin.patch b/patches/server/0035-lithium-VoxelShapesMixin.patch index 15308d17..b8a1f3cc 100644 --- a/patches/server/0035-lithium-VoxelShapesMixin.patch +++ b/patches/server/0035-lithium-VoxelShapesMixin.patch @@ -33,10 +33,10 @@ index 700660dd93b3090334bb3033d5f5fdd6ab684744..fd34dffa63995c1fc277eac28eb1cd23 return this.a(EnumAxisCycle.a(enumdirection_enumaxis, EnumDirection.EnumAxis.X), axisalignedbb, d0); } diff --git a/src/main/java/net/minecraft/server/VoxelShapes.java b/src/main/java/net/minecraft/server/VoxelShapes.java -index 3094ce00b3fa5b266f5d0ad0875f160e80c62e18..10060c9a87ceb35b06bc00430cd4aceac1b6600f 100644 +index eb358d4453fce1de7f15f38b32e594fa63e4deb5..88f309073bc4aa6fe0e5421b1d85977aebf5fbb1 100644 --- a/src/main/java/net/minecraft/server/VoxelShapes.java +++ b/src/main/java/net/minecraft/server/VoxelShapes.java -@@ -278,6 +278,21 @@ public final class VoxelShapes { +@@ -274,6 +274,21 @@ public final class VoxelShapes { return 0.0D; } else { EnumAxisCycle enumaxiscycle1 = enumaxiscycle.a(); diff --git a/patches/server/0036-lithium-MixinChunkSection.patch b/patches/server/0036-lithium-MixinChunkSection.patch index c4447217..65bde6c1 100644 --- a/patches/server/0036-lithium-MixinChunkSection.patch +++ b/patches/server/0036-lithium-MixinChunkSection.patch @@ -7,7 +7,7 @@ Original code by JellySquid, licensed under LGPLv3 you can find the original code on https://github.com/jellysquid3/lithium-fabric/ (Yarn mappings) diff --git a/src/main/java/net/minecraft/server/BlockBase.java b/src/main/java/net/minecraft/server/BlockBase.java -index 5541531223456d9890dee154fec058314d56f256..c1f992b2ebac9819085bec74bc40ca3b5384c741 100644 +index 100afe2000c981c6837b98436bd53add96e17a29..fb083996c10f553d7eff629a815b11eb7f0bf42c 100644 --- a/src/main/java/net/minecraft/server/BlockBase.java +++ b/src/main/java/net/minecraft/server/BlockBase.java @@ -345,6 +345,8 @@ public abstract class BlockBase { diff --git a/patches/server/0037-Load-also-the-chunk-that-you-re-teleporting-to.patch b/patches/server/0037-Load-also-the-chunk-that-you-re-teleporting-to.patch index 5964c89f..6b54c25e 100644 --- a/patches/server/0037-Load-also-the-chunk-that-you-re-teleporting-to.patch +++ b/patches/server/0037-Load-also-the-chunk-that-you-re-teleporting-to.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Load also the chunk that you're teleporting to Fixes Tuinity-178 diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index a991fb7b6123ebcf7b6e42f8cdd2f3377ab14970..be8da6114ad905602dd8e50a36f9ca824f5c4912 100644 +index 97db7999968bceb2f069eb449c64e7da874d787f..fc8d97262f39db62e1ea2cdd1d9c1df092175c63 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -225,7 +225,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -232,7 +232,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { return true; } @@ -18,7 +18,7 @@ index a991fb7b6123ebcf7b6e42f8cdd2f3377ab14970..be8da6114ad905602dd8e50a36f9ca82 java.util.function.Consumer> onLoad) { if (Thread.currentThread() != this.serverThread) { this.getChunkProvider().serverThreadQueue.execute(() -> { -@@ -282,6 +282,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -289,6 +289,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { chunkProvider.getChunkAtAsynchronously(cx, cz, ChunkStatus.FULL, true, false, consumer); } } diff --git a/patches/server/0038-Highly-optimize-VillagePlace-filtering.patch b/patches/server/0038-Highly-optimize-VillagePlace-filtering.patch index 23caa969..ef10dc77 100644 --- a/patches/server/0038-Highly-optimize-VillagePlace-filtering.patch +++ b/patches/server/0038-Highly-optimize-VillagePlace-filtering.patch @@ -114,18 +114,18 @@ index 2193fecab4406f49548c0952b2754269f91e2515..0785bfe1c28b63b492e25c678ebad89d Vec3D vec3d = Vec3D.ORIGIN; diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java -index 99c641e409a416f22ba6c7d0d321a8816977d344..d49ca751516f15494035771c1a2dfe810c610ffc 100644 +index eddf3dff9a00bf3c7318745e52befd4c04fa2af7..c47dc39dcdacbefa07c69f04601f7a125cfbb25c 100644 --- a/src/main/java/net/minecraft/server/PortalTravelAgent.java +++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java -@@ -28,7 +28,7 @@ public class PortalTravelAgent { - }).thenComparingInt((villageplacerecord) -> { +@@ -29,7 +29,7 @@ public class PortalTravelAgent { return villageplacerecord.f().getY(); - }); + }); // Yatopia + // Yatopia start - java.util.List list = villageplace.b(type -> type == VillagePlaceType.v, blockposition, i, VillagePlace.Occupancy.ANY).collect(java.util.stream.Collectors.toList()); -+ java.util.List list = villageplace.bList(type -> type == VillagePlaceType.v, blockposition, i, VillagePlace.Occupancy.ANY); // Yatopia - // Yatopia start - fix portal bug ++ java.util.List list = villageplace.bList(type -> type == VillagePlaceType.v, blockposition, i, VillagePlace.Occupancy.ANY); if (world.origamiConfig.useBlockDistanceInPortalSearchRadius) { list.removeIf(villagePlaceRecord -> { + BlockPosition portalPosition = villagePlaceRecord.getPosition(); diff --git a/src/main/java/net/minecraft/server/SectionPosition.java b/src/main/java/net/minecraft/server/SectionPosition.java index f95925f1c5d091f1a129d0437bb6e175c6ac080f..6796b1a832779b65d337c63d6b600e2a3b5e9559 100644 --- a/src/main/java/net/minecraft/server/SectionPosition.java @@ -171,7 +171,7 @@ index f95925f1c5d091f1a129d0437bb6e175c6ac080f..6796b1a832779b65d337c63d6b600e2a return StreamSupport.stream(new AbstractSpliterator((long) ((l - i + 1) * (i1 - j + 1) * (j1 - k + 1)), 64) { final CursorPosition a = new CursorPosition(i, j, k, l, i1, j1); diff --git a/src/main/java/net/minecraft/server/VillagePlace.java b/src/main/java/net/minecraft/server/VillagePlace.java -index 6ab80cf7908437309a7346d71e42cf128a6f13d9..ee41cb15408be403ba813c624943b476f51e1d5c 100644 +index adacfce6f3b6067e54fc1a95bab7d42796950cd6..2ddf3e0c5efe0e2b5a1a18de1a055ec427924672 100644 --- a/src/main/java/net/minecraft/server/VillagePlace.java +++ b/src/main/java/net/minecraft/server/VillagePlace.java @@ -46,7 +46,7 @@ public class VillagePlace extends RegionFileSection { @@ -242,7 +242,7 @@ index 6ab80cf7908437309a7346d71e42cf128a6f13d9..ee41cb15408be403ba813c624943b476 public Stream b(Predicate predicate, Predicate predicate1, BlockPosition blockposition, int i, VillagePlace.Occupancy villageplace_occupancy) { return this.a(predicate, predicate1, blockposition, i, villageplace_occupancy).sorted(Comparator.comparingDouble((blockposition1) -> { return blockposition1.j(blockposition); -@@ -94,26 +135,55 @@ public class VillagePlace extends RegionFileSection { +@@ -94,31 +135,68 @@ public class VillagePlace extends RegionFileSection { } public Optional c(Predicate predicate, Predicate predicate1, BlockPosition blockposition, int i, VillagePlace.Occupancy villageplace_occupancy) { @@ -291,7 +291,7 @@ index 6ab80cf7908437309a7346d71e42cf128a6f13d9..ee41cb15408be403ba813c624943b476 villageplacerecord.b(); return villageplacerecord.f(); }); -+ */ // Yatopia end ++ */ // Yatopia end } public Optional a(Predicate predicate, Predicate predicate1, VillagePlace.Occupancy villageplace_occupancy, BlockPosition blockposition, int i, Random random) { @@ -299,8 +299,21 @@ index 6ab80cf7908437309a7346d71e42cf128a6f13d9..ee41cb15408be403ba813c624943b476 + List list = this.cList(predicate, blockposition, i, villageplace_occupancy); // Yatopia Collections.shuffle(list, random); - for (VillagePlaceRecord villageplacerecord : list) { -@@ -214,7 +284,7 @@ public class VillagePlace extends RegionFileSection { ++ // Yatopia start - replace stream ++ for (VillagePlaceRecord record : list) { ++ BlockPosition recordPosition = record.getPosition(); ++ if (predicate1.test(recordPosition)) return Optional.of(recordPosition); ++ } ++ return Optional.empty(); ++ /* + return list.stream().filter((villageplacerecord) -> { + return predicate1.test(villageplacerecord.f()); + }).findFirst().map(VillagePlaceRecord::f); ++ */ + } + + public boolean b(BlockPosition blockposition) { +@@ -211,7 +289,7 @@ public class VillagePlace extends RegionFileSection { } private void a(ChunkSection chunksection, SectionPosition sectionposition, BiConsumer biconsumer) { @@ -309,7 +322,7 @@ index 6ab80cf7908437309a7346d71e42cf128a6f13d9..ee41cb15408be403ba813c624943b476 IBlockData iblockdata = chunksection.getType(SectionPosition.b(blockposition.getX()), SectionPosition.b(blockposition.getY()), SectionPosition.b(blockposition.getZ())); VillagePlaceType.b(iblockdata).ifPresent((villageplacetype) -> { -@@ -224,6 +294,16 @@ public class VillagePlace extends RegionFileSection { +@@ -221,6 +299,16 @@ public class VillagePlace extends RegionFileSection { } public void a(IWorldReader iworldreader, BlockPosition blockposition, int i) { @@ -326,7 +339,7 @@ index 6ab80cf7908437309a7346d71e42cf128a6f13d9..ee41cb15408be403ba813c624943b476 SectionPosition.b(new ChunkCoordIntPair(blockposition), Math.floorDiv(i, 16)).map((sectionposition) -> { return Pair.of(sectionposition, this.d(sectionposition.s())); }).filter((pair) -> { -@@ -235,6 +315,7 @@ public class VillagePlace extends RegionFileSection { +@@ -232,6 +320,7 @@ public class VillagePlace extends RegionFileSection { }).forEach((chunkcoordintpair) -> { iworldreader.getChunkAt(chunkcoordintpair.x, chunkcoordintpair.z, ChunkStatus.EMPTY); }); diff --git a/patches/server/0039-Nuke-streams-off-BlockPosition.patch b/patches/server/0039-Nuke-streams-off-BlockPosition.patch index 4a68b8ed..0872ef0d 100644 --- a/patches/server/0039-Nuke-streams-off-BlockPosition.patch +++ b/patches/server/0039-Nuke-streams-off-BlockPosition.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Nuke streams off BlockPosition diff --git a/src/main/java/net/minecraft/server/BlockBase.java b/src/main/java/net/minecraft/server/BlockBase.java -index c1f992b2ebac9819085bec74bc40ca3b5384c741..462d3431367f97f9d8506fd1a1adf8dc418b4414 100644 +index fb083996c10f553d7eff629a815b11eb7f0bf42c..17c8e5fe9e3e18244bbcf479267289dce01f9615 100644 --- a/src/main/java/net/minecraft/server/BlockBase.java +++ b/src/main/java/net/minecraft/server/BlockBase.java @@ -637,6 +637,7 @@ public abstract class BlockBase { diff --git a/patches/server/0040-Nuke-streams-off-SectionPosition.patch b/patches/server/0040-Nuke-streams-off-SectionPosition.patch index 1c92a364..cf4da974 100644 --- a/patches/server/0040-Nuke-streams-off-SectionPosition.patch +++ b/patches/server/0040-Nuke-streams-off-SectionPosition.patch @@ -35,7 +35,7 @@ index d0e7c6b4c0b1e5993f0019e7a448423e048a8af5..b788685331bc28e0d339e6600b5805a2 public static boolean a(EntityInsentient entityinsentient, EntityLiving entityliving, int i) { diff --git a/src/main/java/net/minecraft/server/Raid.java b/src/main/java/net/minecraft/server/Raid.java -index f7f97d441b3b7c4bd6bc34d2ce3fae5f6f5721c8..86726f48f7cdf98379da050a5d41acd40dd4db83 100644 +index 5dd5249caf55945607d5ac7830e54eedf9ca2c0d..89464cc770b4875ad65c5e84315e462689cea57b 100644 --- a/src/main/java/net/minecraft/server/Raid.java +++ b/src/main/java/net/minecraft/server/Raid.java @@ -355,6 +355,18 @@ public class Raid { diff --git a/patches/server/0042-ProxyForwardDataEvent.patch b/patches/server/0042-ProxyForwardDataEvent.patch index 6aea9f69..eea68ee3 100644 --- a/patches/server/0042-ProxyForwardDataEvent.patch +++ b/patches/server/0042-ProxyForwardDataEvent.patch @@ -83,7 +83,7 @@ index 57a3a8d09427012e5c8aba5085d187c6be047652..fa0a8a7e00a64df4d3ba09407193d984 } catch (Exception ex) { disconnect("Failed to verify username!"); diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index 5b4901acf7d4661e52839a7ab0ebe24b93bec0d6..4bc33861b015937a2081541f6b1ff2470a01d895 100644 +index 332f8ec16f48fb158b8cd058d3115b006ba34134..57de1f541107ec3c53abb5a2c02ba579bc03f7ab 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java @@ -49,6 +49,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { diff --git a/patches/server/0044-Fix-LightEngineThreaded-memory-leak.patch b/patches/server/0044-Fix-LightEngineThreaded-memory-leak.patch index 76bc1d6f..f08f3f5d 100644 --- a/patches/server/0044-Fix-LightEngineThreaded-memory-leak.patch +++ b/patches/server/0044-Fix-LightEngineThreaded-memory-leak.patch @@ -18,10 +18,10 @@ index fd0beefb900c064d3c35a3d2f79f5b7d9c1287bb..4d024a4849b7566c0faba131caab57b4 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 be8da6114ad905602dd8e50a36f9ca824f5c4912..14b8bf88f6755818e0cdeb0a2ab0a8996ea1f886 100644 +index fc8d97262f39db62e1ea2cdd1d9c1df092175c63..b3e24d6f44320bf9b13f627dc5a9cb46614afe9b 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -1780,6 +1780,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1773,6 +1773,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } // Paper end diff --git a/patches/server/0045-Respect-PlayerKickEvent-leaveMessage.patch b/patches/server/0045-Respect-PlayerKickEvent-leaveMessage.patch index 174e68b6..7d0d6192 100644 --- a/patches/server/0045-Respect-PlayerKickEvent-leaveMessage.patch +++ b/patches/server/0045-Respect-PlayerKickEvent-leaveMessage.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Respect PlayerKickEvent leaveMessage diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index cb4f173774b46793bc3744cb3242edd9272df463..e41c374e10576be00e3c87a115fcbf038c4df1b2 100644 +index 7f551ad4b80c092b3cb22f040dcf9a40ec5b03e9..f4a2bae611806aa861b4f12b7f42c3117d528d95 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -308,7 +308,7 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -17,7 +17,7 @@ index cb4f173774b46793bc3744cb3242edd9272df463..e41c374e10576be00e3c87a115fcbf03 this.networkManager.stopReading(); MinecraftServer minecraftserver = this.minecraftServer; NetworkManager networkmanager = this.networkManager; -@@ -1603,6 +1603,11 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1601,6 +1601,11 @@ public class PlayerConnection implements PacketListenerPlayIn { @Override public void a(IChatBaseComponent ichatbasecomponent) { @@ -29,7 +29,7 @@ index cb4f173774b46793bc3744cb3242edd9272df463..e41c374e10576be00e3c87a115fcbf03 // CraftBukkit start - Rarely it would send a disconnect line twice if (this.processedDisconnect) { return; -@@ -1618,7 +1623,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1616,7 +1621,7 @@ public class PlayerConnection implements PacketListenerPlayIn { */ this.player.p(); diff --git a/patches/server/0046-Shutdown-Bootstrap-thread-pool.patch b/patches/server/0046-Shutdown-Bootstrap-thread-pool.patch index eadda11d..1c73af14 100644 --- a/patches/server/0046-Shutdown-Bootstrap-thread-pool.patch +++ b/patches/server/0046-Shutdown-Bootstrap-thread-pool.patch @@ -30,7 +30,7 @@ index 48e31e9142ffeb2725af6b1f483de67410e25694..b149e32aac86ce2f7521958fa7394e4f public static DataFixer getDataFixer() { return a(); } // Paper - OBFHELPER public static DataFixer a() { diff --git a/src/main/java/net/minecraft/server/SystemUtils.java b/src/main/java/net/minecraft/server/SystemUtils.java -index 869dcf1545601358a273a5cfb47afa88fa13a11c..94fadd3d7ea7cdea07cb3fdc9e9bb1f92da0afcd 100644 +index 916a6a1fc1ccc73e4fb974ad77310d16fd8bd7e6..61d399077f87fc1f198811ee31fc779b6f0ecfa9 100644 --- a/src/main/java/net/minecraft/server/SystemUtils.java +++ b/src/main/java/net/minecraft/server/SystemUtils.java @@ -48,7 +48,7 @@ import org.apache.logging.log4j.Logger; diff --git a/patches/server/0047-Optimize-Villagers.patch b/patches/server/0047-Optimize-Villagers.patch index 0ecbd2c4..cddf7324 100644 --- a/patches/server/0047-Optimize-Villagers.patch +++ b/patches/server/0047-Optimize-Villagers.patch @@ -12,26 +12,7 @@ The following has been done to fix the mentioned problems: - Replaced stream off BehaviorFindPosition - Made sure that chunks are loaded for the POIs (Points Of Interest) that are gonna be tried. - Added a profession cache, which followed by a stream removal. -- Added a config option, villagers-only-open-doors-if-attacked-by-mobs , the default of is "true", defaulting to - vanilla behavior. If the specified option is false, then if the villager is not going to a path, he will try - to go to the nearest door. -diff --git a/src/main/java/de/minebench/origami/OrigamiConfig.java b/src/main/java/de/minebench/origami/OrigamiConfig.java -index febd0a7413382e059b681a43cc9ac42ab5c14128..923219083f8021e8a4df0fee6512bf4677321fb6 100644 ---- a/src/main/java/de/minebench/origami/OrigamiConfig.java -+++ b/src/main/java/de/minebench/origami/OrigamiConfig.java -@@ -177,6 +177,11 @@ public final class OrigamiConfig { - private void useBlockDistanceInPortalSearchRadius() { - useBlockDistanceInPortalSearchRadius = getBoolean("use-block-distance-in-portal-search-radius", false); - } -+ -+ public boolean villagersOnlyOpenDoorsIfAttackedByMobs = true; -+ private void villagersOnlyOpenDoorsIfAttackedByMobs() { -+ villagersOnlyOpenDoorsIfAttackedByMobs = getBoolean("villagers-only-open-doors-if-attacked-by-mobs", true); -+ } - // Yatopia end - } - diff --git a/src/main/java/net/minecraft/server/BehaviorFindPosition.java b/src/main/java/net/minecraft/server/BehaviorFindPosition.java index 63a761ebef80d4af09cdc2682e496d78492c4a3a..047910f441b5e8ad97024177afbac703a0d0c5e9 100644 --- a/src/main/java/net/minecraft/server/BehaviorFindPosition.java @@ -107,31 +88,6 @@ index 63a761ebef80d4af09cdc2682e496d78492c4a3a..047910f441b5e8ad97024177afbac703 }); } } -diff --git a/src/main/java/net/minecraft/server/BehaviorInteractDoor.java b/src/main/java/net/minecraft/server/BehaviorInteractDoor.java -index 31f9001142ff8507499098f7da013b2b61d6847b..eb1df4046a81a011901d2763b51f2b5885e2095f 100644 ---- a/src/main/java/net/minecraft/server/BehaviorInteractDoor.java -+++ b/src/main/java/net/minecraft/server/BehaviorInteractDoor.java -@@ -128,6 +128,12 @@ public class BehaviorInteractDoor extends Behavior { - BehaviorController behaviorcontroller = entityliving.getBehaviorController(); - - // Yatopia start - replaced logic -+ if (!worldserver.origamiConfig.villagersOnlyOpenDoorsIfAttackedByMobs) { -+ if (b(worldserver, entityliving, blockposition)) { -+ return false; -+ } -+ return blockposition.distanceSquared(entityliving.getPositionVector(), 2.0D); -+ } else { - if (!behaviorcontroller.hasMemory(MemoryModuleType.MOBS)) return false; - for (EntityLiving entity : behaviorcontroller.getMemory(MemoryModuleType.MOBS).get()) { - if (entity.getEntityType() == entityliving.getEntityType() -@@ -137,6 +143,7 @@ public class BehaviorInteractDoor extends Behavior { - } - } - return false; -+ } - /* - return !behaviorcontroller.hasMemory(MemoryModuleType.MOBS) ? false : (behaviorcontroller.getMemory(MemoryModuleType.MOBS).get()).stream().filter((entityliving1) -> { // CraftBukkit - decompile error - return entityliving1.getEntityType() == entityliving.getEntityType(); diff --git a/src/main/java/net/minecraft/server/VillagePlaceType.java b/src/main/java/net/minecraft/server/VillagePlaceType.java index a5718af9b614ae505067131f04ebb490617d6aa4..2ea0cfad4b35264cd3b70b930dd28de58c77d0c0 100644 --- a/src/main/java/net/minecraft/server/VillagePlaceType.java diff --git a/patches/server/0048-Fix-villager-dupe.patch b/patches/server/0048-Fix-villager-dupe.patch index a355b81f..88aea125 100644 --- a/patches/server/0048-Fix-villager-dupe.patch +++ b/patches/server/0048-Fix-villager-dupe.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix villager dupe diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 16e52c38788719b275c92390893a6e9c0e769eb7..7f66131a820ff3a22bf6b10d26cedf6189a8bc1d 100644 +index 939ef3bd6439a68dba4224661d050c6af0164178..4c7e1f5c2a332f5b5ed15b0528ed717f5f84f63f 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -203,7 +203,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -207,7 +207,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } else { this.mobTick(true); } @@ -17,7 +17,7 @@ index 16e52c38788719b275c92390893a6e9c0e769eb7..7f66131a820ff3a22bf6b10d26cedf61 doReputationTick(); // Paper end -@@ -283,6 +283,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -287,6 +287,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation if (this.getVillagerData().getProfession() == VillagerProfession.NONE && this.eN()) { this.eT(); } @@ -25,7 +25,7 @@ index 16e52c38788719b275c92390893a6e9c0e769eb7..7f66131a820ff3a22bf6b10d26cedf61 if (inactive) return; // Paper super.mobTick(); -@@ -1084,4 +1085,10 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -1071,4 +1072,10 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation return optional.isPresent() ? i - (Long) optional.get() < 24000L : false; } diff --git a/patches/server/0049-Optimize-whitelist-command-for-multiple-additions-re.patch b/patches/server/0049-Optimize-whitelist-command-for-multiple-additions-re.patch index acab913f..8e2b13bc 100644 --- a/patches/server/0049-Optimize-whitelist-command-for-multiple-additions-re.patch +++ b/patches/server/0049-Optimize-whitelist-command-for-multiple-additions-re.patch @@ -185,10 +185,10 @@ index 0224a6d0e47e836fa485b39e7b4ce5b83ea554bf..fe578d306575bbdc8ca4a993a648e889 return (String[]) this.d.keySet().toArray(new String[this.d.size()]); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 680c139e249fce8dedf5a63ac5034b930b8e8540..07fc09543c154fdf8b8beb86c3466c9ccd24372b 100644 +index ac31ce44ec5605a9f6bede0e68c13a7696ad0521..31ba3474b4dfdc2d60d127e0ff667744941d55ec 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1954,6 +1954,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant + diff --git a/src/main/java/net/minecraft/server/CraftingManager.java b/src/main/java/net/minecraft/server/CraftingManager.java -index 2cbfef98508bcb07db1ad1e5bdafc4cc2bff1393..06c025beed61feaf3239382b7d7778c5741869cc 100644 +index 58ecbe1e20581dc9e78cdd2f4ece29cfa014da8a..1a1a71abb91f09033b26ec8bc88c160259ebea41 100644 --- a/src/main/java/net/minecraft/server/CraftingManager.java +++ b/src/main/java/net/minecraft/server/CraftingManager.java -@@ -25,6 +25,10 @@ public class CraftingManager extends ResourceDataJson { +@@ -31,6 +31,10 @@ public class CraftingManager extends ResourceDataJson { private static final Logger LOGGER = LogManager.getLogger(); public Map, Object2ObjectLinkedOpenHashMap>> recipes = ImmutableMap.of(); // CraftBukkit private boolean d; @@ -24,13 +26,16 @@ index 2cbfef98508bcb07db1ad1e5bdafc4cc2bff1393..06c025beed61feaf3239382b7d7778c5 public CraftingManager() { super(CraftingManager.a, "recipes"); -@@ -78,21 +82,37 @@ public class CraftingManager extends ResourceDataJson { +@@ -84,18 +88,38 @@ public class CraftingManager extends ResourceDataJson { public > Optional craft(Recipes recipes, C c0, World world) { // CraftBukkit start -- Optional recipe = this.b(recipes).values().stream().flatMap((irecipe) -> { -- return SystemUtils.a(recipes.a(irecipe, world, c0)); -- }).findFirst(); ++ // Yatopia start - replace stream ++ /* + Optional recipe = this.b(recipes).values().stream().flatMap((irecipe) -> { + return SystemUtils.a(recipes.a(irecipe, world, c0)); + }).findFirst(); ++ */ + // Yatopia start - replace stream + Collection> allTypes = this.b(recipes).values(); + Optional recipe = Optional.empty(); @@ -42,48 +47,68 @@ index 2cbfef98508bcb07db1ad1e5bdafc4cc2bff1393..06c025beed61feaf3239382b7d7778c5 + break; + } + } -+ ++ // Yatopia end c0.setCurrentRecipe(recipe.orElse(null)); // CraftBukkit - Clear recipe when no recipe is found // CraftBukkit end return recipe; -+ // Yatopia end } public > List a(Recipes recipes) { -+ // Yatopia start - replaced Logic -+ return (List) CACHE.computeIfAbsent(recipes, recipes1 -> { -+ return new net.yatopia.server.list.GlueList<>(this.b(recipes).values()); -+ }); ++ // Yatopia start - replaced logic + /* - List> list = new ArrayList<>(); - for (IRecipe irecipe : this.b(recipes).values()) { - IRecipe ciRecipe = irecipe; - list.add(ciRecipe); - } - return (List) list; -+ */ // Yatopia end + return (List) this.b(recipes).values().stream().map((irecipe) -> { + return irecipe; + }).collect(Collectors.toList()); ++ */ ++ return (List) CACHE.computeIfAbsent(recipes, recipes1 -> new net.yatopia.server.list.GlueList<>(getRecipesMap(recipes).values())); ++ // Yatopia end } public > List b(Recipes recipes, C c0, World world) { -@@ -104,7 +124,7 @@ public class CraftingManager extends ResourceDataJson { +@@ -106,8 +130,9 @@ public class CraftingManager extends ResourceDataJson { + })).collect(Collectors.toList()); } ++ private > Map> getRecipesMap(Recipes recipes) { return b(recipes); } // Yatopia - OBFHELPER private > Map> b(Recipes recipes) { - return (Map) this.recipes.getOrDefault(recipes, new Object2ObjectLinkedOpenHashMap<>()); // CraftBukkit + return (Map) this.recipes.getOrDefault(recipes, EMPTY_MAP); // CraftBukkit // Yatopia } public > NonNullList c(Recipes recipes, C c0, World world) { -diff --git a/src/main/java/net/minecraft/server/RecipeItemStack.java b/src/main/java/net/minecraft/server/RecipeItemStack.java -index 30da7471c3ecc66a61cb9fe1dd58d6d65438c505..27978f7b52c8db02f69fdcb092ffcce4550904d3 100644 ---- a/src/main/java/net/minecraft/server/RecipeItemStack.java -+++ b/src/main/java/net/minecraft/server/RecipeItemStack.java -@@ -32,7 +32,7 @@ public final class RecipeItemStack implements Predicate { +@@ -127,15 +152,35 @@ public class CraftingManager extends ResourceDataJson { + } - public void buildChoices() { - if (this.choices == null) { -- List list = new ArrayList<>(); -+ List list = new net.yatopia.server.list.GlueList<>(); // Yatopia - Set uniqueValues = new HashSet<>(); - for (Provider recipeitemstack_provider : this.b) { - for (ItemStack itemStack : recipeitemstack_provider.a()) { + public Optional> getRecipe(MinecraftKey minecraftkey) { ++ // Yatopia start - replace stream ++ /* + return this.recipes.values().stream().map((map) -> { + return map.get(minecraftkey); // CraftBukkit - decompile error + }).filter(Objects::nonNull).findFirst(); ++ */ ++ for (Map> map : recipes.values()) { ++ IRecipe recipe = map.get(minecraftkey); ++ if (recipe != null) { ++ return Optional.of(recipe); ++ } ++ } ++ return Optional.empty(); ++ // Yatopia end + } + + public Collection> b() { ++ // Yatopia start - replace stream ++ /* + return (Collection) this.recipes.values().stream().flatMap((map) -> { + return map.values().stream(); + }).collect(Collectors.toSet()); ++ */ ++ List> list = new net.yatopia.server.list.GlueList<>(); ++ for (Map> map : recipes.values()) { ++ list.addAll(map.values()); ++ } ++ return list; ++ // Yatopia end + } + + public Stream d() { diff --git a/patches/server/0064-Async-entity-tracking.patch b/patches/server/0064-Async-entity-tracking.patch index 0797589a..2fcc19e1 100644 --- a/patches/server/0064-Async-entity-tracking.patch +++ b/patches/server/0064-Async-entity-tracking.patch @@ -21,7 +21,7 @@ go up. Co-authored-by: Ivan Pekov diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index e6f2021e8406f7b14ce41429e871ffaffa52f108..867ab3f3145d8bfcf62c10697a009ec96357ca96 100644 +index b43b02c0bdd5dbf0b7d30de90bdc2f74c015ecc8..4144dc7ca04b9a5d7da8ae619d3510c34c43e158 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -1801,10 +1801,18 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -45,7 +45,7 @@ index e6f2021e8406f7b14ce41429e871ffaffa52f108..867ab3f3145d8bfcf62c10697a009ec9 this.playerConnection.teleport(this.spectatedEntity.locX(), this.spectatedEntity.locY(), this.spectatedEntity.locZ(), this.yaw, this.pitch, TeleportCause.SPECTATE); // CraftBukkit } diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java -index 2c058a9eb4ce77f6090f3516ea048483173e7511..7678ee6f8fbe5d40739f8426724447268474f3ab 100644 +index 3e71332c47000b21ff90aec6937f90dc639a41bd..f0cee1cd163a2054d73e0e4bdd20d1f68747a33c 100644 --- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java +++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java @@ -87,7 +87,12 @@ public class EntityTNTPrimed extends Entity { @@ -62,9 +62,9 @@ index 2c058a9eb4ce77f6090f3516ea048483173e7511..7678ee6f8fbe5d40739f842672444726 if (ete != null) { PacketPlayOutEntityVelocity velocityPacket = new PacketPlayOutEntityVelocity(this); PacketPlayOutEntityTeleport positionPacket = new PacketPlayOutEntityTeleport(this); -@@ -110,6 +115,9 @@ public class EntityTNTPrimed extends Entity { - } - // Akarin end +@@ -99,6 +104,9 @@ public class EntityTNTPrimed extends Entity { + viewer.playerConnection.sendPacket(positionPacket); + }); } + } finally { // Yatopia start + chunkMap.trackedEntitiesLock.unlock(); @@ -136,7 +136,7 @@ index aea72b0db10eed151db18490c02f291c3cded92a..f379d591ed7083840e15ba94f514b4bf this.tracker.velocityChanged = false; } diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579dac13bd8d 100644 +index 6c8cb39ac8786734cda994ef29ba74c685f3b9be..36d4aeec34186c3f065d7bae3cc49a49f59188d0 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java @@ -11,6 +11,7 @@ import com.google.common.collect.Sets; @@ -147,7 +147,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2ByteMap; import it.unimi.dsi.fastutil.longs.Long2ByteOpenHashMap; -@@ -104,10 +105,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -113,10 +114,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private final File w; private final PlayerMap playerMap; public final Int2ObjectMap trackedEntities; @@ -160,7 +160,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d // CraftBukkit start - recursion-safe executor for Chunk loadCallback() and unloadCallback() public final CallbackExecutor callbackExecutor = new CallbackExecutor(); -@@ -292,7 +295,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -301,7 +304,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.unloadQueue = new LongOpenHashSet(); this.u = new AtomicInteger(); this.playerMap = new PlayerMap(); @@ -169,7 +169,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d this.z = new Long2ByteOpenHashMap(); this.A = new com.destroystokyo.paper.utils.CachedSizeConcurrentLinkedQueue<>(); // Paper - need constant-time size() this.definedStructureManager = definedstructuremanager; -@@ -2033,6 +2036,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2008,6 +2011,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { protected void addEntity(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity track"); // Spigot // Paper start - ignore and warn about illegal addEntity calls instead of crashing server @@ -178,7 +178,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d if (!entity.valid || entity.world != this.world || this.trackedEntities.containsKey(entity.getId())) { new Throwable("[ERROR] Illegal PlayerChunkMap::addEntity for world " + this.world.getWorld().getName() + ": " + entity + (this.trackedEntities.containsKey(entity.getId()) ? " ALREADY CONTAINED (This would have crashed your server)" : "")) -@@ -2072,10 +2077,15 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2047,10 +2052,15 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } } @@ -194,7 +194,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d if (entity instanceof EntityPlayer) { EntityPlayer entityplayer = (EntityPlayer) entity; -@@ -2094,6 +2104,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2069,6 +2079,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { if (playerchunkmap_entitytracker1 != null) { playerchunkmap_entitytracker1.a(); } @@ -204,7 +204,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d entity.tracker = null; // Paper - We're no longer tracked } -@@ -2102,12 +2115,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2077,12 +2090,14 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.world.timings.tracker1.startTiming(); try { com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet.Iterator iterator = this.world.getChunkProvider().entityTickingChunks.iterator(); @@ -219,7 +219,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d EntityTracker tracker = this.trackedEntities.get(entity.getId()); if (tracker != null) { tracker.updatePlayers(tracker.tracker.getPlayersInTrackRange()); -@@ -2117,6 +2132,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2092,6 +2107,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } } finally { iterator.finishedIterating(); @@ -227,7 +227,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d } } finally { this.world.timings.tracker1.stopTiming(); -@@ -2124,10 +2140,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2099,10 +2115,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } // Paper end - optimised tracker @@ -240,7 +240,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d return; } // Paper end - optimized tracker -@@ -2171,20 +2187,30 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2146,20 +2162,30 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } protected void broadcast(Entity entity, Packet packet) { @@ -271,7 +271,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d } -@@ -2297,11 +2323,13 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2272,11 +2298,13 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially entityplayer.a(chunk.getPos(), apacket[0], apacket[1]); PacketDebug.a(this.world, chunk.getPos()); @@ -287,7 +287,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d for (int i = 0, size = chunk.entities.size(); i < size; ++i) { Entity entity = entities[i]; if (entity == entityplayer) { -@@ -2323,6 +2351,9 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2298,6 +2326,9 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially list1.add(entity); } } @@ -297,7 +297,7 @@ index 9f32a26fdbfaf024cfe5c0996c2253f2dd581d5e..807a54e24018455a997e4410cdb7579d // Paper end - optimise entity tracker Iterator iterator; -@@ -2461,7 +2492,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2436,7 +2467,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially } public void updatePlayer(EntityPlayer entityplayer) { diff --git a/patches/server/0066-Replace-some-hot-streams.patch b/patches/server/0066-Replace-some-hot-streams.patch new file mode 100644 index 00000000..67d3845f --- /dev/null +++ b/patches/server/0066-Replace-some-hot-streams.patch @@ -0,0 +1,387 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Ivan Pekov +Date: Wed, 7 Oct 2020 17:38:05 +0300 +Subject: [PATCH] Replace some hot streams + + +diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java +index 24a6102b37b7e6b4ed208f803d646645dcafe1c3..422b5f0c28d85ee167bce2967e1b5ee9fa7833dd 100644 +--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java ++++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java +@@ -416,10 +416,21 @@ public class ChunkRegionLoader { + NBTTagCompound nbttagcompound2; + + for (int i = -1; i < 17; ++i) { // Paper - conflict on loop parameter change ++ // Yatopia start - replace stream ++ /* + int finalI = i; + ChunkSection chunksection = (ChunkSection) Arrays.stream(achunksection).filter((chunksection1) -> { + return chunksection1 != null && chunksection1.getYPosition() >> 4 == finalI; + }).findFirst().orElse(Chunk.a); ++ */ ++ ChunkSection chunksection = Chunk.EMPTY_CHUNK_SECTION; ++ for (ChunkSection section : achunksection) { ++ if (section != null && section.getYPosition() >> 4 == i) { ++ chunksection = section; ++ break; ++ } ++ } ++ // Yatopia end + // Paper start - async chunk save for unload + NibbleArray nibblearray; // block light + NibbleArray nibblearray1; // sky light +@@ -706,6 +717,8 @@ public class ChunkRegionLoader { + while (iterator.hasNext()) { + String s = (String) iterator.next(); + ++ // Yatopia start - replace stream ++ /* + map.put(StructureGenerator.a.get(s.toLowerCase(Locale.ROOT)), new LongOpenHashSet(Arrays.stream(nbttagcompound1.getLongArray(s)).filter((i) -> { + ChunkCoordIntPair chunkcoordintpair1 = new ChunkCoordIntPair(i); + +@@ -716,6 +729,22 @@ public class ChunkRegionLoader { + return true; + } + }).toArray())); ++ */ ++ long[] longArray = nbttagcompound1.getLongArray(s); ++ LongSet set = new LongOpenHashSet(); ++ for (long value : longArray) { ++ // got from ChunkCoordIntPair ++ // avoid creating additional object ++ int x = (int) value; ++ int z = (int) (value >> 32); ++ if (Math.max(Math.abs(x - chunkcoordintpair.x), Math.abs(z - chunkcoordintpair.z)) > 8) { ++ ChunkRegionLoader.LOGGER.warn("Found invalid structure reference [ {} @ {} ] for chunk {}. ", s, "[" + x + ", " + z + "]", chunkcoordintpair); ++ } else { ++ set.add(value); ++ } ++ } ++ map.put(StructureGenerator.a.get(s.toLowerCase(Locale.ROOT)), set); ++ // Yatopia end + } + + return map; +diff --git a/src/main/java/net/minecraft/server/DefinedStructure.java b/src/main/java/net/minecraft/server/DefinedStructure.java +index 8974d7944f159b9346680c639daf0f8c06767cfe..bd610bfcd9571d7478ed13a0c35bc959cab07f0f 100644 +--- a/src/main/java/net/minecraft/server/DefinedStructure.java ++++ b/src/main/java/net/minecraft/server/DefinedStructure.java +@@ -811,9 +811,18 @@ public class DefinedStructure { + + public List a(Block block) { + return (List) this.b.computeIfAbsent(block, (block1) -> { ++ // Yatopia start - replace stream ++ /* + return (List) this.a.stream().filter((definedstructure_blockinfo) -> { + return definedstructure_blockinfo.b.a(block1); + }).collect(Collectors.toList()); ++ */ ++ List ret = new net.yatopia.server.list.GlueList<>(); ++ for (BlockInfo info : a) { ++ if (info.b.isBlock(block1)) { ret.add(info); } ++ } ++ return ret; ++ // Yatopia end + }); + } + } +diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java +index 2beb2b53e8d9f04e5d90898282d8cd186d251c14..6357d05aad07e5c2f10c899637bc7739957f92d0 100644 +--- a/src/main/java/net/minecraft/server/Entity.java ++++ b/src/main/java/net/minecraft/server/Entity.java +@@ -2529,6 +2529,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + return this.world.getScoreboard().getPlayerTeam(this.getName()); + } + ++ public final boolean isAlly(Entity entity) { return r(entity); } // Yatopia - OBFHELPER + public boolean r(Entity entity) { + return this.a(entity.getScoreboardTeam()); + } +diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java +index a60bb54270b98bad9cc8caa9ce2538f54b03fbfe..3b9ba7c012586c7620e69cf450b8d1c1fee3b215 100644 +--- a/src/main/java/net/minecraft/server/EntityPigZombie.java ++++ b/src/main/java/net/minecraft/server/EntityPigZombie.java +@@ -101,6 +101,8 @@ public class EntityPigZombie extends EntityZombie implements IEntityAngerable { + double d0 = this.b(GenericAttributes.FOLLOW_RANGE); + AxisAlignedBB axisalignedbb = AxisAlignedBB.a(this.getPositionVector()).grow(d0, 10.0D, d0); + ++ // Yatopia start - replace stream ++ /* + this.world.b(EntityPigZombie.class, axisalignedbb).stream().filter((entitypigzombie) -> { + return entitypigzombie != this; + }).filter((entitypigzombie) -> { +@@ -110,6 +112,13 @@ public class EntityPigZombie extends EntityZombie implements IEntityAngerable { + }).forEach((entitypigzombie) -> { + entitypigzombie.setGoalTarget(this.getGoalTarget(), org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_ATTACKED_NEARBY_ENTITY, true); // CraftBukkit + }); ++ */ ++ for (EntityPigZombie zombie : world.b(EntityPigZombie.class, axisalignedbb)) { ++ if (zombie != this && zombie.getGoalTarget() == null && !zombie.isAlly(getGoalTarget())) { ++ zombie.setGoalTarget(getGoalTarget(), org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_ATTACKED_NEARBY_ENTITY, true); ++ } ++ } ++ // Yatopia end + } + + private void fa() { +diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java +index 4144dc7ca04b9a5d7da8ae619d3510c34c43e158..f441da3af423c8468a3446ede49197562b451752 100644 +--- a/src/main/java/net/minecraft/server/EntityPlayer.java ++++ b/src/main/java/net/minecraft/server/EntityPlayer.java +@@ -761,11 +761,20 @@ public class EntityPlayer extends EntityHuman implements ICrafting { + private void eV() { + AxisAlignedBB axisalignedbb = (new AxisAlignedBB(this.getChunkCoordinates())).grow(32.0D, 10.0D, 32.0D); + ++ // Yatopia start - replace stream ++ /* + this.world.b(EntityInsentient.class, axisalignedbb).stream().filter((entityinsentient) -> { + return entityinsentient instanceof IEntityAngerable; + }).forEach((entityinsentient) -> { + ((IEntityAngerable) entityinsentient).b(this); + }); ++ */ ++ for (EntityInsentient insentient : world.b(EntityInsentient.class, axisalignedbb)) { ++ if (insentient instanceof IEntityAngerable) { ++ insentient.b(this); ++ } ++ } ++ // Yatopia end + } + + @Override +diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java +index 4c7e1f5c2a332f5b5ed15b0528ed717f5f84f63f..2a6735ce6a3ac233e5b2e75538c182e613c9896e 100644 +--- a/src/main/java/net/minecraft/server/EntityVillager.java ++++ b/src/main/java/net/minecraft/server/EntityVillager.java +@@ -679,11 +679,20 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation + if (optional.isPresent()) { + WorldServer worldserver = (WorldServer) this.world; + ++ // Yatopia start - replace stream ++ /* + ((List) optional.get()).stream().filter((entityliving) -> { + return entityliving instanceof ReputationHandler; + }).forEach((entityliving) -> { + worldserver.a(ReputationEvent.d, entity, (ReputationHandler) entityliving); + }); ++ */ ++ for (EntityLiving livingEntity : optional.get()) { ++ if (livingEntity instanceof ReputationHandler) { ++ worldserver.a(ReputationEvent.d, entity, (ReputationHandler) livingEntity); ++ } ++ } ++ // Yatopia end + } + } + } +diff --git a/src/main/java/net/minecraft/server/InventorySubcontainer.java b/src/main/java/net/minecraft/server/InventorySubcontainer.java +index db5def8b1d4179a64b28366339a3634af593cd5e..8627fb85f5f8b3309caf681eede4c3455bdc618c 100644 +--- a/src/main/java/net/minecraft/server/InventorySubcontainer.java ++++ b/src/main/java/net/minecraft/server/InventorySubcontainer.java +@@ -90,9 +90,19 @@ public class InventorySubcontainer implements IInventory, AutoRecipeOutput { + } + + public List f() { ++ // Yatopia start - replace stream ++ /* + List list = (List) this.items.stream().filter((itemstack) -> { + return !itemstack.isEmpty(); + }).collect(Collectors.toList()); ++ */ ++ List list = new net.yatopia.server.list.GlueList<>(); ++ for (ItemStack item : items) { ++ if (!item.isEmpty()) { ++ list.add(item); ++ } ++ } ++ // Yatopia end + + this.clear(); + return list; +diff --git a/src/main/java/net/minecraft/server/LootTable.java b/src/main/java/net/minecraft/server/LootTable.java +index 9922c8b2a7fbb55cfb8b9cea9545c9ec0a0dcbf8..0e8c52f64dd3ffe5e9510227cc6cbaf5b38a5e87 100644 +--- a/src/main/java/net/minecraft/server/LootTable.java ++++ b/src/main/java/net/minecraft/server/LootTable.java +@@ -85,7 +85,7 @@ public class LootTable { + } + + public List populateLoot(LootTableInfo loottableinfo) { +- List list = Lists.newArrayList(); ++ List list = new net.yatopia.server.list.GlueList<>(); // Yatopia + + this.populateLoot(loottableinfo, list::add); + return list; +@@ -122,7 +122,15 @@ public class LootTable { + if (event.isCancelled()) { + return; + } ++ // Yatopia start - replace stream ++ /* + list = event.getLoot().stream().map(CraftItemStack::asNMSCopy).collect(Collectors.toList()); ++ */ ++ list = new net.yatopia.server.list.GlueList<>(); ++ for (org.bukkit.inventory.ItemStack bukkitItem : event.getLoot()) { ++ list.add(CraftItemStack.asNMSCopy(bukkitItem)); ++ } ++ // Yatopia end + // CraftBukkit end + List list1 = this.a(iinventory, random); + +diff --git a/src/main/java/net/minecraft/server/PiglinAI.java b/src/main/java/net/minecraft/server/PiglinAI.java +index 0407fa1751d89a037da8cb01f5ceef9b9833dd18..a4e98b11e4ce4a4c9f3aa0986b7b2018b1f24f33 100644 +--- a/src/main/java/net/minecraft/server/PiglinAI.java ++++ b/src/main/java/net/minecraft/server/PiglinAI.java +@@ -359,6 +359,8 @@ public class PiglinAI { + public static void a(EntityHuman entityhuman, boolean flag) { + List list = entityhuman.world.a(EntityPiglin.class, entityhuman.getBoundingBox().g(16.0D)); // CraftBukkit - decompile error + ++ // Yatopia start - replace stream ++ /* + list.stream().filter(PiglinAI::d).filter((entitypiglin) -> { + return !flag || BehaviorUtil.c(entitypiglin, entityhuman); + }).forEach((entitypiglin) -> { +@@ -369,6 +371,17 @@ public class PiglinAI { + } + + }); ++ */ ++ for (EntityPiglinAbstract piglinAbstract : list) { ++ if (PiglinAI.d(piglinAbstract) && (!flag || BehaviorUtil.c(piglinAbstract, entityhuman))) { ++ if (piglinAbstract.world.getGameRules().getBoolean(GameRules.UNIVERSAL_ANGER)) { ++ d(piglinAbstract, entityhuman); ++ } else { ++ c(piglinAbstract, entityhuman); ++ } ++ } ++ } ++ // Yatopia end + } + + public static EnumInteractionResult a(EntityPiglin entitypiglin, EntityHuman entityhuman, EnumHand enumhand) { +diff --git a/src/main/java/net/minecraft/server/Raid.java b/src/main/java/net/minecraft/server/Raid.java +index 89464cc770b4875ad65c5e84315e462689cea57b..ed13f8fe725ce7601e5c506b590042cedbac7b54 100644 +--- a/src/main/java/net/minecraft/server/Raid.java ++++ b/src/main/java/net/minecraft/server/Raid.java +@@ -794,7 +794,16 @@ public class Raid { + + // CraftBukkit start - a method to get all raiders + public java.util.Collection getRaiders() { ++ // Yatopia start - replace stream ++ /* + return this.raiders.values().stream().flatMap(Set::stream).collect(java.util.stream.Collectors.toSet()); ++ */ ++ java.util.List ret = new net.yatopia.server.list.GlueList<>(); ++ for (Set raid : raiders.values()) { ++ ret.addAll(raid); ++ } ++ return ret; ++ // Yatopia end + } + // CraftBukkit end + +diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java +index b3e24d6f44320bf9b13f627dc5a9cb46614afe9b..304769013a68ec18cb87916b0363edfa0e7a0cda 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); +@@ -829,6 +829,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { + } + // */ + // Yatopia start ++ boolean sleepyMatch = true; + for (EntityPlayer player : players) { + if (player.world == this) { + player.tickWeather(); +@@ -836,6 +837,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { + player.updateWeather(this.lastRainLevel, this.rainLevel, this.lastThunderLevel, this.thunderLevel); + // Yatopia end + } ++ // Yatopia start ++ if (sleepyMatch && !player.isSpectator() && !player.isDeeplySleeping() && !player.fauxSleeping) { ++ sleepyMatch = false; ++ } ++ // Yatopia end + } + + /* // Yatopia start - moved up +@@ -855,9 +861,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 +- })) { ++ 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()); +@@ -1027,9 +1031,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 +@@ -1795,8 +1799,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 ) +@@ -1813,7 +1818,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { + } + } + } +- } ); ++ } // Yatopia + } + // Spigot end + // Spigot Start +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRaid.java b/src/main/java/org/bukkit/craftbukkit/CraftRaid.java +index 360a4901f5159a3f0606214f1abf2f8cee2ecbe1..450a64396f8fe167bc0accb7fdfcfeebb16351ac 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftRaid.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftRaid.java +@@ -91,11 +91,20 @@ public final class CraftRaid implements Raid { + + @Override + public List getRaiders() { ++ // Yatopia start - replace stream ++ /* + return handle.getRaiders().stream().map(new Function() { + @Override + public Raider apply(EntityRaider entityRaider) { + return (Raider) entityRaider.getBukkitEntity(); + } + }).collect(ImmutableList.toImmutableList()); ++ */ ++ List ret = new net.yatopia.server.list.GlueList<>(); ++ for (EntityRaider raider : handle.getRaiders()) { ++ ret.add((Raider) raider.getBukkitEntity()); ++ } ++ return Collections.unmodifiableList(ret); ++ // Yatopia end + } + }