mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-11-23 04:57:58 +01:00
Refactoring phase 1
This commit is contained in:
parent
8442a75495
commit
d73736edce
28 changed files with 226 additions and 207 deletions
|
@ -1,56 +0,0 @@
|
||||||
package com.minelittlepony.client;
|
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.GsonBuilder;
|
|
||||||
import com.google.gson.stream.JsonWriter;
|
|
||||||
import com.minelittlepony.client.settings.ClientPonyConfig;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
|
|
||||||
class Config extends ClientPonyConfig {
|
|
||||||
static final Gson gson = new GsonBuilder()
|
|
||||||
.setPrettyPrinting()
|
|
||||||
.excludeFieldsWithoutExposeAnnotation()
|
|
||||||
.create();
|
|
||||||
|
|
||||||
private final Path configFile;
|
|
||||||
|
|
||||||
Config(Path file) {
|
|
||||||
configFile = file;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void save() {
|
|
||||||
|
|
||||||
try (JsonWriter writer = new JsonWriter(Files.newBufferedWriter(configFile))) {
|
|
||||||
writer.setIndent(" ");
|
|
||||||
|
|
||||||
gson.toJson(this, Config.class, writer);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static Config of(Path file) {
|
|
||||||
Config result = null;
|
|
||||||
|
|
||||||
if (Files.exists(file)) {
|
|
||||||
try (BufferedReader s = Files.newBufferedReader(file)) {
|
|
||||||
result = gson.fromJson(s, Config.class);
|
|
||||||
} catch (IOException ignored) {
|
|
||||||
result = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == null) {
|
|
||||||
result = new Config(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
result.save();
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -9,7 +9,9 @@ import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
||||||
import net.minecraft.client.render.entity.EntityRenderer;
|
import net.minecraft.client.render.entity.EntityRenderer;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
|
||||||
|
import com.minelittlepony.client.settings.ClientPonyConfig;
|
||||||
import com.minelittlepony.hdskins.mixin.MixinEntityRenderDispatcher;
|
import com.minelittlepony.hdskins.mixin.MixinEntityRenderDispatcher;
|
||||||
|
import com.minelittlepony.settings.SensibleJsonConfig;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
@ -20,7 +22,7 @@ public class FabMod implements ClientModInitializer, IModUtilities {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitializeClient() {
|
public void onInitializeClient() {
|
||||||
mlp.init(Config.of(getConfigDirectory()));
|
mlp.init(SensibleJsonConfig.of(getConfigDirectory(), ClientPonyConfig::new));
|
||||||
mlp.postInit(MinecraftClient.getInstance());
|
mlp.postInit(MinecraftClient.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,10 +36,6 @@ public class FabMod implements ClientModInitializer, IModUtilities {
|
||||||
((MixinEntityRenderDispatcher)mx).getRenderers().put(type, renderer.apply(mx));
|
((MixinEntityRenderDispatcher)mx).getRenderers().put(type, renderer.apply(mx));
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getRenderPartialTicks() {
|
|
||||||
return MinecraftClient.getInstance().getTickDelta();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Path getConfigDirectory() {
|
public Path getConfigDirectory() {
|
||||||
return FabricLoader.getInstance().getConfigDirectory().toPath();
|
return FabricLoader.getInstance().getConfigDirectory().toPath();
|
||||||
|
|
|
@ -18,8 +18,6 @@ public interface IModUtilities {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
float getRenderPartialTicks();
|
|
||||||
|
|
||||||
Path getConfigDirectory();
|
Path getConfigDirectory();
|
||||||
|
|
||||||
Path getAssetsDirectory();
|
Path getAssetsDirectory();
|
||||||
|
|
|
@ -89,6 +89,7 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
|
||||||
motionLerp = MathUtil.clampLimit(zMotion * 30, 1);
|
motionLerp = MathUtil.clampLimit(zMotion * 30, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void updateLivingState(T entity, IPony pony) {
|
public void updateLivingState(T entity, IPony pony) {
|
||||||
isChild = entity.isBaby();
|
isChild = entity.isBaby();
|
||||||
isSneaking = entity.isSneaking();
|
isSneaking = entity.isSneaking();
|
||||||
|
|
|
@ -24,11 +24,15 @@ public class ModelSeapony<T extends LivingEntity> extends ModelUnicorn<T> {
|
||||||
PlaneRenderer centerFin;
|
PlaneRenderer centerFin;
|
||||||
PlaneRenderer rightFin;
|
PlaneRenderer rightFin;
|
||||||
|
|
||||||
public ModelSeapony() {
|
public ModelSeapony(boolean smallArms) {
|
||||||
super(false);
|
super(smallArms);
|
||||||
textureHeight = 64;
|
textureHeight = 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ModelSeapony() {
|
||||||
|
this(false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IEquestrianArmour<?> createArmour() {
|
public IEquestrianArmour<?> createArmour() {
|
||||||
return new PonyArmor<>(new Armour(), new Armour());
|
return new PonyArmor<>(new Armour(), new Armour());
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package com.minelittlepony.client.model.races;
|
package com.minelittlepony.client.model.races;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.minelittlepony.client.model.AbstractPonyModel;
|
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
|
||||||
import com.minelittlepony.client.model.entities.ModelSeapony;
|
import com.minelittlepony.client.model.entities.ModelSeapony;
|
||||||
import com.minelittlepony.client.render.entities.player.RenderPonyPlayer;
|
import com.minelittlepony.client.render.entities.player.RenderPonyPlayer;
|
||||||
import com.minelittlepony.client.render.entities.player.RenderSeaponyPlayer;
|
import com.minelittlepony.client.render.entities.player.RenderSeaponyPlayer;
|
||||||
|
@ -10,31 +8,34 @@ import com.minelittlepony.hdskins.VanillaModels;
|
||||||
import com.minelittlepony.model.IModel;
|
import com.minelittlepony.model.IModel;
|
||||||
import com.minelittlepony.pony.meta.Race;
|
import com.minelittlepony.pony.meta.Race;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
public enum PlayerModels {
|
public enum PlayerModels {
|
||||||
/**
|
/**
|
||||||
* The default non-pony model. This is typically handled my the vanilla renderer.
|
* The default non-pony model. This is typically handled my the vanilla renderer.
|
||||||
*/
|
*/
|
||||||
HUMAN(VanillaModels.DEFAULT, Race.HUMAN, ModelEarthPony::new),
|
DEFAULT(VanillaModels.DEFAULT, VanillaModels.SLIM, Race.HUMAN, ModelEarthPony::new),
|
||||||
EARTH("earthpony", Race.EARTH, ModelEarthPony::new),
|
EARTHPONY(Race.EARTH, ModelEarthPony::new),
|
||||||
PEGASUS("pegasus", Race.PEGASUS, ModelPegasus::new),
|
PEGASUS(Race.PEGASUS, ModelPegasus::new),
|
||||||
BATPONY("batpony", Race.BATPONY, ModelBatpony::new),
|
BATPONY(Race.BATPONY, ModelBatpony::new),
|
||||||
UNICORN("unicorn", Race.UNICORN, ModelUnicorn::new),
|
UNICORN(Race.UNICORN, ModelUnicorn::new),
|
||||||
ALICORN("alicorn", Race.ALICORN, ModelAlicorn::new),
|
ALICORN(Race.ALICORN, ModelAlicorn::new),
|
||||||
CHANGELING("changeling", Race.CHANGELING, ModelChangeling::new),
|
CHANGELING(Race.CHANGELING, ModelChangeling::new),
|
||||||
ZEBRA("zebra", Race.ZEBRA, ModelZebra::new),
|
ZEBRA(Race.ZEBRA, ModelZebra::new),
|
||||||
SEAPONY("seapony", Race.SEAPONY, a -> new ModelSeapony<>()) {
|
SEAPONY(Race.SEAPONY, ModelSeapony::new) {
|
||||||
@Override
|
@Override
|
||||||
public RenderPonyPlayer createRenderer(EntityRenderDispatcher manager, boolean slimArms) {
|
public RenderPonyPlayer createRenderer(EntityRenderDispatcher manager, boolean slimArms) {
|
||||||
return new RenderSeaponyPlayer(manager, slimArms, PlayerModels.UNICORN.getModel(slimArms), getModel(slimArms));
|
return new RenderSeaponyPlayer(manager, slimArms, PlayerModels.UNICORN.getModel(slimArms), getModel(slimArms));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private static Map<Race, PlayerModels> raceModelsMap = Maps.newEnumMap(Race.class);
|
private static final Map<Race, PlayerModels> raceModelsMap = Maps.newEnumMap(Race.class);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
for (PlayerModels i : values()) {
|
for (PlayerModels i : values()) {
|
||||||
|
@ -42,48 +43,41 @@ public enum PlayerModels {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final ModelResolver resolver;
|
private final Function<Boolean, IModel> resolver;
|
||||||
|
|
||||||
private ModelWrapper<?, ?> normal;
|
private final PendingModel normal;
|
||||||
private ModelWrapper<?, ?> slim;
|
private final PendingModel slim;
|
||||||
|
|
||||||
private final String normalKey, slimKey;
|
|
||||||
|
|
||||||
private final Race race;
|
private final Race race;
|
||||||
|
|
||||||
PlayerModels(String key, Race race, ModelResolver resolver) {
|
PlayerModels(Race race, Function<Boolean, IModel> resolver) {
|
||||||
this(key, VanillaModels.SLIM + key, race, resolver);
|
normal = new PendingModel(name().toLowerCase());
|
||||||
}
|
slim = new PendingModel(VanillaModels.SLIM + normal.key);
|
||||||
|
|
||||||
PlayerModels(String normalKey, String slimKey, Race race, ModelResolver resolver) {
|
|
||||||
this.normalKey = normalKey;
|
|
||||||
this.slimKey = slimKey;
|
|
||||||
|
|
||||||
this.resolver = resolver;
|
this.resolver = resolver;
|
||||||
|
|
||||||
this.race = race;
|
this.race = race;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
PlayerModels(String normalKey, String slimKey, Race race, Function<Boolean, IModel> resolver) {
|
||||||
public <T extends LivingEntity, M extends IModel> ModelWrapper<T, M> getModel(boolean isSlim) {
|
normal = new PendingModel(normalKey);
|
||||||
|
slim = new PendingModel(slimKey);
|
||||||
|
|
||||||
if (isSlim) {
|
this.resolver = resolver;
|
||||||
if (slim == null) {
|
|
||||||
slim = new ModelWrapper<>(resolver.resolve(isSlim));
|
|
||||||
}
|
|
||||||
|
|
||||||
return (ModelWrapper<T, M>)slim;
|
this.race = race;
|
||||||
}
|
|
||||||
|
|
||||||
if (normal == null) {
|
|
||||||
normal = new ModelWrapper<>(resolver.resolve(isSlim));
|
|
||||||
}
|
|
||||||
|
|
||||||
return (ModelWrapper<T, M>)normal;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getId(boolean useSlimArms) {
|
public PendingModel getPendingModel(boolean isSlim) {
|
||||||
return useSlimArms ? slimKey : normalKey;
|
return isSlim ? slim : normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends LivingEntity, M extends IModel> M getModel(boolean isSlim) {
|
||||||
|
return getPendingModel(isSlim).getModel(isSlim);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId(boolean isSlim) {
|
||||||
|
return getPendingModel(isSlim).key;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RenderPonyPlayer createRenderer(EntityRenderDispatcher manager, boolean slimArms) {
|
public RenderPonyPlayer createRenderer(EntityRenderDispatcher manager, boolean slimArms) {
|
||||||
|
@ -91,14 +85,26 @@ public enum PlayerModels {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerModels forRace(Race race) {
|
public static PlayerModels forRace(Race race) {
|
||||||
return raceModelsMap.getOrDefault(race.getAlias(), HUMAN);
|
return raceModelsMap.getOrDefault(race.getAlias(), DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private final class PendingModel {
|
||||||
* FIXME: PMAPI fields are null when the game starts.
|
@Nullable
|
||||||
*/
|
private IModel model;
|
||||||
@FunctionalInterface
|
|
||||||
static interface ModelResolver {
|
private final String key;
|
||||||
AbstractPonyModel<?> resolve(boolean slim);
|
|
||||||
|
PendingModel(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public <T extends LivingEntity, M extends IModel> M getModel(boolean isSlim) {
|
||||||
|
if (model == null) {
|
||||||
|
model = resolver.apply(isSlim);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (M)model;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package com.minelittlepony.client.render;
|
||||||
import org.lwjgl.opengl.GL14;
|
import org.lwjgl.opengl.GL14;
|
||||||
|
|
||||||
import com.minelittlepony.MineLittlePony;
|
import com.minelittlepony.MineLittlePony;
|
||||||
import com.minelittlepony.client.MineLPClient;
|
|
||||||
import com.minelittlepony.client.ducks.IRenderItem;
|
import com.minelittlepony.client.ducks.IRenderItem;
|
||||||
import com.minelittlepony.client.render.tileentities.skull.PonySkullRenderer;
|
import com.minelittlepony.client.render.tileentities.skull.PonySkullRenderer;
|
||||||
import com.minelittlepony.client.util.render.Color;
|
import com.minelittlepony.client.util.render.Color;
|
||||||
|
@ -20,7 +19,6 @@ import net.minecraft.util.UseAction;
|
||||||
|
|
||||||
import static com.mojang.blaze3d.platform.GlStateManager.*;
|
import static com.mojang.blaze3d.platform.GlStateManager.*;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // ItemCameraTransforms is deprecated by forge but we still need it.
|
|
||||||
public class LevitatingItemRenderer {
|
public class LevitatingItemRenderer {
|
||||||
|
|
||||||
public static void enableItemGlowRenderProfile() {
|
public static void enableItemGlowRenderProfile() {
|
||||||
|
@ -118,7 +116,7 @@ public class LevitatingItemRenderer {
|
||||||
boolean doNormal = entity.getItemUseTime() <= 0 || action == UseAction.NONE;
|
boolean doNormal = entity.getItemUseTime() <= 0 || action == UseAction.NONE;
|
||||||
|
|
||||||
if (doNormal) { // eating, blocking, and drinking are not transformed. Only held items.
|
if (doNormal) { // eating, blocking, and drinking are not transformed. Only held items.
|
||||||
float ticks = MineLPClient.getInstance().getModUtilities().getRenderPartialTicks() - entity.age;
|
float ticks = MinecraftClient.getInstance().getTickDelta() - entity.age;
|
||||||
|
|
||||||
float floatAmount = (float)Math.sin(ticks / 9) / 40;
|
float floatAmount = (float)Math.sin(ticks / 9) / 40;
|
||||||
float driftAmount = (float)Math.cos(ticks / 6) / 40;
|
float driftAmount = (float)Math.cos(ticks / 6) / 40;
|
||||||
|
|
|
@ -2,7 +2,6 @@ package com.minelittlepony.client.render;
|
||||||
|
|
||||||
import com.minelittlepony.MineLittlePony;
|
import com.minelittlepony.MineLittlePony;
|
||||||
import com.minelittlepony.client.PonyRenderManager;
|
import com.minelittlepony.client.PonyRenderManager;
|
||||||
import com.minelittlepony.client.model.AbstractPonyModel;
|
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
import com.minelittlepony.client.model.ModelWrapper;
|
||||||
import com.minelittlepony.client.transform.PonyPosture;
|
import com.minelittlepony.client.transform.PonyPosture;
|
||||||
import com.minelittlepony.model.IPonyModel;
|
import com.minelittlepony.model.IPonyModel;
|
||||||
|
@ -10,7 +9,7 @@ import com.minelittlepony.pony.IPony;
|
||||||
import com.minelittlepony.util.math.MathUtil;
|
import com.minelittlepony.util.math.MathUtil;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
import net.minecraft.client.render.VisibleRegion;
|
import net.minecraft.client.render.VisibleRegion;
|
||||||
import net.minecraft.client.render.entity.model.EntityModel;
|
import net.minecraft.client.render.entity.model.EntityModel;
|
||||||
|
@ -21,13 +20,13 @@ public class RenderPony<T extends LivingEntity, M extends EntityModel<T> & IPony
|
||||||
|
|
||||||
public ModelWrapper<T, M> playerModel;
|
public ModelWrapper<T, M> playerModel;
|
||||||
|
|
||||||
protected AbstractPonyModel<T> ponyModel;
|
private M ponyModel;
|
||||||
|
|
||||||
private IPony pony;
|
private IPony pony;
|
||||||
|
|
||||||
private IPonyRender<T, M> renderer;
|
private final IPonyRender<T, M> renderer;
|
||||||
|
|
||||||
private FrustrumCheck<T> frustrum = new FrustrumCheck<>(this);
|
private final FrustrumCheck<T> frustrum = new FrustrumCheck<>(this);
|
||||||
|
|
||||||
public static void enableModelRenderProfile() {
|
public static void enableModelRenderProfile() {
|
||||||
GlStateManager.enableBlend();
|
GlStateManager.enableBlend();
|
||||||
|
@ -95,54 +94,44 @@ public class RenderPony<T extends LivingEntity, M extends EntityModel<T> & IPony
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void applyPostureTransform(T player, float yaw, float ticks) {
|
public void applyPostureTransform(T player, float yaw, float ticks) {
|
||||||
PonyPosture<?> posture = getPosture(player);
|
((PonyPosture<T>)getPosture(player)).apply(player, ponyModel, yaw, ticks, 1);
|
||||||
if (posture != null && posture.applies(player)) {
|
|
||||||
double motionX = player.x - player.prevX;
|
|
||||||
double motionY = player.onGround ? 0 : player.y - player.prevY;
|
|
||||||
double motionZ = player.x - player.prevZ;
|
|
||||||
((PonyPosture<LivingEntity>)posture).transform(ponyModel, player, motionX, motionY, motionZ, yaw, ticks);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void applyPostureRiding(T player, float yaw, float ticks) {
|
public void applyPostureRiding(T player, float yaw, float ticks) {
|
||||||
PonyPosture<?> posture = getPosture(player);
|
((PonyPosture<T>)getPosture(player)).apply(player, ponyModel, yaw, ticks, -1);
|
||||||
if (posture != null && posture.applies(player)) {
|
|
||||||
double motionX = player.x - player.prevX;
|
|
||||||
double motionY = player.onGround ? 0 : player.y - player.prevY;
|
|
||||||
double motionZ = player.z - player.prevZ;
|
|
||||||
|
|
||||||
((PonyPosture<LivingEntity>)posture).transform(ponyModel, player, motionX, -motionY, motionZ, yaw, ticks);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nonnull
|
||||||
private PonyPosture<?> getPosture(T entity) {
|
private PonyPosture<?> getPosture(T entity) {
|
||||||
if (entity.isFallFlying()) {
|
if (entity.isFallFlying()) {
|
||||||
return PonyPosture.ELYTRA;
|
return PonyPosture.ELYTRA;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity.isAlive() && entity.isSleeping()) {
|
if (entity.isAlive() && entity.isSleeping()) {
|
||||||
return null;
|
return PonyPosture.DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ponyModel.isSwimming()) {
|
if (getModel().isSwimming()) {
|
||||||
return PonyPosture.SWIMMING;
|
return PonyPosture.SWIMMING;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ponyModel.isGoingFast()) {
|
if (getModel().isGoingFast()) {
|
||||||
return PonyPosture.FLIGHT;
|
return PonyPosture.FLIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
return PonyPosture.FALLING;
|
return PonyPosture.FALLING;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
public M getModel() {
|
||||||
|
return playerModel.getBody();
|
||||||
|
}
|
||||||
|
|
||||||
public M setPonyModel(ModelWrapper<T, M> model) {
|
public M setPonyModel(ModelWrapper<T, M> model) {
|
||||||
playerModel = model;
|
playerModel = model;
|
||||||
ponyModel = (AbstractPonyModel<T>)playerModel.getBody();
|
ponyModel = playerModel.getBody();
|
||||||
|
|
||||||
return (M)ponyModel;
|
return ponyModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateModel(T entity) {
|
public void updateModel(T entity) {
|
||||||
|
@ -156,11 +145,11 @@ public class RenderPony<T extends LivingEntity, M extends EntityModel<T> & IPony
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getShadowScale() {
|
public float getShadowScale() {
|
||||||
return ponyModel.getSize().getShadowSize();
|
return getModel().getSize().getShadowSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getScaleFactor() {
|
public float getScaleFactor() {
|
||||||
return ponyModel.getSize().getScaleFactor();
|
return getModel().getSize().getScaleFactor();
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getNamePlateYOffset(T entity, double initial) {
|
public double getNamePlateYOffset(T entity, double initial) {
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package com.minelittlepony.client.render.entities;
|
package com.minelittlepony.client.render.entities;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
|
||||||
import com.minelittlepony.client.model.entities.ModelEnderStallion;
|
import com.minelittlepony.client.model.entities.ModelEnderStallion;
|
||||||
import com.minelittlepony.client.render.RenderPonyMob;
|
|
||||||
import com.minelittlepony.client.render.layer.LayerEyeGlow;
|
import com.minelittlepony.client.render.layer.LayerEyeGlow;
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldPonyItemMagical;
|
import com.minelittlepony.client.render.layer.LayerHeldPonyItemMagical;
|
||||||
|
@ -24,10 +22,8 @@ public class RenderEnderStallion extends RenderPonyMob<EndermanEntity, ModelEnde
|
||||||
|
|
||||||
private final Random rnd = new Random();
|
private final Random rnd = new Random();
|
||||||
|
|
||||||
private static final ModelWrapper<EndermanEntity, ModelEnderStallion> MODEL_WRAPPER = new ModelWrapper<>(new ModelEnderStallion());
|
|
||||||
|
|
||||||
public RenderEnderStallion(EntityRenderDispatcher manager) {
|
public RenderEnderStallion(EntityRenderDispatcher manager) {
|
||||||
super(manager, MODEL_WRAPPER);
|
super(manager, new ModelEnderStallion());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,9 +3,8 @@ package com.minelittlepony.client.render.entities;
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
import com.minelittlepony.client.mixin.IResizeable;
|
import com.minelittlepony.client.mixin.IResizeable;
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
|
||||||
import com.minelittlepony.client.model.entities.ModelGuardianPony;
|
import com.minelittlepony.client.model.entities.ModelGuardianPony;
|
||||||
import com.minelittlepony.client.render.RenderPonyMob.Proxy;
|
import com.minelittlepony.client.render.entities.RenderPonyMob.Proxy;
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldPonyItemMagical;
|
import com.minelittlepony.client.render.layer.LayerHeldPonyItemMagical;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
@ -27,7 +26,7 @@ public class RenderPonyGuardian extends GuardianEntityRenderer {
|
||||||
super(manager);
|
super(manager);
|
||||||
|
|
||||||
features.clear();
|
features.clear();
|
||||||
ponyRenderer = new Proxy<GuardianEntity, ModelGuardianPony>(features, manager, new ModelWrapper<>(new ModelGuardianPony())) {
|
ponyRenderer = new Proxy<GuardianEntity, ModelGuardianPony>(features, manager, new ModelGuardianPony()) {
|
||||||
@Override
|
@Override
|
||||||
public Identifier findTexture(GuardianEntity entity) {
|
public Identifier findTexture(GuardianEntity entity) {
|
||||||
return SEAPONY;
|
return SEAPONY;
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package com.minelittlepony.client.render.entities;
|
package com.minelittlepony.client.render.entities;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
|
||||||
import com.minelittlepony.client.model.entities.ModelIllagerPony;
|
import com.minelittlepony.client.model.entities.ModelIllagerPony;
|
||||||
import com.minelittlepony.client.render.RenderPonyMob;
|
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldItemIllager;
|
import com.minelittlepony.client.render.layer.LayerHeldItemIllager;
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
@ -23,7 +21,7 @@ public abstract class RenderPonyIllager<T extends IllagerEntity> extends RenderP
|
||||||
public static final Identifier VINDICATOR = new Identifier("minelittlepony", "textures/entity/illager/vindicator_pony.png");
|
public static final Identifier VINDICATOR = new Identifier("minelittlepony", "textures/entity/illager/vindicator_pony.png");
|
||||||
|
|
||||||
public RenderPonyIllager(EntityRenderDispatcher manager) {
|
public RenderPonyIllager(EntityRenderDispatcher manager) {
|
||||||
super(manager, new ModelWrapper<>(new ModelIllagerPony<>()));
|
super(manager, new ModelIllagerPony<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package com.minelittlepony.client.render;
|
package com.minelittlepony.client.render.entities;
|
||||||
|
|
||||||
import com.minelittlepony.MineLittlePony;
|
import com.minelittlepony.MineLittlePony;
|
||||||
import com.minelittlepony.client.model.ClientPonyModel;
|
import com.minelittlepony.client.model.ClientPonyModel;
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
import com.minelittlepony.client.model.ModelWrapper;
|
||||||
|
import com.minelittlepony.client.render.DebugBoundingBoxRenderer;
|
||||||
|
import com.minelittlepony.client.render.IPonyRender;
|
||||||
|
import com.minelittlepony.client.render.RenderPony;
|
||||||
import com.minelittlepony.client.render.layer.LayerGear;
|
import com.minelittlepony.client.render.layer.LayerGear;
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldPonyItemMagical;
|
import com.minelittlepony.client.render.layer.LayerHeldPonyItemMagical;
|
||||||
|
@ -31,10 +34,10 @@ public abstract class RenderPonyMob<T extends LivingEntity, M extends EntityMode
|
||||||
|
|
||||||
protected RenderPony<T, M> renderPony = new RenderPony<T, M>(this);
|
protected RenderPony<T, M> renderPony = new RenderPony<T, M>(this);
|
||||||
|
|
||||||
public RenderPonyMob(EntityRenderDispatcher manager, ModelWrapper<T, M> model) {
|
public RenderPonyMob(EntityRenderDispatcher manager, M model) {
|
||||||
super(manager, model.getBody(), 0.5F);
|
super(manager, model, 0.5F);
|
||||||
|
|
||||||
renderPony.setPonyModel(model);
|
this.model = renderPony.setPonyModel(new ModelWrapper<>(model));
|
||||||
|
|
||||||
addLayers();
|
addLayers();
|
||||||
}
|
}
|
||||||
|
@ -94,11 +97,6 @@ public abstract class RenderPonyMob<T extends LivingEntity, M extends EntityMode
|
||||||
return renderPony.playerModel;
|
return renderPony.playerModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public IPony getEntityPony(T entity) {
|
|
||||||
return MineLittlePony.getInstance().getManager().getPony(findTexture(entity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderLabel(T entity, String name, double x, double y, double z, int maxDistance) {
|
protected void renderLabel(T entity, String name, double x, double y, double z, int maxDistance) {
|
||||||
super.renderLabel(entity, name, x, renderPony.getNamePlateYOffset(entity, y), z, maxDistance);
|
super.renderLabel(entity, name, x, renderPony.getNamePlateYOffset(entity, y), z, maxDistance);
|
||||||
|
@ -116,9 +114,14 @@ public abstract class RenderPonyMob<T extends LivingEntity, M extends EntityMode
|
||||||
return renderPony;
|
return renderPony;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPony getEntityPony(T entity) {
|
||||||
|
return MineLittlePony.getInstance().getManager().getPony(findTexture(entity));
|
||||||
|
}
|
||||||
|
|
||||||
public abstract static class Caster<T extends LivingEntity, M extends ClientPonyModel<T> & IUnicorn<PonyRenderer>> extends RenderPonyMob<T, M> {
|
public abstract static class Caster<T extends LivingEntity, M extends ClientPonyModel<T> & IUnicorn<PonyRenderer>> extends RenderPonyMob<T, M> {
|
||||||
|
|
||||||
public Caster(EntityRenderDispatcher manager, ModelWrapper<T, M> model) {
|
public Caster(EntityRenderDispatcher manager, M model) {
|
||||||
super(manager, model);
|
super(manager, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,7 +134,7 @@ public abstract class RenderPonyMob<T extends LivingEntity, M extends EntityMode
|
||||||
public abstract static class Proxy<T extends LivingEntity, M extends EntityModel<T> & IPonyModel<T>> extends RenderPonyMob<T, M> {
|
public abstract static class Proxy<T extends LivingEntity, M extends EntityModel<T> & IPonyModel<T>> extends RenderPonyMob<T, M> {
|
||||||
|
|
||||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||||
public Proxy(List exportedLayers, EntityRenderDispatcher manager, ModelWrapper<T, M> model) {
|
public Proxy(List exportedLayers, EntityRenderDispatcher manager, M model) {
|
||||||
super(manager, model);
|
super(manager, model);
|
||||||
|
|
||||||
exportedLayers.addAll(features);
|
exportedLayers.addAll(features);
|
|
@ -1,8 +1,6 @@
|
||||||
package com.minelittlepony.client.render.entities;
|
package com.minelittlepony.client.render.entities;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
|
||||||
import com.minelittlepony.client.model.entities.ModelSkeletonPony;
|
import com.minelittlepony.client.model.entities.ModelSkeletonPony;
|
||||||
import com.minelittlepony.client.render.RenderPonyMob;
|
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldPonyItemMagical;
|
import com.minelittlepony.client.render.layer.LayerHeldPonyItemMagical;
|
||||||
import com.minelittlepony.client.render.layer.LayerPonyStrayOverlay;
|
import com.minelittlepony.client.render.layer.LayerPonyStrayOverlay;
|
||||||
|
@ -21,7 +19,7 @@ public class RenderPonySkeleton<Skeleton extends AbstractSkeletonEntity> extends
|
||||||
public static final Identifier STRAY = new Identifier("minelittlepony", "textures/entity/skeleton/stray_pony.png");
|
public static final Identifier STRAY = new Identifier("minelittlepony", "textures/entity/skeleton/stray_pony.png");
|
||||||
|
|
||||||
public RenderPonySkeleton(EntityRenderDispatcher manager) {
|
public RenderPonySkeleton(EntityRenderDispatcher manager) {
|
||||||
super(manager, new ModelWrapper<>(new ModelSkeletonPony<>()));
|
super(manager, new ModelSkeletonPony<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package com.minelittlepony.client.render.entities;
|
package com.minelittlepony.client.render.entities;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
|
||||||
import com.minelittlepony.client.model.entities.ModelVillagerPony;
|
import com.minelittlepony.client.model.entities.ModelVillagerPony;
|
||||||
import com.minelittlepony.client.render.RenderPonyMob;
|
|
||||||
import com.minelittlepony.util.resources.FormattedTextureSupplier;
|
import com.minelittlepony.util.resources.FormattedTextureSupplier;
|
||||||
import com.minelittlepony.util.resources.ITextureSupplier;
|
import com.minelittlepony.util.resources.ITextureSupplier;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
@ -23,7 +21,7 @@ public class RenderPonyVillager extends RenderPonyMob.Caster<VillagerEntity, Mod
|
||||||
private static final ITextureSupplier<VillagerData> PROFESSIONS = new VillagerProfessionTextureCache(FORMATTER, DEFAULT);
|
private static final ITextureSupplier<VillagerData> PROFESSIONS = new VillagerProfessionTextureCache(FORMATTER, DEFAULT);
|
||||||
|
|
||||||
public RenderPonyVillager(EntityRenderDispatcher manager) {
|
public RenderPonyVillager(EntityRenderDispatcher manager) {
|
||||||
super(manager, new ModelWrapper<>(new ModelVillagerPony<>()));
|
super(manager, new ModelVillagerPony<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package com.minelittlepony.client.render.entities;
|
package com.minelittlepony.client.render.entities;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
|
||||||
import com.minelittlepony.client.model.entities.ModelWitchPony;
|
import com.minelittlepony.client.model.entities.ModelWitchPony;
|
||||||
import com.minelittlepony.client.render.RenderPonyMob;
|
|
||||||
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
import com.minelittlepony.client.render.layer.LayerHeldPonyItem;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
|
||||||
|
@ -18,7 +16,7 @@ public class RenderPonyWitch extends RenderPonyMob<WitchEntity, ModelWitchPony>
|
||||||
private static final Identifier WITCH_TEXTURES = new Identifier("minelittlepony", "textures/entity/witch_pony.png");
|
private static final Identifier WITCH_TEXTURES = new Identifier("minelittlepony", "textures/entity/witch_pony.png");
|
||||||
|
|
||||||
public RenderPonyWitch(EntityRenderDispatcher manager) {
|
public RenderPonyWitch(EntityRenderDispatcher manager) {
|
||||||
super(manager, new ModelWrapper<>(new ModelWitchPony()));
|
super(manager, new ModelWitchPony());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package com.minelittlepony.client.render.entities;
|
package com.minelittlepony.client.render.entities;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
|
||||||
import com.minelittlepony.client.model.entities.ModelZombiePony;
|
import com.minelittlepony.client.model.entities.ModelZombiePony;
|
||||||
import com.minelittlepony.client.render.RenderPonyMob;
|
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
|
||||||
import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
||||||
|
@ -19,7 +17,7 @@ public class RenderPonyZombie<Zombie extends ZombieEntity> extends RenderPonyMob
|
||||||
public static final Identifier PIGMAN = new Identifier("minelittlepony", "textures/entity/zombie/zombie_pigman_pony.png");
|
public static final Identifier PIGMAN = new Identifier("minelittlepony", "textures/entity/zombie/zombie_pigman_pony.png");
|
||||||
|
|
||||||
public RenderPonyZombie(EntityRenderDispatcher manager) {
|
public RenderPonyZombie(EntityRenderDispatcher manager) {
|
||||||
super(manager, new ModelWrapper<>(new ModelZombiePony<>()));
|
super(manager, new ModelZombiePony<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -61,7 +59,7 @@ public class RenderPonyZombie<Zombie extends ZombieEntity> extends RenderPonyMob
|
||||||
public static class Giant extends RenderPonyMob.Caster<GiantEntity, ModelZombiePony<GiantEntity>> {
|
public static class Giant extends RenderPonyMob.Caster<GiantEntity, ModelZombiePony<GiantEntity>> {
|
||||||
|
|
||||||
public Giant(EntityRenderDispatcher manager) {
|
public Giant(EntityRenderDispatcher manager) {
|
||||||
super(manager, new ModelWrapper<>(new ModelZombiePony<>()));
|
super(manager, new ModelZombiePony<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package com.minelittlepony.client.render.entities;
|
package com.minelittlepony.client.render.entities;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ModelWrapper;
|
|
||||||
import com.minelittlepony.client.model.entities.ModelZombieVillagerPony;
|
import com.minelittlepony.client.model.entities.ModelZombieVillagerPony;
|
||||||
import com.minelittlepony.client.render.RenderPonyMob;
|
|
||||||
import com.minelittlepony.util.resources.FormattedTextureSupplier;
|
import com.minelittlepony.util.resources.FormattedTextureSupplier;
|
||||||
import com.minelittlepony.util.resources.ITextureSupplier;
|
import com.minelittlepony.util.resources.ITextureSupplier;
|
||||||
|
|
||||||
|
@ -22,7 +20,7 @@ public class RenderPonyZombieVillager extends RenderPonyMob.Caster<ZombieVillage
|
||||||
private static final ITextureSupplier<VillagerData> PROFESSIONS = new VillagerProfessionTextureCache(FORMATTER, DEFAULT);
|
private static final ITextureSupplier<VillagerData> PROFESSIONS = new VillagerProfessionTextureCache(FORMATTER, DEFAULT);
|
||||||
|
|
||||||
public RenderPonyZombieVillager(EntityRenderDispatcher manager) {
|
public RenderPonyZombieVillager(EntityRenderDispatcher manager) {
|
||||||
super(manager, new ModelWrapper<>(new ModelZombieVillagerPony()));
|
super(manager, new ModelZombieVillagerPony());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -36,10 +36,10 @@ public class RenderPonyPlayer extends PlayerEntityRenderer implements IPonyRende
|
||||||
|
|
||||||
protected final RenderPony<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> renderPony = new RenderPony<>(this);
|
protected final RenderPony<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> renderPony = new RenderPony<>(this);
|
||||||
|
|
||||||
public RenderPonyPlayer(EntityRenderDispatcher manager, boolean useSmallArms, ModelWrapper<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> model) {
|
public RenderPonyPlayer(EntityRenderDispatcher manager, boolean useSmallArms, ClientPonyModel<AbstractClientPlayerEntity> model) {
|
||||||
super(manager, useSmallArms);
|
super(manager, useSmallArms);
|
||||||
|
|
||||||
this.model = renderPony.setPonyModel(model);
|
this.model = renderPony.setPonyModel(new ModelWrapper<>(model));
|
||||||
|
|
||||||
addLayers();
|
addLayers();
|
||||||
}
|
}
|
||||||
|
@ -170,11 +170,6 @@ public class RenderPonyPlayer extends PlayerEntityRenderer implements IPonyRende
|
||||||
return renderPony.playerModel;
|
return renderPony.playerModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public IPony getEntityPony(AbstractClientPlayerEntity player) {
|
|
||||||
return MineLittlePony.getInstance().getManager().getPony(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RenderPony<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> getInternalRenderer() {
|
public RenderPony<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> getInternalRenderer() {
|
||||||
return renderPony;
|
return renderPony;
|
||||||
|
@ -185,4 +180,9 @@ public class RenderPonyPlayer extends PlayerEntityRenderer implements IPonyRende
|
||||||
return getTexture(entity);
|
return getTexture(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPony getEntityPony(AbstractClientPlayerEntity entity) {
|
||||||
|
return MineLittlePony.getInstance().getManager().getPony(entity);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,16 +11,16 @@ import net.minecraft.particle.ParticleTypes;
|
||||||
|
|
||||||
public class RenderSeaponyPlayer extends RenderPonyPlayer {
|
public class RenderSeaponyPlayer extends RenderPonyPlayer {
|
||||||
|
|
||||||
protected ModelWrapper<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> seapony;
|
protected final ModelWrapper<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> seapony;
|
||||||
protected ModelWrapper<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> normalPony;
|
protected final ModelWrapper<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> normalPony;
|
||||||
|
|
||||||
public RenderSeaponyPlayer(EntityRenderDispatcher manager, boolean useSmallArms,
|
public RenderSeaponyPlayer(EntityRenderDispatcher manager, boolean useSmallArms,
|
||||||
ModelWrapper<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> model,
|
ClientPonyModel<AbstractClientPlayerEntity> model,
|
||||||
ModelWrapper<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> alternate) {
|
ClientPonyModel<AbstractClientPlayerEntity> alternate) {
|
||||||
super(manager, useSmallArms, model);
|
super(manager, useSmallArms, model);
|
||||||
|
|
||||||
seapony = alternate;
|
seapony = new ModelWrapper<>(alternate);
|
||||||
normalPony = model;
|
normalPony = new ModelWrapper<>(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -4,7 +4,7 @@ import com.minelittlepony.hdskins.HDSkins;
|
||||||
import com.minelittlepony.settings.PonyConfig;
|
import com.minelittlepony.settings.PonyConfig;
|
||||||
import com.minelittlepony.settings.PonyLevel;
|
import com.minelittlepony.settings.PonyLevel;
|
||||||
|
|
||||||
public abstract class ClientPonyConfig extends PonyConfig {
|
public class ClientPonyConfig extends PonyConfig {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setPonyLevel(PonyLevel ponylevel) {
|
public void setPonyLevel(PonyLevel ponylevel) {
|
||||||
|
|
|
@ -3,9 +3,11 @@ package com.minelittlepony.client.transform;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ClientPonyModel;
|
import com.minelittlepony.model.IModel;
|
||||||
|
|
||||||
public interface PonyPosture<T extends LivingEntity> {
|
public interface PonyPosture<T extends LivingEntity> {
|
||||||
|
|
||||||
|
PonyPosture<LivingEntity> DEFAULT = new PostureStanding();;
|
||||||
PonyPosture<LivingEntity> ELYTRA = new PostureElytra();
|
PonyPosture<LivingEntity> ELYTRA = new PostureElytra();
|
||||||
PonyPosture<PlayerEntity> FLIGHT = new PostureFlight();
|
PonyPosture<PlayerEntity> FLIGHT = new PostureFlight();
|
||||||
PonyPosture<PlayerEntity> SWIMMING = new PostureSwimming();
|
PonyPosture<PlayerEntity> SWIMMING = new PostureSwimming();
|
||||||
|
@ -15,5 +17,15 @@ public interface PonyPosture<T extends LivingEntity> {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void transform(ClientPonyModel<?> model, T entity, double motionX, double motionY, double motionZ, float yaw, float ticks);
|
default void apply(T player, IModel model, float yaw, float ticks, int invert) {
|
||||||
|
if (applies(player)) {
|
||||||
|
double motionX = player.x - player.prevX;
|
||||||
|
double motionY = player.onGround ? 0 : player.y - player.prevY;
|
||||||
|
double motionZ = player.z - player.prevZ;
|
||||||
|
|
||||||
|
transform(model, player, motionX, invert * motionY, motionZ, yaw, ticks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void transform(IModel model, T entity, double motionX, double motionY, double motionZ, float yaw, float ticks);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,12 +2,12 @@ package com.minelittlepony.client.transform;
|
||||||
|
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ClientPonyModel;
|
import com.minelittlepony.model.IModel;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
|
||||||
public class PostureElytra implements PonyPosture<LivingEntity> {
|
public class PostureElytra implements PonyPosture<LivingEntity> {
|
||||||
@Override
|
@Override
|
||||||
public void transform(ClientPonyModel<?> model, LivingEntity entity, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
public void transform(IModel model, LivingEntity entity, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
||||||
GlStateManager.rotatef(90, 1, 0, 0);
|
GlStateManager.rotatef(90, 1, 0, 0);
|
||||||
GlStateManager.translatef(0, entity.isSneaking() ? 0.2F : -1, 0);
|
GlStateManager.translatef(0, entity.isSneaking() ? 0.2F : -1, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,11 @@ package com.minelittlepony.client.transform;
|
||||||
|
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ClientPonyModel;
|
import com.minelittlepony.model.IModel;
|
||||||
|
|
||||||
public class PostureFalling implements PonyPosture<LivingEntity> {
|
public class PostureFalling implements PonyPosture<LivingEntity> {
|
||||||
@Override
|
@Override
|
||||||
public void transform(ClientPonyModel<?> model, LivingEntity entity, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
public void transform(IModel model, LivingEntity entity, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
||||||
model.setPitch(0);
|
model.setPitch(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.minelittlepony.client.transform;
|
package com.minelittlepony.client.transform;
|
||||||
|
|
||||||
import com.minelittlepony.client.model.ClientPonyModel;
|
import com.minelittlepony.model.IModel;
|
||||||
import com.minelittlepony.util.transform.MotionCompositor;
|
import com.minelittlepony.util.transform.MotionCompositor;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ public class PostureFlight extends MotionCompositor implements PonyPosture<Playe
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void transform(ClientPonyModel<?> model, PlayerEntity player, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
public void transform(IModel model, PlayerEntity player, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
||||||
model.setPitch((float) calculateIncline(player, motionX, motionY, motionZ));
|
model.setPitch((float) calculateIncline(player, motionX, motionY, motionZ));
|
||||||
|
|
||||||
GlStateManager.rotatef(model.getPitch(), 1, 0, 0);
|
GlStateManager.rotatef(model.getPitch(), 1, 0, 0);
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.minelittlepony.client.transform;
|
||||||
|
|
||||||
|
import net.minecraft.entity.LivingEntity;
|
||||||
|
|
||||||
|
import com.minelittlepony.model.IModel;
|
||||||
|
|
||||||
|
public class PostureStanding implements PonyPosture<LivingEntity> {
|
||||||
|
@Override
|
||||||
|
public boolean applies(LivingEntity entity) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void transform(IModel model, LivingEntity entity, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,10 @@ package com.minelittlepony.model;
|
||||||
import net.minecraft.client.model.Cuboid;
|
import net.minecraft.client.model.Cuboid;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
|
|
||||||
public interface IPonyModel<T extends LivingEntity> extends PonyModelConstants, IModel, ICapitated<Cuboid>, ICompartmented<Cuboid> {
|
import com.minelittlepony.pony.IPony;
|
||||||
|
|
||||||
|
public interface IPonyModel<T extends LivingEntity> extends PonyModelConstants, IModel, ICapitated<Cuboid>, ICompartmented<Cuboid> {
|
||||||
|
default void updateLivingState(T entity, IPony pony) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,12 +3,11 @@ package com.minelittlepony.settings;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
|
||||||
import com.google.gson.annotations.Expose;
|
import com.google.gson.annotations.Expose;
|
||||||
import com.minelittlepony.common.SensibleConfig;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Storage container for MineLP client settings.
|
* Storage container for MineLP client settings.
|
||||||
*/
|
*/
|
||||||
public abstract class PonyConfig extends SensibleConfig {
|
public abstract class PonyConfig extends SensibleJsonConfig {
|
||||||
|
|
||||||
@Expose private PonyLevel ponylevel = PonyLevel.PONIES;
|
@Expose private PonyLevel ponylevel = PonyLevel.PONIES;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
package com.minelittlepony.settings;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import com.google.gson.stream.JsonWriter;
|
||||||
|
import com.minelittlepony.client.settings.ClientPonyConfig;
|
||||||
|
import com.minelittlepony.common.SensibleConfig;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class SensibleJsonConfig extends SensibleConfig {
|
||||||
|
|
||||||
|
static final Gson gson = new GsonBuilder()
|
||||||
|
.setPrettyPrinting()
|
||||||
|
.excludeFieldsWithoutExposeAnnotation()
|
||||||
|
.create();
|
||||||
|
|
||||||
|
private Path configFile;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save() {
|
||||||
|
|
||||||
|
try (JsonWriter writer = new JsonWriter(Files.newBufferedWriter(configFile))) {
|
||||||
|
writer.setIndent(" ");
|
||||||
|
|
||||||
|
gson.toJson(this, ClientPonyConfig.class, writer);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
protected <T extends SensibleJsonConfig> T load(Path file) {
|
||||||
|
SensibleJsonConfig result = this;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (Files.exists(file)) {
|
||||||
|
try (BufferedReader s = Files.newBufferedReader(file)) {
|
||||||
|
result = gson.fromJson(s, getClass());
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result == null) {
|
||||||
|
result = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
result.configFile = file;
|
||||||
|
} finally {
|
||||||
|
result.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
return (T)result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends SensibleJsonConfig> T of(Path file, Supplier<T> creator) {
|
||||||
|
return creator.get().load(file);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue