diff --git a/src/main/java/betterblockentities/mixin/minecraft/ModelCommandRendererMixin.java b/src/main/java/betterblockentities/mixin/minecraft/ModelCommandRendererMixin.java new file mode 100644 index 0000000..f57d723 --- /dev/null +++ b/src/main/java/betterblockentities/mixin/minecraft/ModelCommandRendererMixin.java @@ -0,0 +1,45 @@ +package betterblockentities.mixin.minecraft; + +import it.unimi.dsi.fastutil.ints.IntArrays; +import net.minecraft.client.render.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +@Mixin(ModelCommandRenderer.class) +public class ModelCommandRendererMixin { + + @Redirect(method = "render(Lnet/minecraft/client/render/command/BatchingRenderCommandQueue;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;Lnet/minecraft/client/render/OutlineVertexConsumerProvider;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;)V", at = @At(value = "INVOKE", target = "Ljava/util/List;sort(Ljava/util/Comparator;)V")) + private void arrayIntSort(List> list, + Comparator comparator) { + int size = list.size(); + if (size < 2) + return; + + double[] keys = new double[size]; + int[] indices = new int[size]; + + for (int i = 0; i < size; i++) { + keys[i] = -list.get(i).position().lengthSquared(); + indices[i] = i; + } + + IntArrays.quickSort(indices, (a, b) -> { + int c = Double.compare(keys[a], keys[b]); + return c == 0 ? Integer.compare(a, b) : c; + }); + + List> sorted = new ArrayList<>(size); + for (int i = 0; i < size; i++) { + sorted.add(list.get(indices[i])); + } + + list.clear(); + list.addAll(sorted); + } +} diff --git a/src/main/resources/betterblockentities.mixins.json b/src/main/resources/betterblockentities.mixins.json index 0e99bb5..03f018e 100644 --- a/src/main/resources/betterblockentities.mixins.json +++ b/src/main/resources/betterblockentities.mixins.json @@ -4,30 +4,25 @@ "compatibilityLevel": "JAVA_21", "mixins": [ "minecraft.bell.BellBlockEntityMixin", - "minecraft.chest.ChestBlockEntityAccessor", "minecraft.chest.ChestBlockEntityMixin", "minecraft.chest.ChestBlockEntityRendererMixin", "minecraft.chest.ChestLidAnimatorAccessor", "minecraft.chest.EnderChestBlockEntityMixin", - "minecraft.decordatedpot.DecoratedPotBlockEntityMixin", - "minecraft.shulker.ShulkerBoxBlockEntityMixin", - "minecraft.sign.AbstractSignBlockEntityRendererMixin", - "sodium.AbstractBlockRenderContextAccessor", "sodium.BlockRendererMixin", "sodium.SodiumWorldRendererMixin", - "minecraft.AbstractBlockMixin", "minecraft.BlockEntityMixin", "minecraft.ClientWorldMixin", "minecraft.OrderedRenderCommandQueueImplMixin", "minecraft.RenderLayersMixin", "minecraft.ResourcePackManagerMixin", - "minecraft.WorldRendererMixin" + "minecraft.WorldRendererMixin", + "minecraft.ModelCommandRendererMixin" ], "server": [], "injectors": {