Starsector Nihilism Guidance
首页
GitHub 项目
首页
GitHub 项目
  • 首页
  • 第一章 基础及舰船相关
    • 熟悉 MOD 文件夹
    • 制作一艘基本舰船
    • 制作航母、战机与相位舰
    • 制作火炮、光束与导弹
    • 制作战术系统与右键战术系统
    • 制作舰船插件
  • 第二章
    • 制作测试战役与战役
    • 制作新常规势力
    • 制作新星系
    • 文本补充
    • 各类内置
  • 第三章
    • 模拟战与标题演示
    • 舰船风格与引擎风格
    • 制作模块船
    • 初步支持势力争霸
    • 制作弹体尾迹
    • 设置音效与音乐
  • 第四章 等待设计
    • 等待设计
    • 等待设计
    • 等待设计
    • 等待设计
    • 等待设计
    • 等待设计
  • 第五章 核心代码
    • ModPlugin 精确聚焦
    • Global/Global 衍生/settings 精确聚焦
    • 战斗引擎 精确聚焦
    • 简单战斗实体 精确聚焦
    • 复杂战斗实体 精确聚焦
    • 舰船插件 精确聚焦
    • 战术系统/战术系统 AI 精确聚焦
    • 射弹/光束 开火/命中特效 精确聚焦
  • 第六章 进阶 等待设计
    • 基础战场每帧 精确聚焦
    • 战场渲染每帧 精确聚焦
    • 武器每帧 精确聚焦
    • 非战术系统 AI 精确聚焦
    • 武器/模块动画设计 精确聚焦
    • 等待设计
  • 第七章 等待设计
    • SectorAPI 精确聚焦
    • LocationAPI 精确聚焦
    • 简单生涯实体 精确聚焦
    • 复杂生涯实体 精确聚焦
    • 势力/人物/关系 精确聚焦
    • 市场(而不是子市场) 精确聚焦
    • 市场内部属性 精确聚焦
  • 第八章 等待设计
    • 生涯每帧/监听器 精确聚焦
    • 酒吧事件/事件链/弹窗 精确聚焦
    • Rules/联络人/事件池 精确聚焦
    • Memory(不仅仅是 API) 精确聚焦
    • 等待设计
    • 等待设计
  • 第九章 等待设计
    • LazyLib 使用建议
    • GraphicLib 使用建议
    • MagicLib 使用建议
    • 等待设计
    • 等待设计
    • 等待设计

ModPlugin 精确聚焦

本节预期阅读时间:~5 分钟。

本节预期操作时间:~5 分钟。

在一切之前...

再次强调,编者默认您已经在此处或类似的地方学习了基本 Java 语法并安装了一种叫IDEA的工具,且包括编译、封装等基础操作。编者将默认您对于各类 Java 基础概念均拥有一定程度上的理解,并不再提及诸如类名调整等简单修改。如果您并不了解上述内容,请去学习它。

重新审视 ModPlugin

ModPlugin 是目前接触地较为频繁的类,也是一个关键类。ModPlugin 应当继承了 BaseModPlugin,它的主要作用是为生涯模式的新建、存档、读档相关步骤插入新的自定义步骤,以及用于设置各类舰船、导弹、武器开火的默认 AI。通常来说,ModPlugin 不会频繁修改。

    // 几个必须解析且常用的方法

	// 在游戏保存时调用
	public void beforeGameSave() {
		
	}

	// 在游戏读档完毕时调用
	public void onGameLoad(boolean newGame) {
		
	}

	// 在远行星号这个程序刚启动时调用
	public void onApplicationLoad() throws Exception {
		
	}

	// 在新建一局生涯时调用
	public void onNewGame() {
		
	}

	// 在此自定义舰船默认 AI,返回 null 时则为原版舰船 AI。注意传入的是 FleetMemberAPI
	public PluginPick<ShipAIPlugin> pickShipAI(FleetMemberAPI member, ShipAPI ship) {
		return null;
	}

	// 在此自定义武器开火默认 AI,返回 null 时则为原版武器开火 AI
	public PluginPick<AutofireAIPlugin> pickWeaponAutofireAI(WeaponAPI weapon) {
		return null;
	}

	// 在此自定义导弹默认 AI,返回 null 时则为原版导弹 AI
	public PluginPick<MissileAIPlugin> pickMissileAI(MissileAPI missile,
			ShipAPI launchingShip) {
		return null;
	}

	// 其余方法请自行 ctrl+左键 检查

现在详细回顾齿轮工业的 ModPlugin 到底做了什么事情:

package data.scripts;

import com.fs.starfarer.api.BaseModPlugin;
import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.impl.campaign.shared.SharedData;

public class GearIn_ModPlugin extends BaseModPlugin {

	@Override
	public void onGameLoad(boolean newGame) {

	}

	@Override
	public void beforeGameSave() {

	}

	@Override
	public void onApplicationLoad() {

	}
	
	@Override
	public void onNewGame() {

		if (NEX()) {

		} else {
			// 在此准备生成星系

			new GearIn_NormalGenerate().generate(Global.getSector());
		}

		SharedData.getData().getPersonBountyEventData().addParticipatingFaction("gear_industry");
	}

	public static boolean NEX() {
		return Global.getSettings().getModManager().isModEnabled("nexerelin");
	}
}

很显然,它在 onNewGame 处添加了检测,当没有开启势力争霸时生成星系。然后用 SharedData 将势力注册到支持赏金机制的列表中。这是一个非常原始且简单的例子,但随着后续的开发,ModPlugin 将变得越来越复杂。

完全支持势力争霸

不过既然都以势力争霸作为例子了,那么就直接在此做它的完全支持。在前文 前缀名_NormalGenerate 的同目录下新建 前缀名_NEXGenerate,然后导入:

package data.scripts;

import com.fs.starfarer.api.campaign.SectorAPI;
import exerelin.campaign.SectorManager;

public class GearIn_NEXGenerate extends PLSP_NormalGenerate {
	
	@Override
	public void generate(SectorAPI sector) {
		if (SectorManager.getManager().isCorvusMode()) { // 检测 nex 是否为原版地图模式
			super.generate(sector);
		}
	}
}

并修改 ModPlugin:

			if (NEX()) {
				new GearIn_NEXGenerate().generate(Global.getSector());
			} else {
				new GearIn_NormalGenerate().generate(Global.getSector());
			}

即可完成完整的势力争霸支持。

在 GitHub 上编辑此页
上次更新: 2023/10/30 04:56
贡献者: 1847905557
下一页
Global/Global 衍生/settings 精确聚焦