diff --git a/src/main/java/com/reider745/InnerCoreServer.java b/src/main/java/com/reider745/InnerCoreServer.java index 3839cd56..fe608383 100644 --- a/src/main/java/com/reider745/InnerCoreServer.java +++ b/src/main/java/com/reider745/InnerCoreServer.java @@ -52,6 +52,7 @@ public class InnerCoreServer { public static String PATH; public static Server server; + public static InnerCoreServer ic_server; public static String getStringParam(String name) { return switch (name) { @@ -71,11 +72,15 @@ public class InnerCoreServer { private static final ClassLoader classLoader = InnerCoreServer.class.getClassLoader(); - private static File cloneFile(String name) { + public static File cloneFile(String name) { + return cloneFile(name, name); + } + + public static File cloneFile(String name, String path) { try { final File file = new File(name); if (!file.exists()) { - BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(name)); + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path)); BufferedInputStream bis = new BufferedInputStream(classLoader.getResourceAsStream(name)); bos.write(bis.readAllBytes()); @@ -199,6 +204,7 @@ public class InnerCoreServer { PATH = server.getDataPath(); InnerCoreServer.server = server; + InnerCoreServer.ic_server = this; ICLog.server = server; com.zhekasmirnov.horizon.runtime.logger.Logger.server = server; @@ -218,7 +224,7 @@ public class InnerCoreServer { final File innercoreDirectory = new File(PATH, "innercore"); if (!innercoreDirectory.exists()) { server.getLogger().info("Extracting internal package..."); - final File zipFile = cloneFile("innercore.zip"); + final File zipFile = cloneFile("innercore.zip");//но у нас нет в ресурсах innercore.zip :D if (zipFile != null) { unzip(new ZipFile(zipFile), PATH); try { @@ -251,7 +257,6 @@ public class InnerCoreServer { }); RuntimeIdDataPacketSender.loadClass(); - Network.getSingleton().startLanServer(); NetworkJsAdapter.instance = new NetworkJsAdapter(Network.getSingleton()); Thread.currentThread().setPriority(Thread.MAX_PRIORITY); @@ -292,9 +297,6 @@ public class InnerCoreServer { public void start() { } - public void tick() { - NativeCallback.onTick(); - } public static int getVersionCode() { return server.getPropertyInt("inner-core-version", 152); diff --git a/src/main/java/com/reider745/api/hooks/JarEditor.java b/src/main/java/com/reider745/api/hooks/JarEditor.java index 458f7fd2..019fb108 100644 --- a/src/main/java/com/reider745/api/hooks/JarEditor.java +++ b/src/main/java/com/reider745/api/hooks/JarEditor.java @@ -6,6 +6,7 @@ import javassist.bytecode.*; import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; +import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; @@ -16,7 +17,7 @@ public class JarEditor { private final ClassPool cp = new ClassPool(); private final ClassPath ccp; - public JarEditor() throws Exception { + public JarEditor() { loader = new Loader(JarEditor.class.getClassLoader(), cp); ccp = new LoaderClassPath(loader); @@ -121,52 +122,6 @@ public class JarEditor { }); } - public JarEditor registerHooksForClass(Class clazz) - throws InstantiationException, IllegalAccessException, NotFoundException, NoSuchMethodException, - SecurityException, IllegalArgumentException, InvocationTargetException { - Constructor hookConstructor = clazz.getDeclaredConstructor(new Class[0]); - try { - hookConstructor.setAccessible(true); - } catch (SecurityException e) { - } - HookClass instance = (HookClass) hookConstructor.newInstance(); - Annotation[] annotatedsClass = clazz.getAnnotations(); - for (Annotation annotationClass : annotatedsClass) - if (annotationClass instanceof Hooks hooks) { - String className = getClassName(hooks.class_name()); - System.out.println("=====" + className + "====="); - Method[] methods = clazz.getMethods(); - - for (Method method : methods) { - Annotation[] annotationsMethod = method.getAnnotations(); - - for (Annotation annotationMethod : annotationsMethod) - if (annotationMethod instanceof Inject inject) { - String method_name = inject.method(); - String className_ = getClassName(inject.class_name()); - String sig = inject.signature(); - - this.addHook(className_.equals("-1") ? className : className_, - method_name.equals("-1") ? method.getName() : method_name, sig, method, - inject.type_hook(), isController(method), inject.arguments_map()); - } else if (annotationMethod instanceof Injects inject) { - String method_name = inject.method(); - String className_ = getClassName(inject.class_name()); - String[] sigs = inject.signature(); - String className__ = className_.equals("-1") ? className : className_; - - for (String sig : sigs) - this.addHook(className__, method_name.equals("-1") ? method.getName() : method_name, - sig, method, inject.type_hook(), isController(method), inject.arguments_map()); - } - } - if (!className.equals("-1")) - instance.init(cp.get(className)); - replaceField(className, instance); - } - return this; - } - private String getCode(Method replaced, String[] arguments, String[] argumentTypes, String returnType, TypeHook typeHook, boolean isStatic, boolean controller, ArgumentTypes argumentMapMode) { String funcName = replaced.getDeclaringClass().getName() + "." + replaced.getName(); diff --git a/src/main/java/com/reider745/hooks/RuntimeItemsHooks.java b/src/main/java/com/reider745/hooks/RuntimeItemsHooks.java index 5f322df0..e2f46652 100644 --- a/src/main/java/com/reider745/hooks/RuntimeItemsHooks.java +++ b/src/main/java/com/reider745/hooks/RuntimeItemsHooks.java @@ -67,16 +67,17 @@ public class RuntimeItemsHooks implements HookClass { int fullId = RuntimeItems.getFullId(id, 0); int legacyId = id; int runtimeId = id; + boolean hasData = CustomItem.hasData(id); runtimeId2Name.put(runtimeId, name); name2RuntimeId.put(name, runtimeId); - RuntimeItemMapping.LegacyEntry legacyEntry = new RuntimeItemMapping.LegacyEntry(legacyId, false, 0); + RuntimeItemMapping.LegacyEntry legacyEntry = new RuntimeItemMapping.LegacyEntry(legacyId, hasData, 0); runtime2Legacy.put(runtimeId, legacyEntry); identifier2Legacy.put(name, legacyEntry); - legacy2Runtime.put(fullId, new RuntimeItemMapping.RuntimeEntry(name, runtimeId, false)); + legacy2Runtime.put(fullId, new RuntimeItemMapping.RuntimeEntry(name, runtimeId, hasData)); }); CustomBlock.customBlocks.forEach((name, id) -> { diff --git a/src/main/java/com/reider745/hooks/ServerHooks.java b/src/main/java/com/reider745/hooks/ServerHooks.java index c18bb2fe..c475156d 100644 --- a/src/main/java/com/reider745/hooks/ServerHooks.java +++ b/src/main/java/com/reider745/hooks/ServerHooks.java @@ -7,6 +7,7 @@ import com.reider745.Main; import com.reider745.api.hooks.HookClass; import com.reider745.api.hooks.annotation.Inject; import com.reider745.api.hooks.annotation.Hooks; +import com.zhekasmirnov.innercore.api.NativeCallback; @Hooks(class_name = "cn.nukkit.Server") public class ServerHooks implements HookClass { @@ -52,7 +53,7 @@ public class ServerHooks implements HookClass { @Inject public static void checkTickUpdates(Server server, int tick) { - Main.innerCoreServer.tick(); + NativeCallback.onTick(); } @Inject diff --git a/src/main/java/com/reider745/item/CustomItem.java b/src/main/java/com/reider745/item/CustomItem.java index 8e61211f..f382577d 100644 --- a/src/main/java/com/reider745/item/CustomItem.java +++ b/src/main/java/com/reider745/item/CustomItem.java @@ -200,4 +200,10 @@ public class CustomItem { manager.put(PropertiesNames.Armors.KNOCKBACK_RESIST, knockbackResist); return manager; } + + public static boolean hasData(int id) { + CustomManager manager = getItemManager(id); + if(manager == null) return false; + return manager.get(PropertiesNames.MAX_DAMAGE, 0) > 0; + } } diff --git a/src/main/java/com/reider745/world/BlockSourceMethods.java b/src/main/java/com/reider745/world/BlockSourceMethods.java index 3257eceb..9195e9e4 100644 --- a/src/main/java/com/reider745/world/BlockSourceMethods.java +++ b/src/main/java/com/reider745/world/BlockSourceMethods.java @@ -55,10 +55,10 @@ public class BlockSourceMethods { Block block = pointer.getBlock(x, y, z); pointer.setBlock(x, y, z, Block.get(0), update, update); if (destroyParticles) { - Map players = pointer.getChunkPlayers((int) x >> 4, (int) z >> 4); + Map players = pointer.getChunkPlayers( x >> 4, z >> 4); pointer.addParticle(new DestroyBlockParticle(block.add(0.5), block), players.values()); } - if (drop) { + if (drop && block.getId() < 8000) { Item[] drops = block.getDrops(Item.get(0)); Vector3 pos = new Vector3(x, y, z); for (Item item : drops) @@ -108,8 +108,11 @@ public class BlockSourceMethods { return 0; } - public static int getBrightness(Level Level, int x, int y, int z) { - return 0; + public static int getBrightness(Level level, int x, int y, int z) { + int time = level.getTime();; + if(!(time >= Level.TIME_NIGHT && time < Level.TIME_SUNRISE) && level.canBlockSeeSky(new Vector3(x, y, z))) + return 15; + return level.getBlockLightAt(x, y, z); } public static int getBlockData(Level pointer, int x, int y, int z) { diff --git a/src/main/java/com/zhekasmirnov/apparatus/multiplayer/Network.java b/src/main/java/com/zhekasmirnov/apparatus/multiplayer/Network.java index 5099287c..ace668de 100644 --- a/src/main/java/com/zhekasmirnov/apparatus/multiplayer/Network.java +++ b/src/main/java/com/zhekasmirnov/apparatus/multiplayer/Network.java @@ -110,7 +110,7 @@ public class Network { } public void startServer(int port) { - shutdown(); + //shutdown(); getConfig().updateFromEngineConfig(); server.start(port); } @@ -189,7 +189,7 @@ public class Network { } public void startLanServer(int port) { - shutdown(); + //shutdown(); NativeNetworking.NetworkLoopHandler handler = new NativeNetworking.NetworkLoopHandler( NativeNetworking.NetworkLoopHandler.GLOBAL_HANDLER | NativeNetworking.NetworkLoopHandler.SERVER_HANDLER | NativeNetworking.NetworkLoopHandler.CLIENT_HANDLER diff --git a/src/main/java/com/zhekasmirnov/apparatus/multiplayer/util/entity/NetworkEntity.java b/src/main/java/com/zhekasmirnov/apparatus/multiplayer/util/entity/NetworkEntity.java index a67d7d66..b396cd6e 100644 --- a/src/main/java/com/zhekasmirnov/apparatus/multiplayer/util/entity/NetworkEntity.java +++ b/src/main/java/com/zhekasmirnov/apparatus/multiplayer/util/entity/NetworkEntity.java @@ -27,67 +27,6 @@ public class NetworkEntity { } static { - Network.getSingleton().addClientPacket("system.entity.add", (Object data, String meta, Class dataType) -> { - synchronized (clientEntities) { - String[] metaArr = meta.split("#"); - if (metaArr.length == 2) { - NetworkEntityType entityType = NetworkEntityType.getByName(metaArr[0]); - String entityName = metaArr[1]; - if (entityType != null && entityName.length() > 0) { - if (!clientEntities.containsKey(entityName)) { - NetworkEntity entity = new NetworkEntity(entityType, null, entityName, false); - clientEntities.put(entityName, entity); - entity.getClientExecutor().add(() -> entityType.onClientEntityAdded(entity, data)); - } else { - if (entityType.isDuplicateAddPacketAllowed()) { - NetworkEntity entity = clientEntities.get(entityName); - if (entity != null) { - entity.getClientExecutor().add(() -> entityType.onClientEntityAdded(entity, data)); - } - } else { - Logger.debug("duplicate add packet received for network entity " + entityName + ", it will be ignored"); - } - } - } - } - } - }, null); - - Network.getSingleton().addClientPacket("system.entity.remove", (Object data, String meta, Class dataType) -> { - synchronized (clientEntities) { - NetworkEntity entity = clientEntities.get(meta); - if (entity != null) { - entity.isRemoved = true; - entity.getClientExecutor().add(() -> entity.type.onClientEntityRemoved(entity, data)); - clientEntities.remove(meta); - } - } - }, null); // use entity executor instead - - Network.getSingleton().addClientPacket("system.entity.packet", (Object data, String meta, Class dataType) -> { - synchronized (clientEntities) { - int sepIndex = meta.indexOf('#'); - if (sepIndex != -1) { - NetworkEntity entity = clientEntities.get(meta.substring(0, sepIndex)); - String packetName = meta.substring(sepIndex + 1); - sepIndex = packetName.indexOf('#'); - if (sepIndex != -1) { - meta = packetName.substring(sepIndex + 1); - packetName = packetName.substring(0, sepIndex); - } else { - meta = null; - } - if (entity != null) { - String finalPacketName = packetName; - String finalMeta = meta; - entity.getClientExecutor().add(() -> { - entity.type.onClientPacket(entity, finalPacketName, data, finalMeta); - }); - } - } - } - }, null); // use entity executor instead - Network.getSingleton().addServerPacket("system.entity.packet", (ConnectedClient client, Object data, String meta, Class dataType) -> { synchronized (serverEntities) { int sepIndex = meta.indexOf('#'); @@ -122,15 +61,6 @@ public class NetworkEntity { serverEntities.clear(); } }); - - Network.getSingleton().addClientShutdownListener(reason -> { - synchronized (clientEntities) { - for (NetworkEntity entity : clientEntities.values()) { - entity.removeOnShutdown(); - } - clientEntities.clear(); - } - }); } private final String name; diff --git a/src/main/java/com/zhekasmirnov/innercore/api/mod/recipes/furnace/FurnaceRecipeRegistry.java b/src/main/java/com/zhekasmirnov/innercore/api/mod/recipes/furnace/FurnaceRecipeRegistry.java index aa1298f2..3c070942 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/mod/recipes/furnace/FurnaceRecipeRegistry.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/mod/recipes/furnace/FurnaceRecipeRegistry.java @@ -1,5 +1,7 @@ package com.zhekasmirnov.innercore.api.mod.recipes.furnace; +import cn.nukkit.Server; +import com.reider745.InnerCoreServer; import com.zhekasmirnov.innercore.api.NativeFurnaceRegistry; import com.zhekasmirnov.innercore.api.commontypes.ItemInstance; import com.zhekasmirnov.innercore.api.log.ICLog; diff --git a/src/main/java/com/zhekasmirnov/innercore/utils/FileTools.java b/src/main/java/com/zhekasmirnov/innercore/utils/FileTools.java index 1fb6a0fe..dd338f33 100644 --- a/src/main/java/com/zhekasmirnov/innercore/utils/FileTools.java +++ b/src/main/java/com/zhekasmirnov/innercore/utils/FileTools.java @@ -2,6 +2,7 @@ package com.zhekasmirnov.innercore.utils; import com.reider745.InnerCoreServer; import com.zhekasmirnov.apparatus.Apparatus; +import com.zhekasmirnov.apparatus.minecraft.version.MinecraftVersions; import com.zhekasmirnov.horizon.runtime.logger.Logger; import org.json.JSONArray; import org.json.JSONException; @@ -28,7 +29,7 @@ public class FileTools { DIR_PACK = DIR_ROOT + "/"; DIR_WORK = DIR_ROOT + "innercore/"; checkdirs(); - //DIR_MINECRAFT = MinecraftVersions.getCurrent().getMinecraftExternalStoragePath().getAbsolutePath() + "/"; + // DIR_MINECRAFT = MinecraftVersions.getCurrent().getMinecraftExternalStoragePath().getAbsolutePath() + "/"; } // Should be called before anything else diff --git a/src/main/resources/innercore/furnace.json b/src/main/resources/innercore/furnace.json index 9e26dfee..eaee255d 100644 --- a/src/main/resources/innercore/furnace.json +++ b/src/main/resources/innercore/furnace.json @@ -1 +1,94 @@ -{} \ No newline at end of file +{ + "325:10": 20000, + "173": 16000, + "_139": 4000, + "369": 2400, + "263": 1600, + "866": 1600, + "333": 1200, + "_165": 1200, + "58": 300, + "5": 300, + "17": 300, + "162": 300, + "_212": 300, + "_5": 300, + "_6": 300, + "_7": 300, + "_8": 300, + "_9": 300, + "_10": 300, + "72": 300, + "_150": 300, + "_151": 300, + "_152": 300, + "_153": 300, + "_154": 300, + "85": 300, + "107": 300, + "183": 300, + "184": 300, + "185": 300, + "186": 300, + "187": 300, + "188": 300, + "189": 300, + "190": 300, + "191": 300, + "192": 300, + "53": 300, + "134": 300, + "135": 300, + "136": 300, + "163": 300, + "164": 300, + "47": 300, + "65": 300, + "96": 300, + "_145": 300, + "_146": 300, + "_147": 300, + "_148": 300, + "_149": 300, + "25": 300, + "99": 300, + "100": 300, + "84": 300, + "54": 300, + "146": 300, + "346": 300, + "_194": 300, + "_200": 300, + "_201": 300, + "_202": 300, + "_203": 300, + "_204": 300, + "_213": 300, + "151": 300, + "261": 200, + "324": 200, + "427": 200, + "428": 200, + "429": 200, + "430": 200, + "431": 200, + "268": 200, + "269": 200, + "270": 200, + "271": 200, + "290": 200, + "323": 200, + "158": 150, + "6": 100, + "280": 100, + "35": 100, + "143": 100, + "_140": 100, + "_141": 100, + "_142": 100, + "_143": 100, + "_144": 100, + "281": 100, + "171": 67, + "_163": 50 +} \ No newline at end of file