20w49a -> 21w05b

This commit is contained in:
Sollace 2021-02-07 11:43:25 +02:00
parent 28d2b805ed
commit 99ed7699a1
21 changed files with 107 additions and 145 deletions

View file

@ -3,10 +3,10 @@ org.gradle.daemon=false
# Fabric Properties # Fabric Properties
# check these on https://modmuss50.me/fabric.html # check these on https://modmuss50.me/fabric.html
minecraft_version=20w49a minecraft_version=21w05b
yarn_mappings=20w49a+build.1 yarn_mappings=21w05b+build.5
loader_version=0.10.8 loader_version=0.11.1
fabric_version=0.27.2+1.17 fabric_version=0.30.1+1.17
# Mod Properties # Mod Properties
group=com.minelittlepony group=com.minelittlepony

View file

@ -3,10 +3,10 @@ package com.minelittlepony.api.pony.network.fabric;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.network.PacketContext; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.fabricmc.fabric.api.network.ServerSidePacketRegistry;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.PacketByteBuf; import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
@ -18,19 +18,19 @@ import java.util.function.Function;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public interface Channel { public interface Channel {
Consumer<MsgPonyData> CLIENT_PONY_DATA = clientToServer(new Identifier("minelittlepony", "pony_data"), MsgPonyData::new, MsgPonyData::toBuffer, (packet, context) -> { Consumer<MsgPonyData> CLIENT_PONY_DATA = clientToServer(new Identifier("minelittlepony", "pony_data"), MsgPonyData::new, MsgPonyData::toBuffer, (packet, player) -> {
PonyDataCallback.EVENT.invoker().onPonyDataAvailable(context.getPlayer(), packet, packet.isNoSkin(), EnvType.SERVER); PonyDataCallback.EVENT.invoker().onPonyDataAvailable(player, packet, packet.isNoSkin(), EnvType.SERVER);
}); });
static void bootstrap() { } static void bootstrap() { }
static <T> Consumer<T> clientToServer(Identifier id, Function<PacketByteBuf, T> factory, static <T> Consumer<T> clientToServer(Identifier id, Function<PacketByteBuf, T> factory,
BiConsumer<T, PacketByteBuf> bufferWriter, BiConsumer<T, PacketByteBuf> bufferWriter,
BiConsumer<T, PacketContext> handler) { BiConsumer<T, PlayerEntity> handler) {
ServerSidePacketRegistry.INSTANCE.register(id, (context, buffer) -> { ServerPlayNetworking.registerGlobalReceiver(id, (server, player, hhandler, buffer, responseSender) -> {
T packet = factory.apply(buffer); T packet = factory.apply(buffer);
context.getTaskQueue().execute(() -> { server.execute(() -> {
handler.accept(packet, context); handler.accept(packet, player);
}); });
}); });
return packet -> { return packet -> {
@ -41,7 +41,7 @@ public interface Channel {
PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer()); PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer());
bufferWriter.accept(packet, buf); bufferWriter.accept(packet, buf);
ClientSidePacketRegistry.INSTANCE.sendToServer(id, buf); ClientPlayNetworking.send(id, buf);
}; };
} }
} }

View file

@ -5,7 +5,6 @@ import com.minelittlepony.api.pony.network.fabric.Channel;
import com.minelittlepony.client.model.ModelType; import com.minelittlepony.client.model.ModelType;
import com.minelittlepony.client.pony.PonyManager; import com.minelittlepony.client.pony.PonyManager;
import com.minelittlepony.client.render.PonyRenderDispatcher; import com.minelittlepony.client.render.PonyRenderDispatcher;
import com.minelittlepony.client.render.blockentity.skull.PonySkullRenderer;
import com.minelittlepony.client.settings.ClientPonyConfig; import com.minelittlepony.client.settings.ClientPonyConfig;
import com.minelittlepony.common.client.gui.VisibilityMode; import com.minelittlepony.common.client.gui.VisibilityMode;
import com.minelittlepony.common.client.gui.element.Button; import com.minelittlepony.common.client.gui.element.Button;
@ -24,7 +23,7 @@ import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.InputUtil;
import net.minecraft.resource.ResourceType; import net.minecraft.resource.ResourceType;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
@ -82,7 +81,6 @@ public class MineLittlePony implements ClientModInitializer {
ClientTickEvents.END_CLIENT_TICK.register(this::onTick); ClientTickEvents.END_CLIENT_TICK.register(this::onTick);
ClientReadyCallback.EVENT.register(this::onClientReady); ClientReadyCallback.EVENT.register(this::onClientReady);
ScreenInitCallback.EVENT.register(this::onScreenInit); ScreenInitCallback.EVENT.register(this::onScreenInit);
config.ponyskulls.onChanged(PonySkullRenderer::resolve);
config.load(); config.load();

View file

@ -20,17 +20,16 @@ abstract class MixinItemRenderer {
private static final String Boolean = "Z"; private static final String Boolean = "Z";
@Inject(method = "getArmorGlintConsumer(" + VertexConsumerProvider + RenderLayer + Boolean + Boolean + ")" + VertexConsumer, at = @At("HEAD"), cancellable = true) private static final String PARAMS = "(" + VertexConsumerProvider + RenderLayer + Boolean + Boolean + ")" + VertexConsumer;
@Inject(method = {
"getArmorGlintConsumer" + PARAMS,
"getItemGlintConsumer" + PARAMS,
"getDirectItemGlintConsumer" + PARAMS
}, at = @At("HEAD"), cancellable = true)
private static void onGetArmorVertexConsumer(VertexConsumerProvider provider, RenderLayer layer, boolean solid, boolean glint, CallbackInfoReturnable<VertexConsumer> info) { private static void onGetArmorVertexConsumer(VertexConsumerProvider provider, RenderLayer layer, boolean solid, boolean glint, CallbackInfoReturnable<VertexConsumer> info) {
if (LevitatingItemRenderer.usesTransparency()) { if (LevitatingItemRenderer.usesTransparency()) {
info.setReturnValue(provider.getBuffer(LevitatingItemRenderer.getRenderLayer())); info.setReturnValue(provider.getBuffer(LevitatingItemRenderer.getRenderLayer()));
} }
} }
@Inject(method = "getItemGlintConsumer(" + VertexConsumerProvider + RenderLayer + Boolean + Boolean + ")" + VertexConsumer, at = @At("HEAD"), cancellable = true)
private static void onMethod_29711(VertexConsumerProvider provider, RenderLayer layer, boolean solide, boolean glint, CallbackInfoReturnable<VertexConsumer> info) {
if (LevitatingItemRenderer.usesTransparency()) {
info.setReturnValue(provider.getBuffer(LevitatingItemRenderer.getRenderLayer()));
}
}
} }

View file

@ -23,7 +23,7 @@ import javax.annotation.Nullable;
@Mixin(SkullBlockEntityRenderer.class) @Mixin(SkullBlockEntityRenderer.class)
abstract class MixinSkullBlockEntityRenderer implements BlockEntityRenderer<SkullBlockEntity> { abstract class MixinSkullBlockEntityRenderer implements BlockEntityRenderer<SkullBlockEntity> {
@Inject(method = "method_32161(" @Inject(method = "renderSkull("
+ "Lnet/minecraft/util/math/Direction;" + "Lnet/minecraft/util/math/Direction;"
+ "F" + "F"
+ "F" + "F"
@ -33,32 +33,27 @@ abstract class MixinSkullBlockEntityRenderer implements BlockEntityRenderer<Skul
+ "Lnet/minecraft/client/render/block/entity/SkullBlockEntityModel;" + "Lnet/minecraft/client/render/block/entity/SkullBlockEntityModel;"
+ "Lnet/minecraft/client/render/RenderLayer;" + "Lnet/minecraft/client/render/RenderLayer;"
+ ")V", at = @At("HEAD"), cancellable = true) + ")V", at = @At("HEAD"), cancellable = true)
private static void onMethod_32161(@Nullable Direction direction, private static void onRenderSkull(@Nullable Direction direction,
float angle, float poweredTicks, float angle, float poweredTicks,
MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, MatrixStack stack, VertexConsumerProvider renderContext, int lightUv,
SkullBlockEntityModel model, RenderLayer layer, SkullBlockEntityModel model, RenderLayer layer,
CallbackInfo info) { CallbackInfo info) {
if (PonySkullRenderer.INSTANCE == null) { if (!info.isCancelled() && PonySkullRenderer.renderSkull(direction, angle, poweredTicks, stack, renderContext, layer, lightUv)) {
return;
}
if (!info.isCancelled() && PonySkullRenderer.INSTANCE.renderSkull(direction, angle, poweredTicks, stack, renderContext, layer, lightUv)) {
info.cancel(); info.cancel();
} }
} }
@Inject(method = "method_3578(" @Inject(method = "getRenderLayer("
+ "Lnet/minecraft/block/SkullBlock$SkullType;" + "Lnet/minecraft/block/SkullBlock$SkullType;"
+ "Lcom/mojang/authlib/GameProfile;" + "Lcom/mojang/authlib/GameProfile;"
+ ")Lnet/minecraft/client/render/RenderLayer;", at = @At("HEAD"), cancellable = true) + ")Lnet/minecraft/client/render/RenderLayer;", at = @At("HEAD"), cancellable = true)
private static void onMethod_3578(SkullBlock.SkullType skullType, @Nullable GameProfile profile, CallbackInfoReturnable<RenderLayer> info) { private static void onGetRenderLayer(SkullBlock.SkullType skullType, @Nullable GameProfile profile, CallbackInfoReturnable<RenderLayer> info) {
if (info.isCancelled() || PonySkullRenderer.INSTANCE == null) { if (!info.isCancelled()) {
return; RenderLayer result = PonySkullRenderer.getSkullRenderLayer(skullType, profile);
}
RenderLayer result = PonySkullRenderer.INSTANCE.getRenderLayer(skullType, profile);
if (result != null) { if (result != null) {
info.setReturnValue(result); info.setReturnValue(result);
} }
} }
}
} }

View file

@ -186,17 +186,17 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
*/ */
protected void shakeBody(float move, float swing, float bodySwing, float ticks) { protected void shakeBody(float move, float swing, float bodySwing, float ticks) {
upperTorso.yaw = bodySwing; upperTorso.yaw = bodySwing;
torso.yaw = bodySwing; body.yaw = bodySwing;
neck.yaw = bodySwing; neck.yaw = bodySwing;
} }
private void animateWears() { private void animateWears() {
leftSleeve.copyTransform(leftArm); leftSleeve.copyTransform(leftArm);
rightSleeve.copyTransform(rightArm); rightSleeve.copyTransform(rightArm);
leftPantLeg.copyTransform(leftLeg); leftPants.copyTransform(leftLeg);
rightPantLeg.copyTransform(rightLeg); rightPants.copyTransform(rightLeg);
jacket.copyTransform(torso); jacket.copyTransform(body);
helmet.copyTransform(head); hat.copyTransform(head);
upperTorsoOverlay.copyTransform(upperTorso); upperTorsoOverlay.copyTransform(upperTorso);
} }
@ -244,8 +244,8 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
rotateLegsOnGround(move, swing, ticks, entity); rotateLegsOnGround(move, swing, ticks, entity);
} }
float sin = MathHelper.sin(torso.yaw) * 5; float sin = MathHelper.sin(body.yaw) * 5;
float cos = MathHelper.cos(torso.yaw) * 5; float cos = MathHelper.cos(body.yaw) * 5;
float spread = attributes.isGoingFast ? 2 : 1; float spread = attributes.isGoingFast ? 2 : 1;
@ -262,8 +262,8 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
leftArm.pivotX = legRPX; leftArm.pivotX = legRPX;
leftLeg.pivotX = legRPX; leftLeg.pivotX = legRPX;
rightArm.yaw += torso.yaw; rightArm.yaw += body.yaw;
leftArm.yaw += torso.yaw; leftArm.yaw += body.yaw;
rightArm.pivotY = leftArm.pivotY = 8; rightArm.pivotY = leftArm.pivotY = 8;
rightLeg.pivotZ = leftLeg.pivotZ = 10; rightLeg.pivotZ = leftLeg.pivotZ = 10;
@ -380,7 +380,7 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
case NECK: return neck; case NECK: return neck;
case TAIL: case TAIL:
case LEGS: case LEGS:
case BODY: return torso; case BODY: return body;
} }
} }
@ -514,7 +514,7 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
float deltaAim = deltaZ * (0.7F - head.pitch) * 0.75F; float deltaAim = deltaZ * (0.7F - head.pitch) * 0.75F;
arm.pitch -= deltaAim + deltaX * 1.2F; arm.pitch -= deltaAim + deltaX * 1.2F;
arm.yaw += torso.yaw * 2; arm.yaw += body.yaw * 2;
arm.roll = -deltaZ * 0.4F; arm.roll = -deltaZ * 0.4F;
} }
@ -545,9 +545,9 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
} }
protected void adjustBodyComponents(float rotateAngleX, float rotationPointY, float rotationPointZ) { protected void adjustBodyComponents(float rotateAngleX, float rotationPointY, float rotationPointZ) {
torso.pitch = rotateAngleX; body.pitch = rotateAngleX;
torso.pivotY = rotationPointY; body.pivotY = rotationPointY;
torso.pivotZ = rotationPointZ; body.pivotZ = rotationPointZ;
upperTorso.pitch = rotateAngleX; upperTorso.pitch = rotateAngleX;
upperTorso.pivotY = rotationPointY; upperTorso.pivotY = rotationPointY;
@ -596,7 +596,7 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
} }
protected void renderHelmet(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) { protected void renderHelmet(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) {
helmet.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); hat.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
} }
protected void renderNeck(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) { protected void renderNeck(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) {
@ -605,9 +605,9 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
} }
protected void renderBody(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) { protected void renderBody(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) {
torso.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); body.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
upperTorso.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); upperTorso.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
torso.rotate(stack); body.rotate(stack);
} }
protected void renderVest(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) { protected void renderVest(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) {
@ -617,7 +617,7 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
protected void renderLegs(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) { protected void renderLegs(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) {
if (!sneaking) { if (!sneaking) {
torso.rotate(stack); body.rotate(stack);
} }
leftArm.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); leftArm.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
@ -629,8 +629,8 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
protected void renderSleeves(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) { protected void renderSleeves(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) {
leftSleeve.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); leftSleeve.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
rightSleeve.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); rightSleeve.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
leftPantLeg.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); leftPants.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
rightPantLeg.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); rightPants.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
} }
@Override @Override

View file

@ -10,6 +10,6 @@ public class DJPon3EarsModel extends SkullEntityModel {
} }
public void setVisible(boolean show) { public void setVisible(boolean show) {
skull.visible = show; head.visible = show;
} }
} }

View file

@ -40,14 +40,14 @@ public class PonySkullModel extends SkullEntityModel implements MsonModel, ICapi
@Override @Override
public ModelPart getHead() { public ModelPart getHead() {
return skull; return head;
} }
@Override @Override
public void method_2821(float poweredTicks, float yaw, float pitch) { public void setHeadRotation(float poweredTicks, float yaw, float pitch) {
super.method_2821(poweredTicks, yaw, pitch); super.setHeadRotation(poweredTicks, yaw, pitch);
hair.yaw = skull.yaw; hair.yaw = head.yaw;
hair.pitch = skull.pitch; hair.pitch = head.pitch;
} }
@Override @Override
@ -58,7 +58,7 @@ public class PonySkullModel extends SkullEntityModel implements MsonModel, ICapi
snout.setGender(metadata.getGender()); snout.setGender(metadata.getGender());
hair.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); hair.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
skull.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); head.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
if (metadata.hasHorn()) { if (metadata.hasHorn()) {
getHead().rotate(stack); getHead().rotate(stack);

View file

@ -39,7 +39,7 @@ public class PonyArmourModel<T extends LivingEntity> extends AbstractPonyModel<T
@Override @Override
protected void renderBody(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float limbDistance, float limbAngle, float tickDelta, float alpha) { protected void renderBody(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float limbDistance, float limbAngle, float tickDelta, float alpha) {
if (variant == ArmourVariant.LEGACY) { if (variant == ArmourVariant.LEGACY) {
torso.render(stack, vertices, overlayUv, lightUv, limbDistance, limbAngle, tickDelta, alpha); body.render(stack, vertices, overlayUv, lightUv, limbDistance, limbAngle, tickDelta, alpha);
upperTorso.render(stack, vertices, overlayUv, lightUv, limbDistance, limbAngle, tickDelta, alpha); upperTorso.render(stack, vertices, overlayUv, lightUv, limbDistance, limbAngle, tickDelta, alpha);
} else { } else {
chestPiece.render(stack, vertices, overlayUv, lightUv, limbDistance, limbAngle, tickDelta, alpha); chestPiece.render(stack, vertices, overlayUv, lightUv, limbDistance, limbAngle, tickDelta, alpha);
@ -64,9 +64,9 @@ public class PonyArmourModel<T extends LivingEntity> extends AbstractPonyModel<T
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
BipedEntityModel<T> mainModel = (BipedEntityModel<T>)model; BipedEntityModel<T> mainModel = (BipedEntityModel<T>)model;
head.copyTransform(mainModel.head); head.copyTransform(mainModel.head);
helmet.copyTransform(mainModel.helmet); head.copyTransform(mainModel.head);
torso.copyTransform(mainModel.torso); body.copyTransform(mainModel.body);
rightArm.copyTransform(mainModel.rightArm); rightArm.copyTransform(mainModel.rightArm);
leftArm.copyTransform(mainModel.leftArm); leftArm.copyTransform(mainModel.leftArm);
rightLeg.copyTransform(mainModel.rightLeg); rightLeg.copyTransform(mainModel.rightLeg);
@ -80,7 +80,7 @@ public class PonyArmourModel<T extends LivingEntity> extends AbstractPonyModel<T
@Override @Override
public void setInVisible() { public void setInVisible() {
setVisible(false); setVisible(false);
torso.visible = true; body.visible = true;
chestPiece.visible = false; chestPiece.visible = false;
head.visible = false; head.visible = false;
neck.visible = false; neck.visible = false;

View file

@ -30,7 +30,7 @@ public class BreezieModel<T extends LivingEntity> extends BipedEntityModel<T> {
@Override @Override
public void setVisible(boolean visible) { public void setVisible(boolean visible) {
super.setVisible(visible); super.setVisible(visible);
helmet.visible = false; hat.visible = false;
} }
@Override @Override
@ -103,21 +103,21 @@ public class BreezieModel<T extends LivingEntity> extends BipedEntityModel<T> {
} }
protected void swingArms(Arm mainHand) { protected void swingArms(Arm mainHand) {
torso.yaw = MathHelper.sin(MathHelper.sqrt(handSwingProgress) * PI * 2) / 5; body.yaw = MathHelper.sin(MathHelper.sqrt(handSwingProgress) * PI * 2) / 5;
if (mainHand == Arm.LEFT) { if (mainHand == Arm.LEFT) {
torso.yaw *= -1; body.yaw *= -1;
} }
float sin = MathHelper.sin(torso.yaw) * 5; float sin = MathHelper.sin(body.yaw) * 5;
float cos = MathHelper.cos(torso.yaw) * 5; float cos = MathHelper.cos(body.yaw) * 5;
leftArm.pitch += torso.yaw; leftArm.pitch += body.yaw;
leftArm.yaw += torso.yaw; leftArm.yaw += body.yaw;
leftArm.pivotX = cos; leftArm.pivotX = cos;
leftArm.pivotZ = -sin; leftArm.pivotZ = -sin;
rightArm.yaw += torso.yaw; rightArm.yaw += body.yaw;
rightArm.pivotX = -cos; rightArm.pivotX = -cos;
rightArm.pivotZ = sin; rightArm.pivotZ = sin;
@ -128,7 +128,7 @@ public class BreezieModel<T extends LivingEntity> extends BipedEntityModel<T> {
ModelPart mainArm = getArm(mainHand); ModelPart mainArm = getArm(mainHand);
mainArm.pitch -= swingFactorX * 1.2F + swingX; mainArm.pitch -= swingFactorX * 1.2F + swingX;
mainArm.yaw += torso.yaw * 2; mainArm.yaw += body.yaw * 2;
mainArm.roll -= MathHelper.sin(handSwingProgress * PI) * 0.4F; mainArm.roll -= MathHelper.sin(handSwingProgress * PI) * 0.4F;
} }

View file

@ -74,8 +74,8 @@ public class EnderStallionModel extends SkeleponyModel<EndermanEntity> {
leftSleeve.visible = false; leftSleeve.visible = false;
rightSleeve.visible = false; rightSleeve.visible = false;
leftPantLeg.visible = false; leftPants.visible = false;
rightPantLeg.visible = false; rightPants.visible = false;
} }
@Override @Override

View file

@ -79,7 +79,7 @@ public class PiglinPonyModel extends ZomponyModel<HostileEntity> {
float legBob = MathHelper.sin(speed * 40) * 0.25F; float legBob = MathHelper.sin(speed * 40) * 0.25F;
neck.pivotY = bodyBob; neck.pivotY = bodyBob;
torso.pivotY = bodyBob; body.pivotY = bodyBob;
upperTorso.pivotY = bodyBob; upperTorso.pivotY = bodyBob;
leftLeg.pitch += legBob; leftLeg.pitch += legBob;

View file

@ -28,7 +28,7 @@ public class PonyArmourStandModel extends ArmorStandEntityModel {
public void applyAnglesTo(BipedEntityModel<ArmorStandEntity> dest) { public void applyAnglesTo(BipedEntityModel<ArmorStandEntity> dest) {
MsonPart.of(dest.head).rotateTo(head); MsonPart.of(dest.head).rotateTo(head);
MsonPart.of(dest.helmet).rotateTo(helmet); MsonPart.of(dest.hat).rotateTo(hat);
MsonPart.of(dest.leftLeg).rotateTo(leftLeg); MsonPart.of(dest.leftLeg).rotateTo(leftLeg);
MsonPart.of(dest.rightLeg).rotateTo(rightLeg); MsonPart.of(dest.rightLeg).rotateTo(rightLeg);
MsonPart.of(dest.leftArm).rotateTo(leftArm); MsonPart.of(dest.leftArm).rotateTo(leftArm);

View file

@ -95,13 +95,13 @@ public class VillagerPonyModel<T extends LivingEntity & VillagerDataContainer> e
float roll = 0.3F * MathHelper.sin(0.45F * ticks); float roll = 0.3F * MathHelper.sin(0.45F * ticks);
this.head.roll = roll; this.head.roll = roll;
this.helmet.roll = roll; this.hat.roll = roll;
this.head.pitch = 0.4F; this.head.pitch = 0.4F;
this.helmet.pitch = 0.4F; this.hat.pitch = 0.4F;
} else { } else {
this.head.roll = 0.0F; this.head.roll = 0.0F;
this.helmet.roll = 0.0F; this.hat.roll = 0.0F;
} }
} }
} }

View file

@ -59,7 +59,7 @@ public class WitchPonyModel extends ZebraModel<WitchEntity> {
} }
head.pitch = -rot / 2; head.pitch = -rot / 2;
helmet.pitch = -rot / 2; hat.pitch = -rot / 2;
} else { } else {
rightArm.pivotX = 0; rightArm.pivotX = 0;
rightSleeve.pivotX = 0; rightSleeve.pivotX = 0;

View file

@ -112,9 +112,9 @@ public class SeaponyModel<T extends LivingEntity> extends UnicornModel<T> {
@Override @Override
protected void renderBody(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) { protected void renderBody(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) {
torso.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); body.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
bodyCenter.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); bodyCenter.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
torso.rotate(stack); body.rotate(stack);
tail.renderPart(stack, vertices, overlayUv, lightUv, red, green, blue, alpha, attributes.interpolatorId); tail.renderPart(stack, vertices, overlayUv, lightUv, red, green, blue, alpha, attributes.interpolatorId);
leftFin.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); leftFin.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
@ -136,8 +136,8 @@ public class SeaponyModel<T extends LivingEntity> extends UnicornModel<T> {
// hide the back legs // hide the back legs
leftLeg.visible = false; leftLeg.visible = false;
rightLeg.visible = false; rightLeg.visible = false;
leftPantLeg.visible = false; leftPants.visible = false;
rightPantLeg.visible = false; rightPants.visible = false;
bodyCenter.visible = visible; bodyCenter.visible = visible;

View file

@ -58,8 +58,8 @@ public class Pony implements IPony {
@Override @Override
public void updateForEntity(Entity entity) { public void updateForEntity(Entity entity) {
if (!initialized || entityId != entity.getEntityId()) { if (!initialized || entityId != entity.getId()) {
entityId = entity.getEntityId(); entityId = entity.getId();
initialized = true; initialized = true;
entity.calculateDimensions(); entity.calculateDimensions();

View file

@ -14,7 +14,7 @@ public abstract class AbstractPonySkull implements ISkull {
@Override @Override
public void setAngles(float angle, float poweredTicks) { public void setAngles(float angle, float poweredTicks) {
ponyHead.method_2821(poweredTicks, angle, 0); ponyHead.setHeadRotation(poweredTicks, angle, 0);
} }
@Override @Override

View file

@ -19,7 +19,7 @@ public class MobSkull extends AbstractPonySkull {
@Override @Override
public boolean canRender(PonyConfig config) { public boolean canRender(PonyConfig config) {
return type.get(); return config.ponyskulls.get() && type.get();
} }
@Override @Override

View file

@ -7,18 +7,14 @@ import com.minelittlepony.client.render.LevitatingItemRenderer;
import com.minelittlepony.client.render.MobRenderers; import com.minelittlepony.client.render.MobRenderers;
import com.minelittlepony.client.render.entity.SkeleponyRenderer; import com.minelittlepony.client.render.entity.SkeleponyRenderer;
import com.minelittlepony.client.render.entity.ZomponyRenderer; import com.minelittlepony.client.render.entity.ZomponyRenderer;
import com.minelittlepony.mson.api.Mson;
import com.minelittlepony.settings.PonyConfig; import com.minelittlepony.settings.PonyConfig;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import net.minecraft.block.SkullBlock; import net.minecraft.block.SkullBlock;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
import net.minecraft.client.render.block.entity.SkullBlockEntityRenderer;
import net.minecraft.client.util.math.MatrixStack; 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;
@ -30,36 +26,24 @@ import javax.annotation.Nullable;
/** /**
* PonySkullRenderer! It renders ponies as skulls, or something... * PonySkullRenderer! It renders ponies as skulls, or something...
*/ */
public class PonySkullRenderer extends SkullBlockEntityRenderer { public class PonySkullRenderer {
public static PonySkullRenderer INSTANCE;
public static void resolve(boolean ponySkulls) { private static final Map<SkullBlock.SkullType, ISkull> SKULLS = Util.make(Maps.newHashMap(), (skullMap) -> {
Mson.getInstance().getEntityRendererRegistry().registerBlockRenderer(BlockEntityType.SKULL,
ponySkulls ? PonySkullRenderer::new : SkullBlockEntityRenderer::new
);
}
private ISkull selectedSkull;
private Identifier selectedSkin;
private final Map<SkullBlock.SkullType, ISkull> skullMap = Util.make(Maps.newHashMap(), (skullMap) -> {
skullMap.put(SkullBlock.Type.SKELETON, new MobSkull(SkeleponyRenderer.SKELETON, MobRenderers.SKELETON)); skullMap.put(SkullBlock.Type.SKELETON, new MobSkull(SkeleponyRenderer.SKELETON, MobRenderers.SKELETON));
skullMap.put(SkullBlock.Type.WITHER_SKELETON, new MobSkull(SkeleponyRenderer.WITHER, MobRenderers.SKELETON)); skullMap.put(SkullBlock.Type.WITHER_SKELETON, new MobSkull(SkeleponyRenderer.WITHER, MobRenderers.SKELETON));
skullMap.put(SkullBlock.Type.ZOMBIE, new MobSkull(ZomponyRenderer.ZOMBIE, MobRenderers.ZOMBIE)); skullMap.put(SkullBlock.Type.ZOMBIE, new MobSkull(ZomponyRenderer.ZOMBIE, MobRenderers.ZOMBIE));
skullMap.put(SkullBlock.Type.PLAYER, new PonySkull()); skullMap.put(SkullBlock.Type.PLAYER, new PonySkull());
}); });
public PonySkullRenderer(BlockEntityRendererFactory.Context context) { private static ISkull selectedSkull;
super(context); private static Identifier selectedSkin;
INSTANCE = this;
}
public RenderLayer getRenderLayer(SkullBlock.SkullType skullType, @Nullable GameProfile profile) { public static RenderLayer getSkullRenderLayer(SkullBlock.SkullType skullType, @Nullable GameProfile profile) {
selectedSkull = null; selectedSkull = null;
selectedSkin = null; selectedSkin = null;
ISkull skull = skullMap.get(skullType); ISkull skull = SKULLS.get(skullType);
if (skull == null || !skull.canRender(MineLittlePony.getInstance().getConfig())) { if (skull == null || !skull.canRender(MineLittlePony.getInstance().getConfig())) {
return null; return null;
@ -70,7 +54,7 @@ public class PonySkullRenderer extends SkullBlockEntityRenderer {
return LevitatingItemRenderer.getRenderLayer(selectedSkin); return LevitatingItemRenderer.getRenderLayer(selectedSkin);
} }
public boolean renderSkull(@Nullable Direction direction, public static boolean renderSkull(@Nullable Direction direction,
float angle, float poweredTicks, float angle, float poweredTicks,
MatrixStack stack, VertexConsumerProvider renderContext, RenderLayer layer, MatrixStack stack, VertexConsumerProvider renderContext, RenderLayer layer,
int lightUv) { int lightUv) {
@ -83,8 +67,17 @@ public class PonySkullRenderer extends SkullBlockEntityRenderer {
stack.push(); stack.push();
handleRotation(stack, direction); if (direction == null) {
stack.translate(0.5, 0, 0.5);
} else {
final float offset = 0.25F;
stack.translate(
0.5F - direction.getOffsetX() * offset,
offset,
0.5F - direction.getOffsetZ() * offset
);
}
stack.scale(-1, -1, 1); stack.scale(-1, -1, 1);
VertexConsumer vertices = renderContext.getBuffer(layer); VertexConsumer vertices = renderContext.getBuffer(layer);
@ -97,29 +90,6 @@ public class PonySkullRenderer extends SkullBlockEntityRenderer {
return true; return true;
} }
static void handleRotation(MatrixStack stack, @Nullable Direction direction) {
if (direction == null) {
stack.translate(0.5, 0, 0.5);
return;
}
switch (direction) {
case NORTH:
stack.translate(0.5, 0.25, 0.74);
break;
case SOUTH:
stack.translate(0.5, 0.25, 0.26);
break;
case WEST:
stack.translate(0.74, 0.25, 0.5);
break;
case EAST:
default:
stack.translate(0.26, 0.25, 0.5);
break;
}
}
/** /**
* A skull, just a skull. * A skull, just a skull.
* *

View file

@ -106,8 +106,8 @@ public class SkullFeature<T extends LivingEntity, M extends EntityModel<T> & IPo
stack.translate(-0.5, 0, -0.5); stack.translate(-0.5, 0, -0.5);
SkullType type = ((AbstractSkullBlock) ((BlockItem) itemstack.getItem()).getBlock()).getSkullType(); SkullType type = ((AbstractSkullBlock) ((BlockItem) itemstack.getItem()).getBlock()).getSkullType();
SkullBlockEntityModel skullBlockEntityModel = (SkullBlockEntityModel)this.headModels.get(type); SkullBlockEntityModel skullBlockEntityModel = (SkullBlockEntityModel)this.headModels.get(type);
RenderLayer renderLayer = SkullBlockEntityRenderer.method_3578(type, profile); RenderLayer renderLayer = SkullBlockEntityRenderer.getRenderLayer(type, profile);
SkullBlockEntityRenderer.method_32161(null, 180, f, stack, renderContext, lightUv, skullBlockEntityModel, renderLayer); SkullBlockEntityRenderer.renderSkull(null, 180, f, stack, renderContext, lightUv, skullBlockEntityModel, renderLayer);
} }
} }