主要特性
SCE-Universe Java Edition 是一个功能丰富的应用程序,核心设计围绕模块化、可扩展性和用户自定义。它提供了强大的计算功能,支持通过模组进行扩展,并具备灵活的设置管理和直观的页面路由系统。
概述
本应用旨在提供一个平台,用户可以利用其内置的计算模型进行数据分析,并通过安装自定义模组来增加或修改功能。其主要特点包括:
- 多版本计算功能:提供 V1 到 V5 等多种复杂计算模型,用于处理不同的数据场景和需求。
- 动态模组加载系统:支持加载外部 JAR 格式的插件,极大地增强了应用的可扩展性,允许社区贡献和功能定制。
- 持久化设置管理:全面的设置系统,能够保存和加载用户偏好,确保应用行为的可配置性。
- 页面管理与路由:基于清晰的页面定义和路由机制,实现流畅的用户界面导航和交互管理。
这些特性共同构成了 SCE-Universe Java Edition 的核心,使其成为一个强大且高度可定制的工具。
架构
应用程序的架构围绕核心模块和它们之间的交互构建。App 类作为入口点,负责初始化全局状态、设置管理器、模组加载器和页面路由器。router_core 管理页面之间的导航和生命周期,同时集成模组和设置保存机制。global 类维护全局共享资源,包括核心计算数据结构 umaCore_core。
架构说明
App: 应用程序的启动类,负责引导整个系统,初始化所有核心服务。router_core: 实现了PageManager接口,是应用中所有页面导航的中心枢纽。它处理页面状态转换,并在页面切换时与模组和设置管理系统进行交互。global: 单例模式的全局对象,持有umaCore_core实例和对setManager_core的引用,确保核心数据和设置在整个应用中的可访问性。modlist: 模组加载器,负责扫描指定目录下的 JAR 文件,动态加载并初始化实现了modloader_main接口的外部模组。setManager_core: 设置管理的入口,通过setManager处理应用设置的读取、写入、修改和持久化。umaCore_core: 核心计算逻辑单元,包含多个版本的计算方法和复杂的数据结构 (Basic,Rate,Unique,Bonus,Ept),用于封装计算所需的输入和输出。pages: 定义了应用程序中所有页面的常量 ID,提供了一种清晰的页面标识方式。modloader_main: 定义了外部模组必须实现的接口,允许模组与应用程序生命周期和页面交互集成。
主要特性详解
1. 计算功能
本应用提供了一套强大的多版本计算功能,主要通过 umaCore_core 类实现。这些计算模型旨在处理复杂的数据评估,并随着版本的迭代而提供更精细的计算逻辑。
核心数据结构: umaCore_core
umaCore_core 是计算功能的核心,它聚合了多种属性,并通过 evalV1、evalV2、evalV3、evalV4 等方法进行不同版本的计算。
Basic: 包含基础信息,如名称 (name) 和类型 (type)。Rate: 基础比率属性,例如友情训练加成 (friendshipBonus)、心情影响 (moodEffect) 等。Unique: 独特的属性修饰,与Rate类似但可能代表额外或高级的修饰。Bonus: 属性加成,例如速度 (speed)、耐力 (stamina)、力量 (power) 等。Ept: 计算结果集,存储了各种计算后的比率和最终结果(例如friendshipRate,nonSpecialtyRate,v3,v4main等)。
每个计算版本都建立在前一个版本的基础上,逐步增加计算的复杂度和维度。例如,evalV2 在 evalV1 的基础上引入了属性加成对友情训练倍率的影响。
示例代码:umaCore_core 的初始化和 V1 计算
1public class umaCore_core extends umaCore_header {
2 // ... 其他代码 ...
3
4 public umaCore_core() {
5 _basic = new Basic();
6 _rate = new Rate();
7 _unique = new Unique();
8 _bonus = new Bonus();
9 _ept = new Ept();
10 }
11
12 public boolean getAttributes(String name,int type,int rate_friendshipBonus,int rate_moodEffect,int rate_traningEffect,int rate_initalFriendship,int rate_specialtyPriority,int unique_friendshipBonus,int unique_moodEffect,int unique_traningEffect,int unique_initalFriendship,int unique_specialtyPriority,int speed,int stamina,int power,int guts,int wit,int sp)
13 {
14 try
15 {
16 _basic.name = name;
17 _basic.type = type;
18 _rate.friendshipBonus = rate_friendshipBonus;
19 // ... 省略其他属性设置 ...
20 _bonus.speed = speed;
21 // ... 省略其他 bonus 属性设置 ...
22 }
23 catch (Exception err)
24 {
25 System.err.println("Error: " + err);
26 return false;
27 }
28 return true;
29 }
30
31 public void evalV1()
32 {
33 //v1_ept
34 _ept.friendshipRate =
35 (_rate.friendshipBonus * 0.01f + 1.0f) *
36 (_unique.friendshipBonus * 0.01f + 1.0f) *
37 ((_rate.traningEffect + _unique.traningEffect) * 0.01f + 1.0f) *
38 ((_rate.moodEffect + _unique.moodEffect) * 0.02f + 1.0f);
39 //unstrike_v1_ept
40 _ept.nonSpecialtyRate =
41 ((_rate.traningEffect + _unique.traningEffect) * 0.01f + 1.0f) *
42 ((_rate.moodEffect + _unique.moodEffect) * 0.02f + 1.0f);
43 }
44 // ... 其他 evalV 方法 ...
45}Source: src/cn/oraclestar/sce/system/umaCore/umaCore_core.java, src/cn/oraclestar/sce/system/umaCore/umaCore_core.java
2. 模组加载系统
应用程序通过一个灵活的模组加载系统支持动态扩展,用户可以将外部 JAR 文件作为插件集成到应用中。
模组工作流
- 目录扫描:
modlist类会扫描plugins/和plugins/preload目录下的所有.jar文件。 - 动态加载: 使用
URLClassLoader在运行时加载 JAR 文件中的类。 - 接口实现: 模组的主类必须实现
modloader_main接口,该接口定义了模组生命周期方法(onEnable(),onDisable())以及与应用交互的方法(innerToPage(),innerHandle())。 - 元数据: 模组信息(如名称、作者、版本、描述)通过
@target注解来定义。
示例代码:modloader_main 接口定义
1public interface modloader_main {
2 final String pluginName = ""; // 通常通过注解提供
3 final String version = ""; // 通常通过注解提供
4 void onEnable(); // 模组启用时调用
5 void onDisable(); // 模组禁用时调用
6 void innerToPage(cn.oraclestar.sce.system.UI.UI_core ui_core,int now_page); // 模组与页面交互
7 int innerHandle(String Input,int now_page); // 模组处理页面输入
8}Source: src/cn/oraclestar/sce/system/modloader/modloader_main.java
3. 设置管理
应用程序的设置由 setManager 和 setManager_core 类进行统一管理,支持将不同类型的设置持久化到 settings.xml 文件中。
特性
- 类型化存储: 设置按类型(字符串、整数、布尔值)存储在不同的集合中,确保类型安全。
- 动态增改: 支持运行时添加和修改设置。
- 持久化: 使用
XMLEncoder和XMLDecoder将设置序列化到settings.xml文件中,并在启动时加载。 - 合并加载: 在加载设置时,会智能地将文件中的设置与内存中已有的设置(如默认值)进行合并,以避免丢失未在文件中定义的设置。
示例代码:设置的添加和持久化
1public class setManager implements list_Boolen_Map,list_Int_Map,list_String_Map {
2 // ... 其他方法 ...
3
4 public static void addSet(String key,Object vaule) throws Exception{
5 // 检查设置是否已存在,防止重复定义
6 // ...
7 if(vaule instanceof String){
8 Map<String,String> temp_map = new HashMap<>();
9 temp_map.put(key,(String)vaule);
10 inputSet(cn.oraclestar.sce.system.setManager.type.string,temp_map);
11 return;
12 }
13 // ... 处理 Boolean 和 Integer 类型 ...
14 }
15
16 public static void SaveSettings(){
17 try(XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("settings.xml")))){
18 encoder.writeObject(list_String_Map.temp_maps);
19 encoder.writeObject(list_Int_Map.temp_maps);
20 encoder.writeObject(list_Boolen_Map.temp_maps);
21 encoder.flush();
22 }catch(Exception e){
23 e.printStackTrace();
24 }
25 }
26 // ... LoadSettings 方法 ...
27}Source: src/cn/oraclestar/sce/system/setManager/setManager.java, src/cn/oraclestar/sce/system/setManager/setManager.java
4. 页面管理与路由
应用的核心用户界面体验由 router_core 提供,它负责管理不同应用页面之间的导航和交互。
页面路由流
- 页面定义:
pages类集中定义了所有页面的整数 ID,例如WELCOME、MAIN、CALCULATE等,易于管理和引用。 - 导航控制:
router_core维护当前页面状态,并根据用户输入或内部逻辑决定下一个显示的页面。 - 模组集成: 路由过程允许模组在页面渲染前和用户输入处理时介入,实现自定义 UI 元素或行为。
- 自动保存: 在每次页面输入处理后,设置会自动保存,确保用户配置的即时持久化。
示例代码:pages 定义和 router_core 启动
1public class pages {
2 public static final int EXIT = -1;
3 public static final int CURRENT = 0;
4 public static final int WELCOME = 1;
5 public static final int MAIN = 2;
6 public static final int SETTING = 3;
7 // ... 其他页面定义 ...
8 public static final int MODLIST = 30;
9}1public class router_core extends PageManager {
2 // ... 其他方法 ...
3 public void start() throws Exception{
4 if(_currentPage == pages.EXIT){
5 return;
6 }
7 while (_currentPage != pages.EXIT){
8 while (true) {
9 pageheader page = _pages.get(_currentPage); // 获取当前页面实例
10 if (page == null) {
11 break;
12 }
13 int nextPage = page.run(); // 运行当前页面逻辑
14 _currentPage = nextPage; // 更新当前页面
15 }
16 }
17 }
18}Source: src/cn/oraclestar/sce/system/router/router_core.java
配置选项
应用程序的设置由 setManager_core 统一管理,并可在 settings.xml 中持久化。以下是一些在 App.java 中注册的默认设置,用户可以通过应用程序界面或直接修改 settings.xml 进行配置:
| Option Key | Type | Default Value | Description |
|---|---|---|---|
homeTitle | String | "SCE-UNIVERSE" | 应用程序主页标题。 |
isShowFriendshipRate | Boolean | false | 是否显示友情训练倍率。 |
isShowAllFriendshipRate | Boolean | false | 是否显示所有友情训练倍率。 |
isCalcV2 | Boolean | false | 是否启用 V2 计算模式。 |
isCalcV3 | Boolean | false | 是否启用 V3 计算模式。 |
isCalcV4 | Boolean | false | 是否启用 V4 计算模式。 |
isCalcV5 | Boolean | false | 是否启用 V5 计算模式。 |
isV5rectify | Boolean | false | 是否启用 V5 校正。 |
defaultLoopV5 | Integer | 1 | V5 计算默认循环次数。 |
isAutoSaveCardData | Boolean | true | 是否自动保存卡片数据。 |
cardDataSavePath | String | "" | 卡片数据保存路径。 |
isCalcDI | Boolean | false | 是否启用 DI 计算。 |
port | Integer | 8080 | 应用程序监听端口。 |
settingDataSavePath | String | "" | 设置数据保存路径。 |
v5DefaultSpeed | String | {"main":"0","sub":"0","SP":"0"} | V5 默认速度属性。 |
v5DefaultPower | String | {"main":"0","sub":"0","SP":"0"} | V5 默认力量属性。 |
v5DefaultStamina | String | {"main":"0","sub":"0","SP":"0"} | V5 默认耐力属性。 |
v5DefaultGuts | String | {"main":"0","sub":"0","SP":"0"} | V5 默认毅力属性。 |
v5DefaultWit | String | {"main":"0","sub":"0","SP":"0"} | V5 默认智力属性。 |