Alright, having a problem with getting some market conditions to behave properly. The following scripts do compile in Netbeans, and the game will load up to the menu properly with them in the jar.
However, if this set of market data is called in a systems economy it crashes when starting a campaign; the code snippets should look familiar to Alex, they're basically cribbed from what I believe are the standard WorldFarming.java:
Spoiler
package data.scripts.campaign.econ;
import com.fs.starfarer.api.impl.campaign.ids.Commodities;
import com.fs.starfarer.api.impl.campaign.econ.BaseMarketConditionPlugin;
public class ms_worldFarming extends BaseMarketConditionPlugin {
private final float foodMult, machineryMult, maxFood;
public ms_worldFarming(float foodMult, float machineryMult) {
this.foodMult = foodMult;
this.machineryMult = machineryMult;
this.maxFood = Float.MAX_VALUE;
}
public ms_worldFarming(float foodMult, float machineryMult, float maxFood) {
this.foodMult = foodMult;
this.machineryMult = machineryMult;
this.maxFood = maxFood;
}
@Override
public void apply(String id) {
float pop = getPopulation(market);
float foodProduced = pop * foodMult;
if (foodProduced > maxFood) foodProduced = maxFood;
float organicsProduced = foodProduced * ms_conditionData.FARMING_ORGANICS_FRACTION;
float machineryNeeded = pop * machineryMult;
market.getCommodityData(Commodities.ORGANICS).getSupply().modifyFlat(id, Math.max(1, organicsProduced));
market.getCommodityData(Commodities.FOOD).getSupply().modifyFlat(id, Math.max(1, foodProduced));
market.getDemand(Commodities.HEAVY_MACHINERY).getDemand().modifyFlat(id, Math.max(1, machineryNeeded));
}
@Override
public void unapply(String id) {
market.getCommodityData(Commodities.ORGANICS).getSupply().unmodify(id);
market.getCommodityData(Commodities.FOOD).getSupply().unmodify(id);
market.getDemand(Commodities.HEAVY_MACHINERY).getDemand().unmodify(id);
}
}
And one of the world specific ones:
Spoiler
package data.scripts.campaign.econ;
class ms_worldSemiArid extends ms_worldFarming {
public ms_worldSemiArid() {
super(ms_conditionData.MS_WORLD_SEMI_ARID_FARMING_MULT, ms_conditionData.MS_WORLD_SEMI_ARID_MACHINERY_MULT);
}
}
Which gives this... helpful error message:
Spoiler
27329 [Thread-5] ERROR com.fs.starfarer.combat.String - java.lang.RuntimeException: java.lang.RuntimeException: Problem loading class [data.scripts.campaign.econ.ms_worldSemiArid]
java.lang.RuntimeException: java.lang.RuntimeException: Problem loading class [data.scripts.campaign.econ.ms_worldSemiArid]
at com.fs.starfarer.campaign.save.CampaignGameManager.o00000(Unknown Source)
at com.fs.starfarer.title.OoOO.dialogDismissed(Unknown Source)
at com.fs.starfarer.ui.do.dismiss(Unknown Source)
at com.fs.starfarer.ui.impl.J.dismiss(Unknown Source)
at com.fs.starfarer.campaign.save.J.actionPerformed(Unknown Source)
at com.fs.starfarer.ui.OOO0.super(Unknown Source)
at com.fs.starfarer.ui.H.processInput(Unknown Source)
at com.fs.starfarer.ui.O0Oo.o00000(Unknown Source)
at com.fs.starfarer.B.void.class$super(Unknown Source)
at com.fs.A.A.Ò00000(Unknown Source)
at com.fs.starfarer.combat.String.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncherjava.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: Problem loading class [data.scripts.campaign.econ.ms_worldSemiArid]
at com.fs.starfarer.loading.scripts.ScriptStore.Ó00000(Unknown Source)
at com.fs.starfarer.loading.M.String(Unknown Source)
at com.fs.starfarer.campaign.econ.MarketCondition.<init>(Unknown Source)
at com.fs.starfarer.campaign.econ.Market.addCondition(Unknown Source)
at com.fs.starfarer.campaign.econ.Market.addCondition(Unknown Source)
at com.fs.starfarer.campaign.econ.Market.addCondition(Unknown Source)
at com.fs.starfarer.campaign.econ.B.o00000(Unknown Source)
at com.fs.starfarer.campaign.econ.B.o00000(Unknown Source)
at com.fs.starfarer.campaign.econ.B.o00000(Unknown Source)
... 13 more
Caused by: java.lang.IllegalAccessException: Class com.fs.starfarer.loading.scripts.ScriptStore can not access a member of class data.scripts.campaign.econ.ms_worldSemiArid with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:109)
at java.lang.Class.newInstance(Class.java:373)
... 22 more
Alternatively I tried dumping the script directly into the world specific java and ignoring the idea of a seperate core file to call the planet specific details from; this is from before I set up a market condition file:
Spoiler
package data.scripts.campaign.econ;
import com.fs.starfarer.api.impl.campaign.ids.Commodities;
import com.fs.starfarer.api.impl.campaign.econ.BaseMarketConditionPlugin;
class ms_worldSemiArid extends BaseMarketConditionPlugin {
@Override
public void apply(String id) {
float pop = getPopulation(market);
float foodProduced = pop * 0.15f;
//if (foodProduced > maxFood) foodProduced = maxFood;
float organicsProduced = foodProduced * 0.05;
float machineryNeeded = pop * 0.0008f;
market.getCommodityData(Commodities.ORGANICS).getSupply().modifyFlat(id, Math.max(1, organicsProduced));
market.getCommodityData(Commodities.FOOD).getSupply().modifyFlat(id, Math.max(1, foodProduced));
market.getDemand(Commodities.HEAVY_MACHINERY).getDemand().modifyFlat(id, Math.max(1, machineryNeeded));
}
@Override
public void unapply(String id) {
market.getCommodityData(Commodities.ORGANICS).getSupply().unmodify(id);
market.getCommodityData(Commodities.FOOD).getSupply().unmodify(id);
market.getDemand(Commodities.HEAVY_MACHINERY).getDemand().unmodify(id);
}
}
This results in the following error:
Spoiler
32498 [Thread-5] ERROR com.fs.starfarer.combat.String - java.lang.RuntimeException: java.lang.RuntimeException: Problem loading class [data.scripts.campaign.econ.ms_worldSemiArid]
java.lang.RuntimeException: java.lang.RuntimeException: Problem loading class [data.scripts.campaign.econ.ms_worldSemiArid]
at com.fs.starfarer.campaign.save.CampaignGameManager.o00000(Unknown Source)
at com.fs.starfarer.title.OoOO.dialogDismissed(Unknown Source)
at com.fs.starfarer.ui.do.dismiss(Unknown Source)
at com.fs.starfarer.ui.impl.J.dismiss(Unknown Source)
at com.fs.starfarer.campaign.save.J.actionPerformed(Unknown Source)
at com.fs.starfarer.ui.OOO0.super(Unknown Source)
at com.fs.starfarer.ui.H.processInput(Unknown Source)
at com.fs.starfarer.ui.O0Oo.o00000(Unknown Source)
at com.fs.starfarer.B.void.class$super(Unknown Source)
at com.fs.A.A.Ò00000(Unknown Source)
at com.fs.starfarer.combat.String.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncherjava.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: Problem loading class [data.scripts.campaign.econ.ms_worldSemiArid]
at com.fs.starfarer.loading.scripts.ScriptStore.Ó00000(Unknown Source)
at com.fs.starfarer.loading.M.String(Unknown Source)
at com.fs.starfarer.campaign.econ.MarketCondition.<init>(Unknown Source)
at com.fs.starfarer.campaign.econ.Market.addCondition(Unknown Source)
at com.fs.starfarer.campaign.econ.Market.addCondition(Unknown Source)
at com.fs.starfarer.campaign.econ.Market.addCondition(Unknown Source)
at com.fs.starfarer.campaign.econ.B.o00000(Unknown Source)
at com.fs.starfarer.campaign.econ.B.o00000(Unknown Source)
at com.fs.starfarer.campaign.econ.B.o00000(Unknown Source)
... 13 more
Caused by: java.lang.InstantiationException: data.scripts.campaign.econ.ms_worldSemiArid
at java.lang.Class.newInstance(Class.java:364)
... 22 more
In both instances the super function seems to play a role, but the why escapes me.
For now, that's all; thanks for any help you can offer.
(Edited to add code=java for readability -Alex)