diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e30ab0d03d4..034648eff4b 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -39,11 +39,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -54,7 +54,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -68,4 +68,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 0b7a565e007..829c5554dba 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -8,10 +8,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - name: Set up JDK 16 - uses: actions/setup-java@v1 + - name: Checkout Code + uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 with: - java-version: 16 + distribution: 'temurin' + java-version: '17' - name: Build with Gradle run: ./gradlew build diff --git a/.gitignore b/.gitignore index 0e89f8bd60b..d55f55791dd 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,13 @@ characters/* !characters/Sorcerer.pcg !characters/SpecialWizard.pcg +# Binary locations +bin/ +code/bin/ +code/build/ +code/comp-manifest +code/manifest + # JVM Error log if Java craches hs_err_*.log @@ -55,15 +62,13 @@ pcgen.jar /output/ /build/ /libs/ +output/ +build/ +libs/ code/testsuite/output/ .gradle/ pcgen-batch-convert.jar .metadata -bin/ -code/bin/ -code/build/ -code/comp-manifest -code/manifest target/ # Data we want to exclude, see .gitignore files within @@ -92,6 +97,8 @@ code/build.eclipse/ out/ pcgendev.iml pcgen.iml +pcgen.ipr +pcgen.iws # VS Code IDE .vscode/ @@ -108,4 +115,3 @@ jre/ mods/ code/manifest-tests .DS_Store - diff --git a/build.gradle b/build.gradle index d4c9a31a241..88cbf54f8b7 100644 --- a/build.gradle +++ b/build.gradle @@ -15,67 +15,117 @@ import org.apache.tools.ant.filters.FixCrLfFilter import org.apache.tools.ant.taskdefs.condition.Os +/** + * Plugins without versions are ones that are bundled with Gradle at the version + * being used (should be through gradlew. + */ plugins { - id 'eclipse' - id 'application' - id 'build-dashboard' - id 'checkstyle' - id "com.github.spotbugs" version '5.0.13' - id 'java' - id 'maven-publish' - id 'pmd' - id 'idea' - id "de.undercouch.download" version '4.1.2' - id 'edu.sc.seis.launch4j' version '2.5.4' - id 'com.github.ben-manes.versions' version '0.45.0' - id "com.dorongold.task-tree" version '2.1.1' - id 'org.openjfx.javafxplugin' version '0.0.13' - id 'org.beryx.runtime' version '1.13.0' -} - + id 'application' // Creating application bundles + id 'build-dashboard' // Produces a build report + id 'checkstyle' // Checkstyle for Java, configured further below + id "com.github.spotbugs" version '5.0.13' // Spotbugs for Java + id 'java' // Core java / javac + id 'maven-publish' // Publishing to Maven Central + id 'pmd' // PMD for Java, configured further below + id 'idea' // For IntelliJ IDEA users + id "de.undercouch.download" version '5.3.1' // Shows download percentage + id 'edu.sc.seis.launch4j' version '2.5.4' // Creates launch4j + id 'com.github.ben-manes.versions' version '0.45.0' // Checks versions for plugins and dependencies + id "com.dorongold.task-tree" version '2.1.1' // Prints the task dependency tree + id 'org.openjfx.javafxplugin' version '0.0.13' // JavaFX support + id 'org.beryx.runtime' version '1.13.0' // Creates custom runtimes +} + +/** + * Set the version and the modules we want from JavaFX (not everything) + */ javafx { - version = "16" + version = "17" modules = [ 'javafx.controls', 'javafx.web', 'javafx.swing', 'javafx.fxml', 'javafx.graphics' ] - //Check if running in ide. If so bundles javafx in to jar. If not only compiles so that runtime can add different platform javafx later. - //Also allows for gradle property which if true will force the single platforms javafx to be bundled to create local build. Can be added in command line with "-PlocalOnly=true." + /* + * Check if running in intellij ide. If so bundles javafx in to jar. If not only + * compiles so that runtime can add different platform javafx later. + * + * Also allows for gradle property which if true will force the single + * platforms javafx to be bundled to create local build. Can be added in + * command line with "-PlocalOnly=true." + */ if (!System.getProperty('idea.active') && !(localOnly.toBoolean())) { configuration = "compileOnly" } } +// Set the groupId as it helps with Maven group = 'net.sourceforge.pcgen' +// Description of this project description = """PCGen""" +// Default task if you just run ./gradlew defaultTasks 'build' +// Configure Java, in particular the version to test/compile/run with java { toolchain { - languageVersion = JavaLanguageVersion.of(16) + languageVersion = JavaLanguageVersion.of(17) } } +// Define properties for the build (directories) ext { + // Where code gets compiled to binDir = "code/bin" - //Folder where the build stuff is placed. + + // Folder where build output is primarily stored + String buildDir = "$projectDir/build" + + // Folder where exe / jar files are placed. outputDir = "$projectDir/output" - //Installer is placed here + + // Folder where the jres are downloaded for building releases + jresDir = "$projectDir/jre" + + // Folder where the JavaFX mods are downloaded for building releases + modsDir = "$projectDir/mods" + + // Installers are placed here releaseDir = "${buildDir}/release" } -//The gradle plugin for netbeans sets the 'mainClass' property instead of 'mainClassName' -//if other IDEs set different properties when trying to execute a given class -//feel free to add them here. -mainClassName = project.hasProperty('mainClass') ? mainClass : 'pcgen.system.Main'; +/* + * The gradle plugin for netbeans sets the 'mainClass' property instead of + * 'mainClassName'. + * + * If other IDEs set different properties when trying to execute + * a given class feel free to add them here. + */ +mainClassName = project.hasProperty('mainClass') ? mainClass : 'pcgen.system.Main' +/* + * Which binary repositories this build uses. + */ repositories { + // Maven Central as a default mavenCentral() + + // Use Ant Ivy Plugin to reference our own hosted repos + // for PCGen Base and PCGen Formula JARs + //ivy { + // TODO Enable HTTPS (e.g., add letsencrypt) for that location + //url "http://pcgen.sourceforge.net/mvnrepo" + //allowInsecureProtocol = true + //patternLayout { + //artifact "[organisation]/jars/[artifact]-[revision].[ext]" + //} + //} ivy { + // TODO Enable HTTPS (e.g., add letsencrypt) for that location name "fileRepo" url 'http://pc-gen.org/librepo/' allowInsecureProtocol = true } + // Use Maven plugin to reference jboss repository as well maven { name = 'free' url = 'https://java.freehep.org/maven2' @@ -89,7 +139,11 @@ repositories { } } +// Define the source sets for each task/module +// TODO even though we have the idea plugin, IntelliJ doesn't reference +// these source sets whether you run that task or not. sourceSets { + // The main build main { java { srcDirs 'code/src/java' @@ -98,6 +152,7 @@ sourceSets { srcDirs = ['code/src/resources'] } } + // Running regular tests test { java { srcDirs = ['code/src/utest', 'code/src/testcommon'] @@ -107,8 +162,8 @@ sourceSets { resources { srcDirs = ['code/src/testResources'] } - } + // Integration Tests itest { java { srcDirs = ['code/src/itest', 'code/src/testcommon'] @@ -118,8 +173,8 @@ sourceSets { } compileClasspath += sourceSets.test.compileClasspath runtimeClasspath += sourceSets.test.runtimeClasspath - } + // Running Slow Tests slowtest { java { srcDirs = ['code/src/test', 'code/src/testcommon'] @@ -129,7 +184,6 @@ sourceSets { } compileClasspath += sourceSets.test.compileClasspath runtimeClasspath += sourceSets.test.runtimeClasspath - } } @@ -153,23 +207,30 @@ task copyMasterSheets(type: Copy) { } } +// TODO Possibly misnamed task compileJava { it.dependsOn 'copyMasterSheets' } /* -* For information on the exclude group items in this section, and why these are necessary to have Eclipse properly compile PCGen, please see the following items: -* https://bugs.openjdk.java.net/browse/JDK-8215739 -* https://bugs.eclipse.org/bugs/show_bug.cgi?id=536928 -* https://stackoverflow.com/questions/51094274/eclipse-cant-find-xml-related-classes-after-switching-build-path-to-jdk-10/53824670#53824670 -* https://docs.gradle.org/current/userguide/dependency_downgrade_and_exclude.html -*/ + * Dependencies for this project. + * + * implementation means both compile and runtime + * testImplementation means both compile and runtime for test phase only + * + * For information on the exclude group items in this section, and why these are necessary to have Eclipse properly compile PCGen, please see the following items: + * https://bugs.openjdk.java.net/browse/JDK-8215739 + * https://bugs.eclipse.org/bugs/show_bug.cgi?id=536928 + * https://stackoverflow.com/questions/51094274/eclipse-cant-find-xml-related-classes-after-switching-build-path-to-jdk-10/53824670#53824670 + * https://docs.gradle.org/current/userguide/dependency_downgrade_and_exclude.html + */ dependencies { + implementation group: 'commons-io', name: 'commons-io', version:'2.11.0' - implementation group: 'org.springframework', name: 'spring-web', version:'5.3.23' - implementation group: 'org.springframework', name: 'spring-beans', version:'5.3.23' - implementation group: 'org.springframework', name: 'spring-core', version:'5.3.23' + implementation group: 'org.springframework', name: 'spring-web', version:'6.0.4' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.0.4' + implementation group: 'org.springframework', name: 'spring-core', version:'6.0.4' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.12.0' implementation('org.apache.xmlgraphics:fop:2.8') { @@ -188,7 +249,16 @@ dependencies { implementation group: 'org.controlsfx', name: 'controlsfx', version:'11.1.2' implementation group: 'net.sourceforge.pcgen', name: 'PCGen-base', version:'1.0.170' + // The latest Base, but pcgen core would need refactoring to support it. + //implementation group: 'net.sourceforge.pcgen', name: 'PCGen-base', version:'1.0.237' + // Use this if you're working from your local PCGen Base + //implementation files("../pcgen-base/PCGen-base/build/libs/PCgen-base-1.0.jar") + implementation group: 'net.sourceforge.pcgen', name: 'PCGen-Formula', version:'1.0.200' + // The latest Formula, but pcgen core would need refactoring to support it. + //implementation group: 'net.sourceforge.pcgen', name: 'PCGen-Formula', version:'1.0.266' + // Use if you're working from your local PCGen Formula + //implementation files("../pcgen-formula/PCGen-formula/build/libs/PCgen-formula-1.0.jar") compileOnly group: 'org.jetbrains', name: 'annotations', version:'24.0.0' compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' @@ -201,16 +271,20 @@ dependencies { testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.9.2' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.16-alpha' + // TODO openjfx-monocle is no longer updated and chances are openjfx-monocle doesn't work with latest OpenJFX + // https://github.com/TestFX/Monocle/issues/79 testImplementation group: 'org.testfx', name: 'openjfx-monocle', version: 'jdk-12.0.1+2' testImplementation group: 'org.xmlunit', name: 'xmlunit-matchers', version:'2.9.1' spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.12.0' } +// Properties to support Ant builds ant.importBuild 'build-gradle.xml' ant.properties['src.java.dir']="code/src/java" ant.properties['build.classes.dir']="build/classes/java/main" +// Configuration for creating JARs from all of the plugins configure('jar-all-plugins') { group = BasePlugin.BUILD_GROUP // Or use 'build' description = 'Create the plugin jars' @@ -222,17 +296,26 @@ ext { } jar { + // Pick up some configuration to JAR up the plugins it.dependsOn 'jar-all-plugins' - duplicatesStrategy = DuplicatesStrategy.EXCLUDE // If we detect duplicate JARs ignore the subsequent ones + + // If we detect duplicate JARs ignore the subsequent ones + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + + // Create the manifest for the main JAR manifest { attributes 'Implementation-Title': 'PCGen', 'Implementation-Version': archiveVersion, 'Main-Class': 'pcgen.system.Main', 'Class-Path': classpath } + from { configurations.runtimeClasspath.collect { it.directory ? it : zipTree(it) } } } +/** + * Create a Java runtime built from Java modules + */ runtime { options = ['--compress', '2'] modules = [ @@ -258,29 +341,49 @@ runtime { 'javafx.graphics' ] + // We support Mac/Win/Linux x86-64, Mac/Linux aarch64, and Win x86-32 targetPlatform('linux-x64', "$projectDir/jre/linux/jre_x64") + targetPlatform('linux-aarch64', "$projectDir/jre/linux/jre_aarch64") targetPlatform('windows-x64', "$projectDir/jre/windows/jre_x64") targetPlatform('windows-x32', "$projectDir/jre/windows/jre_x32") targetPlatform('mac-x64', "$projectDir/jre/mac/jre_x64/Contents/Home") + targetPlatform('mac-aarch64', "$projectDir/jre/mac/jre_aarch64/Contents/Home") + // Use the jpackage tool that comes with Java to build native installers jpackage{ - installerOptions = ["--app-version", "${version.replaceAll('-SNAPSHOT', '')}","--license-file", "${projectDir}/code/LICENSE"] + installerOptions = ["--app-version", "${version.replaceAll('-SNAPSHOT', '')}", "--license-file", "${projectDir}/code/LICENSE"] + + // Get the host architecture + def hostArchitecture = System.getProperty("os.arch") if (Os.isFamily(Os.FAMILY_MAC)) { - targetPlatformName = 'mac-x64' + if (hostArchitecture == "x86_64" || hostArchitecture == "amd64") { + targetPlatformName = 'mac-x64' + } else if (hostArchitecture == "aarch64") { + targetPlatformName = 'mac-aarch64' + } else { + targetPlatformName = 'NOT SUPPORTED' + } installerOptions += ["--mac-package-identifier", "PcGen", "--mac-package-name", "PcGen"] resourceDir = file("${projectDir}/installers/mac-installer") } - else { - targetPlatformName = 'linux-x64' + // This may seem weird but there's no LINUX family detection in the OS lib + else if (Os.isFamily(Os.FAMILY_UNIX)) { + if (hostArchitecture == "x86_64" || hostArchitecture == "amd64") { + targetPlatformName = 'linux-x64' + } else if (hostArchitecture == "aarch64") { + targetPlatformName = 'linux-aarch64' + } else { + targetPlatformName = 'NOT SUPPORTED' + } installerOptions += ['--linux-shortcut'] } - imageName = "PcGen" } } +// Package up other files with the main program tasks.jpackageImage.doLast { copy { includeEmptyDirs = false @@ -296,6 +399,8 @@ tasks.jpackageImage.doLast { into "build/jpackage/PcGen/bin" } } + + // Mac specific if (Os.isFamily(Os.FAMILY_MAC)){ copy { from "${projectDir}/installers/mac-installer" @@ -307,7 +412,7 @@ tasks.jpackageImage.doLast { } } - +// Create the Data Convertor JAR task converterJar(type: Jar, dependsOn: jar) { manifest { attributes 'Implementation-Title': 'PCGen Data Converter', 'Implementation-Version': archiveVersion, @@ -333,8 +438,7 @@ task copyToLibs(type: Copy, dependsOn:[startScripts,distTar,distZip,installDist] from configurations.runtimeClasspath } -task copyToOutput(type: Copy, dependsOn: [createExe, copyToLibs, jar, - converterJar]) { +task copyToOutput(type: Copy, dependsOn: [createExe, copyToLibs, jar, converterJar]) { from "$buildDir/libs/pcgen-${version}.jar" from "$buildDir/libs/pcgen-${version}-batch-convert.jar" from "$buildDir/launch4j/pcgen.exe" @@ -363,6 +467,18 @@ task cleanOutput(type: Delete) { delete outputDir } +// TODO - Hook this into a clean phase properly +task cleanJre(type: Delete) { + description="Clean up things copied to the jre folder by the build" + delete jresDir +} + +// TODO - Hook this into a clean phase properly +task cleanMods(type: Delete) { + description="Clean up things copied to the mods folder by the build" + delete modsDir +} + // Alias tasks tasks.register("buildonly") { dependsOn 'copyToOutput' @@ -376,21 +492,26 @@ build { it.dependsOn 'copyToOutput' } -// TODO This clean isn not as nuclear as it perhaps should be. For jlink and friends to work when you get odd Zip errors -// you will also need to clean out .grade/ output/ bin/ jre/ and mods/ +// TODO This clean is not as nuclear as it perhaps should be. +// For jlink and friends to work when you get odd Zip errors +// you will also need to clean out output/ bin/ jre/ and mods/ clean { it.dependsOn 'clean-plugins' it.dependsOn 'cleanOutput' } -//Ensures that clean is never run after build and when clean is called it is run before build so it doesn't delete the new build folder. +// Ensures that clean is never run after build and when clean is called it is +// run before build so it doesn't delete the new build folder. build.mustRunAfter clean task downloadJRE { - def major = 16 - def archs = ['x64','x32'] + def major = 17 + def archs = ['x64', 'x32', 'aarch64'] def osList = ['windows', 'mac', 'linux'] def extension = 'zip' + + println("Downloading JDKS for use in creating the runtime bundles.") + osList.each{ def os = "${it}" if(os != "windows") { @@ -399,18 +520,20 @@ task downloadJRE { archs.each { def arch = "${it}" if (arch == "x32" && os != "windows") return + if (arch == "aarch64" && os == "windows") return - def url = "https://api.adoptopenjdk.net/v3/binary/latest/${major}/ga/${os}/${arch}/jdk/hotspot/normal/adoptopenjdk" + def url = "https://api.adoptium.net/v3/binary/latest/${major}/ga/${os}/${arch}/jdk/hotspot/normal/eclipse" def jreDir = new File("${projectDir}/jre/${os}/jre_${arch}") if(!jreDir.exists()){ - //Only download Windows libraries. Need to add more OS if we go multi OS at any time. + println("Downloading Java ${major} ${arch} for ${os} from ${url}") - download { + download.run { src url dest new File("${projectDir}/jre/${os}/", "jre_${arch}.${extension}") overwrite false } - //Now untar them + + // Now unzip them if(extension == "zip"){ fileTree(dir: "${projectDir}/jre/${os}/").include("*.${extension}").each { simLib -> copy { @@ -448,7 +571,7 @@ task downloadJRE { fcd.exclude() } else { def segments = relPath.segments - fcd.relativePath = new RelativePath( !fcd.isDirectory() ,(segments[1..-1]) as String[] ) + fcd.relativePath = new RelativePath( !fcd.isDirectory() ,(segments[1..-1]) as String[] ) } } } @@ -460,111 +583,162 @@ task downloadJRE { file("${projectDir}/jre/${os}/jre_${arch}/"+f).deleteDir() } } - + } + else { + println("Java ${major} ${arch} for ${os} already exists at ${jreDir}") } } } } task downloadJavaFXModules(dependsOn: downloadJRE) { - //def major = "16-0-1" - def major = "16" - def archs = ['x64', 'x86'] + // We support Windows/Mac/Linux - x64, Mac/Linux - aarch64, and Windows x86 (32-bit) + def major = "17.0.6" + def archs = ['x64', 'x86', 'aarch64'] def osList = ["windows", "mac", "linux"] - //Downloads javafx .mods for custom runtime image. All platforms downloaded + println("Downloading JavaFX modules (.mods) for use in the runtime bundles.") + // Downloads javafx .mods for custom runtime image. All platforms downloaded osList.each { def os = "${it}" + archs.each { def arch = "$it" - def archAppend = "" - if ((arch == "x86")) { + // build the architecture part of the download filename string + def archAppend + if (arch == "x86") { + // Only Windows for x86-32 bit if (os == "windows") { archAppend = "-x86" } else { return } + } else if (arch == "x64") { + archAppend = "-x64" + } else if (arch == "aarch64") { + // Only Linux and Mac for aarch64 + if (os != "windows") { + archAppend = "-aarch64" + } else { + return + } + } else { + archAppend = "-UNSUPPORTED-ARCHITECTURE" + } + + // Build the os part of the filename string. + // Gluon renamed the mac package to osx + def osPackage = os + if (os == "mac") { + osPackage = "osx" } - def url = "https://gluonhq.com/download/javafx-${major}-jmods-${os}${archAppend}/" - def jmodsDir = new File("${projectDir}/jre/${os}/jre_${arch}/jmods") + // URLs look like this: https://download2.gluonhq.com/openjfx/17.0.6/openjfx-17.0.6_osx-aarch64_bin-jmods.zip + def url = "https://download2.gluonhq.com/openjfx/${major}/openjfx-${major}_${osPackage}${archAppend}_bin-jmods.zip" + def jmodsZip = new File("${projectDir}/jre/${os}/jmods${arch}.zip") + // If we don't already have the jmods, download them and unzip them + // to the correct place. if (!jmodsZip.exists()) { println("Downloading Javafx mods ${major} ${arch} for ${os} from ${url}") - download { + download.run { src url dest new File("${projectDir}/jre/${os}/", "jmods${arch}.zip") overwrite false } - //fileTree(dir: "${projectDir}/jre/${os}/").include("*.zip").each { simLib -> + copy { - println "Unzip jmods${arch}.zip" def zipFile = file("${projectDir}/jre/${os}/jmods${arch}.zip") def outputDir = "${projectDir}/jre/${os}/jre_${arch}/jmods" - if (os=="mac") + if (os == "mac") { outputDir = "${projectDir}/jre/${os}/jre_${arch}/Contents/Home/jmods" - } - else if(os=="windows" && arch=="x86") + else if(os == "windows" && arch == "x86") { outputDir = "${projectDir}/jre/${os}/jre_x32/jmods" } + println "Unzipping ${zipFile} to ${outputDir}" from zipTree(zipFile) into outputDir eachFile { fcd -> def relPath = fcd.relativePath - def segments = relPath.segments fcd.relativePath = new RelativePath(!fcd.isDirectory(), (segments[1..-1]) as String[]) - } } - //new File("${projectDir}/jre/${os}/${simLib.name}").delete() - //} + } else { + println("${jmodsZip} already exists") } } } - //Downloads javafx sdk for local platform. Used for running tests. + // TODO extract this into its own function + // Downloads javafx sdk for local platform. Used for running tests. + println("Downloading JavaFX SDK for use in local testing.") def sdkDir = new File("${projectDir}/mods") - if (!sdkDir.exists()) { + if (!sdkDir.exists() || sdkDir.list().length == 0) { + + // TODO I'll confess much of this seems redundant, but I'm not touching it def os="" if (Os.isFamily(Os.FAMILY_WINDOWS)) { os = "windows" - } else if (Os.isFamily(Os.FAMILY_MAC)) { os = "mac" } else { os = "linux" } - def url = "https://gluonhq.com/download/javafx-${major}-sdk-${os}/" + def hostArchitecture = System.getProperty("os.arch") - println("Downloading JavaFX sdk for ${os} from ${url}") + // We default to x86_64 as default + def archAppend= "" + if (hostArchitecture == "x86_64" || hostArchitecture == "amd64") { + archAppend= "-x64" + } else if (hostArchitecture == "i386") { + archAppend= "-x86" // TODO Not sure if this is supported. + } else if (hostArchitecture == "aarch64") { + archAppend= "-aarch64" + } else { + archAppend = "-UNSUPPORTED-ARCH" + } + + println("Host arch is ${hostArchitecture}") + + // Gluon renamed the mac package so we deal with that but leave the + // the rest of the naming / packing as 'mac'. + def osPackage = os + if (os == "mac") { + osPackage = "osx" + } - download { + def url = "https://download2.gluonhq.com/openjfx/${major}/openjfx-${major}_${osPackage}${archAppend}_bin-sdk.zip" + + println("Downloading JavaFX SDK for ${os} from ${url}") + + download.run { src url dest new File("${projectDir}/mods", "javaFXSdk-${os}.zip") overwrite false } copy { - println "Unzip javaFXSdk-${os}.zip" + def zipFile = file("${projectDir}/mods/javaFXSdk-${os}.zip") def outputDir = "${projectDir}/mods" + println "Unzipping ${zipFile} to ${outputDir}" from zipTree(zipFile) into outputDir eachFile { fcd -> def relPath = fcd.relativePath - def segments = relPath.segments fcd.relativePath = new RelativePath(!fcd.isDirectory(), (segments[1..-1]) as String[]) - } } + } else { + println("JavaFX SDK already exists at ${sdkDir}") } } @@ -643,15 +817,15 @@ task msrdinttest(type: Test, dependsOn: 'jar') { include 'pcgen/inttest/game_modern/*Test.class' } -// Do the lot! +// Do the lot! TODO reenable slowtest task all(dependsOn: ['build', 'slowtest', 'javadoc', 'buildNsis', 'allReports']) { +//task all(dependsOn: ['build', 'javadoc', 'buildNsis', 'allReports']) { } allprojects { tasks.withType(JavaCompile).configureEach { options.fork = true } - tasks.withType(Javadoc) { options.addBooleanOption('Xdoclint:none', true) } @@ -689,7 +863,6 @@ allprojects { options.compilerArgs << "--add-modules" << "javafx.controls,javafx.web,javafx.swing,javafx.fxml" } println "Args for for $name are $options.allCompilerArgs" - } } // https://youtrack.jetbrains.com/issue/KT-46165 @@ -729,11 +902,12 @@ dependencyUpdates.resolutionStrategy { if (selection.candidate.version == '1.8.0_20' && selection.candidate.name == 'openjfx-monocle') { selection.reject('older than current') } - } } } +// Support for creating IntelliJ IDEA files. +// TODO This isn't working presently idea { module { testSourceDirs += project.sourceSets.itest.java.srcDirs @@ -742,11 +916,13 @@ idea { } } +// Use the gradle wrapper wrapper { distributionType = Wrapper.DistributionType.ALL } +// Bring in the rest of the gradle build config apply from: 'code/gradle/autobuild.gradle' apply from: 'code/gradle/distribution.gradle' apply from: 'code/gradle/reporting.gradle' -apply from: 'code/gradle/release.gradle' \ No newline at end of file +apply from: 'code/gradle/release.gradle' diff --git a/code/gradle/autobuild.gradle b/code/gradle/autobuild.gradle index 83673473c21..94a759a029a 100644 --- a/code/gradle/autobuild.gradle +++ b/code/gradle/autobuild.gradle @@ -5,7 +5,7 @@ import java.time.LocalDateTime * autobuild site is generated and the outputs from other tasks that are to be * deployed with the site. * - * Usage: gradle deployAutobuild + * Usage: ./gradlew deployAutobuild */ ext { if (System.env.BUILD_NUMBER) { @@ -43,6 +43,6 @@ task copyInstaller(type: Copy) { into "${destAutobuildDir}/downloads/" } -task deployAutobuild (dependsOn: ['copyDocs', 'copyDist', 'copySite', \ -'copyInstaller']) { +// The Main Task +task deployAutobuild (dependsOn: ['copyDocs', 'copyDist', 'copySite', 'copyInstaller']) { } diff --git a/code/gradle/distribution.gradle b/code/gradle/distribution.gradle index d6dff4f9908..4a42fd4cc7f 100644 --- a/code/gradle/distribution.gradle +++ b/code/gradle/distribution.gradle @@ -5,7 +5,7 @@ import java.time.LocalDateTime * archives included in the PCGen autobuild and PCGen releases. It * is called from the main build.gradle file. * - * Usage: gradle builddist + * Usage: ./gradlew builddist */ ext { zipRootFolder = "pcgen" @@ -99,12 +99,12 @@ application{ run { // Required to fixed incorrectly added "--module-path" and adds correct modules. doFirst { - // -ea enables assertions - jvmArgs = ["-ea", - "--enable-preview", + + jvmArgs = ["-ea", // -ea enables assertions + "--enable-preview", // enable Java preview features "--module-path", "${projectDir}/mods/lib/", - "--add-modules", "javafx.controls,javafx.web,javafx.swing,javafx.fxml", + "--add-modules", "javafx.controls,javafx.web,javafx.swing,javafx.fxml" ] } @@ -123,7 +123,7 @@ installDist.doLast{ [distZip, distTar, installDist]*.dependsOn createExe task testZip(type: Zip, dependsOn: ['converterJar', 'copyToLibs', 'copyToOutput']) { - classifier = 'test' + archiveClassifier.set('test') into(zipRootFolder) { with dataDistsImage with docsDistsImage @@ -135,7 +135,7 @@ task testZip(type: Zip, dependsOn: ['converterJar', 'copyToLibs', 'copyToOutput' } task dataZip(type: Zip) { - classifier = 'data' + archiveClassifier.set('data') into(zipRootFolder) { with dataDistsImage with autobuildSpec @@ -143,7 +143,7 @@ task dataZip(type: Zip) { } task docsZip(type: Zip) { - classifier = 'docs' + archiveClassifier.set('docs') into(zipRootFolder) { with docsDistsImage with autobuildSpec @@ -151,7 +151,7 @@ task docsZip(type: Zip) { } task programZip(type: Zip, dependsOn: 'converterJar') { - classifier = 'program' + archiveClassifier.set('program') into(zipRootFolder) { with programDistsImage with programScriptImage @@ -160,7 +160,7 @@ task programZip(type: Zip, dependsOn: 'converterJar') { } task libsZip(type: Zip, dependsOn: 'copyToLibs') { - classifier = 'libs' + archiveClassifier.set('libs') into(zipRootFolder) { with libsDistsImage with autobuildSpec diff --git a/code/gradle/release.gradle b/code/gradle/release.gradle index e46659e16fc..c2cd4a25324 100644 --- a/code/gradle/release.gradle +++ b/code/gradle/release.gradle @@ -25,6 +25,7 @@ apply plugin: 'java' import org.apache.tools.ant.filters.FixCrLfFilter import org.apache.tools.ant.taskdefs.condition.Os +import org.gradle.api.internal.file.copy.DefaultCopySpec ext { // Work out the path to the release notes for our current version. @@ -43,7 +44,7 @@ ext { exclude 'batik*.jar' } into ('/libs') - } + } as DefaultCopySpec lib32 = copySpec { from("${buildDir}/image/pcgen-windows-x32/lib") { @@ -51,7 +52,7 @@ ext { exclude 'batik*.jar' } into('/lib32') - } + } as DefaultCopySpec lib64 = copySpec { from("${buildDir}/image/pcgen-windows-x64/lib") { @@ -60,7 +61,7 @@ ext { exclude 'javafx*.jar' } into('/lib64') - } + } as DefaultCopySpec pdfLibs = copySpec { from("${buildDir}/libs") { @@ -68,7 +69,7 @@ ext { include 'batik*.jar' } into ('/plugin/pdf/libs') - } + } as DefaultCopySpec basePlugins = copySpec { from("${projectDir}/plugins") { @@ -77,7 +78,7 @@ ext { include 'DoomsdayBook.jar' } into ('/plugins') - } + } as DefaultCopySpec gmgenPlugins = copySpec { from("${projectDir}/plugins") { @@ -86,21 +87,21 @@ ext { exclude 'DoomsdayBook.jar' } into ('/plugin/gmgen/plugins') - } + } as DefaultCopySpec nonPdfOutput = copySpec { from("${projectDir}/outputsheets") { exclude '**/pdf/**' } into ('/outputsheets') - } + } as DefaultCopySpec pdfOutput = copySpec { from("${projectDir}/outputsheets") { include '**/pdf/**' } into ('/plugin/pdf/outputsheets') - } + } as DefaultCopySpec baseData = copySpec { from("${projectDir}/data") { @@ -108,7 +109,7 @@ ext { include 'homebrew/**' } into ('/data') - } + } as DefaultCopySpec optionalData = copySpec { from("${projectDir}/data") { @@ -116,15 +117,16 @@ ext { exclude 'homebrew/**' } into ('/data') - } + } as DefaultCopySpec List result = plainVerNum.replaceAll('-DEV', '').tokenize('.') installerVerNum = result[0].toInteger() + "." + result[1].toInteger() + "." + result[2].take(2).toInteger() + ".0" } -task layoutNsisBase(type: Copy, dependsOn: [runtimeZip, createExe, copyToLibs, - jar, converterJar]) { +task layoutNsisBase(type: Copy, dependsOn: [runtimeZip, createExe, copyToLibs, jar, converterJar]) { + description="Assemble the required files for all PCGen installations" + //doFirst { // Release notes are required! Causes Autobuild Problem //assert file(releaseNotes).exists() @@ -159,7 +161,7 @@ task layoutNsisBase(type: Copy, dependsOn: [runtimeZip, createExe, copyToLibs, with baseData } -//See: https://github.com/TheBoegl/gradle-launch4j\ +// See: https://github.com/TheBoegl/gradle-launch4j launch4j { mainClassName = 'pcgen.system.Main' icon = "${projectDir}/installers/win-installer/Local/pcgen.ico" @@ -173,7 +175,7 @@ launch4j { splashWaitForWindows = true splashTimeout = 60 splashTimeoutError = true - //Can't be longer than 150 characters + // Can't be longer than 150 characters copyright = "PCGen's source-code is distributed under the GNU Lesser General Public License (LGPL)" version = "${shortVerNum}" jvmOptions = ["-Dsun.java2d.dpiaware=false"] @@ -274,7 +276,7 @@ task genDataList doLast { publisherMap.put("starfinder","Starfinder"); File out = new File("$projectDir/installers/win-installer/includes/data.nsh") out.delete() - //List of folder names to ignore. + // List of folder names to ignore. List ignoreList = new ArrayList(); ignoreList.add("homebrew"); ignoreList.add("zen_test"); @@ -348,7 +350,6 @@ task genDataList doLast { } } - // Create the version specific config files for NSIS task genProjectNsis doLast { new File("${projectDir}/installers/win-installer/project.nsh").write(""" @@ -407,16 +408,15 @@ task cleanNsis(type: Delete) { delete nsisBaseFolder, nsisOptionFolder, "${buildDir}/nsis/Local" } - -task sourcesJar(type: Jar, dependsOn: [classes, copyToOutput, createExe, distTar, distZip, layoutNsisBase, - startScripts]) { +task sourcesJar(type: Jar, dependsOn: ['classes', 'copyToOutput', 'createExe', 'distTar', 'distZip', + 'layoutNsisBase', 'startScripts']) { duplicatesStrategy DuplicatesStrategy.INCLUDE description = "build source jar file" - //classifier = 'sources' + archiveClassifier.set('sources') from sourceSets.main.allSource } -task assembleArtifacts(type: Copy, dependsOn: [build, runtimeZip, sourcesJar, buildNsis]) { +task assembleArtifacts(type: Copy, dependsOn: ['build', 'runtimeZip', 'sourcesJar', 'buildNsis']) { description = "Create the release artifacts and get them into the release folder." into releaseDir // buildNsis puts the exe into the release folder directly @@ -424,7 +424,6 @@ task assembleArtifacts(type: Copy, dependsOn: [build, runtimeZip, sourcesJar, bu from("$buildDir/nsisRelease"){ include '*.exe' } - from("${buildDir}/libs") { include 'pcgen*-sources.jar' } @@ -439,8 +438,7 @@ task assembleArtifacts(type: Copy, dependsOn: [build, runtimeZip, sourcesJar, bu } } -//Add || Os.isFamily(Os.FAMILY_UNIX) to add linux installs once bug in installers fixed https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8233449. -if (Os.isFamily(Os.FAMILY_MAC) ) +if (Os.isFamily(Os.FAMILY_MAC) || Os.isFamily(Os.FAMILY_UNIX)) { assembleArtifacts.dependsOn jpackage } @@ -478,7 +476,6 @@ task checksum(dependsOn: assembleArtifacts) doLast { } } - // genDataList removed as it causes release errors, 'genDataList' task prepareRelease (dependsOn: ['clean', 'build', 'runtime']) { description="Prepare PCGen for release. This will update and commit the version, do a clean build including the unit tests and generate the data list for the installer." diff --git a/code/gradle/reporting.gradle b/code/gradle/reporting.gradle index cdc52571a6f..749b6f56c19 100644 --- a/code/gradle/reporting.gradle +++ b/code/gradle/reporting.gradle @@ -2,14 +2,14 @@ * reports to be run as part of the PCGen nightly build. It is * called from the main build.gradle file. * - * Usage: gradle allReports + * Usage: ./gradlew allReports */ checkstyle { configFile = new File('code/standards/checkstyle.xml') configProperties = [samedir: "${rootDir}/code/standards"] showViolations = true - toolVersion = '8.44' + toolVersion = '10.7.0' sourceSets = [] } @@ -19,13 +19,13 @@ pmd { ruleSetFiles = files('code/standards/ruleset.xml') consoleOutput = true sourceSets = [] - toolVersion = "6.21.0" + toolVersion = "6.54.0" incrementalAnalysis = true } -// TODO fix the 52 outstanding bugs and then remove the ignoreFailures +// TODO fix the outstanding bugs and then remove the ignoreFailures spotbugs { - toolVersion = '4.4.0' + toolVersion = '4.7.3' excludeFilter = file("$rootProject.projectDir/code/standards/spotbugs_ignore.xml") omitVisitors = ['Naming', 'CrossSiteScripting', 'DontUseEnum', 'DoInsideDoPrivileged'] reportLevel = 'low' @@ -39,6 +39,7 @@ spotbugsMain { html.stylesheet resources.text.fromFile('code/standards/fancy-hist.xsl') } } + task allReports { dependsOn = ['checkstyleMain', 'pmdMain', 'spotbugsMain'] } diff --git a/code/src/java/pcgen/base/format/HandedManager.java b/code/src/java/pcgen/base/format/HandedManager.java index b1c34b46a6f..b1f0099c632 100644 --- a/code/src/java/pcgen/base/format/HandedManager.java +++ b/code/src/java/pcgen/base/format/HandedManager.java @@ -30,10 +30,9 @@ public class HandedManager implements FormatManager { /** - * Retrieve a Handed object to match the name ({@link #name()}) or localized name + * Retrieve a Handed object to match the name or localized name * (output by {@link #toString()}). The localized lookup is kept for legacy purpose - * when the localized name was saved in the character files (instead of the - * {@link #name()}). + * when the localized name was saved in the character files. * * Note: This will dump stack if there is not a matching Handed value, as the * Handed.valueOf(x) call for the existing Enumeration will fail. This is consistent diff --git a/code/src/java/pcgen/cdom/facet/GrantedAbilityFacet.java b/code/src/java/pcgen/cdom/facet/GrantedAbilityFacet.java index 6516d5b1b71..87fd9a4fca7 100644 --- a/code/src/java/pcgen/cdom/facet/GrantedAbilityFacet.java +++ b/code/src/java/pcgen/cdom/facet/GrantedAbilityFacet.java @@ -34,6 +34,7 @@ import pcgen.core.Ability; import pcgen.core.AbilityCategory; import pcgen.output.publish.OutputDB; +import pcgen.util.Logging; import pcgen.util.enumeration.View; /** @@ -102,7 +103,7 @@ public Collection getCNAbilities(CharID id, Category cat) { if (cat.getParentCategory() != cat) { - //warning + Logging.log(Logging.WARNING, "Parent category: " + cat.getParentCategory().getKeyName() + " did not equal category " + cat.getKeyName()); } List returnList = new ArrayList<>(); diff --git a/code/src/java/pcgen/cdom/facet/input/DomainInputFacet.java b/code/src/java/pcgen/cdom/facet/input/DomainInputFacet.java index 96a1322208f..4fe6d395505 100644 --- a/code/src/java/pcgen/cdom/facet/input/DomainInputFacet.java +++ b/code/src/java/pcgen/cdom/facet/input/DomainInputFacet.java @@ -31,6 +31,7 @@ import pcgen.core.analysis.ChooseActivation; import pcgen.core.chooser.ChoiceManagerList; import pcgen.core.chooser.ChooserUtilities; +import pcgen.util.Logging; /** * DomainInputFacet is a Facet that handles addition of Domains to a Player @@ -75,6 +76,7 @@ private boolean processChoice(CharID id, PlayerCharacter pc, Domain obj, Cho if (!selectedList.isEmpty()) { //Error? + Logging.log(Logging.INFO, "Selected List is not emtpy, it contains : " + selectedList.size() + " domains"); } final List newSelections = aMan.doChooser(pc, availableList, selectedList, new ArrayList<>()); if (newSelections.size() != 1) diff --git a/code/src/java/pcgen/cdom/facet/input/RaceInputFacet.java b/code/src/java/pcgen/cdom/facet/input/RaceInputFacet.java index 273727aca60..4f032603b5a 100644 --- a/code/src/java/pcgen/cdom/facet/input/RaceInputFacet.java +++ b/code/src/java/pcgen/cdom/facet/input/RaceInputFacet.java @@ -30,6 +30,7 @@ import pcgen.core.analysis.ChooseActivation; import pcgen.core.chooser.ChoiceManagerList; import pcgen.core.chooser.ChooserUtilities; +import pcgen.util.Logging; /** * RaceInputFacet is a Facet that tracks the Race of a Player Character. @@ -71,6 +72,7 @@ private boolean processChoice(CharID id, PlayerCharacter pc, Race race, Choi if (!selectedList.isEmpty()) { //Error? + Logging.log(Logging.INFO, "Selected List is not emtpy, it contains : " + selectedList.size() + " races"); } final List newSelections = aMan.doChooser(pc, availableList, selectedList, new ArrayList<>()); if (newSelections.size() != 1) diff --git a/code/src/java/pcgen/cdom/facet/input/TemplateInputFacet.java b/code/src/java/pcgen/cdom/facet/input/TemplateInputFacet.java index 005c94d493d..077f3d5fc73 100644 --- a/code/src/java/pcgen/cdom/facet/input/TemplateInputFacet.java +++ b/code/src/java/pcgen/cdom/facet/input/TemplateInputFacet.java @@ -30,6 +30,7 @@ import pcgen.core.analysis.ChooseActivation; import pcgen.core.chooser.ChoiceManagerList; import pcgen.core.chooser.ChooserUtilities; +import pcgen.util.Logging; /** * TemplateInputFacet is a Facet that handles addition of PCTempaltes to a @@ -73,6 +74,7 @@ private boolean processChoice(CharID id, PlayerCharacter pc, PCTemplate obj, if (!selectedList.isEmpty()) { //Error? + Logging.log(Logging.INFO, "Selected List is not emtpy, it contains : " + selectedList.size() + " templates"); } final List newSelections = aMan.doChooser(pc, availableList, selectedList, new ArrayList<>()); if (newSelections.size() != 1) diff --git a/code/src/java/pcgen/core/BonusManager.java b/code/src/java/pcgen/core/BonusManager.java index 44398888dcd..b2e3b9c7a13 100644 --- a/code/src/java/pcgen/core/BonusManager.java +++ b/code/src/java/pcgen/core/BonusManager.java @@ -352,7 +352,6 @@ void buildActiveBonusMap() // // Now we do all the BonusObj's that require calculations - var bonusListCopy = new ArrayList<>(getActiveBonusList()); for (BonusObj bonus : getActiveBonusList()) { if (processedBonuses.contains(bonus)) diff --git a/code/src/java/pcgen/core/EquipmentChoice.java b/code/src/java/pcgen/core/EquipmentChoice.java index 7ff69a759db..47d0fd5394c 100644 --- a/code/src/java/pcgen/core/EquipmentChoice.java +++ b/code/src/java/pcgen/core/EquipmentChoice.java @@ -555,10 +555,12 @@ public void constructFromChoiceString(String choiceString, final Equipment paren if (kind.startsWith("TITLE=")) { //Do nothing, handled above + Logging.log(Logging.DEBUG, "kind starts with TITLE= and we've already processed this."); } else if (kind.startsWith("COUNT=")) { // Do nothing, handled above + Logging.log(Logging.DEBUG, "kind starts with COUNT= and we've already processed this."); } else { diff --git a/code/src/java/pcgen/core/PlayerCharacter.java b/code/src/java/pcgen/core/PlayerCharacter.java index 2715c63187d..52be3f8f89f 100644 --- a/code/src/java/pcgen/core/PlayerCharacter.java +++ b/code/src/java/pcgen/core/PlayerCharacter.java @@ -9654,6 +9654,7 @@ public void calculateKnownSpellsForClassLevel(PCClass pcc) else { // already know this one + Logging.log(Logging.DEBUG, "We already know about the level: " + spellLevel + " of this character spell, it's in the global default spellbook already."); } } } diff --git a/code/src/java/pcgen/core/VariableContainer.java b/code/src/java/pcgen/core/VariableContainer.java index f2b9f00c832..8e272c96b29 100644 --- a/code/src/java/pcgen/core/VariableContainer.java +++ b/code/src/java/pcgen/core/VariableContainer.java @@ -35,5 +35,5 @@ public interface VariableContainer * * @return the value of the variable */ - public Float getVariableValue(final String varName, final String src, final PlayerCharacter aPC); + public Float getVariableValue(String varName, String src, PlayerCharacter aPC); } diff --git a/code/src/java/pcgen/core/VariableProcessor.java b/code/src/java/pcgen/core/VariableProcessor.java index d2a6545f359..591332083eb 100644 --- a/code/src/java/pcgen/core/VariableProcessor.java +++ b/code/src/java/pcgen/core/VariableProcessor.java @@ -122,7 +122,7 @@ public VariableProcessor(PlayerCharacter pc) * @param spellLevelTemp The temporary spell level * @return The value of the variable */ - public Float getVariableValue(final CharacterSpell aSpell, String varString, String src, int spellLevelTemp) + public Float getVariableValue(CharacterSpell aSpell, String varString, String src, int spellLevelTemp) { Float result = getJepOnlyVariableValue(aSpell, varString, src, spellLevelTemp); @@ -514,7 +514,7 @@ private CachableResult processJepFormula(final CharacterSpell spell, final Strin } } - abstract Float getInternalVariable(final CharacterSpell aSpell, String valString, final String src); + abstract Float getInternalVariable(CharacterSpell aSpell, String valString, String src); /** * Get a value for the term as evaluated in the context of the PC that diff --git a/code/src/java/pcgen/core/analysis/SkillRankControl.java b/code/src/java/pcgen/core/analysis/SkillRankControl.java index 44334aed4f0..2e2b2715e80 100644 --- a/code/src/java/pcgen/core/analysis/SkillRankControl.java +++ b/code/src/java/pcgen/core/analysis/SkillRankControl.java @@ -240,7 +240,9 @@ private static double modRanks2(double rankChange, double curRank, PCClass pcc, int maxLanguages = getTotalRank(aPC, sk).intValue(); if (selectedLanguages > maxLanguages) { - } + // Do nothing, handled above + Logging.log(Logging.DEBUG, "Although there were more selected langauges: " + selectedLanguages + " than max langauges: " + maxLanguages + " we dealth with that earlier."); + } } } } diff --git a/code/src/java/pcgen/core/bonus/BonusObj.java b/code/src/java/pcgen/core/bonus/BonusObj.java index 662c956e700..7812abc019f 100644 --- a/code/src/java/pcgen/core/bonus/BonusObj.java +++ b/code/src/java/pcgen/core/bonus/BonusObj.java @@ -404,9 +404,9 @@ public StackType getStackingFlag() return theStackingFlag; } - protected abstract boolean parseToken(LoadContext context, final String token); + protected abstract boolean parseToken(LoadContext context, String token); - protected abstract String unparseToken(final Object obj); + protected abstract String unparseToken(Object obj); public abstract String getBonusHandled(); diff --git a/code/src/java/pcgen/core/bonus/MultiTagBonusObj.java b/code/src/java/pcgen/core/bonus/MultiTagBonusObj.java index d05a1a1273b..8a6f604842e 100644 --- a/code/src/java/pcgen/core/bonus/MultiTagBonusObj.java +++ b/code/src/java/pcgen/core/bonus/MultiTagBonusObj.java @@ -61,7 +61,7 @@ protected String unparseToken(final Object obj) return (String) obj; } - protected abstract String getBonusTag(final int tagNumber); + protected abstract String getBonusTag(int tagNumber); protected abstract int getBonusTagLength(); diff --git a/code/src/java/pcgen/core/character/WieldCategory.java b/code/src/java/pcgen/core/character/WieldCategory.java index 290fef81c0f..0fb6d907c68 100644 --- a/code/src/java/pcgen/core/character/WieldCategory.java +++ b/code/src/java/pcgen/core/character/WieldCategory.java @@ -35,6 +35,7 @@ import pcgen.core.SizeAdjustment; import pcgen.core.prereq.PrereqHandler; import pcgen.rules.context.AbstractReferenceContext; +import pcgen.util.Logging; public final class WieldCategory implements Loadable { @@ -119,6 +120,7 @@ public void setWieldCategoryStep(int location, CDOMSingleRef step if (previous != null) { // overwrite warning? + Logging.log(Logging.WARNING, "There was a previous wield category, TODO complete dealing with this use case - overwrite?"); } } diff --git a/code/src/java/pcgen/core/chooser/ChoiceManagerList.java b/code/src/java/pcgen/core/chooser/ChoiceManagerList.java index 1bb473c8852..85a91070e59 100644 --- a/code/src/java/pcgen/core/chooser/ChoiceManagerList.java +++ b/code/src/java/pcgen/core/chooser/ChoiceManagerList.java @@ -37,7 +37,7 @@ public interface ChoiceManagerList * @param availableList * @param selectedList */ - public abstract void getChoices(final PlayerCharacter aPc, final List availableList, final List selectedList); + public abstract void getChoices(PlayerCharacter aPc, List availableList, List selectedList); /** * Do chooser @@ -46,8 +46,7 @@ public interface ChoiceManagerList * @param selectedList * @return the list of selected items */ - public abstract List doChooser(PlayerCharacter aPc, final List availableList, final List selectedList, - final List reservedList); + public abstract List doChooser(PlayerCharacter aPc, List availableList, List selectedList, List reservedList); /** * Do chooser for removing a choice @@ -56,8 +55,7 @@ public abstract List doChooser(PlayerCharacter aPc, final List availableLi * @param selectedList * @param reservedList */ - public abstract List doChooserRemove(PlayerCharacter aPc, final List availableList, - final List selectedList, final List reservedList); + public abstract List doChooserRemove(PlayerCharacter aPc, List availableList, List selectedList, List reservedList); /** * Apply the choices to the Pc @@ -65,7 +63,7 @@ public abstract List doChooserRemove(PlayerCharacter aPc, final List avail * @param aPC * @param selected */ - public abstract boolean applyChoices(final PlayerCharacter aPC, final List selected); + public abstract boolean applyChoices(PlayerCharacter aPC, List selected); /** * Calculate the number of effective choices the user can make. @@ -75,7 +73,7 @@ public abstract List doChooserRemove(PlayerCharacter aPc, final List avail * @param aPc The character the choice applies to. * @return The number of choices that may be made */ - public int getNumEffectiveChoices(final List selectedList, final List reservedList, + public int getNumEffectiveChoices(List selectedList, List reservedList, PlayerCharacter aPc); public abstract boolean conditionallyApply(PlayerCharacter pc, T item); diff --git a/code/src/java/pcgen/core/kit/KitLevelAbility.java b/code/src/java/pcgen/core/kit/KitLevelAbility.java index f831a6f634f..3f719074b39 100644 --- a/code/src/java/pcgen/core/kit/KitLevelAbility.java +++ b/code/src/java/pcgen/core/kit/KitLevelAbility.java @@ -27,6 +27,7 @@ import pcgen.core.Kit; import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; +import pcgen.util.Logging; /** * {@code KitLevelAbility}. @@ -107,12 +108,14 @@ private boolean doApplication(PlayerCharacter aPC) if (classKeyed == null) { //Error? + Logging.log(Logging.ERROR, "Character should have the class: " + theClass.getKeyName() + "."); } //Look for ADD in class List> adds = theClass.getListFor(ListKey.ADD); if (adds == null) { //Error? + Logging.log(Logging.ERROR, "The class should have returned a list but returned null."); } for (PersistentTransitionChoice ch : adds) { diff --git a/code/src/java/pcgen/core/term/TermEvaluator.java b/code/src/java/pcgen/core/term/TermEvaluator.java index d0fd3a59b62..ace00c1e23f 100644 --- a/code/src/java/pcgen/core/term/TermEvaluator.java +++ b/code/src/java/pcgen/core/term/TermEvaluator.java @@ -26,13 +26,13 @@ public interface TermEvaluator { String evaluate(PlayerCharacter pc); - String evaluate(PlayerCharacter pc, final Spell aSpell); + String evaluate(PlayerCharacter pc, Spell aSpell); String evaluate(Equipment eq, boolean primary, PlayerCharacter pc); Float resolve(PlayerCharacter pc); - Float resolve(PlayerCharacter pc, final CharacterSpell aSpell); + Float resolve(PlayerCharacter pc, CharacterSpell aSpell); Float resolve(Equipment eq, boolean primary, PlayerCharacter pc); diff --git a/code/src/java/pcgen/core/utils/CoreUtility.java b/code/src/java/pcgen/core/utils/CoreUtility.java index beb2669fd01..95922264959 100644 --- a/code/src/java/pcgen/core/utils/CoreUtility.java +++ b/code/src/java/pcgen/core/utils/CoreUtility.java @@ -486,7 +486,7 @@ public static int[] convertVersionToNumber(String version) { if (idx == 2 && (tokens[idx].startsWith("RC"))) { - // Ignore we are not concerned about Release candidates + Logging.debugPrint("we are not concerned about Release candidates"); } else { diff --git a/code/src/java/pcgen/facade/core/CharacterFacade.java b/code/src/java/pcgen/facade/core/CharacterFacade.java index 6e613de709a..798d6e6b1a3 100644 --- a/code/src/java/pcgen/facade/core/CharacterFacade.java +++ b/code/src/java/pcgen/facade/core/CharacterFacade.java @@ -459,7 +459,7 @@ public interface CharacterFacade extends CompanionFacade * Set the character's current experience point value * @param xp The new XP value to be set */ - public void setXP(final int xp); + public void setXP(int xp); /** * @return a reference to this character's current experience point value @@ -470,7 +470,7 @@ public interface CharacterFacade extends CompanionFacade * Adjust the character's current experience point value * @param xp The value to be added to the character's current experience point value */ - public void adjustXP(final int xp); + public void adjustXP(int xp); /** * @return A reference to the XP total that will qualify the character for the next level @@ -482,7 +482,7 @@ public interface CharacterFacade extends CompanionFacade * * * @param xpTableName The name of the XP table to be set */ - public void setXPTable(final String xpTableName); + public void setXPTable(String xpTableName); /** * Set the character's character type. @@ -531,7 +531,7 @@ public interface CharacterFacade extends CompanionFacade * Set the character's age in years. * @param age The new age to be set. */ - public void setAge(final int age); + public void setAge(int age); /** * @return A reference to the age of the character @@ -548,7 +548,7 @@ public interface CharacterFacade extends CompanionFacade * has changed. * @param ageCat The new age category to be set */ - public void setAgeCategory(final String ageCat); + public void setAgeCategory(String ageCat); /** * @return A reference to the age category of the character. @@ -803,7 +803,7 @@ public interface CharacterFacade extends CompanionFacade /** * @return calculate a variable for the current character */ - public Float getVariable(final String variableString, final boolean isMax); + public Float getVariable(String variableString, boolean isMax); /** * Advise the character facade that it is being closed. diff --git a/code/src/java/pcgen/gui2/dialog/DataInstaller.java b/code/src/java/pcgen/gui2/dialog/DataInstaller.java index 6396d965a48..ada5937bb97 100644 --- a/code/src/java/pcgen/gui2/dialog/DataInstaller.java +++ b/code/src/java/pcgen/gui2/dialog/DataInstaller.java @@ -184,7 +184,7 @@ public void actionPerformed(ActionEvent actionEvent) if (source == null) { - // Do nothing + Logging.log(Logging.DEBUG, "Source was null, but that's OK"); } else if (source.equals(closeButton)) { setVisible(false); diff --git a/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java b/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java index f957e32fcf0..f4e9e3d0c8a 100644 --- a/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java +++ b/code/src/java/pcgen/gui2/facade/EquipmentSetFacadeImpl.java @@ -780,7 +780,7 @@ private EquipNode scanBackForNewLoc(EquipNode equipNode, List ordered if (lastDepth < currRowDepth) { - // Ignore this child of a higher container + Logging.log(Logging.DEBUG, "Ignore this child of a higher container"); } else if ((equipNode.getBodyStructure() != currRowNode.getBodyStructure()) || (equipNode.getParent() != currRowNode.getParent())) @@ -836,7 +836,7 @@ private EquipNode scanForwardForNewLoc(EquipNode equipNode, List orde if (lastDepth < currRowDepth) { - // Ignore this child of a lower container + Logging.log(Logging.DEBUG, "Ignore this child of a higher container"); } else if ((equipNode.getBodyStructure() != currRowNode.getBodyStructure()) || (equipNode.getParent() != currRowNode.getParent())) diff --git a/code/src/java/pcgen/io/IOHandler.java b/code/src/java/pcgen/io/IOHandler.java index f2e15f66ddc..e3404a200a3 100644 --- a/code/src/java/pcgen/io/IOHandler.java +++ b/code/src/java/pcgen/io/IOHandler.java @@ -158,7 +158,7 @@ public void createBackupForFile(File outFile) * @param in the stream to be read from * @param validate */ - protected abstract void read(PlayerCharacter aPC, InputStream in, final boolean validate); + protected abstract void read(PlayerCharacter aPC, InputStream in, boolean validate); ///////////////////////////////////////////////////////////////////////////// ////////////////////////////// Abstract ///////////////////////////////////// diff --git a/code/src/java/pcgen/io/PCGIOHandler.java b/code/src/java/pcgen/io/PCGIOHandler.java index 76c395c01fb..73e02b87339 100644 --- a/code/src/java/pcgen/io/PCGIOHandler.java +++ b/code/src/java/pcgen/io/PCGIOHandler.java @@ -226,7 +226,6 @@ public void write(PlayerCharacter pcToBeWritten, GameMode mode, List c try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8))) { - ; bw.write(pcgString); bw.flush(); diff --git a/code/src/java/pcgen/io/PCGVer2Parser.java b/code/src/java/pcgen/io/PCGVer2Parser.java index e72a68094b0..0cf9a5c6629 100644 --- a/code/src/java/pcgen/io/PCGVer2Parser.java +++ b/code/src/java/pcgen/io/PCGVer2Parser.java @@ -398,13 +398,13 @@ else if (sourceStr.startsWith(IOConstants.TAG_SKILL + '=')) } else { - // TODO Error message + Logging.errorPrint("The PC did not have the skill: " + aSkill.getDisplayName()); } } else { // TODO Error message - // Hmm, not a supported type + Logging.errorPrint(sourceStr + " is not a supported type"); } if (oSource != null) @@ -1766,7 +1766,7 @@ else if (IOConstants.TAG_SKILLPOINTSREMAINING.equals(tag)) else if (IOConstants.TAG_DATA.equals(tag)) { // TODO - // for now it's ok to ignore it! + Logging.debugPrint(tag + " equals + " + IOConstants.TAG_DATA + " TODO: we haven't processed this yet."); } else { @@ -1972,6 +1972,7 @@ else if (IOConstants.TAG_SKILLPOOL.equals(tag)) else if (IOConstants.TAG_CANCASTPERDAY.equals(tag)) { // TODO + Logging.debugPrint(tag + " equals + " + IOConstants.TAG_CANCASTPERDAY + " TODO: we haven't processed this yet."); } else if (IOConstants.TAG_SPELLBASE.equals(tag)) { @@ -2144,7 +2145,7 @@ else if (IOConstants.TAG_ASSOCIATEDDATA.equals(tag)) } else if (tag.equals(IOConstants.TAG_DOMAINGRANTS)) { - //Can safely ignore + Logging.debugPrint(tag + " equals + " + IOConstants.TAG_DOMAINGRANTS + " - ignoring."); } else if (!tag.equals(IOConstants.TAG_ADDTOKEN)) { @@ -2976,6 +2977,7 @@ private void parseKitLine(final String line) if (stok.countTokens() != 2) { // TODO This if switch currently does nothing? + Logging.debugPrint(stok.countTokens() + " did not equal 2 - TODO we need to deal with this case."); } /* final String region = */ @@ -3538,6 +3540,7 @@ private void parseSkillLine(final String line) { // TODO // for now it's ok to ignore it! + Logging.debugPrint(tag + " equals " + IOConstants.TAG_SYNERGY + " OK to ignore."); } else if (IOConstants.TAG_OUTPUTORDER.equals(tag)) { @@ -4788,6 +4791,8 @@ else if (IOConstants.TAG_DATA.equals(childTag)) // Make sure we are not getting a custom item if (aEquip2.isType(Constants.TYPE_CUSTOM)) { + // TODO + Logging.debugPrint(aEquip2.getName() + " is custom equipment. TODO - need to implement?"); } else { @@ -4856,6 +4861,7 @@ else if (IOConstants.TAG_OUTPUTORDER.equals(tag)) catch (NumberFormatException nfe) { // nothing we can or have to do about this + Logging.errorPrint("Tag output order came back as not a proper number."); } aEquip.setOutputIndex(index); @@ -4867,10 +4873,12 @@ else if (IOConstants.TAG_OUTPUTORDER.equals(tag)) else if (IOConstants.TAG_COST.equals(tag)) { // TODO This else if switch currently does nothing? + Logging.debugPrint(tag + " equals " + IOConstants.TAG_COST + " TODO We need to implement this."); } else if (IOConstants.TAG_WT.equals(tag)) { // TODO This else if switch currently does nothing? + Logging.debugPrint(tag + " equals " + IOConstants.TAG_WT + " TODO We need to implement this."); } else if (IOConstants.TAG_NOTE.equals(tag)) { diff --git a/code/src/java/pcgen/io/exporttoken/SkillToken.java b/code/src/java/pcgen/io/exporttoken/SkillToken.java index 14d30a1477f..75f5212b4ec 100644 --- a/code/src/java/pcgen/io/exporttoken/SkillToken.java +++ b/code/src/java/pcgen/io/exporttoken/SkillToken.java @@ -192,6 +192,7 @@ public static SkillDetails buildSkillDetails(String tokenSource) if (i == 0) { // Ignore + Logging.debugPrint("Ignore the 0 indexed token."); } else if (i == 1) { diff --git a/code/src/java/pcgen/io/exporttoken/SpellListToken.java b/code/src/java/pcgen/io/exporttoken/SpellListToken.java index c4b985c4d14..65ae2a8661a 100644 --- a/code/src/java/pcgen/io/exporttoken/SpellListToken.java +++ b/code/src/java/pcgen/io/exporttoken/SpellListToken.java @@ -25,9 +25,8 @@ /** * {@code SpellListToken} is the base class for the SPELLLIST * family of tokens. - * - * */ +@SuppressWarnings("PMD.AbstractClassWithoutAnyMethod") public abstract class SpellListToken extends Token { protected static final int SPELLTAG_CAST = 0; diff --git a/code/src/java/pcgen/io/exporttoken/WeaponToken.java b/code/src/java/pcgen/io/exporttoken/WeaponToken.java index 4fbf166856e..299b32b681b 100644 --- a/code/src/java/pcgen/io/exporttoken/WeaponToken.java +++ b/code/src/java/pcgen/io/exporttoken/WeaponToken.java @@ -1689,6 +1689,7 @@ but for some reason they can (e.g. Monkey Grip) then check // baseBonus += (int) pc.getTotalBonusTo("WEAPONPROF=" + profName, "TOHITOVERSIZE"); // baseBonus += getWeaponProfTypeBonuses(pc, eq, "TOHITOVERSIZE", WPTYPEBONUS_PC); // } + Logging.debugPrint("TODO - Fix If the character normally can't wield this weapon 1-handed, but for some reason they can (e.g. Monkey Grip) then check for TOHIT modifiers."); } if (hitMode == HITMODE_TWPHITH || hitMode == HITMODE_TWPHITL) @@ -2282,6 +2283,7 @@ else if (eq.isThrown()) // Thrown weapons just get stat bonus // and its already been added in the // getTotalBonusTo(TYPE) above + Logging.debugPrint("// Thrown weapons just get stat bonus and its already been added in the getTotalBonusTo(TYPE) above"); } // If at short range, add SHORTRANGE bonus if (range > -1) diff --git a/code/src/java/pcgen/io/exporttoken/WeaponhToken.java b/code/src/java/pcgen/io/exporttoken/WeaponhToken.java index 50920f5e286..a5fec6bd3ac 100644 --- a/code/src/java/pcgen/io/exporttoken/WeaponhToken.java +++ b/code/src/java/pcgen/io/exporttoken/WeaponhToken.java @@ -39,6 +39,7 @@ import pcgen.core.character.WieldCategory; import pcgen.io.ExportHandler; import pcgen.system.LanguageBundle; +import pcgen.util.Logging; /** * {@code WeaponhToken}. @@ -113,7 +114,7 @@ private static Equipment getWeaponEquipment(PlayerCharacter pc) .silentlyGetConstructedCDOMObject(WieldCategory.class, "Light"); if (lightWC == null) { - // Error? + Logging.debugPrint("lightWC WieldCategory should not have been null?"); } else { diff --git a/code/src/java/pcgen/persistence/RecursiveFileFinder.java b/code/src/java/pcgen/persistence/RecursiveFileFinder.java index 104493bf054..3a41913626a 100644 --- a/code/src/java/pcgen/persistence/RecursiveFileFinder.java +++ b/code/src/java/pcgen/persistence/RecursiveFileFinder.java @@ -19,8 +19,9 @@ public RecursiveFileFinder() /** * Recursively looks inside a given directory for PCC files - * and adds them to the {@link #campaignFiles campaignFiles} list. - * @param aDirectory The directory to search. + * and adds them to the campaignFiles list. + * + * @param aDirectory The directory to search. * @param campaignFiles */ public void findFiles(final File aDirectory, List campaignFiles) diff --git a/code/src/java/pcgen/persistence/lst/VariableLoader.java b/code/src/java/pcgen/persistence/lst/VariableLoader.java index 370de5fcb6b..a8f0b15ec2d 100644 --- a/code/src/java/pcgen/persistence/lst/VariableLoader.java +++ b/code/src/java/pcgen/persistence/lst/VariableLoader.java @@ -133,7 +133,7 @@ protected void loadLstFile(LoadContext context, CampaignSourceEntry sourceEntry) if (line.trim().isEmpty()) { - // Ignore the line + Logging.debugPrint("Ignore the empty line."); } else { diff --git a/code/src/java/pcgen/persistence/lst/VersionAwareToken.java b/code/src/java/pcgen/persistence/lst/VersionAwareToken.java index e170e1f64cc..c8e1a5b8cca 100644 --- a/code/src/java/pcgen/persistence/lst/VersionAwareToken.java +++ b/code/src/java/pcgen/persistence/lst/VersionAwareToken.java @@ -58,6 +58,7 @@ protected boolean validateVersionNumber(String version) if (idx == 2 && (tokens[idx].startsWith("RC"))) { // Ignore we are not concerned about Release candidates + Logging.debugPrint("Ignore we are not concerned about Release candidates."); } else { diff --git a/code/src/java/pcgen/system/application/DeadlockHandler.java b/code/src/java/pcgen/system/application/DeadlockHandler.java index 172b280c22f..8412ae0c9be 100644 --- a/code/src/java/pcgen/system/application/DeadlockHandler.java +++ b/code/src/java/pcgen/system/application/DeadlockHandler.java @@ -27,5 +27,5 @@ @FunctionalInterface public interface DeadlockHandler { - void handleDeadlock(final ThreadInfo[] deadlockedThreads); + void handleDeadlock(ThreadInfo[] deadlockedThreads); } diff --git a/code/src/java/pcgen/util/JepCountType.java b/code/src/java/pcgen/util/JepCountType.java index 87537336d8d..b49dda4b245 100644 --- a/code/src/java/pcgen/util/JepCountType.java +++ b/code/src/java/pcgen/util/JepCountType.java @@ -244,6 +244,7 @@ protected Set filterSetP(final String c, Collection it, final String public abstract static class JepCountFilterable extends JepCountType { - protected abstract Collection getData(final PlayerCharacter pc); + protected abstract Collection getData(PlayerCharacter pc); protected static ParameterTree convertParams(final Object[] params) { diff --git a/code/src/java/pcgen/util/PJEP.java b/code/src/java/pcgen/util/PJEP.java index 0b1857555f4..fdcf5c4ba26 100644 --- a/code/src/java/pcgen/util/PJEP.java +++ b/code/src/java/pcgen/util/PJEP.java @@ -233,6 +233,7 @@ else if (paramCount == 2) if (param2 instanceof Integer) { // Nothing to do, it's already an Integer + Logging.debugPrint("Nothing to do, it's already an Integer."); } else if (param2 instanceof Double) { diff --git a/code/src/java/pcgen/util/ParameterTree.java b/code/src/java/pcgen/util/ParameterTree.java index 312b0192f39..6a72485962b 100644 --- a/code/src/java/pcgen/util/ParameterTree.java +++ b/code/src/java/pcgen/util/ParameterTree.java @@ -29,16 +29,16 @@ public class ParameterTree ParameterTree right = null; public static final String OR_STRING = "[or]"; public static final String AND_STRING = "[and]"; - static String orPatString = "\\[or\\]"; - static String andPatString = "\\[and\\]"; + private static String orPatString = "\\[or\\]"; + private static String andPatString = "\\[and\\]"; private static String leftBracket = "("; private static String leftPatString = "\\("; private static String rightPatString = "\\)"; - static String patString = '(' + leftPatString + '|' + rightPatString + '|' + orPatString + '|' + andPatString + ')'; + private static String patString = '(' + leftPatString + '|' + rightPatString + '|' + orPatString + '|' + andPatString + ')'; - static Pattern pat = Pattern.compile(patString); + public static final Pattern pat = Pattern.compile(patString); // the grouping pattern & matcher private static final String PAREN_STRING = '(' + leftPatString + '|' + rightPatString + ')'; diff --git a/code/src/java/plugin/exporttokens/EqSetToken.java b/code/src/java/plugin/exporttokens/EqSetToken.java index f1af9c0700c..1af6d822076 100644 --- a/code/src/java/plugin/exporttokens/EqSetToken.java +++ b/code/src/java/plugin/exporttokens/EqSetToken.java @@ -22,6 +22,7 @@ import pcgen.core.display.CharacterDisplay; import pcgen.io.ExportHandler; import pcgen.io.exporttoken.Token; +import pcgen.util.Logging; /** * Deal with EQSET Token @@ -50,10 +51,12 @@ public String getToken(String tokenSource, PlayerCharacter pc, ExportHandler eh) if ("EQSET.START".equals(tokenSource)) { //TODO: Does Nothing here, only on EQSheet exports, should that be fixed? + Logging.debugPrint("EQSET.START does Nothing here, only on EQSheet exports, should that be fixed?"); } else if ("EQSET.END".equals(tokenSource)) { //TODO: Does Nothing here, only on EQSheet exports, should that be fixed? + Logging.debugPrint("EQSET.END does Nothing here, only on EQSheet exports, should that be fixed?"); } else if ("EQSET.NUMBER".equals(tokenSource)) { diff --git a/code/src/java/plugin/lsttokens/equipmentmodifier/choose/NumberToken.java b/code/src/java/plugin/lsttokens/equipmentmodifier/choose/NumberToken.java index a7470440fe1..8aea3faba98 100644 --- a/code/src/java/plugin/lsttokens/equipmentmodifier/choose/NumberToken.java +++ b/code/src/java/plugin/lsttokens/equipmentmodifier/choose/NumberToken.java @@ -25,6 +25,7 @@ import pcgen.rules.context.LoadContext; import pcgen.rules.persistence.token.CDOMSecondaryToken; import pcgen.rules.persistence.token.ParseResult; +import pcgen.util.Logging; public class NumberToken implements CDOMSecondaryToken { @@ -79,33 +80,30 @@ public ParseResult parseToken(LoadContext context, EquipmentModifier obj, String if (tokString.startsWith("MIN=")) { min = Integer.valueOf(tokString.substring(4)); - // OK } else if (tokString.startsWith("MAX=")) { max = Integer.valueOf(tokString.substring(4)); - // OK } else if (tokString.startsWith("TITLE=")) { - // OK + Logging.debugPrint("Do not process TITLE="); } else if (tokString.startsWith("INCREMENT=")) { - // OK Integer.parseInt(tokString.substring(4)); } else if (tokString.startsWith("NOSIGN")) { - // OK + Logging.debugPrint("Do not process NOSIGN"); } else if (tokString.startsWith("SKIPZERO")) { - // OK + Logging.debugPrint("Do not process SKIPZERO"); } else if (tokString.startsWith("MULTIPLE")) { - // OK + Logging.debugPrint("Do not process MULTIPLE"); } else { diff --git a/code/src/java/plugin/lsttokens/equipmentmodifier/choose/SkillBonusToken.java b/code/src/java/plugin/lsttokens/equipmentmodifier/choose/SkillBonusToken.java index 42340b61c25..86f7202c3b8 100644 --- a/code/src/java/plugin/lsttokens/equipmentmodifier/choose/SkillBonusToken.java +++ b/code/src/java/plugin/lsttokens/equipmentmodifier/choose/SkillBonusToken.java @@ -25,6 +25,7 @@ import pcgen.rules.context.LoadContext; import pcgen.rules.persistence.token.CDOMSecondaryToken; import pcgen.rules.persistence.token.ParseResult; +import pcgen.util.Logging; public class SkillBonusToken implements CDOMSecondaryToken { @@ -84,20 +85,18 @@ public ParseResult parseToken(LoadContext context, EquipmentModifier obj, String else if (tokString.startsWith("MAX=")) { max = Integer.valueOf(tokString.substring(4)); - // OK } else if (tokString.startsWith("TITLE=")) { - // OK + Logging.debugPrint("Do not process TITLE="); } else if (tokString.startsWith("INCREMENT=")) { - // OK Integer.parseInt(tokString.substring(4)); } else { - // Assume it's a primitive skill?? + Logging.debugPrint("Assume it's a primitive skill??"); } } if (max == null) diff --git a/code/src/java/plugin/lsttokens/equipmentmodifier/choose/StatBonusToken.java b/code/src/java/plugin/lsttokens/equipmentmodifier/choose/StatBonusToken.java index 32c620d3c0c..816849aa12a 100644 --- a/code/src/java/plugin/lsttokens/equipmentmodifier/choose/StatBonusToken.java +++ b/code/src/java/plugin/lsttokens/equipmentmodifier/choose/StatBonusToken.java @@ -27,6 +27,7 @@ import pcgen.rules.context.LoadContext; import pcgen.rules.persistence.token.CDOMSecondaryToken; import pcgen.rules.persistence.token.ParseResult; +import pcgen.util.Logging; public class StatBonusToken implements CDOMSecondaryToken { @@ -91,7 +92,7 @@ else if (tokString.startsWith("MAX=")) } else if (tokString.startsWith("TITLE=")) { - // OK + Logging.debugPrint("Do not process TITLE="); } else if (tokString.startsWith("INCREMENT=")) { diff --git a/code/src/java/plugin/pretokens/parser/PreAbilityParser.java b/code/src/java/plugin/pretokens/parser/PreAbilityParser.java index 85fc3accd73..438db5c9563 100644 --- a/code/src/java/plugin/pretokens/parser/PreAbilityParser.java +++ b/code/src/java/plugin/pretokens/parser/PreAbilityParser.java @@ -121,7 +121,7 @@ private static void extractCategory(Prerequisite prereq) throws PersistenceLayer if (preKey.toUpperCase().startsWith(CATEGORY) || preKey.toUpperCase().startsWith(CATEGORY_EQUALS)) { String tempCat = preKey.substring((CATEGORY.length())); - if (tempCat.toUpperCase().trim().equals("ANY")) + if (tempCat.trim().equalsIgnoreCase("ANY")) { Logging.errorPrint("ANY no longer allowed as an Ability Category in PREABILITY"); } @@ -159,7 +159,7 @@ else if (p != prereqList.get(0)) LanguageBundle.getFormattedString("Errors.PreAbility.CategoryNotFirst", tempCat)); } - if (tempCat.toUpperCase().trim().equals("ANY")) + if (tempCat.trim().equalsIgnoreCase("ANY")) { Logging.errorPrint("ANY no longer allowed as an Ability Category in PREABILITY"); } diff --git a/code/src/java/plugin/pretokens/parser/PreClassLevelMaxParser.java b/code/src/java/plugin/pretokens/parser/PreClassLevelMaxParser.java index d16f6c3447d..8c7d4eb09ae 100644 --- a/code/src/java/plugin/pretokens/parser/PreClassLevelMaxParser.java +++ b/code/src/java/plugin/pretokens/parser/PreClassLevelMaxParser.java @@ -23,6 +23,7 @@ import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.prereq.AbstractPrerequisiteListParser; import pcgen.persistence.lst.prereq.PrerequisiteParserInterface; +import pcgen.util.Logging; /** * A prerequisite parser class that handles the parsing of pre class level max tokens. @@ -87,6 +88,7 @@ private static void changeFromLevelMax(Prerequisite p) if (p.getKind() == null) // PREMULT { // Nothing to do. This is a PREMULT and we don't care about them. + Logging.debugPrint("Nothing to do. This is a PREMULT and we don't care about them."); } else if ("classlevelmax".equals(p.getKind())) { diff --git a/code/src/java/plugin/pretokens/parser/PreSkillSitParser.java b/code/src/java/plugin/pretokens/parser/PreSkillSitParser.java index 70d7df0a9d3..6595b1dcd01 100644 --- a/code/src/java/plugin/pretokens/parser/PreSkillSitParser.java +++ b/code/src/java/plugin/pretokens/parser/PreSkillSitParser.java @@ -77,7 +77,7 @@ else if (p != prereqList.get(0)) throw new PersistenceLayerException("SKILL= must be first in PRESKILLSIT"); } - if (skillName.toUpperCase().trim().equals("ANY")) + if (skillName.trim().equalsIgnoreCase("ANY")) { Logging.errorPrint("ANY not supported in PRESKILLSIT"); } diff --git a/code/src/test/pcgen/inttest/PcgenFtlTestCase.java b/code/src/test/pcgen/inttest/PcgenFtlTestCase.java index e3a0551e18b..e89868fa1e3 100644 --- a/code/src/test/pcgen/inttest/PcgenFtlTestCase.java +++ b/code/src/test/pcgen/inttest/PcgenFtlTestCase.java @@ -31,6 +31,7 @@ import java.nio.charset.StandardCharsets; import java.util.Locale; +import org.assertj.core.util.Files; import pcgen.LocaleDependentTestCase; import pcgen.cdom.base.Constants; import pcgen.system.Main; @@ -105,6 +106,7 @@ public static void runTest(String character, String mode) throws IOException // Read in the actual XML produced by PCGen actual = readFile(new File(outputFile)); + System.out.println(Files.newTemporaryFile().getAbsolutePath()); // Read in the expected XML expected = readFile( new File("code/testsuite/csheets/" + character + ".xml")); diff --git a/code/src/test/pcgen/persistence/lst/DataTest.java b/code/src/test/pcgen/persistence/lst/DataTest.java index 6c40cc50252..f92cec0ea5f 100644 --- a/code/src/test/pcgen/persistence/lst/DataTest.java +++ b/code/src/test/pcgen/persistence/lst/DataTest.java @@ -33,6 +33,7 @@ import java.util.function.Function; import java.util.stream.Collectors; +import org.junit.Ignore; import pcgen.cdom.base.CDOMObject; import pcgen.cdom.enumeration.ListKey; import pcgen.core.Campaign; @@ -221,8 +222,9 @@ void orphanFilesTest() throws IOException .collect(Collectors.joining()); // Flag any missing files - assertEquals( - "", report, "Some data files are orphaned."); + // TODO Revert back to the below + assertEquals("", report, "Some data files are orphaned."); + //assertEquals("pathfinder_2e/core_rulebook/c_skills_situation.lst", report, "Some data files are orphaned."); } private static List getLstFilesForCampaign(CDOMObject campaign) diff --git a/code/src/test/pcgen/util/ParameterTreeTest.java b/code/src/test/pcgen/util/ParameterTreeTest.java index a3183c28649..96e0e25bb7c 100644 --- a/code/src/test/pcgen/util/ParameterTreeTest.java +++ b/code/src/test/pcgen/util/ParameterTreeTest.java @@ -56,7 +56,7 @@ public final void testMakeTree1() throws ParseException final Matcher mat = ParameterTree.pat.matcher(s); mat.find(); ParameterTree t1 = ParameterTree.makeTree(s); - assertEquals(s, t1.getContents(), "New ParamterTree has correct contents"); + assertEquals(s, t1.getContents(), "New ParameterTree has correct contents"); } @Test @@ -67,7 +67,7 @@ public final void testMakeTree2() throws ParseException mat.find(); ParameterTree t1 = ParameterTree.makeTree(s); - assertEquals("TYPE=Foo", t1.getContents(), "New ParamterTree has correct contents"); + assertEquals("TYPE=Foo", t1.getContents(), "New ParameterTree has correct contents"); } @Test @@ -77,7 +77,7 @@ public final void testMakeTree3() throws ParseException final Matcher mat = ParameterTree.pat.matcher(s); mat.find(); ParameterTree t1 = ParameterTree.makeTree(s); - assertEquals("TYPE=Foo", t1.getContents(), "New ParamterTree has correct contents"); + assertEquals("TYPE=Foo", t1.getContents(), "New ParameterTree has correct contents"); } @Test @@ -89,20 +89,20 @@ public final void testMakeTree4() throws ParseException ParameterTree t1 = ParameterTree.makeTree(s); - assertEquals("[or]", t1.getContents(), "New ParamterTree has correct contents"); + assertEquals("[or]", t1.getContents(), "New ParameterTree has correct contents"); assertEquals("TYPE=Foo", t1.getLeftTree().getContents(), - "New ParamterTree has correct left tree contents"); + "New ParameterTree has correct left tree contents"); assertNull(t1.getLeftTree().getLeftTree(), - "New ParamterTree has correct left tree, left tree contents"); + "New ParameterTree has correct left tree, left tree contents"); assertNull(t1.getLeftTree().getRightTree(), - "New ParamterTree has correct left tree, right tree contents"); + "New ParameterTree has correct left tree, right tree contents"); assertEquals("TYPE=Bar", t1.getRightTree().getContents(), - "New ParamterTree has correct right tree contents"); + "New ParameterTree has correct right tree contents"); assertNull(t1.getRightTree().getLeftTree(), - "New ParamterTree has correct left tree, left tree contents"); + "New ParameterTree has correct left tree, left tree contents"); assertNull(t1.getRightTree().getRightTree(), - "New ParamterTree has correct left tree, right tree contents"); + "New ParameterTree has correct left tree, right tree contents"); } @@ -115,20 +115,20 @@ public final void testMakeTree5() throws ParseException ParameterTree t1 = ParameterTree.makeTree(s); - assertEquals("[or]", t1.getContents(), "New ParamterTree has correct contents"); + assertEquals("[or]", t1.getContents(), "New ParameterTree has correct contents"); assertEquals("TYPE=Foo", t1.getLeftTree().getContents(), - "New ParamterTree has correct left tree contents"); + "New ParameterTree has correct left tree contents"); assertNull(t1.getLeftTree().getLeftTree(), - "New ParamterTree has correct left tree, left tree contents"); + "New ParameterTree has correct left tree, left tree contents"); assertNull(t1.getLeftTree().getRightTree(), - "New ParamterTree has correct left tree, right tree contents"); + "New ParameterTree has correct left tree, right tree contents"); assertEquals("TYPE=Bar", t1.getRightTree().getContents(), - "New ParamterTree has correct right tree contents"); + "New ParameterTree has correct right tree contents"); assertNull(t1.getRightTree().getLeftTree(), - "New ParamterTree has correct left tree, left tree contents"); + "New ParameterTree has correct left tree, left tree contents"); assertNull(t1.getRightTree().getRightTree(), - "New ParamterTree has correct left tree, right tree contents"); + "New ParameterTree has correct left tree, right tree contents"); } @Test @@ -146,13 +146,13 @@ public final void testMakeTree6() throws ParseException final ParameterTree tlr = tl.getRightTree(); // expected branch nodes - assertEquals("[and]", t.getContents(), "t1 ParamterTree has correct contents"); - assertEquals("[or]", tl.getContents(), "tl ParamterTree has correct contents"); + assertEquals("[and]", t.getContents(), "t1 ParameterTree has correct contents"); + assertEquals("[or]", tl.getContents(), "tl ParameterTree has correct contents"); // expected leaf nodes - assertEquals("String3", tr.getContents(), "tr ParamterTree has correct contents"); - assertEquals("TYPE=Foo", tll.getContents(), "tll ParamterTree has correct contents"); - assertEquals("TYPE=Bar", tlr.getContents(), "tlr ParamterTree has correct contents"); + assertEquals("String3", tr.getContents(), "tr ParameterTree has correct contents"); + assertEquals("TYPE=Foo", tll.getContents(), "tll ParameterTree has correct contents"); + assertEquals("TYPE=Bar", tlr.getContents(), "tlr ParameterTree has correct contents"); // check that leaves really are leaves assertNull(tr.getLeftTree(), "tr left tree is null (i.e. is a leaf node)"); diff --git a/code/src/testResources/pcgen/lang/cleaned.properties b/code/src/testResources/pcgen/lang/cleaned.properties index 2fd9a596d71..ea89a92a681 100644 --- a/code/src/testResources/pcgen/lang/cleaned.properties +++ b/code/src/testResources/pcgen/lang/cleaned.properties @@ -1,4 +1,4 @@ -# LanguageBundle.properties with all unused keys removed as at 2019-05-22T02:13:27.433886 +# LanguageBundle.properties with all unused keys removed as at 2022-10-02T12:59:59.393795 # LanguageBundle.properties with all unused keys removed as at 2012-08-27T07:34:45+10:00 # Note: Trailing spaces are used in a number of places in this file. Please do @@ -146,17 +146,11 @@ in_select=Select # Mnemonic for in_select, used in install source dialog -in_ok=OK +in_ok=_OK -in_mn_ok=O +in_cancel=_Cancel -in_cancel=Cancel - -in_mn_cancel=C - -in_apply=Apply -# Mnemonic for in_apply -in_mn_apply=A +in_apply=_Apply in_add=Add @@ -170,11 +164,7 @@ in_portrait=Portrait in_edit=Edit -in_copy=Copy - -in_buy=Buy - -in_mn_buy=B +in_buy=_Buy #Universal Skill related @@ -203,40 +193,7 @@ in_todoUseField=Please use the {0} field. #Panes folder classes -in_lock=Lock - -in_mn_lock=L - -in_unlock=Unlock - -in_plugin_init_massive_50damage=Roll Fort for more than 50 damage (3rd Ed) -in_plugin_init_massive_ConDamage=Roll Fort for CON Damage (Modern) -in_plugin_init_massive_failure=Massive Damage Failure -in_plugin_init_massive_Half=Roll Fort for more than half of total hit points (House) -in_plugin_init_massive_halfCurrent=Failure does half current hit points (House) -in_plugin_init_massive_halfTotal=Failure does half total hit points (House) -in_plugin_init_massive_kill=Failure kills character (3rd Ed) -in_plugin_init_massive_massive=Massive Damage -in_plugin_init_massive_minusOne=Failure takes character to -1 hit points (Modern) -in_plugin_init_size=Size Settings -in_plugin_init_massive_noTrack=Don't Track Massive Damage -in_plugin_init_massive_size=Take size into account (3rd Ed) -in_plugin_init_massive_sizeL=(+10 for each size category larger than Medium) -in_plugin_init_massive_sizeS=(\u221210 for each size category smaller) -in_plugin_init_maxHp=Max Hit Points -in_plugin_init_maxNum=Max Number to add -in_plugin_init_performance=Performance -in_plugin_init_refreshOnChange=Refresh tabs on state change -in_plugin_notes_client=Client -in_plugin_notes_dataLocation=Notes Data Location -in_plugin_notes_general=General -in_plugin_notes_logGameData=Log game data -in_plugin_notes_sourceDir=Source Directory -in_plugin_notes_name=Notes # Mnemonic for in_plugin_notes_name -in_mn_plugin_notes_name=o -in_plugin_notes_file=GMGen Notes File -in_plugin_notes_newNote=New Note in_center=Center @@ -581,8 +538,6 @@ in_magicItems=Magic Items in_gmNotes=GM Notes -in_gm=GM - in_bio=Bio in_newItem=New Item @@ -1066,13 +1021,7 @@ in_mnuToolsFiltersEditTip=Create your own custom compound filters # Tools->GMGen # {0} is application name -in_mnuToolsGMGen={0} - -in_mn_mnuToolsGMGen=G - # {0} is application name -in_mnuToolsGMGenTip=Run {0} - # Tools->List Editors in_mnuToolsListEditors=List Editors @@ -1366,12 +1315,9 @@ in_sumStats=Statistics in_sumClassLevel=Class & Level in_sumLevelWarnTitle=Level up warning - -in_sumPoolWarning=You have not spent all of your purchase pool.
Once you have reached first level you will
not be able to spend the rest of these points.
Are you sure you wish to proceed? - -in_sumAbilitiesZeroWarning=All your abilities are zero. Are you sure this is correct?
Once you have added a level, bonuses from\nability scores are not always retroactive. - -in_sumAbilitiesWarning=Are your abilities set as you'd like them?
Once you have added a level, bonuses from
ability scores are not always retroactive. +in_sumPoolWarning=You have not spent all of your purchase pool. Once you have reached first level you will not be able to spend the rest of these points. Are you sure you wish to proceed? +in_sumAbilitiesZeroWarning=All your abilities are zero. Are you sure this is correct? Once you have added a level, bonuses from\nability scores are not always retroactive. +in_sumAbilitiesWarning=Are your abilities set as you'd like them?\nOnce you have added a level, bonuses from ability scores are not always retroactive. in_sumAbilitiesWarningCheckBox=Show for each new character @@ -1493,7 +1439,7 @@ in_sumCreateMonster_Tip=Create a monster using prepared packages. in_sumSelectAFreeSetOfClothing=Select a free set of clothing # Stat bump dialog -in_statTitle=Choose the ability score to increment. If you Cancel you
can increment an ability score on the Summary tab later. +in_statTitle=Choose the ability score to increment. If you Cancel you
can increment an ability score on the Summary tab later. in_statTitleWithSkill=Choose the ability score to increment. If you Cancel you
can increment an ability score on the Summary tab later.
Raising a stat here may award more skill points. # Random Name Dialog @@ -1539,24 +1485,6 @@ in_Prefs_purModConf=Purchase Mode Configuration in_Prefs_hp=Hit Points -in_Prefs_hpGenLabel=Hit Point Generation : - -in_Prefs_hpAverage=Average - -in_Prefs_hpPercentage=Percentage - -in_Prefs_hpStandard=Random - -in_Prefs_hpAutoMax=Always Maximum - -in_Prefs_hpUserRolled=User Rolled - -in_Prefs_hpMaxAtFirst=Maximum HP at First Level - -in_Prefs_hpMaxAtFirstClass=Do not apply to Racial Hit Dice - -in_Prefs_hpAverageRoundedUp=Average, Rounded Up - in_Prefs_houseRules=House Rules in_Prefs_monsters=Monsters @@ -1564,16 +1492,8 @@ in_Prefs_monsters=Monsters in_Prefs_decMax=Decrease score maximum in_Prefs_decMin=Decrease score minimum -in_Prefs_ignoreMonsterHDCap=Ignore Monster HD Cap - in_Prefs_defaults=Defaults -in_Prefs_xpTable=Default experience table to be used: - -in_Prefs_characterType=Default character type: - -in_Prefs_previewSheet=Default preview sheet: - in_Prefs_pcgenTip=Settings that affect the way PCGen works. in_Prefs_appearance=Appearance @@ -1582,36 +1502,12 @@ in_Prefs_appearanceTip=Settings that affect the appearance of PCGen. in_Prefs_color=Colors -in_Prefs_colorPrereqQualify=All Prerequisites Met - -in_Prefs_colorPrereqFail=Prerequisites Not Met - -in_Prefs_colorAutoFeat=Automatic Feat - -in_Prefs_colorVirtFeat=Virtual Feat - -in_Prefs_colorStatusRelease=Release Status - -in_Prefs_colorStatusAlpha=Alpha Status - -in_Prefs_colorStatusBeta=Beta Status - -in_Prefs_colorStatusTest=Test Status - -in_Prefs_colorSelect=Select color for - in_Prefs_maxBelowMin=Purchase Score Maximum value can no go below Purchase Score Minimum\! in_Prefs_minExceedMax=Purchase Score Minimum value can not exceed Purchase Score Maximum Value\! in_Prefs_minus=- in_Prefs_displayOpts=Display Options -in_Prefs_showSkillModifierBreakdown=Show skill modifier breakdown on Skills Tab - -in_Prefs_showSkillRanksBreakdown=Show skill rank breakdown on Skills Tab - -in_Prefs_showSingleBoxPerBundle=Show only one checkbox per bundle of consumables - in_Prefs_exportChoice=Open file after export: in_Prefs_ask=Ask @@ -1649,6 +1545,8 @@ in_Prefs_location=Location in_Prefs_pcgenCharacterDir=PCGen Character Directory: +in_Prefs_pcgenPortraitsDir=PCGen Portraits Directory: + in_Prefs_pcgenBackupCharacterDir=PCGen Character Backup Directory: in_Prefs_pcgenCharacterDirTitle=Find the new PCGen character directory @@ -1684,6 +1582,9 @@ in_Prefs_pcgenSystemDirTitle=Find the new PCGen system directory in_Prefs_pcgenFilesDir=PCGen option.ini Directory: # {0} is the application name +in_Prefs_progDir={0} Directory +in_Prefs_homeDir=Home Directory +in_Prefs_selectDir=Select a directory in_Prefs_setCost=Set the cost for each ability score in_Prefs_pcgenFilesDirTitle=Find the new pcgen options.ini directory @@ -1743,37 +1644,16 @@ in_Prefs_paperType=Paper Type : in_Prefs_sources=Sources -in_Prefs_autoLoadAtStart=Autoload Sources at Start - -in_Prefs_autoLoadWithPC=Autoload Sources with PC - -in_Prefs_allowOptionInSource=Allow options to be set by sources - in_Prefs_alwaysOverwrite=Always overwrite existing output sheet without asking -in_Prefs_saveCustom=Save Custom Equipment to customEquipment.lst in_Prefs_savedMethods=Saved Methods: -in_Prefs_displayOGL=Display Open Game License on Source Load - in_Prefs_displayMature=Display maturity warning on Source Load -in_Prefs_loadURLs=Allow sources to be loaded from web links - -in_Prefs_allowOverride=Allow newer sources to override duplicate object from older sources - -in_Prefs_skipSourceSelect=Do not show source selection dialog on program start - -in_Prefs_useAdvancedSourceSelect=Use advanced source selection - -in_Prefs_allowMultiLineObjectsSelect=Allow multi-line objects in sources in_Prefs_allowPoints=Allowed Points in_Prefs_CancelTip=Cancel Purchase Mode Configuration #Preferences dialogs -in_Prefs_urlBlocked=Use at your own risk!\nIt's possible that malicious files could be downloaded and\nput the security of your system at risk.\nOnly download files you trust and protect\nyour system with anti-virus software. - -in_Prefs_sourceDisplay=Source Display in_Prefs_sdLong=Long @@ -1788,13 +1668,6 @@ in_Prefs_sdMedium=Medium in_Prefs_remove=Remove in_Prefs_removeTemp=Remove temporary character sheet files on exit -in_Prefs_useOutputNamesEquipment=Display "OutputName" for equipment - -in_Prefs_useOutputNamesSpells=Display "OutputName" for spells -in_Prefs_useOutputNamesOther=Display "OutputName" for other items - -in_Prefs_singleChoiceOption=Chooser single choice behaviour : - in_Prefs_cmNone=None in_Prefs_cmSelect=Add the single choice to the selections @@ -1805,18 +1678,11 @@ in_Prefs_weaponProfPrintout=Weapon Proficiencies on the Output Sheet in_Prefs_copy=Copy Settings -in_Prefs_copyFrom=Copy preferences from - in_Prefs_copyTo= to game mode {0} -in_Prefs_copyDesc=The following items will be copied:
\n
  • Preview character sheet
  • \n
  • Character Stats Score Generation
  • \n
  • Experience Table
- in_Prefs_copyDone=Settings have been copied. in_Prefs_cost=Cost -in_Prefs_plugins=Plugins -in_Prefs_pluginsTitle=Plugin Launch -in_Prefs_pluginsRun=Run this plugin? in_Prefs_plus=+ in_Prefs_restartInfo=Note: Changes to these settings will not take effect until PCGen is restarted. @@ -1834,7 +1700,6 @@ in_Prefs_postExportCommandStandard=Post Export Command (Standard): #ToolBar Tips. 0 is the name of a game mode. in_Prefs_unitSetType=Unit set for {0} -in_Prefs_OK=OK in_Prefs_OKTip=Accept these values #Tip of the Day @@ -2033,18 +1898,14 @@ PrerequisiteOperator.display.neq=not equal # SettingsHandler -SettingsHandler.114=N/A +SettingsHandler.not.applicable=N/A SettingsHandler.no.options.file=No options file found, will create one when exiting. SettingsHandler.will.create.filepaths.ini=No filepaths.ini file found, will create one when exiting. -SettingsHandler.can.not.close.filepaths.ini=Can''t close filepaths.ini file - SettingsHandler.will.create.filter.ini=No filter settings file found, will create one when exiting. -SettingsHandler.can.not.close.filter.ini=Can''t close filter file - # SettingsHandler # The '|' characters in MissingFopLibMessage will be replaced by newline characters '\n' @@ -2067,10 +1928,6 @@ InfoSpells.export.failed.retry=Could not export {0}. Try another filename InfoSpells.export.failed=Could not export {0} -InfoSpells.must.set.filename=You must set a filename. - -InfoSpells.can.not.overwrite.directory=You cannot overwrite a directory with a file. - InfoSpells.delete=Del InfoSpells.spell.info=Spell Info @@ -2107,8 +1964,6 @@ in_Prefs_postExportCommandPDF=Post Export Command (PDF): in_Prefs_Reset=Reset in_Prefs_ResetTip=Reset to saved values -in_Enforce_rejectLevelUp=You cannot level up while you still have unallocated skill points or feat slots remaining. - #Image Preview Equipment.UnarmedStrike=Unarmed Strike @@ -2473,8 +2328,6 @@ in_kitInfo=Kit Info in_kitWarnStart=The following warnings were encountered in_kitWarnEnd=Do you wish to apply the kit? -in_kmd={0}\u00a0km/d -in_kmh={0}\u00a0km/h in_kitInfo_TotalCost=Total Cost: {0} {1} @@ -2532,7 +2385,6 @@ in_uichooser_value=Enter a value: ### GMGen localization # {0} is application name (GMGen) -in_gmgen_frameTitle={0} System in_mnuCut=Cut # Mnemonic for in_mnuCut in_mn_mnuCut=t @@ -2567,143 +2419,37 @@ in_mnuNewTip= # Used in buttons to select a file or directory ...=\u2026 -in_plugin_initiative=Initiative # Mnemonic for in_plugin_initiative -in_plugin_initiative_rollPcInit=Automatically roll PC initiatives at combat start -in_plugin_initiative_dying=Dying Damage -in_plugin_initiative_dying_end=Dying damage happens at the end of each round (3rd Ed) -in_plugin_initiative_dying_own=Dying damage happens on character's initiative (House) -in_plugin_initiative_dying_start=Dying damage starts same round character started dying -in_plugin_initiative_disabled=Disabled Behavior -in_plugin_initiative_disabled_zero=Character becomes disabled at 0 HP (Standard) -in_plugin_initiative_disabled_mincon=Character becomes disabled at \u2212CON Modifier HP (House) -in_plugin_initiative_death_minten=Death at \u221210 hit points (3rd Ed, Modern) -in_plugin_initiative_death_negcon=Death at negative Con hit points (House) -in_plugin_initiative_nonlethal=Non Lethal Damage (Modern) -in_plugin_initiative_stabilize_auto=Auto Stabilize -in_plugin_initiative_stabilize_fort=Fort save DC 20/round (Modern) -in_plugin_initiative_stabilize_none=None (House) -in_plugin_initiative_stabilize_tenpercent=10% chance/round (3rd Ed) -in_plugin_initiative_subdual=Subdual Damage (3rd Ed) -in_plugin_initiative_subdualnl=Subdual/Non Lethal Damage -in_plugin_initiative_damage=Damage - -in_plugin_initiative_round={0} ({1}) - -in_plugin_state_active=Active -in_plugin_state_nothing= -in_plugin_state_bleeding=Bleeding -in_plugin_state_staggered=Staggered -in_plugin_state_unconsious=Unconsious -in_plugin_state_stable=Stable -in_plugin_state_dead=Dead -in_plugin_state_dazed=Dazed -in_plugin_state_disabled=Disabled -in_plugin_state_defeated=Defeated - -in_plugin_experience_name=Experience Adjuster -in_mn_plugin_experience_name=E - -in_plugin_xp=Experience -in_plugin_xp_add=Add -in_plugin_xp_addEnemy=Add Enemy -in_plugin_xp_addXpToParty=Add XP to Party -in_plugin_xp_adjustCr=Adjust CR/Level -in_plugin_xp_byParty=Calculate total experience by party level, divide equally (3rd Ed, Modern) -in_plugin_xp_byPC=Calculate experience by individual PC level, divide total by number of PCs (3.5 Ed) -in_plugin_xp_calc=Experience Calculation Type -in_plugin_xp_char=Characters # {0} name of the character, {1} player -in_plugin_xp_defeated={0} ({1}) Defeated -in_plugin_xp_enemies=Enemies -in_plugin_xp_nameCr=Name (CR) -in_plugin_xp_nameLvlXp=Name (Level) Experience -in_plugin_xp_normal=Normal -in_plugin_xp_removeEnemy=Remove Enemy -in_plugin_xp_selectedChar=selected character -in_plugin_xp_xpFromCombat=Experience From Combat: -in_plugin_xp_xpTo=\ XP to -in_plugin_xp_half=Half as Hard -in_plugin_xp_easier=Much Easier -in_plugin_xp_harder=Much Harder -in_plugin_xp_twice=Twice as Hard # Used in filter of open/save dialog -in_pcgen_file=PCGen File -in_pcgen_file_char=PCGen Character # Used in the menu -in_plugin_pcgtracker_name=Character Tracker # Mnemonic for in_plugin_pcgtracker_name -in_mn_plugin_pcgtracker_name=C -in_plugin_dicebag_name=DiceBag # Mnemonic for in_plugin_dicebag_name -in_mn_plugin_dicebag_name=g -in_plugin_dicebag_desc=Dice Bag Plugin - -in_mpd={0}\u00a0mpd -in_mph={0}\u00a0mph in_multHalf=\u00d7 \u00bd in_multiply=\u00d7 {0} in_multQuarter=\u00d7 \u00bc in_multThreeQuarter=\u00d7 \u00be -in_log_localeInvalid=Locale {0} ignored in XML, using {1}_{2}_{3} instead - # LST Converter in_lstConvErrorsTitle=PCGen Data Conversion Errors in_lstConvErrorsFound=Caution! {0} errors were found in the data being converted.\nThese erroneous tags and data have been dropped from the converted output.\nYou should not use this data! You should correct the errors and rerun the conversion. -in_plugin_overland_name=Overland Travel # Mnemonic for in_plugin_overland_name -in_mn_plugin_overland_name=O -in_plugin_overland_animals=Animals: -in_plugin_overland_days=Days: -in_plugin_overland_error_noWay=Unknown way id=\"{0}\", please fix \"{1}\"'s XML -in_plugin_overland_fieldKm=\ km -in_plugin_overland_fieldMiles=\ miles -in_plugin_overland_food=Food: -in_plugin_overland_leftArrow=<- -in_plugin_overland_lodging=Lodging: -in_plugin_overland_mapUnits=Map Units -in_plusKmh=+ {0}\u00a0km/h -in_plusMph=+ {0}\u00a0mph -in_unitHours=\ h -in_unitDays=\ d -in_unitUnknown=\ ? - -in_plugin_overland_noDatafile=No data files in directory {0} -in_plugin_overland_people=People: -in_plugin_overland_perDay=Per Day -in_plugin_overland_perWeek=Per Week -in_plugin_overland_realUnits=Real Units -in_plugin_overland_rightArrow=-> -in_plugin_overland_roomAndBoard=Room and Board -in_plugin_overland_scaleConverter=Scale Converter -in_plugin_overland_total=Total: -in_plugin_overland_travelTime=Travel Time in_plugin_randomname_name=Random Name in_mn_plugin_randomname_name=R -in_plugin_encounter_name=Encounter -in_mn_plugin_encounter_name=E -in_plugin_encounter_targetEL=Target EL -in_plugin_encounter_numbercreature=Number of Creatures -in_plugin_encounter_environment=Environment -in_plugin_encounter_newEncounter=New Encounter -in_plugin_encounter_beginCombat=Begin Combat -in_plugin_encounter_totalEL=Total Encounter Level: -in_plugin_encounter_error_unhandled=Unhandled ActionEvent: {0} -in_plugin_encounter_error_missing=Missing file: {0} -in_plugin_encounter_generic=Generic - #CoreView Labels in_mnuToolsCoreView = View Character Hierarchy in_CoreView_Perspective = Perspective: in_mnuToolsSolverView = View Solver Process in_SolverView_Perspective = Solver Processing: in_SolverView_VarName = Variable Name: + +# Character Preview Tab +in_loadingCharacterPreview = Loading Character Preview... diff --git a/code/src/testResources/pcgen/lang/unused.properties b/code/src/testResources/pcgen/lang/unused.properties index 00fa00acb47..ff610ee96b9 100644 --- a/code/src/testResources/pcgen/lang/unused.properties +++ b/code/src/testResources/pcgen/lang/unused.properties @@ -1,4 +1,4 @@ -# LanguageBundle.properties with all used keys removed as at 2019-05-22T02:13:27.480086 +# LanguageBundle.properties with all used keys removed as at 2022-10-02T12:59:59.456803 # LanguageBundle.properties with all unused keys removed as at 2012-08-27T07:34:45+10:00 # Note: Trailing spaces are used in a number of places in this file. Please do @@ -37,9 +37,11 @@ in_CloseTip=Close the window. # Mnemonic for in_select, used in install source dialog in_mn_select=S +in_mn_ok=O + in_cancelTip=Cancel this action -# Mnemonic for in_apply +in_mn_cancel=C in_delete=Delete in_deleteTip=Delete the current selection @@ -48,6 +50,8 @@ in_mn_delete=D in_rename=Rename +in_copy=Copy + #Universal Skill related #Universal Spell related @@ -72,12 +76,45 @@ in_up=Up in_down=Down +in_lock=Lock + +in_mn_lock=L + +in_unlock=Unlock + in_mn_unlock=L in_mn_rename=R in_placeTabs=Place Tabs +in_plugin_init_massive_50damage=Roll Fort for more than 50 damage (3rd Ed) +in_plugin_init_massive_ConDamage=Roll Fort for CON Damage (Modern) +in_plugin_init_massive_failure=Massive Damage Failure +in_plugin_init_massive_Half=Roll Fort for more than half of total hit points (House) +in_plugin_init_massive_halfCurrent=Failure does half current hit points (House) +in_plugin_init_massive_halfTotal=Failure does half total hit points (House) +in_plugin_init_massive_kill=Failure kills character (3rd Ed) +in_plugin_init_massive_massive=Massive Damage +in_plugin_init_massive_minusOne=Failure takes character to -1 hit points (Modern) +in_plugin_init_size=Size Settings +in_plugin_init_massive_noTrack=Don't Track Massive Damage +in_plugin_init_massive_size=Take size into account (3rd Ed) +in_plugin_init_massive_sizeL=(+10 for each size category larger than Medium) +in_plugin_init_massive_sizeS=(\u221210 for each size category smaller) +in_plugin_init_maxHp=Max Hit Points +in_plugin_init_maxNum=Max Number to add +in_plugin_init_performance=Performance +in_plugin_init_refreshOnChange=Refresh tabs on state change +in_plugin_notes_client=Client +in_plugin_notes_dataLocation=Notes Data Location +in_plugin_notes_general=General +in_plugin_notes_logGameData=Log game data +in_plugin_notes_sourceDir=Source Directory +in_plugin_notes_name=Notes # Mnemonic for in_plugin_notes_name +in_mn_plugin_notes_name=o +in_plugin_notes_file=GMGen Notes File +in_plugin_notes_newNote=New Note in_mn_placeTabs=P @@ -85,86 +122,6 @@ in_moveTab=Move Tab in_mn_moveTab=M -in_groupTabs=Group Tabs - -in_mn_groupTabs=G - -in_ungroupTop=Ungroup top - -in_ungroupLeft=Ungroup left - -in_ungroupBottom=Ungroup bottom - -in_ungroupRight=Ungroup right - -in_ungroupUp=Ungroup up - -in_ungroupDown=Ungroup down - -in_spinTips1=Place all tabs along the top - -in_spinTips2=Place all tabs along the left - -in_spinTips3=Place all tabs along the bottom - -in_spinTips4=Place all tabs along the right - -in_spinTips5=Move tab to the beginning - -in_spinTips6=Move tab left - -in_spinTips7=Move tab to the end - -in_spinTips8=Move tab right - -in_spinTips9=Move tab to the top - -in_spinTips10=Move tab up - -in_spinTips11=Move tab to the bottom - -in_spinTips12=Move tab down - -in_spinTips13=Group tabs up - -in_spinTips14=Group tabs left - -in_spinTips15=Group tabs down - -in_spinTips16=Group tabs right - -in_spinTips17=Tabs grouped to the top - -in_spinTips18=Tabs grouped to the left - -in_spinTips19=Tabs grouped to the bottom - -in_spinTips20=Tabs grouped to the right - -in_spinTips21=Ungroup tabs back to the top - -in_spinTips22=Ungroup tabs back to the left - -in_spinTips23=Ungroup tabs back to the bottom - -in_spinTips24=Ungroup tabs back to the right - -in_spinTips25=Ungroup these tabs back to the top - -in_spinTips26=Ungroup these tabs back to the left - -in_spinTips27=Ungroup these tabs back to the bottom - -in_spinTips28=Ungroup these tabs back to the right - -in_spinTips29=Ungroup this tab back to the top - -in_spinTips30=Ungroup this tab back to the left - -in_spinTips31=Ungroup this tab back to the bottom - -in_spinTips32=Ungroup this tab back to the right - # PCGen Startup Tasks # PCGen window items @@ -263,6 +220,8 @@ in_clSubClassInfo=Subclass Info in_buyPortrait=Buy Portrait from Affiliate +in_gm=GM + #0 note #1 number of children in_delNote1=Are you sure you wish to delete the note {0} and its {1} children? @@ -417,9 +376,7 @@ in_skillMaxRanks=Max Ranks # Tools->GMGen # {0} is application name - # {0} is application name - # Tools->List Editors in_calculate=Calculate @@ -491,14 +448,62 @@ in_buyPortraitTipString=Click to commission a portrait from RPGCharacterIl in_Prefs_rolled=Rolled +in_Prefs_hpGenLabel=Hit Point Generation : + +in_Prefs_hpAverage=Average + +in_Prefs_hpPercentage=Percentage + +in_Prefs_hpStandard=Random + +in_Prefs_hpAutoMax=Always Maximum + +in_Prefs_hpUserRolled=User Rolled + +in_Prefs_hpMaxAtFirst=Maximum HP at First Level + +in_Prefs_hpMaxAtFirstClass=Do not apply to Racial Hit Dice + +in_Prefs_hpAverageRoundedUp=Average, Rounded Up + in_Prefs_hrCrossSkillCost=Cross-class Skill Cost (deprecated use SKILLCOST_CROSSCLASS tag in game mode's miscinfo file) in_Prefs_defaultMonsters=Use Default Monsters in_Prefs_hideMonsterClasses=Use HD +/- instead of monster classes +in_Prefs_ignoreMonsterHDCap=Ignore Monster HD Cap + +in_Prefs_xpTable=Default experience table to be used: + +in_Prefs_characterType=Default character type: + +in_Prefs_previewSheet=Default preview sheet: + +in_Prefs_colorPrereqQualify=All Prerequisites Met + +in_Prefs_colorPrereqFail=Prerequisites Not Met + +in_Prefs_colorAutoFeat=Automatic Feat + +in_Prefs_colorVirtFeat=Virtual Feat + +in_Prefs_colorStatusRelease=Release Status + +in_Prefs_colorStatusAlpha=Alpha Status + +in_Prefs_colorStatusBeta=Beta Status + +in_Prefs_colorStatusTest=Test Status + +in_Prefs_colorSelect=Select color for + in_Prefs_mainTabPlacement=Main Tab Placement +in_Prefs_showSkillModifierBreakdown=Show skill modifier breakdown on Skills Tab + +in_Prefs_showSkillRanksBreakdown=Show skill rank breakdown on Skills Tab + in_Prefs_showToolTips=Show Tooltip Text in_Prefs_showFeatDesciption=Display Feat Description @@ -518,23 +523,56 @@ in_Prefs_wandMax=Wand Maximum Spell Level in_Prefs_badMaxFixing=Bad value for purchase maximum score, fixing... in_Prefs_badMinFixing=Bad value for purchase minimum score, fixing... -in_Prefs_pcgenPortraitsDir=PCGen Portraits Directory: - # {0} is the application name -in_Prefs_progDir={0} Directory -in_Prefs_homeDir=Home Directory -in_Prefs_selectDir=Select a directory in_Prefs_printDeprecation=Show Format Deprecation Messages in_Prefs_printUnconstructed=Show Detail for Unconstructed References +in_Prefs_autoLoadAtStart=Autoload Sources at Start + +in_Prefs_autoLoadWithPC=Autoload Sources with PC + +in_Prefs_allowOptionInSource=Allow options to be set by sources + +in_Prefs_saveCustom=Save Custom Equipment to customEquipment.lst + +in_Prefs_displayOGL=Display Open Game License on Source Load + in_Prefs_displayd20=Display d20 Required Information on Source Load +in_Prefs_loadURLs=Allow sources to be loaded from web links + +in_Prefs_allowOverride=Allow newer sources to override duplicate object from older sources + +in_Prefs_skipSourceSelect=Do not show source selection dialog on program start + +in_Prefs_useAdvancedSourceSelect=Use advanced source selection + +in_Prefs_allowMultiLineObjectsSelect=Allow multi-line objects in sources + #Preferences dialogs +in_Prefs_urlBlocked=Use at your own risk!\nIt's possible that malicious files could be downloaded and\nput the security of your system at risk.\nOnly download files you trust and protect\nyour system with anti-virus software. + +in_Prefs_sourceDisplay=Source Display + +in_Prefs_useOutputNamesEquipment=Display "OutputName" for equipment + +in_Prefs_useOutputNamesSpells=Display "OutputName" for spells +in_Prefs_useOutputNamesOther=Display "OutputName" for other items + +in_Prefs_singleChoiceOption=Chooser single choice behaviour : in_Prefs_warnFirstLevelUp=Show abilities warning for each new character +in_Prefs_copyFrom=Copy preferences from + +in_Prefs_copyDesc=The following items will be copied:\nPreview character sheet\nCharacter Stats Score Generation\nExperience Table + +in_Prefs_plugins=Plugins +in_Prefs_pluginsTitle=Plugin Launch +in_Prefs_pluginsRun=Run this plugin? + #Non ISO Paper sizes in_PaperExecutive=Executive in_PaperLegal=Legal @@ -544,6 +582,8 @@ in_PaperLetter=Letter #ToolBar Tips. 0 is the name of a game mode. +in_Prefs_OK=OK + #Tip of the Day in_tod_didyouknow=Did You Know? @@ -592,6 +632,10 @@ SettingsHandler.can.not.write.options.ini=Can''t write options.ini file SettingsHandler.can.not.close.options.ini.write=Can''t close options file after writing +SettingsHandler.can.not.close.filepaths.ini=Can''t close filepaths.ini file + +SettingsHandler.can.not.close.filter.ini=Can''t close filter file + SettingsHandler.filter.ini.readonly=Can''t write filter.ini file as the file is read only: {0} SettingsHandler.can.not.write.filter.ini=Can''t write filter.ini file @@ -611,6 +655,8 @@ InfoSpells.html.spell.details=\ School: {0}   SubSchool: #ToolBar Tips +in_Enforce_rejectLevelUp=You cannot level up while you still have unallocated skill points or feat slots remaining. + #Image Preview # 0 - Race key @@ -792,6 +838,9 @@ in_mn_saveSelection=S # gui2 kits +in_kmd={0}\u00a0km/d +in_kmh={0}\u00a0km/h + # Character Manager #gui2 info @@ -821,6 +870,7 @@ in_uichooser_bad_param=Unrecognised parameter "{0}" for CHOOSE:USERINPUT ### GMGen localization # {0} is application name (GMGen) +in_gmgen_frameTitle={0} System # Mnemonic for in_mnuCut # Mnemonic for in_mnuCopy # Mnemonic for in_mnuPaste @@ -831,25 +881,134 @@ error-list.plugin-manager=error-list.plugin-manager # Used in buttons to select a file or directory +in_plugin_initiative=Initiative # Mnemonic for in_plugin_initiative +in_plugin_initiative_rollPcInit=Automatically roll PC initiatives at combat start +in_plugin_initiative_dying=Dying Damage +in_plugin_initiative_dying_end=Dying damage happens at the end of each round (3rd Ed) +in_plugin_initiative_dying_own=Dying damage happens on character's initiative (House) +in_plugin_initiative_dying_start=Dying damage starts same round character started dying +in_plugin_initiative_disabled=Disabled Behavior +in_plugin_initiative_disabled_zero=Character becomes disabled at 0 HP (Standard) +in_plugin_initiative_disabled_mincon=Character becomes disabled at \u2212CON Modifier HP (House) in_plugin_initiative_death=Death - +in_plugin_initiative_death_minten=Death at \u221210 hit points (3rd Ed, Modern) +in_plugin_initiative_death_negcon=Death at negative Con hit points (House) +in_plugin_initiative_nonlethal=Non Lethal Damage (Modern) +in_plugin_initiative_stabilize_auto=Auto Stabilize +in_plugin_initiative_stabilize_fort=Fort save DC 20/round (Modern) +in_plugin_initiative_stabilize_none=None (House) +in_plugin_initiative_stabilize_tenpercent=10% chance/round (3rd Ed) +in_plugin_initiative_subdual=Subdual Damage (3rd Ed) +in_plugin_initiative_subdualnl=Subdual/Non Lethal Damage +in_plugin_initiative_damage=Damage + +in_plugin_initiative_round={0} ({1}) + +in_plugin_state_active=Active +in_plugin_state_nothing= +in_plugin_state_bleeding=Bleeding +in_plugin_state_staggered=Staggered +in_plugin_state_unconsious=Unconsious +in_plugin_state_stable=Stable +in_plugin_state_dead=Dead +in_plugin_state_dazed=Dazed +in_plugin_state_disabled=Disabled +in_plugin_state_defeated=Defeated + +in_plugin_experience_name=Experience Adjuster +in_mn_plugin_experience_name=E + +in_plugin_xp=Experience +in_plugin_xp_add=Add +in_plugin_xp_addEnemy=Add Enemy +in_plugin_xp_addXpToParty=Add XP to Party +in_plugin_xp_adjustCr=Adjust CR/Level +in_plugin_xp_byParty=Calculate total experience by party level, divide equally (3rd Ed, Modern) +in_plugin_xp_byPC=Calculate experience by individual PC level, divide total by number of PCs (3.5 Ed) +in_plugin_xp_calc=Experience Calculation Type +in_plugin_xp_char=Characters # {0} name of the character, {1} player +in_plugin_xp_defeated={0} ({1}) Defeated +in_plugin_xp_enemies=Enemies +in_plugin_xp_nameCr=Name (CR) +in_plugin_xp_nameLvlXp=Name (Level) Experience +in_plugin_xp_normal=Normal +in_plugin_xp_removeEnemy=Remove Enemy +in_plugin_xp_selectedChar=selected character +in_plugin_xp_xpFromCombat=Experience From Combat: +in_plugin_xp_xpTo=\ XP to +in_plugin_xp_half=Half as Hard +in_plugin_xp_easier=Much Easier +in_plugin_xp_harder=Much Harder +in_plugin_xp_twice=Twice as Hard # Used in filter of open/save dialog +in_pcgen_file=PCGen File +in_pcgen_file_char=PCGen Character # Used in the menu +in_plugin_pcgtracker_name=Character Tracker # Mnemonic for in_plugin_pcgtracker_name +in_mn_plugin_pcgtracker_name=C +in_plugin_dicebag_name=DiceBag # Mnemonic for in_plugin_dicebag_name +in_mn_plugin_dicebag_name=g +in_plugin_dicebag_desc=Dice Bag Plugin in_plugin_dicebag_filter=GMGen Dice Bag in_plugin_charactersheet_name=Character Sheet in_mn_plugin_charactersheet_name=S +in_mpd={0}\u00a0mpd +in_mph={0}\u00a0mph + +in_log_localeInvalid=Locale {0} ignored in XML, using {1}_{2}_{3} instead # LST Converter +in_plugin_overland_name=Overland Travel # Mnemonic for in_plugin_overland_name +in_mn_plugin_overland_name=O +in_plugin_overland_animals=Animals: +in_plugin_overland_days=Days: +in_plugin_overland_error_noWay=Unknown way id=\"{0}\", please fix \"{1}\"'s XML +in_plugin_overland_fieldKm=\ km +in_plugin_overland_fieldMiles=\ miles +in_plugin_overland_food=Food: +in_plugin_overland_leftArrow=<- +in_plugin_overland_lodging=Lodging: +in_plugin_overland_mapUnits=Map Units +in_plusKmh=+ {0}\u00a0km/h +in_plusMph=+ {0}\u00a0mph +in_unitHours=\ h +in_unitDays=\ d +in_unitUnknown=\ ? + +in_plugin_overland_noDatafile=No data files in directory {0} +in_plugin_overland_people=People: +in_plugin_overland_perDay=Per Day +in_plugin_overland_perWeek=Per Week +in_plugin_overland_realUnits=Real Units +in_plugin_overland_rightArrow=-> +in_plugin_overland_roomAndBoard=Room and Board +in_plugin_overland_scaleConverter=Scale Converter +in_plugin_overland_total=Total: +in_plugin_overland_travelTime=Travel Time + +in_plugin_encounter_name=Encounter +in_mn_plugin_encounter_name=E +in_plugin_encounter_targetEL=Target EL +in_plugin_encounter_numbercreature=Number of Creatures +in_plugin_encounter_environment=Environment +in_plugin_encounter_newEncounter=New Encounter +in_plugin_encounter_beginCombat=Begin Combat +in_plugin_encounter_totalEL=Total Encounter Level: +in_plugin_encounter_error_unhandled=Unhandled ActionEvent: {0} +in_plugin_encounter_error_missing=Missing file: {0} +in_plugin_encounter_generic=Generic #CoreView Labels + +# Character Preview Tab diff --git a/code/standards/ruleset.xml b/code/standards/ruleset.xml index bf82efa82df..6df821ef06a 100644 --- a/code/standards/ruleset.xml +++ b/code/standards/ruleset.xml @@ -22,14 +22,15 @@ + + - + - - + @@ -89,7 +90,7 @@ - + @@ -110,6 +111,7 @@ + @@ -151,26 +153,27 @@ - - + + - + + - - + + diff --git a/code/standards/spotbugs_ignore.xml b/code/standards/spotbugs_ignore.xml index 893e7aed65d..cb43d880e14 100644 --- a/code/standards/spotbugs_ignore.xml +++ b/code/standards/spotbugs_ignore.xml @@ -2,16 +2,16 @@ + xsi:schemaLocation="https://github.com/spotbugs/filter/3.0.0 https://raw.githubusercontent.com/spotbugs/spotbugs/master/spotbugs/etc/findbugsfilter.xsd"> - - - + + + @@ -20,7 +20,7 @@ - + diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fbce071a31a..b856941029c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue Sep 11 19:00:47 BST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists