From ab94cc51a269e81a016266b34cd11329716bb12c Mon Sep 17 00:00:00 2001 From: murdle Date: Tue, 17 Feb 2026 16:20:21 +0200 Subject: [PATCH] make some of the code prettier --- mcpe/ExtendedCertificate.h | 4 + mcpe/UUID.h | 6 +- src/common.cpp | 25 +- src/common.h | 3 +- src/gles_symbols.h | 1072 ++++++++++++++++++------------------ src/main.cpp | 43 +- src/server.cpp | 69 ++- 7 files changed, 602 insertions(+), 620 deletions(-) diff --git a/mcpe/ExtendedCertificate.h b/mcpe/ExtendedCertificate.h index b507649..ec65ce9 100644 --- a/mcpe/ExtendedCertificate.h +++ b/mcpe/ExtendedCertificate.h @@ -4,4 +4,8 @@ class ExtendedCertificate { public: static mcpe::string (*ExtendedCertificate_getIdentityName)(ExtendedCertificate*); + + static mcpe::string getIdentityName(ExtendedCertificate* cert) { + return ExtendedCertificate_getIdentityName(cert); + } }; diff --git a/mcpe/UUID.h b/mcpe/UUID.h index 16bec32..27ddc47 100644 --- a/mcpe/UUID.h +++ b/mcpe/UUID.h @@ -5,7 +5,7 @@ #include #include -namespace { +namespace mce { inline uint64_t fnv1a_64(const std::string& s) { uint64_t hash = 14695981039346656037ULL; @@ -16,10 +16,6 @@ inline uint64_t fnv1a_64(const std::string& s) { return hash; } -} - -namespace mce { - class UUID { public: diff --git a/src/common.cpp b/src/common.cpp index 8abebcf..4e30580 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -1,6 +1,5 @@ #include "common.h" -#include #include #include #include @@ -15,21 +14,23 @@ extern "C" { #include "../hybris/include/hybris/dlfcn.h" } -std::string rootPath = ""; +static std::string g_rootPath; std::string getRootPath() { - char resolved[PATH_MAX]; - const char* input = rootPath.empty() ? "." : rootPath.c_str(); + if (g_rootPath.empty()) + setRootPath(""); + if (!g_rootPath.empty() && g_rootPath.back() != '/') + g_rootPath += '/'; + return g_rootPath; +} - if (realpath(input, resolved) == nullptr) { - getcwd(resolved, PATH_MAX); +void setRootPath(const std::string& path) { + char buf[PATH_MAX] = {0}; + if (path.empty()) { + g_rootPath = getcwd(buf, sizeof(buf)) ? buf : "."; + } else { + g_rootPath = realpath(path.c_str(), buf) ? buf : path; } - - std::string result(resolved); - if (!result.empty() && result.back() != '/') - result += '/'; - - return result; } bool loadLibrary(std::string path) { diff --git a/src/common.h b/src/common.h index 0acb79b..e3ce826 100644 --- a/src/common.h +++ b/src/common.h @@ -2,9 +2,8 @@ #include -extern std::string rootPath; - std::string getRootPath(); +void setRootPath(const std::string& path); bool loadLibrary(std::string path); void* loadLibraryOS(std::string path, const char** symbols); void* loadMod(std::string path); diff --git a/src/gles_symbols.h b/src/gles_symbols.h index d940cda..e61f852 100644 --- a/src/gles_symbols.h +++ b/src/gles_symbols.h @@ -1,540 +1,540 @@ #pragma once const char* gles_symbols[] = { - "glActiveTexture", - "glAttachShader", - "glBindAttribLocation", - "glBindBuffer", - "glBindFramebuffer", - "glBindRenderbuffer", - "glBindTexture", - "glBlendColor", - "glBlendEquation", - "glBlendEquationSeparate", - "glBlendFunc", - "glBlendFuncSeparate", - "glBufferData", - "glBufferSubData", - "glCheckFramebufferStatus", - "glClear", - "glClearColor", - "glClearDepthf", - "glClearStencil", - "glColorMask", - "glCompileShader", - "glCompressedTexImage2D", - "glCompressedTexSubImage2D", - "glCopyTexImage2D", - "glCopyTexSubImage2D", - "glCreateProgram", - "glCreateShader", - "glCullFace", - "glDeleteBuffers", - "glDeleteFramebuffers", - "glDeleteProgram", - "glDeleteRenderbuffers", - "glDeleteShader", - "glDeleteTextures", - "glDepthFunc", - "glDepthMask", - "glDepthRangef", - "glDetachShader", - "glDisable", - "glDisableVertexAttribArray", - "glDrawArrays", - "glDrawElements", - "glEnable", - "glEnableVertexAttribArray", - "glFinish", - "glFlush", - "glFramebufferRenderbuffer", - "glFramebufferTexture2D", - "glFrontFace", - "glGenBuffers", - "glGenerateMipmap", - "glGenFramebuffers", - "glGenRenderbuffers", - "glGenTextures", - "glGetActiveAttrib", - "glGetActiveUniform", - "glGetAttachedShaders", - "glGetAttribLocation", - "glGetBooleanv", - "glGetBufferParameteriv", - "glGetError", - "glGetFloatv", - "glGetFramebufferAttachmen", - "glGetIntegerv", - "glGetProgramiv", - "glGetProgramInfoLog", - "glGetRenderbufferParamete", - "glGetShaderiv", - "glGetShaderInfoLog", - "glGetShaderPrecisionFormat", - "glGetShaderSource", - "glGetTexParameterfv", - "glGetTexParameteriv", - "glGetUniformfv", - "glGetUniformiv", - "glGetUniformLocation", - "glGetVertexAttribfv", - "glGetVertexAttribiv", - "glGetVertexAttribPointerv", - "glHint", - "glIsBuffer", - "glIsEnabled", - "glIsFramebuffer", - "glIsProgram", - "glIsRenderbuffer", - "glIsShader", - "glIsTexture", - "glLineWidth", - "glLinkProgram", - "glPixelStorei", - "glPolygonOffset", - "glReadPixels", - "glReleaseShaderCompiler", - "glRenderbufferStorage", - "glSampleCoverage", - "glScissor", - "glShaderBinary", - "glShaderSource", - "glStencilFunc", - "glStencilFuncSeparate", - "glStencilMask", - "glStencilMaskSeparate", - "glStencilOp", - "glStencilOpSeparate", - "glTexImage2D", - "glTexParameterf", - "glTexParameterfv", - "glTexParameteri", - "glTexParameteriv", - "glTexSubImage2D", - "glUniform1f", - "glUniform1fv", - "glUniform1i", - "glUniform1iv", - "glUniform2f", - "glUniform2fv", - "glUniform2i", - "glUniform2iv", - "glUniform3f", - "glUniform3fv", - "glUniform3i", - "glUniform3iv", - "glUniform4f", - "glUniform4fv", - "glUniform4i", - "glUniform4iv", - "glUniformMatrix2fv", - "glUniformMatrix3fv", - "glUniformMatrix4fv", - "glUseProgram", - "glValidateProgram", - "glVertexAttrib1f", - "glVertexAttrib1fv", - "glVertexAttrib2f", - "glVertexAttrib2fv", - "glVertexAttrib3f", - "glVertexAttrib3fv", - "glVertexAttrib4f", - "glVertexAttrib4fv", - "glVertexAttribPointer", - "glViewport", - "glReadBuffer", - "glDrawRangeElements", - "glTexImage3D", - "glTexSubImage3D", - "glCopyTexSubImage3D", - "glCompressedTexImage3D", - "glCompressedTexSubImage3D", - "glGenQueries", - "glDeleteQueries", - "glIsQuery", - "glBeginQuery", - "glEndQuery", - "glGetQueryiv", - "glGetQueryObjectuiv", - "glUnmapBuffer", - "glGetBufferPointerv", - "glDrawBuffers", - "glUniformMatrix2x3fv", - "glUniformMatrix3x2fv", - "glUniformMatrix2x4fv", - "glUniformMatrix4x2fv", - "glUniformMatrix3x4fv", - "glUniformMatrix4x3fv", - "glBlitFramebuffer", - "glRenderbufferStorageMult", - "glFramebufferTextureLayer", - "glMapBufferRange", - "glFlushMappedBufferRange", - "glBindVertexArray", - "glDeleteVertexArrays", - "glGenVertexArrays", - "glIsVertexArray", - "glGetIntegeri_v", - "glBeginTransformFeedback", - "glEndTransformFeedback", - "glBindBufferRange", - "glBindBufferBase", - "glTransformFeedbackVaryin", - "glGetTransformFeedbackVar", - "glVertexAttribIPointer", - "glGetVertexAttribIiv", - "glGetVertexAttribIuiv", - "glVertexAttribI4i", - "glVertexAttribI4ui", - "glVertexAttribI4iv", - "glVertexAttribI4uiv", - "glGetUniformuiv", - "glGetFragDataLocation", - "glUniform1ui", - "glUniform2ui", - "glUniform3ui", - "glUniform4ui", - "glUniform1uiv", - "glUniform2uiv", - "glUniform3uiv", - "glUniform4uiv", - "glClearBufferiv", - "glClearBufferuiv", - "glClearBufferfv", - "glClearBufferfi", - "glGetStringi", - "glCopyBufferSubData", - "glGetUniformIndices", - "glGetActiveUniformsiv", - "glGetUniformBlockIndex", - "glGetActiveUniformBlockiv", - "glGetActiveUniformBlockNa", - "glUniformBlockBinding", - "glDrawArraysInstanced", - "glDrawElementsInstanced", - "glFenceSync", - "glIsSync", - "glDeleteSync", - "glClientWaitSync", - "glWaitSync", - "glGetInteger64v", - "glGetSynciv", - "glGetInteger64i_v", - "glGetBufferParameteri64v", - "glGenSamplers", - "glDeleteSamplers", - "glIsSampler", - "glBindSampler", - "glSamplerParameteri", - "glSamplerParameteriv", - "glSamplerParameterf", - "glSamplerParameterfv", - "glGetSamplerParameteriv", - "glGetSamplerParameterfv", - "glVertexAttribDivisor", - "glBindTransformFeedback", - "glDeleteTransformFeedback", - "glGenTransformFeedbacks", - "glIsTransformFeedback", - "glPauseTransformFeedback", - "glResumeTransformFeedback", - "glGetProgramBinary", - "glProgramBinary", - "glProgramParameteri", - "glInvalidateFramebuffer", - "glInvalidateSubFramebuffe", - "glTexStorage2D", - "glTexStorage3D", - "glGetInternalformativ", - "glDispatchCompute", - "glDispatchComputeIndirect", - "glDrawArraysIndirect", - "glDrawElementsIndirect", - "glFramebufferParameteri", - "glGetFramebufferParameter", - "glGetProgramInterfaceiv", - "glGetProgramResourceIndex", - "glGetProgramResourceName", - "glGetProgramResourceiv", - "glGetProgramResourceLocat", - "glUseProgramStages", - "glActiveShaderProgram", - "glCreateShaderProgramv", - "glBindProgramPipeline", - "glDeleteProgramPipelines", - "glGenProgramPipelines", - "glIsProgramPipeline", - "glGetProgramPipelineiv", - "glProgramUniform1i", - "glProgramUniform2i", - "glProgramUniform3i", - "glProgramUniform4i", - "glProgramUniform1ui", - "glProgramUniform2ui", - "glProgramUniform3ui", - "glProgramUniform4ui", - "glProgramUniform1f", - "glProgramUniform2f", - "glProgramUniform3f", - "glProgramUniform4f", - "glProgramUniform1iv", - "glProgramUniform2iv", - "glProgramUniform3iv", - "glProgramUniform4iv", - "glProgramUniform1uiv", - "glProgramUniform2uiv", - "glProgramUniform3uiv", - "glProgramUniform4uiv", - "glProgramUniform1fv", - "glProgramUniform2fv", - "glProgramUniform3fv", - "glProgramUniform4fv", - "glProgramUniformMatrix2fv", - "glProgramUniformMatrix3fv", - "glProgramUniformMatrix4fv", - "glProgramUniformMatrix2x3", - "glProgramUniformMatrix3x2", - "glProgramUniformMatrix2x4", - "glProgramUniformMatrix4x2", - "glProgramUniformMatrix3x4", - "glProgramUniformMatrix4x3", - "glValidateProgramPipeline", - "glGetProgramPipelineInfoL", - "glBindImageTexture", - "glGetBooleani_v", - "glMemoryBarrier", - "glMemoryBarrierByRegion", - "glTexStorage2DMultisample", - "glGetMultisamplefv", - "glSampleMaski", - "glGetTexLevelParameteriv", - "glGetTexLevelParameterfv", - "glBindVertexBuffer", - "glVertexAttribFormat", - "glVertexAttribIFormat", - "glVertexAttribBinding", - "glVertexBindingDivisor", - "glBlendBarrierKHR", - "glDebugMessageControlKHR", - "glDebugMessageInsertKHR", - "glDebugMessageCallbackKHR", - "glGetDebugMessageLogKHR", - "glPushDebugGroupKHR", - "glPopDebugGroupKHR", - "glObjectLabelKHR", - "glGetObjectLabelKHR", - "glObjectPtrLabelKHR", - "glGetObjectPtrLabelKHR", - "glGetPointervKHR", - "glEGLImageTargetTexture2D", - "glEGLImageTargetRenderbuf", - "glGetProgramBinaryOES", - "glProgramBinaryOES", - "glMapBufferOES", - "glUnmapBufferOES", - "glGetBufferPointervOES", - "glMinSampleShadingOES", - "glTexImage3DOES", - "glTexSubImage3DOES", - "glCopyTexSubImage3DOES", - "glCompressedTexImage3DOES", - "glCompressedTexSubImage3D", - "glFramebufferTexture3DOES", - "glTexStorage3DMultisample", - "glBindVertexArrayOES", - "glDeleteVertexArraysOES", - "glGenVertexArraysOES", - "glIsVertexArrayOES", - "glGetPerfMonitorGroupsAMD", - "glGetPerfMonitorCountersA", - "glGetPerfMonitorGroupStri", - "glGetPerfMonitorCounterSt", - "glGetPerfMonitorCounterIn", - "glGenPerfMonitorsAMD", - "glDeletePerfMonitorsAMD", - "glSelectPerfMonitorCounte", - "glBeginPerfMonitorAMD", - "glEndPerfMonitorAMD", - "glGetPerfMonitorCounterDa", - "glBlitFramebufferANGLE", - "glRenderbufferStorageMult", - "glDrawArraysInstancedANGL", - "glDrawElementsInstancedAN", - "glVertexAttribDivisorANGL", - "glGetTranslatedShaderSour", - "glCopyTextureLevelsAPPLE", - "glRenderbufferStorageMult", - "glResolveMultisampleFrame", - "glFenceSyncAPPLE", - "glIsSyncAPPLE", - "glDeleteSyncAPPLE", - "glClientWaitSyncAPPLE", - "glWaitSyncAPPLE", - "glGetInteger64vAPPLE", - "glGetSyncivAPPLE", - "glCopyImageSubDataEXT", - "glLabelObjectEXT", - "glGetObjectLabelEXT", - "glInsertEventMarkerEXT", - "glPushGroupMarkerEXT", - "glPopGroupMarkerEXT", - "glDiscardFramebufferEXT", - "glGenQueriesEXT", - "glDeleteQueriesEXT", - "glIsQueryEXT", - "glBeginQueryEXT", - "glEndQueryEXT", - "glQueryCounterEXT", - "glGetQueryivEXT", - "glGetQueryObjectivEXT", - "glGetQueryObjectuivEXT", - "glGetQueryObjecti64vEXT", - "glGetQueryObjectui64vEXT", - "glDrawBuffersEXT", - "glEnableiEXT", - "glDisableiEXT", - "glBlendEquationiEXT", - "glBlendEquationSeparateiE", - "glBlendFunciEXT", - "glBlendFuncSeparateiEXT", - "glColorMaskiEXT", - "glIsEnablediEXT", - "glDrawArraysInstancedEXT", - "glDrawElementsInstancedEX", - "glFramebufferTextureEXT", - "glVertexAttribDivisorEXT", - "glMapBufferRangeEXT", - "glFlushMappedBufferRangeE", - "glMultiDrawArraysEXT", - "glMultiDrawElementsEXT", - "glRenderbufferStorageMult", - "glFramebufferTexture2DMul", - "glReadBufferIndexedEXT", - "glDrawBuffersIndexedEXT", - "glGetIntegeri_vEXT", - "glPrimitiveBoundingBoxEXT", - "glGetGraphicsResetStatusE", - "glReadnPixelsEXT", - "glGetnUniformfvEXT", - "glGetnUniformivEXT", - "glActiveShaderProgramEXT", - "glBindProgramPipelineEXT", - "glCreateShaderProgramvEXT", - "glDeleteProgramPipelinesE", - "glGenProgramPipelinesEXT", - "glGetProgramPipelineInfoL", - "glGetProgramPipelineivEXT", - "glIsProgramPipelineEXT", - "glProgramParameteriEXT", - "glProgramUniform1fEXT", - "glProgramUniform1fvEXT", - "glProgramUniform1iEXT", - "glProgramUniform1ivEXT", - "glProgramUniform2fEXT", - "glProgramUniform2fvEXT", - "glProgramUniform2iEXT", - "glProgramUniform2ivEXT", - "glProgramUniform3fEXT", - "glProgramUniform3fvEXT", - "glProgramUniform3iEXT", - "glProgramUniform3ivEXT", - "glProgramUniform4fEXT", - "glProgramUniform4fvEXT", - "glProgramUniform4iEXT", - "glProgramUniform4ivEXT", - "glProgramUniformMatrix2fv", - "glProgramUniformMatrix3fv", - "glProgramUniformMatrix4fv", - "glUseProgramStagesEXT", - "glValidateProgramPipeline", - "glProgramUniform1uiEXT", - "glProgramUniform2uiEXT", - "glProgramUniform3uiEXT", - "glProgramUniform4uiEXT", - "glProgramUniform1uivEXT", - "glProgramUniform2uivEXT", - "glProgramUniform3uivEXT", - "glProgramUniform4uivEXT", - "glProgramUniformMatrix2x3", - "glProgramUniformMatrix3x2", - "glProgramUniformMatrix2x4", - "glProgramUniformMatrix4x2", - "glProgramUniformMatrix3x4", - "glProgramUniformMatrix4x3", - "glPatchParameteriEXT", - "glTexParameterIivEXT", - "glTexParameterIuivEXT", - "glGetTexParameterIivEXT", - "glGetTexParameterIuivEXT", - "glSamplerParameterIivEXT", - "glSamplerParameterIuivEXT", - "glGetSamplerParameterIivE", - "glGetSamplerParameterIuiv", - "glTexBufferEXT", - "glTexBufferRangeEXT", - "glTexStorage1DEXT", - "glTexStorage2DEXT", - "glTexStorage3DEXT", - "glTextureStorage1DEXT", - "glTextureStorage2DEXT", - "glTextureStorage3DEXT", - "glTextureViewEXT", - "glRenderbufferStorageMult", - "glFramebufferTexture2DMul", - "glBeginPerfQueryINTEL", - "glCreatePerfQueryINTEL", - "glDeletePerfQueryINTEL", - "glEndPerfQueryINTEL", - "glGetFirstPerfQueryIdINTE", - "glGetNextPerfQueryIdINTEL", - "glGetPerfCounterInfoINTEL", - "glGetPerfQueryDataINTEL", - "glGetPerfQueryIdByNameINT", - "glGetPerfQueryInfoINTEL", - "glBlendParameteriNV", - "glBlendBarrierNV", - "glCopyBufferSubDataNV", - "glCoverageMaskNV", - "glCoverageOperationNV", - "glDrawBuffersNV", - "glDrawArraysInstancedNV", - "glDrawElementsInstancedNV", - "glDeleteFencesNV", - "glGenFencesNV", - "glIsFenceNV", - "glTestFenceNV", - "glGetFenceivNV", - "glFinishFenceNV", - "glSetFenceNV", - "glBlitFramebufferNV", - "glRenderbufferStorageMult", - "glVertexAttribDivisorNV", - "glUniformMatrix2x3fvNV", - "glUniformMatrix3x2fvNV", - "glUniformMatrix2x4fvNV", - "glUniformMatrix4x2fvNV", - "glUniformMatrix3x4fvNV", - "glUniformMatrix4x3fvNV", - "glReadBufferNV", - "glAlphaFuncQCOM", - "glGetDriverControlsQCOM", - "glGetDriverControlStringQ", - "glEnableDriverControlQCOM", - "glDisableDriverControlQCO", - "glExtGetTexturesQCOM", - "glExtGetBuffersQCOM", - "glExtGetRenderbuffersQCOM", - "glExtGetFramebuffersQCOM", - "glExtGetTexLevelParameter", - "glExtTexObjectStateOverri", - "glExtGetTexSubImageQCOM", - "glExtGetBufferPointervQCO", - "glExtGetShadersQCOM", - "glExtGetProgramsQCOM", - "glExtIsProgramBinaryQCOM", - "glExtGetProgramBinarySour", - "glStartTilingQCOM", - "glEndTilingQCOM", - "glGetString", - nullptr + "glActiveTexture", + "glAttachShader", + "glBindAttribLocation", + "glBindBuffer", + "glBindFramebuffer", + "glBindRenderbuffer", + "glBindTexture", + "glBlendColor", + "glBlendEquation", + "glBlendEquationSeparate", + "glBlendFunc", + "glBlendFuncSeparate", + "glBufferData", + "glBufferSubData", + "glCheckFramebufferStatus", + "glClear", + "glClearColor", + "glClearDepthf", + "glClearStencil", + "glColorMask", + "glCompileShader", + "glCompressedTexImage2D", + "glCompressedTexSubImage2D", + "glCopyTexImage2D", + "glCopyTexSubImage2D", + "glCreateProgram", + "glCreateShader", + "glCullFace", + "glDeleteBuffers", + "glDeleteFramebuffers", + "glDeleteProgram", + "glDeleteRenderbuffers", + "glDeleteShader", + "glDeleteTextures", + "glDepthFunc", + "glDepthMask", + "glDepthRangef", + "glDetachShader", + "glDisable", + "glDisableVertexAttribArray", + "glDrawArrays", + "glDrawElements", + "glEnable", + "glEnableVertexAttribArray", + "glFinish", + "glFlush", + "glFramebufferRenderbuffer", + "glFramebufferTexture2D", + "glFrontFace", + "glGenBuffers", + "glGenerateMipmap", + "glGenFramebuffers", + "glGenRenderbuffers", + "glGenTextures", + "glGetActiveAttrib", + "glGetActiveUniform", + "glGetAttachedShaders", + "glGetAttribLocation", + "glGetBooleanv", + "glGetBufferParameteriv", + "glGetError", + "glGetFloatv", + "glGetFramebufferAttachmen", + "glGetIntegerv", + "glGetProgramiv", + "glGetProgramInfoLog", + "glGetRenderbufferParamete", + "glGetShaderiv", + "glGetShaderInfoLog", + "glGetShaderPrecisionFormat", + "glGetShaderSource", + "glGetTexParameterfv", + "glGetTexParameteriv", + "glGetUniformfv", + "glGetUniformiv", + "glGetUniformLocation", + "glGetVertexAttribfv", + "glGetVertexAttribiv", + "glGetVertexAttribPointerv", + "glHint", + "glIsBuffer", + "glIsEnabled", + "glIsFramebuffer", + "glIsProgram", + "glIsRenderbuffer", + "glIsShader", + "glIsTexture", + "glLineWidth", + "glLinkProgram", + "glPixelStorei", + "glPolygonOffset", + "glReadPixels", + "glReleaseShaderCompiler", + "glRenderbufferStorage", + "glSampleCoverage", + "glScissor", + "glShaderBinary", + "glShaderSource", + "glStencilFunc", + "glStencilFuncSeparate", + "glStencilMask", + "glStencilMaskSeparate", + "glStencilOp", + "glStencilOpSeparate", + "glTexImage2D", + "glTexParameterf", + "glTexParameterfv", + "glTexParameteri", + "glTexParameteriv", + "glTexSubImage2D", + "glUniform1f", + "glUniform1fv", + "glUniform1i", + "glUniform1iv", + "glUniform2f", + "glUniform2fv", + "glUniform2i", + "glUniform2iv", + "glUniform3f", + "glUniform3fv", + "glUniform3i", + "glUniform3iv", + "glUniform4f", + "glUniform4fv", + "glUniform4i", + "glUniform4iv", + "glUniformMatrix2fv", + "glUniformMatrix3fv", + "glUniformMatrix4fv", + "glUseProgram", + "glValidateProgram", + "glVertexAttrib1f", + "glVertexAttrib1fv", + "glVertexAttrib2f", + "glVertexAttrib2fv", + "glVertexAttrib3f", + "glVertexAttrib3fv", + "glVertexAttrib4f", + "glVertexAttrib4fv", + "glVertexAttribPointer", + "glViewport", + "glReadBuffer", + "glDrawRangeElements", + "glTexImage3D", + "glTexSubImage3D", + "glCopyTexSubImage3D", + "glCompressedTexImage3D", + "glCompressedTexSubImage3D", + "glGenQueries", + "glDeleteQueries", + "glIsQuery", + "glBeginQuery", + "glEndQuery", + "glGetQueryiv", + "glGetQueryObjectuiv", + "glUnmapBuffer", + "glGetBufferPointerv", + "glDrawBuffers", + "glUniformMatrix2x3fv", + "glUniformMatrix3x2fv", + "glUniformMatrix2x4fv", + "glUniformMatrix4x2fv", + "glUniformMatrix3x4fv", + "glUniformMatrix4x3fv", + "glBlitFramebuffer", + "glRenderbufferStorageMult", + "glFramebufferTextureLayer", + "glMapBufferRange", + "glFlushMappedBufferRange", + "glBindVertexArray", + "glDeleteVertexArrays", + "glGenVertexArrays", + "glIsVertexArray", + "glGetIntegeri_v", + "glBeginTransformFeedback", + "glEndTransformFeedback", + "glBindBufferRange", + "glBindBufferBase", + "glTransformFeedbackVaryin", + "glGetTransformFeedbackVar", + "glVertexAttribIPointer", + "glGetVertexAttribIiv", + "glGetVertexAttribIuiv", + "glVertexAttribI4i", + "glVertexAttribI4ui", + "glVertexAttribI4iv", + "glVertexAttribI4uiv", + "glGetUniformuiv", + "glGetFragDataLocation", + "glUniform1ui", + "glUniform2ui", + "glUniform3ui", + "glUniform4ui", + "glUniform1uiv", + "glUniform2uiv", + "glUniform3uiv", + "glUniform4uiv", + "glClearBufferiv", + "glClearBufferuiv", + "glClearBufferfv", + "glClearBufferfi", + "glGetStringi", + "glCopyBufferSubData", + "glGetUniformIndices", + "glGetActiveUniformsiv", + "glGetUniformBlockIndex", + "glGetActiveUniformBlockiv", + "glGetActiveUniformBlockNa", + "glUniformBlockBinding", + "glDrawArraysInstanced", + "glDrawElementsInstanced", + "glFenceSync", + "glIsSync", + "glDeleteSync", + "glClientWaitSync", + "glWaitSync", + "glGetInteger64v", + "glGetSynciv", + "glGetInteger64i_v", + "glGetBufferParameteri64v", + "glGenSamplers", + "glDeleteSamplers", + "glIsSampler", + "glBindSampler", + "glSamplerParameteri", + "glSamplerParameteriv", + "glSamplerParameterf", + "glSamplerParameterfv", + "glGetSamplerParameteriv", + "glGetSamplerParameterfv", + "glVertexAttribDivisor", + "glBindTransformFeedback", + "glDeleteTransformFeedback", + "glGenTransformFeedbacks", + "glIsTransformFeedback", + "glPauseTransformFeedback", + "glResumeTransformFeedback", + "glGetProgramBinary", + "glProgramBinary", + "glProgramParameteri", + "glInvalidateFramebuffer", + "glInvalidateSubFramebuffe", + "glTexStorage2D", + "glTexStorage3D", + "glGetInternalformativ", + "glDispatchCompute", + "glDispatchComputeIndirect", + "glDrawArraysIndirect", + "glDrawElementsIndirect", + "glFramebufferParameteri", + "glGetFramebufferParameter", + "glGetProgramInterfaceiv", + "glGetProgramResourceIndex", + "glGetProgramResourceName", + "glGetProgramResourceiv", + "glGetProgramResourceLocat", + "glUseProgramStages", + "glActiveShaderProgram", + "glCreateShaderProgramv", + "glBindProgramPipeline", + "glDeleteProgramPipelines", + "glGenProgramPipelines", + "glIsProgramPipeline", + "glGetProgramPipelineiv", + "glProgramUniform1i", + "glProgramUniform2i", + "glProgramUniform3i", + "glProgramUniform4i", + "glProgramUniform1ui", + "glProgramUniform2ui", + "glProgramUniform3ui", + "glProgramUniform4ui", + "glProgramUniform1f", + "glProgramUniform2f", + "glProgramUniform3f", + "glProgramUniform4f", + "glProgramUniform1iv", + "glProgramUniform2iv", + "glProgramUniform3iv", + "glProgramUniform4iv", + "glProgramUniform1uiv", + "glProgramUniform2uiv", + "glProgramUniform3uiv", + "glProgramUniform4uiv", + "glProgramUniform1fv", + "glProgramUniform2fv", + "glProgramUniform3fv", + "glProgramUniform4fv", + "glProgramUniformMatrix2fv", + "glProgramUniformMatrix3fv", + "glProgramUniformMatrix4fv", + "glProgramUniformMatrix2x3", + "glProgramUniformMatrix3x2", + "glProgramUniformMatrix2x4", + "glProgramUniformMatrix4x2", + "glProgramUniformMatrix3x4", + "glProgramUniformMatrix4x3", + "glValidateProgramPipeline", + "glGetProgramPipelineInfoL", + "glBindImageTexture", + "glGetBooleani_v", + "glMemoryBarrier", + "glMemoryBarrierByRegion", + "glTexStorage2DMultisample", + "glGetMultisamplefv", + "glSampleMaski", + "glGetTexLevelParameteriv", + "glGetTexLevelParameterfv", + "glBindVertexBuffer", + "glVertexAttribFormat", + "glVertexAttribIFormat", + "glVertexAttribBinding", + "glVertexBindingDivisor", + "glBlendBarrierKHR", + "glDebugMessageControlKHR", + "glDebugMessageInsertKHR", + "glDebugMessageCallbackKHR", + "glGetDebugMessageLogKHR", + "glPushDebugGroupKHR", + "glPopDebugGroupKHR", + "glObjectLabelKHR", + "glGetObjectLabelKHR", + "glObjectPtrLabelKHR", + "glGetObjectPtrLabelKHR", + "glGetPointervKHR", + "glEGLImageTargetTexture2D", + "glEGLImageTargetRenderbuf", + "glGetProgramBinaryOES", + "glProgramBinaryOES", + "glMapBufferOES", + "glUnmapBufferOES", + "glGetBufferPointervOES", + "glMinSampleShadingOES", + "glTexImage3DOES", + "glTexSubImage3DOES", + "glCopyTexSubImage3DOES", + "glCompressedTexImage3DOES", + "glCompressedTexSubImage3D", + "glFramebufferTexture3DOES", + "glTexStorage3DMultisample", + "glBindVertexArrayOES", + "glDeleteVertexArraysOES", + "glGenVertexArraysOES", + "glIsVertexArrayOES", + "glGetPerfMonitorGroupsAMD", + "glGetPerfMonitorCountersA", + "glGetPerfMonitorGroupStri", + "glGetPerfMonitorCounterSt", + "glGetPerfMonitorCounterIn", + "glGenPerfMonitorsAMD", + "glDeletePerfMonitorsAMD", + "glSelectPerfMonitorCounte", + "glBeginPerfMonitorAMD", + "glEndPerfMonitorAMD", + "glGetPerfMonitorCounterDa", + "glBlitFramebufferANGLE", + "glRenderbufferStorageMult", + "glDrawArraysInstancedANGL", + "glDrawElementsInstancedAN", + "glVertexAttribDivisorANGL", + "glGetTranslatedShaderSour", + "glCopyTextureLevelsAPPLE", + "glRenderbufferStorageMult", + "glResolveMultisampleFrame", + "glFenceSyncAPPLE", + "glIsSyncAPPLE", + "glDeleteSyncAPPLE", + "glClientWaitSyncAPPLE", + "glWaitSyncAPPLE", + "glGetInteger64vAPPLE", + "glGetSyncivAPPLE", + "glCopyImageSubDataEXT", + "glLabelObjectEXT", + "glGetObjectLabelEXT", + "glInsertEventMarkerEXT", + "glPushGroupMarkerEXT", + "glPopGroupMarkerEXT", + "glDiscardFramebufferEXT", + "glGenQueriesEXT", + "glDeleteQueriesEXT", + "glIsQueryEXT", + "glBeginQueryEXT", + "glEndQueryEXT", + "glQueryCounterEXT", + "glGetQueryivEXT", + "glGetQueryObjectivEXT", + "glGetQueryObjectuivEXT", + "glGetQueryObjecti64vEXT", + "glGetQueryObjectui64vEXT", + "glDrawBuffersEXT", + "glEnableiEXT", + "glDisableiEXT", + "glBlendEquationiEXT", + "glBlendEquationSeparateiE", + "glBlendFunciEXT", + "glBlendFuncSeparateiEXT", + "glColorMaskiEXT", + "glIsEnablediEXT", + "glDrawArraysInstancedEXT", + "glDrawElementsInstancedEX", + "glFramebufferTextureEXT", + "glVertexAttribDivisorEXT", + "glMapBufferRangeEXT", + "glFlushMappedBufferRangeE", + "glMultiDrawArraysEXT", + "glMultiDrawElementsEXT", + "glRenderbufferStorageMult", + "glFramebufferTexture2DMul", + "glReadBufferIndexedEXT", + "glDrawBuffersIndexedEXT", + "glGetIntegeri_vEXT", + "glPrimitiveBoundingBoxEXT", + "glGetGraphicsResetStatusE", + "glReadnPixelsEXT", + "glGetnUniformfvEXT", + "glGetnUniformivEXT", + "glActiveShaderProgramEXT", + "glBindProgramPipelineEXT", + "glCreateShaderProgramvEXT", + "glDeleteProgramPipelinesE", + "glGenProgramPipelinesEXT", + "glGetProgramPipelineInfoL", + "glGetProgramPipelineivEXT", + "glIsProgramPipelineEXT", + "glProgramParameteriEXT", + "glProgramUniform1fEXT", + "glProgramUniform1fvEXT", + "glProgramUniform1iEXT", + "glProgramUniform1ivEXT", + "glProgramUniform2fEXT", + "glProgramUniform2fvEXT", + "glProgramUniform2iEXT", + "glProgramUniform2ivEXT", + "glProgramUniform3fEXT", + "glProgramUniform3fvEXT", + "glProgramUniform3iEXT", + "glProgramUniform3ivEXT", + "glProgramUniform4fEXT", + "glProgramUniform4fvEXT", + "glProgramUniform4iEXT", + "glProgramUniform4ivEXT", + "glProgramUniformMatrix2fv", + "glProgramUniformMatrix3fv", + "glProgramUniformMatrix4fv", + "glUseProgramStagesEXT", + "glValidateProgramPipeline", + "glProgramUniform1uiEXT", + "glProgramUniform2uiEXT", + "glProgramUniform3uiEXT", + "glProgramUniform4uiEXT", + "glProgramUniform1uivEXT", + "glProgramUniform2uivEXT", + "glProgramUniform3uivEXT", + "glProgramUniform4uivEXT", + "glProgramUniformMatrix2x3", + "glProgramUniformMatrix3x2", + "glProgramUniformMatrix2x4", + "glProgramUniformMatrix4x2", + "glProgramUniformMatrix3x4", + "glProgramUniformMatrix4x3", + "glPatchParameteriEXT", + "glTexParameterIivEXT", + "glTexParameterIuivEXT", + "glGetTexParameterIivEXT", + "glGetTexParameterIuivEXT", + "glSamplerParameterIivEXT", + "glSamplerParameterIuivEXT", + "glGetSamplerParameterIivE", + "glGetSamplerParameterIuiv", + "glTexBufferEXT", + "glTexBufferRangeEXT", + "glTexStorage1DEXT", + "glTexStorage2DEXT", + "glTexStorage3DEXT", + "glTextureStorage1DEXT", + "glTextureStorage2DEXT", + "glTextureStorage3DEXT", + "glTextureViewEXT", + "glRenderbufferStorageMult", + "glFramebufferTexture2DMul", + "glBeginPerfQueryINTEL", + "glCreatePerfQueryINTEL", + "glDeletePerfQueryINTEL", + "glEndPerfQueryINTEL", + "glGetFirstPerfQueryIdINTE", + "glGetNextPerfQueryIdINTEL", + "glGetPerfCounterInfoINTEL", + "glGetPerfQueryDataINTEL", + "glGetPerfQueryIdByNameINT", + "glGetPerfQueryInfoINTEL", + "glBlendParameteriNV", + "glBlendBarrierNV", + "glCopyBufferSubDataNV", + "glCoverageMaskNV", + "glCoverageOperationNV", + "glDrawBuffersNV", + "glDrawArraysInstancedNV", + "glDrawElementsInstancedNV", + "glDeleteFencesNV", + "glGenFencesNV", + "glIsFenceNV", + "glTestFenceNV", + "glGetFenceivNV", + "glFinishFenceNV", + "glSetFenceNV", + "glBlitFramebufferNV", + "glRenderbufferStorageMult", + "glVertexAttribDivisorNV", + "glUniformMatrix2x3fvNV", + "glUniformMatrix3x2fvNV", + "glUniformMatrix2x4fvNV", + "glUniformMatrix4x2fvNV", + "glUniformMatrix3x4fvNV", + "glUniformMatrix4x3fvNV", + "glReadBufferNV", + "glAlphaFuncQCOM", + "glGetDriverControlsQCOM", + "glGetDriverControlStringQ", + "glEnableDriverControlQCOM", + "glDisableDriverControlQCO", + "glExtGetTexturesQCOM", + "glExtGetBuffersQCOM", + "glExtGetRenderbuffersQCOM", + "glExtGetFramebuffersQCOM", + "glExtGetTexLevelParameter", + "glExtTexObjectStateOverri", + "glExtGetTexSubImageQCOM", + "glExtGetBufferPointervQCO", + "glExtGetShadersQCOM", + "glExtGetProgramsQCOM", + "glExtIsProgramBinaryQCOM", + "glExtGetProgramBinarySour", + "glStartTilingQCOM", + "glEndTilingQCOM", + "glGetString", + nullptr }; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 8dbcf8c..2ca2304 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,14 +1,15 @@ #include -#include -#include -#include #include #include #include #include -#include #include +#include +#include +#include #include +#include + #include "gles_symbols.h" #include "android_symbols.h" #include "egl_symbols.h" @@ -34,12 +35,15 @@ extern "C" { #include + #include "../hybris/include/hybris/dlfcn.h" #include "../hybris/include/hybris/hook.h" #include "../hybris/src/jb/linker.h" } +using namespace std; + void androidStub() { std::cout << "warn: android call\n"; } @@ -82,7 +86,6 @@ void abortLinuxHttpRequestInternal(LinuxHttpRequestInternal* requestInternal) { // TODO: Implement it } - static MinecraftGame* client; int winId = 0; @@ -209,13 +212,13 @@ void pshufb_xmm4_xmm0(); #include #include -using namespace std; int main(int argc, char *argv[]) { bool enableStackTracePrinting = true; bool workaroundAMD = false; int windowWidth = 720; int windowHeight = 480; + for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "--scale") == 0) { i++; @@ -226,9 +229,9 @@ int main(int argc, char *argv[]) { } else if (strcmp(argv[i], "-sw") == 0 || strcmp(argv[i], "--width") == 0) { i++; windowWidth = std::stoi(argv[i]); - } else if (strcmp(argv[i], "-r") == 0 || strcmp(argv[i], "--root-path") == 0) { + } else if (strcmp(argv[i], "-r") == 0 || strcmp(argv[i], "--root-dir") == 0) { i++; - rootPath = argv[i]; + setRootPath(argv[i]); } else if (strcmp(argv[i], "-ns") == 0 || strcmp(argv[i], "--no-stacktrace") == 0) { enableStackTracePrinting = false; } else if (strcmp(argv[i], "--pocket-guis") == 0) { @@ -239,7 +242,7 @@ int main(int argc, char *argv[]) { } else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { std::cout << "Help\n"; std::cout << "--help Shows this help information\n"; - std::cout << "--root-path Sets the root path for game data\n"; + std::cout << "--root-dir Sets the root path for game data\n"; std::cout << "--scale Sets the pixel scale\n"; std::cout << "--width Sets the window width\n"; std::cout << "--height Sets the window height\n"; @@ -277,11 +280,11 @@ int main(int argc, char *argv[]) { if (!loadLibrary("libc.so") || !loadLibrary("libstdc++.so") || !loadLibrary("libm.so") || !loadLibrary("libz.so")) return -1; - // load stub libraries if (!loadLibrary("libandroid.so") || !loadLibrary("liblog.so") || !loadLibrary("libEGL.so") || !loadLibrary("libGLESv2.so") || !loadLibrary("libOpenSLES.so") || !loadLibrary("libfmod.so") || !loadLibrary("libGLESv1_CM.so")) return -1; if (!loadLibrary("libmcpelauncher_mod.so")) return -1; + std::cout << "loading MCPE\n"; std::string mcpePath = getRootPath() + "libs/libminecraftpe.so"; void* handle = hybris_dlopen(mcpePath.c_str(), RTLD_LAZY); @@ -319,19 +322,6 @@ int main(int argc, char *argv[]) { std::cout << "apply patches\n"; - /* - unsigned int patchOff = (unsigned int) hybris_dlsym(handle, "_ZN12StoreFactory11createStoreER13StoreListener") + 66; - patchCallInstruction((void*) patchOff, (void*) &createStoreHookFunc, false); - - patchOff = (unsigned int) hybris_dlsym(handle, "_ZN11HTTPRequestC2ERKSs") + 154; - patchCallInstruction((void*) patchOff, (void*) &constructLinuxHttpRequestInternal, false); - - patchOff = (unsigned int) hybris_dlsym(handle, "_ZN11HTTPRequest4sendEv") + 26; - patchCallInstruction((void*) patchOff, (void*) &sendLinuxHttpRequestInternal, false); - - patchOff = (unsigned int) hybris_dlsym(handle, "_ZN11HTTPRequest5abortEv") + 26; - patchCallInstruction((void*) patchOff, (void*) &abortLinuxHttpRequestInternal, false); - */ unsigned int patchOff = (unsigned int) hybris_dlsym(handle, "_ZN12AndroidStore21createGooglePlayStoreERKSsR13StoreListener"); patchCallInstruction((void*) patchOff, (void*) &createStoreHookFunc, true); @@ -369,11 +359,7 @@ int main(int argc, char *argv[]) { linuxHttpRequestInternalVtable[0] = (void*) &LinuxHttpRequestInternal::destroy; linuxHttpRequestInternalVtable[1] = (void*) &LinuxHttpRequestInternal::destroy; - if (workaroundAMD) {/* - patchOff = (unsigned int) hybris_dlsym(handle, "_ZN21BlockTessallatorCache5resetER11BlockSourceRK8BlockPos") + - (0x40AD97 - 0x40ACD0); - for (unsigned int i = 0; i < 0x40ADA0 - 0x40AD97; i++) - ((char *) (void *) patchOff)[i] = 0x90;*/ + if (workaroundAMD) { patchOff = (unsigned int) hybris_dlsym(handle, "_ZN21BlockTessallatorCache5resetER11BlockSourceRK8BlockPos") + (0x40AD9B - 0x40ACD0); patchCallInstruction((void*) patchOff, (void*) &pshufb_xmm4_xmm0, false); } @@ -460,7 +446,6 @@ int main(int argc, char *argv[]) { std::cout << "initialized display\n"; // init - //(*AppPlatform::_singleton)->_fireAppFocusGained(); client->setRenderingSize(windowWidth, windowHeight); client->setUISizeAndScale(windowWidth, windowHeight, pixelSize); eglutMainLoop(); diff --git a/src/server.cpp b/src/server.cpp index efa8bde..b3d92bd 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1,9 +1,10 @@ #include -#include -#include -#include -#include #include +#include +#include +#include +#include + #include "gles_symbols.h" #include "android_symbols.h" #include "egl_symbols.h" @@ -34,59 +35,54 @@ #include "../mcpe/ExtendedCertificate.h" extern "C" { - #include "../hybris/include/hybris/dlfcn.h" #include "../hybris/include/hybris/hook.h" #include "../hybris/src/jb/linker.h" - } +using namespace std; + void stubFunc() {} -void detachFromJavaStub() { - std::cout << "detach from java\n"; -} - void* getJVMEnvStub() { std::cout << "getjvmenv\n"; return nullptr; } -int getDifficultyStub() { +int getDifficulty() { return ServerProperties::instance().getInt("difficulty", 0); } -int getGameTypeStub() { +int getGameMode() { return ServerProperties::instance().getInt("gamemode", 0); } -void handleTextPacketStub() { +void suppressChatHandling() { std::cout << "chat message\n"; } -mce::UUID getIdentityStub(ExtendedCertificate* cert) { - mcpe::string name = ExtendedCertificate::ExtendedCertificate_getIdentityName(cert); +mce::UUID getOfflineIdentity(ExtendedCertificate* cert) { + mcpe::string name = ExtendedCertificate::getIdentityName(cert); return mce::UUID::fromText(std::string(name.c_str())); } -using namespace std; - int main(int argc, char *argv[]) { for (int i = 1; i < argc; i++) { - if ((strcmp(argv[i], "-r") == 0 || strcmp(argv[i], "--root-path") == 0) && i + 1 < argc) { - rootPath = argv[i + 1]; + if ((strcmp(argv[i], "-r") == 0 || strcmp(argv[i], "--root-dir") == 0) && i + 1 < argc) { + setRootPath(argv[i+1]); i++; } } - if (rootPath.empty()) { + + if (getRootPath().empty()) { std::cout << "[*] No root path set, the current directory will be used to store game data\n"; - std::cout << "[*] It is recommended to set one by using the `--root-path` argument\n"; + std::cout << "[*] It is recommended to set one by using the `--root-dir` argument\n"; } // load properties - std::ifstream propertiesFile(getRootPath() + "server.properties"); - if (propertiesFile) { - ServerProperties::instance().load(propertiesFile); + std::ifstream properties(getRootPath() + "server.properties"); + if (properties) { + ServerProperties::instance().load(properties); } else { std::cerr << "[!] No server.properties file found, cannot continue\n"; return 1; @@ -111,11 +107,11 @@ int main(int argc, char *argv[]) { if (!loadLibrary("libc.so") || !loadLibrary("libstdc++.so") || !loadLibrary("libm.so") || !loadLibrary("libz.so")) return -1; - // load stub libraries if (!loadLibrary("libandroid.so") || !loadLibrary("liblog.so") || !loadLibrary("libEGL.so") || !loadLibrary("libGLESv2.so") || !loadLibrary("libOpenSLES.so") || !loadLibrary("libfmod.so") || !loadLibrary("libGLESv1_CM.so")) return -1; if (!loadLibrary("libmcpelauncher_mod.so")) return -1; + std::cout << "loading MCPE\n"; std::string mcpePath = getRootPath() + "libs/libminecraftpe.so"; void* handle = hybris_dlopen(mcpePath.c_str(), RTLD_LAZY); @@ -127,11 +123,10 @@ int main(int argc, char *argv[]) { unsigned int libBase = ((soinfo*) handle)->base; std::cout << "loaded MCPE (at " << libBase << ")\n"; - std::cout << "apply patches\n"; unsigned int patchOff = (unsigned int) hybris_dlsym(handle, "_ZN9crossplat10threadpool16detach_from_javaEPv"); - patchCallInstruction((void*) patchOff, (void*) &detachFromJavaStub, true); + patchCallInstruction((void*) patchOff, (void*) &stubFunc, true); patchOff = (unsigned int) hybris_dlsym(handle, "_ZN9crossplat11get_jvm_envEv"); patchCallInstruction((void*) patchOff, (void*) &getJVMEnvStub, true); @@ -141,13 +136,13 @@ int main(int argc, char *argv[]) { // at this point it's easier to just do this than spend 3 more days debugging patchOff = (unsigned int) hybris_dlsym(handle, "_ZNK5Level13getDifficultyEv"); - patchCallInstruction((void*) patchOff, (void*) &getDifficultyStub, true); + patchCallInstruction((void*) patchOff, (void*) &getDifficulty, true); patchOff = (unsigned int) hybris_dlsym(handle, "_ZNK9LevelData11getGameTypeEv"); - patchCallInstruction((void*) patchOff, (void*) &getGameTypeStub, true); + patchCallInstruction((void*) patchOff, (void*) &getGameMode, true); patchOff = (unsigned int) hybris_dlsym(handle, "_ZN20ServerNetworkHandler6handleERK17NetworkIdentifierRK10TextPacket"); - patchCallInstruction((void*) patchOff, (void*) &handleTextPacketStub, true); + patchCallInstruction((void*) patchOff, (void*) &suppressChatHandling, true); // murdle: this is a patch to make player data save via your username // this makes it easy to just switch devices and have the same inventory and position @@ -155,7 +150,7 @@ int main(int argc, char *argv[]) { bool onlineMode = ServerProperties::instance().getBool("online-mode", false); if (!onlineMode) { patchOff = (unsigned int) hybris_dlsym(handle, "_ZN19ExtendedCertificate11getIdentityERK11Certificate"); - patchCallInstruction((void*) patchOff, (void*) &getIdentityStub, true); + patchCallInstruction((void*) patchOff, (void*) &getOfflineIdentity, true); } mcpe::string::empty = (mcpe::string*) hybris_dlsym(handle, "_ZN4Util12EMPTY_STRINGE"); @@ -198,26 +193,28 @@ int main(int argc, char *argv[]) { ((void*&) AppResourceLoader::AppResourceLoader_construct) = hybris_dlsym(handle, "_ZN17AppResourceLoaderC2ESt8functionIFSsvEE"); ((void*&) PackManifestFactory::PackManifestFactory_construct) = hybris_dlsym(handle, "_ZN19PackManifestFactoryC2ER17MinecraftEventing"); + ((void*&) ResourcePackManager::ResourcePackManager_construct) = hybris_dlsym(handle, "_ZN19ResourcePackManagerC2ESt8functionIFSsvEE"); ((void*&) ResourcePackManager::ResourcePackManager_setStack) = hybris_dlsym(handle, "_ZN19ResourcePackManager8setStackESt10unique_ptrI17ResourcePackStackSt14default_deleteIS1_EE21ResourcePackStackTypeb"); - - ((void*&) ResourcePackStack::vtable_sym) = hybris_dlsym(handle, "_ZTV17ResourcePackStack"); - ((void*&) ResourcePackStack::ResourcePackStack_add) = hybris_dlsym(handle, "_ZN17ResourcePackStack3addEP12ResourcePackRK22ResourcePackRepositoryb"); ((void*&) ResourcePackRepository::ResourcePackRepository_construct) = hybris_dlsym(handle, "_ZN22ResourcePackRepositoryC2ER17MinecraftEventingR19PackManifestFactoryP18EntitlementManagerP15FilePathManager"); + + ((void*&) ResourcePackStack::ResourcePackStack_add) = hybris_dlsym(handle, "_ZN17ResourcePackStack3addEP12ResourcePackRK22ResourcePackRepositoryb"); + ((void*&) ResourcePackStack::vtable_sym) = hybris_dlsym(handle, "_ZTV17ResourcePackStack"); ((void*&) ServerInstance::ServerInstance_construct) = hybris_dlsym(handle, "_ZN14ServerInstanceC2ER13IMinecraftAppRK9WhitelistRK7OpsListP15FilePathManagerNSt6chrono8durationIxSt5ratioILx1ELx1EEEESsSsSsSsSs13LevelSettingsRN9minecraft3api3ApiEibiiibRKSt6vectorISsSaISsEESsbRKN3mce4UUIDER17MinecraftEventingR22ResourcePackRepositoryR19ResourcePackManagerPSX_"); ((void*&) ServerInstance::ServerInstance_update) = hybris_dlsym(handle, "_ZN14ServerInstance6updateEv"); - ((void*&) Scheduler::singleton) = hybris_dlsym(handle, "_ZN9Scheduler9singletonEv"); ((void*&) Scheduler::Scheduler_processCoroutines) = hybris_dlsym(handle, "_ZN9Scheduler17processCoroutinesEd"); + ((void*&) Scheduler::singleton) = hybris_dlsym(handle, "_ZN9Scheduler9singletonEv"); std::cout << "init app platform vtable\n"; LinuxAppPlatform::initVtable(handle); + std::cout << "init app platform\n"; LinuxAppPlatform* platform = new LinuxAppPlatform(); - std::cout << "app platform initialized\n"; platform->initialize(); + std::cout << "app platform initialized\n"; Whitelist whitelist; OpsList ops;