From 294026345ef283f505c96a3c7405ba0fa56a6d90 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Tue, 7 Jun 2022 22:46:52 -0700 Subject: [PATCH] bunch o' patches --- ...-Plugin-Tickets-to-API-Chunk-Methods.patch | 0 .../server/Add-PrepareResultEvent.patch | 28 +++++------ .../server/Add-entity-liquid-API.patch | 0 ...up-duplicated-GameProfile-Properties.patch | 0 ...nvert-legacy-attributes-in-Item-Meta.patch | 0 .../Don-t-allow-null-UUID-s-for-chat.patch | 22 ++++++++ ...k-for-portal-on-world-gen-entity-add.patch | 0 ...4-Bukkit-world-container-is-not-used.patch | 50 +++++++++++++++++++ .../server/Fix-SPIGOT-5989.patch | 14 ++---- ...ix-arrows-never-despawning-MC-125757.patch | 0 ...k-Priority-Urgency-System-for-Chunks.patch | 10 ++-- ...argetLivingEntityEvent-for-1.16-mobs.patch | 9 ++-- ...-Legacy-Component-serialization-size.patch | 0 .../Optimize-Bit-Operations-by-inlining.patch | 0 ...ze-NetworkManager-Exception-Handling.patch | 0 ...ancement-data-player-iteration-to-be.patch | 0 .../Remove-some-streams-from-structures.patch | 33 ++++++++++++ ...from-classes-related-villager-gossip.patch | 26 +++------- ...awn-player-in-correct-world-on-login.patch | 0 ...te-operations-for-updating-light-dat.patch | 0 .../Support-components-in-ItemMeta.patch | 0 .../Support-old-UUID-format-for-NBT.patch | 8 +-- ...-Vanilla-Command-permission-checking.patch | 2 +- ...pdate-itemstack-legacy-name-and-lore.patch | 0 .../incremental-chunk-and-player-saving.patch | 4 +- .../Don-t-allow-null-UUID-s-for-chat.patch | 19 ------- ...4-Bukkit-world-container-is-not-used.patch | 33 ------------ ...ove-range-check-for-block-placing-up.patch | 43 ---------------- .../Remove-some-streams-from-structures.patch | 41 --------------- 29 files changed, 145 insertions(+), 197 deletions(-) rename patches/{unapplied => }/server/Add-Plugin-Tickets-to-API-Chunk-Methods.patch (100%) rename patches/{unapplied => }/server/Add-PrepareResultEvent.patch (92%) rename patches/{unapplied => }/server/Add-entity-liquid-API.patch (100%) rename patches/{unapplied => }/server/Clean-up-duplicated-GameProfile-Properties.patch (100%) rename patches/{unapplied => }/server/Convert-legacy-attributes-in-Item-Meta.patch (100%) create mode 100644 patches/server/Don-t-allow-null-UUID-s-for-chat.patch rename patches/{unapplied => }/server/Don-t-check-chunk-for-portal-on-world-gen-entity-add.patch (100%) create mode 100644 patches/server/Fix-SPIGOT-5824-Bukkit-world-container-is-not-used.patch rename patches/{unapplied => }/server/Fix-SPIGOT-5989.patch (84%) rename patches/{unapplied => }/server/Fix-arrows-never-despawning-MC-125757.patch (100%) rename patches/{unapplied => }/server/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch (99%) rename patches/{unapplied => }/server/Improve-EntityTargetLivingEntityEvent-for-1.16-mobs.patch (88%) rename patches/{unapplied => }/server/Improve-Legacy-Component-serialization-size.patch (100%) rename patches/{unapplied => }/server/Optimize-Bit-Operations-by-inlining.patch (100%) rename patches/{unapplied => }/server/Optimize-NetworkManager-Exception-Handling.patch (100%) rename patches/{unapplied => }/server/Optimize-the-advancement-data-player-iteration-to-be.patch (100%) create mode 100644 patches/server/Remove-some-streams-from-structures.patch rename patches/{unapplied => }/server/Remove-streams-from-classes-related-villager-gossip.patch (73%) rename patches/{unapplied => }/server/Spawn-player-in-correct-world-on-login.patch (100%) rename patches/{unapplied => }/server/Stop-copy-on-write-operations-for-updating-light-dat.patch (100%) rename patches/{unapplied => }/server/Support-components-in-ItemMeta.patch (100%) rename patches/{unapplied => }/server/Support-old-UUID-format-for-NBT.patch (93%) rename patches/{unapplied => }/server/Thread-Safe-Vanilla-Command-permission-checking.patch (97%) rename patches/{unapplied => }/server/Update-itemstack-legacy-name-and-lore.patch (100%) rename patches/{unapplied => }/server/incremental-chunk-and-player-saving.patch (99%) delete mode 100644 patches/unapplied/server/Don-t-allow-null-UUID-s-for-chat.patch delete mode 100644 patches/unapplied/server/Fix-SPIGOT-5824-Bukkit-world-container-is-not-used.patch delete mode 100644 patches/unapplied/server/Move-range-check-for-block-placing-up.patch delete mode 100644 patches/unapplied/server/Remove-some-streams-from-structures.patch diff --git a/patches/unapplied/server/Add-Plugin-Tickets-to-API-Chunk-Methods.patch b/patches/server/Add-Plugin-Tickets-to-API-Chunk-Methods.patch similarity index 100% rename from patches/unapplied/server/Add-Plugin-Tickets-to-API-Chunk-Methods.patch rename to patches/server/Add-Plugin-Tickets-to-API-Chunk-Methods.patch diff --git a/patches/unapplied/server/Add-PrepareResultEvent.patch b/patches/server/Add-PrepareResultEvent.patch similarity index 92% rename from patches/unapplied/server/Add-PrepareResultEvent.patch rename to patches/server/Add-PrepareResultEvent.patch index e56d357714..cf863b72c4 100644 --- a/patches/unapplied/server/Add-PrepareResultEvent.patch +++ b/patches/server/Add-PrepareResultEvent.patch @@ -15,7 +15,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } this.createResult(); -+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 2); // Paper ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, RESULT_SLOT); // Paper } public int getCost() { @@ -27,7 +27,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 this.setupResultSlot(itemstack, itemstack1, itemstack2); } -+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 2); // Paper ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, RESULT_SLOT); // Paper } private void setupResultSlot(ItemStack map, ItemStack item, ItemStack oldResult) { @@ -39,7 +39,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 super.slotsChanged(inventory); if (inventory == this.repairSlots) { this.createResult(); -+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 2); // Paper ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, RESULT_SLOT); // Paper } } @@ -51,7 +51,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 super.slotsChanged(inventory); if (inventory == this.inputSlots) { this.createResult(); -+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 2); // Paper ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, RESULT_SLOT); // Paper } } @@ -60,15 +60,15 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/world/inventory/LoomMenu.java +++ b/src/main/java/net/minecraft/world/inventory/LoomMenu.java @@ -0,0 +0,0 @@ public class LoomMenu extends AbstractContainerMenu { - } + this.resultSlot.set(ItemStack.EMPTY); + } - this.setupResultSlot(); -- this.broadcastChanges(); -+ //this.c(); // Paper - done below -+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 3); // Paper - } - - public void registerUpdateListener(Runnable inventoryChangeListener) { +- this.broadcastChanges(); ++ // this.broadcastChanges(); // Paper - done below ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 3); // Paper + } else { + this.resultSlot.set(ItemStack.EMPTY); + this.selectablePatterns = List.of(); diff --git a/src/main/java/net/minecraft/world/inventory/SmithingMenu.java b/src/main/java/net/minecraft/world/inventory/SmithingMenu.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/inventory/SmithingMenu.java @@ -77,7 +77,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 // CraftBukkit end } -+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 2); // Paper ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, RESULT_SLOT); // Paper } @Override @@ -89,7 +89,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 this.setupRecipeList(inventory, itemstack); } -+ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, 1); // Paper ++ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareResultEvent(this, RESULT_SLOT); // Paper } private void setupRecipeList(Container input, ItemStack stack) { diff --git a/patches/unapplied/server/Add-entity-liquid-API.patch b/patches/server/Add-entity-liquid-API.patch similarity index 100% rename from patches/unapplied/server/Add-entity-liquid-API.patch rename to patches/server/Add-entity-liquid-API.patch diff --git a/patches/unapplied/server/Clean-up-duplicated-GameProfile-Properties.patch b/patches/server/Clean-up-duplicated-GameProfile-Properties.patch similarity index 100% rename from patches/unapplied/server/Clean-up-duplicated-GameProfile-Properties.patch rename to patches/server/Clean-up-duplicated-GameProfile-Properties.patch diff --git a/patches/unapplied/server/Convert-legacy-attributes-in-Item-Meta.patch b/patches/server/Convert-legacy-attributes-in-Item-Meta.patch similarity index 100% rename from patches/unapplied/server/Convert-legacy-attributes-in-Item-Meta.patch rename to patches/server/Convert-legacy-attributes-in-Item-Meta.patch diff --git a/patches/server/Don-t-allow-null-UUID-s-for-chat.patch b/patches/server/Don-t-allow-null-UUID-s-for-chat.patch new file mode 100644 index 0000000000..61044667be --- /dev/null +++ b/patches/server/Don-t-allow-null-UUID-s-for-chat.patch @@ -0,0 +1,22 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Sun, 28 Jun 2020 19:36:55 -0400 +Subject: [PATCH] Don't allow null UUID's for chat + + +diff --git a/src/main/java/net/minecraft/network/chat/ChatSender.java b/src/main/java/net/minecraft/network/chat/ChatSender.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/network/chat/ChatSender.java ++++ b/src/main/java/net/minecraft/network/chat/ChatSender.java +@@ -0,0 +0,0 @@ public record ChatSender(UUID uuid, Component name, @Nullable Component teamName + public ChatSender(FriendlyByteBuf buf) { + this(buf.readUUID(), buf.readComponent(), buf.readNullable(FriendlyByteBuf::readComponent)); + } ++ // Paper start ++ public ChatSender { ++ com.google.common.base.Preconditions.checkNotNull(uuid, "uuid cannot be null"); ++ } ++ // Paper end + + public static ChatSender system(Component name) { + return new ChatSender(Util.NIL_UUID, name); diff --git a/patches/unapplied/server/Don-t-check-chunk-for-portal-on-world-gen-entity-add.patch b/patches/server/Don-t-check-chunk-for-portal-on-world-gen-entity-add.patch similarity index 100% rename from patches/unapplied/server/Don-t-check-chunk-for-portal-on-world-gen-entity-add.patch rename to patches/server/Don-t-check-chunk-for-portal-on-world-gen-entity-add.patch diff --git a/patches/server/Fix-SPIGOT-5824-Bukkit-world-container-is-not-used.patch b/patches/server/Fix-SPIGOT-5824-Bukkit-world-container-is-not-used.patch new file mode 100644 index 0000000000..24db181575 --- /dev/null +++ b/patches/server/Fix-SPIGOT-5824-Bukkit-world-container-is-not-used.patch @@ -0,0 +1,50 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Fri, 10 Jul 2020 13:12:33 -0500 +Subject: [PATCH] Fix SPIGOT-5824 Bukkit world-container is not used + + +diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/Main.java ++++ b/src/main/java/net/minecraft/server/Main.java +@@ -0,0 +0,0 @@ public class Main { + return; + } + +- File file = (File) optionset.valueOf("universe"); // CraftBukkit +- Services services = Services.create(new com.destroystokyo.paper.profile.PaperAuthenticationService(Proxy.NO_PROXY), file); // Paper ++ // Paper start - fix SPIGOT-5824 ++ File file; ++ File userCacheFile = new File(Services.USERID_CACHE_FILE); ++ if (optionset.has("universe")) { ++ file = (File) optionset.valueOf("universe"); // CraftBukkit ++ userCacheFile = new File(file, Services.USERID_CACHE_FILE); ++ } else { ++ file = new File(bukkitConfiguration.getString("settings.world-container", ".")); ++ } ++ // Paper end - fix SPIGOT-5824 ++ Services services = Services.create(new com.destroystokyo.paper.profile.PaperAuthenticationService(Proxy.NO_PROXY), file, userCacheFile); // Paper + // CraftBukkit start + String s = (String) Optional.ofNullable((String) optionset.valueOf("world")).orElse(dedicatedserversettings.getProperties().levelName); + LevelStorageSource convertable = LevelStorageSource.createDefault(file.toPath()); +diff --git a/src/main/java/net/minecraft/server/Services.java b/src/main/java/net/minecraft/server/Services.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/Services.java ++++ b/src/main/java/net/minecraft/server/Services.java +@@ -0,0 +0,0 @@ import net.minecraft.server.players.GameProfileCache; + import net.minecraft.util.SignatureValidator; + + public record Services(MinecraftSessionService sessionService, SignatureValidator serviceSignatureValidator, GameProfileRepository profileRepository, GameProfileCache profileCache) { +- private static final String USERID_CACHE_FILE = "usercache.json"; ++ public static final String USERID_CACHE_FILE = "usercache.json"; // Paper - private -> public + +- public static Services create(YggdrasilAuthenticationService authenticationService, File rootDirectory) { ++ public static Services create(YggdrasilAuthenticationService authenticationService, File rootDirectory, File userCacheFile) { // Paper + MinecraftSessionService minecraftSessionService = authenticationService.createMinecraftSessionService(); + GameProfileRepository gameProfileRepository = authenticationService.createProfileRepository(); +- GameProfileCache gameProfileCache = new GameProfileCache(gameProfileRepository, new File(rootDirectory, "usercache.json")); ++ GameProfileCache gameProfileCache = new GameProfileCache(gameProfileRepository, userCacheFile); // Paper + SignatureValidator signatureValidator = SignatureValidator.from(authenticationService.getServicesKey()); + return new Services(minecraftSessionService, signatureValidator, gameProfileRepository, gameProfileCache); + } diff --git a/patches/unapplied/server/Fix-SPIGOT-5989.patch b/patches/server/Fix-SPIGOT-5989.patch similarity index 84% rename from patches/unapplied/server/Fix-SPIGOT-5989.patch rename to patches/server/Fix-SPIGOT-5989.patch index 6edd088aa3..6385f09221 100644 --- a/patches/unapplied/server/Fix-SPIGOT-5989.patch +++ b/patches/server/Fix-SPIGOT-5989.patch @@ -13,14 +13,6 @@ diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/ma index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -0,0 +0,0 @@ import net.minecraft.world.level.GameRules; - import net.minecraft.world.level.Level; - import net.minecraft.world.level.biome.BiomeManager; - import net.minecraft.world.level.block.Blocks; -+import net.minecraft.world.level.block.RespawnAnchorBlock; - import net.minecraft.world.level.block.state.BlockState; - import net.minecraft.world.level.border.BorderChangeListener; - import net.minecraft.world.level.border.WorldBorder; @@ -0,0 +0,0 @@ public abstract class PlayerList { // Paper start boolean isBedSpawn = false; @@ -57,12 +49,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 // entityplayer1.initInventoryMenu(); entityplayer1.setHealth(entityplayer1.getHealth()); - if (flag2) { -- entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), 1.0F, 1.0F)); +- entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), 1.0F, 1.0F, worldserver1.getRandom().nextLong())); + // Paper start - Fix SPIGOT-5989 + if (flag2 && !isLocAltered) { + BlockState data = worldserver1.getBlockState(blockposition); -+ worldserver1.setBlock(blockposition, data.setValue(RespawnAnchorBlock.CHARGE, data.getValue(RespawnAnchorBlock.CHARGE) - 1), 3); -+ entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) location.getX(), (double) location.getY(), (double) location.getZ(), 1.0F, 1.0F)); ++ worldserver1.setBlock(blockposition, data.setValue(net.minecraft.world.level.block.RespawnAnchorBlock.CHARGE, data.getValue(net.minecraft.world.level.block.RespawnAnchorBlock.CHARGE) - 1), 3); ++ entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) location.getX(), (double) location.getY(), (double) location.getZ(), 1.0F, 1.0F, worldserver1.getRandom().nextLong())); + // Paper end } // Added from changeDimension diff --git a/patches/unapplied/server/Fix-arrows-never-despawning-MC-125757.patch b/patches/server/Fix-arrows-never-despawning-MC-125757.patch similarity index 100% rename from patches/unapplied/server/Fix-arrows-never-despawning-MC-125757.patch rename to patches/server/Fix-arrows-never-despawning-MC-125757.patch diff --git a/patches/unapplied/server/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch b/patches/server/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch similarity index 99% rename from patches/unapplied/server/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch rename to patches/server/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch index 3cf1e52d0f..3a3a097825 100644 --- a/patches/unapplied/server/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch +++ b/patches/server/Implement-Chunk-Priority-Urgency-System-for-Chunks.patch @@ -369,11 +369,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 private final BlockableEventLoop mainThreadExecutor; + final java.util.concurrent.Executor mainInvokingExecutor; // Paper public ChunkGenerator generator; + private RandomState randomState; public final Supplier overworldDataStorage; - private final PoiManager poiManager; @@ -0,0 +0,0 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - this.level = world; - this.generator = chunkGenerator; + } + this.mainThreadExecutor = mainThreadExecutor; + // Paper start + this.mainInvokingExecutor = (run) -> { @@ -468,7 +468,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + // Paper - revert 1.17 chunk system changes if (optional.isPresent() && ((ChunkAccess) optional.get()).getStatus().isOrAfter(requiredStatus)) { - CompletableFuture> completablefuture = requiredStatus.load(this.level, this.structureManager, this.lightEngine, (ichunkaccess) -> { + CompletableFuture> completablefuture = requiredStatus.load(this.level, this.structureTemplateManager, this.lightEngine, (ichunkaccess) -> { @@ -0,0 +0,0 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } else { return this.scheduleChunkGeneration(holder, requiredStatus); @@ -505,7 +505,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } + this.level.asyncChunkTaskManager.raisePriority(pos.x, pos.z, priority); // Paper return ret; - // Paper end + // Paper end - Async chunk io } @@ -0,0 +0,0 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider this.releaseLightTicket(chunkcoordintpair); diff --git a/patches/unapplied/server/Improve-EntityTargetLivingEntityEvent-for-1.16-mobs.patch b/patches/server/Improve-EntityTargetLivingEntityEvent-for-1.16-mobs.patch similarity index 88% rename from patches/unapplied/server/Improve-EntityTargetLivingEntityEvent-for-1.16-mobs.patch rename to patches/server/Improve-EntityTargetLivingEntityEvent-for-1.16-mobs.patch index 88bbdff0c8..7259fba86f 100644 --- a/patches/unapplied/server/Improve-EntityTargetLivingEntityEvent-for-1.16-mobs.patch +++ b/patches/server/Improve-EntityTargetLivingEntityEvent-for-1.16-mobs.patch @@ -16,7 +16,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 if (!entity.canAttack(entityliving)) { - this.clearAttackTarget(entity); + this.clearAttackTarget(entity, org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_INVALID); // Paper - } else if (StopAttackingIfTargetInvalid.isTiredOfTryingToReachTarget(entity)) { + } else if (this.canGrowTiredOfTryingToReachTarget && StopAttackingIfTargetInvalid.isTiredOfTryingToReachTarget(entity)) { - this.clearAttackTarget(entity); + this.clearAttackTarget(entity, org.bukkit.event.entity.EntityTargetEvent.TargetReason.FORGOT_TARGET); // Paper } else if (this.isCurrentTargetDeadOrRemoved(entity)) { @@ -41,20 +41,19 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 - LivingEntity old = entity.getBrain().getMemory(MemoryModuleType.ATTACK_TARGET).orElse(null); - EntityTargetEvent event = CraftEventFactory.callEntityTargetLivingEvent(entity, null, (old != null && !old.isAlive()) ? EntityTargetEvent.TargetReason.TARGET_DIED : EntityTargetEvent.TargetReason.FORGOT_TARGET); + // Paper start - fix this event -+ //EntityLiving old = e0.getBehaviorController().getMemory(MemoryModuleType.ATTACK_TARGET).orElse(null); ++ // LivingEntity old = entity.getBrain().getMemory(MemoryModuleType.ATTACK_TARGET).orElse(null); + EntityTargetEvent event = CraftEventFactory.callEntityTargetLivingEvent(entity, null, reason); if (event.isCancelled()) { return; } - if (event.getTarget() != null) { -- entity.getBrain().setMemory(MemoryModuleType.ATTACK_TARGET, ((CraftLivingEntity) event.getTarget()).getHandle()); + // comment out, bad logic - bad + /*if (event.getTarget() != null) { -+ e0.getBehaviorController().setMemory(MemoryModuleType.ATTACK_TARGET, ((CraftLivingEntity) event.getTarget()).getHandle()); + entity.getBrain().setMemory(MemoryModuleType.ATTACK_TARGET, ((CraftLivingEntity) event.getTarget()).getHandle()); return; - } + }*/ + // Paper end // CraftBukkit end - this.onTargetErased.accept(entity); + this.onTargetErased.accept(entity, this.getAttackTarget(entity)); entity.getBrain().eraseMemory(MemoryModuleType.ATTACK_TARGET); diff --git a/patches/unapplied/server/Improve-Legacy-Component-serialization-size.patch b/patches/server/Improve-Legacy-Component-serialization-size.patch similarity index 100% rename from patches/unapplied/server/Improve-Legacy-Component-serialization-size.patch rename to patches/server/Improve-Legacy-Component-serialization-size.patch diff --git a/patches/unapplied/server/Optimize-Bit-Operations-by-inlining.patch b/patches/server/Optimize-Bit-Operations-by-inlining.patch similarity index 100% rename from patches/unapplied/server/Optimize-Bit-Operations-by-inlining.patch rename to patches/server/Optimize-Bit-Operations-by-inlining.patch diff --git a/patches/unapplied/server/Optimize-NetworkManager-Exception-Handling.patch b/patches/server/Optimize-NetworkManager-Exception-Handling.patch similarity index 100% rename from patches/unapplied/server/Optimize-NetworkManager-Exception-Handling.patch rename to patches/server/Optimize-NetworkManager-Exception-Handling.patch diff --git a/patches/unapplied/server/Optimize-the-advancement-data-player-iteration-to-be.patch b/patches/server/Optimize-the-advancement-data-player-iteration-to-be.patch similarity index 100% rename from patches/unapplied/server/Optimize-the-advancement-data-player-iteration-to-be.patch rename to patches/server/Optimize-the-advancement-data-player-iteration-to-be.patch diff --git a/patches/server/Remove-some-streams-from-structures.patch b/patches/server/Remove-some-streams-from-structures.patch new file mode 100644 index 0000000000..0d8b990fff --- /dev/null +++ b/patches/server/Remove-some-streams-from-structures.patch @@ -0,0 +1,33 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Josh Roy <10731363+JRoy@users.noreply.github.com> +Date: Mon, 29 Jun 2020 17:03:06 -0400 +Subject: [PATCH] Remove some streams from structures + +This showed up a lot in the spark profiler, should have a low-medium performance improvement. + +diff --git a/src/main/java/net/minecraft/world/level/levelgen/Beardifier.java b/src/main/java/net/minecraft/world/level/levelgen/Beardifier.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/world/level/levelgen/Beardifier.java ++++ b/src/main/java/net/minecraft/world/level/levelgen/Beardifier.java +@@ -0,0 +0,0 @@ public class Beardifier implements DensityFunctions.BeardifierOrMarker { + int j = chunkPos.getMinBlockZ(); + ObjectList objectList = new ObjectArrayList<>(10); + ObjectList objectList2 = new ObjectArrayList<>(32); +- structureManager.startsForStructure(chunkPos, (structure) -> { ++ // Paper start - replace for each ++ for (net.minecraft.world.level.levelgen.structure.StructureStart structureStart : structureManager.startsForStructure(chunkPos, (structure) -> { + return structure.terrainAdaptation() != TerrainAdjustment.NONE; +- }).forEach((structureStart) -> { ++ })) { + TerrainAdjustment terrainAdjustment = structureStart.getStructure().terrainAdaptation(); + + for(StructurePiece structurePiece : structureStart.getPieces()) { +@@ -0,0 +0,0 @@ public class Beardifier implements DensityFunctions.BeardifierOrMarker { + } + } + +- }); ++ } // Paper + return new Beardifier(objectList.iterator(), objectList2.iterator()); + } + diff --git a/patches/unapplied/server/Remove-streams-from-classes-related-villager-gossip.patch b/patches/server/Remove-streams-from-classes-related-villager-gossip.patch similarity index 73% rename from patches/unapplied/server/Remove-streams-from-classes-related-villager-gossip.patch rename to patches/server/Remove-streams-from-classes-related-villager-gossip.patch index 953198eab2..b459fb06f3 100644 --- a/patches/unapplied/server/Remove-streams-from-classes-related-villager-gossip.patch +++ b/patches/server/Remove-streams-from-classes-related-villager-gossip.patch @@ -8,21 +8,13 @@ diff --git a/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer. index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer.java +++ b/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer.java -@@ -0,0 +0,0 @@ import com.mojang.serialization.Dynamic; - import com.mojang.serialization.DynamicOps; - import it.unimi.dsi.fastutil.objects.Object2IntMap; - import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -+import it.unimi.dsi.fastutil.objects.ObjectArrayList; // Paper - import it.unimi.dsi.fastutil.objects.ObjectIterator; - import java.util.Arrays; - import java.util.Collection; @@ -0,0 +0,0 @@ public class GossipContainer { }); } + // Paper start - Remove streams from reputation + private List decompress() { -+ List list = new ObjectArrayList<>(); ++ List list = new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(); + for (Map.Entry entry : getReputations().entrySet()) { + for (GossipContainer.GossipEntry cur : entry.getValue().decompress(entry.getKey())) { + if (cur.weightedValue() != 0) @@ -33,25 +25,21 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + // Paper end + - private Collection selectGossipsForTransfer(Random random, int count) { + private Collection selectGossipsForTransfer(RandomSource random, int count) { - List list = this.unpack().collect(Collectors.toList()); -+ List list = decompress(); // Paper - Remove streams from reputation ++ List list = this.decompress(); // Paper - Remove streams from reputation if (list.isEmpty()) { return Collections.emptyList(); } else { @@ -0,0 +0,0 @@ public class GossipContainer { - } -- public Dynamic store(DynamicOps dynamicOps) { + public Dynamic store(DynamicOps dynamicOps) { - return new Dynamic<>(dynamicOps, dynamicOps.createList(this.unpack().map((gossipEntry) -> { -- return gossipEntry.store(dynamicOps); -+ public Dynamic store(DynamicOps dynamicops) { -+ return new Dynamic(dynamicops, dynamicops.createList(this.decompress().stream().map((reputation_b) -> { -+ return reputation_b.store(dynamicops); ++ return new Dynamic<>(dynamicOps, dynamicOps.createList(this.decompress().stream().map((gossipEntry) -> { + return gossipEntry.store(dynamicOps); }).map(Dynamic::getValue))); } - @@ -0,0 +0,0 @@ public class GossipContainer { final Object2IntMap entries = new Object2IntOpenHashMap<>(); @@ -72,7 +60,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + + public List decompress(UUID uuid) { -+ List list = new ObjectArrayList<>(); ++ List list = new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(); + for (Object2IntMap.Entry entry : entries.object2IntEntrySet()) { + list.add(new GossipContainer.GossipEntry(uuid, entry.getKey(), entry.getIntValue())); + } diff --git a/patches/unapplied/server/Spawn-player-in-correct-world-on-login.patch b/patches/server/Spawn-player-in-correct-world-on-login.patch similarity index 100% rename from patches/unapplied/server/Spawn-player-in-correct-world-on-login.patch rename to patches/server/Spawn-player-in-correct-world-on-login.patch diff --git a/patches/unapplied/server/Stop-copy-on-write-operations-for-updating-light-dat.patch b/patches/server/Stop-copy-on-write-operations-for-updating-light-dat.patch similarity index 100% rename from patches/unapplied/server/Stop-copy-on-write-operations-for-updating-light-dat.patch rename to patches/server/Stop-copy-on-write-operations-for-updating-light-dat.patch diff --git a/patches/unapplied/server/Support-components-in-ItemMeta.patch b/patches/server/Support-components-in-ItemMeta.patch similarity index 100% rename from patches/unapplied/server/Support-components-in-ItemMeta.patch rename to patches/server/Support-components-in-ItemMeta.patch diff --git a/patches/unapplied/server/Support-old-UUID-format-for-NBT.patch b/patches/server/Support-old-UUID-format-for-NBT.patch similarity index 93% rename from patches/unapplied/server/Support-old-UUID-format-for-NBT.patch rename to patches/server/Support-old-UUID-format-for-NBT.patch index d32ba32be1..4247fbcf20 100644 --- a/patches/unapplied/server/Support-old-UUID-format-for-NBT.patch +++ b/patches/server/Support-old-UUID-format-for-NBT.patch @@ -50,8 +50,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/nbt/NbtUtils.java +++ b/src/main/java/net/minecraft/nbt/NbtUtils.java @@ -0,0 +0,0 @@ public final class NbtUtils { - if (compound.contains("Name", 8)) { - string = compound.getString("Name"); + if (nbt.contains("Name", 8)) { + string = nbt.getString("Name"); } + // Paper start - support string UUID's + if (compound.contains("Id", 8)) { @@ -59,5 +59,5 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + // Paper end - if (compound.hasUUID("Id")) { - uUID = compound.getUUID("Id"); + if (nbt.hasUUID("Id")) { + uUID = nbt.getUUID("Id"); diff --git a/patches/unapplied/server/Thread-Safe-Vanilla-Command-permission-checking.patch b/patches/server/Thread-Safe-Vanilla-Command-permission-checking.patch similarity index 97% rename from patches/unapplied/server/Thread-Safe-Vanilla-Command-permission-checking.patch rename to patches/server/Thread-Safe-Vanilla-Command-permission-checking.patch index 2e1859b82b..53aa8eaede 100644 --- a/patches/unapplied/server/Thread-Safe-Vanilla-Command-permission-checking.patch +++ b/patches/server/Thread-Safe-Vanilla-Command-permission-checking.patch @@ -30,9 +30,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/commands/CommandSourceStack.java +++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java @@ -0,0 +0,0 @@ public class CommandSourceStack implements SharedSuggestionProvider, com.destroy - private final ResultConsumer consumer; private final EntityAnchorArgument.Anchor anchor; private final Vec2 rotation; + private final CommandSigningContext signingContext; - public volatile CommandNode currentCommand; // CraftBukkit + public java.util.Map currentCommand = new java.util.concurrent.ConcurrentHashMap<>(); // CraftBukkit // Paper diff --git a/patches/unapplied/server/Update-itemstack-legacy-name-and-lore.patch b/patches/server/Update-itemstack-legacy-name-and-lore.patch similarity index 100% rename from patches/unapplied/server/Update-itemstack-legacy-name-and-lore.patch rename to patches/server/Update-itemstack-legacy-name-and-lore.patch diff --git a/patches/unapplied/server/incremental-chunk-and-player-saving.patch b/patches/server/incremental-chunk-and-player-saving.patch similarity index 99% rename from patches/unapplied/server/incremental-chunk-and-player-saving.patch rename to patches/server/incremental-chunk-and-player-saving.patch index f05052c91b..f5fe637ed2 100644 --- a/patches/unapplied/server/incremental-chunk-and-player-saving.patch +++ b/patches/server/incremental-chunk-and-player-saving.patch @@ -168,7 +168,7 @@ diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/j index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -0,0 +0,0 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureMana +@@ -0,0 +0,0 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemp import net.minecraft.world.level.storage.DimensionDataStorage; import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.phys.Vec3; @@ -400,8 +400,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } + public void setLastSaved(long ticks) {} // Paper - // CraftBukkit start - decompile error public static record TicksToSave(SerializableTickContainer blocks, SerializableTickContainer fluids) { + diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java diff --git a/patches/unapplied/server/Don-t-allow-null-UUID-s-for-chat.patch b/patches/unapplied/server/Don-t-allow-null-UUID-s-for-chat.patch deleted file mode 100644 index 9ccd1b869b..0000000000 --- a/patches/unapplied/server/Don-t-allow-null-UUID-s-for-chat.patch +++ /dev/null @@ -1,19 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Aikar -Date: Sun, 28 Jun 2020 19:36:55 -0400 -Subject: [PATCH] Don't allow null UUID's for chat - - -diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundChatPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundChatPacket.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/network/protocol/game/ClientboundChatPacket.java -+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundChatPacket.java -@@ -0,0 +0,0 @@ public class ClientboundChatPacket implements Packet { - public ClientboundChatPacket(Component message, ChatType type, UUID sender) { - this.message = message; - this.type = type; -- this.sender = sender; -+ this.sender = sender != null ? sender : net.minecraft.Util.NIL_UUID; - } - - public ClientboundChatPacket(FriendlyByteBuf buf) { diff --git a/patches/unapplied/server/Fix-SPIGOT-5824-Bukkit-world-container-is-not-used.patch b/patches/unapplied/server/Fix-SPIGOT-5824-Bukkit-world-container-is-not-used.patch deleted file mode 100644 index 5821fea817..0000000000 --- a/patches/unapplied/server/Fix-SPIGOT-5824-Bukkit-world-container-is-not-used.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Fri, 10 Jul 2020 13:12:33 -0500 -Subject: [PATCH] Fix SPIGOT-5824 Bukkit world-container is not used - - -diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/server/Main.java -+++ b/src/main/java/net/minecraft/server/Main.java -@@ -0,0 +0,0 @@ public class Main { - return; - } - -- File file = (File) optionset.valueOf("universe"); // CraftBukkit -+ // Paper start - fix SPIGOT-5824 -+ File file; -+ File userCacheFile = new File("usercache.json"); -+ if (optionset.has("universe")) { -+ file = (File) optionset.valueOf("universe"); // CraftBukkit -+ userCacheFile = new File(file, "usercache.json"); -+ } else { -+ file = new File(bukkitConfiguration.getString("settings.world-container", ".")); -+ } -+ // Paper end - fix SPIGOT-5824 - YggdrasilAuthenticationService yggdrasilauthenticationservice = new com.destroystokyo.paper.profile.PaperAuthenticationService(Proxy.NO_PROXY); // Paper - MinecraftSessionService minecraftsessionservice = yggdrasilauthenticationservice.createMinecraftSessionService(); - GameProfileRepository gameprofilerepository = yggdrasilauthenticationservice.createProfileRepository(); -- GameProfileCache usercache = new GameProfileCache(gameprofilerepository, new File(file, MinecraftServer.USERID_CACHE_FILE.getName())); -+ GameProfileCache usercache = new GameProfileCache(gameprofilerepository, userCacheFile); // Paper - only move usercache.json into folder if --universe is used, not world-container - // CraftBukkit start - String s = (String) Optional.ofNullable((String) optionset.valueOf("world")).orElse(dedicatedserversettings.getProperties().levelName); - LevelStorageSource convertable = LevelStorageSource.createDefault(file.toPath()); diff --git a/patches/unapplied/server/Move-range-check-for-block-placing-up.patch b/patches/unapplied/server/Move-range-check-for-block-placing-up.patch deleted file mode 100644 index 13633feffc..0000000000 --- a/patches/unapplied/server/Move-range-check-for-block-placing-up.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Spottedleaf -Date: Wed, 15 Jul 2020 19:34:11 -0700 -Subject: [PATCH] Move range check for block placing up - - -diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser - } - // Spigot end - -+ // Paper start -+ private static final int SURVIVAL_PLACE_DISTANCE_SQUARED = 6 * 6; -+ private static final int CREATIVE_PLACE_DISTANCE_SQUARED = 7 * 7; -+ private boolean isOutsideOfReach(double x, double y, double z) { -+ Location eyeLoc = this.getCraftPlayer().getEyeLocation(); -+ double reachDistance = org.bukkit.util.NumberConversions.square(eyeLoc.getX() - x) + org.bukkit.util.NumberConversions.square(eyeLoc.getY() - y) + org.bukkit.util.NumberConversions.square(eyeLoc.getZ() - z); -+ return reachDistance > (this.getCraftPlayer().getGameMode() == org.bukkit.GameMode.CREATIVE ? CREATIVE_PLACE_DISTANCE_SQUARED : SURVIVAL_PLACE_DISTANCE_SQUARED); -+ } -+ // Paper end -+ - @Override - public void handleUseItemOn(ServerboundUseItemOnPacket packet) { - PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); -@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser - BlockPos blockposition = movingobjectpositionblock.getBlockPos(); - Vec3 vec3d1 = vec3d.subtract(Vec3.atCenterOf(blockposition)); - -+ // Paper start - improve distance check -+ final Vec3 clickedLocation = movingobjectpositionblock.getLocation(); -+ if (isOutsideOfReach(blockposition.getX() + 0.5D, blockposition.getY() + 0.5D, blockposition.getZ() + 0.5D) -+ || !Double.isFinite(clickedLocation.x) || !Double.isFinite(clickedLocation.y) || !Double.isFinite(clickedLocation.z) -+ || isOutsideOfReach(clickedLocation.x, clickedLocation.y, clickedLocation.z)) { -+ return; -+ } -+ // Paper end -+ - if (this.player.level.getServer() != null && this.player.chunkPosition().getChessboardDistance(new ChunkPos(blockposition)) < this.player.level.spigotConfig.viewDistance) { // Spigot - double d0 = 1.0000001D; - diff --git a/patches/unapplied/server/Remove-some-streams-from-structures.patch b/patches/unapplied/server/Remove-some-streams-from-structures.patch deleted file mode 100644 index 885a6c5122..0000000000 --- a/patches/unapplied/server/Remove-some-streams-from-structures.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Josh Roy <10731363+JRoy@users.noreply.github.com> -Date: Mon, 29 Jun 2020 17:03:06 -0400 -Subject: [PATCH] Remove some streams from structures - -This showed up a lot in the spark profiler, should have a low-medium performance improvement. - -diff --git a/src/main/java/net/minecraft/world/level/levelgen/Beardifier.java b/src/main/java/net/minecraft/world/level/levelgen/Beardifier.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/level/levelgen/Beardifier.java -+++ b/src/main/java/net/minecraft/world/level/levelgen/Beardifier.java -@@ -0,0 +0,0 @@ import net.minecraft.world.level.levelgen.feature.NoiseEffect; - import net.minecraft.world.level.levelgen.structure.BoundingBox; - import net.minecraft.world.level.levelgen.structure.PoolElementStructurePiece; - import net.minecraft.world.level.levelgen.structure.StructurePiece; -+import net.minecraft.world.level.levelgen.structure.StructureStart; - import net.minecraft.world.level.levelgen.structure.pools.JigsawJunction; - import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool; - -@@ -0,0 +0,0 @@ public class Beardifier implements DensityFunctions.BeardifierOrMarker { - int j = chunkPos.getMinBlockZ(); - this.junctions = new ObjectArrayList<>(32); - this.rigids = new ObjectArrayList<>(10); -- structureAccessor.startsForFeature(SectionPos.bottomOf(chunk), (configuredStructureFeature) -> { -+ // Paper start - replace for each -+ for (StructureStart start : structureAccessor.startsForFeature(SectionPos.bottomOf(chunk), (configuredStructureFeature) -> { - return configuredStructureFeature.adaptNoise; -- }).forEach((start) -> { -+ })) { // Paper end - for(StructurePiece structurePiece : start.getPieces()) { - if (structurePiece.isCloseToChunk(chunkPos, 12)) { - if (structurePiece instanceof PoolElementStructurePiece) { -@@ -0,0 +0,0 @@ public class Beardifier implements DensityFunctions.BeardifierOrMarker { - } - } - -- }); -+ } // Paper - this.pieceIterator = this.rigids.iterator(); - this.junctionIterator = this.junctions.iterator(); - }