Added fillycam

This commit is contained in:
Sollace 2019-06-05 14:54:38 +02:00
parent 8157655434
commit f3f980d6c3
9 changed files with 120 additions and 9 deletions

View file

@ -0,0 +1,36 @@
package com.minelittlepony.client.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.minelittlepony.MineLittlePony;
import com.minelittlepony.pony.IPony;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.Camera;
@Mixin(Camera.class)
public abstract class MixinCamera {
// cameraDistance;
// float field_18721;
// prevCameraDistance;
// float field_18722;
@Inject(method = "method_19318(D)D",
at = @At("RETURN"),
cancellable = true)
private void redirectCameraDistance(double initial, CallbackInfoReturnable<Double> info) {
double value = info.getReturnValueD();
IPony pony = MineLittlePony.getInstance().getManager().getPony(MinecraftClient.getInstance().player);
if (!pony.getRace(false).isHuman()) {
value *= pony.getMetadata().getSize().getEyeDistanceFactor();
}
info.setReturnValue(value);
}
}

View file

@ -0,0 +1,35 @@
package com.minelittlepony.client.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.minelittlepony.MineLittlePony;
import com.minelittlepony.pony.IPony;
import net.minecraft.entity.EntityPose;
import net.minecraft.entity.EntitySize;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
@Mixin(PlayerEntity.class)
public abstract class MixinPlayerEntity extends LivingEntity {
private MixinPlayerEntity() {super(null, null);}
@Inject(method = "getActiveEyeHeight(Lnet/minecraft/entity/EntityPose;Lnet/minecraft/entity/EntitySize;)F",
at = @At("RETURN"),
cancellable = true)
protected void redirectGetActiveEyeHeight(EntityPose pose, EntitySize size, CallbackInfoReturnable<Float> info) {
float value = info.getReturnValueF();
IPony pony = MineLittlePony.getInstance().getManager().getPony((PlayerEntity)(Object)this);
if (!pony.getRace(false).isHuman()) {
value *= pony.getMetadata().getSize().getEyeHeightFactor();
}
info.setReturnValue(value);
}
}

View file

@ -35,7 +35,6 @@ import net.minecraft.util.math.Vec3d;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
@ -91,7 +90,12 @@ public class Pony extends Touchable<Pony> implements IPony {
}
@Nullable
public static NativeImage getBufferedImage(@Nonnull Identifier resource) {
public static NativeImage getBufferedImage(@Nullable Identifier resource) {
if (resource == null) {
return null;
}
try {
Resource skin = MinecraftClient.getInstance().getResourceManager().getResource(resource);
NativeImage skinImage = NativeImage.fromInputStream(skin.getInputStream());

View file

@ -65,6 +65,10 @@ public class PonyManager implements IPonyManager, ResourceReloadListener, ISkinC
@Override
public IPony getPony(PlayerEntity player) {
if (player == null || player.getGameProfile() == null) {
return getDefaultPony(player.getUuid());
}
Identifier skin = getSkin(player);
UUID uuid = player.getGameProfile().getId();

View file

@ -1,5 +1,8 @@
package com.minelittlepony.client.settings;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.player.PlayerEntity;
import com.minelittlepony.client.render.entities.MobRenderers;
import com.minelittlepony.hdskins.HDSkins;
import com.minelittlepony.settings.PonyConfig;
@ -20,4 +23,13 @@ public class ClientPonyConfig extends PonyConfig {
super.setPonyLevel(ponylevel);
}
@Override
public void save() {
super.save();
PlayerEntity player = MinecraftClient.getInstance().player;
if (player != null) {
player.refreshSize();
}
}
}

View file

@ -5,22 +5,24 @@ import com.minelittlepony.pony.ITriggerPixelMapped;
import com.minelittlepony.settings.PonySettings;
public enum Size implements ITriggerPixelMapped<Size> {
TALL (0x764b53, 0.45f, 1.1F),
BULKY (0x5432ce, 0.5f, 1),
LANKY (0xce5432, 0.45F, 0.85F),
NORMAL (0x000000, 0.4f, 0.8F),
YEARLING(0xffbe53, 0.4F, 0.6F),
FOAL (0x53beff, 0.25f, 0.6F);
TALL (0x764b53, 0.45f, 1.1F, 1.15F),
BULKY (0x5432ce, 0.5f, 1, 1.05F),
LANKY (0xce5432, 0.45F, 0.85F, 0.9F),
NORMAL (0x000000, 0.4f, 0.8F, 0.8F),
YEARLING(0xffbe53, 0.4F, 0.6F, 0.65F),
FOAL (0x53beff, 0.25f, 0.6F, 0.5F);
private int triggerValue;
private float shadowSize;
private float scale;
private float camera;
Size(int pixel, float shadowSz, float scaleF) {
Size(int pixel, float shadowSz, float scaleF, float cameraF) {
triggerValue = pixel;
shadowSize = shadowSz;
scale = scaleF;
camera = cameraF;
}
public float getShadowSize() {
@ -31,6 +33,20 @@ public enum Size implements ITriggerPixelMapped<Size> {
return scale * MineLittlePony.getInstance().getConfig().getGlobalScaleFactor();
}
public float getEyeHeightFactor() {
if (!PonySettings.FILLYCAM.get()) {
return 1;
}
return camera * MineLittlePony.getInstance().getConfig().getGlobalScaleFactor();
}
public float getEyeDistanceFactor() {
if (!PonySettings.FILLYCAM.get()) {
return 1;
}
return camera * MineLittlePony.getInstance().getConfig().getGlobalScaleFactor();
}
@Override
public int getTriggerPixel() {
return triggerValue;

View file

@ -10,6 +10,7 @@ public enum PonySettings implements Setting<Boolean> {
SIZES,
SNUZZLES,
HD,
FILLYCAM,
SHOWSCALE,
FPSMAGIC,
PONYSKULLS,

View file

@ -9,6 +9,7 @@
"minelp.options.hd": "Enable MineLP skin server",
"minelp.options.sizes": "Allow all different sizes of pony",
"minelp.options.snuzzles": "Display snuzzles on ponies",
"minelp.options.fillycam": "Enable Filly Cam",
"minelp.options.showscale": "Use show-accurate scaling",
"minelp.options.fpsmagic": "Ponies use magic in first-person",
"minelp.options.ponyskulls": "Render mob heads as ponies",

View file

@ -6,10 +6,12 @@
"compatibilityLevel": "JAVA_8",
"client": [
"IResizeable",
"MixinCamera",
"MixinDefaultPlayerSkin",
"MixinFirstPersonRenderer",
"MixinGlStateManager",
"MixinItemRenderer",
"MixinPlayerEntity",
"MixinThreadDownloadImageData"
]
}