diff --git a/IMPLEMENTATION_SUMMARY.md b/IMPLEMENTATION_SUMMARY.md deleted file mode 100644 index d66a259..0000000 --- a/IMPLEMENTATION_SUMMARY.md +++ /dev/null @@ -1,113 +0,0 @@ -# ExtendedAE Plus 实现总结 - -## 已实现的功能 - -### 1. 槽位数量增加 ✅ -- **PartExPatternProviderMixin**: 将`PartExPatternProvider`的槽位从36个增加到108个 -- **TileExPatternProviderMixin**: 将`TileExPatternProvider`的槽位从36个增加到108个 -- 使用`@ModifyConstant`注解,参考GTLCore的实现方式 - -### 2. 翻页功能 ✅ -- **ContainerExPatternProviderMixin**: 实现翻页逻辑 - - 使用`@GuiSync`同步页码状态 - - 通过`showPage()`方法重新计算槽位位置 - - 使用`setActive()`控制槽位可见性 -- **GuiExPatternProviderMixin**: 添加翻页UI - - 添加前进/后退按钮 - - 显示页码信息(第 X/Y 页) - - 动态控制按钮可见性 - -### 3. 技术实现细节 - -#### 翻页核心逻辑 -```java -@Unique -public void showPage() { - List slots = this.getSlots(SlotSemantics.ENCODED_PATTERN); - int slot_id = 0; - - for (Slot s : slots) { - int page_id = slot_id / 36; // 每36个槽位为一页 - - if (page_id > 0 && page_id == this.page) { - // 将当前页的槽位移动到前36个槽位的位置 - // 使用反射修改槽位坐标 - } - - ((AppEngSlot) s).setActive(page_id == this.page); // 设置槽位激活状态 - ++slot_id; - } -} -``` - -#### 页码计算 -- 总槽位数:108个 -- 每页显示:36个槽位 -- 总页数:3页(108 ÷ 36 = 3) - -#### 状态同步 -- 使用`@GuiSync(11451)`注解同步页码状态 -- 客户端和服务器端自动同步 - -## 文件结构 - -``` -src/main/java/com/extendedae_plus/ -├── mixin/ -│ ├── PartExPatternProviderMixin.java # 修改PartExPatternProvider槽位数 -│ ├── TileExPatternProviderMixin.java # 修改TileExPatternProvider槽位数 -│ ├── ContainerExPatternProviderMixin.java # 翻页逻辑实现 -│ └── GuiExPatternProviderMixin.java # 翻页UI实现 -├── network/ -│ └── UpdatePagePacket.java # 网络包处理(备用) -└── ExampleMod.java # 主模组类 - -src/main/resources/ -├── extendedae_plus.mixins.json # Mixin配置 -└── META-INF/ - └── mods.toml # 模组配置 -``` - -## 使用方法 - -1. **安装模组**:将生成的jar文件放入mods文件夹 -2. **启动游戏**:模组会自动生效 -3. **使用扩展样板供应器**: - - 默认显示36个槽位(第一页) - - 点击左右箭头按钮翻页 - - 查看页码信息了解当前位置 - -## 技术特点 - -### 优势 -- ✅ 完全兼容ExtendedAE -- ✅ 使用Mixin技术,无需修改原版代码 -- ✅ 支持翻页功能,用户体验良好 -- ✅ 状态自动同步,无需额外配置 - -### 创新点 -- 使用槽位位置重映射而不是隐藏 -- 通过`setActive()`控制槽位状态 -- 使用反射处理槽位坐标修改 -- 集成ExtendedAE的UI组件 - -## 构建状态 - -- ✅ 编译成功 -- ✅ 所有Mixin正常工作 -- ✅ 依赖配置正确 -- ✅ 模组信息完整 - -## 下一步计划 - -1. **测试功能**:在游戏中测试翻页功能 -2. **优化性能**:优化反射调用性能 -3. **添加配置**:支持自定义槽位数量 -4. **改进UI**:优化翻页按钮样式 - -## 注意事项 - -- 模组依赖ExtendedAE 1.4.2+ -- 需要Forge 47+ -- 使用Java 17 -- 支持Minecraft 1.20.1 \ No newline at end of file diff --git a/README.md b/README.md index e1199b0..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,61 +0,0 @@ -# ExtendedAE Plus - -一个为ExtendedAE模组添加额外功能的Minecraft模组。 - -## 功能特性 - -### 1. 扩展样板供应器分页功能 -- **自动分页**:当样板槽位超过36个时,自动启用分页功能 -- **循环翻页**:支持从第一页向前翻到最后一页,从最后一页向后翻到第一页 -- **智能定位**:确保所有样板槽位都正确显示在前4行中 -- **页码显示**:显示当前页码和总页数 - -### 2. 扩展样板管理终端隐藏功能 -- **隐藏样板槽位**:添加了一个切换按钮,可以隐藏所有样板供应器的样板槽位 -- **只显示名称**:隐藏模式下只显示样板供应器的名称,不显示其内部的样板 -- **实时切换**:点击按钮即可实时切换显示模式 -- **状态同步**:按钮状态与隐藏模式保持同步 - -## 安装说明 - -1. 确保已安装ExtendedAE模组 -2. 将此模组的JAR文件放入mods文件夹 -3. 启动游戏 - -## 兼容性 - -- **Minecraft版本**:1.20.1 -- **Forge版本**:NeoForge -- **依赖模组**:ExtendedAE 1.4.2+ - -## 使用方法 - -### 扩展样板供应器 -1. 放置扩展样板供应器 -2. 当槽位超过36个时,会自动显示翻页按钮 -3. 使用左右箭头按钮进行翻页 -4. 页码信息显示在界面右上角 - -### 扩展样板管理终端 -1. 打开扩展样板管理终端 -2. 在左侧工具栏中找到隐藏按钮(眼睛图标) -3. 点击按钮切换显示模式: - - **显示模式**:显示所有样板供应器的名称和样板槽位 - - **隐藏模式**:只显示样板供应器的名称,隐藏所有样板槽位 - -## 技术实现 - -- 使用Mixin技术修改ExtendedAE的GUI和容器 -- 通过反射访问私有字段和方法 -- 支持混淆环境下的稳定运行 -- 使用@GuiSync进行客户端-服务器数据同步 - -## 开发信息 - -- **开发环境**:Minecraft 1.20.1 + NeoForge -- **构建工具**:Gradle + Architectury Loom -- **主要技术**:Mixin、反射、GUI修改 - -## 许可证 - -本项目遵循与原ExtendedAE模组相同的许可证。 \ No newline at end of file diff --git a/src/main/java/com/extendedae_plus/mixin/ContainerUWirelessExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/ContainerUWirelessExPatternTerminalMixin.java index e4d8feb..9ab8b84 100644 --- a/src/main/java/com/extendedae_plus/mixin/ContainerUWirelessExPatternTerminalMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ContainerUWirelessExPatternTerminalMixin.java @@ -10,6 +10,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -21,6 +22,7 @@ import java.util.function.Consumer; /** * 为通用无线样板访问终端(AE2WTlib 集成)容器注册通用动作(CGenericPacket 分发) */ +@Pseudo @Mixin(ContainerUWirelessExPAT.class) public abstract class ContainerUWirelessExPatternTerminalMixin implements IActionHolder { diff --git a/src/main/java/com/extendedae_plus/mixin/ContainerWirelessExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/ContainerWirelessExPatternTerminalMixin.java index 25e2868..4b85c6d 100644 --- a/src/main/java/com/extendedae_plus/mixin/ContainerWirelessExPatternTerminalMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ContainerWirelessExPatternTerminalMixin.java @@ -10,6 +10,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -21,6 +22,7 @@ import java.util.function.Consumer; /** * 为无线样板访问终端容器注册通用动作(CGenericPacket 分发) */ +@Pseudo @Mixin(ContainerWirelessExPAT.class) public abstract class ContainerWirelessExPatternTerminalMixin implements IActionHolder { @@ -31,7 +33,7 @@ public abstract class ContainerWirelessExPatternTerminalMixin implements IAction private Player epp$player; // 明确目标构造签名:(int, Inventory, HostWirelessExPAT) - @Inject(method = "(ILnet/minecraft/world/entity/player/Inventory;Lcom/glodblock/github/extendedae/common/me/itemhost/HostWirelessExPAT;)V", at = @At("TAIL")) + @Inject(method = "(ILnet/minecraft/world/entity/player/Inventory;Lcom/glodblock/github/extendedae/common/me/itemhost/HostWirelessExPAT;)V", at = @At("TAIL"), require = 0) private void init(int id, net.minecraft.world.entity.player.Inventory playerInventory, HostWirelessExPAT host, CallbackInfo ci) { this.epp$player = playerInventory.player; // 注册上传动作:参数顺序必须与客户端 CGenericPacket 保持一致 diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index e548514..276826b 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -1,5 +1,5 @@ { - "required": true, + "required": false, "package": "com.extendedae_plus.mixin", "compatibilityLevel": "JAVA_17", "minVersion": "0.8",