sifang 发表于 2023-8-10 18:33:36

星系无法生成

本帖最后由 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);
      }
}

cjy4312 发表于 2023-8-10 20:28:53

{:5_136:}为啥你的星系生成代码要套娃两层壳子
直接丢在PTCS_WorldGenerate里面不就好了
我猜你在mod_info.json中没有挂上自己的modPlugin,导致游戏压根没调用你的代码
{:5_124:}

cjy4312 发表于 2023-8-10 20:41:29

在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:37:10

本帖最后由 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"
}

所以是代码套娃的问题?
但是我在抄代码的时候抄的是未殖民扩展的代码,几乎一摸一样,为什么它就能跑起来?

cjy4312 发表于 2023-8-10 22:19:07

sifang 发表于 2023-8-10 21:37
我有加

          "jars":["jars/PTCS.jar"],


{:5_128:}不要只看一行字

sifang 发表于 2023-8-10 22:27:27

cjy4312 发表于 2023-8-10 22:19
不要只看一行字

我还是不理解哪里出错了

cjy4312 发表于 2023-8-10 23:25:03

sifang 发表于 2023-8-10 22:27
我还是不理解哪里出错了

我找到原因了
首先,你的星系Y坐标太大了,很可能超出了屏幕
其次你没给星系的星球设置势力归属,是个空白星系,属于未探索星系,不会自动显示名字,需要鼠标指过去才能看到,所以
不是没生成,是生成了你没找到
{:5_124:}
你把坐标改小点,就能看到它了

cjy4312 发表于 2023-8-10 23:26:53



我把坐标修正到400F, -500F,就看到它了

sifang 发表于 2023-8-10 23:32:30

本帖最后由 sifang 于 2023-8-11 00:08 编辑

cjy4312 发表于 2023-8-10 23:26
我把坐标修正到400F, -500F,就看到它了
非常感谢!
但是我还是没找到它,400F,-500F


sifang 发表于 2023-8-11 00:08:30

cjy4312 发表于 2023-8-10 23:26
我把坐标修正到400F, -500F,就看到它了

所以可能还有些差异,请问能不能把您修改后的文件发过来?谢谢

cjy4312 发表于 2023-8-11 00:10:51

sifang 发表于 2023-8-11 00:08
所以可能还有些差异,请问能不能把您修改后的文件发过来?谢谢
{:5_132:}emmm,我看你没有写,我还加了一句
system.autogenerateHyperspaceJumpPoints(true, true);
这是仅有的区别了

sifang 发表于 2023-8-11 00:14:29

cjy4312 发表于 2023-8-11 00:10
emmm,我看你没有写,我还加了一句
system.autogenerateHyperspaceJumpPoints(true, true);
这是 ...

在末尾?

sifang 发表于 2023-8-11 00:23:17

cjy4312 发表于 2023-8-11 00:10
emmm,我看你没有写,我还加了一句
system.autogenerateHyperspaceJumpPoints(true, true);
这是 ...

找到了!这就是不能生成的问题所在!
页: [1]
查看完整版本: 星系无法生成