]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/commitdiff
General performance improvements
authorishland <ishlandmc@yeah.net>
Tue, 3 Aug 2021 15:54:05 +0000 (23:54 +0800)
committerirtimaled <irtimaled@gmail.com>
Sun, 15 Aug 2021 18:36:02 +0000 (11:36 -0700)
18 files changed:
src/main/java/com/irtimaled/bbor/client/ClientRenderer.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxBeacon.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxBedrockCeiling.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxBiomeBorder.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxConduit.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxFlowerForest.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxLine.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxMobSpawner.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxSlimeChunk.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxSpawnableBlocks.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxSpawningSphere.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxSphere.java
src/main/java/com/irtimaled/bbor/client/models/BoundingBoxWorldSpawn.java
src/main/java/com/irtimaled/bbor/client/providers/FlowerForestProvider.java
src/main/java/com/irtimaled/bbor/client/renderers/AbstractRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/RenderBatch.java
src/main/java/com/irtimaled/bbor/common/models/AbstractBoundingBox.java
src/main/java/com/irtimaled/bbor/common/models/BoundingBoxCuboid.java

index 2073e1d1a61312cae3e083b7742cf6c503ea1ee3..76af6f2b1765fc26c039c0534feda02fc05d77c0 100644 (file)
@@ -1,18 +1,6 @@
 package com.irtimaled.bbor.client;
 
 import com.irtimaled.bbor.client.interop.ClientInterop;
-import com.irtimaled.bbor.client.models.BoundingBoxBeacon;
-import com.irtimaled.bbor.client.models.BoundingBoxBedrockCeiling;
-import com.irtimaled.bbor.client.models.BoundingBoxBiomeBorder;
-import com.irtimaled.bbor.client.models.BoundingBoxConduit;
-import com.irtimaled.bbor.client.models.BoundingBoxFlowerForest;
-import com.irtimaled.bbor.client.models.BoundingBoxLine;
-import com.irtimaled.bbor.client.models.BoundingBoxMobSpawner;
-import com.irtimaled.bbor.client.models.BoundingBoxSlimeChunk;
-import com.irtimaled.bbor.client.models.BoundingBoxSpawnableBlocks;
-import com.irtimaled.bbor.client.models.BoundingBoxSpawningSphere;
-import com.irtimaled.bbor.client.models.BoundingBoxSphere;
-import com.irtimaled.bbor.client.models.BoundingBoxWorldSpawn;
 import com.irtimaled.bbor.client.models.Point;
 import com.irtimaled.bbor.client.providers.BeaconProvider;
 import com.irtimaled.bbor.client.providers.BedrockCeilingProvider;
@@ -31,38 +19,27 @@ import com.irtimaled.bbor.client.providers.SpawnableBlocksProvider;
 import com.irtimaled.bbor.client.providers.SpawningSphereProvider;
 import com.irtimaled.bbor.client.providers.WorldSpawnProvider;
 import com.irtimaled.bbor.client.renderers.AbstractRenderer;
-import com.irtimaled.bbor.client.renderers.BeaconRenderer;
-import com.irtimaled.bbor.client.renderers.BiomeBorderRenderer;
-import com.irtimaled.bbor.client.renderers.ConduitRenderer;
-import com.irtimaled.bbor.client.renderers.CuboidRenderer;
-import com.irtimaled.bbor.client.renderers.FlowerForestRenderer;
-import com.irtimaled.bbor.client.renderers.LineRenderer;
-import com.irtimaled.bbor.client.renderers.MobSpawnerRenderer;
 import com.irtimaled.bbor.client.renderers.RenderHelper;
 import com.irtimaled.bbor.client.renderers.RenderQueue;
-import com.irtimaled.bbor.client.renderers.SlimeChunkRenderer;
-import com.irtimaled.bbor.client.renderers.SpawnableBlocksRenderer;
-import com.irtimaled.bbor.client.renderers.SpawningSphereRenderer;
-import com.irtimaled.bbor.client.renderers.SphereRenderer;
-import com.irtimaled.bbor.client.renderers.WorldSpawnRenderer;
 import com.irtimaled.bbor.common.MathHelper;
 import com.irtimaled.bbor.common.TypeHelper;
 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
-import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
 import com.irtimaled.bbor.common.models.DimensionId;
+import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
 import net.minecraft.client.util.math.MatrixStack;
 
+import java.util.ArrayList;
 import java.util.Comparator;
-import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
-import java.util.stream.Stream;
 
 public class ClientRenderer {
     private static final int CHUNK_SIZE = 16;
-    private static final Map<Class<? extends AbstractBoundingBox>, AbstractRenderer> boundingBoxRendererMap = new HashMap<>();
+    private static final Map<Class<? extends AbstractBoundingBox>, AbstractRenderer> boundingBoxRendererMap = new Object2ObjectOpenHashMap<>();
 
     private static boolean active;
     private static final Set<IBoundingBoxProvider> providers = new HashSet<>();
@@ -85,19 +62,14 @@ public class ClientRenderer {
     }
 
     static {
-        registerRenderer(BoundingBoxSlimeChunk.class, new SlimeChunkRenderer());
-        registerRenderer(BoundingBoxWorldSpawn.class, new WorldSpawnRenderer());
-        registerRenderer(BoundingBoxCuboid.class, new CuboidRenderer());
-        registerRenderer(BoundingBoxMobSpawner.class, new MobSpawnerRenderer());
-        registerRenderer(BoundingBoxSpawningSphere.class, new SpawningSphereRenderer());
-        registerRenderer(BoundingBoxBeacon.class, new BeaconRenderer());
-        registerRenderer(BoundingBoxBiomeBorder.class, new BiomeBorderRenderer());
-        registerRenderer(BoundingBoxConduit.class, new ConduitRenderer());
-        registerRenderer(BoundingBoxSpawnableBlocks.class, new SpawnableBlocksRenderer());
-        registerRenderer(BoundingBoxLine.class, new LineRenderer());
-        registerRenderer(BoundingBoxSphere.class, new SphereRenderer());
-        registerRenderer(BoundingBoxFlowerForest.class, new FlowerForestRenderer());
-        registerRenderer(BoundingBoxBedrockCeiling.class, new CuboidRenderer());
+
+
+
+
+
+
+
+
 
         registerProvider(new SlimeChunkProvider());
         registerProvider(new WorldSpawnProvider());
@@ -119,8 +91,13 @@ public class ClientRenderer {
         providers.add(provider);
     }
 
-    public static <T extends AbstractBoundingBox> void registerRenderer(Class<? extends T> type, AbstractRenderer<T> renderer) {
+    public static <T extends AbstractBoundingBox> AbstractRenderer<T> registerRenderer(Class<? extends T> type, AbstractRenderer<T> renderer) {
         boundingBoxRendererMap.put(type, renderer);
+        return renderer;
+    }
+
+    public static AbstractRenderer getRenderer(Class<? extends AbstractBoundingBox> clazz) {
+        return boundingBoxRendererMap.get(clazz);
     }
 
     private static boolean isWithinRenderDistance(AbstractBoundingBox boundingBox) {
@@ -141,7 +118,7 @@ public class ClientRenderer {
         RenderHelper.beforeRender();
 
         getBoundingBoxes(dimensionId).forEach(key -> {
-            AbstractRenderer renderer = boundingBoxRendererMap.get(key.getClass());
+            AbstractRenderer renderer = key.getRenderer();
             if (renderer != null) renderer.render(matrixStack, key);
         });
 
@@ -152,22 +129,23 @@ public class ClientRenderer {
         lastDurationNanos.set(System.nanoTime() - startTime);
     }
 
-    public static Stream<AbstractBoundingBox> getBoundingBoxes(DimensionId dimensionId) {
-        Stream.Builder<AbstractBoundingBox> boundingBoxes = Stream.builder();
+    public static List<AbstractBoundingBox> getBoundingBoxes(DimensionId dimensionId) {
+        List<AbstractBoundingBox> tmp = new LinkedList<>();
         for (IBoundingBoxProvider<?> provider : providers) {
             if (provider.canProvide(dimensionId)) {
                 for (AbstractBoundingBox boundingBox : provider.get(dimensionId)) {
                     if (isWithinRenderDistance(boundingBox)) {
-                        boundingBoxes.accept(boundingBox);
+                        tmp.add(boundingBox);
                     }
                 }
             }
         }
 
         Point point = Player.getPoint();
-        return boundingBoxes.build()
-                .sorted(Comparator
-                        .comparingDouble((AbstractBoundingBox boundingBox) -> boundingBox.getDistance(point.getX(), point.getY(), point.getZ())).reversed());
+        final ArrayList<AbstractBoundingBox> result = new ArrayList<>(tmp);
+        result.sort(Comparator.comparingDouble((AbstractBoundingBox boundingBox) -> boundingBox.getDistance(point.getX(), point.getY(), point.getZ())).reversed());
+
+        return result;
     }
 
     public static void clear() {
index cb285aea5047bf443d5cda7af8fe29725a6d9be4..7e4575f57a0f77b7948d96e1c5f4bd69e693ff96 100644 (file)
@@ -1,10 +1,15 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.BeaconRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
 import com.irtimaled.bbor.common.models.Coords;
 
 public class BoundingBoxBeacon extends BoundingBoxCuboid {
+    private static final AbstractRenderer<BoundingBoxBeacon> RENDERER = ClientRenderer.registerRenderer(BoundingBoxBeacon.class, new BeaconRenderer());
+
     private final Coords coords;
     private final int level;
 
@@ -45,4 +50,9 @@ public class BoundingBoxBeacon extends BoundingBoxCuboid {
     public int getLevel() {
         return level;
     }
+
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }
index d661c52150041d458331c357a023f1a359b1588d..62e0ddd858d036cfc13d06f0fc74e201ae981c2a 100644 (file)
@@ -1,11 +1,21 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.CuboidRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
 import com.irtimaled.bbor.common.models.Coords;
 
 public class BoundingBoxBedrockCeiling extends BoundingBoxCuboid {
+    private static final AbstractRenderer<BoundingBoxCuboid> RENDERER = ClientRenderer.registerRenderer(BoundingBoxBedrockCeiling.class, new CuboidRenderer());
+
     public BoundingBoxBedrockCeiling(Coords coords) {
         super(coords, coords, BoundingBoxType.BedrockCeiling);
     }
+
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }
index 63c92e1bcb3b372da536c751056279eb83e4ede5..e7b4481c9c9225a18f553d6d258915602c73f5f4 100644 (file)
@@ -1,10 +1,15 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.BiomeBorderRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
 import com.irtimaled.bbor.common.models.Coords;
 
 public class BoundingBoxBiomeBorder extends AbstractBoundingBox {
+    private static final AbstractRenderer<BoundingBoxBiomeBorder> RENDERER = ClientRenderer.registerRenderer(BoundingBoxBiomeBorder.class, new BiomeBorderRenderer());
+
     private final Coords coords;
     private final boolean north;
     private final boolean east;
@@ -63,4 +68,8 @@ public class BoundingBoxBiomeBorder extends AbstractBoundingBox {
         return west;
     }
 
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }
index 4df25b21fb648e216d6fb429a13e2d13268690bf..bdbf3c61b91dcdf1f50e2bf4937f6076bad88f26 100644 (file)
@@ -1,10 +1,15 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.ConduitRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.TypeHelper;
 import com.irtimaled.bbor.common.models.Coords;
 
 public class BoundingBoxConduit extends BoundingBoxSphere {
+    private static final AbstractRenderer<BoundingBoxConduit> RENDERER = ClientRenderer.registerRenderer(BoundingBoxConduit.class, new ConduitRenderer());
+
     private final int level;
 
     private BoundingBoxConduit(Coords coords, int level, int radius) {
@@ -33,4 +38,9 @@ public class BoundingBoxConduit extends BoundingBoxSphere {
     public int getLevel() {
         return level;
     }
+
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }
index 2f598cdc6eb4211dc7abafee90484ef86a99a328..e13e386b94b46fa6593ea8d63da8cb588da96ac1 100644 (file)
@@ -1,8 +1,11 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
 import com.irtimaled.bbor.client.config.ColorHelper;
 import com.irtimaled.bbor.client.config.HexColor;
 import com.irtimaled.bbor.client.config.Setting;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.FlowerForestRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
 import com.irtimaled.bbor.common.models.Coords;
@@ -10,6 +13,8 @@ import com.irtimaled.bbor.common.models.Coords;
 import java.awt.*;
 
 public class BoundingBoxFlowerForest extends AbstractBoundingBox {
+    private static final AbstractRenderer<BoundingBoxFlowerForest> RENDERER = ClientRenderer.registerRenderer(BoundingBoxFlowerForest.class, new FlowerForestRenderer());
+
     private final Coords coords;
     private final Setting<HexColor> colorSetting;
 
@@ -46,4 +51,9 @@ public class BoundingBoxFlowerForest extends AbstractBoundingBox {
     public double getDistanceZ(double z) {
         return z - coords.getZ();
     }
+
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }
index 7dbe24d3391eb1fe16666b933dd5eee5d04bc067..26ba5b77c197a33192a7af76b6fd07b69320a142 100644 (file)
@@ -1,11 +1,16 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.LineRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.MathHelper;
 import com.irtimaled.bbor.common.TypeHelper;
 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
 
 public class BoundingBoxLine extends AbstractBoundingBox {
+    private static final AbstractRenderer<BoundingBoxLine> RENDERER = ClientRenderer.registerRenderer(BoundingBoxLine.class, new LineRenderer());
+
     private final Point minPoint;
     private final Point maxPoint;
     private final Double width;
@@ -108,4 +113,9 @@ public class BoundingBoxLine extends AbstractBoundingBox {
     private boolean isBetween(double val, int min, int max) {
         return val >= min && val <= max;
     }
+
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }
index cc6c76a36ac18b6e21afbccec869db3f27a9316a..71e919e93292f8ab30699a191e81677dd82b0c97 100644 (file)
@@ -1,10 +1,15 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.MobSpawnerRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
 import com.irtimaled.bbor.common.models.Coords;
 
 public class BoundingBoxMobSpawner extends BoundingBoxCuboid {
+    private static final AbstractRenderer<BoundingBoxMobSpawner> RENDERER = ClientRenderer.registerRenderer(BoundingBoxMobSpawner.class, new MobSpawnerRenderer());
+
     private final Coords coords;
 
     private BoundingBoxMobSpawner(Coords coords, Coords minCoords, Coords maxCoords) {
@@ -25,4 +30,9 @@ public class BoundingBoxMobSpawner extends BoundingBoxCuboid {
     public Coords getCoords() {
         return coords;
     }
+
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }
index 09ec81a3c95d329ab1ce84c0ec28e628d701cdbc..cd7470bf925a7fedefc627589652cc75ccfe7801 100644 (file)
@@ -1,13 +1,18 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
 import com.irtimaled.bbor.client.Player;
 import com.irtimaled.bbor.client.config.ConfigManager;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.SlimeChunkRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.MathHelper;
 import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
 import com.irtimaled.bbor.common.models.Coords;
 
 public class BoundingBoxSlimeChunk extends BoundingBoxCuboid {
+    private static final AbstractRenderer<BoundingBoxSlimeChunk> RENDERER = ClientRenderer.registerRenderer(BoundingBoxSlimeChunk.class, new SlimeChunkRenderer());
+
     public BoundingBoxSlimeChunk(Coords minCoords, Coords maxCoords) {
         super(minCoords, maxCoords, BoundingBoxType.SlimeChunks);
     }
@@ -20,4 +25,9 @@ public class BoundingBoxSlimeChunk extends BoundingBoxCuboid {
         else
             return super.getDistanceY(y);
     }
+
+    @Override
+    public AbstractRenderer<BoundingBoxSlimeChunk> getRenderer() {
+        return RENDERER;
+    }
 }
index 3d9037ed0335ef74326bc2246aac4981aa413cfc..797481fa77a29f1ef548c4dad12370d2ecd2d022 100644 (file)
@@ -1,5 +1,8 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.SpawnableBlocksRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
 import net.minecraft.util.math.BlockPos;
@@ -8,6 +11,8 @@ import java.util.HashSet;
 import java.util.Set;
 
 public class BoundingBoxSpawnableBlocks extends AbstractBoundingBox {
+    private static final AbstractRenderer<BoundingBoxSpawnableBlocks> RENDERER = ClientRenderer.registerRenderer(BoundingBoxSpawnableBlocks.class, new SpawnableBlocksRenderer());
+
     private final Set<BlockPos> blocks = new HashSet<>();
 
     public BoundingBoxSpawnableBlocks() {
@@ -37,4 +42,9 @@ public class BoundingBoxSpawnableBlocks extends AbstractBoundingBox {
     protected double getDistanceZ(double z) {
         return 0;
     }
+
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }
index 5d3087ebd816bfbf9b4c671a2c09264266d67929..47a2e3aea4cd29140b920321731ca98ddb807a28 100644 (file)
@@ -1,5 +1,8 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.SpawningSphereRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import net.minecraft.util.math.BlockPos;
 
@@ -7,6 +10,8 @@ import java.util.HashSet;
 import java.util.Set;
 
 public class BoundingBoxSpawningSphere extends BoundingBoxSphere {
+    private static final AbstractRenderer<BoundingBoxSpawningSphere> RENDERER = ClientRenderer.registerRenderer(BoundingBoxSpawningSphere.class, new SpawningSphereRenderer());
+
     public static final int SAFE_RADIUS = 24;
     public static final int SPAWN_RADIUS = 128;
 
@@ -32,4 +37,9 @@ public class BoundingBoxSpawningSphere extends BoundingBoxSphere {
     public Integer getSpawnableSpacesCount() {
         return this.spawnableCount;
     }
+
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }
index 0fdb1f1c0bed39f659be912b4d007283e34931c0..8b4b9b5afbb3bd2818d398d00a15df7d97a59502 100644 (file)
@@ -1,10 +1,15 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.SphereRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
 import com.irtimaled.bbor.common.models.Coords;
 
 public class BoundingBoxSphere extends AbstractBoundingBox {
+    private static final AbstractRenderer<BoundingBoxSphere> RENDERER = ClientRenderer.registerRenderer(BoundingBoxSphere.class, new SphereRenderer());
+
     private final double radius;
     private final double minX;
     private final double minZ;
index 7715a427930f6095fb57d97c74a478c8572623b0..89de627a050e33112ee58ed34e0768b26c8aed80 100644 (file)
@@ -1,11 +1,21 @@
 package com.irtimaled.bbor.client.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.WorldSpawnRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.BoundingBoxCuboid;
 import com.irtimaled.bbor.common.models.Coords;
 
 public class BoundingBoxWorldSpawn extends BoundingBoxCuboid {
+    private static final AbstractRenderer<BoundingBoxWorldSpawn> RENDERER = ClientRenderer.registerRenderer(BoundingBoxWorldSpawn.class, new WorldSpawnRenderer());
+
     public BoundingBoxWorldSpawn(Coords minCoords, Coords maxCoords, BoundingBoxType type) {
         super(minCoords, maxCoords, type);
     }
+
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }
index 1ca34ec938c8672ac4db7cfacadc5f7a64b8f4d4..167720531a87f8ac02e4659cd88cfd82d90cb1ae 100644 (file)
@@ -10,7 +10,9 @@ import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.MathHelper;
 import com.irtimaled.bbor.common.models.Coords;
 import com.irtimaled.bbor.common.models.DimensionId;
+import net.minecraft.client.MinecraftClient;
 import net.minecraft.util.registry.BuiltinRegistries;
+import net.minecraft.world.Heightmap;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -78,9 +80,10 @@ public class FlowerForestProvider implements IBoundingBoxProvider<BoundingBoxFlo
     }
 
     private static int getMaxYForPos(int x, int y, int z) {
-        while (y > 0) {
-            if (FlowerForestHelper.canGrowFlower(x, y, z)) return y;
-            y--;
+        int topY = MinecraftClient.getInstance().world.getTopY(Heightmap.Type.MOTION_BLOCKING, x, z) + 1;
+        while (topY > 0) {
+            if (FlowerForestHelper.canGrowFlower(x, topY, z)) return topY;
+            topY--;
         }
         return 0;
     }
index f576b6a8355c57ff210bf4f01b1946473f12a61a..7a7a46436131d940f6ba95b214d74ce1e4c45600 100644 (file)
@@ -27,10 +27,9 @@ public abstract class AbstractRenderer<T extends AbstractBoundingBox> {
     public abstract void render(MatrixStack matrixStack, T boundingBox);
 
     void renderCuboid(MatrixStack matrixStack, OffsetBox bb, Color color, boolean fillOnly, int fillAlpha) {
-        OffsetBox nudge = bb.nudge();
         matrixStack.push();
 
-        renderCuboid0(matrixStack, nudge, color, fillOnly, fillAlpha, false);
+        renderCuboid0(matrixStack, bb, color, fillOnly, fillAlpha, false);
 
         matrixStack.pop();
     }
index a24f0e1f72fa291863219565878dda3590e1eb75..c2dfa8cfc34c4f570e19ed7dcdb81a0129551669 100644 (file)
@@ -47,39 +47,61 @@ public class RenderBatch {
         final int green = color.getGreen();
         final int blue = color.getBlue();
 
-        if (mask) quadMaskedCount.getAndIncrement();
-        else quadNonMaskedCount.getAndIncrement();
-
         final BufferBuilder bufferBuilder = mask ? RenderBatch.quadBufferBuilderMasked : RenderBatch.quadBufferBuilderNonMasked;
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, minZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, minZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, maxZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, maxZ).color(red, green, blue, alpha).next();
-
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, minZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, maxZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, maxZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, minZ).color(red, green, blue, alpha).next();
-
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, minZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, minZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, minZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, minZ).color(red, green, blue, alpha).next();
-
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, minZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, minZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, maxZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, maxZ).color(red, green, blue, alpha).next();
-
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, maxZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, maxZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, maxZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, maxZ).color(red, green, blue, alpha).next();
-
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, minZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, maxZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, maxZ).color(red, green, blue, alpha).next();
-        bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, minZ).color(red, green, blue, alpha).next();
+
+        if (minX != maxX && minZ != maxZ) {
+            if (mask) quadMaskedCount.getAndIncrement();
+            else quadNonMaskedCount.getAndIncrement();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, minZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, minZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, maxZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, maxZ).color(red, green, blue, alpha).next();
+        }
+
+        if (minX != maxX && minZ != maxZ) {
+            if (mask) quadMaskedCount.getAndIncrement();
+            else quadNonMaskedCount.getAndIncrement();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, minZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, maxZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, maxZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, minZ).color(red, green, blue, alpha).next();
+        }
+
+        if (minX != maxX && minY != maxY) {
+            if (mask) quadMaskedCount.getAndIncrement();
+            else quadNonMaskedCount.getAndIncrement();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, minZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, minZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, minZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, minZ).color(red, green, blue, alpha).next();
+        }
+
+        if (minY != maxY && minZ != maxZ) {
+            if (mask) quadMaskedCount.getAndIncrement();
+            else quadNonMaskedCount.getAndIncrement();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, minZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, minZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, maxZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, maxZ).color(red, green, blue, alpha).next();
+        }
+
+        if (minX != maxX && minY != maxY) {
+            if (mask) quadMaskedCount.getAndIncrement();
+            else quadNonMaskedCount.getAndIncrement();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, maxZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, maxZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, maxZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, maxZ).color(red, green, blue, alpha).next();
+        }
+
+        if (minY != maxY && minZ != maxZ) {
+            if (mask) quadMaskedCount.getAndIncrement();
+            else quadNonMaskedCount.getAndIncrement();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, minZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, maxZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, maxZ).color(red, green, blue, alpha).next();
+            bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, minZ).color(red, green, blue, alpha).next();
+        }
     }
 
     static void drawLine(MatrixStack.Entry matrixEntry, Point startPoint, Point endPoint, Color color, int alpha) {
@@ -132,7 +154,7 @@ public class RenderBatch {
     }
 
     public static String debugString() {
-        return String.format("[BBOR] Statistics: Boxes: %d,%d Lines: %d @ %.2fms", quadMaskedCountLast.get(), quadNonMaskedCountLast.get(), lineCountLast.get(), lastDurationNanos.get() / 1_000_000.0);
+        return String.format("[BBOR] Statistics: Filled faces: %d,%d Lines: %d @ %.2fms", quadMaskedCountLast.get(), quadNonMaskedCountLast.get(), lineCountLast.get(), lastDurationNanos.get() / 1_000_000.0);
     }
 
 }
index e4852d0fb04ee27ae46d01f0c291b89ecbeea031..768224936c72b6987334c24e39bc373a861fabf0 100644 (file)
@@ -1,5 +1,7 @@
 package com.irtimaled.bbor.common.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 
 public abstract class AbstractBoundingBox {
@@ -19,7 +21,7 @@ public abstract class AbstractBoundingBox {
         double dX = getDistanceX(x);
         double dY = getDistanceY(y);
         double dZ = getDistanceZ(z);
-        return Math.cbrt(dX * dX + dY * dY + dZ * dZ);
+        return dX * dX + dY * dY + dZ * dZ;
     }
 
     protected abstract double getDistanceX(double x);
@@ -27,4 +29,8 @@ public abstract class AbstractBoundingBox {
     protected abstract double getDistanceY(double y);
 
     protected abstract double getDistanceZ(double z);
+
+    public AbstractRenderer<?> getRenderer() {
+        return ClientRenderer.getRenderer(this.getClass());
+    }
 }
index 765a0653fc45e795bd2494f14e6189590e16cc35..6cfa81a40e930c769aaad2321c9d724988b1da4a 100644 (file)
@@ -1,10 +1,15 @@
 package com.irtimaled.bbor.common.models;
 
+import com.irtimaled.bbor.client.ClientRenderer;
+import com.irtimaled.bbor.client.renderers.AbstractRenderer;
+import com.irtimaled.bbor.client.renderers.CuboidRenderer;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.MathHelper;
 import com.irtimaled.bbor.common.TypeHelper;
 
 public class BoundingBoxCuboid extends AbstractBoundingBox {
+    private static final AbstractRenderer<BoundingBoxCuboid> RENDERER = ClientRenderer.registerRenderer(BoundingBoxCuboid.class, new CuboidRenderer());
+
     private final Coords minCoords;
     private final Coords maxCoords;
 
@@ -70,4 +75,9 @@ public class BoundingBoxCuboid extends AbstractBoundingBox {
     public double getDistanceZ(double z) {
         return z - MathHelper.clamp(z, minCoords.getZ(), maxCoords.getZ());
     }
+
+    @Override
+    public AbstractRenderer<?> getRenderer() {
+        return RENDERER;
+    }
 }