From c2ac9cbbfa35e323460a2e41bf61e3ee47c3d3f3 Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 30 Aug 2018 16:12:21 +0200 Subject: [PATCH] Use an interface for Pony instead of the class --- .../java/com/minelittlepony/PonyManager.java | 19 +++--- .../com/minelittlepony/ducks/IRenderPony.java | 4 +- .../hdskins/gui/RenderPonyModel.java | 5 +- .../model/AbstractPonyModel.java | 4 +- .../model/ponies/ModelSeapony.java | 4 +- .../model/ponies/ModelWitchPony.java | 4 +- .../com/minelittlepony/pony/data/IPony.java | 62 +++++++++++++++++++ .../com/minelittlepony/pony/data/Pony.java | 9 ++- .../minelittlepony/pony/data/PonyData.java | 1 - .../render/LevitatingItemRenderer.java | 4 +- .../com/minelittlepony/render/PonySkull.java | 4 +- .../render/PonySkullRenderer.java | 4 +- .../com/minelittlepony/render/RenderPony.java | 6 +- .../minelittlepony/render/RenderPonyMob.java | 4 +- .../render/player/RenderPonyPlayer.java | 4 +- .../render/player/RenderSeaponyPlayer.java | 6 +- 16 files changed, 107 insertions(+), 37 deletions(-) create mode 100644 src/main/java/com/minelittlepony/pony/data/IPony.java diff --git a/src/main/java/com/minelittlepony/PonyManager.java b/src/main/java/com/minelittlepony/PonyManager.java index bc91dcc2..75bdd237 100644 --- a/src/main/java/com/minelittlepony/PonyManager.java +++ b/src/main/java/com/minelittlepony/PonyManager.java @@ -4,6 +4,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.gson.Gson; import com.google.gson.JsonParseException; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.pony.data.Pony; import com.minelittlepony.pony.data.PonyLevel; import com.voxelmodpack.hdskins.ISkinCacheClearListener; @@ -43,7 +44,7 @@ public class PonyManager implements IResourceManagerReloadListener, ISkinCacheCl private PonyConfig config; - private Map poniesCache = Maps.newHashMap(); + private Map poniesCache = Maps.newHashMap(); public PonyManager(PonyConfig config) { this.config = config; @@ -54,7 +55,7 @@ public class PonyManager implements IResourceManagerReloadListener, ISkinCacheCl * * @param resource A texture resource */ - public Pony getPony(ResourceLocation resource) { + public IPony getPony(ResourceLocation resource) { return poniesCache.computeIfAbsent(resource, Pony::new); } @@ -64,7 +65,7 @@ public class PonyManager implements IResourceManagerReloadListener, ISkinCacheCl * * @param player the player */ - public Pony getPony(AbstractClientPlayer player) { + public IPony getPony(AbstractClientPlayer player) { ResourceLocation skin = player.getLocationSkin(); UUID uuid = player.getGameProfile().getId(); @@ -75,7 +76,7 @@ public class PonyManager implements IResourceManagerReloadListener, ISkinCacheCl return getPony(skin, uuid); } - public Pony getPony(NetworkPlayerInfo playerInfo) { + public IPony getPony(NetworkPlayerInfo playerInfo) { ResourceLocation skin = playerInfo.getLocationSkin(); UUID uuid = playerInfo.getGameProfile().getId(); @@ -97,8 +98,8 @@ public class PonyManager implements IResourceManagerReloadListener, ISkinCacheCl * @param resource A texture resource * @param uuid id of a player or entity */ - public Pony getPony(ResourceLocation resource, UUID uuid) { - Pony pony = getPony(resource); + public IPony getPony(ResourceLocation resource, UUID uuid) { + IPony pony = getPony(resource); if (config.getPonyLevel() == PonyLevel.PONIES && pony.getMetadata().getRace().isHuman()) { return getBackgroundPony(uuid); @@ -112,7 +113,7 @@ public class PonyManager implements IResourceManagerReloadListener, ISkinCacheCl * * @param uuid id of a player or entity */ - public Pony getDefaultPony(UUID uuid) { + public IPony getDefaultPony(UUID uuid) { if (config.getPonyLevel() != PonyLevel.PONIES) { return getPony(DefaultPlayerSkin.getDefaultSkin(uuid)); } @@ -120,7 +121,7 @@ public class PonyManager implements IResourceManagerReloadListener, ISkinCacheCl return getBackgroundPony(uuid); } - private Pony getBackgroundPony(UUID uuid) { + private IPony getBackgroundPony(UUID uuid) { if (getNumberOfPonies() == 0 || isUser(uuid)) { return getPony(getDefaultSkin(uuid)); } @@ -138,7 +139,7 @@ public class PonyManager implements IResourceManagerReloadListener, ISkinCacheCl /** * De-registers a pony from the cache. */ - public Pony removePony(ResourceLocation resource) { + public IPony removePony(ResourceLocation resource) { return poniesCache.remove(resource); } diff --git a/src/main/java/com/minelittlepony/ducks/IRenderPony.java b/src/main/java/com/minelittlepony/ducks/IRenderPony.java index 225ec546..78b58168 100644 --- a/src/main/java/com/minelittlepony/ducks/IRenderPony.java +++ b/src/main/java/com/minelittlepony/ducks/IRenderPony.java @@ -1,7 +1,7 @@ package com.minelittlepony.ducks; import com.minelittlepony.model.ModelWrapper; -import com.minelittlepony.pony.data.Pony; +import com.minelittlepony.pony.data.IPony; import net.minecraft.entity.EntityLivingBase; @@ -15,5 +15,5 @@ public interface IRenderPony { */ ModelWrapper getModelWrapper(); - Pony getEntityPony(T entity); + IPony getEntityPony(T entity); } diff --git a/src/main/java/com/minelittlepony/hdskins/gui/RenderPonyModel.java b/src/main/java/com/minelittlepony/hdskins/gui/RenderPonyModel.java index 08fcbe10..b06a92b9 100644 --- a/src/main/java/com/minelittlepony/hdskins/gui/RenderPonyModel.java +++ b/src/main/java/com/minelittlepony/hdskins/gui/RenderPonyModel.java @@ -4,6 +4,7 @@ import com.minelittlepony.MineLittlePony; import com.minelittlepony.ducks.IRenderPony; import com.minelittlepony.model.ModelWrapper; import com.minelittlepony.model.player.PlayerModels; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.pony.data.Pony; import com.minelittlepony.pony.data.PonyRace; import com.minelittlepony.render.layer.LayerPonyElytra; @@ -41,7 +42,7 @@ public class RenderPonyModel extends RenderPlayerModel implemen } @Override - public Pony getEntityPony(EntityPonyModel entity) { + public IPony getEntityPony(EntityPonyModel entity) { return MineLittlePony.getInstance().getManager().getPony(getEntityTexture(entity)); } @@ -67,7 +68,7 @@ public class RenderPonyModel extends RenderPlayerModel implemen boolean slim = playermodel.usesThinSkin(); - Pony thePony = MineLittlePony.getInstance().getManager().getPony(loc); + IPony thePony = MineLittlePony.getInstance().getManager().getPony(loc); PonyRace race = thePony.getRace(false); diff --git a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java index 59c1bd5b..e7a907e2 100644 --- a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java @@ -6,8 +6,8 @@ import com.minelittlepony.model.capabilities.IModel; import com.minelittlepony.model.capabilities.IModelPart; import com.minelittlepony.model.components.PonySnout; import com.minelittlepony.model.components.PonyTail; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.pony.data.IPonyData; -import com.minelittlepony.pony.data.Pony; import com.minelittlepony.pony.data.PonyData; import com.minelittlepony.pony.data.PonySize; import com.minelittlepony.render.AbstractPonyRenderer; @@ -76,7 +76,7 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel, P rainboom &= Math.sqrt(entity.motionX * entity.motionX + entity.motionZ * entity.motionZ) > 0.4F; } - public void updateLivingState(EntityLivingBase entity, Pony pony) { + public void updateLivingState(EntityLivingBase entity, IPony pony) { isChild = entity.isChild(); isSneak = entity.isSneaking(); isSleeping = entity.isPlayerSleeping(); diff --git a/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java b/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java index 52432c7d..0b18a2bf 100644 --- a/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java +++ b/src/main/java/com/minelittlepony/model/ponies/ModelSeapony.java @@ -2,7 +2,7 @@ package com.minelittlepony.model.ponies; import com.minelittlepony.model.components.SeaponyTail; import com.minelittlepony.model.player.ModelUnicorn; -import com.minelittlepony.pony.data.Pony; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.render.PonyRenderer; import com.minelittlepony.render.plane.PlaneRenderer; @@ -25,7 +25,7 @@ public class ModelSeapony extends ModelUnicorn { } @Override - public void updateLivingState(EntityLivingBase entity, Pony pony) { + public void updateLivingState(EntityLivingBase entity, IPony pony) { super.updateLivingState(entity, pony); // Seaponies can't sneak, silly diff --git a/src/main/java/com/minelittlepony/model/ponies/ModelWitchPony.java b/src/main/java/com/minelittlepony/model/ponies/ModelWitchPony.java index fe8097c7..c0b31acd 100644 --- a/src/main/java/com/minelittlepony/model/ponies/ModelWitchPony.java +++ b/src/main/java/com/minelittlepony/model/ponies/ModelWitchPony.java @@ -12,7 +12,7 @@ import net.minecraft.util.math.MathHelper; import org.lwjgl.opengl.GL11; import com.minelittlepony.model.player.ModelZebra; -import com.minelittlepony.pony.data.Pony; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.render.PonyRenderer; public class ModelWitchPony extends ModelZebra { @@ -26,7 +26,7 @@ public class ModelWitchPony extends ModelZebra { } @Override - public void updateLivingState(EntityLivingBase entity, Pony pony) { + public void updateLivingState(EntityLivingBase entity, IPony pony) { super.updateLivingState(entity, pony); EntityWitch witch = ((EntityWitch) entity); diff --git a/src/main/java/com/minelittlepony/pony/data/IPony.java b/src/main/java/com/minelittlepony/pony/data/IPony.java new file mode 100644 index 00000000..c845c8e9 --- /dev/null +++ b/src/main/java/com/minelittlepony/pony/data/IPony.java @@ -0,0 +1,62 @@ +package com.minelittlepony.pony.data; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.ResourceLocation; + +import com.minelittlepony.MineLittlePony; + +public interface IPony { + /** + * Gets or creates a new pony associated with the provided player. + * The results of this method should not be cached. + */ + static IPony forPlayer(AbstractClientPlayer player) { + return MineLittlePony.getInstance().getManager().getPony(player); + } + + /** + * Returns true if the provided entity is flying like a pegasus. + * True if the entity is off the ground, has race with wings. + * Creative flight counts only if the entity is not on the ground. + * + * Entities that are riding, climbing a ladder, or swimming are not flying. + */ + boolean isPegasusFlying(EntityLivingBase entity); + + /** + * Returns true if the provided antity is actively wimming. + * That is, it should be fully submerged (isFullySubmerged returns true) + * and is not standing on the (river) bed or riding a ladder or any other entity. + */ + boolean isSwimming(EntityLivingBase entity); + + /** + * Returns true if the provided entity is fully submerged with water reaching the entity's eyeheight or above. + */ + boolean isFullySubmerged(EntityLivingBase entity); + + /** + * Returns true if an entity is wearing any headgear. This is used to hide things like the snout when wearing items + * such as the jack-o-lantern, helmet, or player's head. + */ + boolean isWearingHeadgear(EntityLivingBase entity); + + /** + * Gets the race associated with this pony. + * + * @param ignorePony True to ignore the client's current pony level setting. + */ + PonyRace getRace(boolean ignorePony); + + /** + * Gets the texture used for rendering this pony. + * @return + */ + ResourceLocation getTexture(); + + /** + * Gets the metadata associated with this pony's model texture. + */ + IPonyData getMetadata(); +} diff --git a/src/main/java/com/minelittlepony/pony/data/Pony.java b/src/main/java/com/minelittlepony/pony/data/Pony.java index f39109be..da2aa838 100644 --- a/src/main/java/com/minelittlepony/pony/data/Pony.java +++ b/src/main/java/com/minelittlepony/pony/data/Pony.java @@ -27,7 +27,7 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @Immutable -public class Pony { +public class Pony implements IPony { private static final AtomicInteger ponyCount = new AtomicInteger(); @@ -94,15 +94,18 @@ public class Pony { return PonyData.parse(bufferedimage); } + @Override public boolean isPegasusFlying(EntityLivingBase entity) { return getRace(false).hasWings() && !(entity.onGround || entity.isRiding() || entity.isOnLadder() || entity.isInWater()); } + @Override public boolean isSwimming(EntityLivingBase entity) { return isFullySubmerged(entity) && !(entity.onGround || entity.isOnLadder()); } + @Override public boolean isFullySubmerged(EntityLivingBase entity) { return entity.isInWater() && entity.getEntityWorld().getBlockState(new BlockPos(getVisualEyePosition(entity))).getMaterial() == Material.WATER; @@ -114,6 +117,7 @@ public class Pony { return new Vec3d(entity.posX, entity.posY + (double) entity.getEyeHeight() * size.getScaleFactor(), entity.posZ); } + @Override public boolean isWearingHeadgear(EntityLivingBase entity) { ItemStack stack = entity.getItemStackFromSlot(EntityEquipmentSlot.HEAD); @@ -126,14 +130,17 @@ public class Pony { return !(item instanceof ItemArmor) || ((ItemArmor) item).getEquipmentSlot() != EntityEquipmentSlot.HEAD; } + @Override public PonyRace getRace(boolean ignorePony) { return metadata.getRace().getEffectiveRace(ignorePony); } + @Override public ResourceLocation getTexture() { return texture; } + @Override public IPonyData getMetadata() { return metadata; } diff --git a/src/main/java/com/minelittlepony/pony/data/PonyData.java b/src/main/java/com/minelittlepony/pony/data/PonyData.java index 62c78af6..269ed4e2 100644 --- a/src/main/java/com/minelittlepony/pony/data/PonyData.java +++ b/src/main/java/com/minelittlepony/pony/data/PonyData.java @@ -1,7 +1,6 @@ package com.minelittlepony.pony.data; import com.google.common.base.MoreObjects; -import com.minelittlepony.MineLittlePony; import com.minelittlepony.model.anim.BasicEasingInterpolator; import com.minelittlepony.model.anim.IInterpolator; diff --git a/src/main/java/com/minelittlepony/render/LevitatingItemRenderer.java b/src/main/java/com/minelittlepony/render/LevitatingItemRenderer.java index 5cd76efd..63d1f2cd 100644 --- a/src/main/java/com/minelittlepony/render/LevitatingItemRenderer.java +++ b/src/main/java/com/minelittlepony/render/LevitatingItemRenderer.java @@ -4,7 +4,7 @@ import org.lwjgl.opengl.GL14; import com.minelittlepony.MineLittlePony; import com.minelittlepony.ducks.IRenderItem; -import com.minelittlepony.pony.data.Pony; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.util.coordinates.Color; import com.mumfrey.liteloader.client.overlays.IMinecraft; @@ -70,7 +70,7 @@ public class LevitatingItemRenderer { * Renders an item in first person optionally with a magical overlay. */ public void renderItemInFirstPerson(ItemRenderer renderer, AbstractClientPlayer entity, ItemStack stack, TransformType transform, boolean left) { - Pony pony = MineLittlePony.getInstance().getManager().getPony(entity); + IPony pony = MineLittlePony.getInstance().getManager().getPony(entity); pushMatrix(); diff --git a/src/main/java/com/minelittlepony/render/PonySkull.java b/src/main/java/com/minelittlepony/render/PonySkull.java index a4270511..291c4edb 100644 --- a/src/main/java/com/minelittlepony/render/PonySkull.java +++ b/src/main/java/com/minelittlepony/render/PonySkull.java @@ -1,7 +1,7 @@ package com.minelittlepony.render; import com.minelittlepony.model.components.ModelPonyHead; -import com.minelittlepony.pony.data.Pony; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.render.PonySkullRenderer.ISkull; public abstract class PonySkull implements ISkull { @@ -14,7 +14,7 @@ public abstract class PonySkull implements ISkull { } @Override - public void bindPony(Pony pony) { + public void bindPony(IPony pony) { ponyHead.metadata = pony.getMetadata(); } diff --git a/src/main/java/com/minelittlepony/render/PonySkullRenderer.java b/src/main/java/com/minelittlepony/render/PonySkullRenderer.java index ca878eb6..9e599262 100644 --- a/src/main/java/com/minelittlepony/render/PonySkullRenderer.java +++ b/src/main/java/com/minelittlepony/render/PonySkullRenderer.java @@ -3,7 +3,7 @@ package com.minelittlepony.render; import com.minelittlepony.MineLittlePony; import com.minelittlepony.PonyConfig; import com.minelittlepony.ducks.IRenderItem; -import com.minelittlepony.pony.data.Pony; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.render.skull.PlayerSkullRenderer; import com.minelittlepony.render.skull.SkeletonSkullRenderer; import com.minelittlepony.render.skull.WitherSkullRenderer; @@ -175,6 +175,6 @@ public class PonySkullRenderer extends TileEntitySkullRenderer implements IRende ResourceLocation getSkinResource(@Nullable GameProfile profile); - void bindPony(Pony pony); + void bindPony(IPony pony); } } diff --git a/src/main/java/com/minelittlepony/render/RenderPony.java b/src/main/java/com/minelittlepony/render/RenderPony.java index 2d562dc9..881a9804 100644 --- a/src/main/java/com/minelittlepony/render/RenderPony.java +++ b/src/main/java/com/minelittlepony/render/RenderPony.java @@ -3,7 +3,7 @@ package com.minelittlepony.render; import com.minelittlepony.ducks.IRenderPony; import com.minelittlepony.model.AbstractPonyModel; import com.minelittlepony.model.ModelWrapper; -import com.minelittlepony.pony.data.Pony; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.transform.PonyPosture; import net.minecraft.client.renderer.GlStateManager; @@ -15,7 +15,7 @@ public class RenderPony { protected AbstractPonyModel ponyModel; - private Pony pony; + private IPony pony; private IRenderPony renderer; @@ -84,7 +84,7 @@ public class RenderPony { playerModel.apply(pony.getMetadata()); } - public Pony getPony(T entity) { + public IPony getPony(T entity) { updateModel(entity); return pony; } diff --git a/src/main/java/com/minelittlepony/render/RenderPonyMob.java b/src/main/java/com/minelittlepony/render/RenderPonyMob.java index a7aa742c..83654125 100644 --- a/src/main/java/com/minelittlepony/render/RenderPonyMob.java +++ b/src/main/java/com/minelittlepony/render/RenderPonyMob.java @@ -3,7 +3,7 @@ package com.minelittlepony.render; import com.minelittlepony.MineLittlePony; import com.minelittlepony.ducks.IRenderPony; import com.minelittlepony.model.ModelWrapper; -import com.minelittlepony.pony.data.Pony; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.render.layer.LayerHeldPonyItem; import com.minelittlepony.render.layer.LayerHeldPonyItemMagical; import com.minelittlepony.render.layer.LayerPonyArmor; @@ -75,7 +75,7 @@ public abstract class RenderPonyMob extends RenderLiving } @Override - public Pony getEntityPony(T entity) { + public IPony getEntityPony(T entity) { return MineLittlePony.getInstance().getManager().getPony(getEntityTexture(entity)); } diff --git a/src/main/java/com/minelittlepony/render/player/RenderPonyPlayer.java b/src/main/java/com/minelittlepony/render/player/RenderPonyPlayer.java index 1b7aec84..adde2138 100644 --- a/src/main/java/com/minelittlepony/render/player/RenderPonyPlayer.java +++ b/src/main/java/com/minelittlepony/render/player/RenderPonyPlayer.java @@ -3,7 +3,7 @@ package com.minelittlepony.render.player; import com.minelittlepony.MineLittlePony; import com.minelittlepony.ducks.IRenderPony; import com.minelittlepony.model.ModelWrapper; -import com.minelittlepony.pony.data.Pony; +import com.minelittlepony.pony.data.IPony; import com.minelittlepony.render.RenderPony; import com.minelittlepony.render.layer.LayerDJPon3Head; import com.minelittlepony.render.layer.LayerEntityOnPonyShoulder; @@ -127,7 +127,7 @@ public class RenderPonyPlayer extends RenderPlayer implements IRenderPony