127 lines
4.7 KiB
C++
127 lines
4.7 KiB
C++
#pragma once
|
|
|
|
#include "c_minecraft.h"
|
|
|
|
class c_entity {
|
|
public:
|
|
c_entity() {}
|
|
c_entity(jobject javaclass) { java_class = javaclass; }
|
|
|
|
vec3_t position() { return vec3_t(get_x(), get_y(), get_z()); }
|
|
|
|
vec3_t size() {
|
|
jfieldID width = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "J", "D");
|
|
jfieldID height = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "K", "D");
|
|
return vec3_t(minecraft->m_jenv->GetFloatField(java_class, height),
|
|
minecraft->m_jenv->GetFloatField(java_class, width),
|
|
0.0f);
|
|
}
|
|
|
|
void set_position(vec3_t pos) {
|
|
jmethodID set_position = minecraft->m_jenv->GetMethodID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "b", "(DDD)V");
|
|
return minecraft->m_jenv->CallVoidMethod(java_class, set_position,
|
|
pos.x, pos.y, pos.z);
|
|
}
|
|
|
|
vec3_t angles() { return vec3_t(get_pitch(), get_yaw(), 0.f); }
|
|
|
|
int index() {
|
|
jmethodID index = minecraft->m_jenv->GetMethodID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "F", "()I");
|
|
return minecraft->m_jenv->CallIntMethod(java_class, index);
|
|
}
|
|
|
|
std::string name() {
|
|
jmethodID get_name = minecraft->m_jenv->GetMethodID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "e_",
|
|
"()Ljava/lang/String;");
|
|
jstring name =
|
|
(jstring)minecraft->m_jenv->CallObjectMethod(java_class, get_name);
|
|
return std::string(minecraft->m_jenv->GetStringUTFChars(name, false));
|
|
}
|
|
|
|
bool is_valid() { return java_class; }
|
|
|
|
bool is_item() { return name().find("item.item") != std::string::npos; }
|
|
|
|
bool is_alive() {
|
|
jmethodID alive = minecraft->m_jenv->GetMethodID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "ai", "()Z");
|
|
return minecraft->m_jenv->CallBooleanMethod(java_class, alive);
|
|
}
|
|
|
|
void set_yaw(jfloat yaw) {
|
|
jfieldID set_yaw = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "y", "F");
|
|
minecraft->m_jenv->SetFloatField(java_class, set_yaw, yaw);
|
|
}
|
|
|
|
void set_pitch(jfloat pitch) {
|
|
jfieldID set_pitch = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "z", "F");
|
|
minecraft->m_jenv->SetFloatField(java_class, set_pitch, pitch);
|
|
}
|
|
|
|
void set_sprint(jboolean sprinting) {
|
|
jmethodID set_sprint = minecraft->m_jenv->GetMethodID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "d", "(Z)V");
|
|
minecraft->m_jenv->CallBooleanMethod(java_class, set_sprint, sprinting);
|
|
}
|
|
|
|
void set_step_height(jfloat height) {
|
|
jfieldID step_height = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "S", "F");
|
|
minecraft->m_jenv->SetFloatField(java_class, step_height, height);
|
|
}
|
|
|
|
jobject get_capabilities() {
|
|
jfieldID get_capabilities = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "bA", "Lwl;");
|
|
return minecraft->m_jenv->GetObjectField(java_class, get_capabilities);
|
|
}
|
|
|
|
void set_flight(jboolean state) {
|
|
jfieldID set_flight = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(get_capabilities()), "b", "Z");
|
|
minecraft->m_jenv->SetBooleanField(get_capabilities(), set_flight,
|
|
state);
|
|
}
|
|
|
|
private:
|
|
jobject java_class;
|
|
|
|
float get_x() {
|
|
jfieldID get_x = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "s", "D");
|
|
return minecraft->m_jenv->GetDoubleField(java_class, get_x);
|
|
}
|
|
|
|
float get_y() {
|
|
jfieldID get_y = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "t", "D");
|
|
return minecraft->m_jenv->GetDoubleField(java_class, get_y);
|
|
}
|
|
|
|
float get_z() {
|
|
jfieldID get_z = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "u", "D");
|
|
return minecraft->m_jenv->GetDoubleField(java_class, get_z);
|
|
}
|
|
|
|
float get_pitch() {
|
|
jfieldID get_pitch = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "z", "F");
|
|
return minecraft->m_jenv->GetFloatField(java_class, get_pitch);
|
|
}
|
|
|
|
float get_yaw() {
|
|
jfieldID get_yaw = minecraft->m_jenv->GetFieldID(
|
|
minecraft->m_jenv->GetObjectClass(java_class), "y", "F");
|
|
return minecraft->m_jenv->GetFloatField(java_class, get_yaw);
|
|
}
|
|
};
|
|
|
|
extern c_entity* entity; |