From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 10 Dec 2023 18:57:50 -0600 Subject: [PATCH] Patch large selector distance crash diff --git a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java index d87ffb5ed4550757016c2fabaa2845a6aaac74d7..7e8cf65ac53f595292d161da0735bf97081e832a 100644 --- a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java +++ b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java @@ -123,11 +123,11 @@ public interface MinMaxBounds { public static record Doubles(Optional min, Optional max, Optional minSq, Optional maxSq) implements MinMaxBounds { public static final MinMaxBounds.Doubles ANY = new MinMaxBounds.Doubles(Optional.empty(), Optional.empty()); - public static final Codec CODEC = MinMaxBounds.createCodec(Codec.DOUBLE, MinMaxBounds.Doubles::new); + public static final Codec CODEC = MinMaxBounds.createCodec(Codec.DOUBLE, MinMaxBounds.Doubles::new); // Scissors - compile fixes - private Doubles(Optional min, Optional max) { + public Doubles(Optional min, Optional max) { this(min, max, squareOpt(min), squareOpt(max)); - } + } // Scissors - private -> public private static MinMaxBounds.Doubles create(StringReader reader, Optional min, Optional max) throws CommandSyntaxException { if (min.isPresent() && max.isPresent() && min.get() > max.get()) { @@ -188,7 +188,7 @@ public interface MinMaxBounds { public static record Ints(Optional min, Optional max, Optional minSq, Optional maxSq) implements MinMaxBounds { public static final MinMaxBounds.Ints ANY = new MinMaxBounds.Ints(Optional.empty(), Optional.empty()); - public static final Codec CODEC = MinMaxBounds.createCodec(Codec.INT, MinMaxBounds.Ints::new); + public static final Codec CODEC = MinMaxBounds.createCodec(Codec.INT, MinMaxBounds.Ints::new); // Scissors - compile fixes private Ints(Optional min, Optional max) { this(min, max, min.map((i) -> { diff --git a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java index 676a1499747b071515479130875157263d3a8352..6a65850101b8ea348a4bfeaeca805a39987b06fc 100644 --- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java @@ -10,6 +10,8 @@ import java.util.function.BiConsumer; import java.util.function.Function; import java.util.function.Predicate; import javax.annotation.Nullable; + +import me.totalfreedom.scissors.MathUtility; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.arguments.EntityArgument; @@ -60,9 +62,26 @@ public class EntitySelector { this.includesEntities = includesNonPlayers; this.worldLimited = localWorldOnly; this.predicate = basePredicate; - this.range = distance; + // Scissors start - Patch large selector distance crash + this.range = new MinMaxBounds.Doubles( + distance.min().map(min -> Math.min(min, 1024)), + distance.max().map(max -> Math.min(max, 1024)) + ); this.position = positionOffset; - this.aabb = box; + if (box != null) { + this.aabb = new AABB( + MathUtility.clampDouble(box.minX, -1024, 1025), + MathUtility.clampDouble(box.minY, -1024, 1025), + MathUtility.clampDouble(box.minZ, -1024, 1025), + MathUtility.clampDouble(box.maxX, -1024, 1025), + MathUtility.clampDouble(box.maxY, -1024, 1025), + MathUtility.clampDouble(box.maxZ, -1024, 1025), + false + ); + } else { + this.aabb = null; + } + // Scissors end this.order = sorter; this.currentEntity = senderOnly; this.playerName = playerName;