Skip to content

Commit f9729ed

Browse files
committed
Client Entity Renderer registry method
1 parent 89f23c7 commit f9729ed

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.fox2code.foxloader.client.mixins;
2+
3+
import com.fox2code.foxloader.loader.ClientMod;
4+
import com.fox2code.foxloader.loader.Mod;
5+
import com.fox2code.foxloader.loader.ModContainer;
6+
import com.fox2code.foxloader.loader.ModLoader;
7+
import net.minecraft.src.client.renderer.entity.Render;
8+
import net.minecraft.src.client.renderer.entity.RenderManager;
9+
import net.minecraft.src.game.entity.Entity;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.Shadow;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.Inject;
14+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
15+
16+
import java.util.*;
17+
18+
@Mixin(RenderManager.class)
19+
public class MixinRenderManager {
20+
@Shadow private Map<Class<?>, Render> entityRenderMap;
21+
22+
@Inject(method = "<init>", at = @At(value = "INVOKE", ordinal = 45, shift = At.Shift.AFTER,
23+
target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"))
24+
private void onInitLastPut(CallbackInfo ci) {
25+
Map<Class<? extends Entity>, Render> renderMap = new HashMap<>();
26+
27+
for (ModContainer container : ModLoader.getModContainers()) {
28+
Mod clientMod = container.getClientMod();
29+
if (clientMod instanceof ClientMod) {
30+
((ClientMod) clientMod).registerRenderers(renderMap);
31+
}
32+
}
33+
34+
entityRenderMap.putAll(renderMap);
35+
}
36+
}

client/src/main/java/com/fox2code/foxloader/loader/ClientMod.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,22 @@
33
import com.fox2code.foxloader.network.NetworkPlayer;
44
import com.fox2code.foxloader.registry.RegisteredItemStack;
55
import net.minecraft.client.Minecraft;
6+
import net.minecraft.src.client.renderer.entity.Render;
7+
import net.minecraft.src.game.entity.Entity;
68
import net.minecraft.src.game.item.ItemStack;
9+
import org.jetbrains.annotations.ApiStatus;
10+
11+
import java.util.Map;
712

813
public interface ClientMod extends Mod.SidedMod {
14+
/**
15+
* Override to implement {@link Render renderers} for your {@link Entity entities}.
16+
* @param renderers the list of renderers to modify
17+
*/
18+
@ApiStatus.OverrideOnly
19+
default void registerRenderers(Map<Class<? extends Entity>, Render> renderers) {
20+
}
21+
922
static Minecraft getGameInstance() {
1023
return Minecraft.getInstance();
1124
}
@@ -22,6 +35,4 @@ static ItemStack toItemStack(RegisteredItemStack registeredItemStack) {
2235
static RegisteredItemStack toRegisteredItemStack(ItemStack registeredItemStack) {
2336
return (RegisteredItemStack) (Object) registeredItemStack;
2437
}
25-
26-
2738
}

client/src/main/resources/foxloader.client.mixins.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"MixinPlayerControllerTest",
4444
"MixinRenderEngine",
4545
"MixinRenderItem",
46+
"MixinRenderManager",
4647
"MixinStringTranslate",
4748
"MixinTextureMap",
4849
"MixinTexturePackCustom",

0 commit comments

Comments
 (0)