Guest User

Untitled

a guest
Dec 23rd, 2014
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.76 KB | None | 0 0
  1. package ruirui.minecraft.livelyanimals.common;
  2.  
  3. import net.minecraft.client.renderer.entity.RenderPlayer;
  4. import net.minecraft.entity.Entity;
  5. import net.minecraft.entity.passive.EntityPig;
  6. import net.minecraft.entity.player.EntityPlayer;
  7. import net.minecraft.entity.player.EntityPlayerMP;
  8. import net.minecraft.util.Vec3;
  9. import net.minecraftforge.event.entity.EntityJoinWorldEvent;
  10. import net.minecraftforge.event.entity.player.EntityInteractEvent;
  11. import cpw.mods.fml.common.eventhandler.SubscribeEvent;
  12.  
  13. public class RiderHandler extends Thread {
  14.  
  15. private EntityPlayer rider;
  16. private EntityPig pig;
  17. private static final double Y_OFFSET = 0.5D;
  18.  
  19. public RiderHandler(Entity entity) {
  20. if (entity instanceof EntityPig) {
  21. this.pig = (EntityPig) entity;
  22. } else if (entity instanceof EntityPlayer) {
  23. this.rider = (EntityPlayer) entity;
  24. }
  25. }
  26.  
  27. public RiderHandler() {
  28.  
  29. }
  30.  
  31. public void run() {
  32. int findEntityTimer = 0;
  33. //System.out.println("Flag 2.");
  34.  
  35. if (pig != null) {
  36. //System.out.println("Flag 3.");
  37. while (rider == null) {
  38. this.rider = (EntityPlayer) pig.riddenByEntity;
  39. System.out.println("CheckRiderThread: Setting riddenByEntity...");
  40. try {
  41. sleep(100);
  42. } catch (InterruptedException e) {
  43. // TODO Auto-generated catch block
  44. e.printStackTrace();
  45. }
  46.  
  47. findEntityTimer++;
  48. if (findEntityTimer >= 10) {
  49. System.out.println("Could not find rider within alloted time. Stopping...");
  50. break;
  51. }
  52. }
  53.  
  54. if (pig != null && pig.riddenByEntity != null) {
  55. System.out.println("CheckRiderThread: riddenByEntity set.");
  56. }
  57.  
  58. } else if (rider != null) {
  59. while (pig == null) {
  60. if (rider.ridingEntity != null && rider.ridingEntity instanceof EntityPig) {
  61. this.pig = (EntityPig) rider.ridingEntity;
  62. }
  63.  
  64. System.out.println("CheckRiderThread: Setting ridingEntity...");
  65. try {
  66. sleep(100);
  67. } catch (InterruptedException e) {
  68. // TODO Auto-generated catch block
  69. e.printStackTrace();
  70. }
  71.  
  72. findEntityTimer++;
  73. if (findEntityTimer >= 10) {
  74. System.out.println("Could not find mount within alloted time. Stopping...");
  75. break;
  76. }
  77. }
  78.  
  79. if (rider != null && rider.ridingEntity != null) {
  80. System.out.println("CheckRiderThread: ridingEntity set.");
  81. }
  82. }
  83.  
  84. if (rider != null && pig != null) {
  85. System.out.println("CheckRiderThread: A player is riding a pig!");
  86. //System.out.println("Rider coordinates: (" + rider.posX + ", " + rider.posY + ", " + rider.posZ + ")");
  87. while (rider.isRiding() && !rider.isSneaking()) {
  88. adjustRiderPosition(rider);
  89.  
  90. try {
  91. sleep(1);
  92. } catch (InterruptedException e) {
  93. // TODO Auto-generated catch block
  94. e.printStackTrace();
  95. }
  96. }
  97. }
  98. }
  99.  
  100. @SubscribeEvent
  101. public void checkForMount(EntityJoinWorldEvent event) {
  102. if (event.entity instanceof EntityPlayer) {
  103. rider = (EntityPlayer) event.entity;
  104.  
  105. new RiderHandler(rider).start();
  106. }
  107. }
  108.  
  109. @SubscribeEvent
  110. public void checkForRider(EntityInteractEvent event) {
  111. if (event.target instanceof EntityPig) {
  112. pig = (EntityPig) event.target;
  113. //System.out.println("Flag 1.");
  114.  
  115. if (pig.getSaddled()) {
  116. new RiderHandler(pig).start();
  117. }
  118. }
  119. }
  120.  
  121. public void adjustRiderPosition(EntityPlayer rider) {
  122. double px = pig.posX;
  123. double py = pig.posY + Y_OFFSET;
  124. double pz = pig.posZ;
  125.  
  126. Vec3 pos = Vec3.createVectorHelper(0, 0, 0.2);
  127. pos.rotateAroundY((float) Math.toRadians(-pig.renderYawOffset));
  128.  
  129. px -= pos.xCoord;
  130. py -= pos.yCoord;
  131. pz -= pos.zCoord;
  132.  
  133. if (rider.ridingEntity != null) {
  134. rider.setLocationAndAngles(px, py, pz, rider.rotationYaw, rider.rotationPitch);
  135. }
  136. }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment