Compare commits

..

2 Commits

Author SHA1 Message Date
Zukero
547f76de33 Merge branch 'master' into git_integration
Conflicts:
	.classpath
	src/com/gpl/rpg/atcontentstudio/ATContentStudio.java
2018-09-28 09:48:36 +02:00
Zukero
6701d9784d Added JGit libs and deps in classpath. Update to Java 8 needed. 2017-10-20 17:22:25 +02:00
35 changed files with 174 additions and 419 deletions

View File

@@ -5,7 +5,7 @@
<classpathentry kind="src" path="hacked-libtiled"/> <classpathentry kind="src" path="hacked-libtiled"/>
<classpathentry kind="src" path="siphash-zackehh/src/main/java"/> <classpathentry kind="src" path="siphash-zackehh/src/main/java"/>
<classpathentry kind="src" path="minify"/> <classpathentry kind="src" path="minify"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_152"/>
<classpathentry kind="lib" path="lib/jide-oss.jar"/> <classpathentry kind="lib" path="lib/jide-oss.jar"/>
<classpathentry kind="lib" path="lib/json_simple-1.1.jar"/> <classpathentry kind="lib" path="lib/json_simple-1.1.jar"/>
<classpathentry kind="lib" path="lib/junit-4.10.jar"/> <classpathentry kind="lib" path="lib/junit-4.10.jar"/>
@@ -14,6 +14,19 @@
<classpathentry kind="lib" path="lib/ui.jar"/> <classpathentry kind="lib" path="lib/ui.jar"/>
<classpathentry kind="lib" path="lib/bsh-2.0b4.jar"/> <classpathentry kind="lib" path="lib/bsh-2.0b4.jar"/>
<classpathentry kind="lib" path="lib/jsoup-1.10.2.jar" sourcepath="lib/jsoup-1.10.2-sources.jar"/> <classpathentry kind="lib" path="lib/jsoup-1.10.2.jar" sourcepath="lib/jsoup-1.10.2-sources.jar"/>
<classpathentry kind="lib" path="lib/AndorsTrainer_v0.1.5.jar"/> <classpathentry kind="lib" path="lib/AndorsTrainer_v0.1.4.jar"/>
<classpathentry kind="lib" path="lib/JGit/commons-codec-1.6.jar"/>
<classpathentry kind="lib" path="lib/JGit/commons-logging-1.1.3.jar"/>
<classpathentry kind="lib" path="lib/JGit/httpclient-4.3.6.jar"/>
<classpathentry kind="lib" path="lib/JGit/httpcore-4.3.3.jar"/>
<classpathentry kind="lib" path="lib/JGit/JavaEWAH-1.1.6.jar"/>
<classpathentry kind="lib" path="lib/JGit/jsch-0.1.54.jar"/>
<classpathentry kind="lib" path="lib/JGit/jzlib-1.0.7.jar"/>
<classpathentry kind="lib" path="lib/JGit/org.eclipse.jgit-4.9.0.201710071750-r.jar">
<attributes>
<attribute name="javadoc_location" value="jar:platform:/resource/ATContentStudio/lib/JGit/org.eclipse.jgit-4.9.0.201710071750-r-javadoc.jar!/"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/JGit/slf4j-api-1.7.2.jar"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

View File

@@ -1,11 +1,12 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6 org.eclipse.jdt.core.compiler.source=1.8

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jardesc> <jardesc>
<jar path="ATContentStudio/ATCS_v0.6.16.jar"/> <jar path="ATContentStudio/ATCS_v0.6.14.jar"/>
<options buildIfNeeded="true" compress="true" descriptionLocation="/ATContentStudio/ATCS_JAR.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/> <options buildIfNeeded="true" compress="true" descriptionLocation="/ATContentStudio/ATCS_JAR.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
<storedRefactorings deprecationInfo="true" structuralOnly="false"/> <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
<selectedProjects/> <selectedProjects/>

View File

@@ -47,9 +47,6 @@ import java.util.Vector;
import java.util.zip.DeflaterOutputStream; import java.util.zip.DeflaterOutputStream;
import java.util.zip.GZIPOutputStream; import java.util.zip.GZIPOutputStream;
import com.gpl.rpg.atcontentstudio.model.GameSource.Type;
import com.gpl.rpg.atcontentstudio.model.maps.TMXMapSet;
import tiled.core.AnimatedTile; import tiled.core.AnimatedTile;
import tiled.core.Map; import tiled.core.Map;
import tiled.core.MapLayer; import tiled.core.MapLayer;
@@ -241,15 +238,7 @@ public class TMXMapWriter
} else { } else {
w.startElement("tileset"); w.startElement("tileset");
w.writeAttribute("firstgid", getFirstGidForTileset(set)); w.writeAttribute("firstgid", getFirstGidForTileset(set));
if (set.sheet != null && set.sheet.parent.getDataType() == Type.source) { w.writeAttribute("source", getRelativePath(wp, source));
String fileName = set.getName();
if (fileName.length() > 3 && !(fileName.substring(fileName.length() - 4).equalsIgnoreCase(".png"))) {
fileName += ".png";
}
w.writeAttribute("source", (TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE + fileName).replace("\\", "/"));
} else {
w.writeAttribute("source", getRelativePath(wp, source));
}
if (set.getBaseDir() != null) { if (set.getBaseDir() != null) {
w.writeAttribute("basedir", set.getBaseDir()); w.writeAttribute("basedir", set.getBaseDir());
} }
@@ -290,15 +279,7 @@ public class TMXMapWriter
if (tileBitmapFile != null) { if (tileBitmapFile != null) {
w.startElement("image"); w.startElement("image");
if (set.sheet != null && set.sheet.parent.getDataType() == Type.source) { w.writeAttribute("source", getRelativePath(wp, tileBitmapFile));
String fileName = set.getName();
if (fileName.length() > 3 && !(fileName.substring(fileName.length() - 4).equalsIgnoreCase(".png"))) {
fileName += ".png";
}
w.writeAttribute("source", (TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE + fileName).replace("\\", "/"));
} else {
w.writeAttribute("source", getRelativePath(wp, tileBitmapFile));
}
if (set.sheetDimensions != null) { if (set.sheetDimensions != null) {
w.writeAttribute("width", set.sheetDimensions.width); w.writeAttribute("width", set.sheetDimensions.width);
w.writeAttribute("height", set.sheetDimensions.height); w.writeAttribute("height", set.sheetDimensions.height);

Binary file not shown.

Binary file not shown.

BIN
lib/JGit/JavaEWAH-1.1.6.jar Executable file

Binary file not shown.

BIN
lib/JGit/commons-codec-1.6.jar Executable file

Binary file not shown.

Binary file not shown.

BIN
lib/JGit/httpclient-4.3.6.jar Executable file

Binary file not shown.

BIN
lib/JGit/httpcore-4.3.3.jar Executable file

Binary file not shown.

BIN
lib/JGit/jsch-0.1.54.jar Executable file

Binary file not shown.

BIN
lib/JGit/jzlib-1.0.7.jar Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
lib/JGit/slf4j-api-1.7.2.jar Executable file

Binary file not shown.

View File

@@ -1 +1 @@
v0.6.16 v0.6.14

View File

@@ -1,7 +1,7 @@
!include MUI2.nsh !include MUI2.nsh
!define VERSION "0.6.16" !define VERSION "0.6.14"
!define TRAINER_VERSION "0.1.5" !define TRAINER_VERSION "0.1.4"
!define JAVA_BIN "javaw" !define JAVA_BIN "javaw"
Name "Andor's Trail Content Studio v${VERSION}" Name "Andor's Trail Content Studio v${VERSION}"

View File

@@ -32,6 +32,17 @@ import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener; import javax.swing.event.HyperlinkListener;
import javax.swing.plaf.FontUIResource; import javax.swing.plaf.FontUIResource;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.attributes.AttributesNodeProvider;
import org.eclipse.jgit.internal.storage.file.FileRepository;
import org.eclipse.jgit.lib.ObjectDatabase;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefDatabase;
import org.eclipse.jgit.lib.ReflogReader;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.StoredConfig;
import prefuse.data.expression.parser.ExpressionParser; import prefuse.data.expression.parser.ExpressionParser;
import com.gpl.rpg.atcontentstudio.model.Workspace; import com.gpl.rpg.atcontentstudio.model.Workspace;
@@ -43,7 +54,7 @@ import com.gpl.rpg.atcontentstudio.ui.WorkspaceSelector;
public class ATContentStudio { public class ATContentStudio {
public static final String APP_NAME = "Andor's Trail Content Studio"; public static final String APP_NAME = "Andor's Trail Content Studio";
public static final String APP_VERSION = "v0.6.16"; public static final String APP_VERSION = "v0.6.14";
public static final String CHECK_UPDATE_URL = "https://andorstrail.com/static/ATCS_latest"; public static final String CHECK_UPDATE_URL = "https://andorstrail.com/static/ATCS_latest";
public static final String DOWNLOAD_URL = "https://andorstrail.com/viewtopic.php?f=6&t=4806"; public static final String DOWNLOAD_URL = "https://andorstrail.com/viewtopic.php?f=6&t=4806";
@@ -73,6 +84,19 @@ public class ATContentStudio {
} }
} }
// try {
// Git git = new Git(new FileRepository("/home/xxx/git_repos/andors-trail/.git/"));
// List<Ref> branches = git.branchList().call();
// for (Ref branch : branches) {
// System.out.println(branch.getName());
// }
// } catch (IOException e1) {
// e1.printStackTrace();
// } catch (GitAPIException e1) {
// e1.printStackTrace();
// }
ConfigCache.init(); ConfigCache.init();
try { try {

View File

@@ -11,10 +11,6 @@ import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.io.StringReader; import java.io.StringReader;
import java.io.StringWriter; import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Enumeration; import java.util.Enumeration;
@@ -78,8 +74,6 @@ import com.gpl.rpg.atcontentstudio.utils.FileUtils;
public class Project implements ProjectTreeNode, Serializable { public class Project implements ProjectTreeNode, Serializable {
private static final long serialVersionUID = 4807454973303366758L; private static final long serialVersionUID = 4807454973303366758L;
private static final String drawablePath = TMXMapSet.DEFAULT_REL_PATH_TO_DRAWABLE.replace("\\", "/");
//Every instance field that is not transient will be saved in this file. //Every instance field that is not transient will be saved in this file.
public static final String SETTINGS_FILE = ".project"; public static final String SETTINGS_FILE = ".project";
@@ -1085,16 +1079,10 @@ public class Project implements ProjectTreeNode, Serializable {
public void run() { public void run() {
Notification.addInfo("Exporting project \""+name+"\" as "+target.getAbsolutePath()); Notification.addInfo("Exporting project \""+name+"\" as "+target.getAbsolutePath());
File tmpDir; File tmpDir = exportProjectToTmpDir();
try {
tmpDir = exportProjectToTmpDir();
FileUtils.writeToZip(tmpDir, target);
FileUtils.deleteDir(tmpDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileUtils.writeToZip(tmpDir, target);
FileUtils.deleteDir(tmpDir);
Notification.addSuccess("Project \""+name+"\" exported as "+target.getAbsolutePath()); Notification.addSuccess("Project \""+name+"\" exported as "+target.getAbsolutePath());
} }
@@ -1108,16 +1096,10 @@ public class Project implements ProjectTreeNode, Serializable {
public void run() { public void run() {
Notification.addInfo("Exporting project \""+name+"\" into "+target.getAbsolutePath()); Notification.addInfo("Exporting project \""+name+"\" into "+target.getAbsolutePath());
File tmpDir; File tmpDir = exportProjectToTmpDir();
try {
tmpDir = exportProjectToTmpDir();
FileUtils.copyOver(tmpDir, target);
FileUtils.deleteDir(tmpDir);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileUtils.copyOver(tmpDir, target);
FileUtils.deleteDir(tmpDir);
Notification.addSuccess("Project \""+name+"\" exported into "+target.getAbsolutePath()); Notification.addSuccess("Project \""+name+"\" exported into "+target.getAbsolutePath());
} }
@@ -1125,7 +1107,7 @@ public class Project implements ProjectTreeNode, Serializable {
}); });
} }
public File exportProjectToTmpDir() throws IOException { public File exportProjectToTmpDir() {
File tmpDir = new File(baseFolder, "tmp"); File tmpDir = new File(baseFolder, "tmp");
FileUtils.deleteDir(tmpDir); FileUtils.deleteDir(tmpDir);
tmpDir.mkdir(); tmpDir.mkdir();
@@ -1157,12 +1139,12 @@ public class Project implements ProjectTreeNode, Serializable {
writtenFiles = new LinkedList<String>(); writtenFiles = new LinkedList<String>();
for (File createdMapFile : createdContent.gameMaps.mapFolder.listFiles()) { for (File createdMapFile : createdContent.gameMaps.mapFolder.listFiles()) {
if (createdMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue; if (createdMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
copyTmxConverted(createdMapFile.toPath(), Paths.get(tmpMapDir.getAbsolutePath(), createdMapFile.getName())); FileUtils.copyFile(createdMapFile, new File(tmpMapDir, createdMapFile.getName()));
writtenFiles.add(createdMapFile.getName()); writtenFiles.add(createdMapFile.getName());
} }
for (File alteredMapFile : alteredContent.gameMaps.mapFolder.listFiles()) { for (File alteredMapFile : alteredContent.gameMaps.mapFolder.listFiles()) {
if (alteredMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue; if (alteredMapFile.getName().equalsIgnoreCase("worldmap.xml")) continue;
copyTmxConverted(alteredMapFile.toPath(), Paths.get(tmpMapDir.getAbsolutePath(), alteredMapFile.getName())); FileUtils.copyFile(alteredMapFile, new File(tmpMapDir, alteredMapFile.getName()));
writtenFiles.add(alteredMapFile.getName()); writtenFiles.add(alteredMapFile.getName());
} }
writtenFilesPerDataType.put(TMXMap.class, writtenFiles); writtenFilesPerDataType.put(TMXMap.class, writtenFiles);
@@ -1195,16 +1177,6 @@ public class Project implements ProjectTreeNode, Serializable {
return tmpDir; return tmpDir;
} }
private void copyTmxConverted(Path from, Path to) throws IOException {
String xml = new String(Files.readAllBytes(from), StandardCharsets.UTF_8);
xml = xml.replace("../../altered/spritesheets/", drawablePath);
xml = xml.replace("../../created/spritesheets/", drawablePath);
xml = xml.replace("../spritesheets/", drawablePath);
xml = xml.replace("../spritesheets/", drawablePath);
Files.write(to, xml.getBytes(StandardCharsets.UTF_8));
}
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public List<String> writeDataDeltaForDataType(GameDataCategory<? extends JSONElement> created, GameDataCategory<? extends JSONElement> altered, GameDataCategory<? extends JSONElement> source, Class<? extends JSONElement> gdeClass, File targetFolder) { public List<String> writeDataDeltaForDataType(GameDataCategory<? extends JSONElement> created, GameDataCategory<? extends JSONElement> altered, GameDataCategory<? extends JSONElement> source, Class<? extends JSONElement> gdeClass, File targetFolder) {
List<String> filenamesToWrite = new LinkedList<String>(); List<String> filenamesToWrite = new LinkedList<String>();

View File

@@ -36,7 +36,7 @@ public class Droplist extends JSONElement {
public static class DroppedItem { public static class DroppedItem {
//Available from parsed state; //Available from parsed state;
public String item_id = null; public String item_id = null;
public String chance = null; public Double chance = null;
public Integer quantity_min = null; public Integer quantity_min = null;
public Integer quantity_max = null; public Integer quantity_max = null;
@@ -114,8 +114,7 @@ public class Droplist extends JSONElement {
Map droppedItemJson = (Map)droppedItemJsonObj; Map droppedItemJson = (Map)droppedItemJsonObj;
DroppedItem droppedItem = new DroppedItem(); DroppedItem droppedItem = new DroppedItem();
droppedItem.item_id = (String) droppedItemJson.get("itemID"); droppedItem.item_id = (String) droppedItemJson.get("itemID");
//if (droppedItemJson.get("chance") != null) droppedItem.chance = JSONElement.parseChance(droppedItemJson.get("chance").toString()); if (droppedItemJson.get("chance") != null) droppedItem.chance = JSONElement.parseChance(droppedItemJson.get("chance").toString());
droppedItem.chance = (String) droppedItemJson.get("chance");
Map droppedItemQtyJson = (Map) droppedItemJson.get("quantity"); Map droppedItemQtyJson = (Map) droppedItemJson.get("quantity");
if (droppedItemQtyJson != null) { if (droppedItemQtyJson != null) {
droppedItem.quantity_min = JSONElement.getInteger((Number) droppedItemQtyJson.get("min")); droppedItem.quantity_min = JSONElement.getInteger((Number) droppedItemQtyJson.get("min"));
@@ -218,8 +217,7 @@ public class Droplist extends JSONElement {
} else if (droppedItem.item_id != null) { } else if (droppedItem.item_id != null) {
droppedItemJson.put("itemID", droppedItem.item_id); droppedItemJson.put("itemID", droppedItem.item_id);
} }
//if (droppedItem.chance != null) droppedItemJson.put("chance", JSONElement.printJsonChance(droppedItem.chance)); if (droppedItem.chance != null) droppedItemJson.put("chance", JSONElement.printJsonChance(droppedItem.chance));
if (droppedItem.chance != null) droppedItemJson.put("chance", droppedItem.chance);
if (droppedItem.quantity_min != null || droppedItem.quantity_max != null) { if (droppedItem.quantity_min != null || droppedItem.quantity_max != null) {
Map quantityJson = new LinkedHashMap(); Map quantityJson = new LinkedHashMap();
droppedItemJson.put("quantity", quantityJson); droppedItemJson.put("quantity", quantityJson);

View File

@@ -83,7 +83,6 @@ public class Item extends JSONElement {
public Integer increase_block_chance = null; public Integer increase_block_chance = null;
public Integer increase_damage_resistance = null; public Integer increase_damage_resistance = null;
public Double critical_multiplier = null; public Double critical_multiplier = null;
public Integer damage_modifier = null;
} }
public static class ConditionEffect { public static class ConditionEffect {
@@ -203,7 +202,6 @@ public class Item extends JSONElement {
//TODO correct game data, to unify format. //TODO correct game data, to unify format.
// this.equip_effect.critical_multiplier = JSONElement.getDouble((Number) equipEffect.get("setCriticalMultiplier")); // this.equip_effect.critical_multiplier = JSONElement.getDouble((Number) equipEffect.get("setCriticalMultiplier"));
if (equipEffect.get("setCriticalMultiplier") != null) this.equip_effect.critical_multiplier = JSONElement.getDouble(Double.parseDouble(equipEffect.get("setCriticalMultiplier").toString())); if (equipEffect.get("setCriticalMultiplier") != null) this.equip_effect.critical_multiplier = JSONElement.getDouble(Double.parseDouble(equipEffect.get("setCriticalMultiplier").toString()));
this.equip_effect.damage_modifier = JSONElement.getInteger((Number) equipEffect.get("setNonWeaponDamageModifier"));
List conditionsJson = (List) equipEffect.get("addedConditions"); List conditionsJson = (List) equipEffect.get("addedConditions");
if (conditionsJson != null && !conditionsJson.isEmpty()) { if (conditionsJson != null && !conditionsJson.isEmpty()) {
@@ -218,7 +216,6 @@ public class Item extends JSONElement {
} }
} }
Map hitEffect = (Map) itemJson.get("hitEffect"); Map hitEffect = (Map) itemJson.get("hitEffect");
if (hitEffect != null) { if (hitEffect != null) {
this.hit_effect = new HitEffect(); this.hit_effect = new HitEffect();
@@ -429,7 +426,6 @@ public class Item extends JSONElement {
clone.has_manual_price = this.has_manual_price; clone.has_manual_price = this.has_manual_price;
if (this.equip_effect != null) { if (this.equip_effect != null) {
clone.equip_effect = new EquipEffect(); clone.equip_effect = new EquipEffect();
clone.equip_effect.damage_modifier = this.equip_effect.damage_modifier;
clone.equip_effect.critical_multiplier = this.equip_effect.critical_multiplier; clone.equip_effect.critical_multiplier = this.equip_effect.critical_multiplier;
clone.equip_effect.damage_boost_max = this.equip_effect.damage_boost_max; clone.equip_effect.damage_boost_max = this.equip_effect.damage_boost_max;
clone.equip_effect.damage_boost_min = this.equip_effect.damage_boost_min; clone.equip_effect.damage_boost_min = this.equip_effect.damage_boost_min;
@@ -646,7 +642,6 @@ public class Item extends JSONElement {
if (this.equip_effect.increase_block_chance != null) equipEffectJson.put("increaseBlockChance", this.equip_effect.increase_block_chance); if (this.equip_effect.increase_block_chance != null) equipEffectJson.put("increaseBlockChance", this.equip_effect.increase_block_chance);
if (this.equip_effect.increase_damage_resistance != null) equipEffectJson.put("increaseDamageResistance", this.equip_effect.increase_damage_resistance); if (this.equip_effect.increase_damage_resistance != null) equipEffectJson.put("increaseDamageResistance", this.equip_effect.increase_damage_resistance);
if (this.equip_effect.critical_multiplier != null) equipEffectJson.put("setCriticalMultiplier", this.equip_effect.critical_multiplier); if (this.equip_effect.critical_multiplier != null) equipEffectJson.put("setCriticalMultiplier", this.equip_effect.critical_multiplier);
if (this.equip_effect.damage_modifier != null) equipEffectJson.put("setNonWeaponDamageModifier", this.equip_effect.damage_modifier);
if (this.equip_effect.conditions != null) { if (this.equip_effect.conditions != null) {
List conditionsJson = new ArrayList(); List conditionsJson = new ArrayList();
equipEffectJson.put("addedConditions", conditionsJson); equipEffectJson.put("addedConditions", conditionsJson);

View File

@@ -26,13 +26,10 @@ public class Requirement extends JSONElement {
countedItemTypes.add(RequirementType.inventoryRemove); countedItemTypes.add(RequirementType.inventoryRemove);
countedItemTypes.add(RequirementType.inventoryKeep); countedItemTypes.add(RequirementType.inventoryKeep);
countedItemTypes.add(RequirementType.usedItem); countedItemTypes.add(RequirementType.usedItem);
countedItemTypes.add(RequirementType.wear);
countedItemTypes.add(RequirementType.wearRemove);
COMPATIBLE_TYPES.put(RequirementType.inventoryRemove, countedItemTypes); COMPATIBLE_TYPES.put(RequirementType.inventoryRemove, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.inventoryKeep, countedItemTypes); COMPATIBLE_TYPES.put(RequirementType.inventoryKeep, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.usedItem, countedItemTypes); COMPATIBLE_TYPES.put(RequirementType.usedItem, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.wear, countedItemTypes);
COMPATIBLE_TYPES.put(RequirementType.wearRemove, countedItemTypes);
} }
//Available from parsed state //Available from parsed state
@@ -57,10 +54,7 @@ public class Requirement extends JSONElement {
spentGold, spentGold,
consumedBonemeals, consumedBonemeals,
hasActorCondition, hasActorCondition,
factionScore, factionScore
random,
factionScoreEquals,
wearRemove
} }
public enum SkillID { public enum SkillID {
@@ -96,7 +90,6 @@ public class Requirement extends JSONElement {
,weaponProficiencyAxe ,weaponProficiencyAxe
,weaponProficiencyBlunt ,weaponProficiencyBlunt
,weaponProficiencyUnarmed ,weaponProficiencyUnarmed
,weaponProficiencyPole
,armorProficiencyShield ,armorProficiencyShield
,armorProficiencyUnarmored ,armorProficiencyUnarmored
,armorProficiencyLight ,armorProficiencyLight
@@ -111,21 +104,9 @@ public class Requirement extends JSONElement {
@Override @Override
public String getDesc() { public String getDesc() {
String obj_id = "";
if (required_obj_id != null)
{
obj_id = required_obj_id;
if (type != null && type == RequirementType.random){
obj_id = " Chance " + obj_id + (required_obj_id.contains("/") ? "" : "%");
}
else {
obj_id += ":";
}
}
return ((negated != null && negated) ? "NOT " : "") return ((negated != null && negated) ? "NOT " : "")
+(type == null ? "" : type.toString()+":") +(type == null ? "" : type.toString()+":")
+obj_id +(required_obj_id == null ? "" : required_obj_id+":")
+(required_value == null ? "" : required_value.toString()); +(required_value == null ? "" : required_value.toString());
} }
@@ -172,7 +153,6 @@ public class Requirement extends JSONElement {
case inventoryRemove: case inventoryRemove:
case usedItem: case usedItem:
case wear: case wear:
case wearRemove:
this.required_obj = proj.getItem(required_obj_id); this.required_obj = proj.getItem(required_obj_id);
break; break;
case killedMonster: case killedMonster:
@@ -193,8 +173,6 @@ public class Requirement extends JSONElement {
case spentGold: case spentGold:
case timerElapsed: case timerElapsed:
case factionScore: case factionScore:
case factionScoreEquals:
case random:
break; break;
} }
if (this.required_obj != null) this.required_obj.addBacklink((GameDataElement) this.parent); if (this.required_obj != null) this.required_obj.addBacklink((GameDataElement) this.parent);
@@ -247,12 +225,6 @@ public class Requirement extends JSONElement {
required_obj_id = null; required_obj_id = null;
required_value = null; required_value = null;
} }
if(destType==RequirementType.random)
{
required_obj_id = "50/100";
}
type = destType; type = destType;
} }

View File

@@ -258,7 +258,7 @@ public class TMXMap extends GameDataElement {
if (getDataType() == GameSource.Type.source) { if (getDataType() == GameSource.Type.source) {
writer.writeMap(tmxMap, baos, tmxFile.getAbsolutePath()); writer.writeMap(tmxMap, baos, tmxFile.getAbsolutePath());
} else { } else {
writer.writeMap(tmxMap, baos, ((TMXMapSet)this.parent).mapFolder.getAbsolutePath()+File.separator+"placeholder.tmx"); writer.writeMap(tmxMap, baos, getProject().baseContent.gameMaps.mapFolder.getAbsolutePath()+File.separator+"placeholder.tmx");
} }
} catch (Exception e) { } catch (Exception e) {
Notification.addError("Error while converting map "+getDesc()+" to XML: "+e.getMessage()); Notification.addError("Error while converting map "+getDesc()+" to XML: "+e.getMessage());

View File

@@ -100,7 +100,7 @@ public class TMXMapSet implements ProjectTreeNode {
while(getProject().open) { while(getProject().open) {
try { try {
watchService = FileSystems.getDefault().newWatchService(); watchService = FileSystems.getDefault().newWatchService();
/*WatchKey watchKey = */folderPath.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_CREATE); /*WatchKey watchKey = */folderPath.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
WatchKey wk; WatchKey wk;
validService: while(getProject().open) { validService: while(getProject().open) {
wk = watchService.poll(10, TimeUnit.SECONDS); wk = watchService.poll(10, TimeUnit.SECONDS);

View File

@@ -1,12 +1,9 @@
package com.gpl.rpg.atcontentstudio.model.tools.i18n; package com.gpl.rpg.atcontentstudio.model.tools.i18n;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer; import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -20,7 +17,7 @@ public class PoPotWriter {
public static void writePoFile(Map<String, List<String>> stringsResources, Map<String, String> translations, File destination) { public static void writePoFile(Map<String, List<String>> stringsResources, Map<String, String> translations, File destination) {
try { try {
Writer fw = new OutputStreamWriter(new FileOutputStream(destination), StandardCharsets.UTF_8); FileWriter fw = new FileWriter(destination);
if (translations.get("") != null) { if (translations.get("") != null) {
fw.write(translations.get("")); fw.write(translations.get(""));
writeEndOfEntry(fw); writeEndOfEntry(fw);

View File

@@ -26,9 +26,7 @@ public class AboutEditor extends Editor {
private static final long serialVersionUID = 6230549148222457139L; private static final long serialVersionUID = 6230549148222457139L;
public static final String WELCOME_STRING = public static final String WELCOME_STRING =
"<html><head>" + "<html><body>" +
"<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=UTF-8\\\" />" +
"</head><body>" +
"<table><tr valign=\"top\">" + "<table><tr valign=\"top\">" +
"<td><img src=\""+ATContentStudio.class.getResource("/com/gpl/rpg/atcontentstudio/img/atcs_border_banner.png")+"\"/></td>" + "<td><img src=\""+ATContentStudio.class.getResource("/com/gpl/rpg/atcontentstudio/img/atcs_border_banner.png")+"\"/></td>" +
"<td><font size=+1>Welcome to "+ATContentStudio.APP_NAME+" "+ATContentStudio.APP_VERSION+"</font><br/>" + "<td><font size=+1>Welcome to "+ATContentStudio.APP_NAME+" "+ATContentStudio.APP_VERSION+"</font><br/>" +
@@ -53,8 +51,7 @@ public class AboutEditor extends Editor {
"<br/>" + "<br/>" +
"Contributors: <br/>" + "Contributors: <br/>" +
"Quentin Delvallet<br/>" + "Quentin Delvallet<br/>" +
"Žižkin<br/>" + "<EFBFBD>i<EFBFBD>kin<br/>" +
"Gonk<br/>" +
"<br/>" + "<br/>" +
"This project uses the following libraries:<br/>" + "This project uses the following libraries:<br/>" +
"<a href=\"http://code.google.com/p/json-simple/\">JSON.simple</a> by Yidong Fang & Chris Nokleberg.<br/>" + "<a href=\"http://code.google.com/p/json-simple/\">JSON.simple</a> by Yidong Fang & Chris Nokleberg.<br/>" +
@@ -82,7 +79,7 @@ public class AboutEditor extends Editor {
"<a href=\"https://jsoup.org/\">jsoup</a> by Jonathan Hedley<br/>" + "<a href=\"https://jsoup.org/\">jsoup</a> by Jonathan Hedley<br/>" +
"License: <a href=\"https://jsoup.org/license\">MIT License</a><br/>" + "License: <a href=\"https://jsoup.org/license\">MIT License</a><br/>" +
"<br/>" + "<br/>" +
"A slightly modified version of <a href=\"https://launchpad.net/po-parser\">General PO Parser</a> by Bal<61>zs T<>th<br/>" + "A slightly modified version of <a href=\"https://launchpad.net/po-parser\">General PO Parser</a> by Bal<61>zs T<>th<br/>" +
"License: <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPL v3</a><br/>" + "License: <a href=\"http://www.gnu.org/licenses/gpl-3.0.html\">GPL v3</a><br/>" +
"<br/>" + "<br/>" +
"A slightly modified version of <a href=\"www.whoischarles.com\">Minify.java</a> by Charles Bihis<br/>" + "A slightly modified version of <a href=\"www.whoischarles.com\">Minify.java</a> by Charles Bihis<br/>" +

View File

@@ -348,138 +348,6 @@ public abstract class Editor extends JPanel implements ProjectElementListener {
return spinner; return spinner;
} }
private static final String percent = "%";
private static final String ratio = "x/y";
public static JComponent addChanceField(JPanel pane, String label, String initialValue, String defaultValue, boolean editable, final FieldUpdateListener listener) {
int defaultChance = 1;
int defaultMaxChance = 100;
if (defaultValue != null) {
if (defaultValue.contains("/")) {
int c = defaultValue.indexOf('/');
try { defaultChance = Integer.parseInt(defaultValue.substring(0, c)); } catch (NumberFormatException nfe) {};
try { defaultMaxChance = Integer.parseInt(defaultValue.substring(c+1)); } catch (NumberFormatException nfe) {};
} else {
try { defaultChance = Integer.parseInt(defaultValue); } catch (NumberFormatException nfe) {};
}
}
boolean currentFormIsRatio = true;
int chance = defaultChance;
int maxChance = defaultMaxChance;
if (initialValue != null) {
if (initialValue.contains("/")) {
int c = initialValue.indexOf('/');
try { chance = Integer.parseInt(initialValue.substring(0, c)); } catch (NumberFormatException nfe) {};
try { maxChance = Integer.parseInt(initialValue.substring(c+1)); } catch (NumberFormatException nfe) {};
} else {
try {
chance = Integer.parseInt(initialValue);
currentFormIsRatio = false;
} catch (NumberFormatException nfe) {};
}
}
final JPanel tfPane = new JPanel();
tfPane.setLayout(new JideBoxLayout(tfPane, JideBoxLayout.LINE_AXIS, 6));
JLabel tfLabel = new JLabel(label);
tfPane.add(tfLabel, JideBoxLayout.FIX);
final JComboBox<String> entryTypeBox = new JComboBox<String>(new String[] {percent, ratio});
if (currentFormIsRatio) {
entryTypeBox.setSelectedItem(ratio);
} else {
entryTypeBox.setSelectedItem(percent);
}
entryTypeBox.setEnabled(editable);
tfPane.add(entryTypeBox, JideBoxLayout.FIX);
/////////////////////////////////////////////////////////////////////////////////////////////////// make sure "chance" is between 1 and 100. If lower than 1 get 1. If higher than 100, get chance/maxChance * 100... Then do the same with defaultChance, in case no value exist.
final SpinnerNumberModel percentModel = new SpinnerNumberModel(initialValue != null ? ((chance > 1 ? chance : 1) < 100 ? chance : (chance * 100 / maxChance)) : ((defaultChance > 1 ? defaultChance : 1) < 100 ? defaultChance : (defaultChance * 100 / defaultMaxChance)) , 1, 100, 1);
final SpinnerNumberModel ratioChanceModel = new SpinnerNumberModel(initialValue != null ? chance : defaultChance, 1, Integer.MAX_VALUE, 1);
final JSpinner chanceSpinner = new JSpinner(currentFormIsRatio ? ratioChanceModel : percentModel);
if (!currentFormIsRatio) ((JSpinner.DefaultEditor)chanceSpinner.getEditor()).getTextField().setHorizontalAlignment(JTextField.LEFT);
chanceSpinner.setEnabled(editable);
((DefaultFormatter)((NumberEditor)chanceSpinner.getEditor()).getTextField().getFormatter()).setCommitsOnValidEdit(true);
tfPane.add(chanceSpinner, JideBoxLayout.FLEXIBLE);
final JLabel ratioLabel = new JLabel("/");
tfPane.add(ratioLabel, JideBoxLayout.FIX);
final JSpinner maxChanceSpinner = new JSpinner(new SpinnerNumberModel(initialValue != null ? maxChance : defaultMaxChance, 1, Integer.MAX_VALUE, 1));
((JSpinner.DefaultEditor)maxChanceSpinner.getEditor()).getTextField().setHorizontalAlignment(JTextField.LEFT);
maxChanceSpinner.setEnabled(editable);
((DefaultFormatter)((NumberEditor)maxChanceSpinner.getEditor()).getTextField().getFormatter()).setCommitsOnValidEdit(true);
tfPane.add(maxChanceSpinner, JideBoxLayout.FLEXIBLE);
if (!currentFormIsRatio) {
ratioLabel.setVisible(false);
maxChanceSpinner.setVisible(false);
tfPane.revalidate();
tfPane.repaint();
}
final JButton nullify = new JButton(new ImageIcon(DefaultIcons.getNullifyIcon()));
tfPane.add(nullify, JideBoxLayout.FIX);
nullify.setEnabled(editable);
pane.add(tfPane, JideBoxLayout.FIX);
entryTypeBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (entryTypeBox.getSelectedItem() == percent) {
int chance = ((Integer)chanceSpinner.getValue());
int maxChance = ((Integer)maxChanceSpinner.getValue());
chance *= 100;
chance /= maxChance;
chance = Math.max(0, Math.min(100, chance));
chanceSpinner.setModel(percentModel);
chanceSpinner.setValue(chance);
((JSpinner.DefaultEditor)chanceSpinner.getEditor()).getTextField().setHorizontalAlignment(JTextField.LEFT);
ratioLabel.setVisible(false);
maxChanceSpinner.setVisible(false);
tfPane.revalidate();
tfPane.repaint();
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString());
} else if (entryTypeBox.getSelectedItem() == ratio) {
int chance = ((Integer)chanceSpinner.getValue());
chanceSpinner.setModel(ratioChanceModel);
chanceSpinner.setValue(chance);
maxChanceSpinner.setValue(100);
ratioLabel.setVisible(true);
maxChanceSpinner.setVisible(true);
tfPane.revalidate();
tfPane.repaint();
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString() + "/" + maxChanceSpinner.getValue().toString());
}
}
});
chanceSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (entryTypeBox.getSelectedItem() == percent) {
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString());
} else if (entryTypeBox.getSelectedItem() == ratio) {
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString() + "/" + maxChanceSpinner.getValue().toString());
}
}
});
maxChanceSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
listener.valueChanged(chanceSpinner, chanceSpinner.getValue().toString() + "/" + maxChanceSpinner.getValue().toString());
}
});
nullify.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
chanceSpinner.setValue(1);
listener.valueChanged(chanceSpinner, null);
}
});
return chanceSpinner;
}
// public static JSpinner addDoubleField(JPanel pane, String label, Double initialValue, boolean editable) { // public static JSpinner addDoubleField(JPanel pane, String label, Double initialValue, boolean editable) {
// return addDoubleField(pane, label, initialValue, editable, nullListener); // return addDoubleField(pane, label, initialValue, editable, nullListener);
// } // }

View File

@@ -123,7 +123,7 @@ public class DialogueEditor extends JSONElementEditor {
private MyComboBox requirementObj; private MyComboBox requirementObj;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
private JComboBox requirementSkill; private JComboBox requirementSkill;
private JComponent requirementObjId; private JTextField requirementObjId;
private JComponent requirementValue; private JComponent requirementValue;
private BooleanBasedCheckBox requirementNegated; private BooleanBasedCheckBox requirementNegated;
@@ -722,11 +722,6 @@ public class DialogueEditor extends JSONElementEditor {
requirementObjId = null; requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
break; break;
case random:
requirementObj = null;
requirementObjId = addChanceField(pane, "Chance: ", requirement.required_obj_id, "50/100", writable, listener);
requirementValue = null;
break;
case hasActorCondition: case hasActorCondition:
requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener); requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener);
requirementObjId = null; requirementObjId = null;
@@ -735,8 +730,6 @@ public class DialogueEditor extends JSONElementEditor {
case inventoryKeep: case inventoryKeep:
case inventoryRemove: case inventoryRemove:
case usedItem: case usedItem:
case wear:
case wearRemove:
requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener); requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = null; requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
@@ -772,10 +765,10 @@ public class DialogueEditor extends JSONElementEditor {
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener); requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener);
requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener); requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener);
break; break;
case factionScoreEquals: case wear:
requirementObj = null; requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener); requirementObjId = null;
requirementValue = addIntegerField(pane, "Exact value: ", requirement.required_value, true, writable, listener); requirementValue = null;
break; break;
} }
requirementNegated = addBooleanBasedCheckBox(pane, "Negate this requirement.", requirement.negated, writable, listener); requirementNegated = addBooleanBasedCheckBox(pane, "Negate this requirement.", requirement.negated, writable, listener);
@@ -1176,7 +1169,7 @@ public class DialogueEditor extends JSONElementEditor {
label.setIcon(new ImageIcon(DefaultIcons.getBonemealIcon())); label.setIcon(new ImageIcon(DefaultIcons.getBonemealIcon()));
} else if (req.type == Requirement.RequirementType.timerElapsed) { } else if (req.type == Requirement.RequirementType.timerElapsed) {
label.setIcon(new ImageIcon(DefaultIcons.getTimerIcon())); label.setIcon(new ImageIcon(DefaultIcons.getTimerIcon()));
} else if (req.type == Requirement.RequirementType.factionScore || req.type == Requirement.RequirementType.factionScoreEquals) { } else if (req.type == Requirement.RequirementType.factionScore) {
label.setIcon(new ImageIcon(DefaultIcons.getAlignmentIcon())); label.setIcon(new ImageIcon(DefaultIcons.getAlignmentIcon()));
} }
if (req.type == null) { if (req.type == null) {

View File

@@ -50,7 +50,7 @@ public class DroplistEditor extends JSONElementEditor {
private DroppedItemsListModel droppedItemsListModel; private DroppedItemsListModel droppedItemsListModel;
private JSpinner qtyMinField; private JSpinner qtyMinField;
private JSpinner qtyMaxField; private JSpinner qtyMaxField;
private JComponent chanceField; private JSpinner chanceField;
public DroplistEditor(Droplist droplist) { public DroplistEditor(Droplist droplist) {
super(droplist, droplist.getDesc(), droplist.getIcon()); super(droplist, droplist.getDesc(), droplist.getIcon());
@@ -142,7 +142,7 @@ public class DroplistEditor extends JSONElementEditor {
itemCombo = addItemBox(pane, proj, "Item: ", di.item, writable, listener); itemCombo = addItemBox(pane, proj, "Item: ", di.item, writable, listener);
qtyMinField = addIntegerField(pane, "Quantity min: ", di.quantity_min, false, writable, listener); qtyMinField = addIntegerField(pane, "Quantity min: ", di.quantity_min, false, writable, listener);
qtyMaxField = addIntegerField(pane, "Quantity max: ", di.quantity_max, false, writable, listener); qtyMaxField = addIntegerField(pane, "Quantity max: ", di.quantity_max, false, writable, listener);
chanceField = addChanceField(pane, "Chance: ", di.chance, "100", writable, listener);//addDoubleField(pane, "Chance: ", di.chance, writable, listener); chanceField = addDoubleField(pane, "Chance: ", di.chance, writable, listener);
} }
pane.revalidate(); pane.revalidate();
pane.repaint(); pane.repaint();
@@ -221,9 +221,9 @@ public class DroplistEditor extends JSONElementEditor {
Droplist.DroppedItem di = (Droplist.DroppedItem)value; Droplist.DroppedItem di = (Droplist.DroppedItem)value;
if (di.item != null) { if (di.item != null) {
label.setIcon(new ImageIcon(di.item.getIcon())); label.setIcon(new ImageIcon(di.item.getIcon()));
label.setText(di.chance+(di.chance != null && di.chance.contains("/") ? "" : "%")+" to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item.getDesc()); label.setText(di.chance+"% to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item.getDesc());
} else if (!isNull(di)) { } else if (!isNull(di)) {
label.setText(di.chance+(di.chance != null && di.chance.contains("/") ? "" : "%")+" to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item_id); label.setText(di.chance+"% to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item_id);
} else { } else {
label.setText("New, undefined, dropped item."); label.setText("New, undefined, dropped item.");
} }
@@ -283,7 +283,7 @@ public class DroplistEditor extends JSONElementEditor {
selectedItem.quantity_max = (Integer) value; selectedItem.quantity_max = (Integer) value;
droppedItemsListModel.itemChanged(selectedItem); droppedItemsListModel.itemChanged(selectedItem);
} else if (source == chanceField) { } else if (source == chanceField) {
selectedItem.chance = (String) value; selectedItem.chance = (Double) value;
droppedItemsListModel.itemChanged(selectedItem); droppedItemsListModel.itemChanged(selectedItem);
} }

View File

@@ -82,7 +82,6 @@ public class ItemEditor extends JSONElementEditor {
private JSpinner equipBoostBC; private JSpinner equipBoostBC;
private JSpinner equipBoostCS; private JSpinner equipBoostCS;
private JSpinner equipSetCM; private JSpinner equipSetCM;
private JSpinner equipSetDM;
private JSpinner equipBoostDR; private JSpinner equipBoostDR;
private JSpinner equipIncMoveCost; private JSpinner equipIncMoveCost;
private JSpinner equipIncUseCost; private JSpinner equipIncUseCost;
@@ -218,7 +217,6 @@ public class ItemEditor extends JSONElementEditor {
} }
equipDmgMin = addIntegerField(equipEffectPane, "Attack Damage min: ", equipEffect.damage_boost_min, true, item.writable, listener); equipDmgMin = addIntegerField(equipEffectPane, "Attack Damage min: ", equipEffect.damage_boost_min, true, item.writable, listener);
equipDmgMax = addIntegerField(equipEffectPane, "Attack Damage max: ", equipEffect.damage_boost_max, true, item.writable, listener); equipDmgMax = addIntegerField(equipEffectPane, "Attack Damage max: ", equipEffect.damage_boost_max, true, item.writable, listener);
equipSetDM = addIntegerField(equipEffectPane, "Damage modifier %: ", equipEffect.damage_modifier, 100, false, item.writable, listener);
equipBoostHP = addIntegerField(equipEffectPane, "Boost max HP: ", equipEffect.max_hp_boost, true, item.writable, listener); equipBoostHP = addIntegerField(equipEffectPane, "Boost max HP: ", equipEffect.max_hp_boost, true, item.writable, listener);
equipBoostAP = addIntegerField(equipEffectPane, "Boost max AP: ", equipEffect.max_ap_boost, true, item.writable, listener); equipBoostAP = addIntegerField(equipEffectPane, "Boost max AP: ", equipEffect.max_ap_boost, true, item.writable, listener);
equipBoostAC = addIntegerField(equipEffectPane, "Boost attack chance: ", equipEffect.increase_attack_chance, true, item.writable, listener); equipBoostAC = addIntegerField(equipEffectPane, "Boost attack chance: ", equipEffect.increase_attack_chance, true, item.writable, listener);
@@ -1433,7 +1431,6 @@ public class ItemEditor extends JSONElementEditor {
public static boolean isNull(Item.EquipEffect effect) { public static boolean isNull(Item.EquipEffect effect) {
if (effect.conditions != null) return false; if (effect.conditions != null) return false;
if (effect.critical_multiplier != null) return false; if (effect.critical_multiplier != null) return false;
if (effect.damage_modifier != null) return false;
if (effect.damage_boost_max != null) return false; if (effect.damage_boost_max != null) return false;
if (effect.damage_boost_min != null) return false; if (effect.damage_boost_min != null) return false;
if (effect.increase_attack_chance != null) return false; if (effect.increase_attack_chance != null) return false;
@@ -1622,10 +1619,6 @@ public class ItemEditor extends JSONElementEditor {
equipEffect.critical_multiplier = (Double) value; equipEffect.critical_multiplier = (Double) value;
updatePrice = true; updatePrice = true;
updateEquip = true; updateEquip = true;
} else if (source == equipSetDM) {
equipEffect.damage_modifier = (Integer) value;
updatePrice = true;
updateEquip = true;
} else if (source == equipBoostDR) { } else if (source == equipBoostDR) {
equipEffect.increase_damage_resistance = (Integer) value; equipEffect.increase_damage_resistance = (Integer) value;
updatePrice = true; updatePrice = true;

View File

@@ -173,7 +173,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
private JPanel requirementParamsPane; private JPanel requirementParamsPane;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
private JComboBox requirementObj; private JComboBox requirementObj;
private JComponent requirementObjId; private JTextField requirementObjId;
private JComponent requirementValue; private JComponent requirementValue;
private BooleanBasedCheckBox requirementNegated; private BooleanBasedCheckBox requirementNegated;
@@ -675,11 +675,6 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
requirementObjId = null; requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
break; break;
case random:
requirementObj = null;
requirementObjId = addChanceField(pane, "Chance: ", requirement.required_obj_id, "50/100", writable, listener);
requirementValue = null;
break;
case hasActorCondition: case hasActorCondition:
requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener); requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener);
requirementObjId = null; requirementObjId = null;
@@ -688,8 +683,6 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
case inventoryKeep: case inventoryKeep:
case inventoryRemove: case inventoryRemove:
case usedItem: case usedItem:
case wear:
case wearRemove:
requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener); requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = null; requirementObjId = null;
requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener);
@@ -724,10 +717,10 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener); requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener);
requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener); requirementValue = addIntegerField(pane, "Minimum score: ", requirement.required_value, true, writable, listener);
break; break;
case factionScoreEquals: case wear:
requirementObj = null; requirementObj = addItemBox(pane, project, "Item: ", (Item) requirement.required_obj, writable, listener);
requirementObjId = addTextField(pane, "Faction ID:", requirement.required_obj_id, writable, listener); requirementObjId = null;
requirementValue = addIntegerField(pane, "Exact value: ", requirement.required_value, true, writable, listener); requirementValue = null;
break; break;
} }
} }
@@ -2325,14 +2318,11 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
if (!activeReplacements.containsKey(area)) { if (!activeReplacements.containsKey(area)) {
activeReplacements.put(area, true); activeReplacements.put(area, true);
} }
for (ReplaceArea.Replacement repl : area.replacements) {
if(area.replacements != null) { if (replacementsForLayer.get(repl.sourceLayer) == null) {
for (ReplaceArea.Replacement repl : area.replacements) { replacementsForLayer.put(repl.sourceLayer, new ArrayList<ReplaceArea>());
if (replacementsForLayer.get(repl.sourceLayer) == null) { }
replacementsForLayer.put(repl.sourceLayer, new ArrayList<ReplaceArea>()); replacementsForLayer.get(repl.sourceLayer).add(area);
}
replacementsForLayer.get(repl.sourceLayer).add(area);
}
} }
} }
} }
@@ -2465,10 +2455,10 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
return false; return false;
} }
JLabel noTileGround = new JLabel("None", new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)), SwingConstants.LEFT); JLabel noTileGround = new JLabel(new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
JLabel noTileObjects = new JLabel("None", new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)), SwingConstants.LEFT); JLabel noTileObjects = new JLabel(new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
JLabel noTileAbove = new JLabel("None", new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)), SwingConstants.LEFT); JLabel noTileAbove = new JLabel(new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
JLabel noTileTop = new JLabel("None", new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)), SwingConstants.LEFT); JLabel noTileTop = new JLabel(new ImageIcon(DefaultIcons.getNullifyImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)));
{ {
noTileGround.setPreferredSize(new Dimension(32, 32)); noTileGround.setPreferredSize(new Dimension(32, 32));
noTileObjects.setPreferredSize(new Dimension(32, 32)); noTileObjects.setPreferredSize(new Dimension(32, 32));
@@ -2493,19 +2483,16 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
JPanel content = new JPanel(); JPanel content = new JPanel();
content.setLayout(new JideBoxLayout(content, JideBoxLayout.PAGE_AXIS)); content.setLayout(new JideBoxLayout(content, JideBoxLayout.PAGE_AXIS));
if (tooltippedTile != null) { if (tooltippedTile != null) {
tiled.core.Tile tile; Image tile;
Image tileImage;
JLabel label; JLabel label;
if (top != null && top.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) { if (top != null && top.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) {
tile = top.getTileAt(tooltippedTile.x, tooltippedTile.y); tile = top.getTileAt(tooltippedTile.x, tooltippedTile.y).getImage();
tileImage = tile.getImage();
} else { } else {
tile = null; tile = null;
tileImage = null;
} }
if (tileImage != null) { if (tile != null) {
label = new JLabel(tile.getTileSet().getName(), new ImageIcon(tileImage), SwingConstants.LEFT); label = new JLabel(new ImageIcon(tile));
label.setPreferredSize(new Dimension(32,32)); label.setPreferredSize(new Dimension(32,32));
content.add(label, JideBoxLayout.FIX); content.add(label, JideBoxLayout.FIX);
//Fix when (if?) Top is advertised publicly. //Fix when (if?) Top is advertised publicly.
@@ -2514,14 +2501,12 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
} }
if (above != null && above.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) { if (above != null && above.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) {
tile = above.getTileAt(tooltippedTile.x, tooltippedTile.y); tile = above.getTileAt(tooltippedTile.x, tooltippedTile.y).getImage();
tileImage = tile.getImage();
} else { } else {
tile = null; tile = null;
tileImage = null;
} }
if (tileImage != null) { if (tile != null) {
label = new JLabel(tile.getTileSet().getName(), new ImageIcon(tileImage), SwingConstants.LEFT); label = new JLabel(new ImageIcon(tile));
label.setPreferredSize(new Dimension(32,32)); label.setPreferredSize(new Dimension(32,32));
content.add(label, JideBoxLayout.FIX); content.add(label, JideBoxLayout.FIX);
} else { } else {
@@ -2529,14 +2514,12 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
} }
if (objects != null && objects.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) { if (objects != null && objects.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) {
tile = objects.getTileAt(tooltippedTile.x, tooltippedTile.y); tile = objects.getTileAt(tooltippedTile.x, tooltippedTile.y).getImage();
tileImage = tile.getImage();
} else { } else {
tile = null; tile = null;
tileImage = null;
} }
if (tileImage != null) { if (tile != null) {
label = new JLabel(tile.getTileSet().getName(), new ImageIcon(tileImage), SwingConstants.LEFT); label = new JLabel(new ImageIcon(tile));
label.setPreferredSize(new Dimension(32,32)); label.setPreferredSize(new Dimension(32,32));
content.add(label, JideBoxLayout.FIX); content.add(label, JideBoxLayout.FIX);
} else { } else {
@@ -2544,14 +2527,12 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe
} }
if (ground != null && ground.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) { if (ground != null && ground.getTileAt(tooltippedTile.x, tooltippedTile.y) != null) {
tile = ground.getTileAt(tooltippedTile.x, tooltippedTile.y); tile = ground.getTileAt(tooltippedTile.x, tooltippedTile.y).getImage();
tileImage = tile.getImage();
} else { } else {
tile = null; tile = null;
tileImage = null;
} }
if (tileImage != null) { if (tile != null) {
label = new JLabel(tile.getTileSet().getName(), new ImageIcon(tileImage), SwingConstants.LEFT); label = new JLabel(new ImageIcon(tile));
label.setPreferredSize(new Dimension(32,32)); label.setPreferredSize(new Dimension(32,32));
content.add(label, JideBoxLayout.FIX); content.add(label, JideBoxLayout.FIX);
} else { } else {

View File

@@ -37,7 +37,7 @@ public class ItemsTableView extends ElementTableView {
@Override @Override
public int getColumnCount() { public int getColumnCount() {
return 43; return 33;
} }
@Override @Override
@@ -62,30 +62,20 @@ public class ItemsTableView extends ElementTableView {
case 16: return "On kill - AP min"; case 16: return "On kill - AP min";
case 17: return "On kill - AP max"; case 17: return "On kill - AP max";
case 18: return "On kill - # conditions"; case 18: return "On kill - # conditions";
case 19: return "On hit recv - HP min"; case 19: return "AD min";
case 20: return "On hit recv - HP max"; case 20: return "AD max";
case 21: return "On hit recv - AP min"; case 21: return "Max HP";
case 22: return "On hit recv - AP max"; case 22: return "Max AP";
case 23: return "On hit recv - # conditions"; case 23: return "Attack cost";
case 24: return "On hit recv - Tgt HP min"; case 24: return "AC";
case 25: return "On hit recv - Tgt HP max"; case 25: return "BC";
case 26: return "On hit recv - Tgt AP min"; case 26: return "DR";
case 27: return "On hit recv - Tgt AP max"; case 27: return "CS";
case 28: return "AD min"; case 28: return "CM";
case 29: return "AD max"; case 29: return "Move cost";
case 30: return "Damage modifier %"; case 30: return "Use cost";
case 31: return "Max HP"; case 31: return "Reequip cost";
case 32: return "Max AP"; case 32: return "# conditions";
case 33: return "Attack cost";
case 34: return "AC";
case 35: return "BC";
case 36: return "DR";
case 37: return "CS";
case 38: return "CM";
case 39: return "Move cost";
case 40: return "Use cost";
case 41: return "Reequip cost";
case 42: return "# conditions";
} }
return null; return null;
} }
@@ -113,30 +103,20 @@ public class ItemsTableView extends ElementTableView {
case 16: return Integer.class;//"On kill - AP min"; case 16: return Integer.class;//"On kill - AP min";
case 17: return Integer.class;//"On kill - AP max"; case 17: return Integer.class;//"On kill - AP max";
case 18: return Integer.class;//"On kill - # conditions"; case 18: return Integer.class;//"On kill - # conditions";
case 19: return Integer.class;//"On hit recv - HP min"; case 19: return Integer.class;//"AD min";
case 20: return Integer.class;//"On hit recv - HP max"; case 20: return Integer.class;//"AD max";
case 21: return Integer.class;//"On hit recv - AP min"; case 21: return Integer.class;//"Max HP";
case 22: return Integer.class;//"On hit recv - AP max"; case 22: return Integer.class;//"Max AP";
case 23: return Integer.class;//"On hit recv - # conditions"; case 23: return Integer.class;//"Attack cost";
case 24: return Integer.class;//"On hit recv - Tgt HP min"; case 24: return Integer.class;//"AC";
case 25: return Integer.class;//"On hit recv - Tgt HP max"; case 25: return Integer.class;//"BC";
case 26: return Integer.class;//"On hit recv - Tgt AP min"; case 26: return Integer.class;//"DR";
case 27: return Integer.class;//"On hit recv - Tgt AP max"; case 27: return Integer.class;//"CS";
case 28: return Integer.class;//"AD min"; case 28: return Double.class;//"CM";
case 29: return Integer.class;//"AD max"; case 29: return Integer.class;//"Move cost";
case 30: return Integer.class;//"Damage modifier"; case 30: return Integer.class;//"Use cost";
case 31: return Integer.class;//"Max HP"; case 31: return Integer.class;//"Reequip cost";
case 32: return Integer.class;//"Max AP"; case 32: return Integer.class;//"# conditions";
case 33: return Integer.class;//"Attack cost";
case 34: return Integer.class;//"AC";
case 35: return Integer.class;//"BC";
case 36: return Integer.class;//"DR";
case 37: return Integer.class;//"CS";
case 38: return Double.class;//"CM";
case 39: return Integer.class;//"Move cost";
case 40: return Integer.class;//"Use cost";
case 41: return Integer.class;//"Reequip cost";
case 42: return Integer.class;//"# conditions";
} }
return null; return null;
} }
@@ -197,30 +177,20 @@ public class ItemsTableView extends ElementTableView {
case 16: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_min : null;//"On kill - AP min"; case 16: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_min : null;//"On kill - AP min";
case 17: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_max : null;//"On kill - AP max"; case 17: return (!canUse && item.kill_effect != null) ? item.kill_effect.ap_boost_max : null;//"On kill - AP max";
case 18: return (!canUse && item.kill_effect != null && item.kill_effect.conditions_source != null) ? item.kill_effect.conditions_source.size() : null;//"On kill - # conditions"; case 18: return (!canUse && item.kill_effect != null && item.kill_effect.conditions_source != null) ? item.kill_effect.conditions_source.size() : null;//"On kill - # conditions";
case 19: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_min : null;//"On hit recv - HP min"; case 19: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_min : null;//"AD min";
case 20: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_max : null;//"On hit recv - HP max"; case 20: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_max : null;//"AD max";
case 21: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_min : null;//"On hit recv - AP min"; case 21: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_hp_boost : null;//"Max HP";
case 22: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_max : null;//"On hit recv - AP max"; case 22: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_ap_boost : null;//"Max AP";
case 23: return (!canUse && item.hit_received_effect != null && item.hit_received_effect.conditions_source != null) ? item.hit_received_effect.conditions_source.size() : null;//"On hit recv - # conditions"; case 23: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_cost : null;//"Attack cost";
case 24: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_min : null;//"On hit recv - Tgt HP min"; case 24: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_chance : null;//"AC";
case 25: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.hp_boost_max : null;//"On hit recv - Tgt HP max"; case 25: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_block_chance : null;//"BC";
case 26: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_min : null;//"On hit recv - Tgt AP min"; case 26: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_damage_resistance : null;//"DR";
case 27: return (!canUse && item.hit_received_effect != null) ? item.hit_received_effect.ap_boost_max : null;//"On hit recv - Tgt AP max"; case 27: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_critical_skill : null;//"CS";
case 28: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_min : null;//"AD min"; case 28: return (canEquip && item.equip_effect != null) ? item.equip_effect.critical_multiplier : null;//"CM";
case 29: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_boost_max : null;//"AD max"; case 29: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_move_cost : null;//"Move cost";
case 30: return (canEquip && item.equip_effect != null) ? item.equip_effect.damage_modifier : null;//"Damage modifier"; case 30: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_use_item_cost : null;//"Use cost";
case 31: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_hp_boost : null;//"Max HP"; case 31: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_reequip_cost : null;//"Reequip cost";
case 32: return (canEquip && item.equip_effect != null) ? item.equip_effect.max_ap_boost : null;//"Max AP"; case 32: return (canEquip && item.equip_effect != null && item.equip_effect.conditions != null) ? item.equip_effect.conditions.size() : null;//"# conditions";
case 33: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_cost : null;//"Attack cost";
case 34: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_attack_chance : null;//"AC";
case 35: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_block_chance : null;//"BC";
case 36: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_damage_resistance : null;//"DR";
case 37: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_critical_skill : null;//"CS";
case 38: return (canEquip && item.equip_effect != null) ? item.equip_effect.critical_multiplier : null;//"CM";
case 39: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_move_cost : null;//"Move cost";
case 40: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_use_item_cost : null;//"Use cost";
case 41: return (canEquip && item.equip_effect != null) ? item.equip_effect.increase_reequip_cost : null;//"Reequip cost";
case 42: return (canEquip && item.equip_effect != null && item.equip_effect.conditions != null) ? item.equip_effect.conditions.size() : null;//"# conditions";
} }
return null; return null;
} }

View File

@@ -12,8 +12,6 @@ import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Vector; import java.util.Vector;
public class POParser public class POParser
@@ -62,9 +60,11 @@ public class POParser
POFile result = null; POFile result = null;
try try
{ {
BufferedReader br = Files.newBufferedReader(file.toPath(), StandardCharsets.UTF_8); FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
result = parse(br); result = parse(br);
br.close(); br.close();
fr.close();
} }
catch (java.io.FileNotFoundException e) catch (java.io.FileNotFoundException e)
{ {