mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-13 08:14:23 +01:00
Updating to 1.15-pre1 part 3
This commit is contained in:
parent
4cc6d03fce
commit
e1109223c2
14 changed files with 194 additions and 219 deletions
|
@ -105,31 +105,4 @@ public abstract class ClientPonyModel<T extends LivingEntity> extends PlayerEnti
|
||||||
((ClientPonyModel<T>)model).metadata = metadata;
|
((ClientPonyModel<T>)model).metadata = metadata;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@Override
|
|
||||||
public ModelPart getRandomCuboid(Random rand) {
|
|
||||||
// grab one at random, but cycle through the list until you find one that's filled.
|
|
||||||
// Return if you find one, or if you get back to where you started in which case there isn't any.
|
|
||||||
|
|
||||||
int randomI = rand.nextInt(cuboidList.size());
|
|
||||||
int index = randomI;
|
|
||||||
|
|
||||||
ModelPart result;
|
|
||||||
do {
|
|
||||||
result = cuboidList.get(randomI);
|
|
||||||
if (!result.cuboids.isEmpty()) return result;
|
|
||||||
|
|
||||||
index = (index + 1) % cuboidList.size();
|
|
||||||
} while (index != randomI);
|
|
||||||
|
|
||||||
if (result.cuboids.isEmpty()) {
|
|
||||||
result.addCuboid(0, 0, 0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.cuboids.isEmpty()) {
|
|
||||||
throw new IllegalStateException("This model contains absolutely no boxes and a box could not be added!");
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,7 +83,7 @@ public class ModelPonyArmour<T extends LivingEntity> extends AbstractPonyModel<T
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
protected void initBody(float yOffset, float stretch) {
|
protected void initBody(float yOffset, float stretch) {
|
||||||
super.initBody(yOffset, stretch);
|
//super.initBody(yOffset, stretch);
|
||||||
|
|
||||||
chestPiece = new com.minelittlepony.client.util.render.Part(this, 16, 8)
|
chestPiece = new com.minelittlepony.client.util.render.Part(this, 16, 8)
|
||||||
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)
|
.around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)
|
||||||
|
@ -114,7 +114,7 @@ public class ModelPonyArmour<T extends LivingEntity> extends AbstractPonyModel<T
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
protected void initLegs(float yOffset, float stretch) {
|
protected void initLegs(float yOffset, float stretch) {
|
||||||
super.initLegs(yOffset, stretch);
|
//super.initLegs(yOffset, stretch);
|
||||||
|
|
||||||
int armLength = attributes.armLength;
|
int armLength = attributes.armLength;
|
||||||
int armWidth = attributes.armWidth;
|
int armWidth = attributes.armWidth;
|
||||||
|
|
|
@ -5,15 +5,17 @@ import com.minelittlepony.client.util.render.Part;
|
||||||
import com.minelittlepony.model.ICapitated;
|
import com.minelittlepony.model.ICapitated;
|
||||||
import com.minelittlepony.pony.IPonyData;
|
import com.minelittlepony.pony.IPonyData;
|
||||||
import net.minecraft.client.model.ModelPart;
|
import net.minecraft.client.model.ModelPart;
|
||||||
|
import net.minecraft.client.render.VertexConsumer;
|
||||||
import net.minecraft.client.render.entity.model.SkullOverlayEntityModel;
|
import net.minecraft.client.render.entity.model.SkullOverlayEntityModel;
|
||||||
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
|
|
||||||
public class ModelPonyHead extends SkullOverlayEntityModel implements ICapitated<ModelPart> {
|
public class ModelPonyHead extends SkullOverlayEntityModel implements ICapitated<ModelPart> {
|
||||||
|
|
||||||
private PonySnout snout;
|
private PonySnout snout;
|
||||||
|
|
||||||
private final UnicornHorn horn;
|
private UnicornHorn horn;
|
||||||
|
|
||||||
private final Part ears;
|
private ModelPart ears;
|
||||||
|
|
||||||
public IPonyData metadata = new PonyData();
|
public IPonyData metadata = new PonyData();
|
||||||
|
|
||||||
|
@ -44,17 +46,17 @@ public class ModelPonyHead extends SkullOverlayEntityModel implements ICapitated
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(float move, float swing, float ticks, float headYaw, float headPitch, float scale) {
|
public void render(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) {
|
||||||
snout.isHidden = metadata.getRace().isHuman();
|
snout.isHidden = metadata.getRace().isHuman();
|
||||||
ears.field_3664 = snout.isHidden;
|
ears.visible = !snout.isHidden;
|
||||||
|
|
||||||
snout.setGender(metadata.getGender());
|
snout.setGender(metadata.getGender());
|
||||||
|
|
||||||
super.render(move, swing, ticks, headYaw, headPitch, scale);
|
super.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
|
||||||
|
|
||||||
if (metadata.hasHorn()) {
|
if (metadata.hasHorn()) {
|
||||||
getHead().applyTransform(scale);
|
getHead().rotate(stack);
|
||||||
horn.renderPart(scale, null);
|
horn.renderPart(stack, vertices, overlayUv, lightUv, red, green, blue, alpha, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,11 +45,6 @@ public class PonyElytra<T extends LivingEntity> extends AnimalModel<T> {
|
||||||
super.method_22696(t);
|
super.method_22696(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float limbDistance, float limbAngle, float tickDelta, float alpha) {
|
|
||||||
super.render(stack, vertices, overlayUv, lightUv, limbDistance, limbAngle, tickDelta, alpha);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the model's various rotation angles.
|
* Sets the model's various rotation angles.
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.minelittlepony.client.model.components;
|
package com.minelittlepony.client.model.components;
|
||||||
|
|
||||||
import net.minecraft.client.model.Model;
|
import net.minecraft.client.model.Model;
|
||||||
|
import net.minecraft.client.model.ModelPart;
|
||||||
import net.minecraft.client.render.VertexConsumer;
|
import net.minecraft.client.render.VertexConsumer;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
@ -22,12 +23,9 @@ public class PonyTail extends Part implements IPart {
|
||||||
public PonyTail(AbstractPonyModel<?> model) {
|
public PonyTail(AbstractPonyModel<?> model) {
|
||||||
super(model);
|
super(model);
|
||||||
theModel = model;
|
theModel = model;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(float yOffset, float stretch) {
|
|
||||||
for (int i = 0; i < SEGMENTS; i++) {
|
for (int i = 0; i < SEGMENTS; i++) {
|
||||||
addChild(new TailSegment(theModel, i, yOffset, stretch));
|
addChild(new TailSegment(theModel, i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,39 +80,35 @@ public class PonyTail extends Part implements IPart {
|
||||||
render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
|
render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TailSegment extends Part {
|
private class TailSegment extends ModelPart {
|
||||||
|
|
||||||
private final int index;
|
private final int index;
|
||||||
|
|
||||||
public TailSegment(Model model, int index, float yOffset, float stretch) {
|
public TailSegment(Model model, int index) {
|
||||||
super(model);
|
super(model);
|
||||||
this.index = index;
|
this.index = index;
|
||||||
|
|
||||||
y = ((float)index)/4 + 0.063f;
|
pivotY = ((float)index)/4 + 0.063f;
|
||||||
|
|
||||||
init(yOffset, stretch);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void init(float yOffset, float stretch) {
|
|
||||||
int texX = (index % 2) * 4;
|
int texX = (index % 2) * 4;
|
||||||
|
|
||||||
around(TAIL_RP_X, TAIL_RP_Y + yOffset, 0);
|
around(TAIL_RP_X, TAIL_RP_Y, 0);
|
||||||
|
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
tex(32, 0).top(-2, 0, 2, 4, 4, stretch);
|
tex(32, 0).top(-2, 0, 2, 4, 4, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
tex(36, texX) .east( 2, 0, 2, 4, 4, stretch)
|
tex(36, texX) .east( 2, 0, 2, 4, 4, 0)
|
||||||
.west(-2, 0, 2, 4, 4, stretch);
|
.west(-2, 0, 2, 4, 4, 0);
|
||||||
tex(32, texX).south(-2, 0, 2, 4, 4, stretch)
|
tex(32, texX).south(-2, 0, 2, 4, 4, 0)
|
||||||
.north(-2, 0, 6, 4, 4, stretch);
|
.north(-2, 0, 6, 4, 4, 0);
|
||||||
tex(32, 0) .bottom(-2, 4, 2, 4, 4, stretch);
|
tex(32, 0) .bottom(-2, 4, 2, 4, 4, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(float scale) {
|
public void render(MatrixStack stack, VertexConsumer renderContext, int overlayUv, int lightUv, float red, float green, float blue, float alpha) {
|
||||||
if (index < tailStop) {
|
if (index < tailStop) {
|
||||||
super.render(scale);
|
super.render(stack, renderContext, overlayUv, lightUv, red, green, blue, alpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,7 @@ import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
|
||||||
|
|
||||||
import com.minelittlepony.client.util.render.Color;
|
import com.minelittlepony.client.util.render.Color;
|
||||||
import com.minelittlepony.client.util.render.Part;
|
|
||||||
import com.minelittlepony.model.BodyPart;
|
import com.minelittlepony.model.BodyPart;
|
||||||
import com.minelittlepony.model.IModel;
|
import com.minelittlepony.model.IModel;
|
||||||
import com.minelittlepony.pony.meta.Wearable;
|
import com.minelittlepony.pony.meta.Wearable;
|
||||||
|
@ -20,34 +17,27 @@ import java.util.UUID;
|
||||||
|
|
||||||
public class ChristmasHat extends AbstractGear {
|
public class ChristmasHat extends AbstractGear {
|
||||||
|
|
||||||
|
private static boolean dayChecked = false;
|
||||||
|
private static boolean dayResult = false;
|
||||||
|
private static boolean isChristmasDay() {
|
||||||
|
if (!dayChecked) {
|
||||||
|
dayChecked = true;
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
dayResult = cal.get(Calendar.MONTH) == Calendar.DECEMBER
|
||||||
|
&& cal.get(Calendar.DAY_OF_MONTH) == 25;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return dayResult;
|
||||||
|
}
|
||||||
|
|
||||||
private static final Identifier TEXTURE = new Identifier("minelittlepony", "textures/models/antlers.png");
|
private static final Identifier TEXTURE = new Identifier("minelittlepony", "textures/models/antlers.png");
|
||||||
|
|
||||||
private Part left;
|
private ModelPart left;
|
||||||
private Part right;
|
private ModelPart right;
|
||||||
|
|
||||||
private int tint;
|
private int tint;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(float yOffset, float stretch) {
|
|
||||||
accept(left = new Part(this, 0, 0).size(16, 8)
|
|
||||||
.around(-7, 0.5F, 0.5F)
|
|
||||||
.offset(-7, 0, 0)
|
|
||||||
.at(3, -4, 0)
|
|
||||||
.box(0, 0, 0, 7, 1, 1, stretch)
|
|
||||||
.tex(0, 2).box(0, -1, 0, 1, 1, 1, stretch)
|
|
||||||
.tex(4, 2).box(2, -1, 0, 1, 1, 1, stretch)
|
|
||||||
.tex(8, 2).box(4, -1, 0, 1, 1, 1, stretch));
|
|
||||||
|
|
||||||
accept(right = new Part(this, 0, 4).size(16, 8)
|
|
||||||
.around(7, 0.5F, 0.5F)
|
|
||||||
.offset(0, 0, 0)
|
|
||||||
.at(-3, -4, 0)
|
|
||||||
.box(0, 0, 0, 7, 1, 1, stretch)
|
|
||||||
.tex(0, 6).box(6, -1, 0, 1, 1, 1, stretch)
|
|
||||||
.tex(4, 6).box(4, -1, 0, 1, 1, 1, stretch)
|
|
||||||
.tex(8, 6).box(2, -1, 0, 1, 1, 1, stretch));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canRender(IModel model, Entity entity) {
|
public boolean canRender(IModel model, Entity entity) {
|
||||||
return isChristmasDay() || model.isWearing(Wearable.ANTLERS);
|
return isChristmasDay() || model.isWearing(Wearable.ANTLERS);
|
||||||
|
@ -73,12 +63,6 @@ public class ChristmasHat extends AbstractGear {
|
||||||
right.roll = -bodySwing;
|
right.roll = -bodySwing;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isChristmasDay() {
|
|
||||||
Calendar cal = Calendar.getInstance();
|
|
||||||
|
|
||||||
return cal.get(Calendar.MONTH) == Calendar.DECEMBER && cal.get(Calendar.DAY_OF_MONTH) == 25;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BodyPart getGearLocation() {
|
public BodyPart getGearLocation() {
|
||||||
return BodyPart.HEAD;
|
return BodyPart.HEAD;
|
||||||
|
@ -91,14 +75,13 @@ public class ChristmasHat extends AbstractGear {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderPart(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha, UUID interpolatorId) {
|
public void renderPart(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha, UUID interpolatorId) {
|
||||||
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
|
|
||||||
|
|
||||||
if (tint != 0) {
|
if (tint != 0) {
|
||||||
Color.glColor(tint, 1);
|
red = Color.r(tint);
|
||||||
|
green = Color.g(tint);
|
||||||
|
blue = Color.b(tint);
|
||||||
}
|
}
|
||||||
|
|
||||||
super.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
|
left.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
|
||||||
|
right.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
|
||||||
GL11.glPopAttrib();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,29 +3,15 @@ package com.minelittlepony.client.model.gear;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
import com.minelittlepony.client.util.render.Part;
|
|
||||||
import com.minelittlepony.model.BodyPart;
|
import com.minelittlepony.model.BodyPart;
|
||||||
import com.minelittlepony.model.IModel;
|
import com.minelittlepony.model.IModel;
|
||||||
import com.minelittlepony.model.gear.IStackable;
|
import com.minelittlepony.model.gear.IStackable;
|
||||||
import com.minelittlepony.pony.meta.Wearable;
|
import com.minelittlepony.pony.meta.Wearable;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class Muffin extends AbstractGear implements IStackable {
|
public class Muffin extends AbstractGear implements IStackable {
|
||||||
|
|
||||||
private static final Identifier TEXTURE = new Identifier("minelittlepony", "textures/models/muffin.png");
|
private static final Identifier TEXTURE = new Identifier("minelittlepony", "textures/models/muffin.png");
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(float yOffset, float stretch) {
|
|
||||||
this.accept(new Part(this, 0, 0).size(64, 44)
|
|
||||||
.around(-4, -12, -6)
|
|
||||||
.box(0, 0, 0, 8, 4, 8, stretch)
|
|
||||||
.box(3, -1.5F, 3, 2, 2, 2, stretch)
|
|
||||||
.tex(0, 12).box(1.5F, -1, 1.5F, 5, 1, 5, stretch)
|
|
||||||
.tex(0, 18).box(2, 1, 1, 4, 7, 6, stretch)
|
|
||||||
.tex(0, 18).box(1, 1, 2, 6, 7, 4, stretch));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canRender(IModel model, Entity entity) {
|
public boolean canRender(IModel model, Entity entity) {
|
||||||
return model.isWearing(Wearable.MUFFIN);
|
return model.isWearing(Wearable.MUFFIN);
|
||||||
|
|
|
@ -3,33 +3,14 @@ package com.minelittlepony.client.model.gear;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
import com.minelittlepony.client.util.render.Part;
|
|
||||||
import com.minelittlepony.model.BodyPart;
|
import com.minelittlepony.model.BodyPart;
|
||||||
import com.minelittlepony.model.IModel;
|
import com.minelittlepony.model.IModel;
|
||||||
import com.minelittlepony.model.gear.IStackable;
|
import com.minelittlepony.model.gear.IStackable;
|
||||||
import com.minelittlepony.pony.meta.Wearable;
|
import com.minelittlepony.pony.meta.Wearable;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class Stetson extends AbstractGear implements IStackable {
|
public class Stetson extends AbstractGear implements IStackable {
|
||||||
private static final Identifier TEXTURE = new Identifier("minelittlepony", "textures/models/stetson.png");
|
private static final Identifier TEXTURE = new Identifier("minelittlepony", "textures/models/stetson.png");
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(float yOffset, float stretch) {
|
|
||||||
accept(rimshot = new Part(this).size(64, 64)
|
|
||||||
.tex(16, 33).top(-9, yOffset - 4, -12, 16, 17, stretch)
|
|
||||||
.tex(0, 33).bottom(-9, yOffset - 3.999F, -12, 16, 17, stretch)
|
|
||||||
.rotate(-0.3F, 0, 0.1F)
|
|
||||||
.child(new Part(this).size(64, 64)
|
|
||||||
.tex(0, 0).box(-5, yOffset - 8, -6, 9, 4, 9, stretch)
|
|
||||||
.tex(0, 13).box(-6, yOffset - 6, -7, 11, 2, 11, stretch)));
|
|
||||||
|
|
||||||
rimshot.child()
|
|
||||||
.around(-9, yOffset - 4, -12)
|
|
||||||
.tex(0, 27).south(0, yOffset - 6, 0, 16, 6, stretch)
|
|
||||||
.rotate(0.4F, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BodyPart getGearLocation() {
|
public BodyPart getGearLocation() {
|
||||||
return BodyPart.HEAD;
|
return BodyPart.HEAD;
|
||||||
|
|
|
@ -2,13 +2,13 @@ package com.minelittlepony.client.render.tileentities.skull;
|
||||||
|
|
||||||
import com.minelittlepony.client.SkinsProxy;
|
import com.minelittlepony.client.SkinsProxy;
|
||||||
import com.minelittlepony.client.model.components.ModelDeadMau5Ears;
|
import com.minelittlepony.client.model.components.ModelDeadMau5Ears;
|
||||||
import com.minelittlepony.client.render.RenderPony;
|
|
||||||
import com.minelittlepony.settings.PonyConfig;
|
import com.minelittlepony.settings.PonyConfig;
|
||||||
import com.minelittlepony.settings.PonyLevel;
|
import com.minelittlepony.settings.PonyLevel;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
|
||||||
|
|
||||||
|
import net.minecraft.client.render.VertexConsumer;
|
||||||
import net.minecraft.client.util.DefaultSkinHelper;
|
import net.minecraft.client.util.DefaultSkinHelper;
|
||||||
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
@ -23,15 +23,6 @@ public class PlayerSkullRenderer extends PonySkull {
|
||||||
return config.ponyLevel.get() != PonyLevel.HUMANS;
|
return config.ponyLevel.get() != PonyLevel.HUMANS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void preRender(boolean transparency) {
|
|
||||||
GlStateManager.setProfile(GlStateManager.RenderMode.PLAYER_SKIN);
|
|
||||||
|
|
||||||
if (!transparency) {
|
|
||||||
RenderPony.enableModelRenderProfile(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Identifier getSkinResource(@Nullable GameProfile profile) {
|
public Identifier getSkinResource(@Nullable GameProfile profile) {
|
||||||
deadMau5.setVisible(profile != null && "deadmau5".equals(profile.getName()));
|
deadMau5.setVisible(profile != null && "deadmau5".equals(profile.getName()));
|
||||||
|
@ -50,8 +41,8 @@ public class PlayerSkullRenderer extends PonySkull {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(float animateTicks, float rotation, float scale) {
|
public void render(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) {
|
||||||
super.render(animateTicks, rotation, scale);
|
super.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
|
||||||
deadMau5.render(animateTicks, 0, 0, rotation, 0, scale);
|
deadMau5.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
package com.minelittlepony.client.render.tileentities.skull;
|
package com.minelittlepony.client.render.tileentities.skull;
|
||||||
|
|
||||||
|
import net.minecraft.client.render.VertexConsumer;
|
||||||
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.components.ModelPonyHead;
|
import com.minelittlepony.client.model.components.ModelPonyHead;
|
||||||
import com.minelittlepony.client.render.tileentities.skull.PonySkullRenderer.ISkull;
|
import com.minelittlepony.client.render.tileentities.skull.PonySkullRenderer.ISkull;
|
||||||
import com.minelittlepony.pony.IPony;
|
import com.minelittlepony.pony.IPony;
|
||||||
|
@ -19,7 +22,7 @@ public abstract class PonySkull implements ISkull {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(float animateTicks, float rotation, float scale) {
|
public void render(MatrixStack stack, VertexConsumer vertices, int lightUv, int overlayUv, float red, float green, float blue, float alpha) {
|
||||||
ponyHead.render(animateTicks, 0, 0, rotation, 0, scale);
|
ponyHead.render(stack, vertices, lightUv, overlayUv, red, green, blue, alpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -8,29 +8,31 @@ import com.minelittlepony.settings.PonyConfig;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry;
|
import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry;
|
||||||
|
import net.minecraft.block.AbstractSkullBlock;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.SkullBlock;
|
import net.minecraft.block.SkullBlock;
|
||||||
|
import net.minecraft.block.WallSkullBlock;
|
||||||
import net.minecraft.block.entity.BlockEntityType;
|
import net.minecraft.block.entity.BlockEntityType;
|
||||||
import net.minecraft.block.entity.SkullBlockEntity;
|
import net.minecraft.block.entity.SkullBlockEntity;
|
||||||
|
import net.minecraft.client.render.OverlayTexture;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import net.minecraft.client.render.VertexConsumer;
|
||||||
|
import net.minecraft.client.render.VertexConsumerProvider;
|
||||||
|
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
|
||||||
import net.minecraft.client.render.block.entity.SkullBlockEntityRenderer;
|
import net.minecraft.client.render.block.entity.SkullBlockEntityRenderer;
|
||||||
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.Util;
|
import net.minecraft.util.Util;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import static com.mojang.blaze3d.platform.GlStateManager.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PonySkullRenderer! It renders ponies as skulls, or something...
|
* PonySkullRenderer! It renders ponies as skulls, or something...
|
||||||
*/
|
*/
|
||||||
public class PonySkullRenderer extends SkullBlockEntityRenderer {
|
public class PonySkullRenderer extends SkullBlockEntityRenderer {
|
||||||
|
|
||||||
private static final PonySkullRenderer ponyInstance = new PonySkullRenderer();
|
|
||||||
private static SkullBlockEntityRenderer backup = null;
|
|
||||||
|
|
||||||
private static final Map<SkullBlock.SkullType, ISkull> skullMap = Util.create(Maps.newHashMap(), (skullMap) -> {
|
private static final Map<SkullBlock.SkullType, ISkull> skullMap = Util.create(Maps.newHashMap(), (skullMap) -> {
|
||||||
skullMap.put(SkullBlock.Type.SKELETON, new SkeletonSkullRenderer());
|
skullMap.put(SkullBlock.Type.SKELETON, new SkeletonSkullRenderer());
|
||||||
skullMap.put(SkullBlock.Type.WITHER_SKELETON, new WitherSkullRenderer());
|
skullMap.put(SkullBlock.Type.WITHER_SKELETON, new WitherSkullRenderer());
|
||||||
|
@ -39,103 +41,91 @@ public class PonySkullRenderer extends SkullBlockEntityRenderer {
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolves the games skull renderer to either a specialised pony skull renderer
|
* Resolves the games skull renderer to either a special pony skull renderer
|
||||||
* or some other skull renderer depending on the ponyskulls state.
|
* or some other skull renderer depending on the ponyskull's state.
|
||||||
*
|
|
||||||
* Original/Existing renderer is stored to a backup variable as a fallback in case of mods.
|
|
||||||
*/
|
*/
|
||||||
public static void resolve(boolean ponySkulls) {
|
public static void resolve(boolean ponySkulls) {
|
||||||
if (ponySkulls) {
|
if (ponySkulls) {
|
||||||
if (!(INSTANCE instanceof PonySkullRenderer)) {
|
BlockEntityRendererRegistry.INSTANCE.register(BlockEntityType.SKULL, new PonySkullRenderer(BlockEntityRenderDispatcher.INSTANCE));
|
||||||
backup = INSTANCE;
|
|
||||||
BlockEntityRendererRegistry.INSTANCE.register(BlockEntityType.SKULL, ponyInstance);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if ((INSTANCE instanceof PonySkullRenderer)) {
|
BlockEntityRendererRegistry.INSTANCE.register(BlockEntityType.SKULL, new SkullBlockEntityRenderer(BlockEntityRenderDispatcher.INSTANCE));
|
||||||
if (backup == null) {
|
|
||||||
backup = new SkullBlockEntityRenderer();
|
|
||||||
}
|
|
||||||
BlockEntityRendererRegistry.INSTANCE.register(BlockEntityType.SKULL, backup);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PonySkullRenderer(BlockEntityRenderDispatcher dispatcher) {
|
||||||
|
super(dispatcher);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(float x, float y, float z, @Nullable Direction facing, float rotation, SkullBlock.SkullType skullType, @Nullable GameProfile profile, int destroyStage, float animateTicks) {
|
public void render(SkullBlockEntity skullBlockEntity, float f, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, int j) {
|
||||||
|
float poweredTicks = skullBlockEntity.getTicksPowered(f);
|
||||||
|
BlockState state = skullBlockEntity.getCachedState();
|
||||||
|
|
||||||
|
boolean onWalll = state.getBlock() instanceof WallSkullBlock;
|
||||||
|
|
||||||
|
Direction direction = onWalll ? (Direction)state.get(WallSkullBlock.FACING) : null;
|
||||||
|
|
||||||
|
float angle = 22.5F * (direction != null ? (2 + direction.getHorizontal()) * 4F : (Integer)state.get(SkullBlock.ROTATION));
|
||||||
|
|
||||||
|
render(direction,
|
||||||
|
angle,
|
||||||
|
((AbstractSkullBlock)state.getBlock()).getSkullType(),
|
||||||
|
skullBlockEntity.getOwner(), poweredTicks,
|
||||||
|
matrixStack, vertexConsumerProvider, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void render(@Nullable Direction direction, float angle,
|
||||||
|
SkullBlock.SkullType skullType, @Nullable GameProfile profile, float poweredTicks,
|
||||||
|
MatrixStack stack, VertexConsumerProvider renderContext, int lightUv) {
|
||||||
|
|
||||||
ISkull skull = skullMap.get(skullType);
|
ISkull skull = skullMap.get(skullType);
|
||||||
|
|
||||||
if (skull == null || !skull.canRender(MineLittlePony.getInstance().getConfig())) {
|
if (skull == null || !skull.canRender(MineLittlePony.getInstance().getConfig())) {
|
||||||
if (backup != null) {
|
SkullBlockEntityRenderer.render(direction, angle, skullType, profile, poweredTicks, stack, renderContext, lightUv);
|
||||||
backup.render(x, y, z, facing, rotation, skullType, profile, destroyStage, animateTicks);
|
|
||||||
} else {
|
|
||||||
super.render(x, y, z, facing, rotation, skullType, profile, destroyStage, animateTicks);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
float scale = 0.0625F;
|
Identifier skin = skull.getSkinResource(profile);
|
||||||
|
|
||||||
if (destroyStage >= 0) {
|
skull.bindPony(MineLittlePony.getInstance().getManager().getPony(skin));
|
||||||
bindTexture(DESTROY_STAGE_TEXTURES[destroyStage]);
|
|
||||||
matrixMode(GL11.GL_TEXTURE);
|
|
||||||
pushMatrix();
|
|
||||||
scalef(4, 2, 1);
|
|
||||||
translatef(scale, scale, scale);
|
|
||||||
matrixMode(GL11.GL_MODELVIEW);
|
|
||||||
} else {
|
|
||||||
Identifier skin = skull.getSkinResource(profile);
|
|
||||||
|
|
||||||
skull.bindPony(MineLittlePony.getInstance().getManager().getPony(skin));
|
stack.push();
|
||||||
|
|
||||||
bindTexture(skin);
|
handleRotation(stack, direction);
|
||||||
}
|
|
||||||
|
|
||||||
pushMatrix();
|
|
||||||
disableCull();
|
|
||||||
|
|
||||||
rotation = handleRotation(x, y, z, facing, rotation);
|
|
||||||
|
|
||||||
enableRescaleNormal();
|
|
||||||
scalef(-1, -1, 1);
|
|
||||||
enableAlphaTest();
|
|
||||||
|
|
||||||
|
stack.scale(-1, -1, 1);
|
||||||
skull.preRender(LevitatingItemRenderer.usesTransparency());
|
skull.preRender(LevitatingItemRenderer.usesTransparency());
|
||||||
skull.render(animateTicks, rotation, scale);
|
|
||||||
|
|
||||||
popMatrix();
|
|
||||||
|
|
||||||
if (destroyStage >= 0) {
|
VertexConsumer vertices = renderContext.getBuffer(RenderLayer.getEntityTranslucent(skin));
|
||||||
matrixMode(GL11.GL_TEXTURE);
|
|
||||||
popMatrix();
|
skull.render(stack, vertices, lightUv, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);
|
||||||
matrixMode(GL11.GL_MODELVIEW);
|
|
||||||
}
|
stack.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected float handleRotation(float x, float y, float z, @Nullable Direction facing, float rotation) {
|
static void handleRotation(MatrixStack stack, @Nullable Direction direction) {
|
||||||
if (facing == null) {
|
if (direction == null) {
|
||||||
translatef(x + 0.5F, y, z + 0.5F);
|
stack.translate(0.5, 0, 0.5);
|
||||||
|
return;
|
||||||
return rotation;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (facing) {
|
switch (direction) {
|
||||||
case NORTH:
|
case NORTH:
|
||||||
translatef(x + 0.5F, y + 0.25F, z + 0.74F);
|
stack.translate(0.5, 0.25, 0.74);
|
||||||
break;
|
break;
|
||||||
case SOUTH:
|
case SOUTH:
|
||||||
translatef(x + 0.5F, y + 0.25F, z + 0.26F);
|
stack.translate(0.5, 0.25, 0.26);
|
||||||
return 180;
|
break;
|
||||||
case WEST:
|
case WEST:
|
||||||
translatef(x + 0.74F, y + 0.25F, z + 0.5F);
|
stack.translate(0.74, 0.25, 0.5);
|
||||||
return 270;
|
break;
|
||||||
case EAST:
|
case EAST:
|
||||||
default:
|
default:
|
||||||
translatef(x + 0.26F, y + 0.25F, z + 0.5F);
|
stack.translate(0.26, 0.25, 0.5);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return rotation;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -147,7 +137,7 @@ public class PonySkullRenderer extends SkullBlockEntityRenderer {
|
||||||
|
|
||||||
void preRender(boolean transparency);
|
void preRender(boolean transparency);
|
||||||
|
|
||||||
void render(float animateTicks, float rotation, float scale);
|
void render(MatrixStack stack, VertexConsumer vertices, int lightUv, int overlayUv, float red, float green, float blue, float alpha);
|
||||||
|
|
||||||
boolean canRender(PonyConfig config);
|
boolean canRender(PonyConfig config);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"texture": {"w": 16, "h": 8},
|
||||||
|
"left": {
|
||||||
|
"center": [-7, 0.5, 0.5],
|
||||||
|
"offset": [-7, 0, 0],
|
||||||
|
"cubes": [
|
||||||
|
{ "from": [3, -4, 0], "size": [7, 1, 1] },
|
||||||
|
{ "from": [3, -5, 0], "size": [1, 1, 1], "texture": {"u": 0, "v": 2 } },
|
||||||
|
{ "from": [5, -5, 0], "size": [1, 1, 1], "texture": {"u": 4, "v": 2 } },
|
||||||
|
{ "from": [7, -5, 0], "size": [1, 1, 1], "texture": {"u": 8, "v": 2 } }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"left": {
|
||||||
|
"center": [7, 0.5, 0.5],
|
||||||
|
"offset": [0, 0, 0],
|
||||||
|
"cubes": [
|
||||||
|
{ "from": [-3, -4, 0], "size": [7, 1, 1] },
|
||||||
|
{ "from": [ 3, -5, 0], "size": [1, 1, 1], "texture": {"u": 0, "v": 2 } },
|
||||||
|
{ "from": [ 1, -5, 0], "size": [1, 1, 1], "texture": {"u": 4, "v": 2 } },
|
||||||
|
{ "from": [-1, -5, 0], "size": [1, 1, 1], "texture": {"u": 8, "v": 2 } }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"texture": {"w": 64, "h": 44},
|
||||||
|
"crown": {
|
||||||
|
"center": [-4, -12, -6],
|
||||||
|
"cubes": [
|
||||||
|
{ "from": [0, 0, 0], "size": [8, 4, 8] },
|
||||||
|
{ "from": [3, -1.5, 3], "size": [2, 2, 2] },
|
||||||
|
{ "from": [1.5, -1, 1.5], "size": [5, 1, 5], "texture": {"u": 0, "v": 12 } },
|
||||||
|
{ "from": [2, 1, 1], "size": [4, 7, 6], "texture": {"u": 0, "v": 18 } },
|
||||||
|
{ "from": [1, 1, 2], "size": [6, 7, 4], "texture": {"u": 0, "v": 18 } }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"texture": {"w": 64, "h": 64},
|
||||||
|
"rim": {
|
||||||
|
"texture": {"u": 16, "v": 33},
|
||||||
|
"rotate": [-0.3, 0, 0.1],
|
||||||
|
"cubes": [
|
||||||
|
{
|
||||||
|
"type": "mson:plane",
|
||||||
|
"face": "up",
|
||||||
|
"texture": {"u": 16, "v": 33},
|
||||||
|
"position": [-9, -4, -12], "size": [16, 17]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "mson:plane",
|
||||||
|
"face": "down",
|
||||||
|
"texture": {"u": 0, "v": 33},
|
||||||
|
"position": [-9, -3.999, -12], "size": [16, 17]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"cubes": [
|
||||||
|
{"from": [-5, -8, -6], "size": [9, 4, 9]},
|
||||||
|
{"from": [-6, -6, -7], "size": [11, 2, 11], "texture": {"u": 0, "v": 13}}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"center": [-9, -4, -12 ],
|
||||||
|
"rotate": [0.4, 0, 0],
|
||||||
|
"cubes": [
|
||||||
|
{
|
||||||
|
"type": "mson:plane",
|
||||||
|
"face": "south",
|
||||||
|
"texture": {"u": 0, "v": 27},
|
||||||
|
"position": [0, -6, 0], "size": [16, 6]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue