Advertisement
Guest User

functions.h

a guest
Feb 16th, 2021
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.90 KB | None | 0 0
  1. #pragma once
  2. #include <Windows.h>
  3. #include <jni.h>
  4. #include <iostream>
  5. #include <string>
  6. #include <thread>
  7. #include "pch.h"
  8. jobject mc;
  9. jobject thePlayer;
  10. jobject theWorld;
  11. jobject renderViewEntity;
  12. jobject pointedEntity;
  13. jobject boundingBox;
  14. jobject hitVec;
  15. jobject ridingEntity;
  16.  
  17. jdouble xCoord;
  18. jdouble yCoord;
  19. jdouble zCoord;
  20.  
  21. jfieldID thePlayerf;
  22. jfieldID renderViewEntityf;
  23. jfieldID pointedEntityf;
  24. jfieldID objectMouseOverf;
  25. jfieldID boundingBoxf;
  26. jfieldID hitVecf;
  27. jfieldID ridingEntityf;
  28. jfieldID xCoordf;
  29. jfieldID yCoordf;
  30. jfieldID zCoordf;
  31. jfieldID renderPartialTicksf;
  32. jfieldID timerf;
  33. jfieldID playerControllerf;
  34. jfieldID entityHitf;
  35.  
  36. jmethodID rayTracef;
  37. jmethodID getPositionf;
  38. jmethodID getLookf;
  39. jmethodID addVectorf;
  40. jmethodID getEntitiesWithinAABBExcludingEntityf;
  41. jmethodID sizef;
  42. jmethodID getf;
  43. jmethodID canBeCollidedWithf;
  44. jmethodID getCollisionBorderSizef;
  45. jmethodID expandf;
  46. jmethodID calculateInterceptf;
  47. jmethodID isVecInsidef;
  48. jmethodID distanceTof;
  49. jmethodID addCoordf;
  50. jmethodID attackEntityf;
  51. jmethodID movingObjectPositionc;
  52. jmethodID isUsingItemf;
  53.  
  54. jclass world;
  55. jclass Vec3;
  56. jclass entityLivingBaseClass;
  57. jclass Entity;
  58. jclass List;
  59. jclass AxisAlignedBB;
  60. jclass MovingObjectPosition;
  61. jclass EntityRenderer;
  62. jclass PlayerControllerMP;
  63. jclass Timer;
  64. jclass EntityPlayer;
  65.  
  66. jobject getClassLoader(JNIEnv* env)
  67. {
  68.     jclass launch = env->FindClass("net/minecraft/launchwrapper/Launch");
  69.     std::cout << launch << std::endl;
  70.     jfieldID sfid = env->GetStaticFieldID(launch, "classLoader", "Lnet/minecraft/launchwrapper/LaunchClassLoader;");
  71.     std::cout << sfid << std::endl;
  72.     jobject classLoader = env->GetStaticObjectField(launch, sfid);
  73.     std::cout << classLoader << std::endl;
  74.  
  75.     return classLoader;
  76. }
  77.  
  78. jclass getObject(JNIEnv* env, const char* className)
  79. {
  80.     jstring name = env->NewStringUTF(className);
  81.     jobject classLoader = getClassLoader(env);
  82.     jmethodID mid = env->GetMethodID(env->GetObjectClass(classLoader), "findClass", "(Ljava/lang/String;)Ljava/lang/Class;");
  83.     return (jclass)env->CallObjectMethod(classLoader, mid, name);
  84.     env->DeleteLocalRef(name);
  85.  
  86. }
  87.  
  88. jobject getMC(JNIEnv* env)
  89. {
  90.     jclass mcClass = getObject(env, "net.minecraft.client.Minecraft");
  91.     std::cout << "MCClass: " << mcClass << std::endl;
  92.     jmethodID smid = env->GetStaticMethodID(mcClass, "func_71410_x", "()Lnet/minecraft/client/Minecraft;");
  93.     std::cout << "SMID: " << smid << std::endl;
  94.     return env->CallStaticObjectMethod(mcClass, smid);
  95. }
  96.  
  97. int getDH(JNIEnv* env)
  98. {
  99.     std::cout << "Minecraft instance: " << std::endl;
  100.     jfieldID fid = env->GetFieldID(env->GetObjectClass(mc), "field_71440_d", "I");
  101.     return env->GetIntField(mc, fid);
  102. }
  103.  
  104. jobject getPlayer(JNIEnv* env)
  105. {
  106.     thePlayerf = env->GetFieldID(env->GetObjectClass(mc), "field_71439_g", "Lnet/minecraft/client/entity/EntityClientPlayerMP;");
  107.     return env->GetObjectField(mc, thePlayerf);
  108. }
  109.  
  110. jobject getWorld(JNIEnv* env)
  111. {
  112.     jfieldID fid = env->GetFieldID(env->GetObjectClass(mc), "field_71441_e", "Lnet/minecraft/client/multiplayer/WorldClient;");
  113.     return env->GetObjectField(mc, fid);
  114. }
  115.  
  116. void getMouseOver(float p_78473_1_, JNIEnv* env, double reach)
  117. {
  118.     if (renderViewEntity != NULL)
  119.     {
  120.         if (theWorld != NULL)
  121.         {
  122.             //double var2 = (double)this.mc.playerController.getBlockReachDistance();
  123.             double var2 = reach;
  124.             //objectMouseOver = renderViewEntity.rayTrace(var2, p_78473_1_);
  125.             ////env->SetObjectField(mc, objectMouseOverf, env->CallObjectMethod(renderViewEntity, rayTracef, var2, p_78473_1_));
  126.             double var4 = var2;
  127.             //Vec3 var6 = this.mc.renderViewEntity.getPosition(p_78473_1_);
  128.             jobject var6 = env->CallObjectMethod(renderViewEntity, getPositionf, p_78473_1_);
  129.             /*if (this.mc.playerController.extendedReach()) creative check, don't need it
  130.             {
  131.                 var2 = 6.0D;
  132.                 var4 = 6.0D;
  133.             }*/
  134.  
  135.  
  136.             //Vec3 var7 = this.mc.renderViewEntity.getLook(p_78473_1_);
  137.             jobject var7 = env->CallObjectMethod(renderViewEntity, getLookf, p_78473_1_);
  138.             xCoord = env->GetDoubleField(var7, xCoordf);
  139.             yCoord = env->GetDoubleField(var7, yCoordf);
  140.             zCoord = env->GetDoubleField(var7, zCoordf);
  141.             //Vec3 var8 = var6.addVector(var7.xCoord * var2, var7.yCoord * var2, var7.zCoord * var2);
  142.             jobject var8 = env->CallObjectMethod(var6, addVectorf, xCoord * var2, yCoord * var2, zCoord * var2);
  143.             //this.pointedEntity = NULL;
  144.             env->SetObjectField(EntityRenderer, pointedEntityf, NULL);
  145.             jobject var9 = NULL;
  146.             float var10 = 1.0F;
  147.             boundingBox = env->GetObjectField(renderViewEntity, boundingBoxf);
  148.             //List var11 = this.mc.theWorld.getEntitiesWithinAABBExcludingEntity(this.mc.renderViewEntity, this.mc.renderViewEntity.boundingBox.addCoord(var7.xCoord * var2, var7.yCoord * var2, var7.zCoord * var2).expand((double)var10, (double)var10, (double)var10));
  149.             jobject var11 = env->CallObjectMethod(theWorld, getEntitiesWithinAABBExcludingEntityf, renderViewEntity, env->CallObjectMethod(env->CallObjectMethod(boundingBox, addCoordf, xCoord * var2, yCoord * var2, zCoord * var2), expandf, (double)var10, (double)var10, (double)var10));
  150.             double var12 = var4;
  151.             //for (int var14 = 0; var14 < var11.size(); ++var14)
  152.             for (int var14 = 0; var14 < env->CallIntMethod(var11, sizef); ++var14)
  153.             {
  154.                 //Entity var15 = (Entity)var11.get(var14);
  155.                 jobject var15 = env->CallObjectMethod(var11, getf, var14);
  156.  
  157.                 //if (var15.canBeCollidedWith())
  158.                 if (env->CallBooleanMethod(var15, canBeCollidedWithf))
  159.                 {
  160.                     //float var16 = var15.getCollisionBorderSize();
  161.                     float var16 = env->CallFloatMethod(var15, getCollisionBorderSizef);
  162.                     //AxisAlignedBB var17 = var15.boundingBox.expand((double)var16, (double)var16, (double)var16);
  163.                     jobject var17 = env->CallObjectMethod(env->GetObjectField(var15, boundingBoxf), expandf, (double)var16, (double)var16, (double)var16);
  164.                     //MovingObjectPosition var18 = var17.calculateIntercept(var6, var8);
  165.                     jobject var18 = env->CallObjectMethod(var17, calculateInterceptf, var6, var8);
  166.                     if (var18 != NULL)
  167.                         hitVec = env->GetObjectField(var18, hitVecf);
  168.                     //if (var17.isVecInside(var6))
  169.                     if (env->CallBooleanMethod(var17, isVecInsidef, var6))
  170.                     {
  171.                         if (0.0 < var12 || var12 == 0.0)
  172.                         {
  173.                             //this.pointedEntity = var15;
  174.                             env->SetObjectField(EntityRenderer, pointedEntityf, var15);
  175.                             //var9 = var18 == null ? var6 : var18.hitVec;
  176.                             var9 = var18 == NULL ? var6 : hitVec;
  177.                             var12 = 0.0;
  178.                         }
  179.                     }
  180.                     else if (var18 != NULL)
  181.                     {
  182.                         //double var19 = var6.distanceTo(var18.hitVec);
  183.                         double var19 = env->CallDoubleMethod(var6, distanceTof, hitVec);
  184.                         if (var19 < var12 || var12 == 0.0)
  185.                         {
  186.                             ridingEntity = env->GetObjectField(renderViewEntity, ridingEntityf);
  187.                             //if (var15 == this.mc.renderViewEntity.ridingEntity)
  188.                             if (var15 == ridingEntity)
  189.                             {
  190.                                 if (var12 == 0.0)
  191.                                 {
  192.                                     //pointedEntity = var15;
  193.                                     env->SetObjectField(EntityRenderer, pointedEntityf, var15);
  194.                                     //var9 = var18.hitVec;
  195.                                     var9 = hitVec;
  196.                                 }
  197.                             }
  198.                             else
  199.                             {
  200.                                 //pointedEntity = var15;
  201.                                 env->SetObjectField(EntityRenderer, pointedEntityf, var15);
  202.                                 //var9 = var18.hitVec;
  203.                                 var9 = hitVec;
  204.                                 var12 = var19;
  205.                             }
  206.                         }
  207.                     }
  208.                 }
  209.             }
  210.  
  211.             //if (this.pointedEntity != null && (var12 < var4 || this.mc.objectMouseOver == null))
  212.             if (env->GetObjectField(EntityRenderer, pointedEntityf) != NULL && var12 > 3.0f)
  213.             {
  214.                 //this.mc.objectMouseOver = new MovingObjectPosition(this.pointedEntity, var9);
  215.                 env->SetObjectField(mc, objectMouseOverf, env->NewObject(MovingObjectPosition, movingObjectPositionc, env->GetObjectField(EntityRenderer, pointedEntityf), var9));
  216.                 ////jobject playerController = env->GetObjectField(mc, playerControllerf);
  217.                 ////env->CallVoidMethod(playerController, attackEntityf, thePlayer, ent);
  218.                 /*if (this.pointedEntity instanceof EntityLivingBase || this.pointedEntity instanceof EntityItemFrame)
  219.                 {
  220.                         this.mc.pointedEntity = this.pointedEntity;
  221.                 }*/
  222.             }
  223.         }
  224.     }
  225. }
  226.  
  227. void postPreInit(JNIEnv* env)
  228. {
  229.     mc = getMC(env);
  230.     mc = env->NewGlobalRef(mc);
  231.     thePlayer = getPlayer(env);
  232.     thePlayer = env->NewGlobalRef(thePlayer);
  233.     theWorld = getWorld(env);
  234.     theWorld = env->NewGlobalRef(theWorld);
  235.  
  236.     //classes
  237.     entityLivingBaseClass = getObject(env, "net.minecraft.entity.EntityLivingBase");
  238.     Vec3 = getObject(env, "net.minecraft.util.Vec3");
  239.     world = getObject(env, "net.minecraft.world.World");
  240.     List = getObject(env, "java.util.List");
  241.     Entity = getObject(env, "net.minecraft.entity.Entity");
  242.     EntityPlayer = getObject(env, "net.minecraft.entity.player.EntityPlayer");
  243.     AxisAlignedBB = getObject(env, "net.minecraft.util.AxisAlignedBB");
  244.     MovingObjectPosition = getObject(env, "net.minecraft.util.MovingObjectPosition");
  245.     EntityRenderer = getObject(env, "net.minecraft.client.renderer.EntityRenderer");
  246.     PlayerControllerMP = getObject(env, "net.minecraft.client.multiplayer.PlayerControllerMP");
  247.     Timer = getObject(env, "net.minecraft.util.Timer");
  248.  
  249.     std::cout << "world: " << world << std::endl;
  250.     std::cout << "List: " << List << std::endl;
  251.     std::cout << "Vec3: " << Vec3 << std::endl;
  252.     std::cout << "entityLivingBaseClass: " << entityLivingBaseClass << std::endl;
  253.     std::cout << "AxisAlignedBB: " << AxisAlignedBB << std::endl;
  254.     std::cout << "MovingObjectPosition: " << MovingObjectPosition << std::endl;
  255.     std::cout << "Entity: " << Entity << std::endl;
  256.     std::cout << "EntityRenderer: " << EntityRenderer << std::endl;
  257.  
  258.     jclass mcClass = getObject(env, "net.minecraft.client.Minecraft");
  259.     //fields
  260.     //examplef = env->GetMethodID(containingclass, "fieldname", "signature");
  261.     renderViewEntityf = env->GetFieldID(mcClass, "field_71451_h", "Lnet/minecraft/entity/EntityLivingBase;");
  262.     pointedEntityf = env->GetFieldID(EntityRenderer, "field_78528_u", "Lnet/minecraft/entity/Entity;");
  263.     objectMouseOverf = env->GetFieldID(mcClass, "field_71476_x", "Lnet/minecraft/util/MovingObjectPosition;");
  264.     boundingBoxf = env->GetFieldID(Entity, "field_70121_D", "Lnet/minecraft/util/AxisAlignedBB;");
  265.     hitVecf = env->GetFieldID(MovingObjectPosition, "field_72307_f", "Lnet/minecraft/util/Vec3;");
  266.     ridingEntityf = env->GetFieldID(Entity, "field_70154_o", "Lnet/minecraft/entity/Entity;");
  267.     xCoordf = env->GetFieldID(Vec3, "field_72450_a", "D");
  268.     yCoordf = env->GetFieldID(Vec3, "field_72448_b", "D");
  269.     zCoordf = env->GetFieldID(Vec3, "field_72449_c", "D");
  270.     renderPartialTicksf = env->GetFieldID(Timer, "field_74281_c", "F");
  271.     timerf = env->GetFieldID(mcClass, "field_71428_T", "Lnet/minecraft/util/Timer;");
  272.     playerControllerf = env->GetFieldID(mcClass, "field_71442_b", "Lnet/minecraft/client/multiplayer/PlayerControllerMP;");
  273.     entityHitf = env->GetFieldID(MovingObjectPosition, "field_72308_g", "Lnet/minecraft/entity/Entity;");
  274.  
  275.     //objects
  276.     renderViewEntity = env->GetObjectField(mc, renderViewEntityf);
  277.  
  278.     //methods
  279.     //examplef = env->GetMethodID(containingclass, "funcname", "(input)output");
  280.     rayTracef = env->GetMethodID(entityLivingBaseClass, "func_70614_a", "(DF)Lnet/minecraft/util/MovingObjectPosition;");
  281.     getPositionf = env->GetMethodID(entityLivingBaseClass, "func_70666_h", "(F)Lnet/minecraft/util/Vec3;");
  282.     getLookf = env->GetMethodID(entityLivingBaseClass, "func_70676_i", "(F)Lnet/minecraft/util/Vec3;");
  283.     addVectorf = env->GetMethodID(Vec3, "func_72441_c", "(DDD)Lnet/minecraft/util/Vec3;");
  284.     getEntitiesWithinAABBExcludingEntityf = env->GetMethodID(world, "func_72839_b", "(Lnet/minecraft/entity/Entity;Lnet/minecraft/util/AxisAlignedBB;)Ljava/util/List;");
  285.     sizef = env->GetMethodID(List, "size", "()I");
  286.     getf = env->GetMethodID(List, "get", "(I)Ljava/lang/Object;");
  287.     canBeCollidedWithf = env->GetMethodID(Entity, "func_70067_L", "()Z");
  288.     getCollisionBorderSizef = env->GetMethodID(Entity, "func_70111_Y", "()F");
  289.     expandf = env->GetMethodID(AxisAlignedBB, "func_72314_b", "(DDD)Lnet/minecraft/util/AxisAlignedBB;");
  290.     addCoordf = env->GetMethodID(AxisAlignedBB, "func_72321_a", "(DDD)Lnet/minecraft/util/AxisAlignedBB;");
  291.     calculateInterceptf = env->GetMethodID(AxisAlignedBB, "func_72327_a", "(Lnet/minecraft/util/Vec3;Lnet/minecraft/util/Vec3;)Lnet/minecraft/util/MovingObjectPosition;");
  292.     isVecInsidef = env->GetMethodID(AxisAlignedBB, "func_72318_a", "(Lnet/minecraft/util/Vec3;)Z");
  293.     distanceTof = env->GetMethodID(Vec3, "func_72438_d", "(Lnet/minecraft/util/Vec3;)D");
  294.     attackEntityf = env->GetMethodID(PlayerControllerMP, "func_78764_a", "(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/entity/Entity;)V");
  295.     isUsingItemf = env->GetMethodID(EntityPlayer, "func_71039_bw", "()Z");
  296.     movingObjectPositionc = env->GetMethodID(MovingObjectPosition, "<init>", "(Lnet/minecraft/entity/Entity;Lnet/minecraft/util/Vec3;)V");
  297.  
  298.     std::cout << "renderViewEntityf: " << renderViewEntityf << std::endl;
  299.     std::cout << "pointedEntityf: " << pointedEntityf << std::endl;
  300.     std::cout << "objectMouseOverf: " << objectMouseOverf << std::endl;
  301.     std::cout << "rayTracef: " << rayTracef << std::endl;
  302.     std::cout << "getPositionf: " << getPositionf << std::endl;
  303.     std::cout << "getLookf: " << getLookf << std::endl;
  304.     std::cout << "addVectorf: " << addVectorf << std::endl;
  305.     std::cout << "getEntitiesWithinAABBExcludingEntityf: " << getEntitiesWithinAABBExcludingEntityf << std::endl;
  306.     std::cout << "sizef: " << sizef << std::endl;
  307.     std::cout << "getf: " << getf << std::endl;
  308.     std::cout << "canBeCollidedWithf: " << canBeCollidedWithf << std::endl;
  309.     std::cout << "getCollisionBorderSizef: " << getCollisionBorderSizef << std::endl;
  310.     std::cout << "boundingBoxf: " << boundingBoxf << std::endl;
  311.     std::cout << "expandf: " << expandf << std::endl;
  312.     std::cout << "calculateInterceptf: " << calculateInterceptf << std::endl;
  313.     std::cout << "isVecInsidef: " << isVecInsidef << std::endl;
  314.     std::cout << "distanceTof: " << distanceTof << std::endl;
  315.     std::cout << "ridingEntityf: " << ridingEntityf << std::endl;
  316. }
  317.  
  318. void cleanup(JNIEnv* env)
  319. {
  320.     env->DeleteGlobalRef(mc);
  321.     env->DeleteGlobalRef(thePlayer);
  322.     env->DeleteGlobalRef(theWorld);
  323. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement