【求助】怎么在开局获得特定蓝图
大佬们,问一下怎么像势力争霸mod那样在开局获得特定的蓝图或者蓝图包,任意开局都要能够实现。{:tieba_39:} 都是开局时触发了,那肯定是通过 BaseModPlugin 的 onNewGameAfterTimePass() 添加呗。 直接控制台刷吧 MAJOR_Kai 发表于 2026-3-11 00:14都是开局时触发了,那肯定是通过 BaseModPlugin 的 onNewGameAfterTimePass() 添加呗。 ...
你好,能说得详细些吗?或者说一个有类似功能的船包mod作参考,我现在还处于拿已有mod修改的水平。 本帖最后由 MAJOR_Kai 于 2026-3-11 21:30 编辑
fly to the moon 发表于 2026-3-11 16:06
你好,能说得详细些吗?或者说一个有类似功能的船包mod作参考,我现在还处于拿已有mod修改的水平。 ...
如果你在尝试自己做mod的话,你需要一个 BaseModPlugin 可以参考其他mod,基本是个涉及生涯模式的mod都会有,只需要懂一点点的JAVA就能做到。
我可以写一个最简单的实例,你可以参考这个用来添加蓝图包。(我会在里面加上注释帮你解释是什么意思)
package data.scripts; // 包的位置
import com.fs.starfarer.api.Global; // Global 必要的导入
import com.fs.starfarer.api.BaseModPlugin; // BaseModPlugin 必要的导入,因为这个class属于 BaseModPlugin
import com.fs.starfarer.api.campaign.CampaignFleetAPI; // CampaignFleetAPI 用于舰队,在这里主要用于玩家舰队
import com.fs.starfarer.api.campaign.SpecialItemData; // SpecialItemData 特殊物品数据,这里主要用于生成蓝图,蓝图属于特殊物品
public class XXXModPlugin extends BaseModPlugin { // XXXModPlugin class 的ID,XXX可以改成你喜欢的例如 BPGiverModPlugin 蓝图给予者模组插件
public void onNewGameAfterTimePass() { // 注意是 onNewGameAfterTimePass 此时玩家舰队已经在游戏内生成不会因为找不到玩家舰队导致空指针异常或是不生成,可以在 BaseModPlugin (Starfarer API) 查看其他类型。
CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet(); // 通过 Global 定位玩家
if (playerFleet != null && playerFleet.getCargo() != null) { // 一些基础检测,防止空指针异常
playerFleet.getCargo().addSpecial(new SpecialItemData("蓝图的ID", null), 1); // 在玩家舰队的货物里添加指定ID的蓝图,蓝图的ID可以去游戏文件或是模组文件的 特殊物品.csv 查询对应的。
}
}
}
最后,你需要在自己的 mod_info.json 中写上你的 BaseModPlugin 路径,依旧可以参考其他模组,也是基本上是个涉及生涯模式的mod都会有。
MAJOR_Kai 发表于 2026-3-12 02:26
如果你在尝试自己做mod的话,你需要一个 BaseModPlugin 可以参考其他mod,基本是个涉及生涯模式的mod都 ...
非常感谢,我会试一试的。
页:
[1]