Fixes PSPE by add option to configure excessive signs

This commit is contained in:
Sotr
2019-04-07 01:19:17 +08:00
parent 4de56af786
commit 90db58cbb3
4 changed files with 15 additions and 2 deletions

View File

@@ -195,4 +195,9 @@ public class AkarinGlobalConfig {
private static void disallowBeforeLogin() {
disallowBeforeLogin = getBoolean("alternative.disallow-before-login-event", disallowBeforeLogin);
}
public static boolean allowExcessiveSigns = false;
private static void allowExcessiveSigns() {
allowExcessiveSigns = getBoolean("alternative.allow-excessive-signs", allowExcessiveSigns);
}
}

View File

@@ -5,6 +5,7 @@ import com.google.common.collect.Queues;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import io.akarin.server.core.AkarinGlobalConfig;
import io.akarin.server.core.PacketType;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
@@ -291,12 +292,14 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
}
// Paper start
if (AkarinGlobalConfig.allowExcessiveSigns) { // Akarin
java.util.List<Packet> extraPackets = packet.getExtraPackets();
if (extraPackets != null && !extraPackets.isEmpty()) {
for (Packet extraPacket : extraPackets) {
this.dispatchPacket(extraPacket, genericfuturelistener);
}
}
} // Akarin
// Paper end
}

View File

@@ -2,9 +2,12 @@ package net.minecraft.server;
import com.destroystokyo.paper.antixray.ChunkPacketInfo; // Paper - Anti-Xray
import com.google.common.collect.Lists;
import io.akarin.server.core.AkarinGlobalConfig;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.io.IOException;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
@@ -24,7 +27,7 @@ public class PacketPlayOutMapChunk implements Packet<PacketListenerPlayOut> {
}
// Paper start
private final java.util.List<Packet> extraPackets = new java.util.ArrayList<>();
private final java.util.List<Packet> extraPackets = AkarinGlobalConfig.allowExcessiveSigns ? new java.util.ArrayList<>() : Collections.emptyList(); // Akarin
private static final int SKIP_EXCESSIVE_SIGNS_LIMIT = Integer.getInteger("Paper.excessiveSignsLimit", 500);
public java.util.List<Packet> getExtraPackets() {
return extraPackets;
@@ -58,12 +61,14 @@ public class PacketPlayOutMapChunk implements Packet<PacketListenerPlayOut> {
if (this.f() || (i & 1 << j) != 0) {
// Paper start - send signs separately
if (AkarinGlobalConfig.allowExcessiveSigns) { // Akarin
if (tileentity instanceof TileEntitySign) {
if (SKIP_EXCESSIVE_SIGNS_LIMIT < 0 || ++totalSigns < SKIP_EXCESSIVE_SIGNS_LIMIT) {
extraPackets.add(tileentity.getUpdatePacket());
}
continue;
}
} // Akarin
// Paper end
NBTTagCompound nbttagcompound = tileentity.aa_();