mirror of
https://github.com/AtlasMediaGroup/Scissors.git
synced 2024-11-01 04:37:09 +00:00
add more
This commit is contained in:
parent
ad933c7373
commit
32ba851514
@ -13,3 +13,8 @@ minecraft net.minecraft.network.chat.contents.TranslatableContents.java
|
|||||||
minecraft net.minecraft.network.chat.HoverEvent
|
minecraft net.minecraft.network.chat.HoverEvent
|
||||||
minecraft net.minecraft.world.item.KnowledgeBookItem
|
minecraft net.minecraft.world.item.KnowledgeBookItem
|
||||||
minecraft net.minecraft.network.chat.contents.NbtContents
|
minecraft net.minecraft.network.chat.contents.NbtContents
|
||||||
|
minecraft net.minecraft.network.chat.contents.EntityDataSource
|
||||||
|
minecraft net.minecraft.network.chat.contents.DataSource
|
||||||
|
minecraft net.minecraft.nbt.SnbtPrinterTagVisitor
|
||||||
|
minecraft net.minecraft.nbt.StringTagVisitor
|
||||||
|
minecraft net.minecraft.nbt.TextComponentTagVisitor
|
@ -0,0 +1,28 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Telesphoreo <me@telesphoreo.me>
|
||||||
|
Date: Wed, 8 May 2024 12:26:49 -0500
|
||||||
|
Subject: [PATCH] Prevent attributes with invalid namespaces from being applied
|
||||||
|
to CraftMetaItems
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
||||||
|
index ab23597a099a2785c803e08c93ff9f046a4af677..8fa0557cbf17fee958da9bd8d09a51748282a980 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
||||||
|
@@ -50,6 +50,7 @@ import net.minecraft.nbt.NbtIo;
|
||||||
|
import net.minecraft.nbt.NbtOps;
|
||||||
|
import net.minecraft.nbt.Tag;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
|
+import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.util.Unit;
|
||||||
|
import net.minecraft.world.entity.EquipmentSlotGroup;
|
||||||
|
@@ -734,7 +735,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String attributeName = (String) obj;
|
||||||
|
- if (Strings.isNullOrEmpty(attributeName)) {
|
||||||
|
+ if (Strings.isNullOrEmpty(attributeName) || attributeName.length() > 256 || !ResourceLocation.isValidResourceLocation(attributeName)) { // Scissors
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<?> list = SerializableMeta.getObject(List.class, mods, attributeName, true);
|
@ -0,0 +1,39 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Telesphoreo <me@telesphoreo.me>
|
||||||
|
Date: Wed, 8 May 2024 12:35:56 -0500
|
||||||
|
Subject: [PATCH] Don't query player data in the `nbt` component
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java b/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java
|
||||||
|
index 2750702cff35762bc817ffbe5bf81631e86bc49b..f69261dae717cbb3e7bc9f5e0767adc897f0388d 100644
|
||||||
|
--- a/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java
|
||||||
|
+++ b/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java
|
||||||
|
@@ -8,12 +8,15 @@ import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
+
|
||||||
|
+import me.totalfreedom.scissors.ScissorsConfig;
|
||||||
|
import net.minecraft.advancements.critereon.NbtPredicate;
|
||||||
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
|
import net.minecraft.commands.arguments.selector.EntitySelector;
|
||||||
|
import net.minecraft.commands.arguments.selector.EntitySelectorParser;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
+import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public record EntityDataSource(String selectorPattern, @Nullable EntitySelector compiledSelector) implements DataSource {
|
||||||
|
public static final MapCodec<EntityDataSource> SUB_CODEC = RecordCodecBuilder.mapCodec(
|
||||||
|
@@ -39,7 +42,11 @@ public record EntityDataSource(String selectorPattern, @Nullable EntitySelector
|
||||||
|
public Stream<CompoundTag> getData(CommandSourceStack source) throws CommandSyntaxException {
|
||||||
|
if (this.compiledSelector != null) {
|
||||||
|
List<? extends Entity> list = this.compiledSelector.findEntities(source);
|
||||||
|
- return list.stream().map(NbtPredicate::getEntityTagToCompare);
|
||||||
|
+ // Scissors start
|
||||||
|
+ Stream<? extends Entity> stream = list.stream();
|
||||||
|
+ if (ScissorsConfig.excludePlayersFromNbtComponents) stream = stream.filter((entity) -> !(entity instanceof Player));
|
||||||
|
+ return stream.map(NbtPredicate::getEntityTagToCompare);
|
||||||
|
+ // Scissors end
|
||||||
|
} else {
|
||||||
|
return Stream.empty();
|
||||||
|
}
|
@ -0,0 +1,142 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Telesphoreo <me@telesphoreo.me>
|
||||||
|
Date: Wed, 8 May 2024 12:43:35 -0500
|
||||||
|
Subject: [PATCH] Limit string tag visitors to 1024 elements
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java b/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java
|
||||||
|
index b45bb4ddf6b586ba1285db230e0bc3d1b5e447e8..4a46935cac263325a87a1b0bf32302839a75516e 100644
|
||||||
|
--- a/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java
|
||||||
|
+++ b/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java
|
||||||
|
@@ -89,6 +89,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
|
||||||
|
public void visitByteArray(ByteArrayTag element) {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder("[").append("B").append(";");
|
||||||
|
byte[] bs = element.getAsByteArray();
|
||||||
|
+ if (bs.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors
|
||||||
|
|
||||||
|
for (int i = 0; i < bs.length; i++) {
|
||||||
|
stringBuilder.append(" ").append(bs[i]).append("B");
|
||||||
|
@@ -105,6 +106,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
|
||||||
|
public void visitIntArray(IntArrayTag element) {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder("[").append("I").append(";");
|
||||||
|
int[] is = element.getAsIntArray();
|
||||||
|
+ if (is.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors
|
||||||
|
|
||||||
|
for (int i = 0; i < is.length; i++) {
|
||||||
|
stringBuilder.append(" ").append(is[i]);
|
||||||
|
@@ -122,6 +124,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
|
||||||
|
String string = "L";
|
||||||
|
StringBuilder stringBuilder = new StringBuilder("[").append("L").append(";");
|
||||||
|
long[] ls = element.getAsLongArray();
|
||||||
|
+ if (ls.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors
|
||||||
|
|
||||||
|
for (int i = 0; i < ls.length; i++) {
|
||||||
|
stringBuilder.append(" ").append(ls[i]).append("L");
|
||||||
|
@@ -136,7 +139,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitList(ListTag element) {
|
||||||
|
- if (element.isEmpty()) {
|
||||||
|
+ if (element.isEmpty() || element.size() > 1024) { // Scissors
|
||||||
|
this.result = "[]";
|
||||||
|
} else {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder("[");
|
||||||
|
@@ -166,7 +169,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitCompound(CompoundTag compound) {
|
||||||
|
- if (compound.isEmpty()) {
|
||||||
|
+ if (compound.isEmpty() || compound.size() > 1024) { // Scissors
|
||||||
|
this.result = "{}";
|
||||||
|
} else {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder("{");
|
||||||
|
diff --git a/src/main/java/net/minecraft/nbt/StringTagVisitor.java b/src/main/java/net/minecraft/nbt/StringTagVisitor.java
|
||||||
|
index d8892641d5671fa100aeb43d42ebb6103a2d280c..d10242ecd6f8442e1af3f4cd13f769517b33058a 100644
|
||||||
|
--- a/src/main/java/net/minecraft/nbt/StringTagVisitor.java
|
||||||
|
+++ b/src/main/java/net/minecraft/nbt/StringTagVisitor.java
|
||||||
|
@@ -53,6 +53,7 @@ public class StringTagVisitor implements TagVisitor {
|
||||||
|
public void visitByteArray(ByteArrayTag element) {
|
||||||
|
this.builder.append("[B;");
|
||||||
|
byte[] bs = element.getAsByteArray();
|
||||||
|
+ if (bs.length > 1024) { this.builder.append(']'); return; } // Scissors
|
||||||
|
|
||||||
|
for (int i = 0; i < bs.length; i++) {
|
||||||
|
if (i != 0) {
|
||||||
|
@@ -69,6 +70,7 @@ public class StringTagVisitor implements TagVisitor {
|
||||||
|
public void visitIntArray(IntArrayTag element) {
|
||||||
|
this.builder.append("[I;");
|
||||||
|
int[] is = element.getAsIntArray();
|
||||||
|
+ if (is.length > 1024) { this.builder.append(']'); return; } // Scissors
|
||||||
|
|
||||||
|
for (int i = 0; i < is.length; i++) {
|
||||||
|
if (i != 0) {
|
||||||
|
@@ -85,6 +87,7 @@ public class StringTagVisitor implements TagVisitor {
|
||||||
|
public void visitLongArray(LongArrayTag element) {
|
||||||
|
this.builder.append("[L;");
|
||||||
|
long[] ls = element.getAsLongArray();
|
||||||
|
+ if (ls.length > 1024) { this.builder.append(']'); return; } // Scissors
|
||||||
|
|
||||||
|
for (int i = 0; i < ls.length; i++) {
|
||||||
|
if (i != 0) {
|
||||||
|
@@ -100,6 +103,7 @@ public class StringTagVisitor implements TagVisitor {
|
||||||
|
@Override
|
||||||
|
public void visitList(ListTag element) {
|
||||||
|
this.builder.append('[');
|
||||||
|
+ if (element.size() > 1024) { this.builder.append(']'); return; } // Scissors
|
||||||
|
|
||||||
|
for (int i = 0; i < element.size(); i++) {
|
||||||
|
if (i != 0) {
|
||||||
|
@@ -116,6 +120,7 @@ public class StringTagVisitor implements TagVisitor {
|
||||||
|
public void visitCompound(CompoundTag compound) {
|
||||||
|
this.builder.append('{');
|
||||||
|
List<String> list = Lists.newArrayList(compound.getAllKeys());
|
||||||
|
+ if (list.size() > 1024) { this.builder.append('}'); return; } // Scissors
|
||||||
|
Collections.sort(list);
|
||||||
|
|
||||||
|
for (String string : list) {
|
||||||
|
diff --git a/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java b/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java
|
||||||
|
index 6644359d68706b7c3af2f782c33f930387c221d7..b76cd0ff6f60d83da8754ef788bc0e669b8b4f9c 100644
|
||||||
|
--- a/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java
|
||||||
|
+++ b/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java
|
||||||
|
@@ -105,6 +105,7 @@ public class TextComponentTagVisitor implements TagVisitor {
|
||||||
|
Component component = Component.literal("B").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE);
|
||||||
|
MutableComponent mutableComponent = Component.literal("[").append(component).append(";");
|
||||||
|
byte[] bs = element.getAsByteArray();
|
||||||
|
+ if (bs.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors
|
||||||
|
|
||||||
|
for (int i = 0; i < bs.length; i++) {
|
||||||
|
MutableComponent mutableComponent2 = Component.literal(String.valueOf(bs[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER);
|
||||||
|
@@ -123,6 +124,7 @@ public class TextComponentTagVisitor implements TagVisitor {
|
||||||
|
Component component = Component.literal("I").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE);
|
||||||
|
MutableComponent mutableComponent = Component.literal("[").append(component).append(";");
|
||||||
|
int[] is = element.getAsIntArray();
|
||||||
|
+ if (is.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors
|
||||||
|
|
||||||
|
for (int i = 0; i < is.length; i++) {
|
||||||
|
mutableComponent.append(" ").append(Component.literal(String.valueOf(is[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER));
|
||||||
|
@@ -140,6 +142,7 @@ public class TextComponentTagVisitor implements TagVisitor {
|
||||||
|
Component component = Component.literal("L").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE);
|
||||||
|
MutableComponent mutableComponent = Component.literal("[").append(component).append(";");
|
||||||
|
long[] ls = element.getAsLongArray();
|
||||||
|
+ if (ls.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors
|
||||||
|
|
||||||
|
for (int i = 0; i < ls.length; i++) {
|
||||||
|
Component component2 = Component.literal(String.valueOf(ls[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER);
|
||||||
|
@@ -155,7 +158,7 @@ public class TextComponentTagVisitor implements TagVisitor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitList(ListTag element) {
|
||||||
|
- if (element.isEmpty()) {
|
||||||
|
+ if (element.isEmpty() || element.size() > 1024) { // Scissors
|
||||||
|
this.result = Component.literal("[]");
|
||||||
|
} else if (this.depth >= 64) {
|
||||||
|
this.result = Component.literal("[").append(TOO_DEEP).append("]");
|
||||||
|
@@ -202,7 +205,7 @@ public class TextComponentTagVisitor implements TagVisitor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitCompound(CompoundTag compound) {
|
||||||
|
- if (compound.isEmpty()) {
|
||||||
|
+ if (compound.isEmpty() || compound.size() > 1024) { // Scissors
|
||||||
|
this.result = Component.literal("{}");
|
||||||
|
} else if (this.depth >= 64) {
|
||||||
|
this.result = Component.literal("{").append(TOO_DEEP).append("}");
|
@ -0,0 +1,34 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Telesphoreo <me@telesphoreo.me>
|
||||||
|
Date: Wed, 8 May 2024 12:46:29 -0500
|
||||||
|
Subject: [PATCH] Fixes creative-killing potion effects and certain potion
|
||||||
|
effect overflows
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java b/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java
|
||||||
|
index b95afa9f6b7cf6c522ff5ec278adec7a9a851e9a..3f65f24936cdf3379e39bab3cd8bd46aacd95518 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/effect/HealOrHarmMobEffect.java
|
||||||
|
@@ -15,6 +15,10 @@ class HealOrHarmMobEffect extends InstantenousMobEffect {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean applyEffectTick(LivingEntity entity, int amplifier) {
|
||||||
|
+ // Scissors start - Don't apply any healing/harming effects for Creative/Invulnerable players and cap the amplifier for those who aren't.
|
||||||
|
+ if (entity instanceof net.minecraft.world.entity.player.Player player && (player.isCreative() || player.isInvulnerable())) return false;
|
||||||
|
+ amplifier = Math.min(Math.abs(amplifier), 124);
|
||||||
|
+ // Scissors end
|
||||||
|
if (this.isHarm == entity.isInvertedHealAndHarm()) {
|
||||||
|
entity.heal((float) Math.max(4 << amplifier, 0), org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.MAGIC); // CraftBukkit
|
||||||
|
} else {
|
||||||
|
@@ -28,6 +32,11 @@ class HealOrHarmMobEffect extends InstantenousMobEffect {
|
||||||
|
public void applyInstantenousEffect(@Nullable Entity source, @Nullable Entity attacker, LivingEntity target, int amplifier, double proximity) {
|
||||||
|
int j;
|
||||||
|
|
||||||
|
+ // Scissors start - Don't apply any healing/harming effects for Creative/Invulnerable players and cap the amplifier for those who aren't.
|
||||||
|
+ if (target instanceof net.minecraft.world.entity.player.Player player && (player.isCreative() || player.isInvulnerable())) return;
|
||||||
|
+ amplifier = Math.min(Math.abs(amplifier), 124);
|
||||||
|
+ // Scissors end
|
||||||
|
+
|
||||||
|
if (this.isHarm == target.isInvertedHealAndHarm()) {
|
||||||
|
j = (int) (proximity * (double) (4 << amplifier) + 0.5D);
|
||||||
|
target.heal((float) j, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.MAGIC); // CraftBukkit
|
Loading…
Reference in New Issue
Block a user