mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-11-22 04:27:59 +01:00
Update skin type ids and implement apis for controlling what skin and model the player gets through mine little pony
This commit is contained in:
parent
cc463bb293
commit
62d606ada4
25 changed files with 171 additions and 111 deletions
|
@ -7,8 +7,13 @@ import net.minecraft.entity.Entity;
|
|||
import com.minelittlepony.api.model.PonyModel;
|
||||
import com.minelittlepony.api.model.ModelAttributes;
|
||||
|
||||
/**
|
||||
* Event triggered when a pony model's state is being evaluated.
|
||||
* <p>
|
||||
* Subscribers have the option to read the pony model's attributes or modify them if neccessary to
|
||||
* allow for custom animations.
|
||||
*/
|
||||
public interface PonyModelPrepareCallback {
|
||||
|
||||
Event<PonyModelPrepareCallback> EVENT = EventFactory.createArrayBacked(PonyModelPrepareCallback.class, listeners -> (entity, model, mode) -> {
|
||||
for (PonyModelPrepareCallback event : listeners) {
|
||||
event.onPonyModelPrepared(entity, model, mode);
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
package com.minelittlepony.api.events;
|
||||
|
||||
import net.fabricmc.fabric.api.event.Event;
|
||||
import net.fabricmc.fabric.api.event.EventFactory;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import com.minelittlepony.api.pony.Pony;
|
||||
|
||||
/**
|
||||
* Event for mods that want to replace the skin being used by a pony.
|
||||
*/
|
||||
public interface PonySkinResolver {
|
||||
Event<PonySkinResolver> EVENT = EventFactory.createArrayBacked(PonySkinResolver.class, listeners -> (entity, pony, result) -> {
|
||||
for (PonySkinResolver event : listeners) {
|
||||
result = event.onPonySkinResolving(entity, pony, result);
|
||||
}
|
||||
return result;
|
||||
});
|
||||
|
||||
@Nullable
|
||||
Identifier onPonySkinResolving(Entity entity, PonyLookup ponyLookup, @Nullable Identifier previousResult);
|
||||
|
||||
interface PonyLookup {
|
||||
Pony getPony(Identifier skin);
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
package com.minelittlepony.api.model;
|
||||
|
||||
public interface PreviewModel {
|
||||
boolean forceSeapony();
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
boolean forceNirik();
|
||||
public interface PreviewModel {
|
||||
Identifier getForm();
|
||||
}
|
||||
|
|
|
@ -6,16 +6,15 @@ import net.minecraft.util.Identifier;
|
|||
import net.minecraft.util.Util;
|
||||
|
||||
import com.minelittlepony.api.pony.meta.Race;
|
||||
import com.minelittlepony.client.MineLittlePony;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
|
||||
public final class DefaultPonySkinHelper {
|
||||
public static final Identifier STEVE = MineLittlePony.id("textures/entity/player/wide/steve_pony.png");
|
||||
public static final Identifier STEVE = id("textures/entity/player/wide/steve_pony.png");
|
||||
|
||||
public static final Identifier SEAPONY_SKIN_TYPE_ID = MineLittlePony.id("seapony");
|
||||
public static final Identifier NIRIK_SKIN_TYPE_ID = MineLittlePony.id("nirik");
|
||||
public static final Identifier SEAPONY_SKIN_TYPE_ID = id("seapony");
|
||||
public static final Identifier NIRIK_SKIN_TYPE_ID = id("nirik");
|
||||
|
||||
private static final Function<SkinTextures, SkinTextures> SKINS = Util.memoize(original -> new SkinTextures(
|
||||
new Identifier("minelittlepony", original.texture().getPath().replace(".png", "_pony.png")),
|
||||
|
@ -26,6 +25,10 @@ public final class DefaultPonySkinHelper {
|
|||
false
|
||||
));
|
||||
|
||||
public static Identifier id(String name) {
|
||||
return new Identifier("minelittlepony", name);
|
||||
}
|
||||
|
||||
public static SkinTextures getTextures(SkinTextures original) {
|
||||
return SKINS.apply(original);
|
||||
}
|
||||
|
|
49
src/main/java/com/minelittlepony/api/pony/PonyForm.java
Normal file
49
src/main/java/com/minelittlepony/api/pony/PonyForm.java
Normal file
|
@ -0,0 +1,49 @@
|
|||
package com.minelittlepony.api.pony;
|
||||
|
||||
import net.minecraft.client.render.entity.EntityRendererFactory;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import com.minelittlepony.client.render.entity.PlayerPonyRenderer;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* The different forms a pony can take.
|
||||
* <p>
|
||||
* The default is land, which is your typical pony with four legs.
|
||||
* Other options are water (seaponies that go shoop-de-doo)
|
||||
* And Niriks (the burning form of kirins)
|
||||
*/
|
||||
public record PonyForm(Identifier id, Predicate<PlayerEntity> shouldApply, RendererFactory<?> factory) {
|
||||
public static final Identifier DEFAULT = DefaultPonySkinHelper.id("land");
|
||||
public static final Identifier SEAPONY = DefaultPonySkinHelper.id("seapony");
|
||||
public static final Identifier NIRIK = DefaultPonySkinHelper.id("nirik");
|
||||
|
||||
public static final List<Identifier> VALUES = new ArrayList<>();
|
||||
public static final Map<Identifier, PonyForm> REGISTRY = new HashMap<>();
|
||||
|
||||
public static void register(Identifier id, Predicate<PlayerEntity> shouldApply, RendererFactory<?> factory) {
|
||||
VALUES.add(0, id);
|
||||
REGISTRY.put(id, new PonyForm(id, shouldApply, factory));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PonyForm of(PlayerEntity player) {
|
||||
for (Identifier id : VALUES) {
|
||||
PonyForm form = REGISTRY.get(id);
|
||||
if (form != null && form.shouldApply().test(player)) {
|
||||
return form;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public interface RendererFactory<T extends PlayerPonyRenderer> {
|
||||
T create(EntityRendererFactory.Context context, boolean slimArms);
|
||||
}
|
||||
}
|
|
@ -86,16 +86,9 @@ public final class PonyPosture {
|
|||
return isSitting(entity) && getMountPony(entity).map(Pony::race).orElse(Race.HUMAN) != Race.HUMAN;
|
||||
}
|
||||
|
||||
public static boolean isSeaponyModifier(LivingEntity entity) {
|
||||
if (entity instanceof PreviewModel preview) {
|
||||
return preview.forceSeapony();
|
||||
}
|
||||
return hasSeaponyForm(entity) && isPartiallySubmerged(entity);
|
||||
}
|
||||
|
||||
public static boolean hasSeaponyForm(LivingEntity entity) {
|
||||
if (entity instanceof PreviewModel preview) {
|
||||
return preview.forceSeapony();
|
||||
return preview.getForm() == PonyForm.SEAPONY;
|
||||
}
|
||||
return Pony.getManager().getPony(entity).filter(pony -> {
|
||||
return (pony.race() == Race.SEAPONY
|
||||
|
@ -104,17 +97,9 @@ public final class PonyPosture {
|
|||
}).isPresent();
|
||||
}
|
||||
|
||||
public static boolean isNirikModifier(LivingEntity entity) {
|
||||
if (entity instanceof PreviewModel preview) {
|
||||
return preview.forceNirik();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static boolean hasNirikForm(LivingEntity entity) {
|
||||
if (entity instanceof PreviewModel preview) {
|
||||
return preview.forceNirik();
|
||||
return preview.getForm() == PonyForm.NIRIK;
|
||||
}
|
||||
return Pony.getManager().getPony(entity).filter(pony -> {
|
||||
return (pony.race() == Race.KIRIN
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
package com.minelittlepony.client;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.cache.*;
|
||||
import com.minelittlepony.api.config.PonyConfig;
|
||||
import com.minelittlepony.api.config.PonyLevel;
|
||||
import com.minelittlepony.api.events.PonySkinResolver;
|
||||
import com.minelittlepony.api.pony.*;
|
||||
import com.minelittlepony.client.render.blockentity.skull.PonySkullRenderer;
|
||||
|
||||
|
@ -50,7 +52,10 @@ public class PonyManagerImpl implements PonyManager, SimpleSynchronousResourceRe
|
|||
|
||||
@Override
|
||||
public Pony getPony(PlayerEntity player) {
|
||||
return getPony(getSkin(player), player instanceof ForcedPony ? null : player.getGameProfile() == null ? player.getUuid() : player.getGameProfile().getId());
|
||||
final UUID id = player instanceof ForcedPony ? null : player.getGameProfile() == null ? player.getUuid() : player.getGameProfile().getId();
|
||||
Identifier skin = getSkin(player);
|
||||
skin = MoreObjects.firstNonNull(PonySkinResolver.EVENT.invoker().onPonySkinResolving(player, s -> getPony(s, id), skin), skin);
|
||||
return getPony(skin, id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -59,6 +64,7 @@ public class PonyManagerImpl implements PonyManager, SimpleSynchronousResourceRe
|
|||
return Optional.of(getPony(player));
|
||||
}
|
||||
Identifier skin = getSkin(entity);
|
||||
skin = MoreObjects.firstNonNull(PonySkinResolver.EVENT.invoker().onPonySkinResolving(entity, s -> getPony(s, null), skin), skin);
|
||||
return skin == null ? Optional.empty() : Optional.of(getPony(skin, null));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.minelittlepony.client.compat.hdskins;
|
||||
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import com.minelittlepony.api.model.PreviewModel;
|
||||
import com.minelittlepony.api.pony.*;
|
||||
|
@ -20,12 +21,13 @@ class DummyPony extends DummyPlayer implements PreviewModel, PonyManager.ForcedP
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean forceSeapony() {
|
||||
return getTextures().getPosture().getActiveSkinType() == MineLPHDSkins.seaponySkinType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean forceNirik() {
|
||||
return getTextures().getPosture().getActiveSkinType() == MineLPHDSkins.nirikSkinType;
|
||||
public Identifier getForm() {
|
||||
if (getTextures().getPosture().getActiveSkinType() == MineLPHDSkins.seaponySkinType) {
|
||||
return PonyForm.SEAPONY;
|
||||
}
|
||||
if (getTextures().getPosture().getActiveSkinType() == MineLPHDSkins.nirikSkinType) {
|
||||
return PonyForm.NIRIK;
|
||||
}
|
||||
return PonyForm.DEFAULT;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,9 @@ package com.minelittlepony.client.render;
|
|||
|
||||
import java.util.function.Function;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import com.minelittlepony.api.model.PonyModel;
|
||||
import com.minelittlepony.api.model.PreviewModel;
|
||||
import com.minelittlepony.api.pony.*;
|
||||
import com.minelittlepony.client.mixin.MixinEntityRenderers;
|
||||
import com.minelittlepony.client.render.entity.*;
|
||||
|
@ -18,7 +20,6 @@ import net.minecraft.client.util.SkinTextures;
|
|||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
/**
|
||||
* Render manager responsible for replacing and restoring entity renderers when the client settings change.
|
||||
|
@ -26,6 +27,17 @@ import net.minecraft.util.Identifier;
|
|||
public class PonyRenderDispatcher {
|
||||
private LevitatingItemRenderer magicRenderer = new LevitatingItemRenderer();
|
||||
|
||||
public PonyRenderDispatcher() {
|
||||
PonyForm.register(PonyForm.DEFAULT, Predicates.alwaysTrue(), PlayerPonyRenderer::new);
|
||||
PonyForm.register(PonyForm.SEAPONY, PonyPosture::hasSeaponyForm, (context, slimArms) -> new AquaticPlayerPonyRenderer(context, slimArms, DefaultPonySkinHelper.SEAPONY_SKIN_TYPE_ID, entity -> {
|
||||
if (entity instanceof PreviewModel preview) {
|
||||
return preview.getForm() == PonyForm.SEAPONY;
|
||||
}
|
||||
return PonyPosture.hasSeaponyForm(entity) && PonyPosture.isPartiallySubmerged(entity);
|
||||
}));
|
||||
PonyForm.register(PonyForm.NIRIK, PonyPosture::hasNirikForm, (context, slimArms) -> new FormChangingPlayerPonyRenderer(context, slimArms, DefaultPonySkinHelper.NIRIK_SKIN_TYPE_ID, PonyPosture::hasNirikForm));
|
||||
}
|
||||
|
||||
public LevitatingItemRenderer getMagicRenderer() {
|
||||
return magicRenderer;
|
||||
}
|
||||
|
@ -34,42 +46,20 @@ public class PonyRenderDispatcher {
|
|||
* Registers all new player skin types. (currently only pony and slimpony).
|
||||
*/
|
||||
public void initialise(EntityRenderDispatcher manager, boolean force) {
|
||||
for (SkinTextures.Model armShape : SkinTextures.Model.values()) {
|
||||
addPlayerRenderer(armShape);
|
||||
}
|
||||
PonyForm.REGISTRY.values().forEach(form -> {
|
||||
for (SkinTextures.Model armShape : SkinTextures.Model.values()) {
|
||||
Mson.getInstance().getEntityRendererRegistry().registerPlayerRenderer(
|
||||
form.id().withSuffixedPath("/" + armShape.getName()),
|
||||
player -> !Pony.getManager().getPony(player).race().isHuman()
|
||||
&& player.getSkinTextures().model() == armShape
|
||||
&& form.shouldApply().test(player) && PonyForm.of(player) == form,
|
||||
context -> form.factory().create(context, armShape == SkinTextures.Model.SLIM)
|
||||
);
|
||||
}
|
||||
});
|
||||
MobRenderers.REGISTRY.values().forEach(i -> i.apply(this, force));
|
||||
}
|
||||
|
||||
private void addPlayerRenderer(SkinTextures.Model armShape) {
|
||||
Mson.getInstance().getEntityRendererRegistry().registerPlayerRenderer(
|
||||
new Identifier("minelittlepony", "sea/" + armShape.getName()),
|
||||
player -> {
|
||||
return !Pony.getManager().getPony(player).race().isHuman()
|
||||
&& PonyPosture.hasSeaponyForm(player)
|
||||
&& player.getSkinTextures().model() == armShape;
|
||||
},
|
||||
context -> new AquaticPlayerPonyRenderer(context, armShape == SkinTextures.Model.SLIM)
|
||||
);
|
||||
Mson.getInstance().getEntityRendererRegistry().registerPlayerRenderer(
|
||||
new Identifier("minelittlepony", "nirik/" + armShape.getName()),
|
||||
player -> {
|
||||
return !Pony.getManager().getPony(player).race().isHuman()
|
||||
&& PonyPosture.hasNirikForm(player)
|
||||
&& player.getSkinTextures().model() == armShape;
|
||||
},
|
||||
context -> new FormChangingPlayerPonyRenderer(context, armShape == SkinTextures.Model.SLIM, DefaultPonySkinHelper.NIRIK_SKIN_TYPE_ID, PonyPosture::isNirikModifier)
|
||||
);
|
||||
Mson.getInstance().getEntityRendererRegistry().registerPlayerRenderer(
|
||||
new Identifier("minelittlepony", "land/" + armShape.getName()),
|
||||
player -> {
|
||||
return !Pony.getManager().getPony(player).race().isHuman()
|
||||
&& !PonyPosture.hasSeaponyForm(player) && !PonyPosture.hasNirikForm(player)
|
||||
&& player.getSkinTextures().model() == armShape;
|
||||
},
|
||||
context -> new PlayerPonyRenderer(context, armShape == SkinTextures.Model.SLIM)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Replaces an entity renderer depending on whether we want ponies or not.
|
||||
|
@ -80,25 +70,17 @@ public class PonyRenderDispatcher {
|
|||
* @param <T> The entity type
|
||||
*/
|
||||
<T extends Entity, V extends T> void switchRenderer(MobRenderers state, EntityType<V> type, Function<EntityRendererFactory.Context, EntityRenderer<T>> factory) {
|
||||
Mson.getInstance().getEntityRendererRegistry().registerEntityRenderer(type, ctx -> {
|
||||
if (!state.get()) {
|
||||
return MixinEntityRenderers.getRendererFactories().get(type).create(ctx);
|
||||
}
|
||||
return factory.apply(ctx);
|
||||
});
|
||||
Mson.getInstance().getEntityRendererRegistry().registerEntityRenderer(type, ctx -> state.get()
|
||||
? factory.apply(ctx)
|
||||
: MixinEntityRenderers.getRendererFactories().get(type).create(ctx)
|
||||
);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Nullable
|
||||
public <T extends LivingEntity, M extends EntityModel<T> & PonyModel<T>> PonyRenderContext<T, M> getPonyRenderer(@Nullable T entity) {
|
||||
if (entity == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
EntityRenderer<?> renderer = MinecraftClient.getInstance().getEntityRenderDispatcher().getRenderer(entity);
|
||||
|
||||
if (renderer instanceof PonyRenderContext) {
|
||||
return (PonyRenderContext<T, M>) renderer;
|
||||
if (entity != null && MinecraftClient.getInstance().getEntityRenderDispatcher().getRenderer(entity) instanceof PonyRenderContext c) {
|
||||
return c;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
|
@ -5,16 +5,19 @@ import com.minelittlepony.api.pony.*;
|
|||
import com.minelittlepony.api.pony.meta.Race;
|
||||
import com.minelittlepony.util.MathUtil;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import net.minecraft.client.network.AbstractClientPlayerEntity;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.entity.EntityRendererFactory;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.particle.ParticleTypes;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class AquaticPlayerPonyRenderer extends FormChangingPlayerPonyRenderer {
|
||||
|
||||
public AquaticPlayerPonyRenderer(EntityRendererFactory.Context context, boolean slim) {
|
||||
super(context, slim, DefaultPonySkinHelper.SEAPONY_SKIN_TYPE_ID, PonyPosture::isSeaponyModifier);
|
||||
public AquaticPlayerPonyRenderer(EntityRendererFactory.Context context, boolean slim, Identifier alternateFormSkinId, Predicate<AbstractClientPlayerEntity> formModifierPredicate) {
|
||||
super(context, slim, alternateFormSkinId, formModifierPredicate);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -32,12 +35,12 @@ public class AquaticPlayerPonyRenderer extends FormChangingPlayerPonyRenderer {
|
|||
@Override
|
||||
protected Race getPlayerRace(AbstractClientPlayerEntity entity, Pony pony) {
|
||||
Race race = super.getPlayerRace(entity, pony);
|
||||
return PonyPosture.isSeaponyModifier(entity) ? Race.SEAPONY : race == Race.SEAPONY ? Race.UNICORN : race;
|
||||
return transformed ? Race.SEAPONY : race == Race.SEAPONY ? Race.UNICORN : race;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setupTransforms(AbstractClientPlayerEntity player, MatrixStack matrices, float animationProgress, float bodyYaw, float tickDelta, float scale) {
|
||||
if (PonyPosture.isSeaponyModifier(player)) {
|
||||
if (transformed) {
|
||||
matrices.translate(0, 0.6 * scale, 0);
|
||||
if (player.isInSneakingPose()) {
|
||||
matrices.translate(0, 0.125 * scale, 0);
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
package com.minelittlepony.client.render.entity;
|
||||
|
||||
import com.minelittlepony.api.model.ModelAttributes;
|
||||
import com.minelittlepony.api.pony.*;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import net.minecraft.client.network.AbstractClientPlayerEntity;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.entity.EntityRendererFactory;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.util.Arm;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class FormChangingPlayerPonyRenderer extends PlayerPonyRenderer {
|
||||
|
@ -33,14 +31,8 @@ public class FormChangingPlayerPonyRenderer extends PlayerPonyRenderer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void render(AbstractClientPlayerEntity player, float entityYaw, float tickDelta, MatrixStack stack, VertexConsumerProvider renderContext, int light) {
|
||||
super.render(player, entityYaw, tickDelta, stack, renderContext, light);
|
||||
updateForm(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderArm(MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, AbstractClientPlayerEntity player, Arm side) {
|
||||
super.renderArm(stack, renderContext, lightUv, player, side);
|
||||
protected final void preRender(AbstractClientPlayerEntity player, ModelAttributes.Mode mode) {
|
||||
super.preRender(player, mode);
|
||||
updateForm(player);
|
||||
}
|
||||
|
||||
|
|
|
@ -75,10 +75,14 @@ public class PlayerPonyRenderer extends PlayerEntityRenderer implements PonyRend
|
|||
super.scale(entity, stack, tickDelta);
|
||||
}
|
||||
|
||||
protected void preRender(AbstractClientPlayerEntity player, ModelAttributes.Mode mode) {
|
||||
manager.preRender(player, mode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(AbstractClientPlayerEntity entity, float entityYaw, float tickDelta, MatrixStack stack, VertexConsumerProvider renderContext, int lightUv) {
|
||||
// EntityModelFeatures: We have to force it to use our models otherwise EMF overrides it and breaks pony rendering
|
||||
manager.preRender(entity, ModelAttributes.Mode.THIRD_PERSON);
|
||||
preRender(entity, ModelAttributes.Mode.THIRD_PERSON);
|
||||
shadowRadius = manager.getShadowSize();
|
||||
super.render(entity, entityYaw, tickDelta, stack, renderContext, lightUv);
|
||||
DebugBoundingBoxRenderer.render(getEntityPony(entity), this, entity, stack, renderContext, tickDelta);
|
||||
|
@ -143,7 +147,7 @@ public class PlayerPonyRenderer extends PlayerEntityRenderer implements PonyRend
|
|||
}
|
||||
|
||||
protected void renderArm(MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, AbstractClientPlayerEntity player, Arm side) {
|
||||
manager.preRender(player, ModelAttributes.Mode.FIRST_PERSON);
|
||||
preRender(player, ModelAttributes.Mode.FIRST_PERSON);
|
||||
|
||||
stack.push();
|
||||
float reflect = side == Arm.LEFT ? 1 : -1;
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
"minelp.debug.size": "Grootte ignoreer",
|
||||
"minelp.debug.race": "Ras oorheersing",
|
||||
"minelp.debug.armour": "Deaktiveer geponifiseerde pantserteksture",
|
||||
"skin_type.minelp.seapony": "Seeponie",
|
||||
"skin_type.minelittlepony.seapony": "Seeponie",
|
||||
"skin_type.minelittlepony.crown": "Kroon",
|
||||
"skin_type.minelittlepony.muffin": "Muffin hoed",
|
||||
"skin_type.minelittlepony.hat": "Hekshoed",
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
"minelp.debug.size": "Überschreibe Größe",
|
||||
"minelp.debug.race": "Überschreibe Spezies",
|
||||
"minelp.debug.armour": "Ponifizierte Rüstungsständer deaktivieren",
|
||||
"skin_type.minelp.seapony": "Seepony",
|
||||
"skin_type.minelittlepony.seapony": "Seepony",
|
||||
"skin_type.minelittlepony.crown": "Krone",
|
||||
"skin_type.minelittlepony.muffin": "Muffin-Mütze",
|
||||
"skin_type.minelittlepony.hat": "Hexen Hut",
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
"minelp.debug.size": "Size Override",
|
||||
"minelp.debug.race": "Race Override",
|
||||
"minelp.debug.armour": "Disable ponified armour textures",
|
||||
"skin_type.minelp.seapony": "Seapony",
|
||||
"skin_type.minelittlepony.seapony": "Seapony",
|
||||
"skin_type.minelittlepony.crown": "Crown",
|
||||
"skin_type.minelittlepony.muffin": "Muffin Hat",
|
||||
"skin_type.minelittlepony.hat": "Witch's Hat",
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
"minelp.debug.size": "Bow Width",
|
||||
"minelp.debug.race": "Sail Height",
|
||||
"minelp.debug.armour": "Batten down the hatches",
|
||||
"skin_type.minelp.seapony": "Maremaid",
|
||||
"skin_type.minelittlepony.seapony": "Maremaid",
|
||||
"skin_type.minelittlepony.crown": "Captain's Tricorne",
|
||||
"skin_type.minelittlepony.muffin": "Galley-man's Headwear",
|
||||
"skin_type.minelittlepony.hat": "Olde Hag's Gown",
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
"minelp.debug.size": "ǝpᴉɹɹǝʌO ǝzᴉS",
|
||||
"minelp.debug.race": "ǝpᴉɹɹǝʌO ǝɔɐᴚ",
|
||||
"minelp.debug.armour": "sǝɹnʇxǝʇ ɹnoɯɹɐ pǝᴉɟᴉuod ǝlqɐsᴉD",
|
||||
"skin_type.minelp.seapony": "ʎuodɐǝS",
|
||||
"skin_type.minelittlepony.seapony": "ʎuodɐǝS",
|
||||
"skin_type.minelittlepony.crown": "uʍoɹƆ",
|
||||
"skin_type.minelittlepony.muffin": "ʇɐH uᴉɟɟnW",
|
||||
"skin_type.minelittlepony.hat": "ʇɐH ɥɔʇᴉM",
|
||||
|
|
|
@ -54,8 +54,8 @@
|
|||
"minelp.debug.race": "Race Override",
|
||||
"minelp.debug.armour": "Disable ponified armour textures",
|
||||
|
||||
"skin_type.minelp.seapony": "Seapony Form",
|
||||
"skin_type.minelp.nirik": "Kirin Nirik Form",
|
||||
"skin_type.minelittlepony.seapony": "Seapony Form",
|
||||
"skin_type.minelittlepony.nirik": "Kirin Nirik Form",
|
||||
"skin_type.minelittlepony.crown": "Crown",
|
||||
"skin_type.minelittlepony.muffin": "Muffin Hat",
|
||||
"skin_type.minelittlepony.hat": "Witch Hat",
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
"minelp.debug.size": "Bulk Override",
|
||||
"minelp.debug.race": "Kind Override",
|
||||
"minelp.debug.armour": "Cripple horselingified armour skins",
|
||||
"skin_type.minelp.seapony": "Seahorseling",
|
||||
"skin_type.minelittlepony.seapony": "Seahorseling",
|
||||
"skin_type.minelittlepony.crown": "Kinehelm",
|
||||
"skin_type.minelittlepony.muffin": "Muffin Hat",
|
||||
"skin_type.minelittlepony.hat": "Witch Hat",
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
"minelp.debug.size": "Size Owewwide",
|
||||
"minelp.debug.race": "Waze Owewwide",
|
||||
"minelp.debug.armour": "Disabl ponifid armr texturez",
|
||||
"skin_type.minelp.seapony": "Seeponeh",
|
||||
"skin_type.minelittlepony.seapony": "Seeponeh",
|
||||
"skin_type.minelittlepony.crown": "Meown",
|
||||
"skin_type.minelittlepony.muffin": "Muffin Hat plz",
|
||||
"skin_type.minelittlepony.hat": "Crazy Kitteh Ownr Hat",
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
"minelp.debug.size": "Переопределение размера",
|
||||
"minelp.debug.race": "Переопределение расы",
|
||||
"minelp.debug.armour": "Отключить понифицированную броню",
|
||||
"skin_type.minelp.seapony": "Морской пони",
|
||||
"skin_type.minelittlepony.seapony": "Морской пони",
|
||||
"skin_type.minelittlepony.crown": "Корона",
|
||||
"skin_type.minelittlepony.muffin": "Маффин",
|
||||
"skin_type.minelittlepony.hat": "Шляпа Ведьмы",
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
"minelp.debug.race": "Nadjačavanje vrste",
|
||||
"minelp.debug.armour": "Onemogući ponified oklop tekstura",
|
||||
|
||||
"skin_type.minelp.seapony": "Vodeni Poni",
|
||||
"skin_type.minelittlepony.seapony": "Vodeni Poni",
|
||||
"skin_type.minelittlepony.crown": "Kruna",
|
||||
"skin_type.minelittlepony.muffin": "Mafin Šešir",
|
||||
"skin_type.minelittlepony.hat": "Veštičiji Šešir",
|
||||
|
|
|
@ -53,8 +53,8 @@
|
|||
"minelp.debug.race": "覆盖种族",
|
||||
"minelp.debug.armour": "停用小马化护甲纹理",
|
||||
|
||||
"skin_type.minelp.seapony": "海马形态",
|
||||
"skin_type.minelp.nirik": "麒麟 逆麟形态",
|
||||
"skin_type.minelittlepony.seapony": "海马形态",
|
||||
"skin_type.minelittlepony.nirik": "麒麟 逆麟形态",
|
||||
"skin_type.minelittlepony.crown": "头冠",
|
||||
"skin_type.minelittlepony.muffin": "马芬帽",
|
||||
"skin_type.minelittlepony.hat": "女巫帽",
|
||||
|
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Loading…
Reference in a new issue