mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-11-23 12:58:01 +01:00
Hey, they work! :D (v1)
This commit is contained in:
parent
4b6c49f6fa
commit
31ce31a109
7 changed files with 78 additions and 36 deletions
|
@ -4,6 +4,7 @@ import com.minelittlepony.gui.GuiPonySettings;
|
||||||
import com.minelittlepony.hdskins.gui.GuiSkinsMineLP;
|
import com.minelittlepony.hdskins.gui.GuiSkinsMineLP;
|
||||||
import com.minelittlepony.pony.data.IPonyData;
|
import com.minelittlepony.pony.data.IPonyData;
|
||||||
import com.minelittlepony.pony.data.PonyDataSerialzier;
|
import com.minelittlepony.pony.data.PonyDataSerialzier;
|
||||||
|
import com.minelittlepony.render.PonySkullRenderer;
|
||||||
import com.mumfrey.liteloader.core.LiteLoader;
|
import com.mumfrey.liteloader.core.LiteLoader;
|
||||||
import com.voxelmodpack.hdskins.HDSkinManager;
|
import com.voxelmodpack.hdskins.HDSkinManager;
|
||||||
import com.voxelmodpack.hdskins.skins.SkinServer;
|
import com.voxelmodpack.hdskins.skins.SkinServer;
|
||||||
|
@ -76,6 +77,8 @@ public class MineLittlePony {
|
||||||
RenderManager rm = minecraft.getRenderManager();
|
RenderManager rm = minecraft.getRenderManager();
|
||||||
renderManager.initialisePlayerRenderers(rm);
|
renderManager.initialisePlayerRenderers(rm);
|
||||||
renderManager.initializeMobRenderers(rm, config);
|
renderManager.initializeMobRenderers(rm, config);
|
||||||
|
|
||||||
|
PonySkullRenderer.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
void onTick(Minecraft minecraft, boolean inGame) {
|
void onTick(Minecraft minecraft, boolean inGame) {
|
||||||
|
|
|
@ -538,10 +538,8 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel {
|
||||||
((PonyRenderer)bipedHead).offset(HEAD_CENTRE_X, HEAD_CENTRE_Y, HEAD_CENTRE_Z)
|
((PonyRenderer)bipedHead).offset(HEAD_CENTRE_X, HEAD_CENTRE_Y, HEAD_CENTRE_Z)
|
||||||
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z - 2)
|
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z - 2)
|
||||||
.box(-4, -4, -4, 8, 8, 8, stretch)
|
.box(-4, -4, -4, 8, 8, 8, stretch)
|
||||||
.tex(12, 16)
|
.tex(12, 16).box(-4, -6, 1, 2, 2, 2, stretch)
|
||||||
.box(-4, -6, 1, 2, 2, 2, stretch)
|
.flip().box( 2, -6, 1, 2, 2, 2, stretch);
|
||||||
.flip()
|
|
||||||
.box(2, -6, 1, 2, 2, 2, stretch);
|
|
||||||
|
|
||||||
((PonyRenderer)bipedHeadwear).offset(HEAD_CENTRE_X, HEAD_CENTRE_Y, HEAD_CENTRE_Z)
|
((PonyRenderer)bipedHeadwear).offset(HEAD_CENTRE_X, HEAD_CENTRE_Y, HEAD_CENTRE_Z)
|
||||||
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z - 2)
|
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z - 2)
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.minelittlepony.model.components;
|
||||||
import com.minelittlepony.model.capabilities.ICapitated;
|
import com.minelittlepony.model.capabilities.ICapitated;
|
||||||
import com.minelittlepony.pony.data.IPonyData;
|
import com.minelittlepony.pony.data.IPonyData;
|
||||||
import com.minelittlepony.pony.data.PonyData;
|
import com.minelittlepony.pony.data.PonyData;
|
||||||
|
import com.minelittlepony.render.PonyRenderer;
|
||||||
|
|
||||||
import net.minecraft.client.model.ModelHumanoidHead;
|
import net.minecraft.client.model.ModelHumanoidHead;
|
||||||
import net.minecraft.client.model.ModelRenderer;
|
import net.minecraft.client.model.ModelRenderer;
|
||||||
|
@ -10,17 +11,27 @@ import net.minecraft.entity.Entity;
|
||||||
|
|
||||||
public class ModelPonyHead extends ModelHumanoidHead implements ICapitated {
|
public class ModelPonyHead extends ModelHumanoidHead implements ICapitated {
|
||||||
|
|
||||||
private final PonySnout snout;
|
private PonySnout snout;
|
||||||
|
|
||||||
private final UnicornHorn horn;
|
private final UnicornHorn horn;
|
||||||
|
|
||||||
|
private final PonyRenderer ears;
|
||||||
|
|
||||||
public IPonyData metadata = new PonyData();
|
public IPonyData metadata = new PonyData();
|
||||||
|
|
||||||
public ModelPonyHead() {
|
public ModelPonyHead() {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
snout = new PonySnout(this);
|
snout = new PonySnout(this, 0, -3, 2);
|
||||||
horn = new UnicornHorn(this, 0, 0);
|
horn = new UnicornHorn(this, 0, 0, 0, -1, 4);
|
||||||
|
|
||||||
|
snout.init(0, 0);
|
||||||
|
|
||||||
|
ears = new PonyRenderer(this, 0, 0).offset(0, -3, 2).around(0, 0, -2)
|
||||||
|
.tex(12, 16).box(-4, -6, 1, 2, 2, 2, 0)
|
||||||
|
.flip().box( 2, -6, 1, 2, 2, 2, 0);
|
||||||
|
|
||||||
|
skeletonHead.addChild(ears);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -30,12 +41,15 @@ public class ModelPonyHead extends ModelHumanoidHead implements ICapitated {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) {
|
public void render(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) {
|
||||||
|
snout.isHidden = metadata.getRace().isHuman();
|
||||||
|
ears.isHidden = snout.isHidden;
|
||||||
|
|
||||||
snout.setGender(metadata.getGender());
|
snout.setGender(metadata.getGender());
|
||||||
|
|
||||||
super.render(entity, move, swing, ticks, headYaw, headPitch, scale);
|
super.render(entity, move, swing, ticks, headYaw, headPitch, scale);
|
||||||
|
|
||||||
if (metadata.hasMagic()) {
|
if (metadata.hasMagic()) {
|
||||||
|
skeletonHead.postRender(scale);
|
||||||
horn.render(scale);
|
horn.render(scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,12 @@ public class PonySnout {
|
||||||
private PlaneRenderer stallion;
|
private PlaneRenderer stallion;
|
||||||
|
|
||||||
public <T extends ModelBase & ICapitated> PonySnout(T pony) {
|
public <T extends ModelBase & ICapitated> PonySnout(T pony) {
|
||||||
mare = new PlaneRenderer(pony);
|
this(pony, 0, 0, 0);
|
||||||
stallion = new PlaneRenderer(pony);
|
}
|
||||||
|
|
||||||
|
public <T extends ModelBase & ICapitated> PonySnout(T pony, int x, int y, int z) {
|
||||||
|
mare = new PlaneRenderer(pony).offset(HEAD_CENTRE_X + x, HEAD_CENTRE_Y + y, HEAD_CENTRE_Z + z);
|
||||||
|
stallion = new PlaneRenderer(pony).offset(HEAD_CENTRE_X + x, HEAD_CENTRE_Y + y, HEAD_CENTRE_Z + z);
|
||||||
|
|
||||||
pony.getHead().addChild(stallion);
|
pony.getHead().addChild(stallion);
|
||||||
pony.getHead().addChild(mare);
|
pony.getHead().addChild(mare);
|
||||||
|
@ -31,8 +35,7 @@ public class PonySnout {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(float yOffset, float stretch) {
|
public void init(float yOffset, float stretch) {
|
||||||
mare.offset(HEAD_CENTRE_X, HEAD_CENTRE_Y, HEAD_CENTRE_Z)
|
mare.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)
|
||||||
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)
|
|
||||||
.tex(10, 14) .addBackPlane(-2, 2, -5, 4, 2, stretch)
|
.tex(10, 14) .addBackPlane(-2, 2, -5, 4, 2, stretch)
|
||||||
.tex(11, 13) .addBackPlane(-1, 1, -5, 2, 1, stretch)
|
.tex(11, 13) .addBackPlane(-1, 1, -5, 2, 1, stretch)
|
||||||
.tex(9, 14) .addTopPlane(-2, 2, -5, 1, 1, stretch)
|
.tex(9, 14) .addTopPlane(-2, 2, -5, 1, 1, stretch)
|
||||||
|
@ -43,8 +46,7 @@ public class PonySnout {
|
||||||
.tex(14, 14) .addEastPlane( 2, 2, -5, 2, 1, stretch)
|
.tex(14, 14) .addEastPlane( 2, 2, -5, 2, 1, stretch)
|
||||||
.tex(11, 12) .addWestPlane(-1, 1, -5, 1, 1, stretch)
|
.tex(11, 12) .addWestPlane(-1, 1, -5, 1, 1, stretch)
|
||||||
.tex(12, 12) .addEastPlane( 1, 1, -5, 1, 1, stretch);
|
.tex(12, 12) .addEastPlane( 1, 1, -5, 1, 1, stretch);
|
||||||
stallion.offset(HEAD_CENTRE_X, HEAD_CENTRE_Y, HEAD_CENTRE_Z)
|
stallion.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)
|
||||||
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)
|
|
||||||
.tex(10, 13) .addBackPlane(-2, 1, -5, 4, 3, stretch)
|
.tex(10, 13) .addBackPlane(-2, 1, -5, 4, 3, stretch)
|
||||||
.tex(10, 13) .addTopPlane(-2, 1, -5, 4, 1, stretch)
|
.tex(10, 13) .addTopPlane(-2, 1, -5, 4, 1, stretch)
|
||||||
.tex(18, 7).addBottomPlane(-2, 4, -5, 4, 1, stretch)
|
.tex(18, 7).addBottomPlane(-2, 4, -5, 4, 1, stretch)
|
||||||
|
|
|
@ -16,15 +16,19 @@ public class UnicornHorn {
|
||||||
private HornGlowRenderer glow;
|
private HornGlowRenderer glow;
|
||||||
|
|
||||||
public <T extends ModelBase & ICapitated> UnicornHorn(T pony, float yOffset, float stretch) {
|
public <T extends ModelBase & ICapitated> UnicornHorn(T pony, float yOffset, float stretch) {
|
||||||
|
this(pony, yOffset, stretch, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends ModelBase & ICapitated> UnicornHorn(T pony, float yOffset, float stretch, int x, int y, int z) {
|
||||||
horn = new PonyRenderer(pony, 0, 3);
|
horn = new PonyRenderer(pony, 0, 3);
|
||||||
glow = new HornGlowRenderer(pony, 0, 3);
|
glow = new HornGlowRenderer(pony, 0, 3);
|
||||||
|
|
||||||
horn.offset(HORN_X, HORN_Y, HORN_Z)
|
horn.offset(HORN_X + x, HORN_Y + y, HORN_Z + z)
|
||||||
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)
|
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)
|
||||||
.box(0, 0, 0, 1, 4, 1, stretch)
|
.box(0, 0, 0, 1, 4, 1, stretch)
|
||||||
.rotateAngleX = 0.5F;
|
.rotateAngleX = 0.5F;
|
||||||
|
|
||||||
glow.offset(HORN_X, HORN_Y, HORN_Z)
|
glow.offset(HORN_X + x, HORN_Y + y, HORN_Z + z)
|
||||||
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)
|
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)
|
||||||
.setAlpha(0.4f).box(0, 0, 0, 1, 4, 1, stretch + 0.5F)
|
.setAlpha(0.4f).box(0, 0, 0, 1, 4, 1, stretch + 0.5F)
|
||||||
.setAlpha(0.2f).box(0, 0, 0, 1, 3, 1, stretch + 0.8F);
|
.setAlpha(0.2f).box(0, 0, 0, 1, 3, 1, stretch + 0.8F);
|
||||||
|
|
|
@ -82,6 +82,7 @@ public class LevitatingItemRenderer {
|
||||||
|
|
||||||
IRenderItem renderItem = (IRenderItem)Minecraft.getMinecraft().getRenderItem();
|
IRenderItem renderItem = (IRenderItem)Minecraft.getMinecraft().getRenderItem();
|
||||||
renderItem.useTransparency(true);
|
renderItem.useTransparency(true);
|
||||||
|
((IRenderItem)PonySkullRenderer.instance).useTransparency(true);
|
||||||
|
|
||||||
setColor(pony.getMetadata().getGlowColor());
|
setColor(pony.getMetadata().getGlowColor());
|
||||||
|
|
||||||
|
@ -93,6 +94,7 @@ public class LevitatingItemRenderer {
|
||||||
renderer.renderItemSide(entity, stack, transform, left);
|
renderer.renderItemSide(entity, stack, transform, left);
|
||||||
|
|
||||||
renderItem.useTransparency(false);
|
renderItem.useTransparency(false);
|
||||||
|
((IRenderItem)PonySkullRenderer.instance).useTransparency(false);
|
||||||
unsetColor();
|
unsetColor();
|
||||||
enableLighting();
|
enableLighting();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
package com.minelittlepony.render;
|
package com.minelittlepony.render;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
import com.minelittlepony.MineLittlePony;
|
import com.minelittlepony.MineLittlePony;
|
||||||
import com.minelittlepony.PonyConfig;
|
import com.minelittlepony.PonyConfig;
|
||||||
import com.minelittlepony.ducks.IRenderItem;
|
import com.minelittlepony.ducks.IRenderItem;
|
||||||
|
@ -18,9 +15,10 @@ import com.minelittlepony.render.ponies.RenderPonyZombie;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.minecraft.MinecraftProfileTexture;
|
import com.mojang.authlib.minecraft.MinecraftProfileTexture;
|
||||||
import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
|
import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
|
||||||
|
import com.mumfrey.liteloader.util.ModUtilities;
|
||||||
|
import com.voxelmodpack.hdskins.HDSkinManager;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.model.ModelBase;
|
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
import net.minecraft.client.renderer.GlStateManager.DestFactor;
|
import net.minecraft.client.renderer.GlStateManager.DestFactor;
|
||||||
import net.minecraft.client.renderer.GlStateManager.SourceFactor;
|
import net.minecraft.client.renderer.GlStateManager.SourceFactor;
|
||||||
|
@ -28,18 +26,43 @@ import net.minecraft.client.renderer.tileentity.TileEntitySkullRenderer;
|
||||||
import net.minecraft.client.resources.DefaultPlayerSkin;
|
import net.minecraft.client.resources.DefaultPlayerSkin;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.tileentity.TileEntitySkull;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
public class PonySkullRenderer extends TileEntitySkullRenderer implements IRenderItem {
|
public class PonySkullRenderer extends TileEntitySkullRenderer implements IRenderItem {
|
||||||
|
|
||||||
private final ModelPonyHead ponyHead = new ModelPonyHead();
|
private ModelPonyHead ponyHead = new ModelPonyHead();
|
||||||
|
|
||||||
private boolean renderAsPony = false;
|
private boolean renderAsPony = false;
|
||||||
|
|
||||||
protected boolean transparency = false;
|
protected boolean transparency = false;
|
||||||
|
|
||||||
public void renderSkull(float x, float y, float z, EnumFacing facing, float rotationIn, int skullType, @Nullable GameProfile profile, int destroyStage, float animateTicks, CallbackInfo info) {
|
private static final PonySkullRenderer ponyInstance = new PonySkullRenderer();
|
||||||
|
private static TileEntitySkullRenderer backup = null;
|
||||||
|
|
||||||
|
public static TileEntitySkullRenderer apply() {
|
||||||
|
if (instance != ponyInstance) {
|
||||||
|
backup = instance;
|
||||||
|
ModUtilities.addRenderer(TileEntitySkull.class, ponyInstance);
|
||||||
|
instance = ponyInstance;
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TileEntitySkullRenderer unapply() {
|
||||||
|
if (instance == ponyInstance && backup != null) {
|
||||||
|
ModUtilities.addRenderer(TileEntitySkull.class, backup);
|
||||||
|
instance = backup;
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PonySkullRenderer() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void renderSkull(float x, float y, float z, EnumFacing facing, float rotationIn, int skullType, @Nullable GameProfile profile, int destroyStage, float animateTicks) {
|
||||||
PonyConfig config = MineLittlePony.getConfig();
|
PonyConfig config = MineLittlePony.getConfig();
|
||||||
|
|
||||||
switch (skullType)
|
switch (skullType)
|
||||||
|
@ -73,11 +96,17 @@ public class PonySkullRenderer extends TileEntitySkullRenderer implements IRende
|
||||||
return RenderPonySkeleton.WITHER;
|
return RenderPonySkeleton.WITHER;
|
||||||
}
|
}
|
||||||
if (skullType == 2) {
|
if (skullType == 2) {
|
||||||
return RenderPonySkeleton.SKELETON;
|
return RenderPonyZombie.ZOMBIE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (skullType == 3) {
|
if (skullType == 3) {
|
||||||
if (profile != null) {
|
if (profile != null) {
|
||||||
|
Optional<ResourceLocation> skin = HDSkinManager.INSTANCE.getSkinLocation(profile, Type.SKIN, true);
|
||||||
|
if (skin.isPresent()) {
|
||||||
|
return skin.get();
|
||||||
|
}
|
||||||
|
|
||||||
Minecraft minecraft = Minecraft.getMinecraft();
|
Minecraft minecraft = Minecraft.getMinecraft();
|
||||||
Map<Type, MinecraftProfileTexture> map = minecraft.getSkinManager().loadSkinFromCache(profile);
|
Map<Type, MinecraftProfileTexture> map = minecraft.getSkinManager().loadSkinFromCache(profile);
|
||||||
|
|
||||||
|
@ -91,7 +120,7 @@ public class PonySkullRenderer extends TileEntitySkullRenderer implements IRende
|
||||||
return DefaultPlayerSkin.getDefaultSkinLegacy();
|
return DefaultPlayerSkin.getDefaultSkinLegacy();
|
||||||
}
|
}
|
||||||
|
|
||||||
return RenderPonyZombie.ZOMBIE;
|
return RenderPonySkeleton.SKELETON;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderPonySkull(float x, float y, float z, EnumFacing facing, float rotationIn, int skullType, @Nullable GameProfile profile, int destroyStage, float animateTicks) {
|
public void renderPonySkull(float x, float y, float z, EnumFacing facing, float rotationIn, int skullType, @Nullable GameProfile profile, int destroyStage, float animateTicks) {
|
||||||
|
@ -152,18 +181,8 @@ public class PonySkullRenderer extends TileEntitySkullRenderer implements IRende
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "renderSkull(FFFLnet/minecraft/util/EnumFacing;FILcom/mojang/authlib/GameProfile;IF)V",
|
@Override
|
||||||
at = @At(value = "INVOKE",
|
protected void bindTexture(ResourceLocation location) {
|
||||||
target = "Lnet/minecraft/client/model/ModelBase;render(Let/minecraft/entity/Entity;FFFFFFF)V"))
|
|
||||||
private void redirectRender(ModelBase self, Entity entity, float ticks, float swing, float swingAmount, float age, float headYaw, float headPitch, float scale) {
|
|
||||||
if (renderAsPony) {
|
|
||||||
self = ponyHead;
|
|
||||||
}
|
|
||||||
|
|
||||||
self.render(entity, swing, swingAmount, age, headYaw, headPitch, scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void bindTexture(ResourceLocation location, CallbackInfo info) {
|
|
||||||
Pony pony = MineLittlePony.getInstance().getManager().getPony(location, false);
|
Pony pony = MineLittlePony.getInstance().getManager().getPony(location, false);
|
||||||
ponyHead.metadata = pony.getMetadata();
|
ponyHead.metadata = pony.getMetadata();
|
||||||
super.bindTexture(location);
|
super.bindTexture(location);
|
||||||
|
|
Loading…
Reference in a new issue