wyatt1683 发表于 2026-3-23 17:56:12

关于如何用直接用控制台添加、删除星球

老是找不到距离核心星区近一些的星系做殖民地,又不想殖民地分的太开,就研究了一下怎么手搓殖民地星球,论坛里可以找到最基本的添加星球命令,但复杂一点的情况就找不到了。


研究了下把方法分享给大家。

最简单的添加星球,这个也是论坛里找到的

runcode import com.fs.starfarer.api.util.Misc; String planetName = "星球名字";
float planetOrbitDays = 180;   // 公转周期,就是绕着太阳多久转一圈,这个单位是天
float planetSize = 150;   //星球大小,普通星球就100到150就够了。
Vector2f playerCoords = $playerFleet.getLocation();
float angleCCW = Misc.getAngleInDegreesStrict(playerCoords);
StarSystemAPI sys = (StarSystemAPI)$playerFleet.getContainingLocation();
PlanetAPI star = sys.getStar();
float orbitRadius = Misc.getDistance(star.getLocation(), playerCoords);
PlanetAPI planet = sys.addPlanet(planetName, star, planetName, "terran", angleCCW, planetSize, orbitRadius, planetOrbitDays );//terran是星球类型,论坛里很容易找到
下面的内容是添加星球特征的,论坛里也很容易找到,就不多说了。

MarketAPI market = sys.getEntityById(planetName).getMarket();
market.addCondition("organics_plentiful");
market.addCondition("farmland_bountiful");
market.addCondition("ore_ultrarich");
market.addCondition("rare_ore_ultrarich");
market.addCondition("volatiles_plentiful");
market.addCondition("habitable");
market.addCondition("mild_climate");



再举一个例子,添加一个气态行星

runcode import com.fs.starfarer.api.util.Misc;
String planetName = "星球名字";         // 修改为你想要的名字
float planetOrbitDays = 180;             // 公转周期
float planetSize = 280;                  // 气态巨行星视觉较大,建议 250–350
Vector2f playerCoords = $playerFleet.getLocation();
float angleCCW = Misc.getAngleInDegreesStrict(playerCoords);
StarSystemAPI sys = (StarSystemAPI)$playerFleet.getContainingLocation();
PlanetAPI star = sys.getStar();
float orbitRadius = Misc.getDistance(star.getLocation(), playerCoords);
PlanetAPI planet = sys.addPlanet(planetName, star, planetName, "gas_giant", angleCCW, planetSize, orbitRadius, planetOrbitDays);   // gas_giant为星球类型
MarketAPI market = sys.getEntityById(planetName).getMarket();
// 气态巨行星通常富含挥发物,添加此条件
market.addCondition("volatiles_plentiful");




现在出现一个情况如果你想添加一个卫星给这个气态行星该怎么做?


runcode import com.fs.starfarer.api.util.Misc;
String moonName = "卫星";//
String giantName = "气态行星";//注意,这里的名字如果是你生成的,那就是那个你输入的,如果是原生星球,你需要通过list planet命令去看一下,因为显示出来的那个名字好像不管用,得用那个星球的一个标识符,类似“system_22b3:planet_1”这样的
StarSystemAPI sys = (StarSystemAPI)$playerFleet.getContainingLocation();
Object giantObj = sys.getEntityById(giantName);
PlanetAPI gasGiant = (PlanetAPI) giantObj;

// 设定卫星参数
float moonSize = 100;
float moonOrbitRadius = 450; //这个是卫星和气态行星的距离
float moonOrbitDays = 90;
float moonAngle = 0;
String moonType = "cryovolcanic";这个是这个卫星的星球类型

// 添加卫星
PlanetAPI moon = sys.addPlanet(moonName, gasGiant, moonName, moonType, moonAngle, moonSize, moonOrbitRadius, moonOrbitDays);
MarketAPI moonMarket = sys.getEntityById(moonName).getMarket();
moonMarket.addCondition("volatiles_plentiful");
moonMarket.addCondition("cold");



我不小心把一个星球和原生星球放在一个轨道上了,公转还不一样,最后会重叠,干脆研究了下怎么把那个星球删了
删除一个星球

runcode import com.fs.starfarer.api.util.Misc;
String planetName = "system_22b3:planet_1";//这是要删除星球的名字,可以通过list planet命令查看
StarSystemAPI sys = (StarSystemAPI)$playerFleet.getContainingLocation();
SectorEntityToken entity = sys.getEntityById(planetName);
PlanetAPI planet = (PlanetAPI) entity;
sys.removeEntity(planet);


浪子君 发表于 4 天前

这个别人发的

浪子君 发表于 4 天前

runcode StarSystemAPI system = (StarSystemAPI)Global.getSector().getPlayerFleet().getContainingLocation();
system.addAsteroidBelt( system.getCenter(), 80, 3000, 200, 400, 460 );

浪子君 发表于 4 天前

第一个数字室小行星数量,第二个是环带的半径,第三个是小行星带的宽度,第四个是最小环绕周期,第五个是最大环绕周期

浪子君 发表于 3 天前

浪子君 发表于 2026-3-28 22:47
runcode StarSystemAPI system = (StarSystemAPI)Global.getSector().getPlayerFleet().getContainingLocat ...

第一个最好加两个0,千位数以下看不到影子{:tieba_23:}
页: [1]
查看完整版本: 关于如何用直接用控制台添加、删除星球