diff --git a/README.md b/README.md index ed59fba..1616213 100644 --- a/README.md +++ b/README.md @@ -26,44 +26,44 @@ mod包名为com.le.teleportmirror 。 ## 回城魔镜 ### 初级回城魔镜 -金锭 指南针 金锭 -铁锭 蓝色染色玻璃板 铁锭 +金锭 指南针 金锭 +铁锭 蓝色染色玻璃板 铁锭 铜锭 铁锭 铜锭 ### 中级回城魔镜 -钻石 末影珍珠 钻石 -青金石 初级回城魔镜 青金石 +钻石 末影珍珠 钻石 +青金石 初级回城魔镜 青金石 红石 紫水晶碎片 红石 ### 高级回城魔镜 -钻石 末影之眼 钻石 -绿宝石 中级回城魔镜 绿宝石 +钻石 末影之眼 钻石 +绿宝石 中级回城魔镜 绿宝石 钻石 烈焰棒 钻石 ### 永久回城魔镜 -潜影壳 紫颂果 潜影壳 -末影珍珠 高级回城魔镜 末影珍珠 +潜影壳 紫颂果 潜影壳 +末影珍珠 高级回城魔镜 末影珍珠 潜影壳 回响碎片 潜影壳 ## 传送魔镜 ### 初级传送魔镜 -金锭 拴绳 金锭 -铁锭 橙色染色玻璃板 铁锭 +金锭 拴绳 金锭 +铁锭 橙色染色玻璃板 铁锭 铜锭 铁锭 铜锭 ### 中级传送魔镜 -钻石 末影珍珠 钻石 -青金石 初级传送魔镜 青金石 +钻石 末影珍珠 钻石 +青金石 初级传送魔镜 青金石 红石 紫水晶碎片 红石 ### 高级传送魔镜 -钻石 末影之眼 钻石 -绿宝石 中级传送魔镜 绿宝石 +钻石 末影之眼 钻石 +绿宝石 中级传送魔镜 绿宝石 钻石 烈焰棒 钻石 ### 永久传送魔镜 -潜影壳 紫颂果 潜影壳 -末影珍珠 高级传送魔镜 末影珍珠 +潜影壳 紫颂果 潜影壳 +末影珍珠 高级传送魔镜 末影珍珠 潜影壳 回响碎片 潜影壳 # 五、特殊机制 diff --git a/gradle.properties b/gradle.properties index eb0f6db..bd325cf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -32,7 +32,7 @@ mod_name=Teleport Mirror # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=MIT # The mod version. See https://semver.org/ -mod_version=1.0.2 +mod_version=1.0.3 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/com/le/teleportmirror/Config.java b/src/main/java/com/le/teleportmirror/Config.java index 01ac891..a627248 100644 --- a/src/main/java/com/le/teleportmirror/Config.java +++ b/src/main/java/com/le/teleportmirror/Config.java @@ -2,6 +2,22 @@ package com.le.teleportmirror; import net.neoforged.neoforge.common.ModConfigSpec; +/** + * Mod 配置项 + *
+ * 使用 NeoForge 的 {@link ModConfigSpec} 定义所有可配置项。 + * 所有配置项按功能分为以下几个部分: + *
+ * 魔镜是一个可蓄力使用的物品,长按右键蓄力完成后触发传送效果。 + * 支持两种功能类型(回城/传送)和四个等级(初级/中级/高级/永久)。 + *
+ * 使用流程: + *
+ * 负责定义和注册自定义网络负载(CustomPacketPayload), + * 处理客户端与服务端之间的魔镜相关通信: + *
+ * 仅编译到客户端(通过 @OnlyIn(Dist.CLIENT) 注解), + * 负责接收服务端发来的网络负载并打开对应的客户端界面。 + * 在专用服务端环境中此类不会被加载。 + */ @OnlyIn(Dist.CLIENT) public class MirrorNetworkClient { + /** + * 接收服务端发送的玩家选择请求,在客户端打开玩家选择界面 + * + * @param payload 包含可选玩家列表、UUID 和魔镜等级的网络负载 + */ public static void openPlayerSelection(MirrorNetwork.OpenPlayerSelectionPayload payload) { Minecraft client = Minecraft.getInstance(); MirrorTier tier = MirrorTier.valueOf(payload.tierName().toUpperCase()); diff --git a/src/main/java/com/le/teleportmirror/MirrorTier.java b/src/main/java/com/le/teleportmirror/MirrorTier.java index 9e7458f..00d4dba 100644 --- a/src/main/java/com/le/teleportmirror/MirrorTier.java +++ b/src/main/java/com/le/teleportmirror/MirrorTier.java @@ -1,12 +1,25 @@ package com.le.teleportmirror; +/** + * 魔镜的等级 + *
+ * 不同等级影响耐久度、冷却时间、副作用强度等属性 + *
+ * RETURN - 回城魔镜:将使用者传送回出生点 + * TELEPORT - 传送魔镜:将使用者传送到另一个玩家身边 + */ public enum MirrorType { RETURN("return"), TELEPORT("teleport"); + /** 类型名称,用于注册和序列化 */ private final String name; MirrorType(String name) { this.name = name; } + /** 获取类型名称 */ public String getName() { return name; } diff --git a/src/main/java/com/le/teleportmirror/TeleportMirrorMod.java b/src/main/java/com/le/teleportmirror/TeleportMirrorMod.java index 069b295..480b8b6 100644 --- a/src/main/java/com/le/teleportmirror/TeleportMirrorMod.java +++ b/src/main/java/com/le/teleportmirror/TeleportMirrorMod.java @@ -30,46 +30,74 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +/** + * Teleport Mirror Mod 主类 + *
+ * NeoForge Mod 的入口点(通过 {@link Mod} 注解)。 + * 负责: + *
+ * 如果 override 为空则跳过(使用默认 JSON 配方)。 + * 如果 enabled 为 false 也跳过(配方被禁用)。 + * 通过反射访问配方管理器的内部 Map 来注入动态配方。 + * + * @param manager 配方管理器 + * @param enabled 配方是否启用 + * @param override 配方覆盖字符串 + * @param result 配方输出物品 + * @param name 配方名称 + */ @SuppressWarnings("unchecked") private void tryRegisterRecipe(net.minecraft.world.item.crafting.RecipeManager manager, boolean enabled, String override, Item result, String name) { @@ -150,6 +201,17 @@ public class TeleportMirrorMod { } } + /** + * 将配方覆盖字符串解析为 RecipeHolder + *
+ * 格式:"row1;row2;row3|key=item_id;..." + * 示例:" C ;CGC; C |C=minecraft:copper_ingot;G=minecraft:glass_pane" + * + * @param override 配方覆盖字符串 + * @param result 配方输出物品 + * @param name 配方名称 + * @return 解析后的 RecipeHolder,解析失败返回 null + */ private RecipeHolder> parseRecipeOverride(String override, Item result, String name) { String[] parts = override.split("\\|"); if (parts.length < 2) return null; diff --git a/src/main/java/com/le/teleportmirror/screen/PlayerSelectionScreen.java b/src/main/java/com/le/teleportmirror/screen/PlayerSelectionScreen.java index e64fbb2..3fadf11 100644 --- a/src/main/java/com/le/teleportmirror/screen/PlayerSelectionScreen.java +++ b/src/main/java/com/le/teleportmirror/screen/PlayerSelectionScreen.java @@ -11,13 +11,35 @@ import net.neoforged.neoforge.network.PacketDistributor; import java.util.List; import java.util.UUID; +/** + * 玩家选择界面 + *
+ * 当玩家使用传送魔镜长按右键蓄力完成后,客户端会打开此界面。 + * 界面列出当前在线的可选玩家,玩家点击按钮选择目标后, + * 通过网络包向服务端发送传送请求,服务端执行实际传送逻辑。 + *
+ * 支持分页:每页最多显示 {@value #BUTTONS_PER_PAGE} 名玩家, + * 通过滚动按钮切换页码。 + *
+ * 该界面不暂停游戏(isPauseScreen 返回 false)。
+ */
public class PlayerSelectionScreen extends Screen {
+ /** 可选玩家名称列表 */
private final List