diff --git a/client/ext-resources/all/items.xml b/client/ext-resources/all/items.xml
index cc4f0e9..adbd1d3 100644
--- a/client/ext-resources/all/items.xml
+++ b/client/ext-resources/all/items.xml
@@ -131,7 +131,7 @@
-
+
diff --git a/client/ext-resources/all/world.xml b/client/ext-resources/all/world.xml
index b6b82ee..f605777 100644
--- a/client/ext-resources/all/world.xml
+++ b/client/ext-resources/all/world.xml
@@ -131,7 +131,7 @@
-
+
diff --git a/client/src/main/java/ru/trader/EDCE.java b/client/src/main/java/ru/trader/EDCE.java
index 0211996..7737ed3 100644
--- a/client/src/main/java/ru/trader/EDCE.java
+++ b/client/src/main/java/ru/trader/EDCE.java
@@ -150,6 +150,27 @@ public class EDCE {
LOG.warn("Not found {}, id={}", commodity, id);
}
}
+ Shipyard shipyard = starport.getShips();
+ if (shipyard != null){
+ for (ShipyardItem ship : shipyard.getShips()) {
+ String id = Converter.getShipId(ship);
+ if (id.isEmpty()){
+ LOG.debug("{} is ignored, skip", ship.getName());
+ continue;
+ }
+ Optional item = world.getItem(id);
+ if (item.isPresent()){
+ Optional offer = updater.getOffer(item.get());
+ if (offer.isPresent()){
+ fillShipOffer(offer.get(), ship);
+ } else {
+ LOG.error("Not found offer in updater, item: {}", item.get());
+ }
+ } else {
+ LOG.warn("Not found {}, id={}", ship, id);
+ }
+ }
+ }
StationModel res = updater.commit();
updater.reset();
return res;
@@ -157,9 +178,16 @@ public class EDCE {
private void fillOffers(StationUpdater.FakeOffer offer, Commodity commodity){
offer.setSprice(commodity.getBuyPrice());
+ offer.setSupply(commodity.getStock());
offer.setBprice(commodity.getSellPrice());
offer.setDemand(commodity.getDemand());
- offer.setSupply(commodity.getStock());
+ }
+
+ private void fillShipOffer(StationUpdater.FakeOffer offer, ShipyardItem ship){
+ offer.setSprice(ship.getBasevalue());
+ offer.setSupply(1);
+ offer.setBprice(0);
+ offer.setDemand(0);
}
private void checkShip(Ship ship){
diff --git a/utils/src/main/java/ru/trader/edce/Converter.java b/utils/src/main/java/ru/trader/edce/Converter.java
index 3e1bbd5..3ca18f1 100644
--- a/utils/src/main/java/ru/trader/edce/Converter.java
+++ b/utils/src/main/java/ru/trader/edce/Converter.java
@@ -1,6 +1,7 @@
package ru.trader.edce;
import ru.trader.edce.entities.Commodity;
+import ru.trader.edce.entities.ShipyardItem;
import java.util.HashMap;
import java.util.Map;
@@ -114,29 +115,29 @@ public class Converter {
GROUP_ID.put("Weapons", "weapons");
- SHIP_ID.put(128049249L,"Sidewinder");
- SHIP_ID.put(128049261L, "Hauler");
- SHIP_ID.put(128049255L, "Eagle");
- SHIP_ID.put(128049267L, "Adder");
- // SHIP_ID.put("Imperial Eagle");
- SHIP_ID.put(128049273L, "Viper");
- SHIP_ID.put(128049279L, "Cobra MK3");
- SHIP_ID.put(128671217L, "Diamondback Scout");
- SHIP_ID.put(128049285L, "TYPE-6");
- // SHIP_ID.put("Diamondback Explorer");
- SHIP_ID.put(128049309L, "Vulture");
- SHIP_ID.put(128049303L, "ASP");
- // SHIP_ID.put("TYPE-7");
- // SHIP_ID.put("Imperial Clipper");
- // SHIP_ID.put("Imperial Courier");
- SHIP_ID.put(128049321L, "Federal Dropship");
- // SHIP_ID.put("Federal Assault Ship");
- // SHIP_ID.put("Federal Gunship");
- // SHIP_ID.put("Orca");
- // SHIP_ID.put("Fer-de-Lance");
- SHIP_ID.put(128049339L, "Python");
- // SHIP_ID.put("TYPE-9");
- SHIP_ID.put(128049363L, "Anaconda");
+ SHIP_ID.put(128049249L,"sidewinder");
+ SHIP_ID.put(128049261L, "hauler");
+ SHIP_ID.put(128049255L, "eagle");
+ SHIP_ID.put(128049267L, "adder");
+ SHIP_ID.put(128672138L, "imperial_eagle");
+ SHIP_ID.put(128049273L, "viper");
+ SHIP_ID.put(128049279L, "cobraMk3");
+ SHIP_ID.put(128671217L, "diamondback_scout");
+ SHIP_ID.put(128049285L, "type6");
+ SHIP_ID.put(128671831L, "diamondback_explorer");
+ SHIP_ID.put(128049309L, "vulture");
+ SHIP_ID.put(128049303L, "asp");
+ SHIP_ID.put(128049297L, "type7");
+ SHIP_ID.put(128049315L, "imperial_clipper");
+ SHIP_ID.put(128671223L, "imperial_courier");
+ SHIP_ID.put(128049321L, "federal_dropship");
+ SHIP_ID.put(128672145L, "federal_assault_ship");
+ SHIP_ID.put(128672152L, "federal_gunship");
+ SHIP_ID.put(128049327L, "orca");
+ SHIP_ID.put(128049351L, "fer_de_lance");
+ SHIP_ID.put(128049339L, "python");
+ SHIP_ID.put(128049333L, "type9");
+ SHIP_ID.put(128049363L, "anaconda");
}
public static String getItemId(Commodity commodity){
@@ -151,4 +152,8 @@ public class Converter {
return GROUP_ID.get(edName);
}
+ public static String getShipId(ShipyardItem ship){
+ return SHIP_ID.get(ship.getId());
+ }
+
}
diff --git a/utils/src/main/java/ru/trader/edce/entities/Shipyard.java b/utils/src/main/java/ru/trader/edce/entities/Shipyard.java
new file mode 100644
index 0000000..e3c9573
--- /dev/null
+++ b/utils/src/main/java/ru/trader/edce/entities/Shipyard.java
@@ -0,0 +1,35 @@
+package ru.trader.edce.entities;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.*;
+
+public class Shipyard {
+ @JsonProperty("shipyard_list")
+ private Map items = new HashMap<>();
+ @JsonProperty("unavailable_list")
+ private List unavailables = new ArrayList<>();
+
+
+ public Map getItems() {
+ return items;
+ }
+
+ public void setItems(Map items) {
+ this.items = items;
+ }
+
+ public List getUnavailables() {
+ return unavailables;
+ }
+
+ public void setUnavailables(List unavailables) {
+ this.unavailables = unavailables;
+ }
+
+ public Collection getShips(){
+ Collection ships = new ArrayList<>(items.values());
+ ships.addAll(unavailables);
+ return ships;
+ }
+}
diff --git a/utils/src/main/java/ru/trader/edce/entities/ShipyardItem.java b/utils/src/main/java/ru/trader/edce/entities/ShipyardItem.java
index 5f206f6..b925419 100644
--- a/utils/src/main/java/ru/trader/edce/entities/ShipyardItem.java
+++ b/utils/src/main/java/ru/trader/edce/entities/ShipyardItem.java
@@ -28,4 +28,13 @@ public class ShipyardItem {
public void setBasevalue(long basevalue) {
this.basevalue = basevalue;
}
+
+ @Override
+ public String toString() {
+ return "ShipyardItem{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", basevalue=" + basevalue +
+ "} ";
+ }
}
diff --git a/utils/src/main/java/ru/trader/edce/entities/Starport.java b/utils/src/main/java/ru/trader/edce/entities/Starport.java
index 9a9c7ea..5c548b2 100644
--- a/utils/src/main/java/ru/trader/edce/entities/Starport.java
+++ b/utils/src/main/java/ru/trader/edce/entities/Starport.java
@@ -8,6 +8,7 @@ public class Starport {
private String faction;
private List commodities = new ArrayList<>();
private Map modules = new LinkedHashMap<>();
+ private Shipyard ships;
public long getId() {
return id;
@@ -49,6 +50,14 @@ public class Starport {
this.modules = modules;
}
+ public Shipyard getShips() {
+ return ships;
+ }
+
+ public void setShips(Shipyard ships) {
+ this.ships = ships;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/utils/src/test/java/ru/trader/edce/ParseTest.java b/utils/src/test/java/ru/trader/edce/ParseTest.java
index b975a97..b145bf3 100644
--- a/utils/src/test/java/ru/trader/edce/ParseTest.java
+++ b/utils/src/test/java/ru/trader/edce/ParseTest.java
@@ -186,4 +186,23 @@ public class ParseTest extends Assert {
assertNotNull(ship);
}
+ @Test
+ public void testParseShipyard() throws Exception {
+ LOG.info("Test parse json9");
+ InputStream is = getClass().getResourceAsStream("/edce/edce9.json");
+ String json = read(is);
+ LOG.trace("Parse json:");
+ LOG.trace("{}", json);
+ EDPacket packet = EDCEParser.parseJSON(json);
+ Commander commander = packet.getCommander();
+ assertNotNull(commander);
+ System system = packet.getLastSystem();
+ assertNotNull(system);
+ Starport starport = packet.getLastStarport();
+ assertNotNull(starport);
+ Shipyard shipyard = starport.getShips();
+ assertNotNull(shipyard);
+ assertEquals(23, shipyard.getShips().size());
+ }
+
}