Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. public class ReplacePlayerControllerMPHandler
  2. {
  3. @SubscribeEvent
  4. public void worldLoadEvent(WorldEvent.Load event) {
  5. if (event.world instanceof WorldClient) {
  6. Minecraft mc = Minecraft.getMinecraft();
  7. PlayerControllerMP playerControllerMP = mc.playerController;
  8. if (!(playerControllerMP instanceof PlayerControllerMPHijack)) {
  9. mc.playerController = PlayerControllerMPHijack.createFromVanilla(playerControllerMP);
  10. }
  11. }
  12. }
  13. }
  14.  
  15. /**
  16. * Hijack various parts of PlayerControllerMP to extend the block reach distance
  17. */
  18. @SideOnly(Side.CLIENT)
  19. public class PlayerControllerMPHijack extends PlayerControllerMP {
  20. private static Method syncCurrentPlayItemMethod;
  21.  
  22. public static PlayerControllerMPHijack createFromVanilla(PlayerControllerMP playerControllerMP)
  23. {
  24. NetHandlerPlayClient netHandlerPlayClient = ReflectionHelper.getPrivateValue
  25. (PlayerControllerMP.class, playerControllerMP, "netClientHandler", "field_78774_b");
  26.  
  27. PlayerControllerMPHijack retObj = new PlayerControllerMPHijack(Minecraft.getMinecraft(), netHandlerPlayClient);
  28.  
  29. WorldSettings.GameType gameType = ReflectionHelper.getPrivateValue(PlayerControllerMP.class, playerControllerMP,
  30. "currentGameType", "field_78779_k");
  31.  
  32. ReflectionHelper.setPrivateValue(PlayerControllerMP.class, retObj, gameType, "currentGameType", "field_78779_k");
  33. syncCurrentPlayItemMethod = UsefulFunctions.findMethod(PlayerControllerMP.class,
  34. new String [] {"syncCurrentPlayItem", "func_78750_j"},
  35. new Class [] {});
  36. return retObj;
  37. }
  38.  
  39. private PlayerControllerMPHijack(Minecraft mcIn, NetHandlerPlayClient netHandlerPlayClient)
  40. {
  41. super(mcIn, netHandlerPlayClient);
  42. }
  43.  
  44. @Override
  45. public float getBlockReachDistance()
  46. {
  47. EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
  48. if (player == null) return super.getBlockReachDistance();
  49. ItemStack heldItem = player.getHeldItem();
  50. if (heldItem != null && heldItem.getItem() instanceof ItemStick) {
  51. ItemStick itemStick = (ItemStick)heldItem.getItem();
  52. return itemStick.getReachDistance(heldItem, super.getBlockReachDistance());
  53. } else {
  54. return super.getBlockReachDistance();
  55. }
  56. }
  57.  
  58. // copied from base class
  59. @Override
  60. public void attackEntity(EntityPlayer playerIn, Entity targetEntity)
  61. {
  62. try {
  63. syncCurrentPlayItemMethod.invoke(this);
  64. } catch (Exception e) {
  65. throw new RuntimeException("Could not invoke syncCurrentPlayItem()", e);
  66. }
  67. // this.syncCurrentPlayItem();
  68. AttackMessageToServer attackMessageToServer = new AttackMessageToServer(targetEntity);
  69. StartupCommon.simpleNetworkWrapper.sendToServer(attackMessageToServer);
  70. if (getCurrentGameType() != WorldSettings.GameType.SPECTATOR)
  71. {
  72. playerIn.attackTargetEntityWithCurrentItem(targetEntity);
  73. }
  74. }
  75. }
  76.  
  77.  
  78. public class StartupClientOnly
  79. {
  80. public static void preInitClientOnly()
  81. {
  82. MinecraftForge.EVENT_BUS.register(new ReplacePlayerControllerMPHandler());
  83. }
  84.  
  85. public static void initClientOnly()
  86. {
  87. }
  88.  
  89. public static void postInitClientOnly()
  90. {
  91. }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement