Package net.minecraft.world
Class PortalUtil
java.lang.Object
net.minecraft.world.PortalUtil
public class PortalUtil extends Object
- Mappings:
Namespace Name official iintermediary net/minecraft/class_5459named net/minecraft/world/PortalUtil
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPortalUtil.IntBoundsstatic classPortalUtil.Rectangle -
Constructor Summary
Constructors Constructor Description PortalUtil() -
Method Summary
Modifier and Type Method Description (package private) static com.mojang.datafixers.util.Pair<PortalUtil.IntBounds,Integer>findLargestRectangle(int[] heights)Finds the largest rectangle within a histogram, where the vertical bars each have width 1 and height specified inheights.static PortalUtil.RectanglegetLargestRectangle(BlockPos center, Direction.Axis primaryAxis, int primaryMaxBlocks, Direction.Axis secondaryAxis, int secondaryMaxBlocks, Predicate<BlockPos> predicate)Gets the largest rectangle of blocks along two axes for which all blocks meet a predicate.private static intmoveWhile(Predicate<BlockPos> predicate, BlockPos.Mutable mutable, Direction direction, int max)
-
Constructor Details
-
PortalUtil
public PortalUtil()
-
-
Method Details
-
getLargestRectangle
public static PortalUtil.Rectangle getLargestRectangle(BlockPos center, Direction.Axis primaryAxis, int primaryMaxBlocks, Direction.Axis secondaryAxis, int secondaryMaxBlocks, Predicate<BlockPos> predicate)Gets the largest rectangle of blocks along two axes for which all blocks meet a predicate. Used for getting rectangles of Nether portal blocks.- Mappings:
Namespace Name Mixin selector official aLi;a(Lfx;Lgc$a;ILgc$a;ILjava/util/function/Predicate;)Li$a;intermediary method_30574Lnet/minecraft/class_5459;method_30574(Lnet/minecraft/class_2338;Lnet/minecraft/class_2350$class_2351;ILnet/minecraft/class_2350$class_2351;ILjava/util/function/Predicate;)Lnet/minecraft/class_5459$class_5460;named getLargestRectangleLnet/minecraft/world/PortalUtil;getLargestRectangle(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/Direction$Axis;ILnet/minecraft/util/math/Direction$Axis;ILjava/util/function/Predicate;)Lnet/minecraft/world/PortalUtil$Rectangle;
-
moveWhile
private static int moveWhile(Predicate<BlockPos> predicate, BlockPos.Mutable mutable, Direction direction, int max)- Mappings:
Namespace Name Mixin selector official aLi;a(Ljava/util/function/Predicate;Lfx$a;Lgc;I)Iintermediary method_30575Lnet/minecraft/class_5459;method_30575(Ljava/util/function/Predicate;Lnet/minecraft/class_2338$class_2339;Lnet/minecraft/class_2350;I)Inamed moveWhileLnet/minecraft/world/PortalUtil;moveWhile(Ljava/util/function/Predicate;Lnet/minecraft/util/math/BlockPos$Mutable;Lnet/minecraft/util/math/Direction;I)I
-
findLargestRectangle
static com.mojang.datafixers.util.Pair<PortalUtil.IntBounds,Integer> findLargestRectangle(int[] heights)Finds the largest rectangle within a histogram, where the vertical bars each have width 1 and height specified inheights.- Parameters:
heights- the heights of bars in the histogram- Returns:
- the base of the rectangle as an inclusive range and the height of the rectangle packed in a pair
- See Also:
- Largest Rectangle in Histogram - LeetCode
- Implementation Note:
- This implementation solves the problem using a stack. The
stack maintains a collection of height limits of rectangles that may grow as the
array iteration continues. When a new height is encountered, each position
pin the stack would be popped if the rectangle with height limit at positionpcan no longer extend right. The popped rectangle becomes the return value if it has a larger area than the current candidate.When the rectangle area is calculated, the range is between
p0 + 1, wherep0is the current top of stack after popping rectangles that can no longer extend, and the current iterated positioni. - Mappings:
Namespace Name Mixin selector official aLi;a([I)Lcom/mojang/datafixers/util/Pair;intermediary method_30576Lnet/minecraft/class_5459;method_30576([I)Lcom/mojang/datafixers/util/Pair;named findLargestRectangleLnet/minecraft/world/PortalUtil;findLargestRectangle([I)Lcom/mojang/datafixers/util/Pair;
-