Models now work again

This commit is contained in:
Sollace 2018-04-24 17:12:23 +02:00
parent a99873f8e6
commit 0657a03703
12 changed files with 111 additions and 96 deletions

View file

@ -3,7 +3,7 @@ package com.minelittlepony;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.minelittlepony.gui.PonySettingPanel; import com.minelittlepony.gui.PonySettingPanel;
import com.minelittlepony.hdskins.gui.GuiSkinsMineLP; import com.minelittlepony.hdskins.gui.GuiSkinsMineLP;
import com.minelittlepony.model.PlayerModels; import com.minelittlepony.model.PMAPI;
import com.minelittlepony.renderer.RenderPonyEvoker; import com.minelittlepony.renderer.RenderPonyEvoker;
import com.minelittlepony.renderer.RenderPonyIllusionIllager; import com.minelittlepony.renderer.RenderPonyIllusionIllager;
import com.minelittlepony.renderer.RenderPonyPigman; import com.minelittlepony.renderer.RenderPonyPigman;
@ -137,8 +137,8 @@ public class MineLittlePony {
} }
public void initialisePlayerRenderers(RenderManager rm) { public void initialisePlayerRenderers(RenderManager rm) {
new RenderPonyPlayer(rm, false, PlayerModels.PONY); new RenderPonyPlayer(rm, false, "pony", PMAPI.pony);
new RenderPonyPlayer(rm, true, PlayerModels.PONY); new RenderPonyPlayer(rm, true, "slimpony", PMAPI.ponySmall);
} }
public void initializeMobRenderers(RenderManager rm) { public void initializeMobRenderers(RenderManager rm) {

View file

@ -107,7 +107,8 @@ public class Pony {
} }
public PonyRace getRace(boolean ignorePony) { public PonyRace getRace(boolean ignorePony) {
return metadata.getRace().getEffectiveRace(MineLittlePony.getConfig().getPonyLevel(ignorePony)); return PonyRace.ALICORN;
//return metadata.getRace().getEffectiveRace(MineLittlePony.getConfig().getPonyLevel(ignorePony));
} }
public ResourceLocation getTexture() { public ResourceLocation getTexture() {

View file

@ -8,6 +8,7 @@ import com.minelittlepony.ducks.IPlayerInfo;
import com.minelittlepony.model.PMAPI; import com.minelittlepony.model.PMAPI;
import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.resources.DefaultPlayerSkin;
import net.minecraft.client.resources.IResource; import net.minecraft.client.resources.IResource;
import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManager;
import net.minecraft.client.resources.IResourceManagerReloadListener; import net.minecraft.client.resources.IResourceManagerReloadListener;
@ -53,46 +54,47 @@ public class PonyManager implements IResourceManagerReloadListener {
return poniesCache.computeIfAbsent(skinResourceLocation, res -> new Pony(res, slim)); return poniesCache.computeIfAbsent(skinResourceLocation, res -> new Pony(res, slim));
} }
// TODO: Slim arms
public Pony getPony(ResourceLocation skinResourceLocation) {
return getPony(skinResourceLocation, false);
}
public Pony getPony(AbstractClientPlayer player) { public Pony getPony(AbstractClientPlayer player) {
Pony myLittlePony = getPony(player.getLocationSkin(), IPlayerInfo.getPlayerInfo(player).usesSlimArms()); Pony pony = getPony(player.getLocationSkin(), IPlayerInfo.getPlayerInfo(player).usesSlimArms());
if (config.getPonyLevel() == PonyLevel.PONIES && myLittlePony.getMetadata().getRace().isHuman()) { if (config.getPonyLevel() == PonyLevel.PONIES && pony.getMetadata().getRace().isHuman()) {
return this.getPonyFromBackgroundResourceRegistry(player); return getBackgroundPony(player.getUniqueID());
} }
return myLittlePony; return pony;
}
public Pony getPony(ResourceLocation resource, UUID uuid) {
Pony pony = getPony(resource, isSlimSkin(uuid));
if (config.getPonyLevel() == PonyLevel.PONIES && pony.getMetadata().getRace().isHuman()) {
return getBackgroundPony(uuid);
}
return pony;
}
public Pony getDefaultPony(UUID uuid) {
if (config.getPonyLevel() != PonyLevel.PONIES) {
return getPony(DefaultPlayerSkin.getDefaultSkin(uuid), isSlimSkin(uuid));
}
return getBackgroundPony(uuid);
}
private Pony getBackgroundPony(UUID uuid) {
if (getNumberOfPonies() == 0) return getPony(getDefaultSkin(uuid), isSlimSkin(uuid));
int bgi = uuid.hashCode() % this.getNumberOfPonies();
while (bgi < 0) bgi += this.getNumberOfPonies();
return getPony(backgroundPonyList.get(bgi), false);
} }
public Pony removePony(ResourceLocation location) { public Pony removePony(ResourceLocation location) {
return poniesCache.remove(location); return poniesCache.remove(location);
} }
private ResourceLocation getBackgroundPonyResource(UUID id) {
if (getNumberOfPonies() > 0) {
int backgroundIndex = id.hashCode() % this.getNumberOfPonies();
if (backgroundIndex < 0) {
backgroundIndex += this.getNumberOfPonies();
}
return backgroundPonyList.get(backgroundIndex);
}
return STEVE;
}
private Pony getPonyFromBackgroundResourceRegistry(AbstractClientPlayer player) {
return backgroudPoniesCache.computeIfAbsent(getDefaultPonyResource(player), res -> new Pony(res, false));
}
private ResourceLocation getDefaultPonyResource(AbstractClientPlayer player) {
if (player.isUser()) return getDefaultSkin(player.getUniqueID());
return getBackgroundPonyResource(player.getUniqueID());
}
@Override @Override
public void onResourceManagerReload(IResourceManager resourceManager) { public void onResourceManagerReload(IResourceManager resourceManager) {
this.poniesCache.clear(); this.poniesCache.clear();
@ -117,7 +119,11 @@ public class PonyManager implements IResourceManagerReloadListener {
} }
private ResourceLocation getDefaultSkin(UUID uuid) { private ResourceLocation getDefaultSkin(UUID uuid) {
return (uuid.hashCode() & 1) == 0 ? STEVE : ALEX; return isSlimSkin(uuid) ? ALEX : STEVE;
}
public static boolean isSlimSkin(UUID uuid) {
return (uuid.hashCode() & 1) == 1;
} }
private int getNumberOfPonies() { private int getNumberOfPonies() {

View file

@ -31,7 +31,7 @@ public class RenderPonyModel extends RenderPlayerModel<EntityPonyModel> {
return super.getEntityModel(playermodel); return super.getEntityModel(playermodel);
} }
Pony thePony = MineLittlePony.getInstance().getManager().getPony(loc); Pony thePony = MineLittlePony.getInstance().getManager().getPony(loc, playermodel.profile.getId());
PlayerModel pm = thePony.getModel(true); PlayerModel pm = thePony.getModel(true);
pm.apply(thePony.getMetadata()); pm.apply(thePony.getMetadata());

View file

@ -8,7 +8,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.minelittlepony.MineLittlePony; import com.minelittlepony.MineLittlePony;
import com.minelittlepony.Pony; import com.minelittlepony.Pony;
import com.minelittlepony.PonyManager;
import com.minelittlepony.ducks.IPlayerInfo; import com.minelittlepony.ducks.IPlayerInfo;
import com.mojang.authlib.GameProfile;
import net.minecraft.client.network.NetworkPlayerInfo; import net.minecraft.client.network.NetworkPlayerInfo;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
@ -22,25 +24,26 @@ public abstract class MixinNetworkPlayerInfo implements IPlayerInfo {
@Shadow @Shadow
public abstract ResourceLocation getLocationSkin(); public abstract ResourceLocation getLocationSkin();
@Inject(method = "getSkinType()Ljava/lang/String;", at = @At("RETURN")) @Shadow
private void getSkinType(CallbackInfoReturnable<String> info) { public abstract GameProfile getGameProfile();
ResourceLocation skin = getLocationSkin();
if (skin != null) {
info.setReturnValue(getPony(skin).getRace(false).getModel().getId(usesSlimArms()));
}
}
protected Pony getPony(ResourceLocation skin) { @Inject(method = "getSkinType()Ljava/lang/String;", at = @At("RETURN"), cancellable = true)
return MineLittlePony.getInstance().getManager().getPony(skin, usesSlimArms()); private void getSkinType(CallbackInfoReturnable<String> info) {
info.setReturnValue(getPony().getRace(false).getModel().getId(usesSlimArms()));
} }
@Override @Override
public Pony getPony() { public Pony getPony() {
return getPony(getLocationSkin()); ResourceLocation skin = getLocationSkin();
if (skin == null) {
return MineLittlePony.getInstance().getManager().getDefaultPony(getGameProfile().getId());
}
return MineLittlePony.getInstance().getManager().getPony(skin, getGameProfile().getId());
} }
@Override @Override
public boolean usesSlimArms() { public boolean usesSlimArms() {
return skinType == "slim"; if (skinType == null) return PonyManager.isSlimSkin(getGameProfile().getId());
return "slim".equals(skinType);
} }
} }

View file

@ -41,9 +41,9 @@ public class ModelWing implements PonyModelConstants {
} }
private void init(float x, float y, float scale) { private void init(float x, float y, float scale) {
initFeather(folded[0], y, x, 2.0F, 6, scale); initFeather(folded[0], y, x, 2F, 6, scale);
initFeather(folded[1], y, x, 4.0F, 8, scale); initFeather(folded[1], y, x, 4F, 8, scale);
initFeather(folded[2], y, x, 6.0F, 6, scale); initFeather(folded[2], y, x, 6F, 6, scale);
} }
private void initFeather(ModelRenderer wing, float y, float x, float z, int h, float scale) { private void initFeather(ModelRenderer wing, float y, float x, float z, int h, float scale) {
@ -69,16 +69,12 @@ public class ModelWing implements PonyModelConstants {
extended[5].rotateAngleX -= 0.85F; extended[5].rotateAngleX -= 0.85F;
} }
private void renderWing(ModelRenderer[] wing, float scale) { public void render(boolean standing, float scale) {
for (ModelRenderer feather : wing) { for (ModelRenderer feather : (standing ? folded : extended)) {
feather.render(scale); feather.render(scale);
} }
} }
public void render(boolean standing, float scale) {
renderWing(standing ? folded : extended, scale);
}
public void rotateSneaked(float rotZ) { public void rotateSneaked(float rotZ) {
for (ModelRenderer feather : extended) { for (ModelRenderer feather : extended) {
feather.rotateAngleX = EXT_WING_ROTATE_ANGLE_X; feather.rotateAngleX = EXT_WING_ROTATE_ANGLE_X;

View file

@ -1,27 +1,33 @@
package com.minelittlepony.model; package com.minelittlepony.model;
public class PlayerModels { public enum PlayerModels {
public static final PlayerModels HUMAN("default", "slim", () -> PMAPI.human, () -> PMAPI.humanSmall),
HUMAN = new PlayerModels("default", "slim", PMAPI.human, PMAPI.humanSmall), PONY("pony", "slimpony", () -> PMAPI.pony, () -> PMAPI.ponySmall);
PONY = new PlayerModels("pony", "slimpony", PMAPI.pony, PMAPI.ponySmall);
private final PlayerModel normal, slim; private final ModelResolver normal, slim;
private final String normalKey, slimKey; private final String normalKey, slimKey;
public PlayerModels(String normalKey, String slimKey, PlayerModel normal, PlayerModel slim) { PlayerModels(String normalKey, String slimKey, ModelResolver normal, ModelResolver slim) {
this.normalKey = normalKey; this.normalKey = normalKey;
this.slimKey = slimKey; this.slimKey = slimKey;
this.normal = normal; this.normal = normal;
this.slim = slim; this.slim = slim;
} }
public PlayerModel getModel(boolean slim) { public PlayerModel getModel(boolean slim) {
return slim ? this.slim : this.normal; return slim ? this.slim.resolve() : this.normal.resolve();
} }
public String getId(boolean useSlimArms) { public String getId(boolean useSlimArms) {
return useSlimArms ? slimKey : normalKey; return useSlimArms ? slimKey : normalKey;
} }
/**
* FIXME: PMAPI fields are null when the game starts.
*/
static interface ModelResolver {
PlayerModel resolve();
}
} }

View file

@ -54,7 +54,7 @@ public abstract class RenderPonyMob<T extends EntityLiving> extends RenderLiving
this.playerModel.getModel().isSleeping = false; this.playerModel.getModel().isSleeping = false;
ResourceLocation loc = getEntityTexture(entity); ResourceLocation loc = getEntityTexture(entity);
this.playerModel.apply(MineLittlePony.getInstance().getManager().getPony(loc).getMetadata()); this.playerModel.apply(MineLittlePony.getInstance().getManager().getPony(loc, false).getMetadata());
if (mainModel.isChild) { if (mainModel.isChild) {
this.shadowSize = 0.25F; this.shadowSize = 0.25F;

View file

@ -6,7 +6,6 @@ import com.minelittlepony.ducks.IRenderManager;
import com.minelittlepony.ducks.IRenderPony; import com.minelittlepony.ducks.IRenderPony;
import com.minelittlepony.model.AbstractPonyModel; import com.minelittlepony.model.AbstractPonyModel;
import com.minelittlepony.model.PlayerModel; import com.minelittlepony.model.PlayerModel;
import com.minelittlepony.model.PlayerModels;
import com.minelittlepony.model.pony.ModelPlayerPony; import com.minelittlepony.model.pony.ModelPlayerPony;
import com.minelittlepony.renderer.layer.LayerEntityOnPonyShoulder; import com.minelittlepony.renderer.layer.LayerEntityOnPonyShoulder;
import com.minelittlepony.renderer.layer.LayerHeldPonyItem; import com.minelittlepony.renderer.layer.LayerHeldPonyItem;
@ -20,6 +19,7 @@ import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.client.renderer.entity.layers.LayerArrow; import net.minecraft.client.renderer.entity.layers.LayerArrow;
import net.minecraft.util.ResourceLocation;
public abstract class RenderPonyBase extends RenderPlayer implements IRenderPony { public abstract class RenderPonyBase extends RenderPlayer implements IRenderPony {
@ -30,16 +30,16 @@ public abstract class RenderPonyBase extends RenderPlayer implements IRenderPony
private Pony pony; private Pony pony;
public RenderPonyBase(RenderManager manager, boolean useSmallArms, PlayerModels model) { public RenderPonyBase(RenderManager manager, boolean useSmallArms, String id, PlayerModel model) {
super(manager, useSmallArms); super(manager, useSmallArms);
smallArms = useSmallArms; smallArms = useSmallArms;
setPlayerModel(model.getModel(useSmallArms)); setPlayerModel(model);
layerRenderers.clear(); layerRenderers.clear();
addExtraLayers(); addExtraLayers();
((IRenderManager)manager).addPlayerSkin(model.getId(useSmallArms), this); ((IRenderManager)manager).addPlayerSkin(id, this);
} }
protected void addExtraLayers() { protected void addExtraLayers() {
@ -75,12 +75,14 @@ public abstract class RenderPonyBase extends RenderPlayer implements IRenderPony
@Override @Override
public void renderRightArm(AbstractClientPlayer player) { public void renderRightArm(AbstractClientPlayer player) {
updateModel(player); updateModel(player);
bindEntityTexture(player);
super.renderRightArm(player); super.renderRightArm(player);
} }
@Override @Override
public void renderLeftArm(AbstractClientPlayer player) { public void renderLeftArm(AbstractClientPlayer player) {
updateModel(player); updateModel(player);
bindEntityTexture(player);
super.renderLeftArm(player); super.renderLeftArm(player);
} }
@ -126,9 +128,9 @@ public abstract class RenderPonyBase extends RenderPlayer implements IRenderPony
GlStateManager.rotate((float) Math.toDegrees(angle), 1, 0, 0); GlStateManager.rotate((float) Math.toDegrees(angle), 1, 0, 0);
} }
@Override public ResourceLocation getEntityTexture(AbstractClientPlayer entity) {
public AbstractPonyModel getMainModel() { updateModel(entity);
return (AbstractPonyModel)super.getMainModel(); return pony.getTexture();
} }
@Override @Override

View file

@ -1,15 +1,15 @@
package com.minelittlepony.renderer.player; package com.minelittlepony.renderer.player;
import com.minelittlepony.MineLittlePony; import com.minelittlepony.MineLittlePony;
import com.minelittlepony.model.PlayerModels; import com.minelittlepony.model.PlayerModel;
import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.RenderManager;
public class RenderPonyPlayer extends RenderPonyBase { public class RenderPonyPlayer extends RenderPonyBase {
public RenderPonyPlayer(RenderManager renderManager, boolean useSmallArms, PlayerModels model) { public RenderPonyPlayer(RenderManager renderManager, boolean useSmallArms, String id, PlayerModel model) {
super(renderManager, useSmallArms, model); super(renderManager, useSmallArms, id, model);
} }
@Override @Override

View file

@ -7,6 +7,7 @@
"mixins": [ "mixins": [
"MixinThreadDownloadImageData", "MixinThreadDownloadImageData",
"MixinNetworkPlayerInfo", "MixinNetworkPlayerInfo",
"MixinRenderItem" "MixinRenderItem",
"MixinRenderManager"
] ]
} }