diff --git a/src/main/java/com/minelittlepony/unicopia/Unicopia.java b/src/main/java/com/minelittlepony/unicopia/Unicopia.java index 8f77850f..bdb8468c 100644 --- a/src/main/java/com/minelittlepony/unicopia/Unicopia.java +++ b/src/main/java/com/minelittlepony/unicopia/Unicopia.java @@ -69,20 +69,11 @@ public class Unicopia { channel.send(new MsgRequestCapabilities(Minecraft.getMinecraft().player), Target.SERVER); }) // client ------> server - .consume(MsgRequestCapabilities.class, (msg, channel) -> { - - }) - + .consume(MsgRequestCapabilities.class) // client <------ server - .consume(MsgPlayerCapabilities.class, (msg, channel) -> { - System.out.println("[CLIENT] Got capabilities for player I am " - + Minecraft.getMinecraft().player.getGameProfile().getId()); - }) - + .consume(MsgPlayerCapabilities.class) // client ------> server - .consume(MsgPlayerAbility.class, (msg, channel) -> { - - }); + .consume(MsgPlayerAbility.class); MAGIC_PARTICLE = Particles.instance().registerParticle(new EntityMagicFX.Factory()); RAIN_PARTICLE = Particles.instance().registerParticle(new EntityRaindropFX.Factory()); @@ -125,9 +116,9 @@ public class Unicopia { @SubscribeEvent public static void onPlayerTick(TickEvent.PlayerTickEvent event) { if (event.phase == Phase.END) { - PlayerSpeciesList.instance() - .getPlayer(event.player) - .onUpdate(event.player); + PlayerSpeciesList.instance().getPlayer(event.player).onUpdate(event.player); + } else { + PlayerSpeciesList.instance().getPlayer(event.player).beforeUpdate(event.player); } } diff --git a/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java b/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java index 4ecd144d..2f1b0b9d 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java +++ b/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java @@ -57,9 +57,22 @@ public class MsgPlayerCapabilities implements IMessage, IMessageHandler 0) { try (ByteArrayInputStream input = new ByteArrayInputStream(compoundTag)) { diff --git a/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java b/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java index efce84a1..389976fa 100644 --- a/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java +++ b/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java @@ -32,6 +32,8 @@ public interface IPlayer extends ICaster, IRaceContainer { Minecraft.getMinecraft().player.getGameProfile().getId().equals(getOwner().getGameProfile().getId()); } + @Override + public void beforeUpdate(EntityPlayer entity) { + if (entity.world.isRemote) { + if (entity.isRiding() && entity.isSneaking()) { + + Entity ridee = entity.getRidingEntity(); + + entity.dismountRidingEntity(); + + if (ridee instanceof EntityPlayerMP) { + ((EntityPlayerMP)ridee).getServerWorld().getEntityTracker().sendToTrackingAndSelf(ridee, new SPacketSetPassengers(ridee)); + } + } + } + } + @Override public void onUpdate(EntityPlayer entity) { powers.onUpdate(entity); diff --git a/src/main/java/com/minelittlepony/unicopia/power/PowerCarry.java b/src/main/java/com/minelittlepony/unicopia/power/PowerCarry.java new file mode 100644 index 00000000..ed583015 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/power/PowerCarry.java @@ -0,0 +1,86 @@ +package com.minelittlepony.unicopia.power; + +import org.lwjgl.input.Keyboard; + +import com.minelittlepony.unicopia.Race; +import com.minelittlepony.unicopia.player.IPlayer; +import com.minelittlepony.unicopia.power.data.Hit; +import com.minelittlepony.util.vector.VecHelper; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.play.server.SPacketSetPassengers; +import net.minecraft.world.World; + +public class PowerCarry implements IPower { + + @Override + public String getKeyName() { + return "unicopia.power.carry"; + } + + @Override + public int getKeyCode() { + return Keyboard.KEY_K; + } + + @Override + public int getWarmupTime(IPlayer player) { + return 0; + } + + @Override + public int getCooldownTime(IPlayer player) { + return 10; + } + + @Override + public boolean canUse(Race playerSpecies) { + return playerSpecies.canFly(); + } + + @Override + public Hit tryActivate(EntityPlayer player, World w) { + return new Hit(); + } + + protected EntityLivingBase findRider(EntityPlayer player, World w) { + Entity hit = VecHelper.getLookedAtEntity(player, 10); + + if (hit instanceof EntityLivingBase && !player.isRidingOrBeingRiddenBy(hit)) { + return (EntityLivingBase)hit; + } + + return null; + } + + @Override + public Class getPackageType() { + return Hit.class; + } + + @Override + public void apply(EntityPlayer player, Hit data) { + EntityLivingBase rider = findRider(player, player.world); + + if (rider != null) { + rider.startRiding(player, true); + } else { + player.removePassengers(); + } + + if (player instanceof EntityPlayerMP) { + ((EntityPlayerMP)player).getServerWorld().getEntityTracker().sendToTrackingAndSelf(player, new SPacketSetPassengers(player)); + } + } + + @Override + public void preApply(IPlayer player) { + } + + @Override + public void postApply(IPlayer player) { + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/power/PowerMagic.java b/src/main/java/com/minelittlepony/unicopia/power/PowerMagic.java index 6e3161b6..b08571f9 100644 --- a/src/main/java/com/minelittlepony/unicopia/power/PowerMagic.java +++ b/src/main/java/com/minelittlepony/unicopia/power/PowerMagic.java @@ -25,10 +25,6 @@ public class PowerMagic implements IPower { @Override public int getWarmupTime(IPlayer player) { - // if (player.hasEffect() && "shield".contentEquals(player.getEffect().getName())) { - // return 0; - // } - return 20; } diff --git a/src/main/java/com/minelittlepony/unicopia/power/PowerTeleport.java b/src/main/java/com/minelittlepony/unicopia/power/PowerTeleport.java index b5339879..61903514 100644 --- a/src/main/java/com/minelittlepony/unicopia/power/PowerTeleport.java +++ b/src/main/java/com/minelittlepony/unicopia/power/PowerTeleport.java @@ -13,8 +13,11 @@ import net.minecraft.block.BlockFence; import net.minecraft.block.BlockLeaves; import net.minecraft.block.BlockWall; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.SoundEvents; +import net.minecraft.network.play.server.SPacketSetPassengers; import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; @@ -110,7 +113,16 @@ public class PowerTeleport implements IPower { player.world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 1, 1); double distance = player.getDistance(data.x, data.y, data.z) / 10; - player.dismountRidingEntity(); + + if (player.isRiding()) { + Entity mount = player.getRidingEntity(); + + player.dismountRidingEntity(); + + if (mount instanceof EntityPlayerMP) { + ((EntityPlayerMP)player).getServerWorld().getEntityTracker().sendToTrackingAndSelf(player, new SPacketSetPassengers(mount)); + } + } player.setPositionAndUpdate(data.x + (player.posX - Math.floor(player.posX)), data.y, data.z + (player.posZ - Math.floor(player.posZ))); IPower.takeFromPlayer(player, distance); diff --git a/src/main/java/com/minelittlepony/unicopia/power/PowersRegistry.java b/src/main/java/com/minelittlepony/unicopia/power/PowersRegistry.java index 324e2596..2b2e1be5 100644 --- a/src/main/java/com/minelittlepony/unicopia/power/PowersRegistry.java +++ b/src/main/java/com/minelittlepony/unicopia/power/PowersRegistry.java @@ -30,6 +30,7 @@ public class PowersRegistry { registerPower(new PowerStomp()); registerPower(new PowerGrow()); registerPower(new PowerFeed()); + registerPower(new PowerCarry()); } public boolean hasRegisteredPower(int keyCode) { diff --git a/src/main/resources/assets/unicopia/lang/en_US.lang b/src/main/resources/assets/unicopia/lang/en_US.lang index 6ba7a680..689b0236 100644 --- a/src/main/resources/assets/unicopia/lang/en_US.lang +++ b/src/main/resources/assets/unicopia/lang/en_US.lang @@ -103,6 +103,7 @@ unicopia.power.magic=Secondary Unicorn ability unicopia.power.rain=Primary Pegasus ability unicopia.power.thunder=Secondary Pegasus ability +unicopia.power.carry=Pick up & Drop riders unicopia.power.feed=Primary Changeling ability unicopia.power.disguise=Secondary Changeling ability