星系无法生成
本帖最后由 sifang 于 2023-8-11 00:23 编辑我自己在学习如何添加星系,但是不知道为何星系始终无法生成,mod文件已付送
代码:
package data.scripts;
import com.fs.starfarer.api.BaseModPlugin;
import com.fs.starfarer.api.Global;
import data.scripts.world.PTCS_WorldGenerate;
import exerelin.campaign.SectorManager;
// =====================================================================================================================
// >> START
/**
* 定义PTCS_ModPlugin类,继承BaseModPlugin类。
* 该类是Mod程序的执行入口。
* Mod程序的执行入口最好继承BaseModPlugin类,而不必接入ModPlugin接口。因为BaseModPlugin类已接入ModPlugin接口,只要继承该类,就无需将
* ModPlugin接口中的所有抽象方法都实现一遍,按需选用即可。
*/
public class PTCS_ModPlugin extends BaseModPlugin {
/**
* 重写父类的onNewGame()方法。
* 该方法会在创建新游戏时调用,这是在星域中添加内容的首选方法。
*/
@Override
public void onNewGame() {
// 检查是否启用势力争霸
boolean haveNexerelin = Global.getSettings().getModManager().isModEnabled("nexerelin");
// 当未启用势力争霸,或启用势力争霸但未开启随机星域时
if (!haveNexerelin || SectorManager.getManager().isCorvusMode()) {
// 使用默认构造方法创建一个UCSE_WorldGenerate对象,并执行该对象的generate()方法
new PTCS_WorldGenerate().generate(Global.getSector());
}
// 当启用势力争霸且开启随机星域时,什么都不做
}
}
// >> END
// =============================
package data.scripts.world;
import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.campaign.SectorAPI;
import com.fs.starfarer.api.campaign.SectorGeneratorPlugin;
import data.scripts.world.systems.PTCS_Aorura;
// =====================================================================================================================
// >> START
/**
* 定义PTCS_WorldGenerate类,接入SectorGeneratorPlugin接口。
* 该类进行各星系的总体生成设定。
* SectorGeneratorPlugin接口中只有一条抽象方法(generate()方法),实现即可。
*/
public class PTCS_WorldGenerate implements SectorGeneratorPlugin {
/**
* 实现接口的generate()方法。
*/
@Override
public void generate(SectorAPI sector) {
// 使用默认构造方法创建一个PTCS_Aorura对象,并执行该对象的generate()方法
new PTCS_Aorura().generate(sector);
// 当所有值为false时,不生成任何星系
}
}
// >> END
// ================================
package data.scripts.world.systems;
import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.campaign.*;
import com.fs.starfarer.api.campaign.econ.MarketAPI;
import com.fs.starfarer.api.fleet.FleetMemberType;
import com.fs.starfarer.api.impl.campaign.ids.Conditions;
import com.fs.starfarer.api.impl.campaign.ids.Submarkets;
import com.fs.starfarer.api.impl.campaign.ids.Terrain;
import com.fs.starfarer.api.impl.campaign.procgen.NebulaEditor;
import com.fs.starfarer.api.impl.campaign.procgen.StarAge;
import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator;
import com.fs.starfarer.api.impl.campaign.procgen.themes.SalvageSpecialAssigner;
import com.fs.starfarer.api.impl.campaign.terrain.HyperspaceTerrainPlugin;
import com.fs.starfarer.api.impl.campaign.terrain.MagneticFieldTerrainPlugin.MagneticFieldParams;
import com.fs.starfarer.api.util.Misc;
import java.awt.*;
import static com.fs.starfarer.api.impl.campaign.terrain.DebrisFieldTerrainPlugin.DebrisFieldParams;
import static com.fs.starfarer.api.impl.campaign.terrain.DebrisFieldTerrainPlugin.DebrisFieldSource;
// =====================================================================================================================
// >> START
/**
* 定义Aorura类。
* 该类进行恒星系生成的具体设定。若想生成星系,需要先将该类实例化为对象,再由对象执行其中的generate()方法。
*/
public class PTCS_Aorura {
/**
* 定义generate()方法。
* 该方法进行Aorura生成的具体设定。
*/
public void generate(SectorAPI sector) {
// 添加星系
StarSystemAPI system = sector.createStarSystem("PTCS_Aorura");
// 设置星系位置
system.getLocation().set(400F, -19500F);
// 通过本地文件导入星系背景图
system.setBackgroundTextureFilename("graphics/PTCS/backgrounds/backgrounds_Aorura.jpg");
/*
* [恒星]
* 添加一个恒星。参数列表:ID,星球类型,半径,日冕大小。
* 星球类型定义在data/config/planets.json中。
*/
PlanetAPI Aorura_star= system.initStar("Aorura_star", "star_yellow", 600F, 300F);
//星系全局光照颜色
system.setLightColor(new Color(255, 252, 222));
/*
*
* 添加一个行星。参数列表:ID,圆心,显示名称,星球类型,初始角坐标,星球大小,轨道半径,公转周期。
* 星球类型定义在data/config/planets.json中。
*/
PlanetAPI Aorura_I = system.addPlanet("Aorura_1", Aorura_star, "Aorura_star", "barren", 90, 140, 1600, 156);
// 设置调用的描述文本的ID。描述文本定义在data/strings/descriptions中
Aorura_I.setCustomDescriptionId("Aorura_I");
// 在行星上添加一个market,该market与殖民地无关,仅用于设置星球修正
MarketAPI Aorura_I_market = Global.getFactory().createMarket("Aorura_I_market", Aorura_I.getName(), 0);
Aorura_I_market.setPlanetConditionMarketOnly(true);
// 设置修正列表
Aorura_I_market.addCondition(Conditions.VERY_HOT);// 添加修正:异常炎热(+50)
Aorura_I_market.addCondition(Conditions.THIN_ATMOSPHERE);// 添加修正:稀薄大气(+25)
Aorura_I_market.addCondition(Conditions.ORE_RICH);// 添加修正:矿石+2
Aorura_I_market.addCondition(Conditions.RARE_ORE_RICH);// 添加修正:稀有矿石+2
// 将market的位置设置在行星上,并告知行星其拥有一个market
Aorura_I_market.setPrimaryEntity(Aorura_I);
Aorura_I.setMarket(Aorura_I_market);
/*
* [内部跳跃点]
* 添加一个跳跃点。参数列表:ID,显示名称。
*/
JumpPointAPI inside_jumpPoint = Global.getFactory().createJumpPoint("Aorura_jump", "Aorura 内环跳跃点");
// 设置轨道。参数列表:圆心,初始角坐标,轨道半径,公转周期
inside_jumpPoint.setCircularOrbit(system.getEntityById("Aorura_star"), 140, 2600, 526);
// 设置关联星球(超空间中该跳跃点打开后显示在其中的星球,仅为视觉效果)
inside_jumpPoint.setRelatedPlanet(Aorura_I);
// 设置视觉效果
inside_jumpPoint.setStandardWormholeToHyperspaceVisual();
// 添加该跳跃点实体
system.addEntity(inside_jumpPoint);
}
}
{:5_136:}为啥你的星系生成代码要套娃两层壳子
直接丢在PTCS_WorldGenerate里面不就好了
我猜你在mod_info.json中没有挂上自己的modPlugin,导致游戏压根没调用你的代码
{:5_124:} 在modPlugin中直接导入势力争霸的class会导致mod在没有安装势力争霸时会由于找不到exerelin.campaign.SectorManager而报错
继而使得“检查是否启用势力争霸”变成无用代码
最好是在modPlugin的同目录下建立一个新的class
把if (!haveNexerelin || SectorManager.getManager().isCorvusMode()) 放到新的类中
由于同目录下无需Import,而exerelin.campaign.SectorManager由于没在json中挂载,不会因导入了不存在的类而报错导致游戏终止
除非你的mod关联了大量的势力争霸代码,作为势力争霸的附属mod存在 本帖最后由 sifang 于 2023-8-10 21:42 编辑
cjy4312 发表于 2023-8-10 20:28
为啥你的星系生成代码要套娃两层壳子
直接丢在PTCS_WorldGenerate里面不就好了
我猜你在mod_info. ...
我有加
"jars":["jars/PTCS.jar"],
"modPlugin": "data.scripts.PTCS_ModPlugin"
}
所以是代码套娃的问题?
但是我在抄代码的时候抄的是未殖民扩展的代码,几乎一摸一样,为什么它就能跑起来?
sifang 发表于 2023-8-10 21:37
我有加
"jars":["jars/PTCS.jar"],
{:5_128:}不要只看一行字 cjy4312 发表于 2023-8-10 22:19
不要只看一行字
我还是不理解哪里出错了 sifang 发表于 2023-8-10 22:27
我还是不理解哪里出错了
我找到原因了
首先,你的星系Y坐标太大了,很可能超出了屏幕
其次你没给星系的星球设置势力归属,是个空白星系,属于未探索星系,不会自动显示名字,需要鼠标指过去才能看到,所以
不是没生成,是生成了你没找到
{:5_124:}
你把坐标改小点,就能看到它了
我把坐标修正到400F, -500F,就看到它了
本帖最后由 sifang 于 2023-8-11 00:08 编辑
cjy4312 发表于 2023-8-10 23:26
我把坐标修正到400F, -500F,就看到它了
非常感谢!
但是我还是没找到它,400F,-500F
cjy4312 发表于 2023-8-10 23:26
我把坐标修正到400F, -500F,就看到它了
所以可能还有些差异,请问能不能把您修改后的文件发过来?谢谢 sifang 发表于 2023-8-11 00:08
所以可能还有些差异,请问能不能把您修改后的文件发过来?谢谢
{:5_132:}emmm,我看你没有写,我还加了一句
system.autogenerateHyperspaceJumpPoints(true, true);
这是仅有的区别了 cjy4312 发表于 2023-8-11 00:10
emmm,我看你没有写,我还加了一句
system.autogenerateHyperspaceJumpPoints(true, true);
这是 ...
在末尾?
cjy4312 发表于 2023-8-11 00:10
emmm,我看你没有写,我还加了一句
system.autogenerateHyperspaceJumpPoints(true, true);
这是 ...
找到了!这就是不能生成的问题所在!
页:
[1]