Starsector Nihilism Guidance
首页
Github 项目
首页
Github 项目
  • 首页
  • 第一章 基础及舰船相关
    • 小节 MOD结构
    • 小节 基本舰船
    • 小节 航母、战机与相位舰
    • 小节 武器
    • 小节 战术系统
    • 小节 舰船插件
  • 第二章
    • 小节 战役
    • 小节 势力
    • 小节 星系
    • 小节 描述文本
    • 小节 内置装配
  • 第三章
    • 小节 模拟战
    • 小节 舰船风格
    • 小节 模块船
    • 小节 势力争霸
    • 小节 弹体尾迹
    • 小节 音效相关
  • 第四章 等待设计
    • 小节 1
    • 小节 2
    • 小节 3
    • 小节 4
    • 小节 5
    • 小节 6
  • 第五章 核心代码
    • 小节 ModPlugin
    • 小节 Global
    • 小节 CombatEngine 等待设计
    • 小节 CombatEntity 等待设计
    • 小节 5 等待设计
    • 小节 船插 等待设计
    • 小节 战术系统AI 等待设计
    • 小节 开火/命中 等待设计
  • 第六章 进阶 等待设计
    • 小节 BaseEveryFrameCombatPlugin
    • 小节 BaseCombatLayeredRenderingPlugin
    • 小节 EveryFrameWeaponEffectPlugin
    • 小节 AI
    • 小节 动画设计
    • 小节 6
  • 第七章 等待设计
    • 小节 1
    • 小节 2
    • 小节 3
    • 小节 4
    • 小节 5
    • 小节 6
    • 小节 7
  • 第八章 等待设计
    • 小节 1
    • 小节 2
    • 小节 3
    • 小节 4
    • 小节 5
    • 小节 6
  • 第九章 等待设计
    • 小节 1
    • 小节 2
    • 小节 3
    • 小节 4
    • 小节 5
    • 小节 6

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());
			}

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

Edit this page
Last Updated:
Contributors: 1847905557
Next
小节 Global