mirror of
https://github.com/AtlasMediaGroup/Scissors.git
synced 2024-06-02 01:31:46 +00:00
9e244f52c9
The getAsString method which was used before uses StringTagVisitor, which takes way too long.
64 lines
2.2 KiB
Diff
64 lines
2.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Business Goose <arclicious@vivaldi.net>
|
|
Date: Sun, 1 May 2022 01:19:36 +0100
|
|
Subject: [PATCH] Make the maximum tag size a constant & add a method for
|
|
getting tag size
|
|
|
|
|
|
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java b/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java
|
|
index 058203440fd071ce5edbe18391ea60f0a5fbee3a..978cb98c81195640fb3704d2077148f2be0dca36 100644
|
|
--- a/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java
|
|
+++ b/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java
|
|
@@ -1,17 +1,49 @@
|
|
package com.github.atlasmediagroup.scissors;
|
|
|
|
-import net.minecraft.nbt.CompoundTag;
|
|
+import com.google.common.base.Strings;
|
|
+import com.google.common.collect.Lists;
|
|
+import net.minecraft.nbt.*;
|
|
|
|
import javax.annotation.Nullable;
|
|
import java.nio.charset.StandardCharsets;
|
|
+import java.util.Collections;
|
|
+import java.util.List;
|
|
|
|
public class NbtUtility
|
|
{
|
|
+ public static final long MAXIMUM_SIZE = (256 * 1024);
|
|
+
|
|
+ public static long getTagSize(@Nullable Tag tag, int depth) {
|
|
+ if(depth > 512) return 0;
|
|
+ if(tag == null) return 0;
|
|
+
|
|
+ long size = 0;
|
|
+
|
|
+ if(tag.getType() == CompoundTag.TYPE) {
|
|
+ CompoundTag compoundTag = (CompoundTag) tag;
|
|
+ for(String key : compoundTag.getAllKeys()) {
|
|
+ size += getTagSize(compoundTag.get(key), depth + 1);
|
|
+ }
|
|
+ } else if(tag.getType() == ListTag.TYPE) {
|
|
+ ListTag listTag = (ListTag) tag;
|
|
+ for (Tag tag1 : listTag) {
|
|
+ size += getTagSize(tag1, depth + 1);
|
|
+ }
|
|
+ } else {
|
|
+ size += tag.getAsString().getBytes(StandardCharsets.UTF_8).length;
|
|
+ }
|
|
+
|
|
+ return size;
|
|
+ }
|
|
+
|
|
+ public static long getTagSize(@Nullable CompoundTag tag) {
|
|
+ return getTagSize(tag, 0);
|
|
+ }
|
|
|
|
public static boolean isTooLarge(@Nullable CompoundTag tag)
|
|
{
|
|
if (tag == null) return false;
|
|
- return tag.toString().getBytes(StandardCharsets.UTF_8).length > (256 * 1024);
|
|
+ return getTagSize(tag) > MAXIMUM_SIZE;
|
|
}
|
|
|
|
public static class Item
|