diff --git a/src/main/java/com/minelittlepony/unicopia/Owned.java b/src/main/java/com/minelittlepony/unicopia/Owned.java index 1ff04421..d2235c2f 100644 --- a/src/main/java/com/minelittlepony/unicopia/Owned.java +++ b/src/main/java/com/minelittlepony/unicopia/Owned.java @@ -21,16 +21,6 @@ public interface Owned { @Nullable E getMaster(); - /** - * Gets the unique entity id of the entity that holds this object. - *

- * Since {@link Owned#getMaster()} will only return if the owner is loaded, use this to perform checks - * in the owner's absence. - */ - default Optional getMasterId() { - return Optional.of(getMaster()).map(Entity::getUuid); - } - /** * Updates the owner of this object. */ @@ -45,6 +35,20 @@ public interface Owned { setMaster(sibling.getMaster()); } + default boolean hasMaster() { + return getMaster() != null; + } + + /** + * Gets the unique entity id of the entity that holds this object. + *

+ * Since {@link Owned#getMaster()} will only return if the owner is loaded, use this to perform checks + * in the owner's absence. + */ + default Optional getMasterId() { + return Optional.of(getMaster()).map(Entity::getUuid); + } + default boolean isOwnedBy(@Nullable Object owner) { return owner instanceof Entity e && getMasterId().isPresent() diff --git a/src/main/java/com/minelittlepony/unicopia/WeaklyOwned.java b/src/main/java/com/minelittlepony/unicopia/WeaklyOwned.java index 8fb178c5..e6aa0aef 100644 --- a/src/main/java/com/minelittlepony/unicopia/WeaklyOwned.java +++ b/src/main/java/com/minelittlepony/unicopia/WeaklyOwned.java @@ -35,6 +35,11 @@ public interface WeaklyOwned extends Owned { } } + @Override + default void setMaster(E master) { + getMasterReference().set(master); + } + default World getReferenceWorld() { return ((Entity)this).getEntityWorld(); } @@ -45,11 +50,6 @@ public interface WeaklyOwned extends Owned { return getMasterReference().get(getReferenceWorld()); } - @Override - default void setMaster(E master) { - getMasterReference().set(master); - } - @Override default Optional getMasterId() { return getMasterReference().getId(); diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java index 96814854..e9fcd661 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java @@ -87,7 +87,7 @@ public class WorldRenderDelegate { matrices.push(); if (pony.getPhysics().isGravityNegative()) { - matrices.translate(0, -((ItemImpl) pony).getMaster().getHeight() * 1.1, 0); + matrices.translate(0, -((ItemImpl) pony).asEntity().getHeight() * 1.1, 0); } return false; diff --git a/src/main/java/com/minelittlepony/unicopia/entity/CastSpellEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/CastSpellEntity.java index 35f96bec..d2f5df90 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/CastSpellEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/CastSpellEntity.java @@ -77,6 +77,11 @@ public class CastSpellEntity extends LightEmittingEntity implements Caster createSpawnPacket() { return Channel.SERVER_SPAWN_PROJECTILE.toPacket(new MsgSpawnProjectile(this)); } - - @Override - public World getReferenceWorld() { - return WeaklyOwned.super.getReferenceWorld(); - } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/Creature.java b/src/main/java/com/minelittlepony/unicopia/entity/Creature.java index c76490b8..72440c39 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/Creature.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Creature.java @@ -44,7 +44,7 @@ public class Creature extends Living implements WeaklyOwned physics; - private final EntityReference master = new EntityReference<>(); + private final EntityReference owner = new EntityReference<>(); @Nullable private GoalSelector goals; @@ -58,21 +58,21 @@ public class Creature extends Living implements WeaklyOwned(entity, GRAVITY); - entity.getDataTracker().startTracking(MASTER, master.toNBT()); + entity.getDataTracker().startTracking(MASTER, owner.toNBT()); entity.getDataTracker().startTracking(EATING, 0); } @Override public void setMaster(LivingEntity owner) { - master.set(owner); - entity.getDataTracker().set(MASTER, master.toNBT()); + this.owner.set(owner); + entity.getDataTracker().set(MASTER, this.owner.toNBT()); if (targets != null && owner != null) { initMinionAi(); } } public boolean isMinion() { - return master.getId().isPresent(); + return owner.getId().isPresent(); } @Override @@ -84,13 +84,13 @@ public class Creature extends Living implements WeaklyOwned getMasterReference() { - return master; + return owner; } public Optional getTargets() { @@ -116,7 +116,7 @@ public class Creature extends Living implements WeaklyOwned implements WeaklyOwned { compound.put("effect", Spell.writeNbt(effect)); }); - compound.put("master", master.toNBT()); + compound.put("master", owner.toNBT()); physics.toNBT(compound); } @@ -240,8 +240,8 @@ public class Creature extends Living implements WeaklyOwned, Owned { +public class ItemImpl implements Equine { private static final TrackedData ITEM_RACE = DataTracker.registerData(ItemEntity.class, TrackedDataHandlerRegistry.STRING); static final TrackedData ITEM_GRAVITY = DataTracker.registerData(ItemEntity.class, TrackedDataHandlerRegistry.FLOAT); @@ -158,17 +152,6 @@ public class ItemImpl implements Equine, Owned { physics.fromNBT(compound); } - @Override - public void setMaster(ItemEntity owner) { - - } - - @Override - @NotNull - public ItemEntity getMaster() { - return asEntity(); - } - @Override public ItemEntity asEntity() { return entity; @@ -215,11 +198,11 @@ public class ItemImpl implements Equine, Owned { } default float getFollowDistance(IItemEntity entity) { - return 6 * (1 + EnchantmentHelper.getLevel(UEnchantments.CLINGY, entity.get().getMaster().getStack())); + return 6 * (1 + EnchantmentHelper.getLevel(UEnchantments.CLINGY, entity.get().asEntity().getStack())); } default float getFollowSpeed(IItemEntity entity) { - return Math.min(1, 0.02F * (1 + EnchantmentHelper.getLevel(UEnchantments.CLINGY, entity.get().getMaster().getStack()))); + return Math.min(1, 0.02F * (1 + EnchantmentHelper.getLevel(UEnchantments.CLINGY, entity.get().asEntity().getStack()))); } default void interactWithPlayer(IItemEntity entity, PlayerEntity player) { diff --git a/src/main/java/com/minelittlepony/unicopia/entity/Living.java b/src/main/java/com/minelittlepony/unicopia/entity/Living.java index 4806e3bd..b1e32795 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/Living.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Living.java @@ -4,7 +4,6 @@ import java.util.Optional; import java.util.stream.Stream; import java.util.stream.StreamSupport; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.USounds; @@ -99,16 +98,6 @@ public abstract class Living implements Equine, Caste return armour; } - @Override - public void setMaster(LivingEntity owner) { - } - - @Override - @NotNull - public LivingEntity getMaster() { - return asEntity(); - } - /** * @deprecated use asEntity() */ diff --git a/src/main/java/com/minelittlepony/unicopia/entity/effect/CorruptInfluenceStatusEffect.java b/src/main/java/com/minelittlepony/unicopia/entity/effect/CorruptInfluenceStatusEffect.java index 98adbb3b..5b416101 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/effect/CorruptInfluenceStatusEffect.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/effect/CorruptInfluenceStatusEffect.java @@ -42,7 +42,7 @@ public class CorruptInfluenceStatusEffect extends StatusEffect { } if (nearby > 1) { - if (Equine.of(entity).filter(eq -> eq instanceof Owned && ((Owned)eq).getMaster() != null).isPresent()) { + if (Equine.of(entity).filter(eq -> eq instanceof Owned o && o.hasMaster()).isPresent()) { return; } @@ -59,7 +59,9 @@ public class CorruptInfluenceStatusEffect extends StatusEffect { clone.copyPositionAndRotation(entity); Equine.of(clone).ifPresent(eq -> { - ((Owned)eq).setMaster(mob); + if (eq instanceof Owned) { + ((Owned)eq).setMaster(mob); + } }); mob.world.spawnEntity(clone); 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 6c012c7f..939f2a81 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -297,6 +297,14 @@ public class Pony extends Living implements Copyable, Update return asEntity(); } + /** + * @deprecated Pony cannot belong to other entities + */ + @Override + @Deprecated + public void setMaster(@Nullable LivingEntity owner) { + } + public void onSpawn() { if (entity.world instanceof ServerWorld sw && getObservedSpecies() == Race.BAT diff --git a/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java b/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java index 9bab0ad6..5c00d94c 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java @@ -23,7 +23,7 @@ public class AppleItem { } private static ActionResult onGroundTick(IItemEntity item) { - ItemEntity entity = item.get().getMaster(); + ItemEntity entity = item.get().asEntity(); if (!entity.isRemoved() && item.getPickupDelay() == 0 && item.getAge() > 2030 && entity.world.random.nextInt(150) < 10) { diff --git a/src/main/java/com/minelittlepony/unicopia/item/JarItem.java b/src/main/java/com/minelittlepony/unicopia/item/JarItem.java index 48c78a6c..338c0b6a 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/JarItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/JarItem.java @@ -39,7 +39,7 @@ public class JarItem extends ProjectileItem implements ItemImpl.GroundTickCallba @Override public ActionResult onGroundTick(IItemEntity item) { - ItemEntity entity = item.get().getMaster(); + ItemEntity entity = item.get().asEntity(); entity.setInvulnerable(true); diff --git a/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java b/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java index 6eb44c25..19d5b988 100644 --- a/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java @@ -7,6 +7,7 @@ import java.util.function.Function; import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.Affinity; +import com.minelittlepony.unicopia.Owned; import com.minelittlepony.unicopia.ability.magic.Affine; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Levelled; @@ -52,7 +53,7 @@ import net.minecraft.world.World; * * Can also carry a spell if needed. */ -public class MagicProjectileEntity extends ThrownItemEntity implements Caster { +public class MagicProjectileEntity extends ThrownItemEntity implements Caster, Owned { private static final TrackedData DAMAGE = DataTracker.registerData(MagicProjectileEntity.class, TrackedDataHandlerRegistry.FLOAT); private static final TrackedData GRAVITY = DataTracker.registerData(MagicProjectileEntity.class, TrackedDataHandlerRegistry.FLOAT); private static final TrackedData HYDROPHOBIC = DataTracker.registerData(MagicProjectileEntity.class, TrackedDataHandlerRegistry.BOOLEAN); @@ -106,16 +107,16 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Caster