mirror of
https://github.com/AtlasMediaGroup/Scissors.git
synced 2024-11-27 15:15:39 +00:00
104 lines
4.4 KiB
Diff
104 lines
4.4 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Allink <arclicious@vivaldi.net>
|
||
|
Date: Sun, 10 Jul 2022 09:46:20 +0100
|
||
|
Subject: [PATCH] Disable running commands in books by default
|
||
|
|
||
|
|
||
|
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
|
||
|
index d0e2bcf4671d723d5893e0a9bc8c6e30a9b83be6..6fcbd02c02d70617e4533b450747c918ec3339d5 100644
|
||
|
--- a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
|
||
|
+++ b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
|
||
|
@@ -127,6 +127,12 @@ public class ScissorsConfig
|
||
|
}
|
||
|
}
|
||
|
|
||
|
+ public static boolean runCommandsInBooks = false;
|
||
|
+
|
||
|
+ private static void runCommandsInBooks() {
|
||
|
+ runCommandsInBooks = getBoolean("runCommandsInBooks", false);
|
||
|
+ }
|
||
|
+
|
||
|
private static void set(String path, Object val)
|
||
|
{
|
||
|
config.set(path, val);
|
||
|
diff --git a/src/main/java/net/minecraft/world/item/WrittenBookItem.java b/src/main/java/net/minecraft/world/item/WrittenBookItem.java
|
||
|
index de11f8b4a783e7aa6029693f6812c950649fe88c..526206f11bdfc2aa7cb88649c47d707678753007 100644
|
||
|
--- a/src/main/java/net/minecraft/world/item/WrittenBookItem.java
|
||
|
+++ b/src/main/java/net/minecraft/world/item/WrittenBookItem.java
|
||
|
@@ -1,7 +1,10 @@
|
||
|
package net.minecraft.world.item;
|
||
|
|
||
|
import java.util.List;
|
||
|
+import java.util.stream.Collectors;
|
||
|
import javax.annotation.Nullable;
|
||
|
+
|
||
|
+import com.github.atlasmediagroup.scissors.ScissorsConfig;
|
||
|
import net.minecraft.ChatFormatting;
|
||
|
import net.minecraft.commands.CommandSourceStack;
|
||
|
import net.minecraft.core.BlockPos;
|
||
|
@@ -9,10 +12,7 @@ import net.minecraft.nbt.CompoundTag;
|
||
|
import net.minecraft.nbt.ListTag;
|
||
|
import net.minecraft.nbt.StringTag;
|
||
|
import net.minecraft.nbt.Tag;
|
||
|
-import net.minecraft.network.chat.Component;
|
||
|
-import net.minecraft.network.chat.ComponentUtils;
|
||
|
-import net.minecraft.network.chat.TextComponent;
|
||
|
-import net.minecraft.network.chat.TranslatableComponent;
|
||
|
+import net.minecraft.network.chat.*;
|
||
|
import net.minecraft.stats.Stats;
|
||
|
import net.minecraft.util.StringUtil;
|
||
|
import net.minecraft.world.InteractionHand;
|
||
|
@@ -113,8 +113,7 @@ public class WrittenBookItem extends Item {
|
||
|
|
||
|
public static boolean resolveBookComponents(ItemStack book, @Nullable CommandSourceStack commandSource, @Nullable Player player) {
|
||
|
CompoundTag compoundTag = book.getTag();
|
||
|
- if (compoundTag != null && !compoundTag.getBoolean("resolved")) {
|
||
|
- compoundTag.putBoolean("resolved", true);
|
||
|
+ if (compoundTag != null) {
|
||
|
if (!makeSureTagIsValid(compoundTag)) {
|
||
|
return false;
|
||
|
} else {
|
||
|
@@ -148,8 +147,41 @@ public class WrittenBookItem extends Item {
|
||
|
component2 = new TextComponent(string);
|
||
|
}
|
||
|
|
||
|
- return Component.Serializer.toJson(component2);
|
||
|
+ return Component.Serializer.toJson(!ScissorsConfig.runCommandsInBooks ? sanitize(component2, 0) : component2); // Scissors - Allow server owners to disable run command in books
|
||
|
+ }
|
||
|
+
|
||
|
+ // Scissors start - Allow server owners to disable run command in books
|
||
|
+ public static Component sanitize(Component component, int depth) {
|
||
|
+ if (depth > 128) {
|
||
|
+ return Component.nullToEmpty("Sanitization function depth limit exceeded");
|
||
|
+ }
|
||
|
+
|
||
|
+ MutableComponent component2 = component.copy();
|
||
|
+
|
||
|
+ final Style style = component2.getStyle();
|
||
|
+ final ClickEvent clickEvent = style.getClickEvent();
|
||
|
+
|
||
|
+ if(clickEvent != null && clickEvent.getAction().equals(ClickEvent.Action.RUN_COMMAND))
|
||
|
+ {
|
||
|
+ final String clickEventValue = clickEvent.getValue();
|
||
|
+
|
||
|
+ component2 = component2.copy().setStyle(style
|
||
|
+ .withClickEvent(null)
|
||
|
+ .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.nullToEmpty("Would've " + (clickEventValue.startsWith("/") ? "ran": "said") + ": " + clickEvent.getValue())))
|
||
|
+ );
|
||
|
+ }
|
||
|
+
|
||
|
+ final List<Component> processedExtra = component2.getSiblings()
|
||
|
+ .stream()
|
||
|
+ .map(comp -> sanitize(comp, depth + 1))
|
||
|
+ .toList();
|
||
|
+
|
||
|
+ component2.getSiblings().clear();
|
||
|
+ component2.getSiblings().addAll(processedExtra);
|
||
|
+
|
||
|
+ return component2;
|
||
|
}
|
||
|
+ // Scissors end
|
||
|
|
||
|
@Override
|
||
|
public boolean isFoil(ItemStack stack) {
|