mirror of
https://github.com/AtlasMediaGroup/Scissors.git
synced 2024-10-31 20:27:10 +00:00
Add depth limit to updateCustomBlockEntityTag
This commit is contained in:
parent
e7b13dc764
commit
4afff7942e
@ -0,0 +1,75 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Focusvity <nathan.curran10012@gmail.com>
|
||||||
|
Date: Sun, 11 Feb 2024 19:44:20 +1100
|
||||||
|
Subject: [PATCH] Add depth limit to updateCustomBlockEntityTag
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
|
||||||
|
index 8d2c0accadaf0c5d28e7db6e62a05f6c619cf02f..a59b3e5dde7325e43b8041bccc51d370fdc17c55 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/item/BlockItem.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java
|
||||||
|
@@ -4,12 +4,19 @@ import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
+// Scissors start
|
||||||
|
+import java.util.regex.Matcher;
|
||||||
|
+import java.util.regex.Pattern;
|
||||||
|
+// Scissors end
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
+
|
||||||
|
+import me.totalfreedom.scissors.ScissorsConfig;
|
||||||
|
import net.minecraft.advancements.CriteriaTriggers;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
import net.minecraft.nbt.ListTag;
|
||||||
|
+import net.minecraft.nbt.Tag; // Scissors
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
@@ -98,7 +105,7 @@ public class BlockItem extends Item {
|
||||||
|
iblockdata1 = this.updateBlockStateFromTag(blockposition, world, itemstack, iblockdata1);
|
||||||
|
// Paper start - Reset placed block on exception
|
||||||
|
try {
|
||||||
|
- this.updateCustomBlockEntityTag(blockposition, world, entityhuman, itemstack, iblockdata1);
|
||||||
|
+ this.updateCustomBlockEntityTag(blockposition, world, entityhuman, itemstack, iblockdata1);
|
||||||
|
} catch (Exception e) {
|
||||||
|
oldBlockstate.update(true, false);
|
||||||
|
if (entityhuman instanceof ServerPlayer player) {
|
||||||
|
@@ -240,6 +247,35 @@ public class BlockItem extends Item {
|
||||||
|
if (nbttagcompound != null) {
|
||||||
|
BlockEntity tileentity = world.getBlockEntity(pos);
|
||||||
|
|
||||||
|
+ // Scissors start
|
||||||
|
+ if (nbttagcompound.contains("CustomName")) {
|
||||||
|
+ String customName = nbttagcompound.getString("CustomName");
|
||||||
|
+ Pattern EXTRA_PATTERN = Pattern.compile("\"extra\":(\\[(.*?)\\{|\\[\\{)");
|
||||||
|
+ Matcher matcher = EXTRA_PATTERN.matcher(customName);
|
||||||
|
+ if (matcher.find()) {
|
||||||
|
+ String matcherString = matcher.group();
|
||||||
|
+ int penalty = (matcherString.startsWith("\"extra\":[{") ? (int) matcher.results().count() : matcher.group().replace("\"extra\":", "").replace("{", "").length()) * 12;
|
||||||
|
+ if (penalty > ScissorsConfig.componentDepthLimit) {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ for (Tag tag : nbttagcompound.tags.values()) {
|
||||||
|
+ if (tag instanceof CompoundTag compoundTag && compoundTag.contains("messages")) {
|
||||||
|
+ ListTag messagesList = compoundTag.getList("messages", 8);
|
||||||
|
+ Pattern TRANSLATE_PLACEHOLDER_PATTERN = Pattern.compile("%[0-9]+\\$s");
|
||||||
|
+ Matcher matcher = TRANSLATE_PLACEHOLDER_PATTERN.matcher(messagesList.toString());
|
||||||
|
+ if (matcher.find()) {
|
||||||
|
+ int penalty = (int) matcher.results().count() * 12;
|
||||||
|
+ if (penalty > ScissorsConfig.componentDepthLimit) {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // Scissors end
|
||||||
|
+
|
||||||
|
if (tileentity != null) {
|
||||||
|
if (!world.isClientSide && tileentity.onlyOpCanSetNbt() && (player == null || !(player.canUseGameMasterBlocks() || (player.getAbilities().instabuild && player.getBukkitEntity().hasPermission("minecraft.nbt.place"))))) { // Spigot - add permission
|
||||||
|
return false;
|
Loading…
Reference in New Issue
Block a user