mirror of
https://github.com/AtlasMediaGroup/Scissors.git
synced 2024-11-01 12:37:10 +00:00
178 lines
8.0 KiB
Diff
178 lines
8.0 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Telesphoreo <me@telesphoreo.me>
|
||
|
Date: Sun, 16 Jun 2024 15:38:49 -0500
|
||
|
Subject: [PATCH] Add more fallback code for chunk bans
|
||
|
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
|
||
|
index 5d3e739d28d394ed59fe0003245cc55ac62e6087..7189525e573be6d5023c6b34fded8bd1259293f9 100644
|
||
|
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
|
||
|
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
|
||
|
@@ -1,11 +1,17 @@
|
||
|
package net.minecraft.network.protocol.game;
|
||
|
|
||
|
import java.util.function.BiFunction;
|
||
|
+import java.util.stream.Collectors;
|
||
|
+
|
||
|
+import me.totalfreedom.scissors.NbtUtility;
|
||
|
+import net.minecraft.ChatFormatting;
|
||
|
import net.minecraft.core.BlockPos;
|
||
|
import net.minecraft.core.RegistryAccess;
|
||
|
import net.minecraft.core.registries.Registries;
|
||
|
import net.minecraft.nbt.CompoundTag;
|
||
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||
|
+import net.minecraft.network.chat.Component;
|
||
|
+import net.minecraft.network.chat.SignedMessageBody;
|
||
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||
|
import net.minecraft.network.codec.StreamCodec;
|
||
|
import net.minecraft.network.protocol.Packet;
|
||
|
@@ -36,6 +42,23 @@ public class ClientboundBlockEntityDataPacket implements Packet<ClientGamePacket
|
||
|
return create(blockEntity, BlockEntity::getUpdateTag);
|
||
|
}
|
||
|
|
||
|
+ // Scissors start - Handle large packets disconnecting client
|
||
|
+ @Override
|
||
|
+ public boolean hasLargePacketFallback() {
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public boolean packetTooLarge(net.minecraft.network.Connection manager) {
|
||
|
+ if (NbtUtility.isTooLarge(this.tag))
|
||
|
+ {
|
||
|
+ this.tag.getAllKeys().forEach(tag::remove);
|
||
|
+ }
|
||
|
+ manager.send(new ClientboundBlockEntityDataPacket(pos, this.type, this.tag));
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+ // Scissors end - Handle large packets disconnecting client
|
||
|
+
|
||
|
public ClientboundBlockEntityDataPacket(BlockPos pos, BlockEntityType<?> blockEntityType, CompoundTag nbt) {
|
||
|
this.pos = pos;
|
||
|
this.type = blockEntityType;
|
||
|
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundContainerSetSlotPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundContainerSetSlotPacket.java
|
||
|
index 63f6a2437da9363786b55af0a7cbc5373232d35b..38e8e3e58821da896851a42d6088bc70857ae7e1 100644
|
||
|
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundContainerSetSlotPacket.java
|
||
|
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundContainerSetSlotPacket.java
|
||
|
@@ -43,6 +43,19 @@ public class ClientboundContainerSetSlotPacket implements Packet<ClientGamePacke
|
||
|
return GamePacketTypes.CLIENTBOUND_CONTAINER_SET_SLOT;
|
||
|
}
|
||
|
|
||
|
+ // Scissors start - Handle large packets disconnecting client
|
||
|
+ @Override
|
||
|
+ public boolean hasLargePacketFallback() {
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public boolean packetTooLarge(net.minecraft.network.Connection manager) {
|
||
|
+ manager.send(new ClientboundContainerSetSlotPacket(this.containerId, this.stateId, this.slot, ItemStack.EMPTY));
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+ // Scissors end - Handle large packets disconnecting client
|
||
|
+
|
||
|
@Override
|
||
|
public void handle(ClientGamePacketListener listener) {
|
||
|
listener.handleContainerSetSlot(this);
|
||
|
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java
|
||
|
index 466dc69d8c06766733a6164fa5c911e902493a23..b89bf65249f3741d32a49de230ffaef2daeb8505 100644
|
||
|
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java
|
||
|
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundMapItemDataPacket.java
|
||
|
@@ -36,6 +36,19 @@ public record ClientboundMapItemDataPacket(
|
||
|
this(mapId, scale, locked, decorations != null ? Optional.of(List.copyOf(decorations)) : Optional.empty(), Optional.ofNullable(updateData));
|
||
|
}
|
||
|
|
||
|
+ // Scissors start - Handle large packets disconnecting client
|
||
|
+ @Override
|
||
|
+ public boolean hasLargePacketFallback() {
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public boolean packetTooLarge(net.minecraft.network.Connection manager) {
|
||
|
+ manager.send(new ClientboundMapItemDataPacket(mapId, scale, locked, Optional.empty(), Optional.empty()));
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+ // Scissors end - Handle large packets disconnecting client
|
||
|
+
|
||
|
@Override
|
||
|
public PacketType<ClientboundMapItemDataPacket> type() {
|
||
|
return GamePacketTypes.CLIENTBOUND_MAP_ITEM_DATA;
|
||
|
@@ -46,6 +59,8 @@ public record ClientboundMapItemDataPacket(
|
||
|
listener.handleMapItemData(this);
|
||
|
}
|
||
|
|
||
|
+
|
||
|
+
|
||
|
public void applyToMap(MapItemSavedData mapState) {
|
||
|
this.decorations.ifPresent(mapState::addClientSideDecorations);
|
||
|
this.colorPatch.ifPresent(updateData -> updateData.applyToMap(mapState));
|
||
|
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerChatPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerChatPacket.java
|
||
|
index 37ab438ab37b9235666ae69376509bdde7722d87..cd1d0efec72c83e0f2bbc7ffcb5d2d3b8385f4fe 100644
|
||
|
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerChatPacket.java
|
||
|
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerChatPacket.java
|
||
|
@@ -1,7 +1,10 @@
|
||
|
package net.minecraft.network.protocol.game;
|
||
|
|
||
|
+import java.util.Optional;
|
||
|
import java.util.UUID;
|
||
|
import javax.annotation.Nullable;
|
||
|
+
|
||
|
+import net.minecraft.ChatFormatting;
|
||
|
import net.minecraft.network.FriendlyByteBuf;
|
||
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||
|
import net.minecraft.network.chat.ChatType;
|
||
|
@@ -39,6 +42,19 @@ public record ClientboundPlayerChatPacket(
|
||
|
);
|
||
|
}
|
||
|
|
||
|
+ // Scissors start - Handle large packets disconnecting client
|
||
|
+ @Override
|
||
|
+ public boolean hasLargePacketFallback() {
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public boolean packetTooLarge(net.minecraft.network.Connection manager) {
|
||
|
+ manager.send(new ClientboundPlayerChatPacket(sender, index, signature, body, Component.empty().append("** Message too large **").withStyle(ChatFormatting.RED), filterMask, chatType));
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+ // Scissors end - Handle large packets disconnecting client
|
||
|
+
|
||
|
private void write(RegistryFriendlyByteBuf buf) {
|
||
|
buf.writeUUID(this.sender);
|
||
|
buf.writeVarInt(this.index);
|
||
|
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
|
||
|
index 3945ca04ede578121b370592482ac917f2d4cf96..f05678ab6fc598da0416c6e0c68bc30a1beef139 100644
|
||
|
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
|
||
|
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetEquipmentPacket.java
|
||
|
@@ -2,6 +2,8 @@ package net.minecraft.network.protocol.game;
|
||
|
|
||
|
import com.google.common.collect.Lists;
|
||
|
import com.mojang.datafixers.util.Pair;
|
||
|
+
|
||
|
+import java.util.Collections;
|
||
|
import java.util.List;
|
||
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||
|
import net.minecraft.network.codec.StreamCodec;
|
||
|
@@ -44,6 +46,19 @@ public class ClientboundSetEquipmentPacket implements Packet<ClientGamePacketLis
|
||
|
} while ((i & -128) != 0);
|
||
|
}
|
||
|
|
||
|
+ // Scissors start - Handle large packets disconnecting client
|
||
|
+ @Override
|
||
|
+ public boolean hasLargePacketFallback() {
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+
|
||
|
+ @Override
|
||
|
+ public boolean packetTooLarge(net.minecraft.network.Connection manager) {
|
||
|
+ manager.send(new ClientboundSetEquipmentPacket(entity, Collections.emptyList()));
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+ // Scissors end - Handle large packets disconnecting client
|
||
|
+
|
||
|
private void write(RegistryFriendlyByteBuf buf) {
|
||
|
buf.writeVarInt(this.entity);
|
||
|
int i = this.slots.size();
|