diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 7dd374cc8..043f9d937 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -6,25 +6,37 @@ name: Nightly NBM Deployment on: push: branches: [ master ] + pull_request: + jobs: - build: + BuildSDK: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v3 with: - java-version: 11 + java-version: 21 + distribution: 'temurin' + + - name: Validate the Gradle wrapper + uses: gradle/wrapper-validation-action@v2 - name: Grant execute permission for gradle run: chmod +x gradlew - name: Build the SDK run: ./gradlew buildSdk + + NBMDeployment: + needs: [BuildSDK] + runs-on: ubuntu-latest + if: github.event_name == 'push' + steps: - name: Checkout the nightly-trigger repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: repository: 'jMonkeyEngine/sdk-update-center' ref: nightly diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0d259ef70..83d222d5a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,11 +9,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up JDK 11 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: distribution: temurin - java-version: 11 + java-version: 21 - name: Grant execute permission for gradle run: chmod +x gradlew - name: Build the SDK @@ -24,9 +24,9 @@ jobs: - name: Override Harness (custom icon) run: ./gradlew overrideHarness -Ptag_name=${{ github.ref_name }} - name: Build Installers - run: ant -Dstorepass="$NBM_SIGN_PASS" -Dpack200.enabled=true set-spec-version build-installers unset-spec-version + run: ant -Dstorepass="$NBM_SIGN_PASS" -Dpack200.enabled=false set-spec-version build-installers unset-spec-version env: - BUILD_X86: true + BUILD_X86: false BUILD_X64: true BUILD_OTHER: true - name: Fix Platform Independent Build diff --git a/BasicGameTemplate/nbproject/project.properties b/BasicGameTemplate/nbproject/project.properties index a88c96dfc..f3c44b70d 100644 --- a/BasicGameTemplate/nbproject/project.properties +++ b/BasicGameTemplate/nbproject/project.properties @@ -42,14 +42,17 @@ javac.classpath=\ ${libs.jme3-lwjgl.classpath}:\ ${libs.jme3-effects.classpath}:\ ${libs.jme3-terrain.classpath}:\ - ${libs.jme3-jbullet.classpath} + ${libs.jme3-jbullet.classpath}:\ + ${libs.jme3-awt-dialogs.classpath}:\ + ${libs.jme3-plugins-json.classpath}:\ + ${libs.jme3-plugins-json-gson.classpath} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false javac.processorpath=\ ${javac.classpath} -javac.source=11 -javac.target=11 +javac.source=21 +javac.target=21 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir} @@ -65,7 +68,7 @@ javadoc.use=true javadoc.version=false javadoc.windowtitle= jaxbwiz.endorsed.dirs="${netbeans.home}/../ide12/modules/ext/jaxb/api" -jme.project.version=3.4.1 +jme.project.version=3.5.2 jnlp.codebase.type=local jnlp.descriptor=application jnlp.enabled=false diff --git a/JME3TestsTemplate/nbproject/project.properties b/JME3TestsTemplate/nbproject/project.properties index d7a635056..9c88d6ff3 100644 --- a/JME3TestsTemplate/nbproject/project.properties +++ b/JME3TestsTemplate/nbproject/project.properties @@ -26,7 +26,8 @@ includes=** jar.compress=false javac.classpath=\ ${libs.jme3-jogg.classpath}:\ - ${libs.jme3-blender.classpath}:\ + ${libs.jme3-plugins-json.classpath}:\ + ${libs.jme3-plugins-json-gson.classpath}:\ ${libs.jme3-networking.classpath}:\ ${libs.jme3-plugins.classpath}:\ ${libs.jme3-core.classpath}:\ @@ -36,12 +37,13 @@ javac.classpath=\ ${libs.jme3-effects.classpath}:\ ${libs.jme3-terrain.classpath}:\ ${libs.jme3-jbullet.classpath}:\ - ${libs.jme3-test-data.classpath} + ${libs.jme3-test-data.classpath}:\ + ${libs.jme3-awt-dialogs.classpath} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false -javac.source=11 -javac.target=11 +javac.source=21 +javac.target=21 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/ant-jme/src/com/jme/ant/LoadWikiImages.java b/ant-jme/src/com/jme/ant/LoadWikiImages.java index 12f824bbc..5691c4d43 100644 --- a/ant-jme/src/com/jme/ant/LoadWikiImages.java +++ b/ant-jme/src/com/jme/ant/LoadWikiImages.java @@ -9,6 +9,7 @@ import java.io.FileOutputStream; import java.io.FileReader; import java.io.InputStream; +import java.net.URI; import java.net.URL; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; @@ -48,7 +49,7 @@ public void execute() throws BuildException { name = name.substring(0, markIdx); } name = name.replaceAll(":", "/"); - URL url = new URL(host + link); + URL url = URI.create(host + link).toURL(); InputStream in = null; FileOutputStream out = null; try { @@ -83,7 +84,7 @@ public void execute() throws BuildException { } //make external folder and clean filename name = "external/" + name.replaceAll("[_[^\\w\\däüöÄÜÖ\\/\\+\\-\\. ]]", "_"); - URL url = new URL(host + link); + URL url = URI.create((host + link)).toURL(); InputStream in = url.openStream(); File file = new File(getLocation().getFileName().replaceAll("build.xml", "") + File.separator + targetFolder + File.separator + name.replaceAll("/", File.separator)); log("Getting external image: " + host + link); diff --git a/branding/core/core.jar/org/netbeans/core/startup/about.png b/branding/core/core.jar/org/netbeans/core/startup/about.png index 72f3dbee8..2ea64d99b 100644 Binary files a/branding/core/core.jar/org/netbeans/core/startup/about.png and b/branding/core/core.jar/org/netbeans/core/startup/about.png differ diff --git a/branding/core/core.jar/org/netbeans/core/startup/splash.gif b/branding/core/core.jar/org/netbeans/core/startup/splash.gif index 11632803e..18f1772a4 100644 Binary files a/branding/core/core.jar/org/netbeans/core/startup/splash.gif and b/branding/core/core.jar/org/netbeans/core/startup/splash.gif differ diff --git a/branding/modules/org-netbeans-core.jar/org/netbeans/core/ui/Bundle.properties b/branding/modules/org-netbeans-core.jar/org/netbeans/core/ui/Bundle.properties index 10d40a8ea..7003bebeb 100644 --- a/branding/modules/org-netbeans-core.jar/org/netbeans/core/ui/Bundle.properties +++ b/branding/modules/org-netbeans-core.jar/org/netbeans/core/ui/Bundle.properties @@ -1,3 +1,3 @@ -LBL_Copyright=
Copyright © 2022 jMonkeyEngine.\n
Please visit http://jmonkeyengine.org for more information.
Icons sets :
Copyright © 2025 jMonkeyEngine.\n
Please visit http://jmonkeyengine.org for more information.
Icons sets :
Updates: jMonkeyEngine SDK is updated to version {0}
\n URL_ON_IMG=http://jmonkeyengine.org/ diff --git a/build.gradle b/build.gradle index 7942471ef..32c0b0154 100644 --- a/build.gradle +++ b/build.gradle @@ -14,11 +14,11 @@ if (!hasProperty('mainClass')) { } repositories { + mavenCentral() maven { url "https://jitpack.io" } maven { url "https://maven.google.com/" } - mavenCentral() } configurations { @@ -33,17 +33,18 @@ configurations.examplelibs { } dependencies { - - corelibs dep("com.github.xbuf:jme3_xbuf:0.9.1", false, false) corelibs dep("com.badlogicgames.gdx:gdx-ai:1.8.2", true, true) corelibs dep("javax.help:javahelp:2.0.05", false, false) corelibs dep("org.jmonkeyengine:jme3-core:$jmeVersion-$jmeVersionTag", true, true) corelibs dep("org.jmonkeyengine:jme3-desktop:$jmeVersion-$jmeVersionTag", true, true) + corelibs dep("org.jmonkeyengine:jme3-awt-dialogs:$jmeVersion-$jmeVersionTag", true, true) + corelibs dep("org.jmonkeyengine:jme3-plugins-json:$jmeVersion-$jmeVersionTag", true, true) + corelibs dep("org.jmonkeyengine:jme3-plugins-json-gson:$jmeVersion-$jmeVersionTag", true, true) corelibs dep("org.jmonkeyengine:jme3-lwjgl:$jmeVersion-$jmeVersionTag", true, true) corelibs dep("org.jmonkeyengine:jme3-effects:$jmeVersion-$jmeVersionTag", true, true) - corelibs dep("org.jmonkeyengine:jme3-blender:3.3.2-stable", false, false) // Pin Pointed until jme3-blender has a dedicated release or support is phased out. - optlibs dep("com.github.stephengold:Minie:6.0.0", false, false) // replacement for bullet-native + corelibs dep("com.github.stephengold:Minie:8.2.0", true, true) // replacement for bullet-native + corelibs dep("com.github.stephengold:Heart:9.1.0", true, true) // requirement for Minie corelibs dep(fileTree("lib"), false, false) corelibs dep("org.jmonkeyengine:jme3-jogg:$jmeVersion-$jmeVersionTag", true, true) @@ -52,13 +53,18 @@ dependencies { corelibs dep("org.jmonkeyengine:jme3-plugins:$jmeVersion-$jmeVersionTag", true, true) corelibs dep("org.jmonkeyengine:jme3-terrain:$jmeVersion-$jmeVersionTag", true, true) + optlibs dep("com.simsilica:lemur:1.16.0", true, true) + optlibs dep("com.simsilica:lemur-props:1.2.0", true, true) + optlibs dep("com.simsilica:sio2:1.8.0", true, true) + optlibs dep("com.simsilica:sim-math:1.6.0", true, true) + optlibs dep("com.simsilica:zay-es:1.5.0", true, true) + optlibs dep("org.jmonkeyengine:jme3-jbullet:$jmeVersion-$jmeVersionTag", true, true) optlibs dep("org.jmonkeyengine:jme3-android:$jmeVersion-$jmeVersionTag", true, true) optlibs dep("org.jmonkeyengine:jme3-ios:$jmeVersion-$jmeVersionTag", true, true) optlibs dep("org.jmonkeyengine:jme3-android-native:$jmeVersion-$jmeVersionTag", true, true) optlibs dep("org.jmonkeyengine:jme3-lwjgl3:$jmeVersion-$jmeVersionTag", true, true) - optlibs dep("com.github.stephengold:Heart:8.1.0", true, true) - optlibs dep("com.github.stephengold:Wes:0.7.2", true, true) + optlibs dep("com.github.stephengold:Wes:0.8.1", true, true) testdatalibs dep("org.jmonkeyengine:jme3-testdata:$jmeVersion-$jmeVersionTag", false, false) examplelibs dep("org.jmonkeyengine:jme3-examples:$jmeVersion-$jmeVersionTag", false, true) } @@ -120,7 +126,19 @@ task copyBaseLibs(dependsOn:configurations.corelibs) { from file into "jme3-core-baselibs/release/modules/ext/" } - }else if( !isSourceOrJavadoc(file.name)){ + } else if( file.name.contains("Minie") && !isSourceOrJavadoc(file.name)) { + // Special handling of Minie, since it doesn't follow the name convention + copy { + from file + into "jme3-core-baselibs/release/modules/ext/" + } + } else if( file.name.contains("Heart") && !isSourceOrJavadoc(file.name)) { + // Special handling of Minie, since it doesn't follow the name convention + copy { + from file + into "jme3-core-baselibs/release/modules/ext/" + } + } else if( !isSourceOrJavadoc(file.name)){ copy { from file into "jme3-core-libraries/release/modules/ext/" @@ -167,6 +185,16 @@ task createBaseXml(dependsOn: configurations.corelibs) { jmeJarFiles.add(file) } + } else if( file.name.contains("Minie") && !isSourceOrJavadoc(file.name)) { + // Special handling of Minie, since it doesn't follow the name convention + if(!jmeJarFiles.contains(file)) { + jmeJarFiles.add(file) + } + } else if( file.name.contains("Heart") && !isSourceOrJavadoc(file.name)) { + // Special handling of Minie, since it doesn't follow the name convention + if(!jmeJarFiles.contains(file)) { + jmeJarFiles.add(file) + } } else if(!isSourceOrJavadoc(file.name)) { //collect external jars externalJarFiles.add(file) @@ -179,7 +207,7 @@ task createBaseXml(dependsOn: configurations.corelibs) { jmeJarFiles.each{jarFile -> ZipFile file = new ZipFile(jarFile) file.entries().each { entry -> - if(entry.name.endsWith('.class')){ + if(!entry.name.startsWith('META-INF') && entry.name.endsWith('.class')){ // TODO: "/" works on windows? def pathPart = entry.name.substring(0, Math.max(0, entry.name.lastIndexOf('/'))) def classPath = pathPart.replace('/','.'); @@ -195,7 +223,7 @@ task createBaseXml(dependsOn: configurations.corelibs) { externalJarFiles.each{jarFile -> ZipFile file = new ZipFile(jarFile) file.entries().each { entry -> - if(entry.name.endsWith('.class')){ + if(!entry.name.startsWith('META-INF') && entry.name.endsWith('.class')){ // TODO: "/" works on windows? def pathPart = entry.name.substring(0, Math.max(0, entry.name.lastIndexOf('/'))) def classPath = pathPart.replace('/','.'); @@ -582,7 +610,7 @@ file('.').eachDir{ buildSdk.inputs.dir it } } -buildSdk.outputs.dir "build" +//buildSdk.outputs.dir "build" task run(dependsOn: buildSdk) { doLast { @@ -608,14 +636,14 @@ task cleanSdk() { task extractPlatformIndependent(type: Copy) { from zipTree('dist/jmonkeyplatform.zip') into "dist/temp/" - + exclude("jmonkeyplatform/etc/jmonkeyplatform.conf") } task patchPlatformIndependent(type: Copy, dependsOn: extractPlatformIndependent) { from zipTree('dist/jmonkeyplatform.zip') into "dist/temp/" - + include("jmonkeyplatform/etc/jmonkeyplatform.conf") filter { String line -> @@ -640,7 +668,7 @@ task fixPlatformIndependent(dependsOn: patchPlatformIndependent, type: Zip) { } wrapper { - gradleVersion = '7.5.1' + gradleVersion = '8.6' } //jar.dependsOn(buildSdk) diff --git a/build.xml b/build.xml index 348de2df0..1afd2bea0 100644 --- a/build.xml +++ b/build.xml @@ -37,9 +37,7 @@assets
directory.
-To create 3D models and scenes, you need a 3D Mesh Editor such as
-Tip: Learn how to create
-3D model editors are third-party products, so please consult their documentation for instructions how to use them. Here is an example workflow for Blender users: -
--To export your models as Ogre XML meshes with materials: -
-something.mesh.xml
goes with something.material
, plus (optionally) something.skeleton.xml
, and some JPG files.assets/Models/
directory. E.g. assets/Models/something/
.You can now use the jMonkeyEngine SDK to load and view models. You can create scenes from them and write code that loads them into your application. @@ -82,4 +35,4 @@
-This section discusses how to create and import models from Blender3D (2.62+, see bottom of page for Blender 2.49 and before) to jME3. Furthermore it explains how you can create various typical game-related assets like normal maps of high-poly models and baked lighting maps. -
- --For the managing of assets in general, be sure to read the Asset Pipeline Documentation. It contains vital information on how to manage your asset files. -
- --Game-compatible models are models that basically only consist of a mesh and UV-mapped textures, in some cases animations. All other material parameters or effects (like particles etc.) can not be expected to be transferred properly and probably would not translate to live rendering very well anyway. -
- --To successfully import a texture, the texture has to be UV-mapped to the model. Heres how to assign diffuse, normal and specular maps: -
--Its important to note that each used texture will create one separate geometry. So its best to either combine the UV maps or use a premade atlas with different texture types from the start and then map the uv coords of the models to the atlas instead of painting on the texture. This works best for large models like cities and space ships. -
- --Animations for jME3 have to be bone animations, simple object movement is supported by the blender importer, mesh deformation or other forms of animation are not supported. -
- --To create an animation from scratch do the following: -
--Sometimes you do not create the model yourself and often times models from the web are not really made for OpenGL live rendering or not completely compatible with the bone system in jME. -
- --To export an animated model in Blender make sure the following conditions are met: -
--You can use SkeletonDebugger to show the skeleton on your game in order to check if the mesh and the skeleton are loaded correctly: -
-final Material soldier2Mat = assetManager.loadMaterial("Materials/soldier2/soldier2.j3m"); - final Spatial soldier2 = assetManager.loadModel("Models/soldier2/soldier2.j3o"); - TangentBinormalGenerator.generate(soldier2); - soldier2.setMaterial(soldier2Mat); - - final Node soldier2Node = new Node("Soldier2 Node"); - - soldier2Node.attachChild(soldier2); - rootNode.attachChild(soldier2Node); - - final AnimControl control = soldier2.getControl(AnimControl.class); - control.addListener(this); - final AnimChanel channel = control.createChannel(); - - final SkeletonDebugger skeletonDebug = new SkeletonDebugger("skeleton", control.getSkeleton()); - final Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - mat.setColor("Color", ColorRGBA.Green); - mat.getAdditionalRenderState().setDepthTest(false); - skeletonDebug.setMaterial(mat); - soldier2Node.attachChild(skeletonDebug);-
-Also check out these videos and resources: -
--Models for live rendering should have a low polygon count. To increase the perceived detail of a model normal maps are commonly used in games. This tutorial will show how to create a normalmap from a highpoly version of your model that you can apply to a lowpoly version of the model in your game. -
- --
-
-
-Blender has its own normal colors standard. We need to fix the colors to prepare the normalmap for using it with the JME Lighting Material. -
- --To do this, go to the Blender Node Window -
--The goal of this tutorial is to explain briefly how to bake light map in blender with a separate set of texture coordinates and then export a model using this map in jME3. -
- --Once this is done, export your model with the ogre exporter (or import it directly via the blend importer), and turn it into J3o with the SDK. -
--The blend file, the ogre xml files and the textures can be found in the download section of the google code repo -
- -
-
-Follow the link below to a pdf tutorial by rhymez where I guide you to modelling a car and importing it to the jMonkeyengine correctly and edit it in the vehicle editor.Plus how to model a simple racing track.
-
-Follow the link below to a pdf tutorial by rhymez where I guide you on how you can optimize your models for faster rendering.
-
-There are several ways to create static images to use for a sky in your game. This will describe the concepts used in blender and create an ugly sky Check the links below for other ways and prettier skies.
-
-A sky box is a texture mapped cube, it can also, loosely, be called en EnvMap or a CubeMap. The camera is inside the cube and the clever thing that jME does is to draw the sky so it is always behind whatever else is in your scene. Imagine the monkey is the camera in the picture. -
--But a real sky is not a box around our heads, it is more like a sphere. So if we put any old image in the sky it will look strange and might even look like a box. This is not what we want. The trick is to distort the image so that it will look like a sphere even if it in fact is a picture pasted on a box. Luckily blender can do that tricky distortion for us. -
- --The screenshots are from Blender 2.63 but the equivalent operations have been in blender for years so with minor tweaks should work for almost any version. -
- --So let's get started -
-Environment Map
, that the Viewpoint Object
is set to the cube. The resolution is how large the resulting image will be. More pixels makes the sky look better but comes at the cost of texture memory. You'll have to trim the resolution to what works in your application.-
Add Spatial
and then select Skybox
.-If you want to do it from code, here is an example: -
-public void simpleInitApp() { - - Texture westTex = assetManager.loadTexture("Textures/west.png"); - Texture eastTex = assetManager.loadTexture("Textures/east.png"); - Texture northTex = assetManager.loadTexture("Textures/north.png"); - Texture southTex = assetManager.loadTexture("Textures/south.png"); - Texture upTex = assetManager.loadTexture("Textures/top.png"); - Texture downTex = assetManager.loadTexture("Textures/bottom.png"); - - final Vector3f normalScale = new Vector3f(-1, 1, 1); - Spatial skySpatial = SkyFactory.createSky( - assetManager, - westTex, - eastTex, - northTex, - southTex, - upTex, - downTex, - normalScale); - rootNode.attachChild(skySpatial); -}- -
-
-The jMonkeyEngine SDK supports .blend files and can convert them to jMonkeyEngine's .j3o format. This means you can use Blender to convert, for example, a 3dMax file to .j3o format. -
- --I'm using the blender 2.59 at this tutorial, but if you blender 2.49b, no problem ;). -After you saved your .3ds file in 3dmax, open the blender, delete the default cube, -and import your .3ds file via File—→Import—–>3D Studio. -
- -
-
-
-Now save your .blend file so you can load it into the jMonkeyEngine SDK. -
- -
-
-
-Click on Import Model button and then click on Open Model button to open the .blend file. Click next, select the checkbox to import a copy from .blend file, and click finish. -
- -
-
-
-As you can see, the .blend model was automatically converted to .j3o binary format. Now, you are able to edit it in SceneComposer ;D. -
- -
-
-
-Importing models to any game engine is as important as using them. The quality of the models depends on the abilities of the people who create it and on the tools they use. -Blender is one of the best free tools for creating 3D enviroments. Its high amount of features attract many model designers. -So far jMonkeyEngine used Ogre mesh files to import 3D data. These files were created by the python script that exported data from blender. -It was important to have always the lates version of the script that is compatible with the version of blender and to use it before importing data to jme. -Now we have an opportunity to simplify the import process by loading data directly from blender binary files: *.blend. -
- --
-To use it in your game or the SDK you should follow the standard asset loading instructions. -By default a BlenderModelLoader is registered with your assetManager to load blend files. This means you can load and convert .blend model files to .j3o format, just like any other supported model format. -
- --You have two loaders available. -
-public static class LoadingResults extends Spatial { - /** Bitwise mask of features that are to be loaded. */ - private final int featuresToLoad; - /** The scenes from the file. */ - private List<Node> scenes; - /** Objects from all scenes. */ - private List<Node> objects; - /** Materials from all objects. */ - private List<Material> materials; - /** Textures from all objects. */ - private List<Texture> textures; - /** Animations of all objects. */ - private List<AnimData> animations; - /** All cameras from the file. */ - private List<Camera> cameras; - /** All lights from the file. */ - private List<Light> lights; - /** Access Methods goes here. */ -}-
-To register the model do the following: -
-assetManager.registerLoader(BlenderLoader.class, "blend");- -
-or -
-assetManager.registerLoader(BlenderModelLoader.class, "blend");-
-You can use com.jme3.asset.BlenderKey for that. -The simplest use is to create the key with the asset's name. -It has many differens settings descibing the blender file more precisely, but all of them have default values so you do not need to worry about it at the beggining. -You can use ModelKey as well. This will give the same result as using default BlenderKey. -
- --BlenderLoader (as well as BlenderModelLoader) is looking for all kinds of known assets to load. -It's primary use is of course to load the models withon the files. -Each blender object is imported as scene Node. The node should have applied textures and materials as well. -If you define animations in your BlenderKey the animations will as well be imported and attached to the model. -
- --Here is the list of how blender features are mapped into jme. -
-Blender | jMonkeyEngine3 | Note | -
---|---|---|
Scene | Node | - |
Object | Node | - |
Mesh | List<Geometry> | One mesh can have several materials so that is why a list is needed here. | -
Lamp | Light | - |
Camera | Camera | - |
Material | Material | - |
Texture | Texture | - |
Curve | Node | Node with Curve as its mesh | -
Surface | Node | The surface is transformed to the proper mesh | -
-Using BlenderLoader can allow you to use blend file as your local assets repository. -You can store your textures, materials or meshes there and simply import it when needed. -Currently blender 2.49 and 2.5+ are supported (only the stable versions). -Probably versions before 2.49 will work pretty well too, but I never checked that :) -
- --I know that the current version of loader is not yet fully functional, but belive me – Blender is a very large issue ;) -Hope I will meet your expectations. -
- --Be mindful of the result model vertices amount. The best results are achieved when the model is smooth and has no texture. Then the vertex amount is equal to the vertex amount in blender. If the model is not smooth or has a generated texture applied then the amount of vertices is 3 times larger than mesh's triangles amount. If a 2d texture is applied with UV mapping then the vertex count will vary depending on how much the UV map is fragmented. -
- --When using polygon meshes in blender 2.5 and newer, better add and apply the triangulation modifier (if available in your version) or save the file with convertion from polygons to triangles. -Even though the importer supports loading of polygons as the mesh faces, if your face isn't convex, the results might contain errors. -
- --Not all modifiers are supported. If your model has modifiers and looks not the way you want in the jme scene - try to apply them and load again. -
- --Cheers, -Marcin Roguski (Kaelthas) -
- --P.S. -This text might be edited in a meantime if I forgot about something ;) -
--See also: -
-A production-quality release of JMonkeyEngine with the following noteworthy changes relative to v3.5.2-stable:
+Potential breaking changes:
+New features:
+Bugs and defects addressed:
+worldSpace
flag equals to true) by @Ali-RS in #1889General improvements:
+com.jme3.util
by @Scrappers-glitch in #1826A production-quality JMonkeyEngine 3.6 patch release with the following noteworthy changes relative to 3.6.0-stable:
+WaterFilter
(issue #2007, PRs #2008 and #2036)Spatial
assertions (issue #1992, PR #1993)PrimitiveAllocator
by default on Android (PR #2029)ShaderNodeDefinition
(issue #2034, PR #2035)A production-quality JMonkeyEngine 3.7.0 stable release with the following noteworthy changes relative to 3.6.1-stable:
+A production-quality JMonkeyEngine 3.8.0 stable release with the following noteworthy changes relative to 3.7.0-stable:
+toString()
method to return the label, so that
+ * this enum will display nicely in a jComboBox.
*
- * @return the Gradle artifact string.
+ * @return label
as a String
*/
- public String getArtifact() {
- return artifact;
+ @Override
+ public String toString() {
+ return label;
}
- /**
- * Is this a Core jMonkeyEngine library?
- *
- * @return true if this is a core jMonkeyEngine library.
- */
+ @Override
+ public String getGroupId() {
+ return isCoreJmeLibrary ? JME_GROUP_ID : groupId;
+ }
+
+ @Override
+ public String getArtifactId() {
+ return artifactId;
+ }
+
+ @Override
public boolean getIsCoreJmeLibrary() {
return isCoreJmeLibrary;
}
- /**
- * Override the toString()
method to return the label, so that
- * this enum will display nicely in a jComboBox.
- *
- * @return label
as a String
- */
@Override
- public String toString() {
- return label;
+ public VersionInfo getVersionInfo() {
+ return defaultVersion;
}
}
diff --git a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/Bundle.properties b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/Bundle.properties
index a292da8ac..a6eee1ba4 100644
--- a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/Bundle.properties
+++ b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/Bundle.properties
@@ -5,7 +5,8 @@ additionalLibrary.jme3-vr.description=Core jMonkeyEngine library providing Virtu
additionalLibrary.heart.description=The Heart Library provides an assortment of useful classes and assets to augment jMonkeyEngine.
additionalLibrary.particlemonkey.description=Particle Monkey is a more modern particle system with better artistic controls.
additionalLibrary.shaderblowex.description=Extended filters library for JMonkey Game Engine.
-additionalLibrary.sio2.description=A base library of useful utility code for JME-based games. \
+additionalLibrary.sio2.description=A base library of useful utility code for JME-based games.
+additionalLibrary.wes.description=An animation editing and retargeting library for jMonkeyEngine. \
Includes game system management infrastructure, useful base app states, an event bus, and useful Zay-ES utilities. \
This is a useful base library for any JME game.
additionalLibrary.zayes.description=Zay-ES (pronounced like Doctor Zaius from Planet of the Apes) is a high-performance \
diff --git a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/CachedOptionsContainer.java b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/CachedOptionsContainer.java
new file mode 100644
index 000000000..95518e1aa
--- /dev/null
+++ b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/CachedOptionsContainer.java
@@ -0,0 +1,336 @@
+/*
+ * Copyright (c) 2009-2023 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.jme3.gde.templates.gradledesktop.options;
+
+import com.jme3.gde.templates.utils.mavensearch.MavenApiVersionChecker;
+import com.jme3.gde.templates.utils.mavensearch.MavenVersionChecker;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import static java.util.Map.entry;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Singleton that contains all the options. Tries to go online to get all the
+ * latest options
+ */
+public class CachedOptionsContainer {
+
+ private static CachedOptionsContainer instance;
+
+ private static final Logger logger = Logger.getLogger(CachedOptionsContainer.class.getName());
+
+ private static final MaptoString()
method to return the label, so that
+ * this enum will display nicely in a jComboBox.
*
- * @return the Gradle artifact string.
+ * @return label
as a String
*/
- public String getArtifact() {
- return artifact;
+ @Override
+ public String toString() {
+ return label;
}
- /**
- * Is this a Core jMonkeyEngine library?
- *
- * @return true if this is a core jMonkeyEngine library.
- */
+ @Override
+ public String getGroupId() {
+ return isCoreJmeLibrary ? JME_GROUP_ID : groupId;
+ }
+
+ @Override
+ public String getArtifactId() {
+ return artifactId;
+ }
+
+ @Override
public boolean getIsCoreJmeLibrary() {
return isCoreJmeLibrary;
}
- /**
- * Override the toString()
method to return the label, so that
- * this enum will display nicely in a jComboBox.
- *
- * @return label
as a String
- */
@Override
- public String toString() {
- return label;
+ public VersionInfo getVersionInfo() {
+ return defaultVersion;
}
}
diff --git a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/JMEVersion.java b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/JMEVersion.java
index b30d85f9e..c6c113bcd 100644
--- a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/JMEVersion.java
+++ b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/JMEVersion.java
@@ -54,8 +54,16 @@
*
* @author peedeeboy
*/
-public enum JMEVersion {
+public enum JMEVersion implements LibraryVersion {
+ JME_3_8_0("3.8.0-stable",
+ "/com/jme3/gde/templates/files/patchnotes/380-stable.html"),
+ JME_3_7_0("3.7.0-stable",
+ "/com/jme3/gde/templates/files/patchnotes/370-stable.html"),
+ JME_3_6_1("3.6.1-stable",
+ "/com/jme3/gde/templates/files/patchnotes/361-stable.html"),
+ JME_3_6_0("3.6.0-stable",
+ "/com/jme3/gde/templates/files/patchnotes/360-stable.html"),
JME_3_5_2("3.5.2-stable",
"/com/jme3/gde/templates/files/patchnotes/352-stable.html"),
JME_3_5_1("3.5.1-stable",
@@ -71,6 +79,17 @@ public enum JMEVersion {
JME_3_3_0("3.3.0-stable",
"/com/jme3/gde/templates/files/patchnotes/330-stable.html");
+ /**
+ * Default artifact ID for jME that we use to check i.e. versions from
+ */
+ public static final String JME_ARTIFACT_ID = "jme3-core";
+
+ /**
+ * Patch notes for versions that are not hard coded like versions in this
+ * class
+ */
+ public static final String DEFAULT_PATCH_NOTES_PATH = "/com/jme3/gde/templates/files/patchnotes/default.html";
+
/**
* Name of the jMonkeyEngine version. This should match the Maven/Gradle
* version.
@@ -82,6 +101,8 @@ public enum JMEVersion {
*/
private final String patchNotesPath;
+ private final VersionInfo versionInfo;
+
/**
* Private constructor to create an instance of this enum.
*
@@ -92,6 +113,7 @@ public enum JMEVersion {
JMEVersion(String label, String patchNotesPath) {
this.label = label;
this.patchNotesPath = patchNotesPath;
+ this.versionInfo = new SemanticPlusTagVersionInfo(label);
}
/**
@@ -103,12 +125,7 @@ public String getLabel() {
return label;
}
- /**
- * Get the path to the .html file containing the Patch Notes for this
- * jMonkeyEngine version.
- *
- * @return the path to the .html file containing the Patch Notes
- */
+ @Override
public String getPatchNotesPath() {
return patchNotesPath;
}
@@ -123,4 +140,19 @@ public String getPatchNotesPath() {
public String toString() {
return label;
}
+
+ @Override
+ public String getGroupId() {
+ return MavenArtifact.JME_GROUP_ID;
+ }
+
+ @Override
+ public String getArtifactId() {
+ return "core";
+ }
+
+ @Override
+ public VersionInfo getVersionInfo() {
+ return versionInfo;
+ }
}
diff --git a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/LWJGLVersion.java b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/LWJGLLibrary.java
similarity index 73%
rename from jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/LWJGLVersion.java
rename to jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/LWJGLLibrary.java
index c27b549c8..42217d56b 100644
--- a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/LWJGLVersion.java
+++ b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/LWJGLLibrary.java
@@ -59,12 +59,12 @@
*
* @author peedeeboy
*/
-public enum LWJGLVersion {
+public enum LWJGLLibrary implements TemplateLibrary {
- LWJGL_3("LWJGL 3.x", NbBundle.getMessage(LWJGLVersion.class,
- "lwjgl.lwjgl3.description"), "org.jmonkeyengine:jme3-lwjgl3"),
- LWJGL_2("LWJGL 2.x", NbBundle.getMessage(LWJGLVersion.class,
- "lwjgl.lwjgl2.description"), "org.jmonkeyengine:jme3-lwjgl");
+ LWJGL_3("LWJGL 3.x", NbBundle.getMessage(LWJGLLibrary.class,
+ "lwjgl.lwjgl3.description"), "jme3-lwjgl3"),
+ LWJGL_2("LWJGL 2.x", NbBundle.getMessage(LWJGLLibrary.class,
+ "lwjgl.lwjgl2.description"), "jme3-lwjgl");
/**
* The name of the LWJGL library. This will be displayed in the jComboBox in
@@ -77,51 +77,38 @@ public enum LWJGLVersion {
*/
private final String description;
/**
- * Gradle artifact string. This should exclude the jMonkeyEngine version, as
- * this will be added by the template.
+ * Maven artifact ID
*/
- private final String artifact;
+ private final String artifactId;
+ /**
/**
* Private constructor to create an instance of this enum.
*
- * @param label The name of the LWJGL library.
- * @param description Long description of the LWJGL version.
- * @param artifact Gradle artifact string.
+ * @param label The name of the library.
+ * @param description Long description of the library.
+ * @param groupId Maven group ID.
+ * @param artifactId Maven artifact ID.
+ * @param defaultVersion Default version is used if no version info is found
+ * from Maven
*/
- LWJGLVersion(String label, String description, String artifact) {
+ LWJGLLibrary(String label, String description,
+ String artifactId) {
this.label = label;
this.description = description;
- this.artifact = artifact;
+ this.artifactId = artifactId;
}
- /**
- * Get the label for this LWJGL version.
- *
- * @return the label for this LWJGL version.
- */
+ @Override
public String getLabel() {
return label;
}
- /**
- * Get the long description for this LWJGL version.
- *
- * @return the long description for this LWJGL version.
- */
+ @Override
public String getDescription() {
return description;
}
- /**
- * Get the Gradle artifact string.
- *
- * @return the Gradle artifact string.
- */
- public String getArtifact() {
- return artifact;
- }
-
/**
* Override the toString()
method to return the label, so that
* this enum will display nicely in a jComboBox.
@@ -132,4 +119,24 @@ public String getArtifact() {
public String toString() {
return this.label;
}
+
+ @Override
+ public boolean getIsCoreJmeLibrary() {
+ return true;
+ }
+
+ @Override
+ public String getGroupId() {
+ return JME_GROUP_ID;
+ }
+
+ @Override
+ public String getArtifactId() {
+ return artifactId;
+ }
+
+ @Override
+ public VersionInfo getVersionInfo() {
+ return null;
+ }
}
diff --git a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/LibraryVersion.java b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/LibraryVersion.java
new file mode 100644
index 000000000..740ed74a3
--- /dev/null
+++ b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/LibraryVersion.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2009-2023 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.jme3.gde.templates.gradledesktop.options;
+
+/**
+ * Represents a Maven library version info (with patch notes)
+ */
+public interface LibraryVersion extends MavenArtifact {
+
+ /**
+ * Get the path to the .html file containing the Patch Notes for this
+ * jMonkeyEngine version.
+ *
+ * @return the path to the .html file containing the Patch Notes
+ */
+ String getPatchNotesPath();
+
+}
diff --git a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/MavenArtifact.java b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/MavenArtifact.java
new file mode 100644
index 000000000..aa3f16196
--- /dev/null
+++ b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/MavenArtifact.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2009-2023 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.jme3.gde.templates.gradledesktop.options;
+
+/**
+ * Represents Maven artifact
+ */
+public interface MavenArtifact {
+
+ String JME_GROUP_ID = "org.jmonkeyengine";
+
+ /**
+ * Get the Maven group ID
+ *
+ * @return group ID
+ */
+ String getGroupId();
+
+ /**
+ * Get the Maven artifact ID
+ *
+ * @return artifact ID
+ */
+ String getArtifactId();
+
+ /**
+ * Get the artifact version info
+ *
+ * @return version info
+ */
+ VersionInfo getVersionInfo();
+
+}
diff --git a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/NetworkingLibrary.java b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/NetworkingLibrary.java
index cdef6825e..e26e2d89a 100644
--- a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/NetworkingLibrary.java
+++ b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/NetworkingLibrary.java
@@ -63,19 +63,23 @@
*
* @author peedeeboy
*/
-public enum NetworkingLibrary {
+public enum NetworkingLibrary implements TemplateLibrary {
NONE("", NbBundle.getMessage(NetworkingLibrary.class,
- "networkinglibrary.none.description"), "", false),
+ "networkinglibrary.none.description"), null, null,
+ null, false),
SPIDERMONKEY("SpiderMonkey", NbBundle.getMessage(NetworkingLibrary.class,
"networkinglibrary.spidermonkey.description"),
- "org.jmonkeyengine:jme3-networking", true),
+ null, "jme3-networking",
+ null, true),
MONKEYNETTY("MonkeyNetty", NbBundle.getMessage(NetworkingLibrary.class,
"networkinglibrary.monkeynetty.description"),
- "io.tlf.monkeynetty:monkey-netty:0.1.1", false),
+ "com.github.tlf30", "monkey-netty",
+ "0.1.1", false),
SIMETHEREAL("SimEthereal", NbBundle.getMessage(NetworkingLibrary.class,
"networkinglibrary.simethereal.description"),
- "com.simsilica:sim-ethereal:1.7.0", false);
+ "com.simsilica", "sim-ethereal",
+ "1.8.0", false);
/**
* The name of the library. This will be displayed in the jComboBox in the
@@ -88,13 +92,17 @@ public enum NetworkingLibrary {
*/
private final String description;
/**
- * Gradle artifact string. If this is not a core JME
- * library, then the artifact string should include the version number. If
- * the library is a core JME library, then the version
- * should be omitted, as they jMonkeyEngine version will be appended
- * automatically by the template.
+ * Maven artifact ID
*/
- private final String artifact;
+ private final String artifactId;
+ /**
+ * Maven group ID
+ */
+ private final String groupId;
+ /**
+ * Default artifact version to be used
+ */
+ private final VersionInfo defaultVersion;
/**
* Is this library a core jMonkeyEngine library? True if the library is a
* part of jMonkeyengine, false if it is 3rd party.
@@ -106,61 +114,60 @@ public enum NetworkingLibrary {
*
* @param label The name of the library.
* @param description Long description of the library.
- * @param artifact Gradle artifact string.
+ * @param groupId Maven group ID.
+ * @param artifactId Maven artifact ID.
+ * @param defaultVersion Default version is used if no version info is found
+ * from Maven
* @param isCoreJmeLibrary Is this library a core jMonkeyEngine library?
*/
- NetworkingLibrary(String label, String description, String artifact,
- boolean isCoreJmeLibrary) {
+ NetworkingLibrary(String label, String description, String groupId,
+ String artifactId, String defaultVersion, boolean isCoreJmeLibrary) {
this.label = label;
this.description = description;
- this.artifact = artifact;
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.defaultVersion = defaultVersion != null ? SemanticPlusTagVersionInfo.of(defaultVersion) : null;
this.isCoreJmeLibrary = isCoreJmeLibrary;
}
- /**
- * Get the label for this Networking Library.
- *
- * @return the label for this Networking Library.
- */
+ @Override
public String getLabel() {
return label;
}
- /**
- * Get the long description for this Networking Library.
- *
- * @return the long description for this Networking Library.
- */
+ @Override
public String getDescription() {
return description;
}
/**
- * Get the Gradle artifact string.
+ * Override the toString()
method to return the label, so that
+ * this enum will display nicely in a jComboBox.
*
- * @return the Gradle artifact string.
+ * @return label
as a String
*/
- public String getArtifact() {
- return artifact;
+ @Override
+ public String toString() {
+ return this.label;
}
- /**
- * Is this a Core jMonkeyEngine library?
- *
- * @return true if this is a core jMonkeyEngine library
- */
+ @Override
+ public String getGroupId() {
+ return isCoreJmeLibrary ? JME_GROUP_ID : groupId;
+ }
+
+ @Override
+ public String getArtifactId() {
+ return artifactId;
+ }
+
+ @Override
public boolean getIsCoreJmeLibrary() {
return isCoreJmeLibrary;
}
- /**
- * Override the toString()
method to return the label, so that
- * this enum will display nicely in a jComboBox.
- *
- * @return label
as a String
- */
@Override
- public String toString() {
- return this.label;
+ public VersionInfo getVersionInfo() {
+ return defaultVersion;
}
}
diff --git a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/PhysicsLibrary.java b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/PhysicsLibrary.java
index eb8970b7c..914f16133 100644
--- a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/PhysicsLibrary.java
+++ b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/PhysicsLibrary.java
@@ -63,16 +63,19 @@
*
* @author peedeeboy
*/
-public enum PhysicsLibrary {
+public enum PhysicsLibrary implements TemplateLibrary {
NONE("", NbBundle.getMessage(GUILibrary.class,
- "physicslibrary.none.description"), "", false),
+ "physicslibrary.none.description"), null, null,
+ null, false),
JBULLET("jBullet", NbBundle.getMessage(GUILibrary.class,
"physicslibrary.jbullet.description"),
- "org.jmonkeyengine:jme3-jbullet", true),
+ null, "jme3-jbullet",
+ null, true),
MINIE("Minie", NbBundle.getMessage(PhysicsLibrary.class,
"physicslibrary.minie.description"),
- "com.github.stephengold:Minie:5.0.0", false);
+ "com.github.stephengold", "Minie",
+ "8.2.0", false);
/**
* The name of the library. This will be displayed in the jComboBox in the
@@ -85,13 +88,17 @@ public enum PhysicsLibrary {
*/
private final String description;
/**
- * Gradle artifact string. If this is not a core JME
- * library, then the artifact string should include the version number. If
- * the library is a core JME library, then the version
- * should be omitted, as they jMonkeyEngine version will be appended
- * automatically by the template.
+ * Maven artifact ID
*/
- private final String artifact;
+ private final String artifactId;
+ /**
+ * Maven group ID
+ */
+ private final String groupId;
+ /**
+ * Default artifact version to be used
+ */
+ private final VersionInfo defaultVersion;
/**
* Is this library a core jMonkeyEngine library? True if the library is a
* part of jMonkeyengine, false if it is 3rd party.
@@ -103,61 +110,60 @@ public enum PhysicsLibrary {
*
* @param label The name of the library.
* @param description Long description of the library.
- * @param artifact Gradle artifact string.
+ * @param groupId Maven group ID.
+ * @param artifactId Maven artifact ID.
+ * @param defaultVersion Default version is used if no version info is found
+ * from Maven
* @param isCoreJmeLibrary Is this library a core jMonkeyEngine library?
*/
- PhysicsLibrary(String label, String description, String artifact,
- boolean isCoreJmeLibrary) {
+ PhysicsLibrary(String label, String description, String groupId,
+ String artifactId, String defaultVersion, boolean isCoreJmeLibrary) {
this.label = label;
this.description = description;
- this.artifact = artifact;
+ this.groupId = groupId;
+ this.artifactId = artifactId;
+ this.defaultVersion = defaultVersion != null ? SemanticPlusTagVersionInfo.of(defaultVersion) : null;
this.isCoreJmeLibrary = isCoreJmeLibrary;
}
- /**
- * Get the label for this Physics Library.
- *
- * @return the label for this Physics Library.
- */
+ @Override
public String getLabel() {
return label;
}
- /**
- * Get the long description for this Physics Library.
- *
- * @return the long description for this Physics Library.
- */
+ @Override
public String getDescription() {
return description;
}
/**
- * Get the Gradle artifact string.
+ * Override the toString()
method to return the label, so that
+ * this enum will display nicely in a jComboBox.
*
- * @return the Gradle artifact string.
+ * @return label
as a String
*/
- public String getArtifact() {
- return artifact;
+ @Override
+ public String toString() {
+ return this.label;
}
- /**
- * Is this a Core jMonkeyEngine library?
- *
- * @return true if this is a core jMonkeyEngine library
- */
+ @Override
+ public String getGroupId() {
+ return isCoreJmeLibrary ? JME_GROUP_ID : groupId;
+ }
+
+ @Override
+ public String getArtifactId() {
+ return artifactId;
+ }
+
+ @Override
public boolean getIsCoreJmeLibrary() {
return isCoreJmeLibrary;
}
- /**
- * Override the toString()
method to return the label, so that
- * this enum will display nicely in a jComboBox.
- *
- * @return label
as a String
- */
@Override
- public String toString() {
- return this.label;
+ public VersionInfo getVersionInfo() {
+ return defaultVersion;
}
}
diff --git a/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/SemanticPlusTagVersionInfo.java b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/SemanticPlusTagVersionInfo.java
new file mode 100644
index 000000000..94e853941
--- /dev/null
+++ b/jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/SemanticPlusTagVersionInfo.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2009-2023 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.jme3.gde.templates.gradledesktop.options;
+
+import java.text.Collator;
+import java.util.Objects;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Versioning scheme like x.x.x with or without a tag/type. Tries to parse
+ * versions as broadly and leniently as possible
+ */
+public final class SemanticPlusTagVersionInfo implements VersionInfo {
+
+ private static final Logger logger = Logger.getLogger(SemanticPlusTagVersionInfo.class.getName());
+
+ private static final Pattern VERSION_PATTERN = Pattern.compile("(?null
if not exists
+ */
+ Integer getMajor();
+
+ /**
+ * Get minor version number
+ *
+ * @return minor version number or null
if not exists
+ */
+ Integer getMinor();
+
+ /**
+ * Get release version number
+ *
+ * @return release version number or null
if not exists
+ */
+ Integer getRelease();
+
+ /**
+ * Get type version type identifier
+ *
+ * @return version type identifier or null
if not exists
+ */
+ String getType();
+
+ /**
+ * Get the original or complete version string presentation
+ *
+ * @return version string presentation
+ */
+ String getVersionString();
+
+}
diff --git a/jme3-templates/src/com/jme3/gde/templates/jaimesascent/Bundle.properties b/jme3-templates/src/com/jme3/gde/templates/jaimesascent/Bundle.properties
new file mode 100644
index 000000000..53cf704a2
--- /dev/null
+++ b/jme3-templates/src/com/jme3/gde/templates/jaimesascent/Bundle.properties
@@ -0,0 +1,16 @@
+LBL_DownloadProjectStep=Download project
+LBL_CreateProjectStep=Name and Location
+JaimesAscentPanelVisual.browseButton.text=Br&owse...
+JaimesAscentPanelVisual.createdFolderLabel.text=Project &Folder:
+JaimesAscentPanelVisual.projectLocationLabel.text=Project &Location:
+JaimesAscentDownloadPanelVisual.downloadButton.text=Download project
+JaimesAscentDownloadPanelVisual.downloadButton.actionCommand=DOWNLOAD
+JaimesAscentPanelVisual.projectNameLabel.text=Project &Name:
+JaimesAscentPanelVisual.browseButton.text=Browse
+JaimesAscentPanelVisual.browseButton.actionCommand=BROWSE
+JaimesAscentDownloadPanelVisual.jTextArea1.text=Pressing the button below will download the project from Github, to a temporary location from which it will be installed in the next step\n
+JaimesAscentDownloadPanelVisual.statusField.text=
+JaimesAscentDownloadPanelVisual.downloading=Downloading... Please wait
+JaimesAscentDownloadPanelVisual.downloadSuccess=Download complete. Press 'next' to proceed.
+JaimesAscentDownloadPanelVisual.downloadFailed=Download failed.
+JaimesAscentDownloadPanelVisual.jLabel1.text=
diff --git a/jme3-templates/src/com/jme3/gde/templates/jaimesascent/JaimesAscentDescription.html b/jme3-templates/src/com/jme3/gde/templates/jaimesascent/JaimesAscentDescription.html
new file mode 100644
index 000000000..bd44c9555
--- /dev/null
+++ b/jme3-templates/src/com/jme3/gde/templates/jaimesascent/JaimesAscentDescription.html
@@ -0,0 +1,13 @@
+
+
+
+