From 301acdf1d253c04f8579412b7fc24404b38687b4 Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 8 Oct 2020 19:22:20 +0200 Subject: [PATCH] Unicorns can now shoot a spell as a projectile --- .../com/minelittlepony/unicopia/Owned.java | 4 +- .../unicopia/ability/Abilities.java | 1 + .../unicopia/ability/BatEeeeAbility.java | 4 +- .../unicopia/ability/BatPonyHangAbility.java | 10 +-- .../unicopia/ability/CarryAbility.java | 2 +- .../ability/ChangelingDisguiseAbility.java | 2 +- .../ability/ChangelingFeedAbility.java | 8 +- .../ability/EarthPonyGrowAbility.java | 2 +- .../ability/EarthPonyStompAbility.java | 12 +-- .../ability/UnicornCastingAbility.java | 4 +- .../ability/UnicornProjectileAbility.java | 68 +++++++++++++++ .../ability/UnicornTeleportAbility.java | 14 ++-- .../{AttachableSpell.java => Attached.java} | 2 +- .../unicopia/ability/magic/Caster.java | 6 +- .../{ThrowableSpell.java => Thrown.java} | 30 ++++--- .../magic/spell/AbstractRangedAreaSpell.java | 4 +- .../ability/magic/spell/AttractiveSpell.java | 3 +- .../ability/magic/spell/AwkwardSpell.java | 12 +-- .../ability/magic/spell/DisguiseSpell.java | 12 +-- .../ability/magic/spell/FireSpell.java | 11 ++- .../ability/magic/spell/IceSpell.java | 7 +- .../ability/magic/spell/InfernoSpell.java | 2 +- .../ability/magic/spell/RevealingSpell.java | 3 +- .../ability/magic/spell/ScorchSpell.java | 19 ++--- .../ability/magic/spell/ShieldSpell.java | 32 ++++--- .../ability/magic/spell/SiphoningSpell.java | 6 +- .../client/render/WorldRenderDelegate.java | 6 +- .../unicopia/entity/Creature.java | 12 +-- .../unicopia/entity/EntityPhysics.java | 6 +- .../unicopia/entity/ItemImpl.java | 8 +- .../entity/behaviour/BeeBehaviour.java | 2 +- .../entity/behaviour/ChickenBehaviour.java | 6 +- .../unicopia/entity/behaviour/Disguise.java | 4 +- .../entity/behaviour/EndermanBehaviour.java | 4 +- .../behaviour/FallingBlockBehaviour.java | 2 +- .../entity/behaviour/GhastBehaviour.java | 4 +- .../entity/behaviour/HoppingBehaviour.java | 2 +- .../entity/behaviour/MobBehaviour.java | 4 +- .../behaviour/RangedAttackBehaviour.java | 2 +- .../entity/behaviour/SheepBehaviour.java | 6 +- .../entity/behaviour/SilverfishBehaviour.java | 2 +- .../SpellcastingIllagerBehaviour.java | 2 +- .../entity/behaviour/SteedBehaviour.java | 2 +- .../entity/behaviour/TraderBehaviour.java | 2 +- .../unicopia/entity/player/ManaContainer.java | 6 +- .../entity/player/PlayerAttributes.java | 2 +- .../unicopia/entity/player/PlayerCamera.java | 4 +- .../entity/player/PlayerDimensions.java | 2 +- .../unicopia/entity/player/PlayerPhysics.java | 16 ++-- .../unicopia/entity/player/Pony.java | 16 ++-- .../player/dummy/DummyClientPlayerEntity.java | 6 +- .../player/dummy/DummyPlayerEntity.java | 6 +- .../player/dummy/DummyServerPlayerEntity.java | 6 +- .../unicopia/item/AppleItem.java | 2 +- .../mixin/client/MixinKeyboardInput.java | 2 +- .../network/MsgPlayerCapabilities.java | 2 +- .../unicopia/network/MsgSpawnProjectile.java | 18 +++- .../projectile/MagicProjectileEntity.java | 84 ++++++------------- .../unicopia/projectile/Projectile.java | 38 --------- 59 files changed, 297 insertions(+), 269 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java rename src/main/java/com/minelittlepony/unicopia/ability/magic/{AttachableSpell.java => Attached.java} (92%) rename src/main/java/com/minelittlepony/unicopia/ability/magic/{ThrowableSpell.java => Thrown.java} (72%) delete mode 100644 src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java diff --git a/src/main/java/com/minelittlepony/unicopia/Owned.java b/src/main/java/com/minelittlepony/unicopia/Owned.java index a8b84697..a5ce3e7a 100644 --- a/src/main/java/com/minelittlepony/unicopia/Owned.java +++ b/src/main/java/com/minelittlepony/unicopia/Owned.java @@ -10,10 +10,10 @@ public interface Owned { /** * Updates the owner of this object. */ - void setOwner(E owner); + void setMaster(E owner); /** * Gets the owner that holds this object. */ - E getOwner(); + E getMaster(); } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java b/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java index 29874708..6be7cd9f 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java @@ -17,6 +17,7 @@ public interface Abilities { // unicorn / alicorn Ability CAST = register(new UnicornCastingAbility(), "cast", AbilitySlot.PRIMARY); Ability TELEPORT = register(new UnicornTeleportAbility(), "teleport", AbilitySlot.SECONDARY); + Ability SHOOT = register(new UnicornProjectileAbility(), "shoot", AbilitySlot.TERTIARY); // earth / alicorn Ability GROW = register(new EarthPonyGrowAbility(), "grow", AbilitySlot.SECONDARY); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java index 51a09bf0..bd7ad697 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java @@ -73,13 +73,13 @@ public class BatEeeeAbility implements Ability { Vec3d origin = player.getOriginVector(); if (rng.nextInt(20000) == 0) { - player.getOwner().damage(MagicalDamageSource.create("eeee", player.getOwner()), 0.1F); + player.getMaster().damage(MagicalDamageSource.create("eeee", player.getMaster()), 0.1F); } player.findAllEntitiesInRange(5).forEach(e -> { if (e instanceof LivingEntity && !HAS_SHIELD.test(e)) { boolean isEarthPony = EquinePredicates.PLAYER_EARTH.test(e); - e.damage(MagicalDamageSource.create("eeee", player.getOwner()), isEarthPony ? 0.1F : 0.3F); + e.damage(MagicalDamageSource.create("eeee", player.getMaster()), isEarthPony ? 0.1F : 0.3F); Vec3d knockVec = origin.subtract(e.getPos()); ((LivingEntity) e).takeKnockback(isEarthPony ? 0.3F : 0.5F, knockVec.getX(), knockVec.getZ()); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/BatPonyHangAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/BatPonyHangAbility.java index b0e56857..5969282f 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/BatPonyHangAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/BatPonyHangAbility.java @@ -39,7 +39,7 @@ public class BatPonyHangAbility implements Ability { return new Multi(BlockPos.ZERO, 0); } - BlockPos poss = RayTraceHelper.doTrace(player.getOwner(), 3, 1, EntityPredicates.EXCEPT_SPECTATOR).getBlockPos().orElse(null); + BlockPos poss = RayTraceHelper.doTrace(player.getMaster(), 3, 1, EntityPredicates.EXCEPT_SPECTATOR).getBlockPos().orElse(null); if (poss != null) { boolean air = player.getWorld().isAir(poss.down()) && player.getWorld().isAir(poss.down(2)); @@ -48,7 +48,7 @@ public class BatPonyHangAbility implements Ability { } } - return RayTraceHelper.doTrace(player.getOwner(), 5, 1, EntityPredicates.EXCEPT_SPECTATOR).getBlockPos() + return RayTraceHelper.doTrace(player.getMaster(), 5, 1, EntityPredicates.EXCEPT_SPECTATOR).getBlockPos() .map(BlockPos::down) .filter(pos -> player.getWorld().isAir(pos) && player.getWorld().isAir(pos.down()) && player.canHangAt(pos)) .map(pos -> new Multi(pos, 1)) @@ -62,7 +62,7 @@ public class BatPonyHangAbility implements Ability { @Override public void apply(Pony player, Multi data) { - EntityAttributeInstance attr = player.getOwner().getAttributeInstance(PlayerAttributes.ENTITY_GRAVTY_MODIFIER); + EntityAttributeInstance attr = player.getMaster().getAttributeInstance(PlayerAttributes.ENTITY_GRAVTY_MODIFIER); if (data.hitType == 0 && attr.hasModifier(PlayerAttributes.BAT_HANGING)) { attr.removeModifier(PlayerAttributes.BAT_HANGING); @@ -70,8 +70,8 @@ public class BatPonyHangAbility implements Ability { } if (data.hitType == 1 && player.canHangAt(data.pos())) { - player.getOwner().teleport(data.x + 0.5, data.y - 2, data.z + 0.5); - player.getOwner().setVelocity(Vec3d.ZERO); + player.getMaster().teleport(data.x + 0.5, data.y - 2, data.z + 0.5); + player.getMaster().setVelocity(Vec3d.ZERO); if (!attr.hasModifier(PlayerAttributes.BAT_HANGING)) { attr.addPersistentModifier(PlayerAttributes.BAT_HANGING); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/CarryAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/CarryAbility.java index a7e5cc4c..f5d85675 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/CarryAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/CarryAbility.java @@ -48,7 +48,7 @@ public class CarryAbility implements Ability { @Override public void apply(Pony iplayer, Hit data) { - PlayerEntity player = iplayer.getOwner(); + PlayerEntity player = iplayer.getMaster(); LivingEntity rider = findRider(player, iplayer.getWorld()); if (rider != null) { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java index 71d89141..8b8f0016 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java @@ -33,7 +33,7 @@ public class ChangelingDisguiseAbility extends ChangelingFeedAbility { @Override public void apply(Pony iplayer, Hit data) { - PlayerEntity player = iplayer.getOwner(); + PlayerEntity player = iplayer.getMaster(); if (iplayer.getMagicalReserves().getMana().getPercentFill() < 0.9F) { return; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java index 13fa157b..3421c204 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java @@ -60,7 +60,7 @@ public class ChangelingFeedAbility implements Ability { } private boolean canFeed(Pony player) { - return player.getOwner().getHealth() < player.getOwner().getMaxHealth() || player.getOwner().canConsume(false); + return player.getMaster().getHealth() < player.getMaster().getMaxHealth() || player.getMaster().canConsume(false); } private boolean canDrain(Entity e) { @@ -79,9 +79,9 @@ public class ChangelingFeedAbility implements Ability { } protected List getTargets(Pony player) { - List list = VecHelper.findInReach(player.getOwner(), 3, this::canDrain); + List list = VecHelper.findInReach(player.getMaster(), 3, this::canDrain); - RayTraceHelper.findEntity(player.getOwner(), 17, 1, + RayTraceHelper.findEntity(player.getMaster(), 17, 1, looked -> looked instanceof LivingEntity && !list.contains(looked) && canDrain(looked)) .ifPresent(list::add); @@ -90,7 +90,7 @@ public class ChangelingFeedAbility implements Ability { @Override public void apply(Pony iplayer, Hit data) { - PlayerEntity player = iplayer.getOwner(); + PlayerEntity player = iplayer.getMaster(); float maximumHealthGain = player.getMaxHealth() - player.getHealth(); int maximumFoodGain = player.canConsume(false) ? (20 - player.getHungerManager().getFoodLevel()) : 0; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java index a337d040..bb6024a6 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java @@ -36,7 +36,7 @@ public class EarthPonyGrowAbility implements Ability { @Override public Pos tryActivate(Pony player) { - return RayTraceHelper.doTrace(player.getOwner(), 3, 1).getBlockPos().map(Pos::new).orElse(null); + return RayTraceHelper.doTrace(player.getMaster(), 3, 1).getBlockPos().map(Pos::new).orElse(null); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java index f021d9ae..d6accd54 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java @@ -69,7 +69,7 @@ public class EarthPonyStompAbility implements Ability { @Nullable @Override public Multi tryActivate(Pony player) { - Optional p = RayTraceHelper.doTrace(player.getOwner(), 6, 1).getBlockPos(); + Optional p = RayTraceHelper.doTrace(player.getMaster(), 6, 1).getBlockPos(); if (p.isPresent()) { BlockPos pos = p.get(); @@ -83,8 +83,8 @@ public class EarthPonyStompAbility implements Ability { } } - if (!player.getOwner().isOnGround() && !player.getOwner().abilities.flying) { - player.getOwner().addVelocity(0, -6, 0); + if (!player.getMaster().isOnGround() && !player.getMaster().abilities.flying) { + player.getMaster().addVelocity(0, -6, 0); return new Multi(Vec3i.ZERO, 0); } @@ -100,7 +100,7 @@ public class EarthPonyStompAbility implements Ability { @Override public void apply(Pony iplayer, Multi data) { - PlayerEntity player = iplayer.getOwner(); + PlayerEntity player = iplayer.getMaster(); if (data.hitType == 0) { BlockPos ppos = player.getBlockPos(); @@ -191,8 +191,8 @@ public class EarthPonyStompAbility implements Ability { public void postApply(Pony player, AbilitySlot slot) { int timeDiff = getCooldownTime(player) - player.getAbilities().getStat(slot).getRemainingCooldown(); - if (player.getOwner().getEntityWorld().getTime() % 1 == 0 || timeDiff == 0) { - spawnParticleRing(player.getOwner(), timeDiff, 1); + if (player.getMaster().getEntityWorld().getTime() % 1 == 0 || timeDiff == 0) { + spawnParticleRing(player.getMaster(), timeDiff, 1); } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java index 7ac64367..522e47d5 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java @@ -44,7 +44,7 @@ public class UnicornCastingAbility implements Ability { if (player.hasSpell()) { String current = player.getSpell(true).getName(); - player.setSpell(Streams.stream(player.getOwner().getItemsHand()) + player.setSpell(Streams.stream(player.getMaster().getItemsHand()) .map(SpellRegistry::getKeyFromStack) .filter(i -> i != null && !current.equals(i)) .map(SpellRegistry.instance()::getSpellFromName) @@ -52,7 +52,7 @@ public class UnicornCastingAbility implements Ability { .findFirst() .orElse(null)); } else { - player.setSpell(Streams.stream(player.getOwner().getItemsHand()) + player.setSpell(Streams.stream(player.getMaster().getItemsHand()) .map(SpellRegistry.instance()::getSpellFrom) .filter(i -> i != null) .findFirst() diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java new file mode 100644 index 00000000..4814670c --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java @@ -0,0 +1,68 @@ +package com.minelittlepony.unicopia.ability; + +import java.util.Optional; + +import com.google.common.collect.Streams; +import com.minelittlepony.unicopia.Race; +import com.minelittlepony.unicopia.ability.data.Hit; +import com.minelittlepony.unicopia.ability.magic.Thrown; +import com.minelittlepony.unicopia.ability.magic.spell.AttractiveSpell; +import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; + +/** + * A magic casting ability for unicorns. + * (only shields for now) + */ +public class UnicornProjectileAbility implements Ability { + + @Override + public int getWarmupTime(Pony player) { + return 4; + } + + @Override + public int getCooldownTime(Pony player) { + return 0; + } + + @Override + public boolean canUse(Race race) { + return race.canCast(); + } + + @Override + public Hit tryActivate(Pony player) { + return Hit.INSTANCE; + } + + @Override + public Hit.Serializer getSerializer() { + return Hit.SERIALIZER; + } + + @Override + public void apply(Pony player, Hit data) { + getThrown(player).orElseGet(AttractiveSpell::new).toss(player); + } + + private Optional getThrown(Pony player) { + return Streams.stream(player.getMaster().getItemsHand()) + .map(SpellRegistry.instance()::getSpellFrom) + .filter(i -> i != null && i instanceof Thrown) + .map(Thrown.class::cast) + .findFirst(); + } + + @Override + public void preApply(Pony player, AbilitySlot slot) { + player.getMagicalReserves().getEnergy().multiply(3.3F); + player.spawnParticles(MagicParticleEffect.UNICORN, 5); + } + + @Override + public void postApply(Pony player, AbilitySlot slot) { + player.spawnParticles(MagicParticleEffect.UNICORN, 5); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java index 84fea889..e6e6dda5 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java @@ -45,8 +45,8 @@ public class UnicornTeleportAbility implements Ability { @Override public Pos tryActivate(Pony player) { - int maxDistance = player.getOwner().isCreative() ? 1000 : 100; - HitResult ray = RayTraceHelper.doTrace(player.getOwner(), maxDistance, 1, EntityPredicates.EXCEPT_SPECTATOR).getResult(); + int maxDistance = player.getMaster().isCreative() ? 1000 : 100; + HitResult ray = RayTraceHelper.doTrace(player.getMaster(), maxDistance, 1, EntityPredicates.EXCEPT_SPECTATOR).getResult(); World w = player.getWorld(); @@ -64,10 +64,10 @@ public class UnicornTeleportAbility implements Ability { boolean airAbove = enterable(w, pos.up()) && enterable(w, pos.up(2)); - if (exception(w, pos, player.getOwner())) { + if (exception(w, pos, player.getMaster())) { Direction sideHit = ((BlockHitResult)ray).getSide(); - if (player.getOwner().isSneaking()) { + if (player.getMaster().isSneaking()) { sideHit = sideHit.getOpposite(); } @@ -89,8 +89,8 @@ public class UnicornTeleportAbility implements Ability { } } - if ((!enterable(w, pos) && exception(w, pos, player.getOwner())) - || (!enterable(w, pos.up()) && exception(w, pos.up(), player.getOwner()))) { + if ((!enterable(w, pos) && exception(w, pos, player.getMaster())) + || (!enterable(w, pos.up()) && exception(w, pos.up(), player.getMaster()))) { return null; } @@ -106,7 +106,7 @@ public class UnicornTeleportAbility implements Ability { public void apply(Pony iplayer, Pos data) { iplayer.getWorld().playSound(null, iplayer.getOrigin(), SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 1, 1); - PlayerEntity player = iplayer.getOwner(); + PlayerEntity player = iplayer.getMaster(); double distance = Math.sqrt(player.squaredDistanceTo(data.x, data.y, data.z)) / 10; if (player.hasVehicle()) { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/AttachableSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Attached.java similarity index 92% rename from src/main/java/com/minelittlepony/unicopia/ability/magic/AttachableSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/Attached.java index 346a5b90..a740eb01 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/AttachableSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Attached.java @@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.ability.magic; /** * A magic effect that does something when attached to an entity. */ -public interface AttachableSpell extends Spell { +public interface Attached extends Spell { /** * Called every tick when attached to a player. * 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 6c10cd74..e54a4319 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java @@ -70,7 +70,7 @@ public interface Caster extends Owned, Levelled, Affi */ @Override default Entity getEntity() { - return getOwner(); + return getMaster(); } /** @@ -96,8 +96,8 @@ public interface Caster extends Owned, Levelled, Affi } default boolean subtractEnergyCost(double amount) { - getOwner().damage(DamageSource.MAGIC, (int)amount/2); - return getOwner().getHealth() > 0; + getMaster().damage(DamageSource.MAGIC, (int)amount/2); + return getMaster().getHealth() > 0; } default Stream> findAllSpellsInRange(double radius) { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/ThrowableSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Thrown.java similarity index 72% rename from src/main/java/com/minelittlepony/unicopia/ability/magic/ThrowableSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/Thrown.java index 8db0b922..132d501b 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/ThrowableSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Thrown.java @@ -6,8 +6,6 @@ import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.UEntities; import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; -import com.minelittlepony.unicopia.projectile.Projectile; - import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.item.Item; @@ -17,17 +15,22 @@ import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvents; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; /** * Magic effects that can be thrown. */ -public interface ThrowableSpell extends Spell { +public interface Thrown extends Spell { /** * Called once the projectile lands either hitting the ground or an entity. */ - void onImpact(Caster caster, BlockPos pos, BlockState state); + default void onImpact(Caster caster, BlockPos pos, BlockState state) { + if (!caster.isClient()) { + update(caster); + } + } /** * The amount of damage to be dealt when the projectile collides with an entity. @@ -58,24 +61,29 @@ public interface ThrowableSpell extends Spell { * Returns the resulting projectile entity for customization (or null if on the client). */ @Nullable - default Projectile toss(Caster caster) { + default MagicProjectileEntity toss(Caster caster) { World world = caster.getWorld(); - Entity entity = caster.getOwner(); + Entity entity = caster.getMaster(); world.playSound(null, entity.getX(), entity.getY(), entity.getZ(), getThrowSound(caster), SoundCategory.NEUTRAL, 0.7F, 0.4F / (world.random.nextFloat() * 0.4F + 0.8F)); if (!caster.isClient()) { - Projectile projectile = new MagicProjectileEntity(UEntities.THROWN_ITEM, world, caster.getOwner()); + Vec3d rot = entity.getRotationVec(1); + + MagicProjectileEntity projectile = new MagicProjectileEntity(UEntities.THROWN_ITEM, world, caster.getMaster(), entity.getRotationVec(1)); projectile.setItem(getCastAppearance(caster)); projectile.setThrowDamage(getThrowDamage(caster)); - projectile.setOwner(caster.getOwner()); - projectile.setEffect(this); + projectile.setSpell(this); projectile.setHydrophobic(); - projectile.launch(entity, entity.pitch, entity.yaw, 0, 1.5F, 1); + projectile.updatePosition( + entity.getX() + rot.x * 4, + entity.getBodyY(0.5D) + 0.5, + projectile.getZ() + rot.z * 4 + ); - projectile.spawn(world); + world.spawnEntity(projectile); return projectile; } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractRangedAreaSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractRangedAreaSpell.java index 2abf0ccd..f2c188aa 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractRangedAreaSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractRangedAreaSpell.java @@ -1,9 +1,9 @@ package com.minelittlepony.unicopia.ability.magic.spell; -import com.minelittlepony.unicopia.ability.magic.AttachableSpell; +import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; -public abstract class AbstractRangedAreaSpell extends AbstractSpell implements AttachableSpell { +public abstract class AbstractRangedAreaSpell extends AbstractSpell implements Attached { @Override public int getMaxLevelCutOff(Caster source) { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java index 75e3f2e3..1e1c3f7d 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java @@ -5,6 +5,7 @@ import javax.annotation.Nullable; import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Thrown; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.util.MagicalDamageSource; @@ -20,7 +21,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; -public class AttractiveSpell extends ShieldSpell { +public class AttractiveSpell extends ShieldSpell implements Thrown { @Nullable private BlockPos homingPos; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java index 64a0f409..72e5d588 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java @@ -5,22 +5,20 @@ import java.util.List; import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Caster; -import com.minelittlepony.unicopia.ability.magic.ThrowableSpell; +import com.minelittlepony.unicopia.ability.magic.Thrown; import com.minelittlepony.unicopia.util.shape.Sphere; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.minecraft.block.BlockState; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleType; import net.minecraft.particle.ParticleTypes; import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.util.registry.Registry; -public class AwkwardSpell extends AbstractSpell implements ThrowableSpell { +public class AwkwardSpell extends AbstractSpell implements Thrown { @Override public String getName() { @@ -70,10 +68,4 @@ public class AwkwardSpell extends AbstractSpell implements ThrowableSpell { && type != ParticleTypes.EXPLOSION_EMITTER && type != ParticleTypes.AMBIENT_ENTITY_EFFECT; } - - @Override - public void onImpact(Caster caster, BlockPos pos, BlockState state) { - // noop - } - } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java index b4831fa1..828a41a4 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java @@ -9,7 +9,7 @@ import com.minelittlepony.unicopia.FlightType; import com.minelittlepony.unicopia.Owned; import com.minelittlepony.unicopia.ability.FlightPredicate; import com.minelittlepony.unicopia.ability.DimensionsPredicate; -import com.minelittlepony.unicopia.ability.magic.AttachableSpell; +import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Spell; import com.minelittlepony.unicopia.ability.magic.Suppressable; @@ -27,7 +27,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.projectile.ProjectileEntity; import net.minecraft.nbt.CompoundTag; -public class DisguiseSpell extends AbstractSpell implements AttachableSpell, Suppressable, FlightPredicate, DimensionsPredicate { +public class DisguiseSpell extends AbstractSpell implements Attached, Suppressable, FlightPredicate, DimensionsPredicate { private final Disguise disguise = new Disguise(); @@ -101,7 +101,7 @@ public class DisguiseSpell extends AbstractSpell implements AttachableSpell, Sup @SuppressWarnings("unchecked") public boolean update(Caster source, boolean tick) { - LivingEntity owner = source.getOwner(); + LivingEntity owner = source.getMaster(); Entity entity = disguise.getAppearance(); @@ -159,11 +159,11 @@ public class DisguiseSpell extends AbstractSpell implements AttachableSpell, Sup if (source instanceof Pony) { Pony player = (Pony)source; - source.getOwner().setInvisible(true); + source.getMaster().setInvisible(true); player.setInvisible(true); if (entity instanceof Owned) { - ((Owned)entity).setOwner(player.getOwner()); + ((Owned)entity).setMaster(player.getMaster()); } if (entity instanceof PlayerEntity) { @@ -171,7 +171,7 @@ public class DisguiseSpell extends AbstractSpell implements AttachableSpell, Sup } } - return !source.getOwner().isDead(); + return !source.getMaster().isDead(); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java index bb72cb42..fa568e08 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java @@ -4,6 +4,7 @@ import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.EquinePredicates; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Magical; +import com.minelittlepony.unicopia.ability.magic.Thrown; import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; @@ -28,11 +29,12 @@ import net.minecraft.tag.BlockTags; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import net.minecraft.world.explosion.Explosion.DestructionType; /** * Simple fire spell that triggers an effect when used on a block. */ -public class FireSpell extends AbstractRangedAreaSpell { +public class FireSpell extends AbstractRangedAreaSpell implements Thrown { private static final Shape VISUAL_EFFECT_RANGE = new Sphere(false, 0.5); private static final Shape EFFECT_RANGE = new Sphere(false, 4); @@ -52,6 +54,13 @@ public class FireSpell extends AbstractRangedAreaSpell { return 0xFF5D00; } + @Override + public void onImpact(Caster caster, BlockPos pos, BlockState state) { + if (!caster.isClient()) { + caster.getWorld().createExplosion(caster.getMaster(), pos.getX(), pos.getY(), pos.getZ(), 2, DestructionType.DESTROY); + } + } + @Override public boolean update(Caster source) { return PosHelper.getAllInRegionMutable(source.getOrigin(), EFFECT_RANGE).reduce(false, diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java index 3773816a..a01d3e58 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java @@ -2,6 +2,7 @@ package com.minelittlepony.unicopia.ability.magic.spell; import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Thrown; import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; @@ -22,7 +23,7 @@ import net.minecraft.tag.BlockTags; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -public class IceSpell extends AbstractRangedAreaSpell { +public class IceSpell extends AbstractRangedAreaSpell implements Thrown { private final int rad = 3; private final Shape effect_range = new Sphere(false, rad); @@ -44,12 +45,12 @@ public class IceSpell extends AbstractRangedAreaSpell { @Override public boolean update(Caster source) { - LivingEntity owner = source.getOwner(); + LivingEntity owner = source.getMaster(); PosHelper.getAllInRegionMutable(source.getOrigin(), effect_range) .forEach(i -> applyBlockSingle(owner, source.getWorld(), i)); - return applyEntities(source.getOwner(), source.getWorld(), source.getOrigin()); + return applyEntities(source.getMaster(), source.getWorld(), source.getOrigin()); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java index 718fa5fd..a6a0aff7 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java @@ -60,7 +60,7 @@ public class InfernoSpell extends FireSpell { BlockPos pos = new BlockPos(shape.computePoint(w.random).add(origin)); if (!applyBlocks(w, pos)) { - applyEntities(source.getOwner(), w, pos); + applyEntities(source.getMaster(), w, pos); } } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java index 4adbda57..4fd5507d 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java @@ -3,6 +3,7 @@ package com.minelittlepony.unicopia.ability.magic.spell; import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Suppressable; +import com.minelittlepony.unicopia.ability.magic.Thrown; import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -14,7 +15,7 @@ import net.minecraft.util.math.Vec3d; /** * A spell for revealing changelings. */ -public class RevealingSpell extends AbstractSpell { +public class RevealingSpell extends AbstractSpell implements Thrown { @Override public String getName() { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java index 092431a7..4691ff97 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java @@ -4,10 +4,9 @@ import javax.annotation.Nullable; import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Caster; -import com.minelittlepony.unicopia.ability.magic.ThrowableSpell; import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.particle.MagicParticleEffect; -import com.minelittlepony.unicopia.projectile.Projectile; +import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; import com.minelittlepony.unicopia.util.PosHelper; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -15,9 +14,8 @@ import net.minecraft.block.BlockState; import net.minecraft.particle.ParticleTypes; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.explosion.Explosion.DestructionType; -public class ScorchSpell extends FireSpell implements ThrowableSpell { +public class ScorchSpell extends FireSpell { @Override public String getName() { @@ -62,20 +60,13 @@ public class ScorchSpell extends FireSpell implements ThrowableSpell { @Override @Nullable - public Projectile toss(Caster caster) { - Projectile projectile = ThrowableSpell.super.toss(caster); + public MagicProjectileEntity toss(Caster caster) { + MagicProjectileEntity projectile = super.toss(caster); if (projectile != null) { - projectile.setGravity(false); + projectile.setNoGravity(true); } return projectile; } - - @Override - public void onImpact(Caster caster, BlockPos pos, BlockState state) { - if (!caster.isClient()) { - caster.getWorld().createExplosion(caster.getOwner(), pos.getX(), pos.getY(), pos.getZ(), 2, DestructionType.DESTROY); - } - } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java index 209019fe..990a95a2 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java @@ -5,7 +5,7 @@ import java.util.stream.Collectors; import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.ability.magic.AttachableSpell; +import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.particle.MagicParticleEffect; @@ -20,7 +20,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.sound.SoundEvents; import net.minecraft.util.math.Vec3d; -public class ShieldSpell extends AbstractRangedAreaSpell implements AttachableSpell { +public class ShieldSpell extends AbstractRangedAreaSpell implements Attached { private final ParticleHandle particlEffect = new ParticleHandle(); @@ -60,7 +60,7 @@ public class ShieldSpell extends AbstractRangedAreaSpell implements AttachableSp public boolean updateOnPerson(Caster source) { int costMultiplier = applyEntities(source); if (costMultiplier > 0) { - if (source.getOwner().age % 20 == 0) { + if (source.getMaster().age % 20 == 0) { double cost = 4 + (source.getLevel().get() * 2); cost *= costMultiplier / 5F; @@ -75,7 +75,7 @@ public class ShieldSpell extends AbstractRangedAreaSpell implements AttachableSp } public double getDrawDropOffRange(Caster source) { - float multiplier = (source.getOwner().isSneaking() ? 1 : 2); + float multiplier = (source.getMaster().isSneaking() ? 1 : 2); return (4 + (source.getLevel().get() * 2)) / multiplier; } @@ -87,14 +87,26 @@ public class ShieldSpell extends AbstractRangedAreaSpell implements AttachableSp protected List getTargets(Caster source, double radius) { - Entity owner = source.getOwner(); + Entity owner = source.getMaster(); boolean ownerIsValid = source.getAffinity() != Affinity.BAD && EquinePredicates.PLAYER_UNICORN.test(owner); return source.findAllEntitiesInRange(radius) - .filter(entity -> !(ownerIsValid && ( - entity.equals(owner) - || (entity instanceof PlayerEntity && owner instanceof PlayerEntity && Pony.equal((PlayerEntity)entity, (PlayerEntity)owner))))) + .filter(entity -> { + if (!ownerIsValid) { + return true; + } + + boolean ownerEquals = ( + entity.equals(owner) + || (entity instanceof PlayerEntity && owner instanceof PlayerEntity && Pony.equal((PlayerEntity)entity, (PlayerEntity)owner))); + + if (!owner.isSneaking()) { + return ownerEquals; + } + + return !ownerEquals; + }) .collect(Collectors.toList()); } @@ -121,7 +133,7 @@ public class ShieldSpell extends AbstractRangedAreaSpell implements AttachableSp Vec3d pos = source.getOriginVector(); if (ProjectileUtil.isProjectile(target)) { - if (!ProjectileUtil.isProjectileThrownBy(target, source.getOwner())) { + if (!ProjectileUtil.isProjectileThrownBy(target, source.getMaster())) { if (distance < 1) { target.playSound(SoundEvents.ENTITY_ZOMBIE_VILLAGER_CURE, 0.1F, 1); target.remove(); @@ -164,7 +176,7 @@ public class ShieldSpell extends AbstractRangedAreaSpell implements AttachableSp if (player.getSpecies().canUseEarth()) { force /= 2; - if (player.getOwner().isSneaking()) { + if (player.getMaster().isSneaking()) { force /= 6; } } else if (player.getSpecies().canFly()) { diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java index 84d20a57..d82a13f1 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java @@ -6,6 +6,7 @@ import java.util.stream.Collectors; import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Thrown; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -20,7 +21,7 @@ import net.minecraft.util.math.Vec3d; /** * A spell that pulls health from other entities and delivers it to the caster. */ -public class SiphoningSpell extends AbstractRangedAreaSpell { +public class SiphoningSpell extends AbstractRangedAreaSpell implements Thrown { @Override public String getName() { @@ -37,7 +38,7 @@ public class SiphoningSpell extends AbstractRangedAreaSpell { int radius = 4 + source.getLevel().get(); - LivingEntity owner = source.getOwner(); + LivingEntity owner = source.getMaster(); List target = source.findAllEntitiesInRange(radius) .filter(e -> e instanceof LivingEntity) @@ -130,5 +131,4 @@ public class SiphoningSpell extends AbstractRangedAreaSpell { public Affinity getAffinity() { return Affinity.NEUTRAL; } - } 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 767d56dd..c803fa54 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java @@ -35,7 +35,7 @@ public class WorldRenderDelegate { matrices.push(); - Entity owner = pony.getOwner(); + Entity owner = pony.getMaster(); boolean negative = pony.getPhysics().isGravityNegative(); @@ -54,7 +54,7 @@ public class WorldRenderDelegate { matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(roll)); } - int fireTicks = pony.getOwner().doesRenderOnFire() ? 1 : 0; + int fireTicks = pony.getMaster().doesRenderOnFire() ? 1 : 0; return pony.getSpellOrEmpty(DisguiseSpell.class, true).map(effect -> { effect.update(pony, false); @@ -81,7 +81,7 @@ public class WorldRenderDelegate { matrices.pop(); if (pony.getPhysics().isGravityNegative()) { - flipAngles(pony.getOwner()); + flipAngles(pony.getMaster()); } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/Creature.java b/src/main/java/com/minelittlepony/unicopia/entity/Creature.java index b69762fd..f3e9aa0d 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/Creature.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Creature.java @@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.entity; import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.magic.Affine; -import com.minelittlepony.unicopia.ability.magic.AttachableSpell; +import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Levelled; import com.minelittlepony.unicopia.ability.magic.Spell; @@ -58,7 +58,7 @@ public class Creature implements Equine, Caster { @Override public void tick() { if (hasSpell()) { - AttachableSpell effect = getSpell(AttachableSpell.class, true); + Attached effect = getSpell(Attached.class, true); if (effect != null) { if (entity.getEntityWorld().isClient()) { @@ -73,12 +73,12 @@ public class Creature implements Equine, Caster { } @Override - public void setOwner(LivingEntity owner) { + public void setMaster(LivingEntity owner) { } @Override - public LivingEntity getOwner() { + public LivingEntity getMaster() { return entity; } @@ -89,8 +89,8 @@ public class Creature implements Equine, Caster { @Override public Affinity getAffinity() { - if (getOwner() instanceof Affine) { - return ((Affine)getOwner()).getAffinity(); + if (getMaster() instanceof Affine) { + return ((Affine)getMaster()).getAffinity(); } return Affinity.NEUTRAL; } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java index 16118b06..60f6c6f5 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java @@ -39,7 +39,7 @@ public class EntityPhysics & Owned> implem @Override public BlockPos getHeadPosition() { - Entity entity = pony.getOwner(); + Entity entity = pony.getMaster(); entity.setOnGround(false); @@ -57,7 +57,7 @@ public class EntityPhysics & Owned> implem return below; } } else { - pony.getOwner().setOnGround(true); + pony.getMaster().setOnGround(true); } return pos; @@ -65,7 +65,7 @@ public class EntityPhysics & Owned> implem @Override public void spawnSprintingParticles() { - Entity entity = pony.getOwner(); + Entity entity = pony.getMaster(); BlockState state = entity.world.getBlockState(getHeadPosition()); if (state.getRenderType() != BlockRenderType.INVISIBLE) { Vec3d vel = entity.getVelocity(); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java b/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java index 4dff99bc..fb75b644 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java @@ -56,12 +56,12 @@ public class ItemImpl implements Equine, Owned { @Override public Race getSpecies() { - return Race.fromId(getOwner().getDataTracker().get(ITEM_RACE)); + return Race.fromId(getMaster().getDataTracker().get(ITEM_RACE)); } @Override public void setSpecies(Race race) { - getOwner().getDataTracker().set(ITEM_RACE, race.ordinal()); + getMaster().getDataTracker().set(ITEM_RACE, race.ordinal()); } @Override @@ -78,12 +78,12 @@ public class ItemImpl implements Equine, Owned { } @Override - public void setOwner(ItemEntity owner) { + public void setMaster(ItemEntity owner) { } @Override - public ItemEntity getOwner() { + public ItemEntity getMaster() { return owner; } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/BeeBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/BeeBehaviour.java index 6ab1284b..69da1769 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/BeeBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/BeeBehaviour.java @@ -23,7 +23,7 @@ public class BeeBehaviour extends EntityBehaviour { @Override public void update(Caster source, BeeEntity entity, DisguiseSpell spell) { - if (source.getOwner().isSneaking()) { + if (source.getMaster().isSneaking()) { entity.setAngerTime(10); } else { entity.setAngerTime(0); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/ChickenBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/ChickenBehaviour.java index d9294ea0..8764d05d 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/ChickenBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/ChickenBehaviour.java @@ -31,13 +31,13 @@ public class ChickenBehaviour extends EntityBehaviour { if (player.sneakingChanged()) { ItemStack egg = entity.getEquippedStack(EquipmentSlot.OFFHAND); - if (player.getOwner().isSneaking()) { + if (player.getMaster().isSneaking()) { if (egg.isEmpty()) { egg = new ItemStack(Items.EGG); - int slot = player.getOwner().inventory.method_7371(egg); + int slot = player.getMaster().inventory.method_7371(egg); if (slot > -1) { - player.getOwner().inventory.removeStack(slot, 1); + player.getMaster().inventory.removeStack(slot, 1); entity.playSound(SoundEvents.ENTITY_CHICKEN_EGG, 1, (entity.world.random.nextFloat() - entity.world.random.nextFloat()) * 0.2F + 4 diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/Disguise.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/Disguise.java index 74e255bd..8ff83a9d 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/Disguise.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/Disguise.java @@ -103,7 +103,7 @@ public class Disguise implements NbtSerialisable { remove(); entity = InteractionManager.instance().createPlayer(source.getEntity(), profile); - entity.setCustomName(source.getOwner().getName()); + entity.setCustomName(source.getMaster().getName()); ((PlayerEntity)entity).fromTag(nbt.getCompound("playerNbt")); entity.setUuid(UUID.randomUUID()); entity.extinguish(); @@ -171,7 +171,7 @@ public class Disguise implements NbtSerialisable { if (entity instanceof Owned) { @SuppressWarnings("unchecked") - Pony iplayer = Pony.of(((Owned)entity).getOwner()); + Pony iplayer = Pony.of(((Owned)entity).getMaster()); return iplayer == null ? FlightType.NONE : iplayer.getSpecies().getFlightType(); } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EndermanBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EndermanBehaviour.java index c88efd9d..0b7d6786 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EndermanBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/EndermanBehaviour.java @@ -11,13 +11,13 @@ import net.minecraft.util.Hand; public class EndermanBehaviour extends EntityBehaviour { @Override public void update(Caster source, EndermanEntity entity, DisguiseSpell spell) { - if (source.getOwner().isSneaking() || source.getOwner().isSprinting()) { + if (source.getMaster().isSneaking() || source.getMaster().isSprinting()) { entity.setTarget(entity); } else { entity.setTarget(null); } - ItemStack stack = source.getOwner().getStackInHand(Hand.MAIN_HAND); + ItemStack stack = source.getMaster().getStackInHand(Hand.MAIN_HAND); if (stack.getItem() instanceof BlockItem) { entity.setCarriedBlock(((BlockItem)stack.getItem()).getBlock().getDefaultState()); } else { diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java index a52588ff..a0453cea 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/FallingBlockBehaviour.java @@ -92,7 +92,7 @@ public class FallingBlockBehaviour extends EntityBehaviour { Disguise disguise = spell.getDisguise(); List attachments = disguise.getAttachments(); if (attachments.size() > 0) { - copyBaseAttributes(source.getOwner(), attachments.get(0), UP); + copyBaseAttributes(source.getMaster(), attachments.get(0), UP); } BlockEntity be = disguise.getBlockEntity(); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/GhastBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/GhastBehaviour.java index c139c8aa..30dbb6e8 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/GhastBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/GhastBehaviour.java @@ -13,7 +13,7 @@ public class GhastBehaviour extends MobBehaviour { public void update(Pony player, GhastEntity entity, DisguiseSpell spell) { if (player.sneakingChanged()) { - boolean sneaking = player.getOwner().isSneaking(); + boolean sneaking = player.getMaster().isSneaking(); entity.setShooting(sneaking); entity.setTarget(sneaking ? findTarget(player, entity) : null); @@ -30,7 +30,7 @@ public class GhastBehaviour extends MobBehaviour { FireballEntity proj = new FireballEntity(entity.world, entity, rot.getX(), rot.getY(), rot.getZ()); proj.explosionPower = entity.getFireballStrength() * (player.getLevel().get() + 1); - proj.setOwner(player.getOwner()); + proj.setOwner(player.getMaster()); proj.updatePosition( entity.getX() + rot.x * 4, entity.getBodyY(0.5D) + 0.5, diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/HoppingBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/HoppingBehaviour.java index ebf74be6..b63e84db 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/HoppingBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/HoppingBehaviour.java @@ -13,7 +13,7 @@ public class HoppingBehaviour extends EntityBehaviour { if (player.getEntity().isOnGround()) { if (Entity.squaredHorizontalLength(player.getEntity().getVelocity()) > 0.01) { - player.getOwner().jump(); + player.getMaster().jump(); if (entity instanceof RabbitEntity) { ((RabbitEntity)entity).startJump(); } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/MobBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/MobBehaviour.java index db763a6b..1bc769cb 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/MobBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/MobBehaviour.java @@ -22,13 +22,13 @@ public class MobBehaviour extends EntityBehaviour { if (player.sneakingChanged() && isSneakingOnGround(player)) { LivingEntity target = findTarget(player, entity); entity.tryAttack(target); - target.setAttacker(player.getOwner()); + target.setAttacker(player.getMaster()); } } protected LivingEntity findTarget(Pony player, T entity) { return RayTraceHelper.findEntity(player.getEntity(), 6, 1, - e -> e instanceof LivingEntity && e != entity && e != player.getOwner()) + e -> e instanceof LivingEntity && e != entity && e != player.getMaster()) .orElseGet(() -> getDummy(entity)); } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/RangedAttackBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/RangedAttackBehaviour.java index bb7e7c31..884d246d 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/RangedAttackBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/RangedAttackBehaviour.java @@ -32,7 +32,7 @@ public class RangedAttackBehaviour extends E Vec3d rot = player.getEntity().getRotationVec(1); spit.setVelocity(rot.getX(), rot.getY(), rot.getZ(), 1.5F, 3); - spit.setOwner(player.getOwner()); + spit.setOwner(player.getMaster()); if (!entity.isSilent()) { entity.world.playSound(null, entity.getX(), entity.getY(), entity.getZ(), diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SheepBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SheepBehaviour.java index 11f03619..093d7c0b 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SheepBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SheepBehaviour.java @@ -27,7 +27,7 @@ public class SheepBehaviour extends EntityBehaviour { BlockState state = entity.world.getBlockState(pos); boolean grass = state.isOf(Blocks.GRASS_BLOCK); - if (player.getOwner().isSneaking()) { + if (player.getMaster().isSneaking()) { if (grass && entity.world.isClient && entity.isSheared()) { entity.handleStatus((byte)10); } @@ -40,11 +40,11 @@ public class SheepBehaviour extends EntityBehaviour { } else if (!entity.isSheared()) { ItemStack dropType = new ItemStack(MixinSheepEntity.getDrops().get(entity.getColor()).asItem()); - player.getOwner().playSound(SoundEvents.ENTITY_SHEEP_SHEAR, SoundCategory.PLAYERS, 1, 1); + player.getMaster().playSound(SoundEvents.ENTITY_SHEEP_SHEAR, SoundCategory.PLAYERS, 1, 1); entity.setSheared(true); Random rng = entity.world.random; - PlayerInventory inv = player.getOwner().inventory; + PlayerInventory inv = player.getMaster().inventory; int dropAmount = rng.nextInt(3); int slot; diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SilverfishBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SilverfishBehaviour.java index 6ea77d19..0cd0b33d 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SilverfishBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SilverfishBehaviour.java @@ -12,7 +12,7 @@ import net.minecraft.util.math.BlockPos; public class SilverfishBehaviour extends EntityBehaviour { @Override public void update(Pony player, SilverfishEntity entity, DisguiseSpell spell) { - if (!player.isClient() && player.sneakingChanged() && player.getOwner().isSneaking()) { + if (!player.isClient() && player.sneakingChanged() && player.getMaster().isSneaking()) { BlockPos pos = entity.getBlockPos().down(); BlockState state = entity.world.getBlockState(pos); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SpellcastingIllagerBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SpellcastingIllagerBehaviour.java index dacc4188..41109c15 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SpellcastingIllagerBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/SpellcastingIllagerBehaviour.java @@ -9,7 +9,7 @@ public class SpellcastingIllagerBehaviour extends EntityBehaviour extends Entit HorseBaseEntity horse = ((HorseBaseEntity)entity); - boolean angry = !player.getEntity().isOnGround() && player.getOwner().isSprinting(); + boolean angry = !player.getEntity().isOnGround() && player.getMaster().isSprinting(); boolean sneaking = isSneakingOnGround(player); angry |= sneaking; diff --git a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/TraderBehaviour.java b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/TraderBehaviour.java index 82c70805..40feebf6 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/behaviour/TraderBehaviour.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/behaviour/TraderBehaviour.java @@ -9,7 +9,7 @@ import net.minecraft.sound.SoundEvents; public class TraderBehaviour extends EntityBehaviour { @Override public void update(Pony pony, AbstractTraderEntity entity, DisguiseSpell spell) { - if (pony.sneakingChanged() && pony.getOwner().isSneaking()) { + if (pony.sneakingChanged() && pony.getMaster().isSneaking()) { entity.setHeadRollingTimeLeft(40); if (!entity.world.isClient()) { diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java b/src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java index efdb015a..ca2cdab0 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java @@ -71,17 +71,17 @@ public class ManaContainer implements MagicReserves { BarInst(TrackedData marker, float max) { this.marker = marker; this.max = max; - pony.getOwner().getDataTracker().startTracking(marker, 0F); + pony.getMaster().getDataTracker().startTracking(marker, 0F); } @Override public float get() { - return pony.getOwner().getDataTracker().get(marker); + return pony.getMaster().getDataTracker().get(marker); } @Override public void set(float value) { - pony.getOwner().getDataTracker().set(marker, MathHelper.clamp(value, 0, getMax())); + pony.getMaster().getDataTracker().set(marker, MathHelper.clamp(value, 0, getMax())); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerAttributes.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerAttributes.java index d65c8762..ea55fe75 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerAttributes.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerAttributes.java @@ -29,7 +29,7 @@ public class PlayerAttributes { new EntityAttributeModifier(UUID.fromString("a54f2595-521e-480b-b9d5-6e750577a564"), "Bat Pony Hanging", -2, Operation.MULTIPLY_TOTAL); public void applyAttributes(Pony pony) { - PlayerEntity entity = pony.getOwner(); + PlayerEntity entity = pony.getMaster(); Race race = pony.getSpecies(); toggleAttribute(entity, EntityAttributes.GENERIC_ATTACK_DAMAGE, EARTH_PONY_STRENGTH, race.canUseEarth()); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerCamera.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerCamera.java index c2030dc7..b9339639 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerCamera.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerCamera.java @@ -19,9 +19,9 @@ public class PlayerCamera extends MotionCompositor { double roll = 0; if (player.getMotion().isFlying()) { - Vec3d vel = player.getOwner().getVelocity(); + Vec3d vel = player.getMaster().getVelocity(); - roll -= calculateRoll(player.getOwner(), vel.x, vel.y, vel.z); + roll -= calculateRoll(player.getMaster(), vel.x, vel.y, vel.z); } if (player.getPhysics().isGravityNegative()) { diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java index 781f4972..e84dcac5 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java @@ -33,7 +33,7 @@ public final class PlayerDimensions { float height = calculateTargetEyeHeight(); if (physics.isGravityNegative()) { - if (pony.getOwner().isSneaking()) { + if (pony.getMaster().isSneaking()) { height += 0.2F; } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java index ce09b039..9896bc6d 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java @@ -46,12 +46,12 @@ public class PlayerPhysics extends EntityPhysics implements Tickable, Moti @Override public float getGravityModifier() { - if (pony.getOwner().getAttributes() == null) { + if (pony.getMaster().getAttributes() == null) { // may be null due to order of execution in the contructor. // Will have the default (1) here in any case, so it's safe to ignore the attribute a this point. return super.getGravityModifier(); } - return super.getGravityModifier() * (float)pony.getOwner().getAttributeValue(PlayerAttributes.ENTITY_GRAVTY_MODIFIER); + return super.getGravityModifier() * (float)pony.getMaster().getAttributeValue(PlayerAttributes.ENTITY_GRAVTY_MODIFIER); } @Override @@ -61,12 +61,12 @@ public class PlayerPhysics extends EntityPhysics implements Tickable, Moti @Override public boolean isFlying() { - return isFlyingSurvival && !pony.getOwner().isFallFlying() && !pony.getOwner().hasVehicle(); + return isFlyingSurvival && !pony.getMaster().isFallFlying() && !pony.getMaster().hasVehicle(); } @Override public void tick() { - PlayerEntity entity = pony.getOwner(); + PlayerEntity entity = pony.getMaster(); if (isGravityNegative() && !entity.isSneaking() && entity.isInSneakingPose()) { float currentHeight = entity.getDimensions(entity.getPose()).height; @@ -78,7 +78,7 @@ public class PlayerPhysics extends EntityPhysics implements Tickable, Moti final MutableVector velocity = new MutableVector(entity.getVelocity()); - boolean creative = entity.abilities.creativeMode || pony.getOwner().isSpectator(); + boolean creative = entity.abilities.creativeMode || pony.getMaster().isSpectator(); FlightType type = getFlightType(); @@ -296,7 +296,7 @@ public class PlayerPhysics extends EntityPhysics implements Tickable, Moti } private FlightType getFlightType() { - if (pony.getOwner().isCreative() || pony.getOwner().isSpectator()) { + if (pony.getMaster().isCreative() || pony.getMaster().isSpectator()) { return FlightType.CREATIVE; } @@ -311,7 +311,7 @@ public class PlayerPhysics extends EntityPhysics implements Tickable, Moti } public void updateFlightStat(boolean flying) { - PlayerEntity entity = pony.getOwner(); + PlayerEntity entity = pony.getMaster(); FlightType type = getFlightType(); @@ -341,6 +341,6 @@ public class PlayerPhysics extends EntityPhysics implements Tickable, Moti isFlyingEither = compound.getBoolean("isFlyingEither"); ticksInAir = compound.getInt("ticksInAir"); - pony.getOwner().calculateDimensions(); + pony.getMaster().calculateDimensions(); } } 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 51757b3a..e1e8c743 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -10,7 +10,7 @@ import com.minelittlepony.unicopia.InteractionManager; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.WorldTribeManager; import com.minelittlepony.unicopia.ability.AbilityDispatcher; -import com.minelittlepony.unicopia.ability.magic.AttachableSpell; +import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Spell; import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; @@ -107,11 +107,11 @@ public class Pony implements Caster, Equine, Transmi @Override public Race getSpecies() { - if (getOwner() == null) { + if (getMaster() == null) { return Race.HUMAN; } - return Race.fromId(getOwner().getDataTracker().get(RACE)); + return Race.fromId(getMaster().getDataTracker().get(RACE)); } public boolean sneakingChanged() { @@ -283,7 +283,7 @@ public class Pony implements Caster, Equine, Transmi gravity.tick(); if (hasSpell()) { - AttachableSpell effect = getSpell(AttachableSpell.class, true); + Attached effect = getSpell(Attached.class, true); if (effect != null) { if (entity.getEntityWorld().isClient()) { @@ -392,7 +392,7 @@ public class Pony implements Caster, Equine, Transmi public void onEat(ItemStack stack) { if (getSpecies() == Race.CHANGELING) { - Toxin.POISON.afflict(getOwner(), FoodType.RAW_MEAT, Toxicity.SAFE, stack); + Toxin.POISON.afflict(getMaster(), FoodType.RAW_MEAT, Toxicity.SAFE, stack); } } @@ -443,16 +443,16 @@ public class Pony implements Caster, Equine, Transmi } @Override - public void setOwner(PlayerEntity owner) { + public void setMaster(PlayerEntity owner) { } @Override - public PlayerEntity getOwner() { + public PlayerEntity getMaster() { return entity; } public boolean isClientPlayer() { - return InteractionManager.instance().isClientPlayer(getOwner()); + return InteractionManager.instance().isClientPlayer(getMaster()); } @SuppressWarnings("unchecked") diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java index 40a94b49..b8d90f76 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java @@ -60,16 +60,16 @@ public class DummyClientPlayerEntity extends AbstractClientPlayerEntity implemen @Override public boolean shouldRenderName() { - return !InteractionManager.instance().isClientPlayer(getOwner()); + return !InteractionManager.instance().isClientPlayer(getMaster()); } @Override - public PlayerEntity getOwner() { + public PlayerEntity getMaster() { return owner; } @Override - public void setOwner(PlayerEntity owner) { + public void setMaster(PlayerEntity owner) { this.owner = owner; } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java index 68177f14..de9f870a 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java @@ -23,18 +23,18 @@ public class DummyPlayerEntity extends PlayerEntity implements Owned 200230 && entity.world.random.nextInt(200) < 10) { diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinKeyboardInput.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinKeyboardInput.java index 21373a90..2cd96aaf 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinKeyboardInput.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinKeyboardInput.java @@ -25,7 +25,7 @@ abstract class MixinKeyboardInput extends Input { movementSideways = -movementSideways; - if (player.getOwner().abilities.flying) { + if (player.getMaster().abilities.flying) { tmp = jumping; jumping = sneaking; sneaking = tmp; diff --git a/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java b/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java index 14582af6..ba1b23ca 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java +++ b/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java @@ -35,7 +35,7 @@ public class MsgPlayerCapabilities implements Channel.Packet { } public MsgPlayerCapabilities(boolean full, Pony player) { - playerId = player.getOwner().getUuid(); + playerId = player.getMaster().getUuid(); newRace = player.getSpecies(); compoundTag = full ? player.toNBT() : new CompoundTag(); } diff --git a/src/main/java/com/minelittlepony/unicopia/network/MsgSpawnProjectile.java b/src/main/java/com/minelittlepony/unicopia/network/MsgSpawnProjectile.java index 8eee9730..0b699479 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/MsgSpawnProjectile.java +++ b/src/main/java/com/minelittlepony/unicopia/network/MsgSpawnProjectile.java @@ -1,6 +1,9 @@ package com.minelittlepony.unicopia.network; import java.io.IOException; +import java.util.Optional; + +import com.minelittlepony.unicopia.Owned; import net.fabricmc.fabric.api.network.PacketContext; import net.minecraft.client.world.ClientWorld; @@ -17,8 +20,9 @@ public class MsgSpawnProjectile extends EntitySpawnS2CPacket implements Channel. } catch (IOException e) { } } + @SuppressWarnings("unchecked") public MsgSpawnProjectile(Entity e) { - super(e); + super(e, Optional.of(e instanceof Owned ? ((Owned)e).getMaster() : null).map(Entity::getEntityId).orElse(0)); } @Override @@ -29,16 +33,24 @@ public class MsgSpawnProjectile extends EntitySpawnS2CPacket implements Channel. } } + @SuppressWarnings("unchecked") @Override public void handle(PacketContext context) { World world = context.getPlayer().world; Entity entity = getEntityTypeId().create(world); entity.updateTrackedPosition(getX(), getY(), getZ()); - entity.pitch = getPitch() * 360 / 256.0F; - entity.yaw = getYaw() * 360 / 256.0F; + entity.refreshPositionAfterTeleport(getX(), getY(), getZ()); + entity.setVelocity(getVelocityX(), getVelocityY(), getVelocityZ()); + entity.pitch = getPitch() * 360 / 256F; + entity.yaw = getYaw() * 360 / 256F; entity.setEntityId(getId()); entity.setUuid(getUuid()); + + if (entity instanceof Owned) { + ((Owned) entity).setMaster(world.getEntityById(this.getEntityData())); + } + ((ClientWorld)world).addEntity(getId(), entity); } } diff --git a/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java b/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java index 7d9cef80..c0245537 100644 --- a/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java @@ -1,13 +1,11 @@ package com.minelittlepony.unicopia.projectile; -import java.util.UUID; - import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Levelled; import com.minelittlepony.unicopia.ability.magic.Magical; import com.minelittlepony.unicopia.ability.magic.Spell; -import com.minelittlepony.unicopia.ability.magic.ThrowableSpell; +import com.minelittlepony.unicopia.ability.magic.Thrown; import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; import com.minelittlepony.unicopia.network.Channel; import com.minelittlepony.unicopia.network.EffectSync; @@ -20,6 +18,7 @@ import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; +import net.minecraft.entity.projectile.ProjectileEntity; import net.minecraft.entity.projectile.thrown.ThrownItemEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -29,7 +28,6 @@ import net.minecraft.network.Packet; import net.minecraft.particle.ItemStackParticleEffect; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; -import net.minecraft.server.world.ServerWorld; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.hit.HitResult; @@ -42,7 +40,7 @@ import net.minecraft.world.World; * * Can also carry a spell if needed. */ -public class MagicProjectileEntity extends ThrownItemEntity implements Magical, Projectile, Caster { +public class MagicProjectileEntity extends ThrownItemEntity implements Magical, Caster { private static final TrackedData DAMAGE = DataTracker.registerData(MagicProjectileEntity.class, TrackedDataHandlerRegistry.FLOAT); private static final TrackedData HYDROPHOBIC = DataTracker.registerData(MagicProjectileEntity.class, TrackedDataHandlerRegistry.BOOLEAN); @@ -51,23 +49,18 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Magical, private final EffectSync effectDelegate = new EffectSync(this, EFFECT); - private UUID ownerUuid; - private BlockPos lastBlockPos; public MagicProjectileEntity(EntityType type, World world) { super(type, world); } - public MagicProjectileEntity(EntityType type, World world, LivingEntity thrower) { - this(type, world, thrower.getX(), thrower.getY() + thrower.getStandingEyeHeight(), thrower.getZ()); - setOwner(thrower); - } - - public MagicProjectileEntity(EntityType type, World world, double x, double y, double z) { + public MagicProjectileEntity(EntityType type, World world, LivingEntity thrower, Vec3d velocity) { super(type, world); - - setPos(x, y, z); + refreshPositionAndAngles(thrower.getX(), thrower.getY(), thrower.getZ(), thrower.yaw, thrower.pitch); + refreshPosition(); + setVelocity(velocity); + setOwner(thrower); } @Override @@ -80,7 +73,8 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Magical, @Override protected Item getDefaultItem() { - return Items.AIR; + Spell spell = this.getSpell(false); + return spell == null ? Items.AIR : spell.getAffinity() == Affinity.BAD ? Items.MAGMA_CREAM : Items.SNOWBALL; } @Override @@ -89,17 +83,13 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Magical, } @Override - public void setOwner(LivingEntity owner) { - ownerUuid = owner == null ? null : owner.getUuid(); + public void setMaster(LivingEntity owner) { + setOwner(owner); } @Override - public LivingEntity getOwner() { - if (ownerUuid == null || !(world instanceof ServerWorld)) { - return null; - } - - return (LivingEntity) ((ServerWorld)world).getEntity(ownerUuid); + public LivingEntity getMaster() { + return (LivingEntity)getOwner(); } @Override @@ -112,16 +102,6 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Magical, return hasSpell() ? Affinity.NEUTRAL : getSpell(true).getAffinity(); } - @Override - public void setGravity(boolean gravity) { - setNoGravity(gravity); - } - - @Override - public void setEffect(ThrowableSpell effect) { - setSpell(effect); - } - @Override public EffectSync getPrimarySpellSlot() { return effectDelegate; @@ -136,22 +116,18 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Magical, } } - @Override public void setThrowDamage(float damage) { getDataTracker().set(DAMAGE, Math.max(0, damage)); } - @Override public float getThrowDamage() { return getDataTracker().get(DAMAGE); } - @Override public void setHydrophobic() { getDataTracker().set(HYDROPHOBIC, true); } - @Override public boolean getHydrophobic() { return getDataTracker().get(HYDROPHOBIC); } @@ -159,6 +135,8 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Magical, @Override public void tick() { + System.out.println(this.getPos() + " " + this.getVelocity()); + if (!world.isClient()) { if (Math.abs(getVelocity().x) < 0.01 && Math.abs(getVelocity().x) < 0.01 && Math.abs(getVelocity().y) < 0.01) { remove(); @@ -206,11 +184,6 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Magical, } } - @Override - public void launch(Entity entityThrower, float pitch, float yaw, float wobble, float velocity, float inaccuracy) { - setProperties(entityThrower, pitch, yaw, wobble, velocity, inaccuracy); - } - private ParticleEffect getParticleParameters() { ItemStack stack = getItem(); @@ -255,40 +228,37 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Magical, protected void onCollision(HitResult result) { if (!removed) { remove(); + super.onCollision(result); - if (result.getType() == HitResult.Type.BLOCK) { - onHitBlock((BlockHitResult)result); - } else if (result.getType() == HitResult.Type.ENTITY) { - onHitEntity((EntityHitResult)result); + if (!world.isClient()) { + world.sendEntityStatus(this, (byte)3); + remove(); } } } - protected void onHitBlock(BlockHitResult hit) { + @Override + protected void onBlockHit(BlockHitResult hit) { if (hasSpell()) { Spell effect = getSpell(true); - if (effect instanceof ThrowableSpell) { - ((ThrowableSpell)effect).onImpact(this, hit.getBlockPos(), world.getBlockState(hit.getBlockPos())); + if (effect instanceof Thrown) { + ((Thrown)effect).onImpact(this, hit.getBlockPos(), world.getBlockState(hit.getBlockPos())); } } } - protected void onHitEntity(EntityHitResult hit) { + @Override + protected void onEntityHit(EntityHitResult hit) { Entity entity = hit.getEntity(); - if (entity instanceof Projectile) { + if (entity instanceof ProjectileEntity) { return; } if (entity != null) { entity.damage(DamageSource.thrownProjectile(this, getOwner()), getThrowDamage()); } - - if (!world.isClient()) { - world.sendEntityStatus(this, (byte)3); - remove(); - } } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java b/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java deleted file mode 100644 index ccf09c04..00000000 --- a/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.minelittlepony.unicopia.projectile; - -import com.minelittlepony.unicopia.ability.magic.ThrowableSpell; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.projectile.ProjectileEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface Projectile { - - void setGravity(boolean gravity); - - void setItem(ItemStack stack); - - void setOwner(LivingEntity owner); - - void setEffect(ThrowableSpell effect); - - void setThrowDamage(float damage); - - float getThrowDamage(); - - void setHydrophobic(); - - boolean getHydrophobic(); - - void launch(Entity entityThrower, float pitch, float yaw, float offset, float velocity, float inaccuracy); - - default void spawn(World world) { - world.spawnEntity((Entity)this); - } - - default void launch(double x, double y, double z, float velocity, float inaccuracy) { - ((ProjectileEntity)this).setVelocity(x, y, z, velocity, inaccuracy); - } -}