Clean up some things and fixed pony level not being applied

This commit is contained in:
Sollace 2022-12-08 18:42:07 +00:00
parent 1b584ed351
commit 3c357c9061
5 changed files with 45 additions and 71 deletions

View file

@ -11,12 +11,22 @@ import com.minelittlepony.client.MineLittlePony;
public interface IPony { public interface IPony {
/**
* Gets the global pony manager instance.
*/
static IPonyManager getManager() {
return MineLittlePony.getInstance().getManager();
}
/** /**
* Gets or creates a new pony associated with the provided resource location. * Gets or creates a new pony associated with the provided resource location.
* The results of this method should not be cached. * The results of this method should not be cached.
*
* @deprecated User IPony.getManager().getPony(texture) instead
*/ */
@Deprecated
static IPony forResource(Identifier texture) { static IPony forResource(Identifier texture) {
return MineLittlePony.getInstance().getManager().getPony(texture); return getManager().getPony(texture);
} }
/** /**
@ -24,18 +34,6 @@ public interface IPony {
*/ */
void updateForEntity(Entity entity); void updateForEntity(Entity entity);
/**
* Returns true if this pony has wings and the will to use them.
*/
default boolean canFly() {
return getRace().hasWings();
}
/**
* Checks the required conditions for whether the given entity can perform a sonic rainboom.
*/
boolean isPerformingRainboom(LivingEntity entity);
/** /**
* Returns whether this is one of the default ponies assigned to a player without a custom skin. * Returns whether this is one of the default ponies assigned to a player without a custom skin.
*/ */
@ -65,21 +63,11 @@ public interface IPony {
*/ */
boolean isSwimming(LivingEntity entity); boolean isSwimming(LivingEntity entity);
/**
* Returns true if the provided entity is fully submerged with water reaching the entity's eyeheight or above.
*/
boolean isFullySubmerged(LivingEntity entity);
/** /**
* Returns true if the provided entity is partially submerged. That is if any part of it is in contact with water. * Returns true if the provided entity is partially submerged. That is if any part of it is in contact with water.
*/ */
boolean isPartiallySubmerged(LivingEntity entity); boolean isPartiallySubmerged(LivingEntity entity);
@Deprecated
default Race getRace(boolean ignorePony) {
return com.minelittlepony.client.pony.Pony.getEffectiveRace(getMetadata().getRace(), ignorePony);
}
/** /**
* Gets the race associated with this pony. * Gets the race associated with this pony.
*/ */

View file

@ -16,6 +16,7 @@ import com.minelittlepony.api.pony.meta.TriggerPixel;
import com.minelittlepony.api.pony.meta.Wearable; import com.minelittlepony.api.pony.meta.Wearable;
import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.common.util.animation.Interpolator; import com.minelittlepony.common.util.animation.Interpolator;
import com.minelittlepony.settings.PonyConfig;
import java.util.Map; import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
@ -91,7 +92,7 @@ class NativePonyData implements IPonyData {
@Override @Override
public boolean hasHorn() { public boolean hasHorn() {
return getRace() != null && Pony.getEffectiveRace(getRace(), false).hasHorn(); return getRace() != null && PonyConfig.getEffectiveRace(getRace()).hasHorn();
} }
@Override @Override

View file

@ -9,11 +9,10 @@ import com.minelittlepony.api.pony.meta.Sizes;
import com.minelittlepony.api.pony.network.MsgPonyData; import com.minelittlepony.api.pony.network.MsgPonyData;
import com.minelittlepony.api.pony.network.fabric.Channel; import com.minelittlepony.api.pony.network.fabric.Channel;
import com.minelittlepony.api.pony.network.fabric.PonyDataCallback; import com.minelittlepony.api.pony.network.fabric.PonyDataCallback;
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.render.IPonyRenderContext; import com.minelittlepony.client.render.IPonyRenderContext;
import com.minelittlepony.client.render.PonyRenderDispatcher; import com.minelittlepony.client.render.PonyRenderDispatcher;
import com.minelittlepony.client.transform.PonyTransformation; import com.minelittlepony.client.transform.PonyTransformation;
import com.minelittlepony.settings.PonyLevel; import com.minelittlepony.settings.PonyConfig;
import java.util.Objects; import java.util.Objects;
@ -79,14 +78,6 @@ public class Pony implements IPony {
} }
} }
@Override
public boolean isPerformingRainboom(LivingEntity entity) {
Vec3d motion = entity.getVelocity();
double zMotion = Math.sqrt(motion.x * motion.x + motion.z * motion.z);
return (isFlying(entity) && canFly()) || entity.isFallFlying() & zMotion > 0.4F;
}
@Override @Override
public boolean isCrouching(LivingEntity entity) { public boolean isCrouching(LivingEntity entity) {
@ -97,6 +88,13 @@ public class Pony implements IPony {
return !isPerformingRainboom(entity) && !isSwimming && isSneak && !isFlying; return !isPerformingRainboom(entity) && !isSwimming && isSneak && !isFlying;
} }
private boolean isPerformingRainboom(LivingEntity entity) {
Vec3d motion = entity.getVelocity();
double zMotion = Math.sqrt(motion.x * motion.x + motion.z * motion.z);
return (isFlying(entity) && getRace().hasWings()) || entity.isFallFlying() & zMotion > 0.4F;
}
@Override @Override
public boolean isFlying(LivingEntity entity) { public boolean isFlying(LivingEntity entity) {
return !(isOnGround(entity) return !(isOnGround(entity)
@ -141,12 +139,6 @@ public class Pony implements IPony {
|| entity.getEntityWorld().getBlockState(entity.getBlockPos()).getMaterial() == Material.WATER; || entity.getEntityWorld().getBlockState(entity.getBlockPos()).getMaterial() == Material.WATER;
} }
@Override
public boolean isFullySubmerged(LivingEntity entity) {
return entity.isSubmergedInWater()
&& entity.getEntityWorld().getBlockState(new BlockPos(getVisualEyePosition(entity))).getMaterial() == Material.WATER;
}
protected Vec3d getVisualEyePosition(LivingEntity entity) { protected Vec3d getVisualEyePosition(LivingEntity entity) {
Size size = entity.isBaby() ? Sizes.FOAL : getMetadata().getSize(); Size size = entity.isBaby() ? Sizes.FOAL : getMetadata().getSize();
@ -159,7 +151,7 @@ public class Pony implements IPony {
@Override @Override
public Race getRace() { public Race getRace() {
return getEffectiveRace(getMetadata().getRace(), true); return PonyConfig.getEffectiveRace(getMetadata().getRace());
} }
@Override @Override
@ -246,26 +238,6 @@ public class Pony implements IPony {
.toString(); .toString();
} }
/**
* Gets the actual race determined by the given pony level.
* PonyLevel.HUMANS would force all races to be humans.
* PonyLevel.BOTH is no change.
* PonyLevel.PONIES (should) return a pony if this is a human. Don't be fooled, though. It doesn't.
*/
public static Race getEffectiveRace(Race race, boolean ignorePony) {
Race override = MineLittlePony.getInstance().getConfig().raceOverride.get();
if (override != Race.HUMAN) {
return override;
}
if (MineLittlePony.getInstance().getConfig().getEffectivePonyLevel(ignorePony) == PonyLevel.HUMANS) {
return Race.HUMAN;
}
return race;
}
public interface RegistrationHandler { public interface RegistrationHandler {
boolean shouldUpdateRegistration(Pony pony); boolean shouldUpdateRegistration(Pony pony);
} }

View file

@ -133,7 +133,7 @@ public class PonyData implements IPonyData {
@Override @Override
public boolean hasHorn() { public boolean hasHorn() {
return getRace() != null && Pony.getEffectiveRace(getRace(), false).hasHorn(); return getRace() != null && getRace().hasHorn();
} }
@Override @Override

View file

@ -4,6 +4,7 @@ import net.minecraft.util.math.MathHelper;
import com.minelittlepony.api.pony.meta.Race; import com.minelittlepony.api.pony.meta.Race;
import com.minelittlepony.api.pony.meta.Sizes; import com.minelittlepony.api.pony.meta.Sizes;
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.common.util.settings.*; import com.minelittlepony.common.util.settings.*;
import java.nio.file.Path; import java.nio.file.Path;
@ -60,15 +61,6 @@ public class PonyConfig extends Config {
super(HEIRARCHICAL_JSON_ADAPTER, path); super(HEIRARCHICAL_JSON_ADAPTER, path);
} }
/**
* Gets the current PonyLevel. That is the level of ponies you would like to see.
*
* @param ignorePony true to ignore whatever value the setting has.
*/
public PonyLevel getEffectivePonyLevel(boolean ignorePony) {
return ignorePony ? PonyLevel.BOTH : ponyLevel.get();
}
public float setGlobalScaleFactor(float f) { public float setGlobalScaleFactor(float f) {
if (f < 0.15F) { if (f < 0.15F) {
@ -101,4 +93,25 @@ public class PonyConfig extends Config {
public float getGlobalScaleFactor() { public float getGlobalScaleFactor() {
return showscale.get() ? scaleFactor.get() : 1; return showscale.get() ? scaleFactor.get() : 1;
} }
/**
* Gets the actual race determined by the given pony level.
* PonyLevel.HUMANS would force all races to be humans.
* PonyLevel.BOTH is no change.
* PonyLevel.PONIES (should) return a pony if this is a human. Don't be fooled, though. It doesn't.
*/
public static Race getEffectiveRace(Race race) {
Race override = MineLittlePony.getInstance().getConfig().raceOverride.get();
if (override != Race.HUMAN) {
return override;
}
if (MineLittlePony.getInstance().getConfig().ponyLevel.get() == PonyLevel.HUMANS) {
return Race.HUMAN;
}
return race;
}
} }