From e9070b87b08d8bc59ac595893c91bf92525e551b Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 25 Dec 2022 16:01:12 +0100 Subject: [PATCH] Move some methods out of the Equine interface that don't need to be there --- .../unicopia/ability/magic/Caster.java | 8 +-- .../unicopia/entity/Creature.java | 5 ++ .../unicopia/entity/Equine.java | 65 +++++-------------- .../unicopia/entity/IItemEntity.java | 2 +- .../unicopia/entity/ItemImpl.java | 11 +--- .../unicopia/entity/Living.java | 15 +++-- .../unicopia/entity/PonyContainer.java | 22 ------- .../entity/duck/LivingEntityDuck.java | 5 +- .../unicopia/entity/player/Pony.java | 18 +---- .../unicopia/item/CrystalHeartItem.java | 2 +- .../unicopia/mixin/MixinDamageSource.java | 4 +- .../unicopia/mixin/MixinItemEntity.java | 7 +- .../unicopia/mixin/MixinLivingEntity.java | 6 +- .../unicopia/mixin/MixinMobEntity.java | 8 +-- .../unicopia/mixin/MixinPlayerEntity.java | 3 +- .../mixin/MixinServerPlayerEntity.java | 6 +- 16 files changed, 57 insertions(+), 130 deletions(-) delete mode 100644 src/main/java/com/minelittlepony/unicopia/entity/PonyContainer.java diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java index c1c475ef..f757f030 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java @@ -9,8 +9,7 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.*; import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; import com.minelittlepony.unicopia.block.data.ModificationType; -import com.minelittlepony.unicopia.entity.Physics; -import com.minelittlepony.unicopia.entity.PonyContainer; +import com.minelittlepony.unicopia.entity.*; import com.minelittlepony.unicopia.particle.ParticleSource; import com.minelittlepony.unicopia.util.SoundEmitter; import com.minelittlepony.unicopia.util.VecHelper; @@ -120,9 +119,6 @@ public interface Caster extends return Optional.of((Caster)entity); } - return PonyContainer.of(entity) - .map(PonyContainer::get) - .filter(c -> c instanceof Caster) - .map(c -> (Caster)c); + return Equine.>of(entity, c -> c instanceof Caster); } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/Creature.java b/src/main/java/com/minelittlepony/unicopia/entity/Creature.java index aac0738a..318cb30f 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/Creature.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Creature.java @@ -142,6 +142,11 @@ public class Creature extends Living implements WeaklyOwned.Mutabl builder.add(UEntityAttributes.ENTITY_GRAVTY_MODIFIER); } + @Override + public boolean beforeUpdate() { + return false; + } + @Override public void tick() { super.tick(); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/Equine.java b/src/main/java/com/minelittlepony/unicopia/entity/Equine.java index 6113be7e..a7e0e6fe 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/Equine.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Equine.java @@ -1,78 +1,45 @@ package com.minelittlepony.unicopia.entity; import java.util.Optional; +import java.util.function.Predicate; import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.EntityConvertable; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.projectile.ProjectileImpactListener; import com.minelittlepony.unicopia.util.NbtSerialisable; import com.minelittlepony.unicopia.util.Tickable; import net.minecraft.entity.Entity; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.projectile.ProjectileEntity; public interface Equine extends NbtSerialisable, Tickable, ProjectileImpactListener, EntityConvertable { - Race getSpecies(); - Physics getPhysics(); + Race getSpecies(); + void setSpecies(Race race); - /** - * Gets the last magical entity to attack us. - */ - @Nullable - Caster getAttacker(); - - /** - * Returns true if this player is fully invisible. - * Held items and other effects will be hidden as well. - */ - default boolean isInvisible() { - return false; - } - - /** - * Sets whether this player should be invisible. - */ - default void setInvisible(boolean invisible) { - - } - /** * Called at the beginning of an update cycle. */ - default boolean beforeUpdate() { - return false; + boolean beforeUpdate(); + + @SuppressWarnings("unchecked") + static > Optional of(@Nullable E entity) { + return entity instanceof Container ? Optional.of(((Container)entity).get()) : Optional.empty(); } - /** - * Event triggered when this entity is hit by a projectile. - */ - @Override - default boolean onProjectileImpact(ProjectileEntity projectile) { - return false; + @SuppressWarnings("unchecked") + static Optional of(@Nullable E entity, Predicate typeCheck) { + return entity instanceof Container + ? (Optional)Optional.of((Object)((Container)entity).get()).filter(typeCheck) + : Optional.empty(); } - /** - * Called when this entity jumps - */ - default void onJump() { + interface Container> { + Equine create(); - } - - /** - * Called when an entity is harmed. - */ - default Optional onDamage(DamageSource source, float amount) { - return Optional.empty(); - } - - static > Optional of(@Nullable E entity) { - return PonyContainer.of(entity).map(PonyContainer::get); + T get(); } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/IItemEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/IItemEntity.java index 4376c29f..7c2608a1 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/IItemEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/IItemEntity.java @@ -1,6 +1,6 @@ package com.minelittlepony.unicopia.entity; -public interface IItemEntity extends PonyContainer { +public interface IItemEntity extends Equine.Container { int getAge(); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java b/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java index 70e1da58..f739053c 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java @@ -2,10 +2,7 @@ package com.minelittlepony.unicopia.entity; import java.util.List; -import org.jetbrains.annotations.Nullable; - import com.minelittlepony.unicopia.*; -import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.item.enchantment.UEnchantments; import com.minelittlepony.unicopia.util.VecHelper; @@ -15,6 +12,7 @@ import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.projectile.ProjectileEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -42,10 +40,9 @@ public class ItemImpl implements Equine { owner.getDataTracker().startTracking(ITEM_RACE, Race.REGISTRY.getId(Race.HUMAN).toString()); } - @Nullable @Override - public Caster getAttacker() { - return null; + public boolean onProjectileImpact(ProjectileEntity projectile) { + return false; } @Override @@ -132,12 +129,10 @@ public class ItemImpl implements Equine { return physics; } - @Override public Race getSpecies() { return Race.fromName(entity.getDataTracker().get(ITEM_RACE), Race.HUMAN); } - @Override public void setSpecies(Race race) { entity.getDataTracker().set(ITEM_RACE, Race.REGISTRY.getId(race).toString()); } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/Living.java b/src/main/java/com/minelittlepony/unicopia/entity/Living.java index b90a5a87..d336876c 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/Living.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Living.java @@ -53,6 +53,8 @@ public abstract class Living implements Equine, Caste @Nullable private Runnable landEvent; + private boolean invisible = false; + @Nullable private Caster attacker; @@ -69,6 +71,14 @@ public abstract class Living implements Equine, Caste entity.getDataTracker().startTracking(effect, new NbtCompound()); } + public boolean isInvisible() { + return invisible && SpellPredicate.IS_DISGUISE.isOn(this); + } + + public void setInvisible(boolean invisible) { + this.invisible = invisible; + } + public void waitForFall(Runnable action) { if (entity.isOnGround()) { action.run(); @@ -166,7 +176,6 @@ public abstract class Living implements Equine, Caste } } - @Override public void onJump() { if (getPhysics().isGravityNegative()) { entity.setVelocity(entity.getVelocity().multiply(1, -1, 1)); @@ -174,12 +183,10 @@ public abstract class Living implements Equine, Caste } @Nullable - @Override public final Caster getAttacker() { return attacker; } - @Override public Optional onDamage(DamageSource source, float amount) { if (source == DamageSource.LIGHTNING_BOLT && (invinsibilityTicks > 0 || tryCaptureLightning())) { @@ -280,7 +287,7 @@ public abstract class Living implements Equine, Caste } public static Optional> getOrEmpty(Entity entity) { - return PonyContainer.of(entity).map(PonyContainer::get).map(a -> a instanceof Living ? (Living)a : null); + return Equine.of(entity, a -> a instanceof Living); } public static Living living(Entity entity) { diff --git a/src/main/java/com/minelittlepony/unicopia/entity/PonyContainer.java b/src/main/java/com/minelittlepony/unicopia/entity/PonyContainer.java deleted file mode 100644 index fea09dde..00000000 --- a/src/main/java/com/minelittlepony/unicopia/entity/PonyContainer.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.minelittlepony.unicopia.entity; - -import java.util.Optional; - -import org.jetbrains.annotations.Nullable; - -import net.minecraft.entity.Entity; - -public interface PonyContainer> { - - Equine create(); - - T get(); - - @SuppressWarnings("unchecked") - static > Optional> of(@Nullable Entity entity) { - if (entity instanceof PonyContainer) { - return Optional.of(((PonyContainer)entity)); - } - return Optional.empty(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/entity/duck/LivingEntityDuck.java b/src/main/java/com/minelittlepony/unicopia/entity/duck/LivingEntityDuck.java index e7494f3c..38515145 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/duck/LivingEntityDuck.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/duck/LivingEntityDuck.java @@ -1,12 +1,9 @@ package com.minelittlepony.unicopia.entity.duck; -import com.minelittlepony.unicopia.entity.Equine; -import com.minelittlepony.unicopia.entity.PonyContainer; - import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; -public interface LivingEntityDuck extends PonyContainer> { +public interface LivingEntityDuck { void updateItemUsage(Hand hand, ItemStack stack, int time); boolean isJumping(); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java index 45f3494b..1204ddbe 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -102,8 +102,6 @@ public class Pony extends Living implements Copyable, Update @Nullable private Race clientPreferredRace; - private boolean invisible = false; - private int ticksInSun; private boolean hasShades; private int ticksSunImmunity = INITIAL_SUN_IMMUNITY; @@ -225,20 +223,10 @@ public class Pony extends Living implements Copyable, Update return corruption; } - @Override - public boolean isInvisible() { - return invisible && SpellPredicate.IS_DISGUISE.isOn(this); - } - public boolean isSpeciesPersisted() { return speciesPersisted; } - @Override - public void setInvisible(boolean invisible) { - this.invisible = invisible; - } - public boolean isSunImmune() { return ticksSunImmunity > 0; } @@ -673,7 +661,7 @@ public class Pony extends Living implements Copyable, Update @SuppressWarnings("unchecked") @Nullable public static Pony of(@Nullable PlayerEntity player) { - return player == null ? null : ((PonyContainer)player).get(); + return player == null ? null : ((Container)player).get(); } public static Stream stream(Stream entities) { @@ -681,9 +669,7 @@ public class Pony extends Living implements Copyable, Update } public static Optional of(Entity entity) { - return entity instanceof PlayerEntity - ? PonyContainer.of(entity).map(a -> (Pony)a.get()) - : Optional.empty(); + return Equine.of(entity, a -> a instanceof Pony); } public static boolean equal(GameProfile one, GameProfile two) { diff --git a/src/main/java/com/minelittlepony/unicopia/item/CrystalHeartItem.java b/src/main/java/com/minelittlepony/unicopia/item/CrystalHeartItem.java index 0276be7a..a7688b1b 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/CrystalHeartItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/CrystalHeartItem.java @@ -129,7 +129,7 @@ public class CrystalHeartItem extends Item implements FloatingArtefactEntity.Art } }); VecHelper.findInRange(entity, entity.world, entity.getPos(), 20, i -> { - return i instanceof ItemEntity ie && isFillable(ie.getStack()) && PonyContainer.of(i).filter(p -> p.get().getSpecies() == Race.CHANGELING).isPresent(); + return i instanceof ItemEntity ie && isFillable(ie.getStack()) && Equine.of(i).filter(p -> p.getSpecies() == Race.CHANGELING).isPresent(); }).forEach(i -> containers.add((ItemEntity)i)); int demand = outputs.size() + containers.stream().mapToInt(i -> i.getStack().getCount()).sum(); diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinDamageSource.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinDamageSource.java index ec21071b..36de69d2 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinDamageSource.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinDamageSource.java @@ -7,7 +7,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import com.minelittlepony.unicopia.entity.Equine; +import com.minelittlepony.unicopia.entity.Living; import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.entity.Entity; @@ -24,7 +24,7 @@ abstract class MixinDamageSource { if (self.isFromFalling()) { info.setReturnValue(new DamageSource(self.name + ".pegasus").getDeathMessage(entity)); } else { - Equine.of(entity).map(Equine::getAttacker).ifPresent(attacker -> { + Living.getOrEmpty(entity).map(Living::getAttacker).ifPresent(attacker -> { Entity prime = entity.getPrimeAdversary(); if (prime != null && !attacker.isOwnedBy(prime)) { info.setReturnValue(Text.translatable("death.attack.generic.and_also", info.getReturnValue(), attacker.asEntity().getDisplayName())); diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItemEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItemEntity.java index ea20b93e..e227814f 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItemEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItemEntity.java @@ -6,8 +6,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.entity.IItemEntity; -import com.minelittlepony.unicopia.entity.ItemImpl; +import com.minelittlepony.unicopia.entity.*; import net.minecraft.entity.Entity; import net.minecraft.entity.ItemEntity; @@ -21,14 +20,14 @@ abstract class MixinItemEntity extends Entity implements IItemEntity { private MixinItemEntity() { super(null, null); } @Override - public ItemImpl create() { + public Equine create() { return new ItemImpl((ItemEntity)(Object)this); } @Override public ItemImpl get() { if (caster == null) { - caster = create(); + caster = (ItemImpl)create(); } return caster; } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java index b4f6e4f5..d3781f50 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java @@ -29,7 +29,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; @Mixin(LivingEntity.class) -abstract class MixinLivingEntity extends Entity implements LivingEntityDuck { +abstract class MixinLivingEntity extends Entity implements LivingEntityDuck, Equine.Container> { @Shadow protected ItemStack activeItemStack; @Shadow @@ -51,11 +51,11 @@ abstract class MixinLivingEntity extends Entity implements LivingEntityDuck { } @Override - public Equine get() { + public Living get() { if (caster == null) { caster = create(); } - return caster; + return (Living)caster; } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinMobEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinMobEntity.java index 389f9c43..4c18b1ec 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinMobEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinMobEntity.java @@ -17,7 +17,7 @@ import net.minecraft.entity.mob.MobEntity; import net.minecraft.world.World; @Mixin(MobEntity.class) -abstract class MixinMobEntity extends LivingEntity implements PonyContainer> { +abstract class MixinMobEntity extends LivingEntity implements Equine.Container { private MixinMobEntity() { super(null, null); } @Shadow @@ -27,14 +27,12 @@ abstract class MixinMobEntity extends LivingEntity implements PonyContainer entityType, World world, CallbackInfo info) { - ((Creature)get()).initAi(goalSelector, targetSelector); + get().initAi(goalSelector, targetSelector); } @Inject(method = "tickNewAi", at = @At("HEAD")) public void beforeTickAi(CallbackInfo into) { - Equine eq = Equine.of(this).orElse(null); - - if (eq instanceof Living && eq.getPhysics().isGravityNegative()) { + if (get().getPhysics().isGravityNegative()) { ((RotatedView)world).pushRotation((int)getY()); } } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java index d824d5e3..e4a389b5 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java @@ -7,7 +7,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import com.minelittlepony.unicopia.entity.PonyContainer; import com.minelittlepony.unicopia.entity.duck.PlayerEntityDuck; import com.minelittlepony.unicopia.entity.Equine; import com.minelittlepony.unicopia.entity.player.Pony; @@ -27,7 +26,7 @@ import net.minecraft.util.Unit; import net.minecraft.util.math.BlockPos; @Mixin(PlayerEntity.class) -abstract class MixinPlayerEntity extends LivingEntity implements PonyContainer, PlayerEntityDuck { +abstract class MixinPlayerEntity extends LivingEntity implements Equine.Container, PlayerEntityDuck { private MixinPlayerEntity() { super(null, null); } @Override @Invoker("updateCapeAngles") diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java index 081f5da7..69b310dc 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java @@ -6,7 +6,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.entity.PonyContainer; +import com.minelittlepony.unicopia.entity.Equine; import com.minelittlepony.unicopia.entity.duck.ServerPlayerEntityDuck; import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.entity.player.PlayerEntity; @@ -14,7 +14,7 @@ import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.server.network.ServerPlayerEntity; @Mixin(ServerPlayerEntity.class) -abstract class MixinServerPlayerEntity extends PlayerEntity implements ScreenHandlerListener, PonyContainer, ServerPlayerEntityDuck { +abstract class MixinServerPlayerEntity extends PlayerEntity implements ScreenHandlerListener, Equine.Container, ServerPlayerEntityDuck { MixinServerPlayerEntity() {super(null, null, 0, null);} @Override @@ -24,7 +24,7 @@ abstract class MixinServerPlayerEntity extends PlayerEntity implements ScreenHan @SuppressWarnings("unchecked") @Inject(method = "copyFrom(Lnet/minecraft/server/network/ServerPlayerEntity;Z)V", at = @At("HEAD")) private void onCopyFrom(ServerPlayerEntity oldPlayer, boolean alive, CallbackInfo info) { - get().copyFrom(((PonyContainer)oldPlayer).get()); + get().copyFrom(((Equine.Container)oldPlayer).get()); } }