diff --git a/iclibs/android.jar b/iclibs/android.jar index afb48d3d..d901a22c 100644 Binary files a/iclibs/android.jar and b/iclibs/android.jar differ diff --git a/src/main/java/com/reider745/InnerCoreServer.java b/src/main/java/com/reider745/InnerCoreServer.java index c85ad233..5e67a7e9 100644 --- a/src/main/java/com/reider745/InnerCoreServer.java +++ b/src/main/java/com/reider745/InnerCoreServer.java @@ -136,9 +136,11 @@ public class InnerCoreServer { NetworkEntity.loadClass(); IdConversionMap.loadClass(); + JSONObject object = new JSONObject(); object.put("fix", server.getPropertyBoolean("inner_core.legacy_inventory", true)); Network.getSingleton().addServerInitializationPacket("server_fixed.inventory", (client) -> object, (v ,v1) -> {}); + Network.getSingleton().addServerInitializationPacket("system.dedicated_server", (client) -> object, (v ,v1) -> {}); RuntimeIdDataPacketSender.loadClass(); Network.getSingleton().startLanServer(); diff --git a/src/main/java/com/reider745/api/hooks/RebuildJavadoc.java b/src/main/java/com/reider745/api/hooks/RebuildJavadoc.java new file mode 100644 index 00000000..5808e9fb --- /dev/null +++ b/src/main/java/com/reider745/api/hooks/RebuildJavadoc.java @@ -0,0 +1,119 @@ +package com.reider745.api.hooks; + +import javassist.*; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +/* +Крч класс автоматически пере собирает javado, ставля на все методы загшлушки + */ +public class RebuildJavadoc { + private static ArrayList getAllClassesFromJar(File jarPath) { + ArrayList classNames = new ArrayList<>(); + try { + JarFile jarFile = new JarFile(jarPath); + java.util.Enumeration entries = jarFile.entries(); + while (entries.hasMoreElements()) { + JarEntry jarEntry = entries.nextElement(); + if (jarEntry.getName().endsWith(".class")) { + String className = jarEntry.getName().replace('/', '.').replace(".class", ""); + classNames.add(className); + } + } + jarFile.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return classNames; + } + + private static String getValue(CtClass retType){ + String retTypeValue = "null"; + switch (retType.getName()) { + case "int" -> retTypeValue = "0"; + case "double" -> retTypeValue = "0.0d"; + case "float" -> retTypeValue = "0.0f"; + case "boolean" -> retTypeValue = "false"; + case "byte" -> retTypeValue = "0"; + case "short" -> retTypeValue = "0"; + case "long" -> retTypeValue = "0l"; + case "char" -> retTypeValue = "'f'"; + case "void" -> retTypeValue = null; + } + return retTypeValue; + } + + private static void rebuildClass(CtClass ctClass, String nameOutput) throws CannotCompileException, IOException, NotFoundException { + for (CtMethod method : ctClass.getDeclaredMethods()) { + CtClass retType = method.getReturnType(); + + String retTypeValue = "null"; + switch (retType.getName()) { + case "int" -> retTypeValue = "0"; + case "double" -> retTypeValue = "0.0d"; + case "float" -> retTypeValue = "0.0f"; + case "boolean" -> retTypeValue = "false"; + case "byte" -> retTypeValue = "0"; + case "short" -> retTypeValue = "0"; + case "long" -> retTypeValue = "0l"; + case "char" -> retTypeValue = "'f'"; + case "void" -> retTypeValue = null; + } + String code = retTypeValue != null ? "return "+retTypeValue+";" : "String randomName = \"Fuck you\";"; + method.setBody(code); + } + String args = ""; + CtClass superClass = ctClass.getSuperclass(); + CtClass[] types = superClass != null ? superClass.getConstructors()[0].getParameterTypes() : new CtClass[]{}; + for (int i = 1; i <= types.length; i++) { + if(args.equals("")) + args += getValue(types[i-1]); + else + args +=","+getValue(types[i-1]); + } + for(CtConstructor constructor : ctClass.getDeclaredConstructors()) { + if(superClass != null) + constructor.setBody("super(" + args + ");"); + else + constructor.setBody("String randomName = \"Fuck you\";"); + } + ctClass.writeFile(nameOutput); + } + + private static void rebuild(File jar, String nameOutput){ + try{ + final URLClassLoader loader = new URLClassLoader(new URL[]{jar.toURI().toURL()}); + final LoaderClassPath loaderClassPath = new LoaderClassPath(loader); + + final ClassPool classPool = new ClassPool(); + classPool.insertClassPath(loaderClassPath); + + + ArrayList classes = getAllClassesFromJar(jar); + float count = 0; + float size = classes.size(); + for (String path : classes) { + if(!path.startsWith("java.") && !path.startsWith("javax.")) + rebuildClass(classPool.get(path), nameOutput); + count++; + if(count % 100 == 0) + System.out.println(count/size*100+"%"); + } + }catch (Exception e){ + e.printStackTrace(); + } + + } + + public static void main(String[] args) { + rebuild(new File("C:\\vs\\ZotCoreLoader_2\\iclibs\\android.jar"),"output"); + } +} diff --git a/src/main/java/com/reider745/block/CustomBlock.java b/src/main/java/com/reider745/block/CustomBlock.java index 95544492..31565530 100644 --- a/src/main/java/com/reider745/block/CustomBlock.java +++ b/src/main/java/com/reider745/block/CustomBlock.java @@ -24,12 +24,12 @@ public class CustomBlock extends BlockSolidMeta implements RandomTick { Block.list[id] = block.getClass(); //blocks.put(id+":"+data, block); int fullId = (id << DATA_BITS) | data; - fullList[fullId] = block; + Block.fullList[fullId] = block; Block.hasMeta[id] = true; Block.solid[id] = block.isSolid(); Block.transparent[id] = block.isTransparent(); - hardness[id] = block.getHardness(); + Block.hardness[id] = block.getHardness(); Block.light[id] = block.getLightLevel(); boolean[] randomTickBlocks = ReflectHelper.getField(Level.class, "randomTickBlocks"); diff --git a/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeWorkbench.java b/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeWorkbench.java index 9c698d06..1ec11161 100644 --- a/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeWorkbench.java +++ b/src/main/java/com/zhekasmirnov/apparatus/mcpe/NativeWorkbench.java @@ -47,7 +47,7 @@ public class NativeWorkbench { } private static ArrayList recipes = new ArrayList<>(); private static void addShapedRecipe(int resultId, int resultCount, int resultData, long resultExtraPtr, String[] pattern, int[] ingredients){ - if(resultId == 0){ + /*if(resultId == 0){ Logger.error("Recipe result id 0"); return; } @@ -58,7 +58,7 @@ public class NativeWorkbench { final HashMap ingredients_ = new HashMap<>(); for(int i = 0;i < ingredients.length;i+=3) ingredients_.put((char) ingredients[i], Item.get(ingredients[i+1], ingredients[i+2])); - recipes.add(new RecipeRegistry(resultId, resultCount, resultData, resultExtraPtr, pattern, ingredients_)); + recipes.add(new RecipeRegistry(resultId, resultCount, resultData, resultExtraPtr, pattern, ingredients_));*/ } public static void addShapedRecipe(ItemStack result, String[] pattern, int[] ingredients) { diff --git a/src/main/java/com/zhekasmirnov/innercore/api/mod/API.java b/src/main/java/com/zhekasmirnov/innercore/api/mod/API.java index b7468d68..9621af05 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/mod/API.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/mod/API.java @@ -15,6 +15,7 @@ import com.zhekasmirnov.innercore.mod.executable.Compiler; import com.zhekasmirnov.innercore.mod.executable.Executable; import org.mozilla.javascript.Function; import org.mozilla.javascript.NativeJavaClass; +import org.mozilla.javascript.NativeJavaPackage; import org.mozilla.javascript.ScriptableObject; import org.mozilla.javascript.annotations.JSFunction; import org.mozilla.javascript.annotations.JSStaticFunction; @@ -94,6 +95,7 @@ public abstract class API extends ScriptableObject { public void injectIntoScope(ScriptableObject scope) { injectIntoScope(scope, null); + scope.put("android", scope, new NativeJavaPackage("android")); } private static HashMap> getAllClassMethods(Class clazz, List filter) { diff --git a/src/main/java/com/zhekasmirnov/innercore/api/mod/ui/window/UIWindowGroup.java b/src/main/java/com/zhekasmirnov/innercore/api/mod/ui/window/UIWindowGroup.java index 0921431e..997f709f 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/mod/ui/window/UIWindowGroup.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/mod/ui/window/UIWindowGroup.java @@ -65,7 +65,7 @@ public class UIWindowGroup implements IWindow { } public UIWindow getWindow(String name) { - return windowByName.get(name); + return new UIWindow((UIWindowLocation) null); } public ScriptableObject getWindowContent(String name) { diff --git a/src/main/java/com/zhekasmirnov/innercore/utils/FileTools.java b/src/main/java/com/zhekasmirnov/innercore/utils/FileTools.java index 51bf5aad..181bfe80 100644 --- a/src/main/java/com/zhekasmirnov/innercore/utils/FileTools.java +++ b/src/main/java/com/zhekasmirnov/innercore/utils/FileTools.java @@ -159,7 +159,10 @@ public class FileTools { public static boolean assureFileDir(File file) { String path = file.getAbsolutePath(); - String dir = path.substring(0, path.lastIndexOf("/")); + int index = path.lastIndexOf("/"); + if(index == -1) + index = path.lastIndexOf("\\"); + String dir = path.substring(0, index); return assureDir(dir); }