From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: jellysquid3 Date: Sat, 1 Jan 2022 03:59:58 -0500 Subject: [PATCH] lithium: precompute shape arrays Original code by CaffeineMC, licensed under GNU Lesser General Public License v3.0 You can find the original code on https://github.com/CaffeineMC/lithium-fabric (Yarn mappings) diff --git a/src/main/java/net/minecraft/core/Direction.java b/src/main/java/net/minecraft/core/Direction.java index 2217968eb5ecac0a2063cf1eae7d754d760e9f28..445f21c3764d148de937f558e3f087ae2006733d 100644 --- a/src/main/java/net/minecraft/core/Direction.java +++ b/src/main/java/net/minecraft/core/Direction.java @@ -41,7 +41,7 @@ public enum Direction implements StringRepresentable { private final Direction.Axis axis; private final Direction.AxisDirection axisDirection; private final Vec3i normal; - private static final Direction[] VALUES = values(); + public static final Direction[] VALUES = values(); // JettPack private static final Direction[] BY_3D_DATA = Arrays.stream(VALUES).sorted(Comparator.comparingInt((direction) -> { return direction.data3d; })).toArray((i) -> { diff --git a/src/main/java/net/minecraft/world/phys/shapes/CubePointRange.java b/src/main/java/net/minecraft/world/phys/shapes/CubePointRange.java index a544db042c8d2ecec8d323770552c4f10ca758a6..c04da8da5b40430b61972bce32cec4e8c0370bac 100644 --- a/src/main/java/net/minecraft/world/phys/shapes/CubePointRange.java +++ b/src/main/java/net/minecraft/world/phys/shapes/CubePointRange.java @@ -4,6 +4,7 @@ import it.unimi.dsi.fastutil.doubles.AbstractDoubleList; public class CubePointRange extends AbstractDoubleList { private final int parts; + private double scale; // JettPack - lithium: shapes.precompute_shape_arrays CubePointRange(int sectionCount) { if (sectionCount <= 0) { @@ -11,10 +12,11 @@ public class CubePointRange extends AbstractDoubleList { } else { this.parts = sectionCount; } + this.scale = 1.0D / sectionCount; // JettPack - lithium: shapes.precompute_shape_arrays } public double getDouble(int i) { - return (double)i / (double)this.parts; + return i * this.scale; // JettPack - lithium: shapes.precompute_shape_arrays } public int size() { diff --git a/src/main/java/net/minecraft/world/phys/shapes/CubeVoxelShape.java b/src/main/java/net/minecraft/world/phys/shapes/CubeVoxelShape.java index 68e89dbd79171627046e89699057964e44c40e7d..959588962acb0196ec9f1cc2502e62117f6ccdc4 100644 --- a/src/main/java/net/minecraft/world/phys/shapes/CubeVoxelShape.java +++ b/src/main/java/net/minecraft/world/phys/shapes/CubeVoxelShape.java @@ -3,15 +3,25 @@ package net.minecraft.world.phys.shapes; import it.unimi.dsi.fastutil.doubles.DoubleList; import net.minecraft.core.Direction; import net.minecraft.util.Mth; +import net.minecraft.world.phys.shapes.CubePointRange; // JettPack public final class CubeVoxelShape extends VoxelShape { + private DoubleList[] list; // JettPack - lithium: shapes.precompute_shape_arrays + protected CubeVoxelShape(DiscreteVoxelShape voxels) { super(voxels); + // JettPack start - lithium: shapes.precompute_shape_arrays + this.list = new DoubleList[Direction.VALUES.length]; + + for (Direction.Axis axis : Direction.Axis.VALUES) { + this.list[axis.ordinal()] = new CubePointRange(voxels.getSize(axis)); + } + // JettPack end } @Override protected DoubleList getCoords(Direction.Axis axis) { - return new CubePointRange(this.shape.getSize(axis)); + return this.list[axis.ordinal()]; // JettPack - lithium: shapes.precompute_shape_arrays } @Override