Further refactoring and consolidating

This commit is contained in:
Sollace 2023-09-26 01:45:28 +01:00
parent a9b870547a
commit 4b842c9e9a
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
62 changed files with 168 additions and 247 deletions

View file

@ -1,4 +1,4 @@
package com.minelittlepony.api.pony.network.fabric; package com.minelittlepony.api.events;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
@ -11,25 +11,28 @@ import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.api.pony.PonyData; import com.minelittlepony.api.pony.PonyData;
import com.minelittlepony.api.pony.network.MsgPonyData;
import com.minelittlepony.client.MineLittlePony;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class Channel { public class Channel {
private static final Identifier CLIENT_PONY_DATA = new Identifier("minelittlepony", "pony_data"); private static final Identifier CLIENT_PONY_DATA = new Identifier("minelittlepony", "pony_data");
private static final Identifier REQUEST_PONY_DATA = new Identifier("minelittlepony", "request_pony_data"); private static final Identifier REQUEST_PONY_DATA = new Identifier("minelittlepony", "request_pony_data");
private static final Logger LOGGER = LogManager.getLogger("MineLittlePony");
private static boolean registered; private static boolean registered;
public static void bootstrap() { public static void bootstrap() {
ClientLoginConnectionEvents.INIT.register((handler, client) -> { ClientLoginConnectionEvents.INIT.register((handler, client) -> {
registered = false; registered = false;
MineLittlePony.logger.info("Resetting registered flag"); LOGGER.info("Resetting registered flag");
}); });
ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> {
MineLittlePony.logger.info("Sending consent packet to " + handler.getPlayer().getName().getString()); LOGGER.info("Sending consent packet to " + handler.getPlayer().getName().getString());
sender.sendPacket(REQUEST_PONY_DATA, PacketByteBufs.empty()); sender.sendPacket(REQUEST_PONY_DATA, PacketByteBufs.empty());
}); });
@ -38,7 +41,7 @@ public class Channel {
if (client.player != null) { if (client.player != null) {
Pony pony = Pony.getManager().getPony(client.player); Pony pony = Pony.getManager().getPony(client.player);
registered = true; registered = true;
MineLittlePony.logger.info("Server has just consented"); LOGGER.info("Server has just consented");
sender.sendPacket(CLIENT_PONY_DATA, MsgPonyData.write(pony.metadata(), PacketByteBufs.create())); sender.sendPacket(CLIENT_PONY_DATA, MsgPonyData.write(pony.metadata(), PacketByteBufs.create()));
} }
@ -58,9 +61,9 @@ public class Channel {
if (!registered) { if (!registered) {
if (MinecraftClient.getInstance().isInSingleplayer() || MinecraftClient.getInstance().isIntegratedServerRunning()) { if (MinecraftClient.getInstance().isInSingleplayer() || MinecraftClient.getInstance().isIntegratedServerRunning()) {
MineLittlePony.logger.info("Sending pony skin data over as we are either in single-player or lan"); LOGGER.info("Sending pony skin data over as we are either in single-player or lan");
} else { } else {
MineLittlePony.logger.info("Skipping network packet as the server has not consented"); LOGGER.info("Skipping network packet as the server has not consented");
return; return;
} }
} }

View file

@ -1,4 +1,4 @@
package com.minelittlepony.api.pony.network; package com.minelittlepony.api.events;
import net.minecraft.network.PacketByteBuf; import net.minecraft.network.PacketByteBuf;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.api.pony.network.fabric; package com.minelittlepony.api.events;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.Event;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.api.model.fabric; package com.minelittlepony.api.events;
import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory; import net.fabricmc.fabric.api.event.EventFactory;

View file

@ -1,10 +0,0 @@
package com.minelittlepony.api.model;
import com.minelittlepony.api.pony.PonyData;
public interface IModelWrapper {
/**
* Updates metadata values to this wrapper's contained models.
*/
IModelWrapper applyMetadata(PonyData meta);
}

View file

@ -4,12 +4,8 @@ import net.minecraft.client.model.ModelPart;
import net.minecraft.util.Arm; import net.minecraft.util.Arm;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import com.minelittlepony.client.model.ClientPonyModel;
import com.minelittlepony.mson.util.PartUtil; import com.minelittlepony.mson.util.PartUtil;
/**
* Common interface for all undead enemies.
*/
public final class MobPosingHelper { public final class MobPosingHelper {
/** /**
* Rotates the provided arm to the correct orientation for holding an item. * Rotates the provided arm to the correct orientation for holding an item.
@ -34,9 +30,9 @@ public final class MobPosingHelper {
arm.roll = cos; arm.roll = cos;
} }
public static void rotateUndeadArms(ClientPonyModel<?> model, float move, float ticks) { public static void rotateUndeadArms(PonyModel<?> model, float move, float ticks) {
ModelPart leftArm = model.getArm(Arm.LEFT); ModelPart leftArm = model.getForeLeg(Arm.LEFT);
ModelPart rightArm = model.getArm(Arm.RIGHT); ModelPart rightArm = model.getForeLeg(Arm.RIGHT);
if (islookAngleRight(move)) { if (islookAngleRight(move)) {
rotateArmHolding(rightArm, 1, model.getSwingAmount(), ticks); rotateArmHolding(rightArm, 1, model.getSwingAmount(), ticks);

View file

@ -1,5 +1,6 @@
package com.minelittlepony.api.model; package com.minelittlepony.api.model;
import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.pony.*; import com.minelittlepony.api.pony.*;
import com.minelittlepony.client.*; import com.minelittlepony.client.*;
import com.minelittlepony.common.util.animation.Interpolator; import com.minelittlepony.common.util.animation.Interpolator;
@ -156,7 +157,7 @@ public class ModelAttributes {
interpolatorId = entity.getUuid(); interpolatorId = entity.getUuid();
} }
isLeftHanded = entity.getMainArm() == Arm.LEFT; isLeftHanded = entity.getMainArm() == Arm.LEFT;
isHorsey = MineLittlePony.getInstance().getConfig().horsieMode.get(); isHorsey = PonyConfig.getInstance().horsieMode.get();
featureSkins = SkinsProxy.instance.getAvailableSkins(entity); featureSkins = SkinsProxy.instance.getAvailableSkins(entity);
mainArm = entity.getMainArm(); mainArm = entity.getMainArm();
activeHand = entity.getActiveHand(); activeHand = entity.getActiveHand();

View file

@ -0,0 +1,14 @@
package com.minelittlepony.api.model;
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.entity.model.ModelWithArms;
import net.minecraft.client.render.entity.model.BipedEntityModel.ArmPose;
import net.minecraft.util.Arm;
public interface ModelWithHooves extends ModelWithArms {
ModelPart getForeLeg(Arm side);
ModelPart getHindLeg(Arm side);
ArmPose getArmPoseForSide(Arm side);
}

View file

@ -1,4 +1,4 @@
package com.minelittlepony.client.model; package com.minelittlepony.api.model;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ArmorItem; import net.minecraft.item.ArmorItem;
@ -6,12 +6,11 @@ import net.minecraft.item.ItemStack;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.minelittlepony.api.model.PonyModel;
import com.minelittlepony.api.model.IModelWrapper;
import com.minelittlepony.api.model.armour.*;
import com.minelittlepony.api.pony.PonyData; import com.minelittlepony.api.pony.PonyData;
import com.minelittlepony.client.model.armour.PonyArmourModel; import com.minelittlepony.client.model.PlayerModelKey;
import com.minelittlepony.mson.api.*; import com.minelittlepony.client.model.armour.*;
import com.minelittlepony.mson.api.ModelKey;
import com.minelittlepony.mson.api.MsonModel;
import java.util.*; import java.util.*;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -19,7 +18,7 @@ import java.util.function.Consumer;
/** /**
* Container class for the various models and their associated piece of armour. * Container class for the various models and their associated piece of armour.
*/ */
public class ModelWrapper<T extends LivingEntity, M extends PonyModel<?>> implements IModelWrapper { public class ModelWrapper<T extends LivingEntity, M extends PonyModel<?>> {
@Nullable @Nullable
private final MsonModel.Factory<PonyArmourModel<T>> armorFactory; private final MsonModel.Factory<PonyArmourModel<T>> armorFactory;
private final Map<ModelKey<PonyArmourModel<?>>, PonyArmourModel<T>> armor = new HashMap<>(); private final Map<ModelKey<PonyArmourModel<?>>, PonyArmourModel<T>> armor = new HashMap<>();
@ -50,7 +49,6 @@ public class ModelWrapper<T extends LivingEntity, M extends PonyModel<?>> implem
})); }));
} }
@Override
public ModelWrapper<T, M> applyMetadata(PonyData meta) { public ModelWrapper<T, M> applyMetadata(PonyData meta) {
body.setMetadata(meta); body.setMetadata(meta);
armor.values().forEach(a -> a.setMetadata(meta)); armor.values().forEach(a -> a.setMetadata(meta));

View file

@ -12,7 +12,7 @@ import com.minelittlepony.api.pony.PonyData;
import com.minelittlepony.api.pony.meta.*; import com.minelittlepony.api.pony.meta.*;
import com.minelittlepony.mson.api.MsonModel; import com.minelittlepony.mson.api.MsonModel;
public interface PonyModel<T extends LivingEntity> extends MsonModel, ModelWithArms, ModelWithHat, ModelWithHead { public interface PonyModel<T extends LivingEntity> extends MsonModel, ModelWithHooves, ModelWithHat, ModelWithHead {
void copyAttributes(BipedEntityModel<T> other); void copyAttributes(BipedEntityModel<T> other);

View file

@ -1,21 +1,20 @@
package com.minelittlepony.client.model; package com.minelittlepony.api.model;
import net.minecraft.client.model.ModelPart; import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.client.render.entity.model.BipedEntityModel;
import net.minecraft.client.render.entity.model.ModelWithArms; import net.minecraft.client.render.entity.model.ModelWithArms;
import net.minecraft.client.render.entity.model.BipedEntityModel.ArmPose;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.util.Arm; import net.minecraft.util.Arm;
import com.minelittlepony.api.model.*;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.api.pony.PonyData; import com.minelittlepony.api.pony.PonyData;
import com.minelittlepony.api.pony.meta.Size; import com.minelittlepony.api.pony.meta.Size;
import com.minelittlepony.mson.api.ModelView; import com.minelittlepony.mson.api.ModelView;
import com.minelittlepony.mson.api.model.BoxBuilder.RenderLayerSetter; import com.minelittlepony.mson.api.model.BoxBuilder.RenderLayerSetter;
public interface IPonyMixinModel<T extends LivingEntity, M extends PonyModel<T>> extends PonyModel<T> { public interface PonyModelMixin<T extends LivingEntity, M extends PonyModel<T>> extends PonyModel<T> {
M mixin(); M mixin();
@Override @Override
@ -71,6 +70,22 @@ public interface IPonyMixinModel<T extends LivingEntity, M extends PonyModel<T>>
return mixin().getRiderYOffset(); return mixin().getRiderYOffset();
} }
@Override
default ModelPart getForeLeg(Arm side) {
return mixin().getForeLeg(side);
}
@Override
default ModelPart getHindLeg(Arm side) {
return mixin().getHindLeg(side);
}
@Override
default ArmPose getArmPoseForSide(Arm side) {
return mixin().getArmPoseForSide(side);
}
@Override @Override
default void setArmAngle(Arm arm, MatrixStack stack) { default void setArmAngle(Arm arm, MatrixStack stack) {
if (mixin() instanceof ModelWithArms) { if (mixin() instanceof ModelWithArms) {
@ -93,7 +108,7 @@ public interface IPonyMixinModel<T extends LivingEntity, M extends PonyModel<T>>
mixin().setHatVisible(hatVisible); mixin().setHatVisible(hatVisible);
} }
interface Caster<T extends LivingEntity, M extends PonyModel<T> & HornedPonyModel<T>, ArmModel> extends IPonyMixinModel<T, M>, HornedPonyModel<T> { interface Caster<T extends LivingEntity, M extends PonyModel<T> & HornedPonyModel<T>, ArmModel> extends PonyModelMixin<T, M>, HornedPonyModel<T> {
@Override @Override
default boolean isCasting() { default boolean isCasting() {
return mixin().isCasting(); return mixin().isCasting();

View file

@ -1,4 +1,4 @@
package com.minelittlepony.client; package com.minelittlepony.api.model;
public interface PreviewModel { public interface PreviewModel {
boolean forceSeapony(); boolean forceSeapony();

View file

@ -3,7 +3,7 @@ package com.minelittlepony.api.model;
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;
public interface IPart { public interface SubModel {
/** /**
* Sets the model's various rotation angles. * Sets the model's various rotation angles.
*/ */

View file

@ -2,8 +2,8 @@ package com.minelittlepony.api.model;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.api.pony.meta.Wearable;
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.util.MathUtil; import com.minelittlepony.util.MathUtil;
public interface WingedPonyModel<T extends LivingEntity> extends PonyModel<T> { public interface WingedPonyModel<T extends LivingEntity> extends PonyModel<T> {
@ -16,7 +16,7 @@ public interface WingedPonyModel<T extends LivingEntity> extends PonyModel<T> {
*/ */
default boolean wingsAreOpen() { default boolean wingsAreOpen() {
return (getAttributes().isSwimming || getAttributes().isFlying || getAttributes().isCrouching) return (getAttributes().isSwimming || getAttributes().isFlying || getAttributes().isCrouching)
&& (MineLittlePony.getInstance().getConfig().flappyElytras.get() || !getAttributes().isGliding); && (PonyConfig.getInstance().flappyElytras.get() || !getAttributes().isGliding);
} }
default boolean isBurdened() { default boolean isBurdened() {
@ -28,7 +28,7 @@ public interface WingedPonyModel<T extends LivingEntity> extends PonyModel<T> {
/** /**
* Gets the wings of this pegasus/flying creature * Gets the wings of this pegasus/flying creature
*/ */
IPart getWings(); SubModel getWings();
/** /**
* Determines angle used to animate wing flaps whilst flying/swimming. * Determines angle used to animate wing flaps whilst flying/swimming.

View file

@ -1,17 +0,0 @@
package com.minelittlepony.api.model.armour;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.LivingEntity;
import com.minelittlepony.api.model.PonyModel;
public interface IArmourModel<T extends LivingEntity> {
/**
* Called to synchronise this armour's angles with that of another.
*
* @param model The other model to mimic
*/
boolean poseModel(T entity, float limbAngle, float limbDistance, float age, float headYaw, float headPitch,
EquipmentSlot slot, ArmourLayer layer,
PonyModel<T> mainModel);
}

View file

@ -1,30 +0,0 @@
package com.minelittlepony.api.model.armour;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;
import com.minelittlepony.client.model.armour.DefaultArmourTextureResolver;
/**
* A resolver for looking up the texture for a piece of armour.
* <p>
* This is for modders who want to override the default implementation found in {@link DefaultArmourTextureResolver}.
*/
public interface IArmourTextureResolver {
/**
* Gets the armour texture to be used for the given entity, armour piece, slot, and render layer.
*/
Identifier getTexture(LivingEntity entity, ItemStack itemstack, EquipmentSlot slot, ArmourLayer layer, @Nullable String type);
/**
* Gets the armour variant for the identified texture.
* Either normal for pony-style textures, or legacy for other textures.
*/
default ArmourVariant getVariant(ArmourLayer layer, Identifier resolvedTexture) {
return ArmourVariant.NORMAL;
}
}

View file

@ -9,22 +9,23 @@ import net.minecraft.util.Identifier;
import com.minelittlepony.api.model.*; import com.minelittlepony.api.model.*;
import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.api.pony.meta.Wearable;
import com.minelittlepony.client.render.entity.feature.GearFeature;
import java.util.UUID; import java.util.*;
import java.util.function.Supplier; import java.util.function.Supplier;
/** /**
* Interface for an accessory on a pony's body. * Interface for an accessory on a pony's body.
*/ */
public interface Gear { public interface Gear {
List<Supplier<Gear>> MOD_GEARS = new ArrayList<>();
/** /**
* Registers a custom gear to be used with the mod. * Registers a custom gear to be used with the mod.
* <p> * <p>
* This would be awesome for creating socks. * This would be awesome for creating socks.
*/ */
static Supplier<Gear> register(Supplier<Gear> gear) { static Supplier<Gear> register(Supplier<Gear> gear) {
GearFeature.addModGear(gear); MOD_GEARS.add(gear);
return gear; return gear;
} }

View file

@ -1,7 +1,7 @@
package com.minelittlepony.api.pony; package com.minelittlepony.api.pony;
import com.minelittlepony.api.pony.meta.Race; import com.minelittlepony.api.pony.meta.Race;
import com.minelittlepony.client.PreviewModel; import com.minelittlepony.api.model.PreviewModel;
import com.minelittlepony.client.SkinsProxy; import com.minelittlepony.client.SkinsProxy;
import com.minelittlepony.client.render.entity.AquaticPlayerPonyRenderer; import com.minelittlepony.client.render.entity.AquaticPlayerPonyRenderer;

View file

@ -18,8 +18,6 @@ public enum Sizes implements Size {
FOAL (0xffbe53, 0.25f, 0.6F, 0.5F), FOAL (0xffbe53, 0.25f, 0.6F, 0.5F),
UNSET (0x000000, 1, 1, 1); UNSET (0x000000, 1, 1, 1);
public static final Sizes[] REGISTRY = values();
private int triggerValue; private int triggerValue;
private float shadowSize; private float shadowSize;
@ -33,6 +31,11 @@ public enum Sizes implements Size {
camera = cameraF; camera = cameraF;
} }
@Override
public int colorCode() {
return triggerValue;
}
@Override @Override
public float shadowSize() { public float shadowSize() {
return shadowSize * PonyConfig.getInstance().getGlobalScaleFactor(); return shadowSize * PonyConfig.getInstance().getGlobalScaleFactor();
@ -53,25 +56,7 @@ public enum Sizes implements Size {
@Override @Override
public float eyeDistanceFactor() { public float eyeDistanceFactor() {
if (!PonyConfig.getInstance().fillycam.get()) { return eyeHeightFactor();
return 1;
}
return camera * PonyConfig.getInstance().getGlobalScaleFactor();
} }
@Override
public int colorCode() {
return triggerValue;
}
public static Sizes of(Size size) {
if (size instanceof Sizes) {
return (Sizes)size;
}
int i = size.ordinal();
if (i < 0 || i >= REGISTRY.length) {
return UNSET;
}
return REGISTRY[i];
}
} }

View file

@ -2,7 +2,6 @@ package com.minelittlepony.api.pony.meta;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import com.minelittlepony.client.model.gear.SaddleBags;
import com.minelittlepony.common.util.Color; import com.minelittlepony.common.util.Color;
import java.util.*; import java.util.*;
@ -15,9 +14,9 @@ public enum Wearable implements TriggerPixelType<Wearable> {
MUFFIN (0x32, new Identifier("minelittlepony", "textures/models/muffin.png")), MUFFIN (0x32, new Identifier("minelittlepony", "textures/models/muffin.png")),
HAT (0x64, new Identifier("textures/entity/witch.png")), HAT (0x64, new Identifier("textures/entity/witch.png")),
ANTLERS (0x96, new Identifier("minelittlepony", "textures/models/antlers.png")), ANTLERS (0x96, new Identifier("minelittlepony", "textures/models/antlers.png")),
SADDLE_BAGS_LEFT (0xC6, SaddleBags.TEXTURE), SADDLE_BAGS_LEFT (0xC6, new Identifier("minelittlepony", "textures/models/saddlebags.png")),
SADDLE_BAGS_RIGHT (0xC7, SaddleBags.TEXTURE), SADDLE_BAGS_RIGHT (0xC7, new Identifier("minelittlepony", "textures/models/saddlebags.png")),
SADDLE_BAGS_BOTH (0xC8, SaddleBags.TEXTURE), SADDLE_BAGS_BOTH (0xC8, new Identifier("minelittlepony", "textures/models/saddlebags.png")),
STETSON (0xFA, new Identifier("minelittlepony", "textures/models/stetson.png")); STETSON (0xFA, new Identifier("minelittlepony", "textures/models/stetson.png"));
private int triggerValue; private int triggerValue;

View file

@ -4,15 +4,14 @@ import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.client.model.armour.DefaultArmourTextureResolver; import com.minelittlepony.client.model.armour.ArmourTextureResolver;
import com.minelittlepony.client.render.MobRenderers; import com.minelittlepony.client.render.MobRenderers;
import com.minelittlepony.common.client.gui.VisibilityMode; import com.minelittlepony.common.client.gui.VisibilityMode;
import com.minelittlepony.common.util.settings.Setting; import com.minelittlepony.common.util.settings.Setting;
import java.nio.file.Path; import java.nio.file.Path;
public class ClientPonyConfig extends PonyConfig { class ClientPonyConfig extends PonyConfig {
/** /**
* Visibility mode for the horse button. * Visibility mode for the horse button.
*/ */
@ -25,7 +24,7 @@ public class ClientPonyConfig extends PonyConfig {
public ClientPonyConfig(Path path) { public ClientPonyConfig(Path path) {
super(path); super(path);
MobRenderers.REGISTRY.values().forEach(r -> value("entities", r.name, true)); MobRenderers.REGISTRY.values().forEach(r -> value("entities", r.name, true));
disablePonifiedArmour.onChanged(t -> DefaultArmourTextureResolver.INSTANCE.invalidate()); disablePonifiedArmour.onChanged(t -> ArmourTextureResolver.INSTANCE.invalidate());
} }
@Override @Override

View file

@ -5,6 +5,7 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.hit.HitResult; import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.*; import net.minecraft.util.math.*;
import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.common.util.settings.Setting; import com.minelittlepony.common.util.settings.Setting;
@ -31,7 +32,7 @@ public class HorseCam {
*/ */
public static float transformCameraAngle(float pitch) { public static float transformCameraAngle(float pitch) {
if (!MineLittlePony.getInstance().getConfig().fillycam.get()) { if (!PonyConfig.getInstance().fillycam.get()) {
return pitch; return pitch;
} }
@ -51,7 +52,7 @@ public class HorseCam {
Pony pony = Pony.getManager().getPony(player); Pony pony = Pony.getManager().getPony(player);
if (!pony.race().isHuman()) { if (!pony.race().isHuman()) {
Setting<Boolean> fillyCam = MineLittlePony.getInstance().getConfig().fillycam; Setting<Boolean> fillyCam = PonyConfig.getInstance().fillycam;
fillyCam.set(false); fillyCam.set(false);
final float vanillaHeight = player.getEyeHeight(player.getPose()); final float vanillaHeight = player.getEyeHeight(player.getPose());

View file

@ -1,8 +1,7 @@
package com.minelittlepony.client; package com.minelittlepony.client;
import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.events.Channel;
import com.minelittlepony.api.pony.PonyManager; import com.minelittlepony.api.pony.PonyManager;
import com.minelittlepony.api.pony.network.fabric.Channel;
import com.minelittlepony.client.model.ModelType; import com.minelittlepony.client.model.ModelType;
import com.minelittlepony.client.render.PonyRenderDispatcher; import com.minelittlepony.client.render.PonyRenderDispatcher;
import com.minelittlepony.common.client.gui.VisibilityMode; import com.minelittlepony.common.client.gui.VisibilityMode;
@ -130,13 +129,6 @@ public class MineLittlePony implements ClientModInitializer {
} }
} }
/**
* Gets the global MineLP client configuration.
*/
public PonyConfig getConfig() {
return config;
}
public PonyManager getManager() { public PonyManager getManager() {
return ponyManager; return ponyManager;
} }

View file

@ -5,6 +5,7 @@ import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.*; import net.minecraft.text.*;
import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.client.render.MobRenderers; import com.minelittlepony.client.render.MobRenderers;
import com.minelittlepony.common.client.gui.GameGui; import com.minelittlepony.common.client.gui.GameGui;
import com.minelittlepony.common.client.gui.ScrollContainer; import com.minelittlepony.common.client.gui.ScrollContainer;
@ -43,7 +44,7 @@ public class PonySettingsscreen extends GameGui {
public PonySettingsscreen(@Nullable Screen parent) { public PonySettingsscreen(@Nullable Screen parent) {
super(Text.literal(OPTIONS_PREFIX + "title"), parent); super(Text.literal(OPTIONS_PREFIX + "title"), parent);
config = (ClientPonyConfig)MineLittlePony.getInstance().getConfig(); config = (ClientPonyConfig)PonyConfig.getInstance();
content.margin.top = 30; content.margin.top = 30;
content.margin.bottom = 30; content.margin.bottom = 30;

View file

@ -43,17 +43,3 @@ public class SkinsProxy {
return Set.of(); return Set.of();
} }
} }

View file

@ -2,8 +2,8 @@ package com.minelittlepony.client.compat.hdskins;
import net.minecraft.client.world.ClientWorld; import net.minecraft.client.world.ClientWorld;
import com.minelittlepony.api.model.PreviewModel;
import com.minelittlepony.api.pony.*; import com.minelittlepony.api.pony.*;
import com.minelittlepony.client.PreviewModel;
import com.minelittlepony.client.render.EquineRenderManager; import com.minelittlepony.client.render.EquineRenderManager;
import com.minelittlepony.hdskins.client.gui.player.*; import com.minelittlepony.hdskins.client.gui.player.*;
import com.minelittlepony.hdskins.client.gui.player.skins.PlayerSkins; import com.minelittlepony.hdskins.client.gui.player.skins.PlayerSkins;

View file

@ -1,8 +1,8 @@
package com.minelittlepony.client.mixin; package com.minelittlepony.client.mixin;
import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.config.PonyLevel; import com.minelittlepony.api.config.PonyLevel;
import com.minelittlepony.api.pony.DefaultPonySkinHelper; import com.minelittlepony.api.pony.DefaultPonySkinHelper;
import com.minelittlepony.client.MineLittlePony;
import net.minecraft.client.util.DefaultSkinHelper; import net.minecraft.client.util.DefaultSkinHelper;
import net.minecraft.client.util.SkinTextures; import net.minecraft.client.util.SkinTextures;
@ -21,7 +21,7 @@ abstract class MixinDefaultSkinHelper {
at = @At("RETURN"), at = @At("RETURN"),
cancellable = true) cancellable = true)
private static void onGetTexture(CallbackInfoReturnable<Identifier> cir) { private static void onGetTexture(CallbackInfoReturnable<Identifier> cir) {
if (MineLittlePony.getInstance().getConfig().ponyLevel.get() == PonyLevel.PONIES) { if (PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES) {
cir.setReturnValue(DefaultPonySkinHelper.STEVE); cir.setReturnValue(DefaultPonySkinHelper.STEVE);
} }
} }
@ -30,7 +30,7 @@ abstract class MixinDefaultSkinHelper {
at = @At("RETURN"), at = @At("RETURN"),
cancellable = true) cancellable = true)
private static void onGetTexture(UUID uuid, CallbackInfoReturnable<SkinTextures> cir) { private static void onGetTexture(UUID uuid, CallbackInfoReturnable<SkinTextures> cir) {
if (MineLittlePony.getInstance().getConfig().ponyLevel.get() == PonyLevel.PONIES) { if (PonyConfig.getInstance().ponyLevel.get() == PonyLevel.PONIES) {
cir.setReturnValue(DefaultPonySkinHelper.getTextures(cir.getReturnValue())); cir.setReturnValue(DefaultPonySkinHelper.getTextures(cir.getReturnValue()));
} }
} }

View file

@ -1,7 +1,7 @@
package com.minelittlepony.client.model; package com.minelittlepony.client.model;
import com.minelittlepony.api.model.*; import com.minelittlepony.api.model.*;
import com.minelittlepony.api.model.fabric.PonyModelPrepareCallback; import com.minelittlepony.api.events.PonyModelPrepareCallback;
import com.minelittlepony.api.pony.meta.Sizes; import com.minelittlepony.api.pony.meta.Sizes;
import com.minelittlepony.client.transform.PonyTransformation; import com.minelittlepony.client.transform.PonyTransformation;
import com.minelittlepony.client.util.render.RenderList; import com.minelittlepony.client.util.render.RenderList;
@ -50,7 +50,7 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
protected final RenderList mainRenderList; protected final RenderList mainRenderList;
private final List<IPart> parts = new ArrayList<>(); private final List<SubModel> parts = new ArrayList<>();
public AbstractPonyModel(ModelPart tree) { public AbstractPonyModel(ModelPart tree) {
super(tree); super(tree);
@ -66,18 +66,18 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
.add(withStage(BodyPart.HEAD, helmetRenderList = RenderList.of(hat))); .add(withStage(BodyPart.HEAD, helmetRenderList = RenderList.of(hat)));
} }
protected <P extends IPart> P addPart(P part) { protected <P extends SubModel> P addPart(P part) {
parts.add(part); parts.add(part);
return part; return part;
} }
protected RenderList forPart(Supplier<IPart> part) { protected RenderList forPart(Supplier<SubModel> part) {
return (stack, vertices, overlayUv, lightUv, red, green, blue, alpha) -> { return (stack, vertices, overlayUv, lightUv, red, green, blue, alpha) -> {
part.get().renderPart(stack, vertices, overlayUv, lightUv, red, green, blue, alpha, attributes); part.get().renderPart(stack, vertices, overlayUv, lightUv, red, green, blue, alpha, attributes);
}; };
} }
protected RenderList forPart(IPart part) { protected RenderList forPart(SubModel part) {
return (stack, vertices, overlayUv, lightUv, red, green, blue, alpha) -> { return (stack, vertices, overlayUv, lightUv, red, green, blue, alpha) -> {
part.renderPart(stack, vertices, overlayUv, lightUv, red, green, blue, alpha, attributes); part.renderPart(stack, vertices, overlayUv, lightUv, red, green, blue, alpha, attributes);
}; };

View file

@ -8,8 +8,8 @@ import net.minecraft.util.Hand;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.minelittlepony.api.events.PonyModelPrepareCallback;
import com.minelittlepony.api.model.*; import com.minelittlepony.api.model.*;
import com.minelittlepony.api.model.fabric.PonyModelPrepareCallback;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.api.pony.PonyData; import com.minelittlepony.api.pony.PonyData;
import com.minelittlepony.api.pony.meta.Size; import com.minelittlepony.api.pony.meta.Size;
@ -93,10 +93,16 @@ public abstract class ClientPonyModel<T extends LivingEntity> extends MsonPlayer
} }
@Override @Override
public ModelPart getArm(Arm side) { public ModelPart getForeLeg(Arm side) {
return super.getArm(side); return getArm(side);
} }
@Override
public ModelPart getHindLeg(Arm side) {
return side == Arm.LEFT ? leftLeg : rightLeg;
}
@Override
public ArmPose getArmPoseForSide(Arm side) { public ArmPose getArmPoseForSide(Arm side) {
return side == Arm.RIGHT ? rightArmPose : leftArmPose; return side == Arm.RIGHT ? rightArmPose : leftArmPose;
} }

View file

@ -6,7 +6,7 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.Util; import net.minecraft.util.Util;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.mson.api.*; import com.minelittlepony.mson.api.*;
import com.minelittlepony.mson.api.MsonModel.Factory; import com.minelittlepony.mson.api.MsonModel.Factory;
import com.minelittlepony.mson.api.model.traversal.PartSkeleton; import com.minelittlepony.mson.api.model.traversal.PartSkeleton;
@ -79,7 +79,7 @@ final class ModelKeyImpl<M extends Model> implements ModelKey<M>, LocalBlock {
} }
private ModelContext getModelContext(FileContent<?> content) { private ModelContext getModelContext(FileContent<?> content) {
if (MineLittlePony.getInstance().getConfig().horsieMode.get()) { if (PonyConfig.getInstance().horsieMode.get()) {
return content.createContext(null, null, content.getLocals().extendWith(getId(), Optional.of(this), Optional.empty()).bake()); return content.createContext(null, null, content.getLocals().extendWith(getId(), Optional.of(this), Optional.empty()).bake());
} }
return content.createContext(null, null, content.getLocals().bake()); return content.createContext(null, null, content.getLocals().bake());

View file

@ -7,6 +7,7 @@ import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.minelittlepony.api.model.ModelWrapper;
import com.minelittlepony.api.model.PonyModel; import com.minelittlepony.api.model.PonyModel;
import com.minelittlepony.client.model.armour.PonyArmourModel; import com.minelittlepony.client.model.armour.PonyArmourModel;
import com.minelittlepony.mson.api.*; import com.minelittlepony.mson.api.*;

View file

@ -1,10 +1,9 @@
package com.minelittlepony.api.model.armour; package com.minelittlepony.client.model.armour;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import com.minelittlepony.client.model.armour.PonyArmourModel;
import com.minelittlepony.mson.api.ModelKey; import com.minelittlepony.mson.api.ModelKey;
import com.minelittlepony.mson.api.Mson; import com.minelittlepony.mson.api.Mson;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.api.model.armour; package com.minelittlepony.client.model.armour;
/** /**
* The layer used to render a given armour piece. * The layer used to render a given armour piece.

View file

@ -13,9 +13,6 @@ import com.google.common.base.Strings;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.model.armour.ArmourLayer;
import com.minelittlepony.api.model.armour.ArmourVariant;
import com.minelittlepony.api.model.armour.IArmourTextureResolver;
import com.minelittlepony.util.ResourceUtil; import com.minelittlepony.util.ResourceUtil;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -38,8 +35,8 @@ import java.util.concurrent.TimeUnit;
* - the "minecraft" namespace is always replaced with "minelittlepony" * - the "minecraft" namespace is always replaced with "minelittlepony"
* <p> * <p>
*/ */
public class DefaultArmourTextureResolver implements IArmourTextureResolver { public class ArmourTextureResolver {
public static final DefaultArmourTextureResolver INSTANCE = new DefaultArmourTextureResolver(); public static final ArmourTextureResolver INSTANCE = new ArmourTextureResolver();
private final Cache<String, Identifier> cache = CacheBuilder.newBuilder() private final Cache<String, Identifier> cache = CacheBuilder.newBuilder()
.expireAfterAccess(30, TimeUnit.SECONDS) .expireAfterAccess(30, TimeUnit.SECONDS)
@ -49,7 +46,6 @@ public class DefaultArmourTextureResolver implements IArmourTextureResolver {
cache.invalidateAll(); cache.invalidateAll();
} }
@Override
public Identifier getTexture(LivingEntity entity, ItemStack stack, EquipmentSlot slot, ArmourLayer layer, @Nullable String type) { public Identifier getTexture(LivingEntity entity, ItemStack stack, EquipmentSlot slot, ArmourLayer layer, @Nullable String type) {
Identifier material = stack.getItem() instanceof ArmorItem armor Identifier material = stack.getItem() instanceof ArmorItem armor
? new Identifier(armor.getMaterial().getName()) ? new Identifier(armor.getMaterial().getName())
@ -129,7 +125,6 @@ public class DefaultArmourTextureResolver implements IArmourTextureResolver {
return MinecraftClient.getInstance().getResourceManager().getResource(texture).isPresent(); return MinecraftClient.getInstance().getResourceManager().getResource(texture).isPresent();
} }
@Override
public ArmourVariant getVariant(ArmourLayer layer, Identifier resolvedTexture) { public ArmourVariant getVariant(ArmourLayer layer, Identifier resolvedTexture) {
if (resolvedTexture.getPath().endsWith("_pony.png")) { if (resolvedTexture.getPath().endsWith("_pony.png")) {
return ArmourVariant.NORMAL; return ArmourVariant.NORMAL;

View file

@ -1,7 +1,6 @@
package com.minelittlepony.api.model.armour; package com.minelittlepony.client.model.armour;
import com.minelittlepony.client.model.ModelType; import com.minelittlepony.client.model.ModelType;
import com.minelittlepony.client.model.armour.PonyArmourModel;
import com.minelittlepony.mson.api.ModelKey; import com.minelittlepony.mson.api.ModelKey;
import java.util.Optional; import java.util.Optional;

View file

@ -6,16 +6,14 @@ import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import com.minelittlepony.api.model.PonyModel; import com.minelittlepony.api.model.PonyModel;
import com.minelittlepony.api.model.armour.*;
import com.minelittlepony.client.model.AbstractPonyModel; import com.minelittlepony.client.model.AbstractPonyModel;
public class PonyArmourModel<T extends LivingEntity> extends AbstractPonyModel<T> implements IArmourModel<T> { public class PonyArmourModel<T extends LivingEntity> extends AbstractPonyModel<T> {
public PonyArmourModel(ModelPart tree) { public PonyArmourModel(ModelPart tree) {
super(tree); super(tree);
} }
@Override
public boolean poseModel(T entity, float limbAngle, float limbDistance, float age, float headYaw, float headPitch, public boolean poseModel(T entity, float limbAngle, float limbDistance, float age, float headYaw, float headPitch,
EquipmentSlot slot, ArmourLayer layer, EquipmentSlot slot, ArmourLayer layer,
PonyModel<T> mainModel) { PonyModel<T> mainModel) {

View file

@ -6,10 +6,11 @@ import net.minecraft.client.render.entity.model.EntityModel;
import net.minecraft.client.render.entity.model.GuardianEntityModel; import net.minecraft.client.render.entity.model.GuardianEntityModel;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.mob.GuardianEntity; import net.minecraft.entity.mob.GuardianEntity;
import com.minelittlepony.client.model.IPonyMixinModel;
import com.minelittlepony.api.model.PonyModelMixin;
import com.minelittlepony.client.model.entity.race.SeaponyModel; import com.minelittlepony.client.model.entity.race.SeaponyModel;
public class GuardianPonyModel extends GuardianEntityModel implements IPonyMixinModel.Caster<GuardianEntity, SeaponyModel<GuardianEntity>, ModelPart> { public class GuardianPonyModel extends GuardianEntityModel implements PonyModelMixin.Caster<GuardianEntity, SeaponyModel<GuardianEntity>, ModelPart> {
private final SeaponyModel<GuardianEntity> mixin; private final SeaponyModel<GuardianEntity> mixin;
public GuardianPonyModel(ModelPart tree) { public GuardianPonyModel(ModelPart tree) {

View file

@ -1,6 +1,6 @@
package com.minelittlepony.client.model.entity.race; package com.minelittlepony.client.model.entity.race;
import com.minelittlepony.api.model.IPart; import com.minelittlepony.api.model.SubModel;
import com.minelittlepony.api.model.WingedPonyModel; import com.minelittlepony.api.model.WingedPonyModel;
import com.minelittlepony.client.model.part.PonyWings; import com.minelittlepony.client.model.part.PonyWings;
import com.minelittlepony.mson.api.ModelView; import com.minelittlepony.mson.api.ModelView;
@ -24,7 +24,7 @@ public class AlicornModel<T extends LivingEntity> extends UnicornModel<T> implem
} }
@Override @Override
public IPart getWings() { public SubModel getWings() {
return wings; return wings;
} }
} }

View file

@ -1,6 +1,6 @@
package com.minelittlepony.client.model.entity.race; package com.minelittlepony.client.model.entity.race;
import com.minelittlepony.api.model.IPart; import com.minelittlepony.api.model.SubModel;
import com.minelittlepony.client.model.AbstractPonyModel; import com.minelittlepony.client.model.AbstractPonyModel;
import com.minelittlepony.client.model.part.*; import com.minelittlepony.client.model.part.*;
import com.minelittlepony.mson.api.ModelView; import com.minelittlepony.mson.api.ModelView;
@ -12,7 +12,7 @@ public class EarthPonyModel<T extends LivingEntity> extends AbstractPonyModel<T>
private final boolean smallArms; private final boolean smallArms;
protected IPart tail; protected SubModel tail;
protected PonySnout snout; protected PonySnout snout;
protected PonyEars ears; protected PonyEars ears;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.client.model.entity.race; package com.minelittlepony.client.model.entity.race;
import com.minelittlepony.api.model.IPart; import com.minelittlepony.api.model.SubModel;
import com.minelittlepony.api.model.WingedPonyModel; import com.minelittlepony.api.model.WingedPonyModel;
import com.minelittlepony.client.model.part.PonyWings; import com.minelittlepony.client.model.part.PonyWings;
import com.minelittlepony.mson.api.ModelView; import com.minelittlepony.mson.api.ModelView;
@ -24,7 +24,7 @@ public class PegasusModel<T extends LivingEntity> extends EarthPonyModel<T> impl
} }
@Override @Override
public IPart getWings() { public SubModel getWings() {
return wings; return wings;
} }
} }

View file

@ -1,9 +1,9 @@
package com.minelittlepony.client.model.entity.race; package com.minelittlepony.client.model.entity.race;
import com.minelittlepony.client.model.armour.PonyArmourModel;
import com.minelittlepony.mson.api.ModelView; import com.minelittlepony.mson.api.ModelView;
import com.minelittlepony.api.model.*; import com.minelittlepony.api.model.*;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.client.model.armour.PonyArmourModel;
import net.minecraft.client.model.ModelPart; import net.minecraft.client.model.ModelPart;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;

View file

@ -1,9 +1,9 @@
package com.minelittlepony.client.model.entity.race; package com.minelittlepony.client.model.entity.race;
import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.model.*; import com.minelittlepony.api.model.*;
import com.minelittlepony.api.pony.meta.Size; import com.minelittlepony.api.pony.meta.Size;
import com.minelittlepony.api.pony.meta.Sizes; import com.minelittlepony.api.pony.meta.Sizes;
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.model.part.UnicornHorn; import com.minelittlepony.client.model.part.UnicornHorn;
import com.minelittlepony.client.util.render.RenderList; import com.minelittlepony.client.util.render.RenderList;
import com.minelittlepony.mson.api.ModelView; import com.minelittlepony.mson.api.ModelView;
@ -57,7 +57,7 @@ public class UnicornModel<T extends LivingEntity> extends EarthPonyModel<T> impl
@Override @Override
public boolean isCasting() { public boolean isCasting() {
return MineLittlePony.getInstance().getConfig().tpsmagic.get() return PonyConfig.getInstance().tpsmagic.get()
&& (rightArmPose != ArmPose.EMPTY || leftArmPose != ArmPose.EMPTY); && (rightArmPose != ArmPose.EMPTY || leftArmPose != ArmPose.EMPTY);
} }
@ -70,7 +70,7 @@ public class UnicornModel<T extends LivingEntity> extends EarthPonyModel<T> impl
@Override @Override
public ModelPart getArm(Arm side) { public ModelPart getArm(Arm side) {
if (hasMagic() && getArmPoseForSide(side) != ArmPose.EMPTY && MineLittlePony.getInstance().getConfig().tpsmagic.get()) { if (hasMagic() && getArmPoseForSide(side) != ArmPose.EMPTY && PonyConfig.getInstance().tpsmagic.get()) {
return side == Arm.LEFT ? unicornArmLeft : unicornArmRight; return side == Arm.LEFT ? unicornArmLeft : unicornArmRight;
} }
return super.getArm(side); return super.getArm(side);
@ -80,7 +80,7 @@ public class UnicornModel<T extends LivingEntity> extends EarthPonyModel<T> impl
protected void positionheldItem(Arm arm, MatrixStack matrices) { protected void positionheldItem(Arm arm, MatrixStack matrices) {
super.positionheldItem(arm, matrices); super.positionheldItem(arm, matrices);
if (!MineLittlePony.getInstance().getConfig().tpsmagic.get() || !hasMagic()) { if (!PonyConfig.getInstance().tpsmagic.get() || !hasMagic()) {
return; return;
} }

View file

@ -13,13 +13,9 @@ 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.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
public class SaddleBags extends WearableGear { public class SaddleBags extends WearableGear {
public static final Identifier TEXTURE = new Identifier("minelittlepony", "textures/models/saddlebags.png");
private final ModelPart leftBag; private final ModelPart leftBag;
private final ModelPart rightBag; private final ModelPart rightBag;

View file

@ -5,11 +5,11 @@ 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;
import com.minelittlepony.api.model.IPart; import com.minelittlepony.api.model.SubModel;
import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.model.ModelAttributes;
import com.minelittlepony.common.util.animation.Interpolator; import com.minelittlepony.common.util.animation.Interpolator;
public class LionTail implements IPart { public class LionTail implements SubModel {
private ModelPart tail; private ModelPart tail;

View file

@ -5,12 +5,12 @@ 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;
import com.minelittlepony.api.model.IPart; import com.minelittlepony.api.model.SubModel;
import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.model.ModelAttributes;
import com.minelittlepony.mson.api.*; import com.minelittlepony.mson.api.*;
import com.minelittlepony.mson.api.model.PartBuilder; import com.minelittlepony.mson.api.model.PartBuilder;
public class PonyEars implements IPart, MsonModel { public class PonyEars implements SubModel, MsonModel {
private final ModelPart right; private final ModelPart right;
private final ModelPart left; private final ModelPart left;

View file

@ -4,14 +4,14 @@ 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 com.minelittlepony.api.model.IPart; import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.model.SubModel;
import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.model.ModelAttributes;
import com.minelittlepony.api.pony.meta.Gender; import com.minelittlepony.api.pony.meta.Gender;
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.mson.api.*; import com.minelittlepony.mson.api.*;
import com.minelittlepony.mson.api.model.PartBuilder; import com.minelittlepony.mson.api.model.PartBuilder;
public class PonySnout implements IPart, MsonModel { public class PonySnout implements SubModel, MsonModel {
private final ModelPart mare; private final ModelPart mare;
private final ModelPart stallion; private final ModelPart stallion;
@ -41,7 +41,7 @@ public class PonySnout implements IPart, MsonModel {
public void setVisible(boolean visible, ModelAttributes attributes) { public void setVisible(boolean visible, ModelAttributes attributes) {
visible &= !attributes.isHorsey visible &= !attributes.isHorsey
&& !attributes.metadata.race().isHuman() && !attributes.metadata.race().isHuman()
&& MineLittlePony.getInstance().getConfig().snuzzles.get(); && PonyConfig.getInstance().snuzzles.get();
Gender gender = attributes.metadata.gender(); Gender gender = attributes.metadata.gender();
mare.visible = (visible && gender.isMare()); mare.visible = (visible && gender.isMare());

View file

@ -14,7 +14,7 @@ import com.minelittlepony.util.MathUtil;
import java.util.List; import java.util.List;
import java.util.stream.IntStream; import java.util.stream.IntStream;
public class PonyTail implements IPart, MsonModel { public class PonyTail implements SubModel, MsonModel {
private static final float TAIL_Z = 14; private static final float TAIL_Z = 14;
private static final float TAIL_RIDING_Y = 3; private static final float TAIL_RIDING_Y = 3;
private static final float TAIL_RIDING_Z = 13; private static final float TAIL_RIDING_Z = 13;

View file

@ -12,7 +12,7 @@ import com.minelittlepony.mson.api.ModelView;
import com.minelittlepony.mson.api.MsonModel; import com.minelittlepony.mson.api.MsonModel;
import com.minelittlepony.util.MathUtil; import com.minelittlepony.util.MathUtil;
public class PonyWings<T extends Model & WingedPonyModel<?>> implements IPart, MsonModel { public class PonyWings<T extends Model & WingedPonyModel<?>> implements SubModel, MsonModel {
protected T pegasus; protected T pegasus;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.client.model.part; package com.minelittlepony.client.model.part;
import com.minelittlepony.api.model.IPart; import com.minelittlepony.api.model.SubModel;
import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.model.ModelAttributes;
import com.minelittlepony.mson.api.MsonModel; import com.minelittlepony.mson.api.MsonModel;
@ -9,7 +9,7 @@ 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;
public class SeaponyTail implements IPart, MsonModel { public class SeaponyTail implements SubModel, MsonModel {
private final ModelPart tailBase; private final ModelPart tailBase;
private final ModelPart tailTip; private final ModelPart tailTip;

View file

@ -7,12 +7,12 @@ import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider.Immediate; import net.minecraft.client.render.VertexConsumerProvider.Immediate;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import com.minelittlepony.api.model.IPart; import com.minelittlepony.api.model.SubModel;
import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.model.ModelAttributes;
import com.minelittlepony.client.render.MagicGlow; import com.minelittlepony.client.render.MagicGlow;
import com.minelittlepony.common.util.Color; import com.minelittlepony.common.util.Color;
public class UnicornHorn implements IPart { public class UnicornHorn implements SubModel {
private final ModelPart horn; private final ModelPart horn;
private final ModelPart glow; private final ModelPart glow;

View file

@ -17,7 +17,6 @@ import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.client.PonyBounds; import com.minelittlepony.client.PonyBounds;
public final class DebugBoundingBoxRenderer { public final class DebugBoundingBoxRenderer {
public static <T extends LivingEntity> void render(Pony pony, EntityRenderer<T> renderer, T entity, MatrixStack stack, VertexConsumerProvider renderContext, float tickDelta) { public static <T extends LivingEntity> void render(Pony pony, EntityRenderer<T> renderer, T entity, MatrixStack stack, VertexConsumerProvider renderContext, float tickDelta) {
if (RenderPass.getCurrent() != RenderPass.WORLD) { if (RenderPass.getCurrent() != RenderPass.WORLD) {

View file

@ -1,11 +1,11 @@
package com.minelittlepony.client.render; package com.minelittlepony.client.render;
import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.events.Channel;
import com.minelittlepony.api.events.PonyDataCallback;
import com.minelittlepony.api.model.*; import com.minelittlepony.api.model.*;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.api.pony.network.fabric.Channel;
import com.minelittlepony.api.pony.network.fabric.PonyDataCallback;
import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.model.ModelWrapper;
import com.minelittlepony.client.transform.PonyPosture; import com.minelittlepony.client.transform.PonyPosture;
import com.minelittlepony.mson.api.ModelKey; import com.minelittlepony.mson.api.ModelKey;
import com.minelittlepony.util.MathUtil; import com.minelittlepony.util.MathUtil;
@ -65,7 +65,7 @@ public class EquineRenderManager<T extends LivingEntity, M extends EntityModel<T
return FrustrumCheck.ALWAYS_VISIBLE; return FrustrumCheck.ALWAYS_VISIBLE;
} }
if (entity.isSleeping() || !MineLittlePony.getInstance().getConfig().frustrum.get()) { if (entity.isSleeping() || !PonyConfig.getInstance().frustrum.get()) {
return vanilla; return vanilla;
} }
return frustrum.withCamera(entity, vanilla); return frustrum.withCamera(entity, vanilla);

View file

@ -1,7 +1,7 @@
package com.minelittlepony.client.render; package com.minelittlepony.client.render;
import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.util.render.RenderLayerUtil; import com.minelittlepony.client.util.render.RenderLayerUtil;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -43,7 +43,7 @@ public class LevitatingItemRenderer {
matrix.push(); matrix.push();
boolean doMagic = MineLittlePony.getInstance().getConfig().fpsmagic.get() && pony.hasMagic(); boolean doMagic = PonyConfig.getInstance().fpsmagic.get() && pony.hasMagic();
if (doMagic && mode.isFirstPerson()) { if (doMagic && mode.isFirstPerson()) {
setupPerspective(itemRenderer, entity, stack, left, matrix); setupPerspective(itemRenderer, entity, stack, left, matrix);

View file

@ -1,5 +1,6 @@
package com.minelittlepony.client.render; package com.minelittlepony.client.render;
import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.render.entity.*; import com.minelittlepony.client.render.entity.*;
import com.minelittlepony.client.render.entity.npc.*; import com.minelittlepony.client.render.entity.npc.*;
@ -40,7 +41,7 @@ public final class MobRenderers {
pony.switchRenderer(state, EntityType.PIGLIN, PonyPiglinRenderer::piglin); pony.switchRenderer(state, EntityType.PIGLIN, PonyPiglinRenderer::piglin);
pony.switchRenderer(state, EntityType.PIGLIN_BRUTE, PonyPiglinRenderer::brute); pony.switchRenderer(state, EntityType.PIGLIN_BRUTE, PonyPiglinRenderer::brute);
pony.switchRenderer(state, EntityType.ZOMBIFIED_PIGLIN, PonyPiglinRenderer::zombified); pony.switchRenderer(state, EntityType.ZOMBIFIED_PIGLIN, PonyPiglinRenderer::zombified);
if (!MineLittlePony.getInstance().getConfig().noFun.get()) { if (!PonyConfig.getInstance().noFun.get()) {
pony.switchRenderer(state, EntityType.PIG, PonyPigRenderer::new); pony.switchRenderer(state, EntityType.PIG, PonyPigRenderer::new);
} }
}); });
@ -78,7 +79,7 @@ public final class MobRenderers {
} }
public Setting<Boolean> option() { public Setting<Boolean> option() {
return MineLittlePony.getInstance().getConfig().getCategory("entities").<Boolean>get(name); return PonyConfig.getInstance().getCategory("entities").<Boolean>get(name);
} }
public boolean set(boolean value) { public boolean set(boolean value) {

View file

@ -3,7 +3,6 @@ package com.minelittlepony.client.render.blockentity.skull;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.config.PonyConfig;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.model.ModelType; import com.minelittlepony.client.model.ModelType;
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;
@ -50,7 +49,7 @@ public class PonySkullRenderer {
ISkull skull = SKULLS.get(skullType); ISkull skull = SKULLS.get(skullType);
if (skull == null || !skull.canRender(MineLittlePony.getInstance().getConfig())) { if (skull == null || !skull.canRender(PonyConfig.getInstance())) {
return null; return null;
} }
@ -64,7 +63,7 @@ public class PonySkullRenderer {
MatrixStack stack, VertexConsumerProvider renderContext, RenderLayer layer, MatrixStack stack, VertexConsumerProvider renderContext, RenderLayer layer,
int lightUv) { int lightUv) {
if (selectedSkull == null || !selectedSkull.canRender(MineLittlePony.getInstance().getConfig())) { if (selectedSkull == null || !selectedSkull.canRender(PonyConfig.getInstance())) {
return false; return false;
} }

View file

@ -1,9 +1,9 @@
package com.minelittlepony.client.render.entity; package com.minelittlepony.client.render.entity;
import com.minelittlepony.api.model.PreviewModel;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.api.pony.PonyPosture; import com.minelittlepony.api.pony.PonyPosture;
import com.minelittlepony.api.pony.meta.Race; import com.minelittlepony.api.pony.meta.Race;
import com.minelittlepony.client.PreviewModel;
import com.minelittlepony.client.SkinsProxy; import com.minelittlepony.client.SkinsProxy;
import com.minelittlepony.util.MathUtil; import com.minelittlepony.util.MathUtil;

View file

@ -1,6 +1,7 @@
package com.minelittlepony.client.render.entity; package com.minelittlepony.client.render.entity;
import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.api.model.ModelAttributes;
import com.minelittlepony.api.model.ModelWrapper;
import com.minelittlepony.api.pony.Pony; import com.minelittlepony.api.pony.Pony;
import com.minelittlepony.api.pony.meta.Race; import com.minelittlepony.api.pony.meta.Race;
import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.api.pony.meta.Wearable;

View file

@ -11,11 +11,11 @@ import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.decoration.ArmorStandEntity; import net.minecraft.entity.decoration.ArmorStandEntity;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import com.minelittlepony.api.model.armour.ArmourLayer; import com.minelittlepony.api.model.ModelWrapper;
import com.minelittlepony.api.pony.PonyData; import com.minelittlepony.api.pony.PonyData;
import com.minelittlepony.api.pony.meta.Race; import com.minelittlepony.api.pony.meta.Race;
import com.minelittlepony.client.model.ModelType; import com.minelittlepony.client.model.ModelType;
import com.minelittlepony.client.model.ModelWrapper; import com.minelittlepony.client.model.armour.ArmourLayer;
import com.minelittlepony.client.model.entity.PonyArmourStandModel; import com.minelittlepony.client.model.entity.PonyArmourStandModel;
import com.minelittlepony.client.model.entity.race.EarthPonyModel; import com.minelittlepony.client.model.entity.race.EarthPonyModel;
import com.minelittlepony.client.render.entity.feature.ArmourFeature; import com.minelittlepony.client.render.entity.feature.ArmourFeature;

View file

@ -1,7 +1,7 @@
package com.minelittlepony.client.render.entity.feature; package com.minelittlepony.client.render.entity.feature;
import com.minelittlepony.api.model.ModelWrapper;
import com.minelittlepony.api.model.PonyModel; import com.minelittlepony.api.model.PonyModel;
import com.minelittlepony.client.model.ModelWrapper;
import com.minelittlepony.client.render.IPonyRenderContext; import com.minelittlepony.client.render.IPonyRenderContext;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;

View file

@ -1,9 +1,8 @@
package com.minelittlepony.client.render.entity.feature; package com.minelittlepony.client.render.entity.feature;
import com.minelittlepony.api.model.ModelWrapper;
import com.minelittlepony.api.model.PonyModel; import com.minelittlepony.api.model.PonyModel;
import com.minelittlepony.api.model.armour.*; import com.minelittlepony.client.model.armour.*;
import com.minelittlepony.client.model.ModelWrapper;
import com.minelittlepony.client.model.armour.DefaultArmourTextureResolver;
import com.minelittlepony.client.render.IPonyRenderContext; import com.minelittlepony.client.render.IPonyRenderContext;
import com.minelittlepony.common.util.Color; import com.minelittlepony.common.util.Color;
@ -39,7 +38,7 @@ public class ArmourFeature<T extends LivingEntity, M extends EntityModel<T> & Po
} }
} }
public static <T extends LivingEntity, V extends BipedEntityModel<T> & IArmourModel<T>> void renderArmor( public static <T extends LivingEntity, V extends PonyArmourModel<T>> void renderArmor(
ModelWrapper<T, ? extends PonyModel<T>> pony, MatrixStack matrices, ModelWrapper<T, ? extends PonyModel<T>> pony, MatrixStack matrices,
VertexConsumerProvider renderContext, int light, T entity, VertexConsumerProvider renderContext, int light, T entity,
float limbDistance, float limbAngle, float limbDistance, float limbAngle,
@ -52,9 +51,8 @@ public class ArmourFeature<T extends LivingEntity, M extends EntityModel<T> & Po
return; return;
} }
IArmourTextureResolver resolver = DefaultArmourTextureResolver.INSTANCE; Identifier texture = ArmourTextureResolver.INSTANCE.getTexture(entity, stack, armorSlot, layer, null);
Identifier texture = resolver.getTexture(entity, stack, armorSlot, layer, null); ArmourVariant variant = ArmourTextureResolver.INSTANCE.getVariant(layer, texture);
ArmourVariant variant = resolver.getVariant(layer, texture);
boolean glint = stack.hasGlint(); boolean glint = stack.hasGlint();
Item item = stack.getItem(); Item item = stack.getItem();
@ -76,8 +74,8 @@ public class ArmourFeature<T extends LivingEntity, M extends EntityModel<T> & Po
model.render(matrices, getArmorConsumer(renderContext, texture, glint), light, OverlayTexture.DEFAULT_UV, red, green, blue, 1); model.render(matrices, getArmorConsumer(renderContext, texture, glint), light, OverlayTexture.DEFAULT_UV, red, green, blue, 1);
if (item instanceof DyeableArmorItem) { if (item instanceof DyeableArmorItem) {
Identifier tex = resolver.getTexture(entity, stack, armorSlot, layer, "overlay"); Identifier tex = ArmourTextureResolver.INSTANCE.getTexture(entity, stack, armorSlot, layer, "overlay");
pony.getArmourModel(stack, layer, resolver.getVariant(layer, tex)) pony.getArmourModel(stack, layer, ArmourTextureResolver.INSTANCE.getVariant(layer, tex))
.filter(m -> m.poseModel(entity, limbAngle, limbDistance, age, headYaw, headPitch, armorSlot, layer, pony.body())) .filter(m -> m.poseModel(entity, limbAngle, limbDistance, age, headYaw, headPitch, armorSlot, layer, pony.body()))
.ifPresent(m -> { .ifPresent(m -> {
m.render(matrices, getArmorConsumer(renderContext, tex, false), light, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1); m.render(matrices, getArmorConsumer(renderContext, tex, false), light, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);

View file

@ -19,20 +19,13 @@ import com.minelittlepony.client.render.IPonyRenderContext;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class GearFeature<T extends LivingEntity, M extends EntityModel<T> & PonyModel<T>> extends AbstractPonyFeature<T, M> { public class GearFeature<T extends LivingEntity, M extends EntityModel<T> & PonyModel<T>> extends AbstractPonyFeature<T, M> {
private static final List<Supplier<Gear>> MOD_GEARS = new ArrayList<>();
public static void addModGear(Supplier<Gear> gear) {
MOD_GEARS.add(gear);
}
private final List<Entry> gears = Streams.concat( private final List<Entry> gears = Streams.concat(
ModelType.getWearables().map(e -> new Entry(e.getValue().createModel(), e.getKey())), ModelType.getWearables().map(e -> new Entry(e.getValue().createModel(), e.getKey())),
MOD_GEARS.stream().map(e -> new Entry(e.get(), Wearable.NONE)) Gear.MOD_GEARS.stream().map(e -> new Entry(e.get(), Wearable.NONE))
).collect(Collectors.toList()); ).collect(Collectors.toList());
private final LoadingCache<Long, List<Entry>> randomisedGearCache = CacheBuilder.newBuilder() private final LoadingCache<Long, List<Entry>> randomisedGearCache = CacheBuilder.newBuilder()

View file

@ -8,6 +8,7 @@ import net.minecraft.util.Identifier;
import net.minecraft.village.VillagerDataContainer; import net.minecraft.village.VillagerDataContainer;
import net.minecraft.village.VillagerProfession; import net.minecraft.village.VillagerProfession;
import com.minelittlepony.api.model.ModelWrapper;
import com.minelittlepony.api.model.gear.Gear; import com.minelittlepony.api.model.gear.Gear;
import com.minelittlepony.api.pony.meta.Race; import com.minelittlepony.api.pony.meta.Race;
import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.api.pony.meta.Wearable;