MineLittlePony/src/main/java/com/minelittlepony/client/render/MobRenderers.java

106 lines
4.8 KiB
Java
Raw Normal View History

2019-11-30 13:12:46 +02:00
package com.minelittlepony.client.render;
2023-09-26 01:45:28 +01:00
import com.minelittlepony.api.config.PonyConfig;
2019-11-30 13:12:46 +02:00
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.render.entity.*;
import com.minelittlepony.client.render.entity.npc.*;
import com.minelittlepony.common.util.settings.Setting;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
import net.minecraft.entity.EntityType;
/**
* Central location where new entity renderers are registered and applied.
*/
public class MobRenderers {
2019-11-30 13:12:46 +02:00
public static final Map<String, MobRenderers> REGISTRY = new HashMap<>();
public static final MobRenderers VILLAGER = register("villagers", (state, pony) -> {
pony.switchRenderer(state, EntityType.VILLAGER, VillagerPonyRenderer::new);
2019-11-30 13:12:46 +02:00
pony.switchRenderer(state, EntityType.WITCH, WitchRenderer::new);
pony.switchRenderer(state, EntityType.ZOMBIE_VILLAGER, ZomponyVillagerRenderer::new);
2019-11-30 13:12:46 +02:00
pony.switchRenderer(state, EntityType.WANDERING_TRADER, TraderRenderer::new);
});
public static final MobRenderers ILLAGER = register("illagers", (state, pony) -> {
pony.switchRenderer(state, EntityType.VEX, VexRenderer::new);
pony.switchRenderer(state, EntityType.EVOKER, IllagerPonyRenderer::evoker);
pony.switchRenderer(state, EntityType.VINDICATOR, IllagerPonyRenderer::vindicator);
2019-11-30 13:12:46 +02:00
pony.switchRenderer(state, EntityType.ILLUSIONER, IllagerPonyRenderer.Illusionist::new);
pony.switchRenderer(state, EntityType.PILLAGER, PillagerRenderer::new);
});
public static final MobRenderers ZOMBIE = register("zombies", (state, pony) -> {
pony.switchRenderer(state, EntityType.ZOMBIE, ZomponyRenderer::zombie);
pony.switchRenderer(state, EntityType.HUSK, ZomponyRenderer::husk);
pony.switchRenderer(state, EntityType.GIANT, ZomponyRenderer::giant);
pony.switchRenderer(state, EntityType.DROWNED, ZomponyRenderer::drowned);
2019-11-30 13:12:46 +02:00
});
public static final MobRenderers PIGLIN = register("pigzombies", (state, pony) -> {
pony.switchRenderer(state, EntityType.PIGLIN, PonyPiglinRenderer::piglin);
pony.switchRenderer(state, EntityType.PIGLIN_BRUTE, PonyPiglinRenderer::brute);
pony.switchRenderer(state, EntityType.ZOMBIFIED_PIGLIN, PonyPiglinRenderer::zombified);
2023-09-26 01:45:28 +01:00
if (!PonyConfig.getInstance().noFun.get()) {
2022-07-05 22:50:40 +02:00
pony.switchRenderer(state, EntityType.PIG, PonyPigRenderer::new);
}
2019-11-30 13:12:46 +02:00
});
public static final MobRenderers SKELETON = register("skeletons", (state, pony) -> {
pony.switchRenderer(state, EntityType.SKELETON, SkeleponyRenderer::skeleton);
pony.switchRenderer(state, EntityType.STRAY, SkeleponyRenderer::stray);
pony.switchRenderer(state, EntityType.WITHER_SKELETON, SkeleponyRenderer::wither);
2019-11-30 13:12:46 +02:00
});
public static final MobRenderers GUARDIAN = register("guardians", (state, pony) -> {
pony.switchRenderer(state, EntityType.GUARDIAN, SeaponyRenderer::guardian);
pony.switchRenderer(state, EntityType.ELDER_GUARDIAN, SeaponyRenderer::elder);
2019-11-30 13:12:46 +02:00
});
public static final MobRenderers ENDERMAN = register("endermen", (state, pony) -> {
pony.switchRenderer(state, EntityType.ENDERMAN, EnderStallionRenderer::new);
});
2019-11-30 18:49:55 +02:00
public static final MobRenderers INANIMATE = register("inanimates", (state, pony) -> {
pony.switchRenderer(state, EntityType.ARMOR_STAND, PonyStandRenderer::new);
});
public static final MobRenderers STRIDER = register("striders", (state, pony) -> {
pony.switchRenderer(state, EntityType.STRIDER, StriderRenderer::new);
2020-04-08 18:00:21 +02:00
});
2022-06-12 00:39:09 +02:00
public static final MobRenderers ALLAY = register("allays", (state, pony) -> {
pony.switchRenderer(state, EntityType.ALLAY, AllayRenderer::new);
});
2019-11-30 13:12:46 +02:00
private final BiConsumer<MobRenderers, PonyRenderDispatcher> changer;
2019-11-30 13:12:46 +02:00
public final String name;
private boolean lastState;
private MobRenderers(String name, BiConsumer<MobRenderers, PonyRenderDispatcher> changer) {
2019-11-30 13:12:46 +02:00
this.name = name;
this.changer = changer;
}
public Setting<Boolean> option() {
2023-09-26 01:45:28 +01:00
return PonyConfig.getInstance().getCategory("entities").<Boolean>get(name);
2019-11-30 13:12:46 +02:00
}
public boolean set(boolean value) {
value = option().set(value);
2023-09-24 23:43:31 +01:00
apply(MineLittlePony.getInstance().getRenderDispatcher(), false);
2019-11-30 13:12:46 +02:00
return value;
}
public boolean get() {
return option().get();
}
public static MobRenderers register(String name, BiConsumer<MobRenderers, PonyRenderDispatcher> changer) {
2019-11-30 13:12:46 +02:00
return REGISTRY.computeIfAbsent(name, n -> new MobRenderers(name, changer));
}
2023-03-30 01:46:03 +01:00
void apply(PonyRenderDispatcher dispatcher, boolean force) {
2019-11-30 13:12:46 +02:00
boolean state = get();
2023-03-30 01:46:03 +01:00
if (state != lastState || force) {
2019-11-30 13:12:46 +02:00
lastState = state;
changer.accept(this, dispatcher);
2019-11-30 13:12:46 +02:00
}
}
}