From 5cbb0c1915ff8d2d7539f89b4b823dd1218d613f Mon Sep 17 00:00:00 2001 From: Telesphoreo Date: Sun, 10 Dec 2023 19:20:31 -0600 Subject: [PATCH] more patches --- .../0027-Add-spectator-teleport-event.patch | 4 +- ...028-Prevent-invalid-container-events.patch | 6 +- ...running-commands-in-books-by-default.patch | 0 ...ck-entity-entity-tag-query-positions.patch | 6 +- ...vents-on-Signs-bypassing-permissions.patch | 8 +- ...t-legacy-messages-over-1k-characters.patch | 4 +- .../server/0033-Prevent-velocity-freeze.patch | 32 +++-- ...on-option-to-disable-chat-signatures.patch | 38 +++--- ...-Patch-large-selector-distance-crash.patch | 42 +++--- ...tch-invalid-entity-rotation-log-spam.patch | 0 ...imit-sculk-catalyst-cursor-positions.patch | 0 .../server/0038-Limit-map-decorations.patch | 0 ...player-banning-using-duplicate-UUIDs.patch | 0 ...Don-t-warn-on-duplicate-entity-UUIDs.patch | 0 ...-component-extra-empty-array-exploit.patch | 18 --- ...epth-limit-to-Component-deserializer.patch | 125 ------------------ 16 files changed, 73 insertions(+), 210 deletions(-) rename patches/{unapplied => }/server/0027-Add-spectator-teleport-event.patch (90%) rename patches/{unapplied => }/server/0028-Prevent-invalid-container-events.patch (88%) rename patches/{unapplied => }/server/0029-Disable-running-commands-in-books-by-default.patch (100%) rename patches/{unapplied => }/server/0030-Validate-block-entity-entity-tag-query-positions.patch (89%) rename patches/{unapplied => }/server/0031-Fix-ClickEvents-on-Signs-bypassing-permissions.patch (91%) rename patches/{unapplied => }/server/0032-Refuse-to-convert-legacy-messages-over-1k-characters.patch (84%) rename patches/{unapplied => }/server/0033-Prevent-velocity-freeze.patch (80%) rename patches/{unapplied => }/server/0034-Add-configuration-option-to-disable-chat-signatures.patch (82%) rename patches/{unapplied => }/server/0035-Patch-large-selector-distance-crash.patch (72%) rename patches/{unapplied => }/server/0036-Patch-invalid-entity-rotation-log-spam.patch (100%) rename patches/{unapplied => }/server/0037-Limit-sculk-catalyst-cursor-positions.patch (100%) rename patches/{unapplied => }/server/0038-Limit-map-decorations.patch (100%) rename patches/{unapplied => }/server/0039-Prevent-player-banning-using-duplicate-UUIDs.patch (100%) rename patches/{unapplied => }/server/0040-Don-t-warn-on-duplicate-entity-UUIDs.patch (100%) delete mode 100644 patches/unapplied/server/0041-Fix-component-extra-empty-array-exploit.patch delete mode 100644 patches/unapplied/server/0042-Add-depth-limit-to-Component-deserializer.patch diff --git a/patches/unapplied/server/0027-Add-spectator-teleport-event.patch b/patches/server/0027-Add-spectator-teleport-event.patch similarity index 90% rename from patches/unapplied/server/0027-Add-spectator-teleport-event.patch rename to patches/server/0027-Add-spectator-teleport-event.patch index cd389cf..b5ebb36 100644 --- a/patches/unapplied/server/0027-Add-spectator-teleport-event.patch +++ b/patches/server/0027-Add-spectator-teleport-event.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add spectator teleport event diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 65bb221993147a558995b36fb835f7b82e0eb4bd..4ea2c551d924f976a8de9e2ae521544f323fbec4 100644 +index 30ccbab1586a656e0ae41d7406525fb02d9e025b..987001ab3a7cdd1c8c37e528077e5d33060ab505 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1,5 +1,6 @@ @@ -15,7 +15,7 @@ index 65bb221993147a558995b36fb835f7b82e0eb4bd..4ea2c551d924f976a8de9e2ae521544f import com.google.common.collect.Lists; import com.google.common.primitives.Floats; import com.mojang.authlib.GameProfile; -@@ -2006,6 +2007,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2033,6 +2034,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl Entity entity = packet.getEntity(worldserver); if (entity != null) { diff --git a/patches/unapplied/server/0028-Prevent-invalid-container-events.patch b/patches/server/0028-Prevent-invalid-container-events.patch similarity index 88% rename from patches/unapplied/server/0028-Prevent-invalid-container-events.patch rename to patches/server/0028-Prevent-invalid-container-events.patch index 44ed9ea..8c2052b 100644 --- a/patches/unapplied/server/0028-Prevent-invalid-container-events.patch +++ b/patches/server/0028-Prevent-invalid-container-events.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent invalid container events diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 4ea2c551d924f976a8de9e2ae521544f323fbec4..83ae366b4f52261e2e2b65a4183d7ca823edd315 100644 +index 987001ab3a7cdd1c8c37e528077e5d33060ab505..87d5f576ef8be68256191df7c3bf4f081c2e7370 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -30,6 +30,7 @@ import java.util.function.UnaryOperator; +@@ -29,6 +29,7 @@ import java.util.function.UnaryOperator; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; @@ -16,7 +16,7 @@ index 4ea2c551d924f976a8de9e2ae521544f323fbec4..83ae366b4f52261e2e2b65a4183d7ca8 import net.minecraft.ChatFormatting; import net.minecraft.SharedConstants; import net.minecraft.Util; -@@ -2900,6 +2901,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2902,6 +2903,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl return; } diff --git a/patches/unapplied/server/0029-Disable-running-commands-in-books-by-default.patch b/patches/server/0029-Disable-running-commands-in-books-by-default.patch similarity index 100% rename from patches/unapplied/server/0029-Disable-running-commands-in-books-by-default.patch rename to patches/server/0029-Disable-running-commands-in-books-by-default.patch diff --git a/patches/unapplied/server/0030-Validate-block-entity-entity-tag-query-positions.patch b/patches/server/0030-Validate-block-entity-entity-tag-query-positions.patch similarity index 89% rename from patches/unapplied/server/0030-Validate-block-entity-entity-tag-query-positions.patch rename to patches/server/0030-Validate-block-entity-entity-tag-query-positions.patch index addf64d..5433a03 100644 --- a/patches/unapplied/server/0030-Validate-block-entity-entity-tag-query-positions.patch +++ b/patches/server/0030-Validate-block-entity-entity-tag-query-positions.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Validate block entity/entity tag query positions diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 83ae366b4f52261e2e2b65a4183d7ca823edd315..67b5447ffcf54c54b2087df456690a9bed98fbd3 100644 +index 87d5f576ef8be68256191df7c3bf4f081c2e7370..acb4a7ad68a1d6c1ba43eafdd85ab5f824621507 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1262,7 +1262,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1267,7 +1267,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (this.player.hasPermissions(2)) { Entity entity = this.player.level().getEntity(packet.getEntityId()); @@ -17,7 +17,7 @@ index 83ae366b4f52261e2e2b65a4183d7ca823edd315..67b5447ffcf54c54b2087df456690a9b CompoundTag nbttagcompound = entity.saveWithoutId(new CompoundTag()); this.player.connection.send(new ClientboundTagQueryPacket(packet.getTransactionId(), nbttagcompound)); -@@ -1274,7 +1274,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1299,7 +1299,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleBlockEntityTagQuery(ServerboundBlockEntityTagQuery packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); diff --git a/patches/unapplied/server/0031-Fix-ClickEvents-on-Signs-bypassing-permissions.patch b/patches/server/0031-Fix-ClickEvents-on-Signs-bypassing-permissions.patch similarity index 91% rename from patches/unapplied/server/0031-Fix-ClickEvents-on-Signs-bypassing-permissions.patch rename to patches/server/0031-Fix-ClickEvents-on-Signs-bypassing-permissions.patch index 56e90f5..01e1319 100644 --- a/patches/unapplied/server/0031-Fix-ClickEvents-on-Signs-bypassing-permissions.patch +++ b/patches/server/0031-Fix-ClickEvents-on-Signs-bypassing-permissions.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix ClickEvents on Signs bypassing permissions diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java -index 38cde466714e5663cd416b6afd5d2558e139ec09..ed48eaae75e709361a260421934b6b925ae9b427 100644 +index bc01970c5ef9cde4a75394d6977837e924a38463..12ae1d0b819c2968fed903c14f9523b492a506ff 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java @@ -8,8 +8,10 @@ import java.util.Objects; @@ -27,7 +27,7 @@ index 38cde466714e5663cd416b6afd5d2558e139ec09..ed48eaae75e709361a260421934b6b92 import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.FilteredText; -@@ -30,6 +33,7 @@ import net.minecraft.world.level.block.SignBlock; +@@ -32,6 +35,7 @@ import net.minecraft.world.level.block.SignBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec2; import net.minecraft.world.phys.Vec3; @@ -35,7 +35,7 @@ index 38cde466714e5663cd416b6afd5d2558e139ec09..ed48eaae75e709361a260421934b6b92 import org.slf4j.Logger; import org.bukkit.block.sign.Side; import org.bukkit.craftbukkit.block.CraftBlock; -@@ -37,6 +41,7 @@ import org.bukkit.craftbukkit.util.CraftChatMessage; +@@ -39,6 +43,7 @@ import org.bukkit.craftbukkit.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.event.block.SignChangeEvent; // CraftBukkit end @@ -43,7 +43,7 @@ index 38cde466714e5663cd416b6afd5d2558e139ec09..ed48eaae75e709361a260421934b6b92 public class SignBlockEntity extends BlockEntity implements CommandSource { // CraftBukkit - implements -@@ -291,6 +296,21 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C +@@ -289,6 +294,21 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C } player.getServer().getCommands().performPrefixedCommand(this.createCommandSourceStack(((org.bukkit.craftbukkit.entity.CraftPlayer) event.getPlayer()).getHandle(), world, pos), event.getMessage()); // Paper end diff --git a/patches/unapplied/server/0032-Refuse-to-convert-legacy-messages-over-1k-characters.patch b/patches/server/0032-Refuse-to-convert-legacy-messages-over-1k-characters.patch similarity index 84% rename from patches/unapplied/server/0032-Refuse-to-convert-legacy-messages-over-1k-characters.patch rename to patches/server/0032-Refuse-to-convert-legacy-messages-over-1k-characters.patch index 7eac5d1..d1cb43d 100644 --- a/patches/unapplied/server/0032-Refuse-to-convert-legacy-messages-over-1k-characters.patch +++ b/patches/server/0032-Refuse-to-convert-legacy-messages-over-1k-characters.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Refuse to convert legacy messages over 1k characters diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java -index 0f70be614f8f5350ad558d0ae645cdf0027e1e76..c006ac8531cf2c029fd2fac449f96736a4afed0d 100644 +index 730d8e3cf2d9ca05b2d6219cf1856b8721871a37..63e71c5cb4ac4d17d2cfa5324fd842a0d3c61eb5 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java -@@ -199,6 +199,7 @@ public final class CraftChatMessage { +@@ -198,6 +198,7 @@ public final class CraftChatMessage { } public static Component[] fromString(String message, boolean keepNewlines, boolean plain) { diff --git a/patches/unapplied/server/0033-Prevent-velocity-freeze.patch b/patches/server/0033-Prevent-velocity-freeze.patch similarity index 80% rename from patches/unapplied/server/0033-Prevent-velocity-freeze.patch rename to patches/server/0033-Prevent-velocity-freeze.patch index 71456b4..3e2eea0 100644 --- a/patches/unapplied/server/0033-Prevent-velocity-freeze.patch +++ b/patches/server/0033-Prevent-velocity-freeze.patch @@ -1,38 +1,44 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Allink -Date: Sun, 27 Nov 2022 05:14:18 +0000 +From: Telesphoreo +Date: Sun, 10 Dec 2023 18:41:18 -0600 Subject: [PATCH] Prevent velocity freeze diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java -index 6c9a8f062f989db022154155e8a05b334a0510da..978fad27ad17de03d108ade2c2bfa464b7d83491 100644 +index c4ecc5faa4f61e7974e8c475762924a89615b377..1c14b87f84b678b36adede9d2aa9a18453ce4278 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java -@@ -1,5 +1,6 @@ +@@ -1,6 +1,8 @@ package net.minecraft.world.entity.projectile; -+import me.totalfreedom.scissors.MathUtility; // Scissors + import javax.annotation.Nullable; ++ ++import me.totalfreedom.scissors.MathUtility; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; -@@ -41,9 +42,13 @@ public abstract class AbstractHurtingProjectile extends Projectile { +@@ -47,12 +49,15 @@ public abstract class AbstractHurtingProjectile extends Projectile { + // CraftBukkit end double d6 = Math.sqrt(d3 * d3 + d4 * d4 + d5 * d5); - if (d6 != 0.0D) { +- if (d6 != 0.0D) { - this.xPower = d3 / d6 * 0.1D; - this.yPower = d4 / d6 * 0.1D; - this.zPower = d5 / d6 * 0.1D; ++ if (d6 != 0.0D) ++ { + // Scissors start - Prevent projectile velocity freeze + //this.xPower = d3 / d6 * 0.1D; + //this.yPower = d4 / d6 * 0.1D; + //this.zPower = d5 / d6 * 0.1D; -+ + setPower(d3 / d6 * .1d, d4 / d6 * .1d, d5 / d6 * .1d); -+ // Scissors end } - +- ++ // Scissors end } -@@ -141,6 +146,25 @@ public abstract class AbstractHurtingProjectile extends Projectile { + + public AbstractHurtingProjectile(EntityType type, LivingEntity owner, double directionX, double directionY, double directionZ, Level world) { +@@ -164,6 +169,25 @@ public abstract class AbstractHurtingProjectile extends Projectile { nbt.put("power", this.newDoubleList(new double[]{this.xPower, this.yPower, this.zPower})); } @@ -58,7 +64,7 @@ index 6c9a8f062f989db022154155e8a05b334a0510da..978fad27ad17de03d108ade2c2bfa464 @Override public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); -@@ -148,9 +172,13 @@ public abstract class AbstractHurtingProjectile extends Projectile { +@@ -171,9 +195,13 @@ public abstract class AbstractHurtingProjectile extends Projectile { ListTag nbttaglist = nbt.getList("power", 6); if (nbttaglist.size() == 3) { @@ -75,7 +81,7 @@ index 6c9a8f062f989db022154155e8a05b334a0510da..978fad27ad17de03d108ade2c2bfa464 } } -@@ -184,9 +212,13 @@ public abstract class AbstractHurtingProjectile extends Projectile { +@@ -207,9 +235,13 @@ public abstract class AbstractHurtingProjectile extends Projectile { Vec3 vec3d = entity.getLookAngle(); this.setDeltaMovement(vec3d); diff --git a/patches/unapplied/server/0034-Add-configuration-option-to-disable-chat-signatures.patch b/patches/server/0034-Add-configuration-option-to-disable-chat-signatures.patch similarity index 82% rename from patches/unapplied/server/0034-Add-configuration-option-to-disable-chat-signatures.patch rename to patches/server/0034-Add-configuration-option-to-disable-chat-signatures.patch index a02e9bb..3274052 100644 --- a/patches/unapplied/server/0034-Add-configuration-option-to-disable-chat-signatures.patch +++ b/patches/server/0034-Add-configuration-option-to-disable-chat-signatures.patch @@ -1,26 +1,26 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Allink -Date: Tue, 31 Jan 2023 23:16:52 +0000 +From: Telesphoreo +Date: Sun, 10 Dec 2023 18:48:55 -0600 Subject: [PATCH] Add configuration option to disable chat signatures diff --git a/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java b/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java -index 74cf1c043beef03cfd5adf481414a5ee78bef2a6..516c61cbb8299828b2f28d4564d08ae1829649b5 100644 +index 74cf1c043beef03cfd5adf481414a5ee78bef2a6..939f4a0639c847b94cfc9acf1409a7a3fc5ae58f 100644 --- a/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java +++ b/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java @@ -1,5 +1,6 @@ package net.minecraft.network.chat; -+import me.totalfreedom.scissors.ScissorsConfig; // Scissors ++import me.totalfreedom.scissors.ScissorsConfig; import net.minecraft.server.level.ServerPlayer; public interface OutgoingChatMessage { -@@ -44,10 +45,21 @@ public interface OutgoingChatMessage { +@@ -44,10 +45,22 @@ public interface OutgoingChatMessage { // Paper end PlayerChatMessage playerChatMessage = this.message.filter(filterMaskEnabled); playerChatMessage = unsigned != null ? playerChatMessage.withUnsignedContent(unsigned) : playerChatMessage; // Paper - if (!playerChatMessage.isFullyFiltered()) { -+ // Scissors start ++ // Sccissors start + if (!playerChatMessage.isFullyFiltered() && ScissorsConfig.chatSignaturesEnabled) { sender.connection.sendPlayerChatMessage(playerChatMessage, params); + return; @@ -35,22 +35,24 @@ index 74cf1c043beef03cfd5adf481414a5ee78bef2a6..516c61cbb8299828b2f28d4564d08ae1 + playerChatMessage.result() + ), params); + // Scissors end ++ } } } diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java -index c0a80824a0307ea673805015119cc834b268f0dc..9f28f86b1b56ea55ab39f6ac988c1f47c5312c6c 100644 +index 85a8a687b1568a56e3e646b37ef78b562c1b8a82..68e2edd39dcbcc9199aeaecff9b3280914ba9270 100644 --- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java +++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java -@@ -4,6 +4,7 @@ import com.mojang.logging.LogUtils; - import java.time.Instant; +@@ -5,6 +5,8 @@ import java.time.Instant; import java.util.UUID; + import java.util.function.BooleanSupplier; import javax.annotation.Nullable; -+import me.totalfreedom.scissors.ScissorsConfig; // Scissors ++ ++import me.totalfreedom.scissors.ScissorsConfig; import net.minecraft.util.SignatureUpdater; import net.minecraft.util.SignatureValidator; import net.minecraft.util.Signer; -@@ -41,7 +42,7 @@ public class SignedMessageChain { +@@ -46,7 +48,7 @@ public class SignedMessageChain { if (!playerChatMessage.verify(signatureValidator)) { throw new SignedMessageChain.DecodeException(Component.translatable("multiplayer.disconnect.unsigned_chat"), true, org.bukkit.event.player.PlayerKickEvent.Cause.UNSIGNED_CHAT); // Paper - kick event causes } else { @@ -60,26 +62,26 @@ index c0a80824a0307ea673805015119cc834b268f0dc..9f28f86b1b56ea55ab39f6ac988c1f47 } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 67b5447ffcf54c54b2087df456690a9bed98fbd3..94cc122aad0e48687ea9f25cd810f07dc893acc6 100644 +index acb4a7ad68a1d6c1ba43eafdd85ab5f824621507..e2f434d509be8b523de916d15eb625fe85a58749 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -1,5 +1,6 @@ package net.minecraft.server.network; -+import me.totalfreedom.scissors.ScissorsConfig; // Scissors ++import me.totalfreedom.scissors.ScissorsConfig; import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; // Scissors import com.google.common.collect.Lists; import com.google.common.primitives.Floats; -@@ -2220,7 +2221,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - } +@@ -2243,7 +2244,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl private void handleMessageDecodeFailure(SignedMessageChain.DecodeException exception) { + ServerGamePacketListenerImpl.LOGGER.warn("Failed to update secure chat state for {}: '{}'", this.player.getGameProfile().getName(), exception.getComponent().getString()); - if (exception.shouldDisconnect()) { + if (exception.shouldDisconnect() && ScissorsConfig.chatSignaturesEnabled) { // Scissors - Do not kick when chat signatures are disabled this.disconnect(exception.getComponent(), exception.kickCause); // Paper - kick event causes } else { this.player.sendSystemMessage(exception.getComponent().copy().withStyle(ChatFormatting.RED)); -@@ -2276,6 +2277,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2291,6 +2292,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl Optional optional = this.lastSeenMessages.applyUpdate(acknowledgment); if (optional.isEmpty()) { @@ -87,7 +89,7 @@ index 67b5447ffcf54c54b2087df456690a9bed98fbd3..94cc122aad0e48687ea9f25cd810f07d ServerGamePacketListenerImpl.LOGGER.warn("Failed to validate message acknowledgements from {}", this.player.getName().getString()); this.disconnect(ServerGamePacketListenerImpl.CHAT_VALIDATION_FAILED, org.bukkit.event.player.PlayerKickEvent.Cause.CHAT_VALIDATION_FAILED); // Paper - kick event causes } -@@ -2484,6 +2486,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2486,6 +2488,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl synchronized (this.lastSeenMessages) { if (!this.lastSeenMessages.applyOffset(packet.offset())) { @@ -95,7 +97,7 @@ index 67b5447ffcf54c54b2087df456690a9bed98fbd3..94cc122aad0e48687ea9f25cd810f07d ServerGamePacketListenerImpl.LOGGER.warn("Failed to validate message acknowledgements from {}", this.player.getName().getString()); this.disconnect(ServerGamePacketListenerImpl.CHAT_VALIDATION_FAILED, org.bukkit.event.player.PlayerKickEvent.Cause.CHAT_VALIDATION_FAILED); // Paper - kick event causes } -@@ -3462,6 +3465,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -3464,6 +3467,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleChatSessionUpdate(ServerboundChatSessionUpdatePacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); diff --git a/patches/unapplied/server/0035-Patch-large-selector-distance-crash.patch b/patches/server/0035-Patch-large-selector-distance-crash.patch similarity index 72% rename from patches/unapplied/server/0035-Patch-large-selector-distance-crash.patch rename to patches/server/0035-Patch-large-selector-distance-crash.patch index 6dd8079..c425dab 100644 --- a/patches/unapplied/server/0035-Patch-large-selector-distance-crash.patch +++ b/patches/server/0035-Patch-large-selector-distance-crash.patch @@ -1,49 +1,47 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Luna -Date: Sun, 2 Apr 2023 16:29:51 -0300 +From: Telesphoreo +Date: Sun, 10 Dec 2023 18:57:50 -0600 Subject: [PATCH] Patch large selector distance crash diff --git a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java -index 8897496323378080135127f53db004d576476c21..5f957d3241c1931f8166bc9e4960cef15679e932 100644 +index d87ffb5ed4550757016c2fabaa2845a6aaac74d7..7e8cf65ac53f595292d161da0735bf97081e832a 100644 --- a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java +++ b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java -@@ -129,9 +129,9 @@ public interface MinMaxBounds { +@@ -123,11 +123,11 @@ public interface MinMaxBounds { public static record Doubles(Optional min, Optional max, Optional minSq, Optional maxSq) implements MinMaxBounds { public static final MinMaxBounds.Doubles ANY = new MinMaxBounds.Doubles(Optional.empty(), Optional.empty()); - public static final Codec CODEC = MinMaxBounds.createCodec(Codec.DOUBLE, MinMaxBounds.Doubles::new); + public static final Codec CODEC = MinMaxBounds.createCodec(Codec.DOUBLE, MinMaxBounds.Doubles::new); // Scissors - compile fixes -- private Doubles(Optional optional, Optional optional2) { -+ public Doubles(Optional optional, Optional optional2) { // Scissors - private -> public - this(optional, optional2, squareOpt(optional), squareOpt(optional2)); - } +- private Doubles(Optional min, Optional max) { ++ public Doubles(Optional min, Optional max) { + this(min, max, squareOpt(min), squareOpt(max)); +- } ++ } // Scissors - private -> public -@@ -202,7 +202,7 @@ public interface MinMaxBounds { + private static MinMaxBounds.Doubles create(StringReader reader, Optional min, Optional max) throws CommandSyntaxException { + if (min.isPresent() && max.isPresent() && min.get() > max.get()) { +@@ -188,7 +188,7 @@ public interface MinMaxBounds { public static record Ints(Optional min, Optional max, Optional minSq, Optional maxSq) implements MinMaxBounds { public static final MinMaxBounds.Ints ANY = new MinMaxBounds.Ints(Optional.empty(), Optional.empty()); - public static final Codec CODEC = MinMaxBounds.createCodec(Codec.INT, MinMaxBounds.Ints::new); + public static final Codec CODEC = MinMaxBounds.createCodec(Codec.INT, MinMaxBounds.Ints::new); // Scissors - compile fixes - private Ints(Optional optional, Optional optional2) { - this(optional, optional2, optional.map((integer) -> { + private Ints(Optional min, Optional max) { + this(min, max, min.map((i) -> { diff --git a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java -index 73c15a0c56a103ba4e62f0a51af8d42566b07245..6cb3e86f2d661a55536b782729f768ef72163223 100644 +index 73c15a0c56a103ba4e62f0a51af8d42566b07245..f0a84efe86407ab3d7a9f064140c12df43265adc 100644 --- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java -@@ -5,11 +5,13 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; - import java.util.Collections; - import java.util.Iterator; - import java.util.List; -+import java.util.Optional; // Scissors - import java.util.UUID; - import java.util.function.BiConsumer; +@@ -10,6 +10,8 @@ import java.util.function.BiConsumer; import java.util.function.Function; import java.util.function.Predicate; import javax.annotation.Nullable; -+import me.totalfreedom.scissors.MathUtility; // Scissors ++ ++import me.totalfreedom.scissors.MathUtility; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.arguments.EntityArgument; @@ -54,8 +52,8 @@ index 73c15a0c56a103ba4e62f0a51af8d42566b07245..6cb3e86f2d661a55536b782729f768ef - this.range = distance; + // Scissors start - Patch large selector distance crash + this.range = new MinMaxBounds.Doubles( -+ distance.min().map(min -> Math.min(min, 1024)), -+ distance.max().map(max -> Math.min(max, 1024)) ++ distance.min().map(min -> Math.min(min, 1024)), ++ distance.max().map(max -> Math.min(max, 1024)) + ); this.position = positionOffset; - this.aabb = box; diff --git a/patches/unapplied/server/0036-Patch-invalid-entity-rotation-log-spam.patch b/patches/server/0036-Patch-invalid-entity-rotation-log-spam.patch similarity index 100% rename from patches/unapplied/server/0036-Patch-invalid-entity-rotation-log-spam.patch rename to patches/server/0036-Patch-invalid-entity-rotation-log-spam.patch diff --git a/patches/unapplied/server/0037-Limit-sculk-catalyst-cursor-positions.patch b/patches/server/0037-Limit-sculk-catalyst-cursor-positions.patch similarity index 100% rename from patches/unapplied/server/0037-Limit-sculk-catalyst-cursor-positions.patch rename to patches/server/0037-Limit-sculk-catalyst-cursor-positions.patch diff --git a/patches/unapplied/server/0038-Limit-map-decorations.patch b/patches/server/0038-Limit-map-decorations.patch similarity index 100% rename from patches/unapplied/server/0038-Limit-map-decorations.patch rename to patches/server/0038-Limit-map-decorations.patch diff --git a/patches/unapplied/server/0039-Prevent-player-banning-using-duplicate-UUIDs.patch b/patches/server/0039-Prevent-player-banning-using-duplicate-UUIDs.patch similarity index 100% rename from patches/unapplied/server/0039-Prevent-player-banning-using-duplicate-UUIDs.patch rename to patches/server/0039-Prevent-player-banning-using-duplicate-UUIDs.patch diff --git a/patches/unapplied/server/0040-Don-t-warn-on-duplicate-entity-UUIDs.patch b/patches/server/0040-Don-t-warn-on-duplicate-entity-UUIDs.patch similarity index 100% rename from patches/unapplied/server/0040-Don-t-warn-on-duplicate-entity-UUIDs.patch rename to patches/server/0040-Don-t-warn-on-duplicate-entity-UUIDs.patch diff --git a/patches/unapplied/server/0041-Fix-component-extra-empty-array-exploit.patch b/patches/unapplied/server/0041-Fix-component-extra-empty-array-exploit.patch deleted file mode 100644 index df0a0c3..0000000 --- a/patches/unapplied/server/0041-Fix-component-extra-empty-array-exploit.patch +++ /dev/null @@ -1,18 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Luna -Date: Mon, 29 May 2023 19:34:50 -0300 -Subject: [PATCH] Fix component extra empty array exploit - - -diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java -index 9cb6fa8e35c89f73e7c95dbe219a4bf6d00b60a9..fa6151a2361684426bdd3bf3b433fe4dbd0cf47b 100644 ---- a/src/main/java/net/minecraft/network/chat/Component.java -+++ b/src/main/java/net/minecraft/network/chat/Component.java -@@ -266,6 +266,7 @@ public interface Component extends Message, FormattedText, Iterable { - if (!jsonelement.isJsonObject()) { - if (jsonelement.isJsonArray()) { - JsonArray jsonarray = jsonelement.getAsJsonArray(); -+ if (jsonarray.size() <= 0) throw new JsonParseException("Unexpected empty array of components"); // Scissors - - ichatmutablecomponent = null; - Iterator iterator = jsonarray.iterator(); diff --git a/patches/unapplied/server/0042-Add-depth-limit-to-Component-deserializer.patch b/patches/unapplied/server/0042-Add-depth-limit-to-Component-deserializer.patch deleted file mode 100644 index c8d87de..0000000 --- a/patches/unapplied/server/0042-Add-depth-limit-to-Component-deserializer.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Luna -Date: Wed, 31 May 2023 18:14:00 -0300 -Subject: [PATCH] Add depth limit to Component deserializer - - -diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java -index fa6151a2361684426bdd3bf3b433fe4dbd0cf47b..4dd93e02f2b18e5c75be14ff8f052220ca69f427 100644 ---- a/src/main/java/net/minecraft/network/chat/Component.java -+++ b/src/main/java/net/minecraft/network/chat/Component.java -@@ -26,6 +26,7 @@ import java.util.List; - import java.util.Map.Entry; - import java.util.Optional; - import javax.annotation.Nullable; -+import me.totalfreedom.scissors.ScissorsConfig; // Scissors - import net.minecraft.ChatFormatting; // Scissors - import net.minecraft.Util; - import net.minecraft.network.chat.contents.BlockDataSource; -@@ -44,6 +45,7 @@ import net.minecraft.util.GsonHelper; - import net.minecraft.util.LowerCaseEnumTypeAdapterFactory; - // CraftBukkit start - import com.google.common.collect.Streams; -+import java.util.regex.Pattern; // Scissors - import java.util.stream.Stream; - // CraftBukkit end - -@@ -254,10 +256,16 @@ public interface Component extends Message, FormattedText, Iterable { - throw new IllegalStateException("Couldn't get field 'lineStart' for JsonReader", nosuchfieldexception); - } - }); -+ private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("%[0-9]+\\$s"); // Scissors - - public Serializer() {} - -- public MutableComponent deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { -+ // Scissors start -+ private MutableComponent deserialize(JsonElement jsonelement, JsonDeserializationContext jsondeserializationcontext, int depth) throws JsonParseException { -+ if (depth > ScissorsConfig.componentDepthLimit) { -+ throw new JsonParseException("Depth limit exceeded"); -+ } -+ // Scissors end - if (jsonelement.isJsonPrimitive()) { - return Component.literal(jsonelement.getAsString()); - } else { -@@ -273,7 +281,7 @@ public interface Component extends Message, FormattedText, Iterable { - - while (iterator.hasNext()) { - JsonElement jsonelement1 = (JsonElement) iterator.next(); -- MutableComponent ichatmutablecomponent1 = this.deserialize(jsonelement1, jsonelement1.getClass(), jsondeserializationcontext); -+ MutableComponent ichatmutablecomponent1 = this.deserialize(jsonelement1, jsondeserializationcontext, depth + 1); // Scissors - - if (ichatmutablecomponent == null) { - ichatmutablecomponent = ichatmutablecomponent1; -@@ -297,12 +305,17 @@ public interface Component extends Message, FormattedText, Iterable { - s = GsonHelper.getAsString(jsonobject, "translate"); - String s1 = GsonHelper.getAsString(jsonobject, "fallback", (String) null); - -+ // Scissors start - Penalize depth for placeholders in translate & fallback -+ long translate_placeholders = PLACEHOLDER_PATTERN.matcher(s).results().count(); -+ long fallback_placeholders = s1 != null ? PLACEHOLDER_PATTERN.matcher(s1).results().count() : 0; -+ int penalty = (int)Math.max(translate_placeholders, fallback_placeholders) * 12; -+ // Scissors end - if (jsonobject.has("with")) { - JsonArray jsonarray1 = GsonHelper.getAsJsonArray(jsonobject, "with"); - Object[] aobject = new Object[jsonarray1.size()]; - - for (int i = 0; i < aobject.length; ++i) { -- aobject[i] = Serializer.unwrapTextArgument(this.deserialize(jsonarray1.get(i), type, jsondeserializationcontext)); -+ aobject[i] = Serializer.unwrapTextArgument(this.deserialize(jsonarray1.get(i), jsondeserializationcontext, depth + 1 + penalty)); // Scissors - } - - ichatmutablecomponent = Component.translatableWithFallback(s, s1, aobject); -@@ -318,7 +331,7 @@ public interface Component extends Message, FormattedText, Iterable { - - ichatmutablecomponent = Component.score(GsonHelper.getAsString(jsonobject1, "name"), GsonHelper.getAsString(jsonobject1, "objective")); - } else if (jsonobject.has("selector")) { -- Optional optional = this.parseSeparator(type, jsondeserializationcontext, jsonobject); -+ Optional optional = this.parseSeparator(jsondeserializationcontext, jsonobject, depth + 1); // Scissors - - ichatmutablecomponent = Component.selector(GsonHelper.getAsString(jsonobject, "selector"), optional); - } else if (jsonobject.has("keybind")) { -@@ -329,7 +342,7 @@ public interface Component extends Message, FormattedText, Iterable { - } - - s = GsonHelper.getAsString(jsonobject, "nbt"); -- Optional optional1 = this.parseSeparator(type, jsondeserializationcontext, jsonobject); -+ Optional optional1 = this.parseSeparator(jsondeserializationcontext, jsonobject, depth + 1); // Scissors - boolean flag = GsonHelper.getAsBoolean(jsonobject, "interpret", false); - Object object; - -@@ -356,7 +369,7 @@ public interface Component extends Message, FormattedText, Iterable { - } - - for (int j = 0; j < jsonarray2.size(); ++j) { -- ichatmutablecomponent.append((Component) this.deserialize(jsonarray2.get(j), type, jsondeserializationcontext)); -+ ichatmutablecomponent.append((Component) this.deserialize(jsonarray2.get(j), jsondeserializationcontext, depth + 1)); // Scissors - } - } - -@@ -366,6 +379,12 @@ public interface Component extends Message, FormattedText, Iterable { - } - } - -+ // Scissors start -+ public MutableComponent deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { -+ return this.deserialize(jsonelement, jsondeserializationcontext, 1); -+ } -+ // Scissors end -+ - private static Object unwrapTextArgument(Object text) { - if (text instanceof Component) { - Component ichatbasecomponent = (Component) text; -@@ -384,8 +403,10 @@ public interface Component extends Message, FormattedText, Iterable { - return text; - } - -- private Optional parseSeparator(Type type, JsonDeserializationContext context, JsonObject json) { -- return json.has("separator") ? Optional.of(this.deserialize(json.get("separator"), type, context)) : Optional.empty(); -+ // Scissors start -+ private Optional parseSeparator(JsonDeserializationContext context, JsonObject json, int depth) { -+ return json.has("separator") ? Optional.of(this.deserialize(json.get("separator"), context, depth + 1)) : Optional.empty(); -+ // Scissors end - } - - private void serializeStyle(Style style, JsonObject json, JsonSerializationContext context) {