Properly implement steve/alex models

This commit is contained in:
Sollace 2019-11-27 13:42:19 +02:00
parent d3759af4f3
commit 2cfe7e138a
35 changed files with 111 additions and 68 deletions

View file

@ -5,7 +5,6 @@ import java.util.function.Function;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.minelittlepony.client.model.IPonyModel; import com.minelittlepony.client.model.IPonyModel;
import com.minelittlepony.client.model.PlayerModelKey;
import com.minelittlepony.client.model.entity.race.PlayerModels; import com.minelittlepony.client.model.entity.race.PlayerModels;
import com.minelittlepony.client.render.LevitatingItemRenderer; import com.minelittlepony.client.render.LevitatingItemRenderer;
import com.minelittlepony.client.render.entity.MobRenderers; import com.minelittlepony.client.render.entity.MobRenderers;
@ -60,11 +59,10 @@ public class PonyRenderManager {
} }
private void addPlayerSkin(EntityRenderDispatcher manager, boolean slimArms, PlayerModels playerModel) { private void addPlayerSkin(EntityRenderDispatcher manager, boolean slimArms, PlayerModels playerModel) {
Mson.getInstance().getEntityRendererRegistry().registerPlayerRenderer(
PlayerModelKey<?, ?>.Key key = playerModel.getModelKey().getKey(slimArms); playerModel.getId(slimArms),
String id = playerModel.getId(slimArms); playerModel.getModelKey().getRendererFactory(slimArms)
);
Mson.getInstance().getEntityRendererRegistry().registerPlayerRenderer(id, key.getFactory());
} }
/** /**

View file

@ -74,7 +74,7 @@ public final class ModelType {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
static <E extends LivingEntity, T extends Model & MsonModel> PlayerModelKey<E, T> registerPlayer(String name, Race race, Function<Boolean, T> constructor, PlayerModelKey.RendererFactory rendererFactory) { static <E extends LivingEntity, T extends Model & MsonModel> PlayerModelKey<E, T> registerPlayer(String name, Race race, Function<Boolean, T> constructor, PlayerModelKey.RendererFactory rendererFactory) {
return (PlayerModelKey<E, T>)PLAYER_MODELS.computeIfAbsent(race, r -> { return (PlayerModelKey<E, T>)PLAYER_MODELS.computeIfAbsent(race, r -> {
return new PlayerModelKey<>(new Identifier("minelittlepony", "races/" + name), constructor, rendererFactory); return new PlayerModelKey<>(name, constructor, rendererFactory);
}); });
} }

View file

@ -12,63 +12,35 @@ import com.minelittlepony.mson.api.Mson;
import com.minelittlepony.mson.api.MsonModel; import com.minelittlepony.mson.api.MsonModel;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier;
public class PlayerModelKey<T extends LivingEntity, M extends Model & MsonModel> { public class PlayerModelKey<T extends LivingEntity, M extends Model & MsonModel> {
private final ModelKey<M> key; private final ModelKey<M> steveKey;
private final ModelKey<M> alexKey;
private boolean slim;
private final Key steveKey;
private final Key alexKey;
private final RendererFactory rendererFactory; private final RendererFactory rendererFactory;
PlayerModelKey(Identifier id, Function<Boolean, M> factory, RendererFactory rendererFactory) { PlayerModelKey(String name, Function<Boolean, M> modelFactory, RendererFactory rendererFactory) {
this.key = Mson.getInstance().registerModel(id, () -> factory.apply(slim));
this.rendererFactory = rendererFactory; this.rendererFactory = rendererFactory;
steveKey = new Key(false); steveKey = Mson.getInstance().registerModel(new Identifier("minelittlepony", "races/steve/" + name), () -> modelFactory.apply(false));
alexKey = new Key(true); alexKey = Mson.getInstance().registerModel(new Identifier("minelittlepony", "races/alex/" + name), () -> modelFactory.apply(true));
} }
public Key getKey(boolean slimArms) { public ModelKey<M> getKey(boolean slimArms) {
return slimArms ? alexKey : steveKey; return slimArms ? alexKey : steveKey;
} }
public class Key implements ModelKey<M> {
final boolean slim;
public Key(boolean slim) {
this.slim = slim;
}
@Override
public Identifier getId() {
return key.getId();
}
@Override
public M createModel() {
PlayerModelKey.this.slim = this.slim;
return key.createModel();
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Function<EntityRenderDispatcher, PlayerEntityRenderer> getFactory() { public Function<EntityRenderDispatcher, PlayerEntityRenderer> getRendererFactory(boolean slimArms) {
return d -> rendererFactory.create(d, slim, (ModelKey<? extends ClientPonyModel<AbstractClientPlayerEntity>>)this); return d -> rendererFactory.create(d, slimArms, (ModelKey<? extends ClientPonyModel<AbstractClientPlayerEntity>>)getKey(slimArms));
}
@Override
public <V extends M> V createModel(Supplier<V> supplier) {
PlayerModelKey.this.slim = this.slim;
return key.createModel(supplier);
}
} }
public interface RendererFactory { public interface RendererFactory {
PlayerEntityRenderer create(EntityRenderDispatcher dispatcher, boolean slim, ModelKey<? extends ClientPonyModel<AbstractClientPlayerEntity>> key); PlayerEntityRenderer create(
EntityRenderDispatcher dispatcher,
boolean slim,
ModelKey<? extends ClientPonyModel<AbstractClientPlayerEntity>> key
);
} }
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "minelittlepony:races/sea_pony" "parent": "minelittlepony:races/steve/sea_pony"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "minelittlepony:races/alicorn" "parent": "minelittlepony:races/steve/alicorn"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "minelittlepony:races/changeling" "parent": "minelittlepony:races/steve/changeling"
} }

View file

@ -0,0 +1,8 @@
{
"parent": "minelittlepony:races/steve/alicorn",
"locals": {
"arm_width": 3,
"arm_rotation_x": 2,
"arm_rotation_y": 8.5
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "minelittlepony:races/steve/bat_pony",
"locals": {
"arm_width": 3,
"arm_rotation_x": 2,
"arm_rotation_y": 8.5
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "minelittlepony:races/steve/alicorn",
"locals": {
"arm_width": 3,
"arm_rotation_x": 2,
"arm_rotation_y": 8.5
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "minelittlepony:races/steve/earth_pony",
"locals": {
"arm_width": 3,
"arm_rotation_x": 2,
"arm_rotation_y": 8.5
}
}

View file

@ -0,0 +1,3 @@
{
"parent": "minelittlepony:races/alex/pegasus"
}

View file

@ -0,0 +1,3 @@
{
"parent": "minelittlepony:races/alex/pegasus"
}

View file

@ -0,0 +1,3 @@
{
"parent": "minelittlepony:races/alex/unicorn"
}

View file

@ -0,0 +1,8 @@
{
"parent": "minelittlepony:races/steve/pegasus",
"locals": {
"arm_width": 3,
"arm_rotation_x": 2,
"arm_rotation_y": 8.5
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "minelittlepony:races/steve/sea_pony",
"locals": {
"arm_width": 3,
"arm_rotation_x": 2,
"arm_rotation_y": 8.5
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "minelittlepony:race/steve/unicorn",
"locals": {
"arm_width": 3,
"arm_rotation_x": 2,
"arm_rotation_y": 8.5
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "minelittlepony:races/steve/zebra",
"locals": {
"arm_width": 3,
"arm_rotation_x": 2,
"arm_rotation_y": 8.5
}
}

View file

@ -1,3 +0,0 @@
{
"parent": "minelittlepony:races/pegasus"
}

View file

@ -1,3 +0,0 @@
{
"parent": "minelittlepony:races/pegasus"
}

View file

@ -1,3 +0,0 @@
{
"parent": "minelittlepony:races/unicorn"
}

View file

@ -1,5 +1,5 @@
{ {
"parent": "minelittlepony:races/unicorn", "parent": "minelittlepony:races/steve/unicorn",
"wings": { "wings": {
"type": "mson:slot", "type": "mson:slot",
"name": "wings", "name": "wings",

View file

@ -1,5 +1,5 @@
{ {
"parent": "minelittlepony:races/alicorn", "parent": "minelittlepony:races/steve/alicorn",
"wings": { "wings": {
"type": "mson:slot", "type": "mson:slot",
"name": "wings", "name": "wings",

View file

@ -0,0 +1,3 @@
{
"parent": "minelittlepony:races/steve/pegasus"
}

View file

@ -0,0 +1,3 @@
{
"parent": "minelittlepony:races/steve/pegasus"
}

View file

@ -0,0 +1,3 @@
{
"parent": "minelittlepony:races/steve/unicorn"
}

View file

@ -1,5 +1,5 @@
{ {
"parent": "minelittlepony:races/alicorn", "parent": "minelittlepony:races/steve/alicorn",
"left_fin": { "left_fin": {
"type": "mson:planar", "type": "mson:planar",
"texture": {"u": 56, "v": 16}, "texture": {"u": 56, "v": 16},

View file

@ -1,5 +1,5 @@
{ {
"parent": "minelittlepony:races/alicorn", "parent": "minelittlepony:races/steve/alicorn",
"locals": { "locals": {
"arm_width": 2, "arm_width": 2,
"arm_depth": 2 "arm_depth": 2

View file

@ -1,5 +1,5 @@
{ {
"parent": "minelittlepony:races/alicorn", "parent": "minelittlepony:races/steve/alicorn",
"head": { "head": {
"offset": [ 0, -1, -2 ], "offset": [ 0, -1, -2 ],
"center": [ 0, 0, -2 ], "center": [ 0, 0, -2 ],

View file

@ -1,3 +1,3 @@
{ {
"parent": "minelittlepony:races/alicorn" "parent": "minelittlepony:races/steve/alicorn"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "minelittlepony:races/alicorn" "parent": "minelittlepony:races/steve/alicorn"
} }