From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 2 Apr 2023 16:29:51 -0300 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 8897496323378080135127f53db004d576476c21..5f957d3241c1931f8166bc9e4960cef15679e932 100644 --- a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java +++ b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java @@ -129,9 +129,9 @@ 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 optional, Optional optional2) { + public Doubles(Optional optional, Optional optional2) { // Scissors - private -> public this(optional, optional2, squareOpt(optional), squareOpt(optional2)); } @@ -202,7 +202,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 optional, Optional optional2) { this(optional, optional2, optional.map((integer) -> { 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 73c15a0c56a103ba4e62f0a51af8d42566b07245..6cb3e86f2d661a55536b782729f768ef72163223 100644 --- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java @@ -5,11 +5,13 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Optional; // Scissors import java.util.UUID; import java.util.function.BiConsumer; import java.util.function.Function; import java.util.function.Predicate; import javax.annotation.Nullable; +import me.totalfreedom.scissors.MathUtility; // Scissors 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;