-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ad933c7
commit 32ba851
Showing
5 changed files
with
249 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
patches/server/0010-Prevent-attributes-with-invalid-namespaces-from-bein.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); |
39 changes: 39 additions & 0 deletions
39
patches/server/0011-Don-t-query-player-data-in-the-nbt-component.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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(); | ||
} |
142 changes: 142 additions & 0 deletions
142
patches/server/0012-Limit-string-tag-visitors-to-1024-elements.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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("}"); |
34 changes: 34 additions & 0 deletions
34
patches/server/0013-Fixes-creative-killing-potion-effects-and-certain-po.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |