From df01c3714a7cced1ede7b9e084cf589a31aeb02e Mon Sep 17 00:00:00 2001 From: MaXFeeD Date: Sun, 7 Jan 2024 20:46:47 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B2=D1=8B=D1=85=D0=BB=D0=BE=D0=BF=20=D0=BE=D1=82=20?= =?UTF-8?q?=D0=BE=D1=82=D0=BB=D0=B0=D0=B4=D0=BE=D1=87=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 ++++++++++++----- .../java/com/reider745/InnerCoreServer.java | 9 +++++++-- src/main/java/com/reider745/Main.java | 8 +++++--- .../commands/CustomBlocksCommands.java | 10 ++++++++-- .../reider745/commands/CustomItemsCommands.java | 10 ++++++++-- .../commands/InnerCoreNetworkCommand.java | 8 ++++++-- .../com/reider745/commands/ModsListCommand.java | 6 +++++- .../com/reider745/commands/StateCommand.java | 15 +++++++++++++-- .../com/reider745/hooks/SnowfallEverywhere.java | 12 +++++++++--- src/main/resources/zotecore.yml | 4 ++-- 10 files changed, 75 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 74be8636..14672795 100644 --- a/README.md +++ b/README.md @@ -67,11 +67,12 @@ auto-save-period: 60 # Нужно ли помимо данных модов сохранять еще и миры. auto-save-world: on -# Включен ли сокетный сервер или нет. -# Сокеты требуют дополнительного порта, подключение через серверные сокеты более стабильное. +# Включен ли сокетный сервер или нет. Сокеты требуют дополнительный порт, +# подключение через серверные сокеты более стабильное. socket-server-enable: on # Порт серверного сокета, обычно должен быть между 10000 и 24999. +# Но учтите, что по умолчанию клиент использует порт 2304. socket-port: 2304 ``` @@ -81,7 +82,7 @@ socket-port: 2304 + custom_blocks — выводит список кастумных блоков + mods — выводит список модификаций на сервере + inner_core_network — выводит список подключенных к протоколу игроков на сервере -+ state — выводит state блока по runtimeId ++ state — выводит стейты блока по рантайм идентификатору > Все команды предназначены для операторов и не могут быть вызваны игроками. @@ -89,6 +90,12 @@ socket-port: 2304 ![Licensing](/.github/license.jpg) -## Служебная информация +## Техническая информация -**Коммит из apparatus на котором основано ядро** - 73194cfd +| Ключ | Значение | +|---|---| +| Версия протокола | 422 (1.16.200) | +| Версия Horizon | 9 (1.2.0-android-12) | +| Коммит Apparatus | `73194cfd` | +| Коммит Instant Referrer | `a264591` | +| Коммит Nukkit-MOT | `2b53fb5` | diff --git a/src/main/java/com/reider745/InnerCoreServer.java b/src/main/java/com/reider745/InnerCoreServer.java index 6b6fab13..d91abee2 100644 --- a/src/main/java/com/reider745/InnerCoreServer.java +++ b/src/main/java/com/reider745/InnerCoreServer.java @@ -11,6 +11,7 @@ import com.reider745.commands.CommandsHelper; import com.reider745.event.EventListener; import com.reider745.event.InnerCorePlugin; import com.reider745.hooks.BiomesHooks; +import com.reider745.hooks.SnowfallEverywhere; import com.reider745.item.CustomItem; import com.reider745.item.ItemMethod; @@ -301,7 +302,9 @@ public class InnerCoreServer { Logger.info("Registering ZoteCore events..."); pluginManager.registerEvents(new EventListener(), plugin); - // pluginManager.registerEvents(new SnowfallEverywhere(), plugin); + if (SnowfallEverywhere.isActive) { + pluginManager.registerEvents(new SnowfallEverywhere(), plugin); + } CustomBlock.init(); CustomItem.postInit(); @@ -320,7 +323,9 @@ public class InnerCoreServer { PluginManager pluginManager = Server.getInstance().getPluginManager(); pluginManager.getPlugins().put(plugin.getDescription().getName(), plugin); pluginManager.registerEvents(new EventListener(), plugin); - // pluginManager.registerEvents(new SnowfallEverywhere(), plugin); + if (SnowfallEverywhere.isActive) { + pluginManager.registerEvents(new SnowfallEverywhere(), plugin); + } } public void start() { diff --git a/src/main/java/com/reider745/Main.java b/src/main/java/com/reider745/Main.java index a6bf9917..ba41866a 100644 --- a/src/main/java/com/reider745/Main.java +++ b/src/main/java/com/reider745/Main.java @@ -3,6 +3,8 @@ package com.reider745; import cn.nukkit.Server; import cn.nukkit.network.Network; +import java.util.Arrays; + import com.reider745.api.hooks.JarEditor; import com.reider745.hooks.*; import com.reider745.hooks.bugfix.EntityItemHooks; @@ -76,9 +78,9 @@ public class Main { loader.registerHooksInitializationForClass(ItemUtils.class); loader.registerHooksInitializationForClass(AndroidHooks.class); - for(String arg : args) - if(arg.equals("-snowfall_everywhere")) - loader.registerHooksInitializationForClass(SnowfallEverywhere.class); + if (Arrays.stream(args).anyMatch("--snowfall-everywhere"::equals)) { + loader.registerHooksInitializationForClass(SnowfallEverywhere.class); + } // loader.registerHooksInitializationForClass(BiomesHooks.class); loader.registerHooksInitializationForClass(GlobalBanList.class); diff --git a/src/main/java/com/reider745/commands/CustomBlocksCommands.java b/src/main/java/com/reider745/commands/CustomBlocksCommands.java index aae2d81f..ee019242 100644 --- a/src/main/java/com/reider745/commands/CustomBlocksCommands.java +++ b/src/main/java/com/reider745/commands/CustomBlocksCommands.java @@ -2,6 +2,8 @@ package com.reider745.commands; import cn.nukkit.command.Command; import cn.nukkit.command.CommandSender; +import cn.nukkit.utils.TextFormat; + import com.reider745.block.BlockStateRegisters; import com.reider745.block.CustomBlock; import com.reider745.item.ItemMethod; @@ -22,11 +24,15 @@ public class CustomBlocksCommands extends Command { ArrayList variants = CustomBlock.getOrgVariants(id); for (int data = 0; data < variants.size(); data++) list.append("\n" + ItemMethod.getNameForId(id, data, 0) + " -> " + id + ":" + data - + " (runtimeId=" + BlockStateRegisters.getStateFor(id, data) + ", textId=" + + " (runtime=" + BlockStateRegisters.getStateFor(id, data) + ", named=" + CustomBlock.getTextIdForNumber(id) + ")"); } - commandSender.sendMessage("Custom blocks (" + CustomBlock.blocks.size() + "):" + list.toString()); + if (list.length() == 0) { + commandSender.sendMessage(TextFormat.YELLOW + "There are no custom blocks."); + } else { + commandSender.sendMessage("Custom blocks (" + CustomBlock.blocks.size() + "):" + list.toString()); + } return true; } } diff --git a/src/main/java/com/reider745/commands/CustomItemsCommands.java b/src/main/java/com/reider745/commands/CustomItemsCommands.java index b74a14ab..cefe7bfb 100644 --- a/src/main/java/com/reider745/commands/CustomItemsCommands.java +++ b/src/main/java/com/reider745/commands/CustomItemsCommands.java @@ -2,6 +2,8 @@ package com.reider745.commands; import cn.nukkit.command.Command; import cn.nukkit.command.CommandSender; +import cn.nukkit.utils.TextFormat; + import com.reider745.api.CustomManager; import com.reider745.item.CustomItem; import com.reider745.item.ItemMethod; @@ -19,11 +21,15 @@ public class CustomItemsCommands extends Command { StringBuilder list = new StringBuilder(); for (Integer id : CustomItem.items.keySet()) { CustomManager manager = CustomItem.getItemManager(id); - list.append("\n" + manager.get(ItemMethod.PropertiesNames.NAME) + " -> " + id + " (textId=" + list.append("\n" + manager.get(ItemMethod.PropertiesNames.NAME) + " -> " + id + " (named=" + CustomItem.getTextIdForNumber(id) + ")"); } - commandSender.sendMessage("Custom items (" + CustomItem.items.size() + "):\n"+list); + if (list.length() == 0) { + commandSender.sendMessage(TextFormat.YELLOW + "There are no custom items."); + } else { + commandSender.sendMessage("Custom items (" + CustomItem.items.size() + "):" + list.toString()); + } return true; } } diff --git a/src/main/java/com/reider745/commands/InnerCoreNetworkCommand.java b/src/main/java/com/reider745/commands/InnerCoreNetworkCommand.java index 89ff77ad..890be767 100644 --- a/src/main/java/com/reider745/commands/InnerCoreNetworkCommand.java +++ b/src/main/java/com/reider745/commands/InnerCoreNetworkCommand.java @@ -37,11 +37,15 @@ public class InnerCoreNetworkCommand extends Command { } Player player = EntityMethod.getPlayerById(client.getPlayerUid()); list.append("\n" + (player != null ? player.getName() : "...") + " -> " + client.getPlayerUid() - + " (state=" + client.getClientState().toString() + ", protocolId=" + + " (state=" + client.getClientState().toString() + ", protocol=" + client.getChannelInterface().getChannel().getProtocolId() + ")"); } - commandSender.sendMessage("Clients (" + clients.size() + "):" + list.toString()); + if (list.length() == 0) { + commandSender.sendMessage(TextFormat.YELLOW + "There are no clients."); + } else { + commandSender.sendMessage("Clients (" + clients.size() + "):" + list.toString()); + } return true; } } diff --git a/src/main/java/com/reider745/commands/ModsListCommand.java b/src/main/java/com/reider745/commands/ModsListCommand.java index 9c29941e..73e370f8 100644 --- a/src/main/java/com/reider745/commands/ModsListCommand.java +++ b/src/main/java/com/reider745/commands/ModsListCommand.java @@ -42,7 +42,11 @@ public class ModsListCommand extends Command { } } - commandSender.sendMessage("Mods (" + mods.size() + "): " + list.toString()); + if (list.length() == 0) { + commandSender.sendMessage(TextFormat.YELLOW + "There are no mods, check if correct modpack is selected."); + } else { + commandSender.sendMessage("Mods (" + mods.size() + "): " + list.toString()); + } return true; } } diff --git a/src/main/java/com/reider745/commands/StateCommand.java b/src/main/java/com/reider745/commands/StateCommand.java index cdcd2576..5a1280dd 100644 --- a/src/main/java/com/reider745/commands/StateCommand.java +++ b/src/main/java/com/reider745/commands/StateCommand.java @@ -4,11 +4,15 @@ import cn.nukkit.command.Command; import cn.nukkit.command.CommandSender; import cn.nukkit.command.data.CommandParamType; import cn.nukkit.command.data.CommandParameter; +import cn.nukkit.utils.TextFormat; + +import java.util.Map; + import com.reider745.block.BlockStateRegisters; public class StateCommand extends Command { public StateCommand() { - super("state", "Gets block state of requested runtimeId"); + super("state", "Gets block state of requested runtime identifier"); this.commandParameters.clear(); this.commandParameters.put("default", new CommandParameter[] { new CommandParameter("runtimeId", CommandParamType.INT, false), @@ -20,7 +24,14 @@ public class StateCommand extends Command { if (!commandSender.isOp() || args.length < 1) return false; - commandSender.sendMessage(BlockStateRegisters.getStateFor(Integer.parseInt(args[0])).toString()); + Map states = BlockStateRegisters.getStateFor(Integer.parseInt(args[0])); + if (states == null) { + commandSender.sendMessage(TextFormat.RED + "There are no block with runtime identifier " + args[0] + "!"); + } else if (states.size() == 0) { + commandSender.sendMessage(TextFormat.YELLOW + "There are no states with requested identifier."); + } else { + commandSender.sendMessage(states.toString()); + } return true; } } diff --git a/src/main/java/com/reider745/hooks/SnowfallEverywhere.java b/src/main/java/com/reider745/hooks/SnowfallEverywhere.java index 78df91ae..91b1145a 100644 --- a/src/main/java/com/reider745/hooks/SnowfallEverywhere.java +++ b/src/main/java/com/reider745/hooks/SnowfallEverywhere.java @@ -26,14 +26,20 @@ import cn.nukkit.utils.ThreadCache; import java.nio.ByteOrder; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import javassist.CtClass; /** * Special christmas adaptation, do not use anywhere else. */ -@Hooks +@Hooks(className = "cn.nukkit.level.format.generic.serializer.NetworkChunkSerializer") public class SnowfallEverywhere implements HookClass, Listener { + public static boolean isActive = false; - @Inject(className = "cn.nukkit.level.format.generic.serializer.NetworkChunkSerializer") + public void init(CtClass clazz) { + isActive = true; + } + + @Inject public static void serialize(IntSet protocols, BaseChunk chunk, Consumer callback, DimensionData dimensionData) { for (int protocolId : protocols) { @@ -55,7 +61,7 @@ public class SnowfallEverywhere implements HookClass, Listener { BinaryStream stream = ThreadCache.binaryStream.get().reset(); for (int i = 0; i < subChunkCount; i++) { - sections[i].writeTo(protocolId, stream); + sections[i].writeTo(protocolId, stream, false); } stream.put(toSnowfallBiomeIdArray(chunk.getBiomeIdArray())); diff --git a/src/main/resources/zotecore.yml b/src/main/resources/zotecore.yml index aca03eb6..8302b187 100644 --- a/src/main/resources/zotecore.yml +++ b/src/main/resources/zotecore.yml @@ -42,5 +42,5 @@ pack-version-code: 152 # socket-server-enable: off # Server socket port, usually should be between 10000 and 24999. -# use 2304, since this is the default port on the client -# socket-port: 2304 +# But keep in mind that the client uses port 2304 by default. +# socket-port: 19131