mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-17 06:48:23 +01:00
and here's some more patches
This commit is contained in:
parent
7ff10ba09a
commit
488ad68f0f
14 changed files with 68 additions and 90 deletions
|
@ -0,0 +1,64 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Aikar <aikar@aikar.co>
|
||||||
|
Date: Wed, 6 May 2020 05:00:57 -0400
|
||||||
|
Subject: [PATCH] Handle Oversized Tile Entities in chunks
|
||||||
|
|
||||||
|
Splits out Extra Packets if too many TE's are encountered to prevent
|
||||||
|
creating too large of a packet to sed.
|
||||||
|
|
||||||
|
Co authored by Spottedleaf
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
|
||||||
|
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
|
||||||
|
@@ -0,0 +0,0 @@ public class ClientboundLevelChunkPacketData {
|
||||||
|
private final CompoundTag heightmaps;
|
||||||
|
private final byte[] buffer;
|
||||||
|
private final List<ClientboundLevelChunkPacketData.BlockEntityInfo> blockEntitiesData;
|
||||||
|
+ // Paper start
|
||||||
|
+ private final java.util.List<net.minecraft.network.protocol.Packet> extraPackets = new java.util.ArrayList<>();
|
||||||
|
+ private static final int TE_LIMIT = Integer.getInteger("Paper.excessiveTELimit", 750);
|
||||||
|
+
|
||||||
|
+ public List<net.minecraft.network.protocol.Packet> getExtraPackets() {
|
||||||
|
+ return this.extraPackets;
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
|
||||||
|
public ClientboundLevelChunkPacketData(LevelChunk chunk) {
|
||||||
|
this.heightmaps = new CompoundTag();
|
||||||
|
@@ -0,0 +0,0 @@ public class ClientboundLevelChunkPacketData {
|
||||||
|
this.buffer = new byte[calculateChunkSize(chunk)];
|
||||||
|
extractChunkData(new FriendlyByteBuf(this.getWriteBuffer()), chunk);
|
||||||
|
this.blockEntitiesData = Lists.newArrayList();
|
||||||
|
+ int totalTileEntities = 0; // Paper
|
||||||
|
|
||||||
|
for(Entry<BlockPos, BlockEntity> entry2 : chunk.getBlockEntities().entrySet()) {
|
||||||
|
+ // Paper start
|
||||||
|
+ if (++totalTileEntities > TE_LIMIT) {
|
||||||
|
+ var packet = entry2.getValue().getUpdatePacket();
|
||||||
|
+ if (packet != null) {
|
||||||
|
+ this.extraPackets.add(packet);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
this.blockEntitiesData.add(ClientboundLevelChunkPacketData.BlockEntityInfo.create(entry2.getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkWithLightPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkWithLightPacket.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkWithLightPacket.java
|
||||||
|
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkWithLightPacket.java
|
||||||
|
@@ -0,0 +0,0 @@ public class ClientboundLevelChunkWithLightPacket implements Packet<ClientGamePa
|
||||||
|
public ClientboundLightUpdatePacketData getLightData() {
|
||||||
|
return this.lightData;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ // Paper start - handle over-sized TE packets
|
||||||
|
+ @Override
|
||||||
|
+ public java.util.List<Packet> getExtraPackets() {
|
||||||
|
+ return this.chunkData.getExtraPackets();
|
||||||
|
+ }
|
||||||
|
+ // Paper end
|
||||||
|
}
|
|
@ -143,7 +143,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
|
|
||||||
private void sendPacket(Packet<?> packet, @Nullable GenericFutureListener<? extends Future<? super Void>> callback) {
|
private void sendPacket(Packet<?> packet, @Nullable GenericFutureListener<? extends Future<? super Void>> callback) {
|
||||||
@@ -0,0 +0,0 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
@@ -0,0 +0,0 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
||||||
this.setProtocol(enumprotocol);
|
this.setProtocol(packetState);
|
||||||
}
|
}
|
||||||
|
|
||||||
+ // Paper start
|
+ // Paper start
|
|
@ -9,11 +9,10 @@ diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundChatPa
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundChatPacket.java
|
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundChatPacket.java
|
||||||
+++ b/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 @@ import net.minecraft.network.chat.Component;
|
@@ -0,0 +0,0 @@ import net.minecraft.network.protocol.Packet;
|
||||||
import net.minecraft.network.protocol.Packet;
|
|
||||||
|
|
||||||
public class ClientboundChatPacket implements Packet<ClientGamePacketListener> {
|
public class ClientboundChatPacket implements Packet<ClientGamePacketListener> {
|
||||||
-
|
|
||||||
+ private static final int MAX_LENGTH = Short.MAX_VALUE * 8 + 8; // Paper
|
+ private static final int MAX_LENGTH = Short.MAX_VALUE * 8 + 8; // Paper
|
||||||
private final Component message;
|
private final Component message;
|
||||||
public net.kyori.adventure.text.Component adventure$message; // Paper
|
public net.kyori.adventure.text.Component adventure$message; // Paper
|
|
@ -1,50 +0,0 @@
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aikar <aikar@aikar.co>
|
|
||||||
Date: Wed, 6 May 2020 05:00:57 -0400
|
|
||||||
Subject: [PATCH] Handle Oversized Tile Entities in chunks
|
|
||||||
|
|
||||||
Splits out Extra Packets if too many TE's are encountered to prevent
|
|
||||||
creating too large of a packet to sed.
|
|
||||||
|
|
||||||
Co authored by Spottedleaf
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacket.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacket.java
|
|
||||||
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacket.java
|
|
||||||
@@ -0,0 +0,0 @@ public class ClientboundLevelChunkPacket implements Packet<ClientGamePacketListe
|
|
||||||
private final int[] biomes;
|
|
||||||
private final byte[] buffer;
|
|
||||||
private final List<CompoundTag> blockEntitiesTags;
|
|
||||||
+ // Paper start
|
|
||||||
+ private final java.util.List<Packet> extraPackets = new java.util.ArrayList<>();
|
|
||||||
+ private static final int TE_LIMIT = Integer.getInteger("Paper.excessiveTELimit", 750);
|
|
||||||
+
|
|
||||||
+ @Override
|
|
||||||
+ public java.util.List<Packet> getExtraPackets() {
|
|
||||||
+ return extraPackets;
|
|
||||||
+ }
|
|
||||||
+ // Paper end
|
|
||||||
|
|
||||||
public ClientboundLevelChunkPacket(LevelChunk chunk) {
|
|
||||||
ChunkPos chunkPos = chunk.getPos();
|
|
||||||
@@ -0,0 +0,0 @@ public class ClientboundLevelChunkPacket implements Packet<ClientGamePacketListe
|
|
||||||
this.buffer = new byte[this.calculateChunkSize(chunk)];
|
|
||||||
this.availableSections = this.extractChunkData(new FriendlyByteBuf(this.getWriteBuffer()), chunk);
|
|
||||||
this.blockEntitiesTags = Lists.newArrayList();
|
|
||||||
+ int totalTileEntities = 0; // Paper
|
|
||||||
|
|
||||||
for(Entry<BlockPos, BlockEntity> entry2 : chunk.getBlockEntities().entrySet()) {
|
|
||||||
BlockEntity blockEntity = entry2.getValue();
|
|
||||||
+ // Paper start - improve oversized chunk data packet handling
|
|
||||||
+ if (++totalTileEntities > TE_LIMIT) {
|
|
||||||
+ ClientboundBlockEntityDataPacket updatePacket = blockEntity.getUpdatePacket();
|
|
||||||
+ if (updatePacket != null) {
|
|
||||||
+ this.extraPackets.add(updatePacket);
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ // Paper end
|
|
||||||
CompoundTag compoundTag = blockEntity.getUpdateTag();
|
|
||||||
if (blockEntity instanceof net.minecraft.world.level.block.entity.SkullBlockEntity) { net.minecraft.world.level.block.entity.SkullBlockEntity.sanitizeTileEntityUUID(compoundTag); } // Paper
|
|
||||||
this.blockEntitiesTags.add(compoundTag);
|
|
|
@ -1,36 +0,0 @@
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aikar <aikar@aikar.co>
|
|
||||||
Date: Sat, 2 Mar 2019 16:12:35 -0500
|
|
||||||
Subject: [PATCH] MC-145260: Fix Whitelist On/Off inconsistency
|
|
||||||
|
|
||||||
mojang stored whitelist state in 2 places (Whitelist Object, PlayerList)
|
|
||||||
|
|
||||||
some things checked PlayerList, some checked object. This moves
|
|
||||||
everything to the Whitelist object.
|
|
||||||
|
|
||||||
https://github.com/PaperMC/Paper/issues/1880
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
||||||
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.network.protocol.game.ClientboundUpdateMobEffectPacket;
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundUpdateRecipesPacket;
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundUpdateTagsPacket;
|
|
||||||
import net.minecraft.resources.ResourceKey;
|
|
||||||
+import net.minecraft.server.MCUtil;
|
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import net.minecraft.server.PlayerAdvancements;
|
|
||||||
import net.minecraft.server.ServerScoreboard;
|
|
||||||
@@ -0,0 +0,0 @@ public abstract class PlayerList {
|
|
||||||
}
|
|
||||||
public boolean isWhitelisted(GameProfile gameprofile, org.bukkit.event.player.PlayerLoginEvent loginEvent) {
|
|
||||||
boolean isOp = this.ops.contains(gameprofile);
|
|
||||||
- boolean isWhitelisted = !this.doWhiteList || isOp || this.whitelist.contains(gameprofile);
|
|
||||||
+ boolean isWhitelisted = !this.isUsingWhitelist() || isOp || this.whitelist.contains(gameprofile); // Paper - use isUsingWhitelist()
|
|
||||||
final com.destroystokyo.paper.event.profile.ProfileWhitelistVerifyEvent event;
|
|
||||||
- event = new com.destroystokyo.paper.event.profile.ProfileWhitelistVerifyEvent(net.minecraft.server.MCUtil.toBukkit(gameprofile), this.doWhiteList, isWhitelisted, isOp, org.spigotmc.SpigotConfig.whitelistMessage);
|
|
||||||
+ event = new com.destroystokyo.paper.event.profile.ProfileWhitelistVerifyEvent(net.minecraft.server.MCUtil.toBukkit(gameprofile), this.isUsingWhitelist(), isWhitelisted, isOp, org.spigotmc.SpigotConfig.whitelistMessage); // Paper - use isUsingWhitelist()
|
|
||||||
event.callEvent();
|
|
||||||
if (!event.isWhitelisted()) {
|
|
||||||
if (loginEvent != null) {
|
|
1
todo.txt
1
todo.txt
|
@ -4,3 +4,4 @@ Check if PlayerNaturallySpawnedEvent is called correctly
|
||||||
Make sure fluids aren't completly fucked, there may be more sync loads to nuke there as well
|
Make sure fluids aren't completly fucked, there may be more sync loads to nuke there as well
|
||||||
Improve Server Thread Pool and Thread Priorities: mojang added a max thread count property
|
Improve Server Thread Pool and Thread Priorities: mojang added a max thread count property
|
||||||
Use Vanilla Minecart Speeds: is this needed?
|
Use Vanilla Minecart Speeds: is this needed?
|
||||||
|
Handle Oversized Tile Entities: make sure impl is correct
|
||||||
|
|
Loading…
Reference in a new issue