Hooks.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package me.kcm.events;
  2. import java.lang.reflect.Field;
  3. import me.kcm.command.ModServerCommandManager;
  4. import net.minecraft.block.Block;
  5. import net.minecraft.entity.Entity;
  6. import net.minecraft.entity.player.EntityPlayer;
  7. import net.minecraft.entity.player.EntityPlayerMP;
  8. import net.minecraft.inventory.Container;
  9. import net.minecraft.inventory.ContainerPlayer;
  10. import net.minecraft.inventory.ContainerWorkbench;
  11. import net.minecraft.inventory.InventoryCrafting;
  12. import net.minecraft.item.crafting.CraftingManager;
  13. import net.minecraft.item.crafting.IRecipe;
  14. import net.minecraft.server.MinecraftServer;
  15. import net.minecraft.util.math.BlockPos;
  16. import net.minecraft.util.text.ITextComponent;
  17. import net.minecraft.world.World;
  18. import net.minecraftforge.common.MinecraftForge;
  19. import net.minecraftforge.fml.relauncher.ReflectionHelper;
  20. public class Hooks
  21. {
  22. /*public static void onDamageCalculation(EntityLivingBase liv, DamageSource ds, float damage)
  23. {
  24. if(!liv.isEntityInvulnerable(ds))
  25. {
  26. MinecraftForge.EVENT_BUS.post(new LivingDamageCalculationEvent(liv, ds, damage));
  27. }
  28. }*/
  29. public static ITextComponent onGetTabListDisplayName(EntityPlayerMP p)
  30. {
  31. PlayerTabListNameEvent e = new PlayerTabListNameEvent(p);
  32. MinecraftForge.EVENT_BUS.post(e);
  33. return e.getName();
  34. }
  35. public static void onSetEntityActionState(EntityPlayerMP p, float strafe, float forward, boolean jumping, boolean sneaking)
  36. {
  37. System.out.println("WUSI");
  38. }
  39. public static boolean onEntityCanTrample(Entity ent, World w, Block b, BlockPos pos, float fallDistance)
  40. {
  41. return !MinecraftForge.EVENT_BUS.post(new FarmlandTrampleEvent(w, pos, w.getBlockState(pos), fallDistance, ent));
  42. }
  43. public static void onPlayerConnection(EntityPlayerMP p)
  44. {
  45. MinecraftForge.EVENT_BUS.post(new PlayerConnectionEvent(p));
  46. }
  47. public static void onPlayerPreRespawn(EntityPlayerMP p, int dimension, boolean conqueredEnd)
  48. {
  49. MinecraftForge.EVENT_BUS.post(new PlayerPreRespawnEvent(p));
  50. }
  51. public static ModServerCommandManager onCreateCommandManager(MinecraftServer server)
  52. {
  53. return new ModServerCommandManager(server);
  54. }
  55. public static IRecipe onfindMatchingRecipe(InventoryCrafting craftMatrix, World w)
  56. {
  57. for(IRecipe irecipe : CraftingManager.REGISTRY)
  58. {
  59. if(irecipe.matches(craftMatrix, w))
  60. {
  61. Container c = getContainerEventHandler(craftMatrix);
  62. EntityPlayer p;
  63. if(c == null)
  64. {
  65. return null;
  66. }
  67. else if(c instanceof ContainerPlayer)
  68. {
  69. p = getContainerPlayer((ContainerPlayer) c);
  70. }
  71. else if(c instanceof ContainerWorkbench)
  72. {
  73. p = getContainerEventHandler((ContainerWorkbench) c);
  74. }
  75. else
  76. {
  77. return null;
  78. }
  79. System.out.println(p);
  80. RecipeChosenEvent e = new RecipeChosenEvent(p, irecipe);
  81. if(MinecraftForge.EVENT_BUS.post(e))
  82. {
  83. return null;
  84. }
  85. return e.getRecipe();
  86. }
  87. }
  88. return null;
  89. }
  90. private static Field getField(Class c, String... field)
  91. {
  92. try
  93. {
  94. return ReflectionHelper.findField(c, field);
  95. }
  96. catch(SecurityException | ReflectionHelper.UnableToFindFieldException ex)
  97. {
  98. System.out.println(String.join(", ", field) + " - " + ex);
  99. }
  100. return null;
  101. }
  102. private static <T> T getFieldValue(Class<T> cast, Object o, Field f)
  103. {
  104. try
  105. {
  106. return (T) f.get(o);
  107. }
  108. catch(SecurityException | IllegalAccessException | IllegalArgumentException ex)
  109. {
  110. System.out.println(f + " - " + ex);
  111. return null;
  112. }
  113. }
  114. private final static Field CONTAINER_EVENT_HANDLER = getField(InventoryCrafting.class, "field_70465_c", "eventHandler");
  115. public static Container getContainerEventHandler(InventoryCrafting craftMatrix)
  116. {
  117. return getFieldValue(Container.class, craftMatrix, CONTAINER_EVENT_HANDLER);
  118. }
  119. private final static Field CONTAINER_PLAYER = getField(ContainerPlayer.class, "field_82862_h", "player");
  120. public static EntityPlayer getContainerPlayer(ContainerPlayer cp)
  121. {
  122. return getFieldValue(EntityPlayer.class, cp, CONTAINER_PLAYER);
  123. }
  124. private final static Field CONTAINER_WORKBENCH = getField(ContainerWorkbench.class, "field_192390_i", "player");
  125. public static EntityPlayer getContainerEventHandler(ContainerWorkbench cw)
  126. {
  127. return getFieldValue(EntityPlayer.class, cw, CONTAINER_WORKBENCH);
  128. }
  129. }