Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ruirui.minecraft.livelyanimals.common;
- import net.minecraft.client.renderer.entity.RenderPlayer;
- import net.minecraft.entity.Entity;
- import net.minecraft.entity.passive.EntityPig;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.entity.player.EntityPlayerMP;
- import net.minecraft.util.Vec3;
- import net.minecraftforge.event.entity.EntityJoinWorldEvent;
- import net.minecraftforge.event.entity.player.EntityInteractEvent;
- import cpw.mods.fml.common.eventhandler.SubscribeEvent;
- public class RiderHandler extends Thread {
- private EntityPlayer rider;
- private EntityPig pig;
- private static final double Y_OFFSET = 0.5D;
- public RiderHandler(Entity entity) {
- if (entity instanceof EntityPig) {
- this.pig = (EntityPig) entity;
- } else if (entity instanceof EntityPlayer) {
- this.rider = (EntityPlayer) entity;
- }
- }
- public RiderHandler() {
- }
- public void run() {
- int findEntityTimer = 0;
- //System.out.println("Flag 2.");
- if (pig != null) {
- //System.out.println("Flag 3.");
- while (rider == null) {
- this.rider = (EntityPlayer) pig.riddenByEntity;
- System.out.println("CheckRiderThread: Setting riddenByEntity...");
- try {
- sleep(100);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- findEntityTimer++;
- if (findEntityTimer >= 10) {
- System.out.println("Could not find rider within alloted time. Stopping...");
- break;
- }
- }
- if (pig != null && pig.riddenByEntity != null) {
- System.out.println("CheckRiderThread: riddenByEntity set.");
- }
- } else if (rider != null) {
- while (pig == null) {
- if (rider.ridingEntity != null && rider.ridingEntity instanceof EntityPig) {
- this.pig = (EntityPig) rider.ridingEntity;
- }
- System.out.println("CheckRiderThread: Setting ridingEntity...");
- try {
- sleep(100);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- findEntityTimer++;
- if (findEntityTimer >= 10) {
- System.out.println("Could not find mount within alloted time. Stopping...");
- break;
- }
- }
- if (rider != null && rider.ridingEntity != null) {
- System.out.println("CheckRiderThread: ridingEntity set.");
- }
- }
- if (rider != null && pig != null) {
- System.out.println("CheckRiderThread: A player is riding a pig!");
- //System.out.println("Rider coordinates: (" + rider.posX + ", " + rider.posY + ", " + rider.posZ + ")");
- while (rider.isRiding() && !rider.isSneaking()) {
- adjustRiderPosition(rider);
- try {
- sleep(1);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
- @SubscribeEvent
- public void checkForMount(EntityJoinWorldEvent event) {
- if (event.entity instanceof EntityPlayer) {
- rider = (EntityPlayer) event.entity;
- new RiderHandler(rider).start();
- }
- }
- @SubscribeEvent
- public void checkForRider(EntityInteractEvent event) {
- if (event.target instanceof EntityPig) {
- pig = (EntityPig) event.target;
- //System.out.println("Flag 1.");
- if (pig.getSaddled()) {
- new RiderHandler(pig).start();
- }
- }
- }
- public void adjustRiderPosition(EntityPlayer rider) {
- double px = pig.posX;
- double py = pig.posY + Y_OFFSET;
- double pz = pig.posZ;
- Vec3 pos = Vec3.createVectorHelper(0, 0, 0.2);
- pos.rotateAroundY((float) Math.toRadians(-pig.renderYawOffset));
- px -= pos.xCoord;
- py -= pos.yCoord;
- pz -= pos.zCoord;
- if (rider.ridingEntity != null) {
- rider.setLocationAndAngles(px, py, pz, rider.rotationYaw, rider.rotationPitch);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment