Skip to content

Commit d38446f

Browse files
committed
Replace client hooks mixin with level renderer
Closes #289
1 parent 74191b4 commit d38446f

2 files changed

Lines changed: 9 additions & 11 deletions

File tree

neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/block_entity_visible/ClientHooksMixin.java renamed to neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/block_entity_visible/LevelRendererMixin.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,36 @@
11
package dev.ryanhcode.sable.neoforge.mixin.block_entity_visible;
22

33
import dev.ryanhcode.sable.Sable;
4-
import dev.ryanhcode.sable.api.SubLevelHelper;
54
import dev.ryanhcode.sable.companion.math.BoundingBox3d;
65
import dev.ryanhcode.sable.sublevel.SubLevel;
6+
import net.minecraft.client.renderer.LevelRenderer;
77
import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher;
88
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
99
import net.minecraft.client.renderer.culling.Frustum;
1010
import net.minecraft.world.level.block.entity.BlockEntity;
1111
import net.minecraft.world.phys.AABB;
12-
import net.neoforged.neoforge.client.ClientHooks;
13-
import org.jetbrains.annotations.ApiStatus;
1412
import org.spongepowered.asm.mixin.Mixin;
15-
import org.spongepowered.asm.mixin.Overwrite;
13+
import org.spongepowered.asm.mixin.injection.At;
14+
import org.spongepowered.asm.mixin.injection.Redirect;
1615

17-
@Mixin(ClientHooks.class)
18-
public class ClientHooksMixin {
16+
@Mixin(value = LevelRenderer.class, priority = 2000)
17+
public class LevelRendererMixin {
1918

2019
/**
2120
* @author RyanH
2221
* @reason Take sub-levels into account for visibility check
2322
*/
24-
@Overwrite
25-
@ApiStatus.Internal
2623
@SuppressWarnings("unchecked")
27-
public static <T extends BlockEntity> boolean isBlockEntityRendererVisible(final BlockEntityRenderDispatcher dispatcher, final BlockEntity blockEntity, final Frustum frustum) {
24+
@Redirect(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/neoforged/neoforge/client/ClientHooks;isBlockEntityRendererVisible(Lnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;Lnet/minecraft/world/level/block/entity/BlockEntity;Lnet/minecraft/client/renderer/culling/Frustum;)Z"), require = 0)
25+
private static <T extends BlockEntity> boolean isBlockEntityRendererVisible(final BlockEntityRenderDispatcher dispatcher, final BlockEntity blockEntity, final Frustum frustum) {
2826
final BlockEntityRenderer<T> renderer = (BlockEntityRenderer<T>) dispatcher.getRenderer(blockEntity);
2927

3028
if (renderer == null) return false;
3129

3230
AABB renderBounds = renderer.getRenderBoundingBox((T) blockEntity);
3331

3432
final SubLevel subLevel = Sable.HELPER.getContainingClient(renderBounds.getCenter());
35-
33+
3634
if (subLevel != null) {
3735
final BoundingBox3d bb = new BoundingBox3d(renderBounds);
3836
renderBounds = bb.transform(subLevel.logicalPose(), bb).toMojang();

neoforge/src/main/resources/sable-neoforge.mixins.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"minVersion": "0.8",
66
"plugin": "dev.ryanhcode.sable.plugin.SableMixinPlugin",
77
"client": [
8-
"block_entity_visible.ClientHooksMixin",
8+
"block_entity_visible.LevelRendererMixin",
99
"camera_rotation.CameraMixin",
1010
"compatibility.create.behaviour_compatibility.harvester_block_entity.HarvesterRendererMixin",
1111
"compatibility.create.belt.BeltRendererMixin",

0 commit comments

Comments
 (0)