diff --git a/src/main/java/info/ata4/minecraft/dragon/server/CommonProxy.java b/src/main/java/info/ata4/minecraft/dragon/server/CommonProxy.java index eb367514..7185e876 100644 --- a/src/main/java/info/ata4/minecraft/dragon/server/CommonProxy.java +++ b/src/main/java/info/ata4/minecraft/dragon/server/CommonProxy.java @@ -14,6 +14,7 @@ import info.ata4.minecraft.dragon.server.cmd.CommandDragon; import info.ata4.minecraft.dragon.server.entity.EntityTameableDragon; import info.ata4.minecraft.dragon.server.handler.DragonEggBlockHandler; +import info.ata4.minecraft.dragon.server.handler.DragonMountsMountHandler; import info.ata4.minecraft.dragon.server.item.ItemDragonBreedEgg; import net.minecraft.command.ServerCommandManager; import net.minecraft.server.MinecraftServer; @@ -47,6 +48,7 @@ public void onInit(FMLInitializationEvent evt) { registerEntities(); MinecraftForge.EVENT_BUS.register(new DragonEggBlockHandler()); + MinecraftForge.EVENT_BUS.register(new DragonMountsMountHandler()); } public void onPostInit(FMLPostInitializationEvent event) { diff --git a/src/main/java/info/ata4/minecraft/dragon/server/entity/ai/EntityAIDragonRide.java b/src/main/java/info/ata4/minecraft/dragon/server/entity/ai/EntityAIDragonRide.java index d875e0a4..4d1a0aed 100644 --- a/src/main/java/info/ata4/minecraft/dragon/server/entity/ai/EntityAIDragonRide.java +++ b/src/main/java/info/ata4/minecraft/dragon/server/entity/ai/EntityAIDragonRide.java @@ -46,17 +46,32 @@ public void updateTask() { double y = dragon.posY; double z = dragon.posZ; + boolean isMovingUpwards = entityIsJumping(rider); + boolean isMovingDownwards = rider.isSneaking(); + // control direction with movement keys - if (rider.moveStrafing != 0 || rider.moveForward != 0) { - Vec3d wp = rider.getLookVec(); + if (rider.moveStrafing != 0 || rider.moveForward != 0 || isMovingUpwards || isMovingDownwards ) { + Vec3d front = rider.getLookVec(); + + Vec3d wp = Vec3d.ZERO; - if (rider.moveForward < 0) { - wp = wp.rotateYaw(MathX.PI_F); - } else if (rider.moveStrafing > 0) { - wp = wp.rotateYaw(MathX.PI_F * 0.5f); - } else if (rider.moveStrafing < 0) { - wp = wp.rotateYaw(MathX.PI_F * -0.5f); + if (rider.moveForward > 0 ) { + wp = front; + } + else if (rider.moveForward < 0) { + wp = wp.add(front.rotateYaw(MathX.PI_F)); + } + if (rider.moveStrafing > 0) { + wp = wp.add(front.rotateYaw(MathX.PI_F * 0.5f)); + } + else if (rider.moveStrafing < 0) { + wp = wp.add(front.rotateYaw(MathX.PI_F * -0.5f)); } + if( isMovingUpwards ) + wp = wp.addVector(0, 1, 0); + if( isMovingDownwards ) + wp = wp.addVector(0, -1, 0); + wp = wp.normalize(); x += wp.xCoord * 10; y += wp.yCoord * 10; @@ -65,7 +80,7 @@ public void updateTask() { // lift off with a jump if (!dragon.isFlying()) { - if (entityIsJumping(rider)) { + if (isMovingUpwards) { dragon.liftOff(); } } diff --git a/src/main/java/info/ata4/minecraft/dragon/server/handler/DragonMountsMountHandler.java b/src/main/java/info/ata4/minecraft/dragon/server/handler/DragonMountsMountHandler.java new file mode 100644 index 00000000..f30179d8 --- /dev/null +++ b/src/main/java/info/ata4/minecraft/dragon/server/handler/DragonMountsMountHandler.java @@ -0,0 +1,24 @@ +package info.ata4.minecraft.dragon.server.handler; + +import info.ata4.minecraft.dragon.server.entity.EntityTameableDragon; +import net.minecraft.entity.Entity; +import net.minecraftforge.event.entity.EntityMountEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class DragonMountsMountHandler { + + @SubscribeEvent + public void canMountEvent( EntityMountEvent event ) { + if( event.isDismounting() ) { + if( event.getWorldObj().isRemote ) + return; + Entity ent = event.getEntityBeingMounted(); + if( ent instanceof EntityTameableDragon ) { + EntityTameableDragon dragon = (EntityTameableDragon)ent; + if( !dragon.onGround ) { + event.setCanceled(true); + } + } + } + } +}