Skip to content

Commit 976ecc1

Browse files
committed
fix: renderstate casting crash with mounts
1 parent a0df772 commit 976ecc1

File tree

5 files changed

+62
-8
lines changed

5 files changed

+62
-8
lines changed

common/src/main/java/com/aetherteam/cumulus/client/event/hooks/WorldPreviewHooks.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
import com.aetherteam.cumulus.CumulusConfig;
44
import com.aetherteam.cumulus.client.WorldDisplayHelper;
55
import com.aetherteam.cumulus.mixin.mixins.client.accessor.EntityRendererAccessor;
6+
import com.aetherteam.cumulus.mixin.extensions.EntityRenderStateExtension;
67
import net.minecraft.client.Minecraft;
78
import net.minecraft.client.gui.screens.PauseScreen;
89
import net.minecraft.client.gui.screens.Screen;
910
import net.minecraft.client.gui.screens.TitleScreen;
1011
import net.minecraft.client.renderer.entity.EntityRenderer;
11-
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
1212
import net.minecraft.client.renderer.entity.state.EntityRenderState;
1313
import net.minecraft.world.entity.Entity;
1414
import net.minecraft.world.entity.player.Player;
@@ -119,9 +119,10 @@ public static boolean shouldHidePlayer() {
119119
* @return The {@link Boolean} result.
120120
*/
121121
public static <T extends Entity, S extends EntityRenderState> boolean shouldHideEntity(EntityRenderer<T, S> renderer, EntityRenderState renderState, float partialTick) {
122-
return WorldDisplayHelper.isActive() && Minecraft.getInstance().player != null
123-
&& Minecraft.getInstance().player.getVehicle() != null
124-
&& renderer.createRenderState((T) Minecraft.getInstance().player.getVehicle(), partialTick).equals(renderState);
122+
if (WorldDisplayHelper.isActive() && Minecraft.getInstance().player != null && Minecraft.getInstance().player.getVehicle() != null) {
123+
return Minecraft.getInstance().player.getVehicle().getUUID().equals(((EntityRenderStateExtension) renderState).cumulus$getUUID());
124+
}
125+
return false;
125126
}
126127

127128
/**
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.aetherteam.cumulus.mixin.extensions;
2+
3+
import java.util.UUID;
4+
5+
public interface EntityRenderStateExtension {
6+
UUID cumulus$getUUID();
7+
8+
void cumulus$setUUID(UUID uuid);
9+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.aetherteam.cumulus.mixin.mixins.client;
2+
3+
import com.aetherteam.cumulus.mixin.extensions.EntityRenderStateExtension;
4+
import net.minecraft.client.renderer.entity.state.EntityRenderState;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.Unique;
7+
8+
import java.util.UUID;
9+
10+
@Mixin(EntityRenderState.class)
11+
public class EntityRenderStateMixin implements EntityRenderStateExtension {
12+
@Unique
13+
private UUID uuid = UUID.randomUUID();
14+
15+
@Override
16+
public UUID cumulus$getUUID() {
17+
return this.uuid;
18+
}
19+
20+
@Override
21+
public void cumulus$setUUID(UUID uuid) {
22+
this.uuid = uuid;
23+
}
24+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.aetherteam.cumulus.mixin.mixins.client;
2+
3+
import com.aetherteam.cumulus.mixin.extensions.EntityRenderStateExtension;
4+
import net.minecraft.client.renderer.entity.EntityRenderer;
5+
import net.minecraft.client.renderer.entity.state.EntityRenderState;
6+
import net.minecraft.world.entity.Entity;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.Inject;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
11+
12+
@Mixin(EntityRenderer.class)
13+
public class EntityRendererMixin<T extends Entity, S extends EntityRenderState> {
14+
@Inject(at = @At(value = "HEAD"), method = "extractRenderState(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/client/renderer/entity/state/EntityRenderState;F)V")
15+
public void render(T entity, S entityRenderState, float f, CallbackInfo ci) {
16+
((EntityRenderStateExtension) entityRenderState).cumulus$setUUID(entity.getUUID());
17+
}
18+
}

common/src/main/resources/cumulus_menus.mixins.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
"compatibilityLevel": "JAVA_18",
77
"mixins": [],
88
"client": [
9-
"client.MinecraftServerMixin",
10-
"common.DirectoryLockMixin",
11-
"common.accessor.MinecraftServerAccessor",
129
"client.CameraMixin",
1310
"client.ConnectScreenMixin",
1411
"client.CreateWorldScreenMixin",
12+
"client.EntityRendererMixin",
13+
"client.EntityRenderStateMixin",
1514
"client.FaviconTextureMixin",
15+
"client.MinecraftServerMixin",
1616
"client.MusicManagerMixin",
1717
"client.PanoramaRendererMixin",
1818
"client.PauseScreenMixin",
@@ -24,7 +24,9 @@
2424
"client.accessor.MinecraftAccessor",
2525
"client.accessor.ScreenAccessor",
2626
"client.accessor.SplashRendererAccessor",
27-
"client.accessor.TitleScreenAccessor"
27+
"client.accessor.TitleScreenAccessor",
28+
"common.DirectoryLockMixin",
29+
"common.accessor.MinecraftServerAccessor"
2830
],
2931
"server": [],
3032
"injectors": {

0 commit comments

Comments
 (0)