This commit removed the book limiter in SAH, the source of dupes on an old MC version, this is now patched by paper itself.
This commit is contained in:
Cola committed 2021-07-19 00:26:01 +01:00
1 parent a425393d8a
commit e4967f711d
2 files changed
+2 -78

No files matched your search

+2 -2
View File
@@ -20,7 +20,7 @@
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper</artifactId>
<version>1.17-R0.1-SNAPSHOT</version>
<version>1.17.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -50,7 +50,7 @@
<dependency>
<groupId>com.comphenix.protocol</groupId>
<artifactId>ProtocolLib</artifactId>
<version>4.7.0-SNAPSHOT</version>
<version>4.7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -1,24 +1,10 @@
package com.programmerdan.minecraft.simpleadminhacks.hacks;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
import com.destroystokyo.paper.PaperConfig;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.programmerdan.minecraft.simpleadminhacks.SimpleAdminHacks;
import com.programmerdan.minecraft.simpleadminhacks.configs.GameFixesConfig;
import com.programmerdan.minecraft.simpleadminhacks.framework.SimpleHack;
import com.programmerdan.minecraft.simpleadminhacks.framework.utilities.PacketManager;
import java.nio.charset.StandardCharsets;
import java.util.logging.Level;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.network.protocol.game.PacketPlayInBEdit;
import net.minecraft.world.item.ItemStack;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@@ -59,7 +45,6 @@ import org.bukkit.inventory.InventoryHolder;
public class GameFixes extends SimpleHack<GameFixesConfig> implements Listener {
public static final String NAME = "GameFixes";
public static final String NULL_STRING = "\u0000";
private final PacketManager protocol = new PacketManager();
@@ -67,67 +52,6 @@ public class GameFixes extends SimpleHack<GameFixesConfig> implements Listener {
super(plugin, config);
}
@Override
public void onEnable() {
super.onEnable();
this.plugin.registerListener(this);
if (this.config.hardLimitBookPageSize()) {
this.protocol.addAdapter(new PacketAdapter(this.plugin, PacketType.Play.Client.B_EDIT) {
@Override
public void onPacketReceiving(final PacketEvent event) {
final PacketContainer packet = event.getPacket();
final Player player = event.getPlayer();
final String errorMessage = "DUPE ALERT! " + player.getName() + " sent an over sized book packet!";
final int maxBookPageSize = PaperConfig.maxBookPageSize;
final int maxBookPageLength = 256 * 4;
// NMS ItemStack, not Bukkit
final ItemStack item = ((PacketPlayInBEdit) packet.getHandle()).b();
final String[] pages = getStringArray("pages", item.getTag());
if (pages.length > maxBookPageSize) {
plugin().warning(errorMessage);
plugin().warning("- Too many pages! [" + pages.length + "/" + maxBookPageSize + "]");
event.setCancelled(true);
return;
}
for (final String page : pages) {
final byte[] raw = page.getBytes(StandardCharsets.UTF_8);
if (raw.length > maxBookPageLength) {
plugin().warning(errorMessage);
plugin().warning("- Page too long! [" + raw.length + "/" + maxBookPageLength + "]");
event.setCancelled(true);
return;
}
}
}
});
}
}
public String[] getStringArray(String key, NBTTagCompound tag) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(key));
if (tag == null) {
return new String[0];
}
NBTTagList list = tag.getList(key, 8);
String[] result = new String[list.size()];
for (int i = 0; i < result.length; i++) {
NBTBase base = list.get(i);
if (base.getTypeId() != 8) {
result[i] = "";
}
else if (!(base instanceof NBTTagString)) {
result[i] = "";
}
else {
result[i] = base.asString();
if (result[i].equals(NULL_STRING)) {
result[i] = null;
}
}
}
return result;
}
@Override
public void onDisable() {
this.protocol.removeAllAdapters();