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
# check these on https://modmuss50.me/fabric.html
minecraft_version=20w49a
yarn_mappings=20w49a+build.1
loader_version=0.10.8
fabric_version=0.27.2+1.17
minecraft_version=21w05b
yarn_mappings=21w05b+build.5
loader_version=0.11.1
fabric_version=0.30.1+1.17
# Mod Properties
group=com.minelittlepony

View file

@ -3,10 +3,10 @@ package com.minelittlepony.api.pony.network.fabric;
import io.netty.buffer.Unpooled;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.network.ClientSidePacketRegistry;
import net.fabricmc.fabric.api.network.PacketContext;
import net.fabricmc.fabric.api.network.ServerSidePacketRegistry;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier;
@ -18,19 +18,19 @@ import java.util.function.Function;
@Environment(EnvType.CLIENT)
public interface Channel {
Consumer<MsgPonyData> CLIENT_PONY_DATA = clientToServer(new Identifier("minelittlepony", "pony_data"), MsgPonyData::new, MsgPonyData::toBuffer, (packet, context) -> {
PonyDataCallback.EVENT.invoker().onPonyDataAvailable(context.getPlayer(), packet, packet.isNoSkin(), EnvType.SERVER);
Consumer<MsgPonyData> CLIENT_PONY_DATA = clientToServer(new Identifier("minelittlepony", "pony_data"), MsgPonyData::new, MsgPonyData::toBuffer, (packet, player) -> {
PonyDataCallback.EVENT.invoker().onPonyDataAvailable(player, packet, packet.isNoSkin(), EnvType.SERVER);
});
static void bootstrap() { }
static <T> Consumer<T> clientToServer(Identifier id, Function<PacketByteBuf, T> factory,
BiConsumer<T, PacketByteBuf> bufferWriter,
BiConsumer<T, PacketContext> handler) {
ServerSidePacketRegistry.INSTANCE.register(id, (context, buffer) -> {
BiConsumer<T, PlayerEntity> handler) {
ServerPlayNetworking.registerGlobalReceiver(id, (server, player, hhandler, buffer, responseSender) -> {
T packet = factory.apply(buffer);
context.getTaskQueue().execute(() -> {
handler.accept(packet, context);
server.execute(() -> {
handler.accept(packet, player);
});
});
return packet -> {
@ -41,7 +41,7 @@ public interface Channel {
PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer());
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.pony.PonyManager;
import com.minelittlepony.client.render.PonyRenderDispatcher;
import com.minelittlepony.client.render.blockentity.skull.PonySkullRenderer;
import com.minelittlepony.client.settings.ClientPonyConfig;
import com.minelittlepony.common.client.gui.VisibilityMode;
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.gui.screen.Screen;
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.resource.ResourceType;
import net.minecraft.util.Identifier;
@ -82,7 +81,6 @@ public class MineLittlePony implements ClientModInitializer {
ClientTickEvents.END_CLIENT_TICK.register(this::onTick);
ClientReadyCallback.EVENT.register(this::onClientReady);
ScreenInitCallback.EVENT.register(this::onScreenInit);
config.ponyskulls.onChanged(PonySkullRenderer::resolve);
config.load();

View file

@ -20,17 +20,16 @@ abstract class MixinItemRenderer {
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) {
if (LevitatingItemRenderer.usesTransparency()) {
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)
abstract class MixinSkullBlockEntityRenderer implements BlockEntityRenderer<SkullBlockEntity> {
@Inject(method = "method_32161("
@Inject(method = "renderSkull("
+ "Lnet/minecraft/util/math/Direction;"
+ "F"
+ "F"
@ -33,32 +33,27 @@ abstract class MixinSkullBlockEntityRenderer implements BlockEntityRenderer<Skul
+ "Lnet/minecraft/client/render/block/entity/SkullBlockEntityModel;"
+ "Lnet/minecraft/client/render/RenderLayer;"
+ ")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,
MatrixStack stack, VertexConsumerProvider renderContext, int lightUv,
SkullBlockEntityModel model, RenderLayer layer,
CallbackInfo info) {
if (PonySkullRenderer.INSTANCE == null) {
return;
}
if (!info.isCancelled() && PonySkullRenderer.INSTANCE.renderSkull(direction, angle, poweredTicks, stack, renderContext, layer, lightUv)) {
if (!info.isCancelled() && PonySkullRenderer.renderSkull(direction, angle, poweredTicks, stack, renderContext, layer, lightUv)) {
info.cancel();
}
}
@Inject(method = "method_3578("
@Inject(method = "getRenderLayer("
+ "Lnet/minecraft/block/SkullBlock$SkullType;"
+ "Lcom/mojang/authlib/GameProfile;"
+ ")Lnet/minecraft/client/render/RenderLayer;", at = @At("HEAD"), cancellable = true)
private static void onMethod_3578(SkullBlock.SkullType skullType, @Nullable GameProfile profile, CallbackInfoReturnable<RenderLayer> info) {
if (info.isCancelled() || PonySkullRenderer.INSTANCE == null) {
return;
}
RenderLayer result = PonySkullRenderer.INSTANCE.getRenderLayer(skullType, profile);
if (result != null) {
info.setReturnValue(result);
private static void onGetRenderLayer(SkullBlock.SkullType skullType, @Nullable GameProfile profile, CallbackInfoReturnable<RenderLayer> info) {
if (!info.isCancelled()) {
RenderLayer result = PonySkullRenderer.getSkullRenderLayer(skullType, profile);
if (result != null) {
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) {
upperTorso.yaw = bodySwing;
torso.yaw = bodySwing;
body.yaw = bodySwing;
neck.yaw = bodySwing;
}
private void animateWears() {
leftSleeve.copyTransform(leftArm);
rightSleeve.copyTransform(rightArm);
leftPantLeg.copyTransform(leftLeg);
rightPantLeg.copyTransform(rightLeg);
jacket.copyTransform(torso);
helmet.copyTransform(head);
leftPants.copyTransform(leftLeg);
rightPants.copyTransform(rightLeg);
jacket.copyTransform(body);
hat.copyTransform(head);
upperTorsoOverlay.copyTransform(upperTorso);
}
@ -244,8 +244,8 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
rotateLegsOnGround(move, swing, ticks, entity);
}
float sin = MathHelper.sin(torso.yaw) * 5;
float cos = MathHelper.cos(torso.yaw) * 5;
float sin = MathHelper.sin(body.yaw) * 5;
float cos = MathHelper.cos(body.yaw) * 5;
float spread = attributes.isGoingFast ? 2 : 1;
@ -262,8 +262,8 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
leftArm.pivotX = legRPX;
leftLeg.pivotX = legRPX;
rightArm.yaw += torso.yaw;
leftArm.yaw += torso.yaw;
rightArm.yaw += body.yaw;
leftArm.yaw += body.yaw;
rightArm.pivotY = leftArm.pivotY = 8;
rightLeg.pivotZ = leftLeg.pivotZ = 10;
@ -380,7 +380,7 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
case NECK: return neck;
case TAIL:
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;
arm.pitch -= deltaAim + deltaX * 1.2F;
arm.yaw += torso.yaw * 2;
arm.yaw += body.yaw * 2;
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) {
torso.pitch = rotateAngleX;
torso.pivotY = rotationPointY;
torso.pivotZ = rotationPointZ;
body.pitch = rotateAngleX;
body.pivotY = rotationPointY;
body.pivotZ = rotationPointZ;
upperTorso.pitch = rotateAngleX;
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) {
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) {
@ -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) {
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);
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) {
@ -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) {
if (!sneaking) {
torso.rotate(stack);
body.rotate(stack);
}
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) {
leftSleeve.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);
rightPantLeg.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
leftPants.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
rightPants.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha);
}
@Override

View file

@ -10,6 +10,6 @@ public class DJPon3EarsModel extends SkullEntityModel {
}
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
public ModelPart getHead() {
return skull;
return head;
}
@Override
public void method_2821(float poweredTicks, float yaw, float pitch) {
super.method_2821(poweredTicks, yaw, pitch);
hair.yaw = skull.yaw;
hair.pitch = skull.pitch;
public void setHeadRotation(float poweredTicks, float yaw, float pitch) {
super.setHeadRotation(poweredTicks, yaw, pitch);
hair.yaw = head.yaw;
hair.pitch = head.pitch;
}
@Override
@ -58,7 +58,7 @@ public class PonySkullModel extends SkullEntityModel implements MsonModel, ICapi
snout.setGender(metadata.getGender());
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()) {
getHead().rotate(stack);

View file

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

View file

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

View file

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

View file

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

View file

@ -28,7 +28,7 @@ public class PonyArmourStandModel extends ArmorStandEntityModel {
public void applyAnglesTo(BipedEntityModel<ArmorStandEntity> dest) {
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.rightLeg).rotateTo(rightLeg);
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);
this.head.roll = roll;
this.helmet.roll = roll;
this.hat.roll = roll;
this.head.pitch = 0.4F;
this.helmet.pitch = 0.4F;
this.hat.pitch = 0.4F;
} else {
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;
helmet.pitch = -rot / 2;
hat.pitch = -rot / 2;
} else {
rightArm.pivotX = 0;
rightSleeve.pivotX = 0;

View file

@ -112,9 +112,9 @@ public class SeaponyModel<T extends LivingEntity> extends UnicornModel<T> {
@Override
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);
torso.rotate(stack);
body.rotate(stack);
tail.renderPart(stack, vertices, overlayUv, lightUv, red, green, blue, alpha, attributes.interpolatorId);
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
leftLeg.visible = false;
rightLeg.visible = false;
leftPantLeg.visible = false;
rightPantLeg.visible = false;
leftPants.visible = false;
rightPants.visible = false;
bodyCenter.visible = visible;

View file

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

View file

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

View file

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

View file

@ -7,18 +7,14 @@ import com.minelittlepony.client.render.LevitatingItemRenderer;
import com.minelittlepony.client.render.MobRenderers;
import com.minelittlepony.client.render.entity.SkeleponyRenderer;
import com.minelittlepony.client.render.entity.ZomponyRenderer;
import com.minelittlepony.mson.api.Mson;
import com.minelittlepony.settings.PonyConfig;
import com.mojang.authlib.GameProfile;
import net.minecraft.block.SkullBlock;
import net.minecraft.block.entity.BlockEntityType;
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.BlockEntityRendererFactory;
import net.minecraft.client.render.block.entity.SkullBlockEntityRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier;
import net.minecraft.util.Util;
@ -30,36 +26,24 @@ import javax.annotation.Nullable;
/**
* 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) {
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) -> {
private static final Map<SkullBlock.SkullType, ISkull> SKULLS = Util.make(Maps.newHashMap(), (skullMap) -> {
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.ZOMBIE, new MobSkull(ZomponyRenderer.ZOMBIE, MobRenderers.ZOMBIE));
skullMap.put(SkullBlock.Type.PLAYER, new PonySkull());
});
public PonySkullRenderer(BlockEntityRendererFactory.Context context) {
super(context);
INSTANCE = this;
}
private static ISkull selectedSkull;
private static Identifier selectedSkin;
public RenderLayer getRenderLayer(SkullBlock.SkullType skullType, @Nullable GameProfile profile) {
public static RenderLayer getSkullRenderLayer(SkullBlock.SkullType skullType, @Nullable GameProfile profile) {
selectedSkull = null;
selectedSkin = null;
ISkull skull = skullMap.get(skullType);
ISkull skull = SKULLS.get(skullType);
if (skull == null || !skull.canRender(MineLittlePony.getInstance().getConfig())) {
return null;
@ -70,7 +54,7 @@ public class PonySkullRenderer extends SkullBlockEntityRenderer {
return LevitatingItemRenderer.getRenderLayer(selectedSkin);
}
public boolean renderSkull(@Nullable Direction direction,
public static boolean renderSkull(@Nullable Direction direction,
float angle, float poweredTicks,
MatrixStack stack, VertexConsumerProvider renderContext, RenderLayer layer,
int lightUv) {
@ -83,8 +67,17 @@ public class PonySkullRenderer extends SkullBlockEntityRenderer {
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);
VertexConsumer vertices = renderContext.getBuffer(layer);
@ -97,29 +90,6 @@ public class PonySkullRenderer extends SkullBlockEntityRenderer {
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.
*

View file

@ -106,8 +106,8 @@ public class SkullFeature<T extends LivingEntity, M extends EntityModel<T> & IPo
stack.translate(-0.5, 0, -0.5);
SkullType type = ((AbstractSkullBlock) ((BlockItem) itemstack.getItem()).getBlock()).getSkullType();
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);
}
}