jaghaimo / stelnet Goto Github PK
View Code? Open in Web Editor NEWA collection of intel boards for Starsector.
Home Page: https://fractalsoftworks.com/forum/index.php?topic=20836
License: GNU General Public License v3.0
A collection of intel boards for Starsector.
Home Page: https://fractalsoftworks.com/forum/index.php?topic=20836
License: GNU General Public License v3.0
Update Readme and forum post. Add screenshots and descriptions.
Reinstate Request cargo / Request ships in Storage board when docked at any non-hidden (e.g. core or player owned) market.
Board for selecting your fleet. Ability to split your fleet into two and pick the one you want to fly. Ability to issue simple orders to other fleets.
Just updated stelnet, loaded my prev. save and tried to access commodities board.
Game crashed with "Fatal: null".
Here's stacktrace from starsector.log:
26425 [Thread-4] ERROR com.fs.starfarer.combat.CombatMain - java.lang.NullPointerException
java.lang.NullPointerException
at stelnet.commodity.market.price.SupplyPrice.<init>(SupplyPrice.java:14)
at stelnet.commodity.market.BuyMarketFactory.<init>(BuyMarketFactory.java:21)
at stelnet.commodity.market.MarketRepository.<init>(MarketRepository.java:15)
at stelnet.commodity.view.TableViewFactory.createTableContent(TableViewFactory.java:41)
at stelnet.commodity.view.TableViewFactory.createContainer(TableViewFactory.java:27)
at stelnet.commodity.CommodityBoard.getRenderables(CommodityBoard.java:68)
at stelnet.ui.RenderableIntel.createLargeDescription(RenderableIntel.java:49)
at com.fs.starfarer.campaign.comms.v2.EventsPanel.Ò00000(Unknown Source)
at com.fs.starfarer.campaign.comms.v2.EventsPanel.actionPerformed(Unknown Source)
at com.fs.starfarer.ui.newnew.buttonPressed(Unknown Source)
at com.fs.starfarer.ui.oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.Ò00000(Unknown Source)
at com.fs.starfarer.ui.oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.processInput(Unknown Source)
at com.fs.starfarer.ui.newnew.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.Oo0o$Oo.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Oo0o.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.campaign.comms.v2.EventsPanel.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.campaign.comms.OOoO.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.newui.class.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Oo0O.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.newui.o0oO.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.campaign.CampaignState.processInput(Unknown Source)
at com.fs.starfarer.BaseGameState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Full starsector.log
A new navigation board that allows to add manage and use a quick access list of locations.
Tab 1: Manage locations (add, remove, reorder?), take course, add to trip.
Tab 2: Current trip management, autopilot on/off. On autopilot will go to the first location, then switch to the next one until it arrives at the end. If location is a market, will dock before continuing.
Tab 3: Trip management: load, delete, save trip data.
Automation tab has board, and history of actions intels (last 30 days).
Board:
Examples:
1000 - min(available on you, available on the market)
supplies.Currently, a list of selectable ships or cargo stacks is generated based on their availability in the market (e.g. if they are available anywhere).
Change list generation to take codex entries (sans restricted tag), thus being able to issue intel for cargo and ships potentially, but currently not, available on the markets.
New board - Trade. Customizable filters in Configure tab, current results in Results tab, and System tab for quick view tab / current system overview.
Tables in Results and System tabs to be configurable (select fields to display, and select fields, multiple, to sort by).
Hello,
My StelNet contacts list gets filled up pretty quickly with junk entries so I was wondering if any of the following features could be added:
The justification for merging these is mostly one for simplicity and having everything all in one place. I understand that I can just select a contact and press 'Show' to be taken to that contact's intel entry and have these commands available but when using many filters in Intel there's a lot of manual back and forth as well as cleanup to do when it could all be in the one place.
Thanks either way, and thanks for the mod.
Right now all property files are located inside JAR. Try loading external files first, before default to built-in translations.
https://stackoverflow.com/questions/49424917/resourcebundle-file-outside-jar
https://stackoverflow.com/questions/8775303/read-properties-file-outside-jar-file
Remove dialog used for intel selection and introduce better functionality via intel board. Use new ui-framework.
This pops up when I try to load a save with the new version of stelnet. The previous version was 1.2
505416 [Thread-3] INFO com.fs.starfarer.campaign.save.CampaignGameManager - Error loading
505417 [Thread-3] ERROR com.fs.starfarer.campaign.save.CampaignGameManager -
---- Debugging information ----
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : stelnet.commodity.CommodityBoard
class : java.util.ArrayList
required-type : java.util.ArrayList
converter-type : com.thoughtworks.xstream.converters.collections.CollectionConverter
line number : 507881
class[1] : com.fs.util.container.repo.ObjectRepository
converter-type[1] : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
class[2] : com.fs.starfarer.campaign.comms.v2.IntelManager
class[3] : com.fs.starfarer.campaign.CampaignEngine
converter-type[2] : com.fs.starfarer.campaign.save.I
version : not available
-------------------------------
com.thoughtworks.xstream.converters.ConversionException:
beforeGameSave
to persist mod state via new repository and unload the mod.afterGameSave
to load mod state and load the mod.Balance market searches around partial, yet accurate intel. By default, all intel will be provided in the form of accurate rumours, indicating a sighting of X in a star system (not at a specific market like now) with no information regarding quantity or quality (if looking for ships).
IF the player has one of:
or is the owner of the market, or is commissioned to a market owner.
Modify market viewer to take either market or star system. If star system is passed, combine all markets and submarkets together. Only allow picking market if legacy behaviour is enabled, or any of the 3 above-mentioned conditions are met.
Additionally, when star system is passed, do:
Adds an option to enable legacy behaviour (always full intel).
Renderable
abstract class as AbstractRenderable
.Renderable
interface and use it in MarketQueryBoard
.RenderableView
interface from previous iteration and use Renderable
in its place.AbstractRenderableIntel
and make BaseBoard
extend it - class will offload callbacks and rendering, since both are managed in ui package anyway.AbstractRenderable
with either Renderable
interface or concrete class that is used.Add intel board for managing your storage transfers. Add intel based on transfers that happened in current month. Stellar Logistics returns.
Rule based board, with an overview of what will be transferred to where.
Form rules, e.g. all ships, just capitals, only weapons, only commodities, or just all for each location (or system or faction) where the player has storage. End of month (or on tick) all matching rules will fire, the player will be notified of what and where was transferred, and billed accordingly.
Remove enum based checks and use IoC instead.
On Storage Board display all discovered derelict stations that have something stored in them.
Add small Intel for them.
Use more fluent dependency injection. Drop GridRenderer and GridData altogether and make Renderable truly renderable.
Externalize all strings as json/csv file, so that translations don't need to fork and edit code.
Tabs:
Could be part of Market tag.
What if you could remotely make a transaction while at comms range at any market you have a storage at?
Should be easy to implement, just open arbitrary market (one call), and on transaction complete (listener) remove all of what you bought from player fleet and add all of it to storage submarket of said market. Only issue is restricting to just buy/sell (making comms, bar, and all other options inaccessible) and having empy cargo player section to avoid selling remotely.
When I load an old save I get an error:
530393 [Thread-3] INFO com.fs.starfarer.campaign.save.CampaignGameManager - Error loading
530393 [Thread-3] ERROR com.fs.starfarer.campaign.save.CampaignGameManager -
---- Debugging information ----
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : stelnet.BaseBoard
class : stelnet.board.viewer.ViewerBoard
required-type : stelnet.board.viewer.ViewerBoard
converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
line number : 971195
class[1] : java.util.ArrayList
converter-type[1] : com.thoughtworks.xstream.converters.collections.CollectionConverter
class[2] : com.fs.util.container.repo.ObjectRepository
class[3] : com.fs.starfarer.campaign.comms.v2.IntelManager
class[4] : com.fs.starfarer.campaign.CampaignEngine
converter-type[2] : com.fs.starfarer.campaign.save.oooO
version : not available
-------------------------------
com.thoughtworks.xstream.converters.ConversionException:
---- Debugging information ----
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : stelnet.BaseBoard
class : stelnet.board.viewer.ViewerBoard
required-type : stelnet.board.viewer.ViewerBoard
converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
line number : 971195
class[1] : java.util.ArrayList
converter-type[1] : com.thoughtworks.xstream.converters.collections.CollectionConverter
class[2] : com.fs.util.container.repo.ObjectRepository
class[3] : com.fs.starfarer.campaign.comms.v2.IntelManager
class[4] : com.fs.starfarer.campaign.CampaignEngine
converter-type[2] : com.fs.starfarer.campaign.save.oooO
version : not available
-------------------------------
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:73)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.addCurrentElementToCollection(CollectionConverter.java:98)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:91)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:85)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.unmarshal(CollectionConverter.java:80)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:503)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:429)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:503)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:429)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:503)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:429)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1486)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1466)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1346)
at com.fs.starfarer.campaign.save.CampaignGameManager.o00000(Unknown Source)
at com.fs.starfarer.title.TitleScreenState.dialogDismissed(Unknown Source)
at com.fs.starfarer.ui.N.dismiss(Unknown Source)
at com.fs.starfarer.ui.impl.K.dismiss(Unknown Source)
at com.fs.starfarer.campaign.save.LoadGameDialog.actionPerformed(Unknown Source)
at com.fs.starfarer.ui.OoO0.buttonPressed(Unknown Source)
at com.fs.starfarer.ui.oooO.Ò00000(Unknown Source)
at com.fs.starfarer.ui.oooO.processInput(Unknown Source)
at com.fs.starfarer.ui.V.o00000(Unknown Source)
at com.fs.starfarer.BaseGameState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: stelnet.BaseBoard
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:81)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
at com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:71)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:47)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.readDeclaringClass(AbstractReflectionConverter.java:570)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:337)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
... 50 more
Add an option to disable intel becoming (or being) stale warnings.
Currently, mod settings live in settings.json, move them to a separate file (ideally ini file) in the mod directory.
Allow for file not to exist or settings not to be present (aka built-in defaults).
Using custom panels, build a rich table UI component. Allows for embedding images, column sorting, and perhaps being clickable (or button column).
To truly be a utility mod, Stelnet needs to be uninstallable (from a save).
Proof of concept
package stelnet.board;
import com.fs.starfarer.api.campaign.CustomUIPanelPlugin;
import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin;
import com.fs.starfarer.api.impl.campaign.intel.BaseIntelPlugin;
import com.fs.starfarer.api.input.InputEventAPI;
import com.fs.starfarer.api.ui.CustomPanelAPI;
import com.fs.starfarer.api.ui.IntelUIAPI;
import com.fs.starfarer.api.ui.PositionAPI;
import com.fs.starfarer.api.ui.TooltipMakerAPI;
import java.util.List;
public class InputTest extends BaseIntelPlugin {
public static String input = "";
public static IntelUIAPI intelUi;
@Override
public void buttonPressConfirmed(Object buttonId, IntelUIAPI ui) {
input = "";
intelUi = ui;
ui.updateUIForItem(this);
}
@Override
public void createLargeDescription(CustomPanelAPI panel, float width, float height) {
final IntelInfoPlugin intel = this;
CustomPanelAPI newPanel = panel.createCustomPanel(
width,
height,
new CustomUIPanelPlugin() {
@Override
public void positionChanged(PositionAPI position) {}
@Override
public void renderBelow(float alphaMult) {}
@Override
public void render(float alphaMult) {}
@Override
public void advance(float amount) {}
@Override
public void processInput(List<InputEventAPI> events) {
for (InputEventAPI event : events) {
if (!event.isKeyDownEvent()) {
continue;
}
InputTest.input += Character.toString(event.getEventChar());
event.consume();
InputTest.intelUi.updateUIForItem(intel);
}
}
}
);
panel.addComponent(newPanel);
TooltipMakerAPI tooltip = panel.createUIElement(width, height, false);
tooltip.addPara("Click on the field to reset content.", 10);
tooltip.addButton(input, "FAKE_INPUT", width, 20, 0);
panel.addUIElement(tooltip);
}
@Override
public boolean hasLargeDescription() {
return true;
}
@Override
public boolean hasSmallDescription() {
return false;
}
}
You could take this class as a good exercise of getting rid of the inheritance and using composition instead. Try looking at some of the design patterns here. Possibly decorator pattern.
https://refactoring.guru/design-patterns/catalog
Also consider renaming this class and all other classes that inherit it. "SharedData" would imply repository or entity/dto. However actually it is a table that has columns and a header. Perhaps DataTableDialog or DataTable would be better.
Originally posted by @mnukka in #24 (comment)
Add a button that removes all tracked Commodity intel. Also add one that does the same but just for selected Commodity.
Finally, add shortcut to per-intel Delete button.
Only allow remote calls to locations which have no outstanding missions attached (extraction, delivery).
A common framework for building tabs and their viewports.
Methods:
And all inherited from Renderable.
I don't keep a list anywhere, might have to check all entities in the sector once they can be identified by their memory key at least (set by Misc.setAbandonedStationMarket)
public static void setAbandonedStationMarket(String marketId, SectorEntityToken station) {
station.getMemoryWithoutUpdate().set("$abandonedStation", true);
Currently, only "for-hire" officers are searchable (old-style). Add option to search for mercenary officers (1 year contracts).
Include rumours of ship sightings based on system fleets. Never upgradeable to full intel.
Convertible intel (small into large, large into small).
Could this be made more generic, e.g. full path to the game folder (sans \\mods\\stelnet
) with mods
defined somewhere else, and modname taken from the mod_info.json
via slurper?
Originally posted by @jaghaimo in #27 (comment)
Next Stelnet version will treat remote call while docked at the same location as normal vanilla call. As for truly remote call I will set a flag for the duration of the call, but you can also just check distance.
Also, try to find a bug with Sebastyen nuking your fleet (delivery mission).
im using an aur package and it probably ones to save in an restricted location
possible fixes:
make it to only give an error message or add redundant save location like the mod directory
error code
97929 [Thread-4] ERROR com.fs.starfarer.combat.CombatMain - java.io.FileNotFoundException: stelnet.log (Keine Berechtigung)
A conditional board that only shows up when mod that offers ship conversion is enabled.
Board per mod: Offers a quick overview of ships from a given mod that can be created from other ships (and list of source ships for conversion).
One board for source ships: Offers a quick overview of ships that can be converted to other ships (and list of target ships that can be created from source ship).
All boards have intel buttons that enable a relevant small intel with details on all ships in a row (sources and targets alike).
Rework board using new ui-framework.
UI container for dynamically adjusting height based on content. Specify desired (max) width and all elements will render left-to-right, top-to-bottom.
Boards built with new UI-framework are prone to UI overflow.
Fix those instances.
Add a 3rd tab. A panel dedicated to managing results, thus:
Linux
Pop!_OS 20.04
Also posted on the forum
ERROR com.fs.starfarer.combat.CombatMain - java.lang.ArrayIndexOutOfBoundsException: -1
java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(Unknown Source)
at java.util.ArrayList.remove(Unknown Source)
at stelnet.storage.view.StorageTabViewFactory.addStorageData(StorageTabViewFactory.java:101)
at stelnet.storage.view.StorageTabViewFactory.getTabPane(StorageTabViewFactory.java:73)
at stelnet.storage.view.StorageTabViewFactory.createContainer(StorageTabViewFactory.java:45)
at stelnet.market.MarketViewBoard.getRenderables(MarketViewBoard.java:64)
at stelnet.ui.RenderableIntel.createLargeDescription(RenderableIntel.java:51)
at com.fs.starfarer.campaign.comms.v2.EventsPanel.Ò00000(Unknown Source)
at com.fs.starfarer.campaign.comms.v2.EventsPanel.actionPerformed(Unknown Source)
at com.fs.starfarer.ui.newnew.buttonPressed(Unknown Source)
at com.fs.starfarer.ui.oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.Ò00000(Unknown Source)
at com.fs.starfarer.ui.oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.processInput(Unknown Source)
at com.fs.starfarer.ui.newnew.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.Oo0o$Oo.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Oo0o.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.campaign.comms.v2.EventsPanel.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.campaign.comms.OOoO.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.newui.class.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Oo0O.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.newui.o0oO.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Oo0O.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.newui.Stringsuper.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.ui.oO00.dispatchEventsToChildren(Unknown Source)
at com.fs.starfarer.ui.oO00.processInputImpl(Unknown Source)
at com.fs.starfarer.ui.Q.processInput(Unknown Source)
at com.fs.starfarer.campaign.CampaignState.processInput(Unknown Source)
at com.fs.starfarer.BaseGameState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
To be worked on along with Milan (https://github.com/MilanTodorovic/Explore_the_galaxy/). Most likely taking over this mod and reimplementing it as part of Stelnet.
New board and UI design needed.
Make Commodity-specific UI package generic (move outside of commodity
package) and rebuild StorageBoard
with it.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.