瀏覽代碼

Merge pull request #7 from jMonkeyEngine/master

Update fork PR
joliver82 5 年之前
父節點
當前提交
9d8cbfa576
共有 100 個文件被更改,包括 627 次插入600 次删除
  1. 18 14
      .github/workflows/main.yml
  2. 3 0
      README.md
  3. 21 19
      build.gradle
  4. 7 3
      gradle.properties
  5. 二進制
      gradle/wrapper/gradle-wrapper.jar
  6. 5 5
      gradle/wrapper/gradle-wrapper.properties
  7. 19 3
      gradlew
  8. 17 1
      gradlew.bat
  9. 1 1
      jme3-android-examples/src/main/java/org/jmonkeyengine/jme3androidexamples/MainActivity.java
  10. 1 1
      jme3-android-native/decode.gradle
  11. 2 2
      jme3-android-native/openalsoft.gradle
  12. 8 0
      jme3-android/src/main/java/com/jme3/app/AndroidHarness.java
  13. 3 3
      jme3-android/src/main/java/com/jme3/app/AndroidHarnessFragment.java
  14. 3 1
      jme3-android/src/main/java/com/jme3/app/DefaultAndroidProfiler.java
  15. 2 2
      jme3-android/src/main/java/com/jme3/app/state/MjpegFileWriter.java
  16. 17 2
      jme3-android/src/main/java/com/jme3/app/state/VideoRecorderAppState.java
  17. 1 0
      jme3-android/src/main/java/com/jme3/asset/plugins/AndroidLocator.java
  18. 20 0
      jme3-android/src/main/java/com/jme3/audio/android/AndroidAL.java
  19. 8 0
      jme3-android/src/main/java/com/jme3/audio/android/AndroidALC.java
  20. 11 0
      jme3-android/src/main/java/com/jme3/audio/android/AndroidEFX.java
  21. 1 0
      jme3-android/src/main/java/com/jme3/audio/plugins/NativeVorbisLoader.java
  22. 2 2
      jme3-android/src/main/java/com/jme3/input/android/AndroidSensorJoyInput.java
  23. 3 3
      jme3-android/src/main/java/com/jme3/input/android/AndroidTouchInput.java
  24. 2 2
      jme3-android/src/main/java/com/jme3/input/android/TouchEventPool.java
  25. 113 1
      jme3-android/src/main/java/com/jme3/renderer/android/AndroidGL.java
  26. 1 0
      jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java
  27. 6 2
      jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java
  28. 2 1
      jme3-android/src/main/java/com/jme3/texture/plugins/AndroidBufferImageLoader.java
  29. 1 0
      jme3-android/src/main/java/com/jme3/texture/plugins/AndroidNativeImageLoader.java
  30. 4 0
      jme3-android/src/main/java/com/jme3/util/RingBuffer.java
  31. 2 2
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/file/Structure.java
  32. 9 1
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/materials/MaterialHelper.java
  33. 3 1
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/math/DQuaternion.java
  34. 3 1
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/math/DTransform.java
  35. 3 1
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/math/Vector3d.java
  36. 1 1
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/meshes/MeshBuffers.java
  37. 1 0
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/GeneratedTexture.java
  38. 2 0
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/TriangulatedTexture.java
  39. 1 0
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/blending/AbstractTextureBlender.java
  40. 1 0
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/blending/TextureBlenderLuminance.java
  41. 34 2
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/NoiseGenerator.java
  42. 8 1
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/TextureGeneratorBlend.java
  43. 0 4
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/TextureGeneratorFactory.java
  44. 11 1
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/TextureGeneratorMagic.java
  45. 0 137
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/TextureGeneratorMarble.java
  46. 0 206
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/TextureGeneratorWood.java
  47. 4 0
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/io/AWTPixelInputOutput.java
  48. 4 0
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/io/DDSPixelInputOutput.java
  49. 4 0
      jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/io/LuminancePixelInputOutput.java
  50. 6 1
      jme3-bullet/src/common/java/com/jme3/bullet/BulletAppState.java
  51. 1 1
      jme3-bullet/src/common/java/com/jme3/bullet/animation/BoneLink.java
  52. 1 1
      jme3-bullet/src/common/java/com/jme3/bullet/animation/PhysicsLink.java
  53. 1 1
      jme3-bullet/src/common/java/com/jme3/bullet/animation/TorsoLink.java
  54. 4 2
      jme3-bullet/src/common/java/com/jme3/bullet/collision/shapes/infos/ChildCollisionShape.java
  55. 7 1
      jme3-bullet/src/common/java/com/jme3/bullet/control/AbstractPhysicsControl.java
  56. 4 2
      jme3-bullet/src/common/java/com/jme3/bullet/control/BetterCharacterControl.java
  57. 7 1
      jme3-bullet/src/common/java/com/jme3/bullet/control/CharacterControl.java
  58. 8 2
      jme3-bullet/src/common/java/com/jme3/bullet/control/GhostControl.java
  59. 6 5
      jme3-bullet/src/common/java/com/jme3/bullet/control/KinematicRagdollControl.java
  60. 8 2
      jme3-bullet/src/common/java/com/jme3/bullet/control/RigidBodyControl.java
  61. 9 2
      jme3-bullet/src/common/java/com/jme3/bullet/control/VehicleControl.java
  62. 2 2
      jme3-bullet/src/common/java/com/jme3/bullet/util/CollisionShapeFactory.java
  63. 4 4
      jme3-bullet/src/main/java/com/jme3/bullet/PhysicsSpace.java
  64. 4 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/BoxCollisionShape.java
  65. 4 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CapsuleCollisionShape.java
  66. 2 1
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CollisionShape.java
  67. 3 1
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CompoundCollisionShape.java
  68. 4 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/ConeCollisionShape.java
  69. 4 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CylinderCollisionShape.java
  70. 4 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java
  71. 4 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java
  72. 2 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
  73. 2 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java
  74. 4 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/PlaneCollisionShape.java
  75. 4 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SimplexCollisionShape.java
  76. 4 2
      jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SphereCollisionShape.java
  77. 2 2
      jme3-bullet/src/main/java/com/jme3/bullet/joints/ConeJoint.java
  78. 4 2
      jme3-bullet/src/main/java/com/jme3/bullet/joints/HingeJoint.java
  79. 6 4
      jme3-bullet/src/main/java/com/jme3/bullet/joints/PhysicsJoint.java
  80. 2 2
      jme3-bullet/src/main/java/com/jme3/bullet/joints/Point2PointJoint.java
  81. 2 2
      jme3-bullet/src/main/java/com/jme3/bullet/joints/SixDofJoint.java
  82. 2 2
      jme3-bullet/src/main/java/com/jme3/bullet/joints/SliderJoint.java
  83. 1 1
      jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsCharacter.java
  84. 2 2
      jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsGhostObject.java
  85. 3 2
      jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsRigidBody.java
  86. 2 2
      jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsVehicle.java
  87. 2 2
      jme3-bullet/src/main/java/com/jme3/bullet/objects/VehicleWheel.java
  88. 1 1
      jme3-core/src/main/java/com/jme3/anim/AnimClip.java
  89. 1 1
      jme3-core/src/main/java/com/jme3/anim/Armature.java
  90. 2 0
      jme3-core/src/main/java/com/jme3/anim/Joint.java
  91. 1 0
      jme3-core/src/main/java/com/jme3/anim/MatrixJointModelTransform.java
  92. 3 3
      jme3-core/src/main/java/com/jme3/anim/MorphTrack.java
  93. 1 0
      jme3-core/src/main/java/com/jme3/anim/SeparateJointModelTransform.java
  94. 1 1
      jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
  95. 3 1
      jme3-core/src/main/java/com/jme3/anim/TransformTrack.java
  96. 26 31
      jme3-core/src/main/java/com/jme3/anim/tween/AbstractTween.java
  97. 26 31
      jme3-core/src/main/java/com/jme3/anim/tween/Tween.java
  98. 26 31
      jme3-core/src/main/java/com/jme3/anim/tween/Tweens.java
  99. 1 0
      jme3-core/src/main/java/com/jme3/anim/tween/action/BlendAction.java
  100. 1 0
      jme3-core/src/main/java/com/jme3/anim/tween/action/ClipAction.java

+ 18 - 14
.github/workflows/main.yml

@@ -69,13 +69,14 @@ jobs:
         uses: actions/checkout@v1     
         uses: actions/checkout@v1     
         with:
         with:
           fetch-depth: 1
           fetch-depth: 1
-
-      - name: Build        
+      - name: Validate the Gradle wrapper
+        uses: gradle/wrapper-validation-action@v1
+      - name: Build
         run: |
         run: |
           # Build
           # Build
           # Note: since this is crossbuild we use the buildForPlatforms filter to tell
           # Note: since this is crossbuild we use the buildForPlatforms filter to tell
           # the buildscript wich platforms it should build for.
           # the buildscript wich platforms it should build for.
-          gradle -PuseCommitHashAsVersionName=true --no-daemon -PbuildForPlatforms=LinuxArm,LinuxArmHF,LinuxArm64 -PbuildNativeProjects=true \
+          ./gradlew -PuseCommitHashAsVersionName=true --no-daemon -PbuildForPlatforms=LinuxArm,LinuxArmHF,LinuxArm64 -PbuildNativeProjects=true \
           :jme3-bullet-native:assemble 
           :jme3-bullet-native:assemble 
 
 
       - name: Upload natives
       - name: Upload natives
@@ -96,10 +97,11 @@ jobs:
         uses: actions/checkout@v1     
         uses: actions/checkout@v1     
         with:
         with:
           fetch-depth: 1
           fetch-depth: 1
-
-      - name: Build        
-        run: |       
-          gradle -PuseCommitHashAsVersionName=true --no-daemon -PbuildNativeProjects=true \
+      - name: Validate the Gradle wrapper
+        uses: gradle/wrapper-validation-action@v1
+      - name: Build
+        run: |
+          ./gradlew -PuseCommitHashAsVersionName=true --no-daemon -PbuildNativeProjects=true \
           :jme3-android-native:assemble \
           :jme3-android-native:assemble \
           :jme3-bullet-native-android:assemble 
           :jme3-bullet-native-android:assemble 
      
      
@@ -137,8 +139,9 @@ jobs:
         uses: actions/setup-java@v1
         uses: actions/setup-java@v1
         with:
         with:
           java-version: ${{ matrix.jdk }}
           java-version: ${{ matrix.jdk }}
-          architecture: x64 
-          
+          architecture: x64
+      - name: Validate the Gradle wrapper
+        uses: gradle/wrapper-validation-action@v1
       - name: Build Natives
       - name: Build Natives
         shell: bash
         shell: bash
         env:
         env:
@@ -159,7 +162,7 @@ jobs:
           fi
           fi
           
           
           # Build
           # Build
-          gradle  -PuseCommitHashAsVersionName=true --no-daemon  -PbuildNativeProjects=true -Dmaven.repo.local="$PWD/dist/maven" \
+          ./gradlew  -PuseCommitHashAsVersionName=true --no-daemon  -PbuildNativeProjects=true -Dmaven.repo.local="$PWD/dist/maven" \
           build \
           build \
           :jme3-bullet-native:build
           :jme3-bullet-native:build
                   
                   
@@ -233,12 +236,13 @@ jobs:
         with:
         with:
           name: linuxarm-natives
           name: linuxarm-natives
           path: build/native
           path: build/native
-                                                     
+      - name: Validate the Gradle wrapper
+        uses: gradle/wrapper-validation-action@v1
       - name: Build Engine
       - name: Build Engine
         shell: bash
         shell: bash
         run: |
         run: |
           # Build
           # Build
-          gradle -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true build
+          ./gradlew -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true build
           
           
           if [ "${{ matrix.deploy }}" = "true" ];
           if [ "${{ matrix.deploy }}" = "true" ];
           then  
           then  
@@ -247,7 +251,7 @@ jobs:
             sudo apt-get install -y zip
             sudo apt-get install -y zip
 
 
             # Create the zip release and the javadoc
             # Create the zip release and the javadoc
-            gradle -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true mergedJavadoc createZipDistribution
+            ./gradlew -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true mergedJavadoc createZipDistribution
           
           
             # We prepare the release for deploy
             # We prepare the release for deploy
             mkdir -p ./dist/release/
             mkdir -p ./dist/release/
@@ -255,7 +259,7 @@ jobs:
             
             
             # Create the maven artifacts
             # Create the maven artifacts
             mkdir -p ./dist/maven/
             mkdir -p ./dist/maven/
-            gradle -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true install -Dmaven.repo.local="$PWD/dist/maven"
+            ./gradlew -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true install -Dmaven.repo.local="$PWD/dist/maven"
 
 
             # Zip the natives into a single archive (we are going to use this to deploy native snapshots)
             # Zip the natives into a single archive (we are going to use this to deploy native snapshots)
             echo "Create native zip"
             echo "Create native zip"

+ 3 - 0
README.md

@@ -20,6 +20,9 @@ The engine is used by several commercial game studios and computer-science cours
  - [Lightspeed Frontier (on Steam)](https://store.steampowered.com/app/548650/Lightspeed_Frontier/)
  - [Lightspeed Frontier (on Steam)](https://store.steampowered.com/app/548650/Lightspeed_Frontier/)
  - [Skullstone](http://www.skullstonegame.com/)
  - [Skullstone](http://www.skullstonegame.com/)
  - [Spoxel (on Steam)](https://store.steampowered.com/app/746880/Spoxel/)
  - [Spoxel (on Steam)](https://store.steampowered.com/app/746880/Spoxel/)
+ - [Nine Circles of Hell (on Steam)](https://store.steampowered.com/app/1200600/Nine_Circles_of_Hell/)
+ - [Leap](https://gamejolt.com/games/leap/313308)
+ - [Jumping Jack Flag](http://timealias.bplaced.net/jack/)
 
 
 ## Getting started
 ## Getting started
 
 

+ 21 - 19
build.gradle

@@ -158,29 +158,29 @@ task configureAndroidNDK {
 
 
 gradle.rootProject.ext.set("usePrebuildNatives", buildNativeProjects!="true");
 gradle.rootProject.ext.set("usePrebuildNatives", buildNativeProjects!="true");
 
 
-if(skipPrebuildLibraries!="true"&&buildNativeProjects!="true"){
+if (skipPrebuildLibraries != "true" && buildNativeProjects != "true") {
     String rootPath = rootProject.projectDir.absolutePath
     String rootPath = rootProject.projectDir.absolutePath
 
 
     Properties nativesSnasphotProp = new Properties()
     Properties nativesSnasphotProp = new Properties()
-    File nativesSnasphotPropF=new File("${rootPath}/natives-snapshot.properties");
-    
-    if(nativesSnasphotPropF.exists()){
+    File nativesSnasphotPropF = new File("${rootPath}/natives-snapshot.properties");
+
+    if (nativesSnasphotPropF.exists()) {
 
 
         nativesSnasphotPropF.withInputStream { nativesSnasphotProp.load(it) }
         nativesSnasphotPropF.withInputStream { nativesSnasphotProp.load(it) }
 
 
-        String nativesSnasphot=nativesSnasphotProp.getProperty("natives.snapshot");
-        String nativesUrl=PREBUILD_NATIVES_URL.replace('${natives.snapshot}',nativesSnasphot)
-        println "Use natives snapshot: "+nativesUrl
+        String nativesSnasphot = nativesSnasphotProp.getProperty("natives.snapshot");
+        String nativesUrl = PREBUILD_NATIVES_URL.replace('${natives.snapshot}', nativesSnasphot)
+        println "Use natives snapshot: " + nativesUrl
 
 
-        String nativesZipFile="${rootPath}" + File.separator + "build"+ File.separator +nativesSnasphot+"-natives.zip"
-        String nativesPath="${rootPath}" + File.separator + "build"+ File.separator +"native"
+        String nativesZipFile = "${rootPath}" + File.separator + "build" + File.separator + nativesSnasphot + "-natives.zip"
+        String nativesPath = "${rootPath}" + File.separator + "build" + File.separator + "native"
 
 
 
 
         task getNativesZipFile {
         task getNativesZipFile {
             outputs.file nativesZipFile
             outputs.file nativesZipFile
             doFirst {
             doFirst {
                 File target = file(nativesZipFile);
                 File target = file(nativesZipFile);
-                println("Download natives from "+nativesUrl+" to "+nativesZipFile);
+                println("Download natives from " + nativesUrl + " to " + nativesZipFile);
                 target.getParentFile().mkdirs();
                 target.getParentFile().mkdirs();
                 ant.get(src: nativesUrl, dest: target);
                 ant.get(src: nativesUrl, dest: target);
             }
             }
@@ -192,28 +192,26 @@ if(skipPrebuildLibraries!="true"&&buildNativeProjects!="true"){
             dependsOn getNativesZipFile
             dependsOn getNativesZipFile
 
 
             doFirst {
             doFirst {
-                for(File src : zipTree(nativesZipFile)){
-                    String srcRel=src.getAbsolutePath().substring((int)(nativesZipFile.length()+1));
-                    srcRel=srcRel.substring(srcRel.indexOf( File.separator)+1);
+                for (File src : zipTree(nativesZipFile)) {
+                    String srcRel = src.getAbsolutePath().substring((int) (nativesZipFile.length() + 1));
+                    srcRel = srcRel.substring(srcRel.indexOf(File.separator) + 1);
 
 
-                    File dest=new File(nativesPath+File.separator+srcRel);
+                    File dest = new File(nativesPath + File.separator + srcRel);
                     boolean doCopy = !(dest.exists() && dest.lastModified() > src.lastModified())
                     boolean doCopy = !(dest.exists() && dest.lastModified() > src.lastModified())
                     if (doCopy) {
                     if (doCopy) {
-                        println("Copy "+src+" "+dest);
+                        println("Copy " + src + " " + dest);
                         dest.getParentFile().mkdirs();
                         dest.getParentFile().mkdirs();
                         Files.copy(src.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING);
                         Files.copy(src.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING);
                     }
                     }
                 }
                 }
             }
             }
         }
         }
-        build.dependsOn extractPrebuiltNatives
+
+        assemble.dependsOn extractPrebuiltNatives
     }
     }
 }
 }
 
 
 
 
-
-
-
 //class IncrementalReverseTask extends DefaultTask {
 //class IncrementalReverseTask extends DefaultTask {
 //    @InputDirectory
 //    @InputDirectory
 //    def File inputDir
 //    def File inputDir
@@ -249,3 +247,7 @@ if(skipPrebuildLibraries!="true"&&buildNativeProjects!="true"){
 //        enableAssertions = true // true by default
 //        enableAssertions = true // true by default
 //    }
 //    }
 //}
 //}
+
+wrapper {
+    gradleVersion = '5.6.4'
+}

+ 7 - 3
gradle.properties

@@ -1,13 +1,17 @@
-# Version number: Major.Minor (e.g. 3.3)
-jmeVersion = 3.3
+# Version number: Major.Minor.SubMinor (e.g. 3.3.0)
+jmeVersion = 3.4.0
 
 
 # Leave empty  to autogenerate
 # Leave empty  to autogenerate
 # (use -PjmeVersionName="myVersion" from commandline to specify a custom version name )
 # (use -PjmeVersionName="myVersion" from commandline to specify a custom version name )
-jmeVersionName = 
+jmeVersionName =
 
 
 # If true, the version name will contain the commit hash
 # If true, the version name will contain the commit hash
 useCommitHashAsVersionName = false
 useCommitHashAsVersionName = false
 
 
+# Set to true if a non-master branch name should be included in the automatically
+# generated version.
+includeBranchInVersion = false
+
 # specify if JavaDoc should be built
 # specify if JavaDoc should be built
 buildJavaDoc = true
 buildJavaDoc = true
 
 

二進制
gradle/wrapper/gradle-wrapper.jar


+ 5 - 5
gradle/wrapper/gradle-wrapper.properties

@@ -1,5 +1,5 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists

+ 19 - 3
gradlew

@@ -1,5 +1,21 @@
 #!/usr/bin/env sh
 #!/usr/bin/env sh
 
 
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
 ##############################################################################
 ##############################################################################
 ##
 ##
 ##  Gradle start up script for UN*X
 ##  Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
 APP_BASE_NAME=`basename "$0"`
 APP_BASE_NAME=`basename "$0"`
 
 
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD="maximum"
 MAX_FD="maximum"
@@ -109,8 +125,8 @@ if $darwin; then
     GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
     GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
 fi
 fi
 
 
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
     APP_HOME=`cygpath --path --mixed "$APP_HOME"`
     APP_HOME=`cygpath --path --mixed "$APP_HOME"`
     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
     JAVACMD=`cygpath --unix "$JAVACMD"`
     JAVACMD=`cygpath --unix "$JAVACMD"`

+ 17 - 1
gradlew.bat

@@ -1,3 +1,19 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
 @if "%DEBUG%" == "" @echo off
 @if "%DEBUG%" == "" @echo off
 @rem ##########################################################################
 @rem ##########################################################################
 @rem
 @rem
@@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0
 set APP_HOME=%DIRNAME%
 set APP_HOME=%DIRNAME%
 
 
 @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
 
 
 @rem Find java.exe
 @rem Find java.exe
 if defined JAVA_HOME goto findJavaFromJavaHome
 if defined JAVA_HOME goto findJavaFromJavaHome

+ 1 - 1
jme3-android-examples/src/main/java/org/jmonkeyengine/jme3androidexamples/MainActivity.java

@@ -286,7 +286,7 @@ public class MainActivity extends AppCompatActivity implements OnItemClickListen
     private boolean checkClassType(String className) {
     private boolean checkClassType(String className) {
         boolean include = true;
         boolean include = true;
         try {
         try {
-            Class<?> clazz = (Class<?>) Class.forName(className);
+            Class<?> clazz = Class.forName(className);
             if (Application.class.isAssignableFrom(clazz)) {
             if (Application.class.isAssignableFrom(clazz)) {
                 Log.d(TAG, "Class " + className + " is a jME Application");
                 Log.d(TAG, "Class " + className + " is a jME Application");
             } else {
             } else {

+ 1 - 1
jme3-android-native/decode.gradle

@@ -1,5 +1,5 @@
 String tremorZipFile = "TremorAndroid.zip"
 String tremorZipFile = "TremorAndroid.zip"
-String stbiUrl = 'https://raw.githubusercontent.com/nothings/stb/master/stb_image.h'
+String stbiUrl = 'https://raw.githubusercontent.com/jMonkeyEngine/stb/0224a44a10564a214595797b4c88323f79a5f934/stb_image.h'
 
 
 // Working directories for the ndk build.
 // Working directories for the ndk build.
 String decodeBuildDir = "${buildDir}" + File.separator + 'decode'
 String decodeBuildDir = "${buildDir}" + File.separator + 'decode'

+ 2 - 2
jme3-android-native/openalsoft.gradle

@@ -1,11 +1,11 @@
 // OpenAL Soft r1.16
 // OpenAL Soft r1.16
-String openALSoftUrl = 'http://repo.or.cz/w/openal-soft.git/snapshot/e5016f814a265ed592a88acea95cf912c4bfdf12.zip'
+String openALSoftUrl = 'https://github.com/jMonkeyEngine/openal-soft/archive/e5016f814a265ed592a88acea95cf912c4bfdf12.zip'
 String openALSoftZipFile = 'OpenALSoft.zip'
 String openALSoftZipFile = 'OpenALSoft.zip'
 
 
 // OpenAL Soft directory the download is extracted into
 // OpenAL Soft directory the download is extracted into
 // Typically, the downloaded OpenAL Soft zip file will extract to a directory
 // Typically, the downloaded OpenAL Soft zip file will extract to a directory
 // called "openal-soft"
 // called "openal-soft"
-String openALSoftFolder = 'openal-soft-e5016f8'
+String openALSoftFolder = 'openal-soft-e5016f814a265ed592a88acea95cf912c4bfdf12'
 
 
 //Working directories for the ndk build.
 //Working directories for the ndk build.
 String openalsoftBuildDir = "${buildDir}" + File.separator + 'openalsoft'
 String openalsoftBuildDir = "${buildDir}" + File.separator + 'openalsoft'

+ 8 - 0
jme3-android/src/main/java/com/jme3/app/AndroidHarness.java

@@ -362,6 +362,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
      * @param dialog
      * @param dialog
      * @param whichButton
      * @param whichButton
      */
      */
+    @Override
     public void onClick(DialogInterface dialog, int whichButton) {
     public void onClick(DialogInterface dialog, int whichButton) {
         if (whichButton != -2) {
         if (whichButton != -2) {
             if (app != null) {
             if (app != null) {
@@ -473,6 +474,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
         handler.setLevel(Level.ALL);
         handler.setLevel(Level.ALL);
     }
     }
 
 
+    @Override
     public void initialize() {
     public void initialize() {
         app.initialize();
         app.initialize();
         if (handleExitHook) {
         if (handleExitHook) {
@@ -488,10 +490,12 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
         }
         }
     }
     }
 
 
+    @Override
     public void reshape(int width, int height) {
     public void reshape(int width, int height) {
         app.reshape(width, height);
         app.reshape(width, height);
     }
     }
 
 
+    @Override
     public void update() {
     public void update() {
         app.update();
         app.update();
         // call to remove the splash screen, if present.
         // call to remove the splash screen, if present.
@@ -503,10 +507,12 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
         }
         }
     }
     }
 
 
+    @Override
     public void requestClose(boolean esc) {
     public void requestClose(boolean esc) {
         app.requestClose(esc);
         app.requestClose(esc);
     }
     }
 
 
+    @Override
     public void destroy() {
     public void destroy() {
         if (app != null) {
         if (app != null) {
             app.destroy();
             app.destroy();
@@ -516,6 +522,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
         }
         }
     }
     }
 
 
+    @Override
     public void gainFocus() {
     public void gainFocus() {
         logger.fine("gainFocus");
         logger.fine("gainFocus");
         if (view != null) {
         if (view != null) {
@@ -547,6 +554,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
         }
         }
     }
     }
 
 
+    @Override
     public void loseFocus() {
     public void loseFocus() {
         logger.fine("loseFocus");
         logger.fine("loseFocus");
         if (app != null) {
         if (app != null) {

+ 3 - 3
jme3-android/src/main/java/com/jme3/app/AndroidHarnessFragment.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2019 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -684,10 +684,10 @@ public class AndroidHarnessFragment extends Fragment implements
                     if (viewWidth > viewHeight && viewWidth > maxResolutionDimension) {
                     if (viewWidth > viewHeight && viewWidth > maxResolutionDimension) {
                         // landscape
                         // landscape
                         fixedSizeWidth = maxResolutionDimension;
                         fixedSizeWidth = maxResolutionDimension;
-                        fixedSizeHeight = (int)(maxResolutionDimension * ((float)viewHeight / (float)viewWidth));
+                        fixedSizeHeight = (int)(maxResolutionDimension * (viewHeight / (float)viewWidth));
                     } else if (viewHeight > viewWidth && viewHeight > maxResolutionDimension) {
                     } else if (viewHeight > viewWidth && viewHeight > maxResolutionDimension) {
                         // portrait
                         // portrait
-                        fixedSizeWidth = (int)(maxResolutionDimension * ((float)viewWidth / (float)viewHeight));
+                        fixedSizeWidth = (int)(maxResolutionDimension * (viewWidth / (float)viewHeight));
                         fixedSizeHeight = maxResolutionDimension;
                         fixedSizeHeight = maxResolutionDimension;
                     } else if (viewWidth == viewHeight && viewWidth > maxResolutionDimension) {
                     } else if (viewWidth == viewHeight && viewWidth > maxResolutionDimension) {
                         fixedSizeWidth = maxResolutionDimension;
                         fixedSizeWidth = maxResolutionDimension;

+ 3 - 1
jme3-android/src/main/java/com/jme3/app/DefaultAndroidProfiler.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2014 jMonkeyEngine
+ * Copyright (c) 2014-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -82,6 +82,7 @@ import com.jme3.renderer.queue.RenderQueue;
 public class DefaultAndroidProfiler implements AppProfiler {
 public class DefaultAndroidProfiler implements AppProfiler {
     private int androidApiLevel = Build.VERSION.SDK_INT;
     private int androidApiLevel = Build.VERSION.SDK_INT;
 
 
+    @Override
     public void appStep(AppStep appStep) {
     public void appStep(AppStep appStep) {
         if (androidApiLevel >= 18) {
         if (androidApiLevel >= 18) {
             switch(appStep) {
             switch(appStep) {
@@ -140,6 +141,7 @@ public class DefaultAndroidProfiler implements AppProfiler {
 
 
     }
     }
 
 
+    @Override
     public void vpStep(VpStep vpStep, ViewPort vp, RenderQueue.Bucket bucket) {
     public void vpStep(VpStep vpStep, ViewPort vp, RenderQueue.Bucket bucket) {
         if (androidApiLevel >= 18) {
         if (androidApiLevel >= 18) {
             switch (vpStep) {
             switch (vpStep) {

+ 2 - 2
jme3-android/src/main/java/com/jme3/app/state/MjpegFileWriter.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -478,7 +478,7 @@ public class MjpegFileWriter {
             baos.write(fcc);
             baos.write(fcc);
             baos.write(intBytes(swapInt(cb)));
             baos.write(intBytes(swapInt(cb)));
             for (int i = 0; i < ind.size(); i++) {
             for (int i = 0; i < ind.size(); i++) {
-                AVIIndex in = (AVIIndex) ind.get(i);
+                AVIIndex in = ind.get(i);
                 baos.write(in.toBytes());
                 baos.write(in.toBytes());
             }
             }
 
 

+ 17 - 2
jme3-android/src/main/java/com/jme3/app/state/VideoRecorderAppState.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2019 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -73,6 +73,7 @@ public class VideoRecorderAppState extends AbstractAppState {
     private Application app;
     private Application app;
     private ExecutorService executor = Executors.newCachedThreadPool(new ThreadFactory() {
     private ExecutorService executor = Executors.newCachedThreadPool(new ThreadFactory() {
 
 
+        @Override
         public Thread newThread(Runnable r) {
         public Thread newThread(Runnable r) {
             Thread th = new Thread(r);
             Thread th = new Thread(r);
             th.setName("jME3 Video Processor");
             th.setName("jME3 Video Processor");
@@ -239,6 +240,7 @@ public class VideoRecorderAppState extends AbstractAppState {
                 renderer.readFrameBufferWithFormat(out, item.buffer, Image.Format.BGRA8);
                 renderer.readFrameBufferWithFormat(out, item.buffer, Image.Format.BGRA8);
                 executor.submit(new Callable<Void>() {
                 executor.submit(new Callable<Void>() {
 
 
+                    @Override
                     public Void call() throws Exception {
                     public Void call() throws Exception {
                         if (fastMode) {
                         if (fastMode) {
                             item.data = item.buffer.array();
                             item.data = item.buffer.array();
@@ -260,6 +262,7 @@ public class VideoRecorderAppState extends AbstractAppState {
             }
             }
         }
         }
 
 
+        @Override
         public void initialize(RenderManager rm, ViewPort viewPort) {
         public void initialize(RenderManager rm, ViewPort viewPort) {
             logger.log(Level.INFO, "initialize in VideoProcessor");
             logger.log(Level.INFO, "initialize in VideoProcessor");
             this.camera = viewPort.getCamera();
             this.camera = viewPort.getCamera();
@@ -275,13 +278,16 @@ public class VideoRecorderAppState extends AbstractAppState {
             }
             }
         }
         }
 
 
+        @Override
         public void reshape(ViewPort vp, int w, int h) {
         public void reshape(ViewPort vp, int w, int h) {
         }
         }
 
 
+        @Override
         public boolean isInitialized() {
         public boolean isInitialized() {
             return this.isInitilized;
             return this.isInitilized;
         }
         }
 
 
+        @Override
         public void preFrame(float tpf) {
         public void preFrame(float tpf) {
             if (null == writer) {
             if (null == writer) {
                 try {
                 try {
@@ -292,14 +298,17 @@ public class VideoRecorderAppState extends AbstractAppState {
             }
             }
         }
         }
 
 
+        @Override
         public void postQueue(RenderQueue rq) {
         public void postQueue(RenderQueue rq) {
         }
         }
 
 
+        @Override
         public void postFrame(FrameBuffer out) {
         public void postFrame(FrameBuffer out) {
             numFrames++;
             numFrames++;
             addImage(renderManager.getRenderer(), out);
             addImage(renderManager.getRenderer(), out);
         }
         }
 
 
+        @Override
         public void cleanup() {
         public void cleanup() {
             logger.log(Level.INFO, "cleanup in VideoProcessor");
             logger.log(Level.INFO, "cleanup in VideoProcessor");
             logger.log(Level.INFO, "VideoProcessor numFrames: {0}", numFrames);
             logger.log(Level.INFO, "VideoProcessor numFrames: {0}", numFrames);
@@ -332,22 +341,27 @@ public class VideoRecorderAppState extends AbstractAppState {
             this.ticks = 0;
             this.ticks = 0;
         }
         }
 
 
+        @Override
         public long getTime() {
         public long getTime() {
             return (long) (this.ticks * (1.0f / this.framerate) * 1000f);
             return (long) (this.ticks * (1.0f / this.framerate) * 1000f);
         }
         }
 
 
+        @Override
         public long getResolution() {
         public long getResolution() {
             return 1000L;
             return 1000L;
         }
         }
 
 
+        @Override
         public float getFrameRate() {
         public float getFrameRate() {
             return this.framerate;
             return this.framerate;
         }
         }
 
 
+        @Override
         public float getTimePerFrame() {
         public float getTimePerFrame() {
-            return (float) (1.0f / this.framerate);
+            return 1.0f / this.framerate;
         }
         }
 
 
+        @Override
         public void update() {
         public void update() {
             long time = System.currentTimeMillis();
             long time = System.currentTimeMillis();
             long difference = time - lastTime;
             long difference = time - lastTime;
@@ -364,6 +378,7 @@ public class VideoRecorderAppState extends AbstractAppState {
             this.ticks++;
             this.ticks++;
         }
         }
 
 
+        @Override
         public void reset() {
         public void reset() {
             this.ticks = 0;
             this.ticks = 0;
         }
         }

+ 1 - 0
jme3-android/src/main/java/com/jme3/asset/plugins/AndroidLocator.java

@@ -17,6 +17,7 @@ public class AndroidLocator implements AssetLocator {
     public AndroidLocator() {
     public AndroidLocator() {
     }
     }
 
 
+    @Override
     public void setRootPath(String rootPath) {
     public void setRootPath(String rootPath) {
         this.rootPath = rootPath;
         this.rootPath = rootPath;
     }
     }

+ 20 - 0
jme3-android/src/main/java/com/jme3/audio/android/AndroidAL.java

@@ -10,44 +10,64 @@ public final class AndroidAL implements AL {
     public AndroidAL() {
     public AndroidAL() {
     }
     }
 
 
+    @Override
     public native String alGetString(int parameter);
     public native String alGetString(int parameter);
 
 
+    @Override
     public native int alGenSources();
     public native int alGenSources();
 
 
+    @Override
     public native int alGetError();
     public native int alGetError();
 
 
+    @Override
     public native void alDeleteSources(int numSources, IntBuffer sources);
     public native void alDeleteSources(int numSources, IntBuffer sources);
 
 
+    @Override
     public native void alGenBuffers(int numBuffers, IntBuffer buffers);
     public native void alGenBuffers(int numBuffers, IntBuffer buffers);
 
 
+    @Override
     public native void alDeleteBuffers(int numBuffers, IntBuffer buffers);
     public native void alDeleteBuffers(int numBuffers, IntBuffer buffers);
 
 
+    @Override
     public native void alSourceStop(int source);
     public native void alSourceStop(int source);
 
 
+    @Override
     public native void alSourcei(int source, int param, int value);
     public native void alSourcei(int source, int param, int value);
 
 
+    @Override
     public native void alBufferData(int buffer, int format, ByteBuffer data, int size, int frequency);
     public native void alBufferData(int buffer, int format, ByteBuffer data, int size, int frequency);
 
 
+    @Override
     public native void alSourcePlay(int source);
     public native void alSourcePlay(int source);
 
 
+    @Override
     public native void alSourcePause(int source);
     public native void alSourcePause(int source);
 
 
+    @Override
     public native void alSourcef(int source, int param, float value);
     public native void alSourcef(int source, int param, float value);
 
 
+    @Override
     public native void alSource3f(int source, int param, float value1, float value2, float value3);
     public native void alSource3f(int source, int param, float value1, float value2, float value3);
 
 
+    @Override
     public native int alGetSourcei(int source, int param);
     public native int alGetSourcei(int source, int param);
 
 
+    @Override
     public native void alSourceUnqueueBuffers(int source, int numBuffers, IntBuffer buffers);
     public native void alSourceUnqueueBuffers(int source, int numBuffers, IntBuffer buffers);
 
 
+    @Override
     public native void alSourceQueueBuffers(int source, int numBuffers, IntBuffer buffers);
     public native void alSourceQueueBuffers(int source, int numBuffers, IntBuffer buffers);
 
 
+    @Override
     public native void alListener(int param, FloatBuffer data);
     public native void alListener(int param, FloatBuffer data);
 
 
+    @Override
     public native void alListenerf(int param, float value);
     public native void alListenerf(int param, float value);
 
 
+    @Override
     public native void alListener3f(int param, float value1, float value2, float value3);
     public native void alListener3f(int param, float value1, float value2, float value3);
 
 
+    @Override
     public native void alSource3i(int source, int param, int value1, int value2, int value3);
     public native void alSource3i(int source, int param, int value1, int value2, int value3);
 
 
 }
 }

+ 8 - 0
jme3-android/src/main/java/com/jme3/audio/android/AndroidALC.java

@@ -12,19 +12,27 @@ public final class AndroidALC implements ALC {
     public AndroidALC() {
     public AndroidALC() {
     }
     }
 
 
+    @Override
     public native void createALC();
     public native void createALC();
 
 
+    @Override
     public native void destroyALC();
     public native void destroyALC();
 
 
+    @Override
     public native boolean isCreated();
     public native boolean isCreated();
 
 
+    @Override
     public native String alcGetString(int parameter);
     public native String alcGetString(int parameter);
     
     
+    @Override
     public native boolean alcIsExtensionPresent(String extension);
     public native boolean alcIsExtensionPresent(String extension);
     
     
+    @Override
     public native void alcGetInteger(int param, IntBuffer buffer, int size);
     public native void alcGetInteger(int param, IntBuffer buffer, int size);
     
     
+    @Override
     public native void alcDevicePauseSOFT();
     public native void alcDevicePauseSOFT();
     
     
+    @Override
     public native void alcDeviceResumeSOFT();
     public native void alcDeviceResumeSOFT();
 }
 }

+ 11 - 0
jme3-android/src/main/java/com/jme3/audio/android/AndroidEFX.java

@@ -8,25 +8,36 @@ public class AndroidEFX implements EFX {
     public AndroidEFX() {
     public AndroidEFX() {
     }
     }
 
 
+    @Override
     public native void alGenAuxiliaryEffectSlots(int numSlots, IntBuffer buffers);
     public native void alGenAuxiliaryEffectSlots(int numSlots, IntBuffer buffers);
 
 
+    @Override
     public native void alGenEffects(int numEffects, IntBuffer buffers);
     public native void alGenEffects(int numEffects, IntBuffer buffers);
 
 
+    @Override
     public native void alEffecti(int effect, int param, int value);
     public native void alEffecti(int effect, int param, int value);
 
 
+    @Override
     public native void alAuxiliaryEffectSloti(int effectSlot, int param, int value);
     public native void alAuxiliaryEffectSloti(int effectSlot, int param, int value);
 
 
+    @Override
     public native void alDeleteEffects(int numEffects, IntBuffer buffers);
     public native void alDeleteEffects(int numEffects, IntBuffer buffers);
 
 
+    @Override
     public native void alDeleteAuxiliaryEffectSlots(int numEffectSlots, IntBuffer buffers);
     public native void alDeleteAuxiliaryEffectSlots(int numEffectSlots, IntBuffer buffers);
 
 
+    @Override
     public native void alGenFilters(int numFilters, IntBuffer buffers);
     public native void alGenFilters(int numFilters, IntBuffer buffers);
 
 
+    @Override
     public native void alFilteri(int filter, int param, int value);
     public native void alFilteri(int filter, int param, int value);
 
 
+    @Override
     public native void alFilterf(int filter, int param, float value);
     public native void alFilterf(int filter, int param, float value);
 
 
+    @Override
     public native void alDeleteFilters(int numFilters, IntBuffer buffers);
     public native void alDeleteFilters(int numFilters, IntBuffer buffers);
 
 
+    @Override
     public native void alEffectf(int effect, int param, float value);
     public native void alEffectf(int effect, int param, float value);
 }
 }

+ 1 - 0
jme3-android/src/main/java/com/jme3/audio/plugins/NativeVorbisLoader.java

@@ -46,6 +46,7 @@ public class NativeVorbisLoader implements AssetLoader {
             throw new IOException("Not supported for audio streams");
             throw new IOException("Not supported for audio streams");
         }
         }
 
 
+        @Override
         public void setTime(float time) {
         public void setTime(float time) {
             try {
             try {
                 file.seekTime(time);
                 file.seekTime(time);

+ 2 - 2
jme3-android/src/main/java/com/jme3/input/android/AndroidSensorJoyInput.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -561,7 +561,7 @@ public class AndroidSensorJoyInput implements SensorEventListener {
                         }
                         }
                     }
                     }
                 }
                 }
-            } else if (sensorData != null) {
+            } else {
                 if (!sensorData.haveData) {
                 if (!sensorData.haveData) {
                     sensorData.haveData = true;
                     sensorData.haveData = true;
                 }
                 }

+ 3 - 3
jme3-android/src/main/java/com/jme3/input/android/AndroidTouchInput.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -131,8 +131,8 @@ public class AndroidTouchInput implements TouchInput {
 
 
         // view width and height are 0 until the view is displayed on the screen
         // view width and height are 0 until the view is displayed on the screen
         if (androidInput.getView().getWidth() != 0 && androidInput.getView().getHeight() != 0) {
         if (androidInput.getView().getWidth() != 0 && androidInput.getView().getHeight() != 0) {
-            scaleX = (float)settings.getWidth() / (float)androidInput.getView().getWidth();
-            scaleY = (float)settings.getHeight() / (float)androidInput.getView().getHeight();
+            scaleX = settings.getWidth() / (float)androidInput.getView().getWidth();
+            scaleY = settings.getHeight() / (float)androidInput.getView().getHeight();
         }
         }
         logger.log(Level.FINE, "Setting input scaling, scaleX: {0}, scaleY: {1}",
         logger.log(Level.FINE, "Setting input scaling, scaleX: {0}, scaleY: {1}",
                 new Object[]{scaleX, scaleY});
                 new Object[]{scaleX, scaleY});

+ 2 - 2
jme3-android/src/main/java/com/jme3/input/android/TouchEventPool.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -87,7 +87,7 @@ public class TouchEventPool {
         TouchEvent evt = null;
         TouchEvent evt = null;
         int curSize = eventPool.size();
         int curSize = eventPool.size();
         while (curSize > 0) {
         while (curSize > 0) {
-            evt = (TouchEvent)eventPool.pop();
+            evt = eventPool.pop();
             if (evt.isConsumed()) {
             if (evt.isConsumed()) {
                 break;
                 break;
             } else {
             } else {

+ 113 - 1
jme3-android/src/main/java/com/jme3/renderer/android/AndroidGL.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2015 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -46,6 +46,7 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
 
 
     IntBuffer tmpBuff = BufferUtils.createIntBuffer(1);
     IntBuffer tmpBuff = BufferUtils.createIntBuffer(1);
 
 
+    @Override
     public void resetStats() {
     public void resetStats() {
     }
     }
 
 
@@ -86,10 +87,12 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         }
         }
     }
     }
 
 
+    @Override
     public void glActiveTexture(int texture) {
     public void glActiveTexture(int texture) {
         GLES20.glActiveTexture(texture);
         GLES20.glActiveTexture(texture);
     }
     }
 
 
+    @Override
     public void glAttachShader(int program, int shader) {
     public void glAttachShader(int program, int shader) {
         GLES20.glAttachShader(program, shader);
         GLES20.glAttachShader(program, shader);
     }
     }
@@ -99,144 +102,179 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         GLES30.glBeginQuery(target, query);
         GLES30.glBeginQuery(target, query);
     }
     }
 
 
+    @Override
     public void glBindBuffer(int target, int buffer) {
     public void glBindBuffer(int target, int buffer) {
         GLES20.glBindBuffer(target, buffer);
         GLES20.glBindBuffer(target, buffer);
     }
     }
 
 
+    @Override
     public void glBindTexture(int target, int texture) {
     public void glBindTexture(int target, int texture) {
         GLES20.glBindTexture(target, texture);
         GLES20.glBindTexture(target, texture);
     }
     }
 
 
+    @Override
     public void glBlendFunc(int sfactor, int dfactor) {
     public void glBlendFunc(int sfactor, int dfactor) {
         GLES20.glBlendFunc(sfactor, dfactor);
         GLES20.glBlendFunc(sfactor, dfactor);
     }
     }
     
     
+    @Override
     public void glBlendFuncSeparate(int sfactorRGB, int dfactorRGB, int sfactorAlpha, int dfactorAlpha) {
     public void glBlendFuncSeparate(int sfactorRGB, int dfactorRGB, int sfactorAlpha, int dfactorAlpha) {
        GLES20.glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
        GLES20.glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
     }
     }
 
 
+    @Override
     public void glBufferData(int target, FloatBuffer data, int usage) {
     public void glBufferData(int target, FloatBuffer data, int usage) {
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
     }
     }
 
 
+    @Override
     public void glBufferData(int target, ShortBuffer data, int usage) {
     public void glBufferData(int target, ShortBuffer data, int usage) {
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
     }
     }
 
 
+    @Override
     public void glBufferData(int target, ByteBuffer data, int usage) {
     public void glBufferData(int target, ByteBuffer data, int usage) {
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
     }
     }
 
 
+    @Override
     public void glBufferData(int target, long data_size, int usage) {
     public void glBufferData(int target, long data_size, int usage) {
         GLES20.glBufferData(target, (int) data_size, null, usage);
         GLES20.glBufferData(target, (int) data_size, null, usage);
     }
     }
 
 
+    @Override
     public void glBufferSubData(int target, long offset, FloatBuffer data) {
     public void glBufferSubData(int target, long offset, FloatBuffer data) {
         GLES20.glBufferSubData(target, (int) offset, getLimitBytes(data), data);
         GLES20.glBufferSubData(target, (int) offset, getLimitBytes(data), data);
     }
     }
 
 
+    @Override
     public void glBufferSubData(int target, long offset, ShortBuffer data) {
     public void glBufferSubData(int target, long offset, ShortBuffer data) {
         GLES20.glBufferSubData(target, (int) offset, getLimitBytes(data), data);
         GLES20.glBufferSubData(target, (int) offset, getLimitBytes(data), data);
     }
     }
 
 
+    @Override
     public void glBufferSubData(int target, long offset, ByteBuffer data) {
     public void glBufferSubData(int target, long offset, ByteBuffer data) {
         GLES20.glBufferSubData(target, (int) offset, getLimitBytes(data), data);
         GLES20.glBufferSubData(target, (int) offset, getLimitBytes(data), data);
     }
     }
 
 
+    @Override
     public void glGetBufferSubData(int target, long offset, ByteBuffer data) {
     public void glGetBufferSubData(int target, long offset, ByteBuffer data) {
         throw new UnsupportedOperationException("OpenGL ES 2 does not support glGetBufferSubData");
         throw new UnsupportedOperationException("OpenGL ES 2 does not support glGetBufferSubData");
     }
     }
 
 
+    @Override
     public void glClear(int mask) {
     public void glClear(int mask) {
         GLES20.glClear(mask);
         GLES20.glClear(mask);
     }
     }
 
 
+    @Override
     public void glClearColor(float red, float green, float blue, float alpha) {
     public void glClearColor(float red, float green, float blue, float alpha) {
         GLES20.glClearColor(red, green, blue, alpha);
         GLES20.glClearColor(red, green, blue, alpha);
     }
     }
 
 
+    @Override
     public void glColorMask(boolean red, boolean green, boolean blue, boolean alpha) {
     public void glColorMask(boolean red, boolean green, boolean blue, boolean alpha) {
         GLES20.glColorMask(red, green, blue, alpha);
         GLES20.glColorMask(red, green, blue, alpha);
     }
     }
 
 
+    @Override
     public void glCompileShader(int shader) {
     public void glCompileShader(int shader) {
         GLES20.glCompileShader(shader);
         GLES20.glCompileShader(shader);
     }
     }
 
 
+    @Override
     public void glCompressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, ByteBuffer data) {
     public void glCompressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, ByteBuffer data) {
         GLES20.glCompressedTexImage2D(target, level, internalformat, width, height, 0, getLimitBytes(data), data);
         GLES20.glCompressedTexImage2D(target, level, internalformat, width, height, 0, getLimitBytes(data), data);
     }
     }
 
 
+    @Override
     public void glCompressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, ByteBuffer data) {
     public void glCompressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, ByteBuffer data) {
         GLES20.glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, getLimitBytes(data), data);
         GLES20.glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, getLimitBytes(data), data);
     }
     }
 
 
+    @Override
     public int glCreateProgram() {
     public int glCreateProgram() {
         return GLES20.glCreateProgram();
         return GLES20.glCreateProgram();
     }
     }
 
 
+    @Override
     public int glCreateShader(int shaderType) {
     public int glCreateShader(int shaderType) {
         return GLES20.glCreateShader(shaderType);
         return GLES20.glCreateShader(shaderType);
     }
     }
 
 
+    @Override
     public void glCullFace(int mode) {
     public void glCullFace(int mode) {
         GLES20.glCullFace(mode);
         GLES20.glCullFace(mode);
     }
     }
 
 
+    @Override
     public void glDeleteBuffers(IntBuffer buffers) {
     public void glDeleteBuffers(IntBuffer buffers) {
         checkLimit(buffers);
         checkLimit(buffers);
         GLES20.glDeleteBuffers(buffers.limit(), buffers);
         GLES20.glDeleteBuffers(buffers.limit(), buffers);
     }
     }
 
 
+    @Override
     public void glDeleteProgram(int program) {
     public void glDeleteProgram(int program) {
         GLES20.glDeleteProgram(program);
         GLES20.glDeleteProgram(program);
     }
     }
 
 
+    @Override
     public void glDeleteShader(int shader) {
     public void glDeleteShader(int shader) {
         GLES20.glDeleteShader(shader);
         GLES20.glDeleteShader(shader);
     }
     }
 
 
+    @Override
     public void glDeleteTextures(IntBuffer textures) {
     public void glDeleteTextures(IntBuffer textures) {
         checkLimit(textures);
         checkLimit(textures);
         GLES20.glDeleteTextures(textures.limit(), textures);
         GLES20.glDeleteTextures(textures.limit(), textures);
     }
     }
 
 
+    @Override
     public void glDepthFunc(int func) {
     public void glDepthFunc(int func) {
         GLES20.glDepthFunc(func);
         GLES20.glDepthFunc(func);
     }
     }
 
 
+    @Override
     public void glDepthMask(boolean flag) {
     public void glDepthMask(boolean flag) {
         GLES20.glDepthMask(flag);
         GLES20.glDepthMask(flag);
     }
     }
 
 
+    @Override
     public void glDepthRange(double nearVal, double farVal) {
     public void glDepthRange(double nearVal, double farVal) {
         GLES20.glDepthRangef((float)nearVal, (float)farVal);
         GLES20.glDepthRangef((float)nearVal, (float)farVal);
     }
     }
 
 
+    @Override
     public void glDetachShader(int program, int shader) {
     public void glDetachShader(int program, int shader) {
         GLES20.glDetachShader(program, shader);
         GLES20.glDetachShader(program, shader);
     }
     }
 
 
+    @Override
     public void glDisable(int cap) {
     public void glDisable(int cap) {
         GLES20.glDisable(cap);
         GLES20.glDisable(cap);
     }
     }
 
 
+    @Override
     public void glDisableVertexAttribArray(int index) {
     public void glDisableVertexAttribArray(int index) {
         GLES20.glDisableVertexAttribArray(index);
         GLES20.glDisableVertexAttribArray(index);
     }
     }
 
 
+    @Override
     public void glDrawArrays(int mode, int first, int count) {
     public void glDrawArrays(int mode, int first, int count) {
         GLES20.glDrawArrays(mode, first, count);
         GLES20.glDrawArrays(mode, first, count);
     }
     }
 
 
+    @Override
     public void glDrawRangeElements(int mode, int start, int end, int count, int type, long indices) {
     public void glDrawRangeElements(int mode, int start, int end, int count, int type, long indices) {
         GLES20.glDrawElements(mode, count, type, (int)indices);
         GLES20.glDrawElements(mode, count, type, (int)indices);
     }
     }
 
 
+    @Override
     public void glEnable(int cap) {
     public void glEnable(int cap) {
         GLES20.glEnable(cap);
         GLES20.glEnable(cap);
     }
     }
 
 
+    @Override
     public void glEnableVertexAttribArray(int index) {
     public void glEnableVertexAttribArray(int index) {
         GLES20.glEnableVertexAttribArray(index);
         GLES20.glEnableVertexAttribArray(index);
     }
     }
@@ -246,11 +284,13 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         GLES30.glEndQuery(target);
         GLES30.glEndQuery(target);
     }
     }
 
 
+    @Override
     public void glGenBuffers(IntBuffer buffers) {
     public void glGenBuffers(IntBuffer buffers) {
         checkLimit(buffers);
         checkLimit(buffers);
         GLES20.glGenBuffers(buffers.limit(), buffers);
         GLES20.glGenBuffers(buffers.limit(), buffers);
     }
     }
 
 
+    @Override
     public void glGenTextures(IntBuffer textures) {
     public void glGenTextures(IntBuffer textures) {
         checkLimit(textures);
         checkLimit(textures);
         GLES20.glGenTextures(textures.limit(), textures);
         GLES20.glGenTextures(textures.limit(), textures);
@@ -261,29 +301,35 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         GLES30.glGenQueries(num, buff);
         GLES30.glGenQueries(num, buff);
     }
     }
 
 
+    @Override
     public int glGetAttribLocation(int program, String name) {
     public int glGetAttribLocation(int program, String name) {
         return GLES20.glGetAttribLocation(program, name);
         return GLES20.glGetAttribLocation(program, name);
     }
     }
 
 
+    @Override
     public void glGetBoolean(int pname, ByteBuffer params) {
     public void glGetBoolean(int pname, ByteBuffer params) {
         // GLES20.glGetBoolean(pname, params);
         // GLES20.glGetBoolean(pname, params);
         throw new UnsupportedOperationException("Today is not a good day for this");
         throw new UnsupportedOperationException("Today is not a good day for this");
     }
     }
 
 
+    @Override
     public int glGetError() {
     public int glGetError() {
         return GLES20.glGetError();
         return GLES20.glGetError();
     }
     }
 
 
+    @Override
     public void glGetInteger(int pname, IntBuffer params) {
     public void glGetInteger(int pname, IntBuffer params) {
         checkLimit(params);
         checkLimit(params);
         GLES20.glGetIntegerv(pname, params);
         GLES20.glGetIntegerv(pname, params);
     }
     }
 
 
+    @Override
     public void glGetProgram(int program, int pname, IntBuffer params) {
     public void glGetProgram(int program, int pname, IntBuffer params) {
         checkLimit(params);
         checkLimit(params);
         GLES20.glGetProgramiv(program, pname, params);
         GLES20.glGetProgramiv(program, pname, params);
     }
     }
 
 
+    @Override
     public String glGetProgramInfoLog(int program, int maxLength) {
     public String glGetProgramInfoLog(int program, int maxLength) {
         return GLES20.glGetProgramInfoLog(program);
         return GLES20.glGetProgramInfoLog(program);
     }
     }
@@ -303,51 +349,63 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         return buff.get(0);
         return buff.get(0);
     }
     }
 
 
+    @Override
     public void glGetShader(int shader, int pname, IntBuffer params) {
     public void glGetShader(int shader, int pname, IntBuffer params) {
         checkLimit(params);
         checkLimit(params);
         GLES20.glGetShaderiv(shader, pname, params);
         GLES20.glGetShaderiv(shader, pname, params);
     }
     }
 
 
+    @Override
     public String glGetShaderInfoLog(int shader, int maxLength) {
     public String glGetShaderInfoLog(int shader, int maxLength) {
         return GLES20.glGetShaderInfoLog(shader);
         return GLES20.glGetShaderInfoLog(shader);
     }
     }
 
 
+    @Override
     public String glGetString(int name) {
     public String glGetString(int name) {
         return GLES20.glGetString(name);
         return GLES20.glGetString(name);
     }
     }
 
 
+    @Override
     public int glGetUniformLocation(int program, String name) {
     public int glGetUniformLocation(int program, String name) {
         return GLES20.glGetUniformLocation(program, name);
         return GLES20.glGetUniformLocation(program, name);
     }
     }
 
 
+    @Override
     public boolean glIsEnabled(int cap) {
     public boolean glIsEnabled(int cap) {
         return GLES20.glIsEnabled(cap);
         return GLES20.glIsEnabled(cap);
     }
     }
 
 
+    @Override
     public void glLineWidth(float width) {
     public void glLineWidth(float width) {
         GLES20.glLineWidth(width);
         GLES20.glLineWidth(width);
     }
     }
 
 
+    @Override
     public void glLinkProgram(int program) {
     public void glLinkProgram(int program) {
         GLES20.glLinkProgram(program);
         GLES20.glLinkProgram(program);
     }
     }
 
 
+    @Override
     public void glPixelStorei(int pname, int param) {
     public void glPixelStorei(int pname, int param) {
         GLES20.glPixelStorei(pname, param);
         GLES20.glPixelStorei(pname, param);
     }
     }
 
 
+    @Override
     public void glPolygonOffset(float factor, float units) {
     public void glPolygonOffset(float factor, float units) {
         GLES20.glPolygonOffset(factor, units);
         GLES20.glPolygonOffset(factor, units);
     }
     }
 
 
+    @Override
     public void glReadPixels(int x, int y, int width, int height, int format, int type, ByteBuffer data) {
     public void glReadPixels(int x, int y, int width, int height, int format, int type, ByteBuffer data) {
         GLES20.glReadPixels(x, y, width, height, format, type, data);
         GLES20.glReadPixels(x, y, width, height, format, type, data);
     }
     }
 
 
+    @Override
     public void glScissor(int x, int y, int width, int height) {
     public void glScissor(int x, int y, int width, int height) {
         GLES20.glScissor(x, y, width, height);
         GLES20.glScissor(x, y, width, height);
     }
     }
 
 
+    @Override
     public void glShaderSource(int shader, String[] string, IntBuffer length) {
     public void glShaderSource(int shader, String[] string, IntBuffer length) {
         if (string.length != 1) {
         if (string.length != 1) {
             throw new UnsupportedOperationException("Today is not a good day");
             throw new UnsupportedOperationException("Today is not a good day");
@@ -355,186 +413,231 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         GLES20.glShaderSource(shader, string[0]);
         GLES20.glShaderSource(shader, string[0]);
     }
     }
 
 
+    @Override
     public void glStencilFuncSeparate(int face, int func, int ref, int mask) {
     public void glStencilFuncSeparate(int face, int func, int ref, int mask) {
         GLES20.glStencilFuncSeparate(face, func, ref, mask);
         GLES20.glStencilFuncSeparate(face, func, ref, mask);
     }
     }
 
 
+    @Override
     public void glStencilOpSeparate(int face, int sfail, int dpfail, int dppass) {
     public void glStencilOpSeparate(int face, int sfail, int dpfail, int dppass) {
         GLES20.glStencilOpSeparate(face, sfail, dpfail, dppass);
         GLES20.glStencilOpSeparate(face, sfail, dpfail, dppass);
     }
     }
 
 
+    @Override
     public void glTexImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, ByteBuffer data) {
     public void glTexImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, ByteBuffer data) {
         GLES20.glTexImage2D(target, level, internalFormat, width, height, 0, format, type, data);
         GLES20.glTexImage2D(target, level, internalFormat, width, height, 0, format, type, data);
     }
     }
 
 
+    @Override
     public void glTexParameterf(int target, int pname, float param) {
     public void glTexParameterf(int target, int pname, float param) {
         GLES20.glTexParameterf(target, pname, param);
         GLES20.glTexParameterf(target, pname, param);
     }
     }
 
 
+    @Override
     public void glTexParameteri(int target, int pname, int param) {
     public void glTexParameteri(int target, int pname, int param) {
         GLES20.glTexParameteri(target, pname, param);
         GLES20.glTexParameteri(target, pname, param);
     }
     }
 
 
+    @Override
     public void glTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, ByteBuffer data) {
     public void glTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, ByteBuffer data) {
         GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, data);
         GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, data);
     }
     }
 
 
+    @Override
     public void glUniform1(int location, FloatBuffer value) {
     public void glUniform1(int location, FloatBuffer value) {
         GLES20.glUniform1fv(location, getLimitCount(value, 1), value);
         GLES20.glUniform1fv(location, getLimitCount(value, 1), value);
     }
     }
 
 
+    @Override
     public void glUniform1(int location, IntBuffer value) {
     public void glUniform1(int location, IntBuffer value) {
         GLES20.glUniform1iv(location, getLimitCount(value, 1), value);
         GLES20.glUniform1iv(location, getLimitCount(value, 1), value);
     }
     }
 
 
+    @Override
     public void glUniform1f(int location, float v0) {
     public void glUniform1f(int location, float v0) {
         GLES20.glUniform1f(location, v0);
         GLES20.glUniform1f(location, v0);
     }
     }
 
 
+    @Override
     public void glUniform1i(int location, int v0) {
     public void glUniform1i(int location, int v0) {
         GLES20.glUniform1i(location, v0);
         GLES20.glUniform1i(location, v0);
     }
     }
 
 
+    @Override
     public void glUniform2(int location, IntBuffer value) {
     public void glUniform2(int location, IntBuffer value) {
         GLES20.glUniform2iv(location, getLimitCount(value, 2), value);
         GLES20.glUniform2iv(location, getLimitCount(value, 2), value);
     }
     }
 
 
+    @Override
     public void glUniform2(int location, FloatBuffer value) {
     public void glUniform2(int location, FloatBuffer value) {
         GLES20.glUniform2fv(location, getLimitCount(value, 2), value);
         GLES20.glUniform2fv(location, getLimitCount(value, 2), value);
     }
     }
 
 
+    @Override
     public void glUniform2f(int location, float v0, float v1) {
     public void glUniform2f(int location, float v0, float v1) {
         GLES20.glUniform2f(location, v0, v1);
         GLES20.glUniform2f(location, v0, v1);
     }
     }
 
 
+    @Override
     public void glUniform3(int location, IntBuffer value) {
     public void glUniform3(int location, IntBuffer value) {
         GLES20.glUniform3iv(location, getLimitCount(value, 3), value);
         GLES20.glUniform3iv(location, getLimitCount(value, 3), value);
     }
     }
 
 
+    @Override
     public void glUniform3(int location, FloatBuffer value) {
     public void glUniform3(int location, FloatBuffer value) {
         GLES20.glUniform3fv(location, getLimitCount(value, 3), value);
         GLES20.glUniform3fv(location, getLimitCount(value, 3), value);
     }
     }
 
 
+    @Override
     public void glUniform3f(int location, float v0, float v1, float v2) {
     public void glUniform3f(int location, float v0, float v1, float v2) {
         GLES20.glUniform3f(location, v0, v1, v2);
         GLES20.glUniform3f(location, v0, v1, v2);
     }
     }
 
 
+    @Override
     public void glUniform4(int location, FloatBuffer value) {
     public void glUniform4(int location, FloatBuffer value) {
         GLES20.glUniform4fv(location, getLimitCount(value, 4), value);
         GLES20.glUniform4fv(location, getLimitCount(value, 4), value);
     }
     }
 
 
+    @Override
     public void glUniform4(int location, IntBuffer value) {
     public void glUniform4(int location, IntBuffer value) {
         GLES20.glUniform4iv(location, getLimitCount(value, 4), value);
         GLES20.glUniform4iv(location, getLimitCount(value, 4), value);
     }
     }
 
 
+    @Override
     public void glUniform4f(int location, float v0, float v1, float v2, float v3) {
     public void glUniform4f(int location, float v0, float v1, float v2, float v3) {
         GLES20.glUniform4f(location, v0, v1, v2, v3);
         GLES20.glUniform4f(location, v0, v1, v2, v3);
     }
     }
 
 
+    @Override
     public void glUniformMatrix3(int location, boolean transpose, FloatBuffer value) {
     public void glUniformMatrix3(int location, boolean transpose, FloatBuffer value) {
         GLES20.glUniformMatrix3fv(location, getLimitCount(value, 3 * 3), transpose, value);
         GLES20.glUniformMatrix3fv(location, getLimitCount(value, 3 * 3), transpose, value);
     }
     }
 
 
+    @Override
     public void glUniformMatrix4(int location, boolean transpose, FloatBuffer value) {
     public void glUniformMatrix4(int location, boolean transpose, FloatBuffer value) {
         GLES20.glUniformMatrix4fv(location, getLimitCount(value, 4 * 4), transpose, value);
         GLES20.glUniformMatrix4fv(location, getLimitCount(value, 4 * 4), transpose, value);
     }
     }
 
 
+    @Override
     public void glUseProgram(int program) {
     public void glUseProgram(int program) {
         GLES20.glUseProgram(program);
         GLES20.glUseProgram(program);
     }
     }
 
 
+    @Override
     public void glVertexAttribPointer(int index, int size, int type, boolean normalized, int stride, long pointer) {
     public void glVertexAttribPointer(int index, int size, int type, boolean normalized, int stride, long pointer) {
         GLES20.glVertexAttribPointer(index, size, type, normalized, stride, (int)pointer);
         GLES20.glVertexAttribPointer(index, size, type, normalized, stride, (int)pointer);
     }
     }
 
 
+    @Override
     public void glViewport(int x, int y, int width, int height) {
     public void glViewport(int x, int y, int width, int height) {
         GLES20.glViewport(x, y, width, height);
         GLES20.glViewport(x, y, width, height);
     }
     }
 
 
+    @Override
     public void glBlitFramebufferEXT(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) {
     public void glBlitFramebufferEXT(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) {
         GLES30.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
         GLES30.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
     }
     }
 
 
+    @Override
     public void glBufferData(int target, IntBuffer data, int usage) {
     public void glBufferData(int target, IntBuffer data, int usage) {
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
     }
     }
 
 
+    @Override
     public void glBufferSubData(int target, long offset, IntBuffer data) {
     public void glBufferSubData(int target, long offset, IntBuffer data) {
         GLES20.glBufferSubData(target, (int)offset, getLimitBytes(data), data);
         GLES20.glBufferSubData(target, (int)offset, getLimitBytes(data), data);
     }
     }
 
 
+    @Override
     public void glDrawArraysInstancedARB(int mode, int first, int count, int primcount) {
     public void glDrawArraysInstancedARB(int mode, int first, int count, int primcount) {
         GLES30.glDrawArraysInstanced(mode, first, count, primcount);
         GLES30.glDrawArraysInstanced(mode, first, count, primcount);
     }
     }
 
 
+    @Override
     public void glDrawBuffers(IntBuffer bufs) {
     public void glDrawBuffers(IntBuffer bufs) {
         GLES30.glDrawBuffers(bufs.limit(), bufs);
         GLES30.glDrawBuffers(bufs.limit(), bufs);
     }
     }
 
 
+    @Override
     public void glDrawElementsInstancedARB(int mode, int indices_count, int type, long indices_buffer_offset, int primcount) {
     public void glDrawElementsInstancedARB(int mode, int indices_count, int type, long indices_buffer_offset, int primcount) {
         GLES30.glDrawElementsInstanced(mode, indices_count, type, (int)indices_buffer_offset, primcount);
         GLES30.glDrawElementsInstanced(mode, indices_count, type, (int)indices_buffer_offset, primcount);
     }
     }
 
 
+    @Override
     public void glGetMultisample(int pname, int index, FloatBuffer val) {
     public void glGetMultisample(int pname, int index, FloatBuffer val) {
         GLES31.glGetMultisamplefv(pname, index, val);
         GLES31.glGetMultisamplefv(pname, index, val);
     }
     }
 
 
+    @Override
     public void glRenderbufferStorageMultisampleEXT(int target, int samples, int internalformat, int width, int height) {
     public void glRenderbufferStorageMultisampleEXT(int target, int samples, int internalformat, int width, int height) {
         GLES30.glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
         GLES30.glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
     }
     }
 
 
+    @Override
     public void glTexImage2DMultisample(int target, int samples, int internalformat, int width, int height, boolean fixedsamplelocations) {
     public void glTexImage2DMultisample(int target, int samples, int internalformat, int width, int height, boolean fixedsamplelocations) {
         GLES31.glTexStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
         GLES31.glTexStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
     }
     }
 
 
+    @Override
     public void glVertexAttribDivisorARB(int index, int divisor) {
     public void glVertexAttribDivisorARB(int index, int divisor) {
         GLES30.glVertexAttribDivisor(index, divisor);
         GLES30.glVertexAttribDivisor(index, divisor);
     }
     }
 
 
+    @Override
     public void glBindFramebufferEXT(int param1, int param2) {
     public void glBindFramebufferEXT(int param1, int param2) {
         GLES20.glBindFramebuffer(param1, param2);
         GLES20.glBindFramebuffer(param1, param2);
     }
     }
 
 
+    @Override
     public void glBindRenderbufferEXT(int param1, int param2) {
     public void glBindRenderbufferEXT(int param1, int param2) {
         GLES20.glBindRenderbuffer(param1, param2);
         GLES20.glBindRenderbuffer(param1, param2);
     }
     }
 
 
+    @Override
     public int glCheckFramebufferStatusEXT(int param1) {
     public int glCheckFramebufferStatusEXT(int param1) {
         return GLES20.glCheckFramebufferStatus(param1);
         return GLES20.glCheckFramebufferStatus(param1);
     }
     }
 
 
+    @Override
     public void glDeleteFramebuffersEXT(IntBuffer param1) {
     public void glDeleteFramebuffersEXT(IntBuffer param1) {
         checkLimit(param1);
         checkLimit(param1);
         GLES20.glDeleteFramebuffers(param1.limit(), param1);
         GLES20.glDeleteFramebuffers(param1.limit(), param1);
     }
     }
 
 
+    @Override
     public void glDeleteRenderbuffersEXT(IntBuffer param1) {
     public void glDeleteRenderbuffersEXT(IntBuffer param1) {
         checkLimit(param1);
         checkLimit(param1);
         GLES20.glDeleteRenderbuffers(param1.limit(), param1);
         GLES20.glDeleteRenderbuffers(param1.limit(), param1);
     }
     }
 
 
+    @Override
     public void glFramebufferRenderbufferEXT(int param1, int param2, int param3, int param4) {
     public void glFramebufferRenderbufferEXT(int param1, int param2, int param3, int param4) {
         GLES20.glFramebufferRenderbuffer(param1, param2, param3, param4);
         GLES20.glFramebufferRenderbuffer(param1, param2, param3, param4);
     }
     }
 
 
+    @Override
     public void glFramebufferTexture2DEXT(int param1, int param2, int param3, int param4, int param5) {
     public void glFramebufferTexture2DEXT(int param1, int param2, int param3, int param4, int param5) {
         GLES20.glFramebufferTexture2D(param1, param2, param3, param4, param5);
         GLES20.glFramebufferTexture2D(param1, param2, param3, param4, param5);
     }
     }
 
 
+    @Override
     public void glGenFramebuffersEXT(IntBuffer param1) {
     public void glGenFramebuffersEXT(IntBuffer param1) {
         checkLimit(param1);
         checkLimit(param1);
         GLES20.glGenFramebuffers(param1.limit(), param1);
         GLES20.glGenFramebuffers(param1.limit(), param1);
     }
     }
 
 
+    @Override
     public void glGenRenderbuffersEXT(IntBuffer param1) {
     public void glGenRenderbuffersEXT(IntBuffer param1) {
         checkLimit(param1);
         checkLimit(param1);
         GLES20.glGenRenderbuffers(param1.limit(), param1);
         GLES20.glGenRenderbuffers(param1.limit(), param1);
     }
     }
 
 
+    @Override
     public void glGenerateMipmapEXT(int param1) {
     public void glGenerateMipmapEXT(int param1) {
         GLES20.glGenerateMipmap(param1);
         GLES20.glGenerateMipmap(param1);
     }
     }
 
 
+    @Override
     public void glRenderbufferStorageEXT(int param1, int param2, int param3, int param4) {
     public void glRenderbufferStorageEXT(int param1, int param2, int param3, int param4) {
         GLES20.glRenderbufferStorage(param1, param2, param3, param4);
         GLES20.glRenderbufferStorage(param1, param2, param3, param4);
     }
     }
@@ -570,16 +673,20 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         GLES30.glFramebufferTextureLayer(target, attachment, texture, level, layer);
         GLES30.glFramebufferTextureLayer(target, attachment, texture, level, layer);
     }
     }
 
 
+    @Override
     public void glAlphaFunc(int func, float ref) {
     public void glAlphaFunc(int func, float ref) {
     }
     }
     
     
+    @Override
     public void glPointSize(float size) {
     public void glPointSize(float size) {
     }
     }
 
 
+    @Override
     public void glPolygonMode(int face, int mode) {
     public void glPolygonMode(int face, int mode) {
     }
     }
 
 
     // Wrapper to DrawBuffers as there's no DrawBuffer method in GLES
     // Wrapper to DrawBuffers as there's no DrawBuffer method in GLES
+    @Override
     public void glDrawBuffer(int mode) {
     public void glDrawBuffer(int mode) {
         tmpBuff.clear();
         tmpBuff.clear();
         tmpBuff.put(0, mode);
         tmpBuff.put(0, mode);
@@ -587,25 +694,30 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         glDrawBuffers(tmpBuff);
         glDrawBuffers(tmpBuff);
     }
     }
 
 
+    @Override
     public void glReadBuffer(int mode) {
     public void glReadBuffer(int mode) {
         GLES30.glReadBuffer(mode);
         GLES30.glReadBuffer(mode);
     }
     }
 
 
+    @Override
     public void glCompressedTexImage3D(int target, int level, int internalFormat, int width, int height, int depth,
     public void glCompressedTexImage3D(int target, int level, int internalFormat, int width, int height, int depth,
                                            int border, ByteBuffer data) {
                                            int border, ByteBuffer data) {
         GLES30.glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, getLimitBytes(data), data);
         GLES30.glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, getLimitBytes(data), data);
     }
     }
 
 
+    @Override
     public void glCompressedTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width,
     public void glCompressedTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width,
                                               int height, int depth, int format, ByteBuffer data) {
                                               int height, int depth, int format, ByteBuffer data) {
         GLES30.glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, getLimitBytes(data), data);
         GLES30.glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, getLimitBytes(data), data);
     }
     }
 
 
+    @Override
     public void glTexImage3D(int target, int level, int internalFormat, int width, int height, int depth, int border,
     public void glTexImage3D(int target, int level, int internalFormat, int width, int height, int depth, int border,
                                  int format, int type, ByteBuffer data) {
                                  int format, int type, ByteBuffer data) {
         GLES30.glTexImage3D(target, level, internalFormat, width, height, depth, border, format, type, data);
         GLES30.glTexImage3D(target, level, internalFormat, width, height, depth, border, format, type, data);
     }
     }
 
 
+    @Override
     public void glTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height,
     public void glTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height,
                                     int depth, int format, int type, ByteBuffer data) {
                                     int depth, int format, int type, ByteBuffer data) {
         GLES30.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data);
         GLES30.glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data);

+ 1 - 0
jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java

@@ -204,6 +204,7 @@ public class JmeAndroidSystem extends JmeSystemDelegate {
     public void showSoftKeyboard(final boolean show) {
     public void showSoftKeyboard(final boolean show) {
         view.getHandler().post(new Runnable() {
         view.getHandler().post(new Runnable() {
 
 
+            @Override
             public void run() {
             public void run() {
                 InputMethodManager manager =
                 InputMethodManager manager =
                         (InputMethodManager)view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                         (InputMethodManager)view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

+ 6 - 2
jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -202,6 +202,7 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
 
 
         // Setup unhandled Exception Handler
         // Setup unhandled Exception Handler
         Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
         Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+            @Override
             public void uncaughtException(Thread thread, Throwable thrown) {
             public void uncaughtException(Thread thread, Throwable thrown) {
                 listener.handleError("Exception thrown in " + thread.toString(), thrown);
                 listener.handleError("Exception thrown in " + thread.toString(), thrown);
             }
             }
@@ -254,7 +255,7 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
         }
         }
 
 
         if (settings.getFrameRate() > 0) {
         if (settings.getFrameRate() > 0) {
-            minFrameDuration = (long)(1000d / (double)settings.getFrameRate()); // ms
+            minFrameDuration = (long)(1000d / settings.getFrameRate()); // ms
             logger.log(Level.FINE, "Setting min tpf: {0}ms", minFrameDuration);
             logger.log(Level.FINE, "Setting min tpf: {0}ms", minFrameDuration);
         } else {
         } else {
             minFrameDuration = 0;
             minFrameDuration = 0;
@@ -414,6 +415,7 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
         }
         }
     }
     }
 
 
+    @Override
     public void requestDialog(final int id, final String title, final String initialValue, final SoftTextDialogInputListener listener) {
     public void requestDialog(final int id, final String title, final String initialValue, final SoftTextDialogInputListener listener) {
         logger.log(Level.FINE, "requestDialog: title: {0}, initialValue: {1}",
         logger.log(Level.FINE, "requestDialog: title: {0}, initialValue: {1}",
                 new Object[]{title, initialValue});
                 new Object[]{title, initialValue});
@@ -457,6 +459,7 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
 
 
                 AlertDialog dialogTextInput = new AlertDialog.Builder(view.getContext()).setTitle(title).setView(layoutTextDialogInput).setPositiveButton("OK",
                 AlertDialog dialogTextInput = new AlertDialog.Builder(view.getContext()).setTitle(title).setView(layoutTextDialogInput).setPositiveButton("OK",
                         new DialogInterface.OnClickListener() {
                         new DialogInterface.OnClickListener() {
+                            @Override
                             public void onClick(DialogInterface dialog, int whichButton) {
                             public void onClick(DialogInterface dialog, int whichButton) {
                                 /* User clicked OK, send COMPLETE action
                                 /* User clicked OK, send COMPLETE action
                                  * and text */
                                  * and text */
@@ -464,6 +467,7 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
                             }
                             }
                         }).setNegativeButton("Cancel",
                         }).setNegativeButton("Cancel",
                         new DialogInterface.OnClickListener() {
                         new DialogInterface.OnClickListener() {
+                            @Override
                             public void onClick(DialogInterface dialog, int whichButton) {
                             public void onClick(DialogInterface dialog, int whichButton) {
                                 /* User clicked CANCEL, send CANCEL action
                                 /* User clicked CANCEL, send CANCEL action
                                  * and text */
                                  * and text */

+ 2 - 1
jme3-android/src/main/java/com/jme3/texture/plugins/AndroidBufferImageLoader.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2014 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -67,6 +67,7 @@ public class AndroidBufferImageLoader implements AssetLoader {
         }
         }
     }
     }
     
     
+    @Override
     public Object load(AssetInfo assetInfo) throws IOException {
     public Object load(AssetInfo assetInfo) throws IOException {
         Bitmap bitmap = null;
         Bitmap bitmap = null;
         Image.Format format;
         Image.Format format;

+ 1 - 0
jme3-android/src/main/java/com/jme3/texture/plugins/AndroidNativeImageLoader.java

@@ -25,6 +25,7 @@ public class AndroidNativeImageLoader  implements AssetLoader {
     
     
     private static native Image load(InputStream in, boolean flipY, byte[] tmpArray) throws IOException;
     private static native Image load(InputStream in, boolean flipY, byte[] tmpArray) throws IOException;
     
     
+    @Override
     public Image load(AssetInfo info) throws IOException {
     public Image load(AssetInfo info) throws IOException {
         boolean flip = ((TextureKey) info.getKey()).isFlipY();
         boolean flip = ((TextureKey) info.getKey()).isFlipY();
         InputStream in = null;
         InputStream in = null;

+ 4 - 0
jme3-android/src/main/java/com/jme3/util/RingBuffer.java

@@ -49,6 +49,7 @@ public class RingBuffer<T> implements Iterable<T> {
         return item;
         return item;
     }
     }
 
 
+    @Override
     public Iterator<T> iterator() {
     public Iterator<T> iterator() {
         return new RingBufferIterator();
         return new RingBufferIterator();
     }
     }
@@ -58,14 +59,17 @@ public class RingBuffer<T> implements Iterable<T> {
 
 
         private int i = 0;
         private int i = 0;
 
 
+        @Override
         public boolean hasNext() {
         public boolean hasNext() {
             return i < count;
             return i < count;
         }
         }
 
 
+        @Override
         public void remove() {
         public void remove() {
             throw new UnsupportedOperationException();
             throw new UnsupportedOperationException();
         }
         }
 
 
+        @Override
         public T next() {
         public T next() {
             if (!hasNext()) {
             if (!hasNext()) {
                 throw new NoSuchElementException();
                 throw new NoSuchElementException();

+ 2 - 2
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/file/Structure.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -252,7 +252,7 @@ public class Structure implements Cloneable {
         Object fieldValue = this.getFieldValue("ID");
         Object fieldValue = this.getFieldValue("ID");
         if (fieldValue instanceof Structure) {
         if (fieldValue instanceof Structure) {
             Structure id = (Structure) fieldValue;
             Structure id = (Structure) fieldValue;
-            return id == null ? null : id.getFieldValue("name").toString().substring(2);// blender adds 2-charactes as a name prefix
+            return id.getFieldValue("name").toString().substring(2);// blender adds 2-charactes as a name prefix
         }
         }
         Object name = this.getFieldValue("name", null);
         Object name = this.getFieldValue("name", null);
         return name == null ? null : name.toString().substring(2);
         return name == null ? null : name.toString().substring(2);

+ 9 - 1
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/materials/MaterialHelper.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -100,9 +100,11 @@ public class MaterialHelper extends AbstractBlenderHelper {
         super(blenderVersion, blenderContext);
         super(blenderVersion, blenderContext);
         // setting alpha masks
         // setting alpha masks
         alphaMasks.put(ALPHA_MASK_NONE, new IAlphaMask() {
         alphaMasks.put(ALPHA_MASK_NONE, new IAlphaMask() {
+            @Override
             public void setImageSize(int width, int height) {
             public void setImageSize(int width, int height) {
             }
             }
 
 
+            @Override
             public byte getAlpha(float x, float y) {
             public byte getAlpha(float x, float y) {
                 return (byte) 255;
                 return (byte) 255;
             }
             }
@@ -111,11 +113,13 @@ public class MaterialHelper extends AbstractBlenderHelper {
             private float   r;
             private float   r;
             private float[] center;
             private float[] center;
 
 
+            @Override
             public void setImageSize(int width, int height) {
             public void setImageSize(int width, int height) {
                 r = Math.min(width, height) * 0.5f;
                 r = Math.min(width, height) * 0.5f;
                 center = new float[] { width * 0.5f, height * 0.5f };
                 center = new float[] { width * 0.5f, height * 0.5f };
             }
             }
 
 
+            @Override
             public byte getAlpha(float x, float y) {
             public byte getAlpha(float x, float y) {
                 float d = FastMath.abs(FastMath.sqrt((x - center[0]) * (x - center[0]) + (y - center[1]) * (y - center[1])));
                 float d = FastMath.abs(FastMath.sqrt((x - center[0]) * (x - center[0]) + (y - center[1]) * (y - center[1])));
                 return (byte) (d >= r ? 0 : 255);
                 return (byte) (d >= r ? 0 : 255);
@@ -125,11 +129,13 @@ public class MaterialHelper extends AbstractBlenderHelper {
             private float   r;
             private float   r;
             private float[] center;
             private float[] center;
 
 
+            @Override
             public void setImageSize(int width, int height) {
             public void setImageSize(int width, int height) {
                 r = Math.min(width, height) * 0.5f;
                 r = Math.min(width, height) * 0.5f;
                 center = new float[] { width * 0.5f, height * 0.5f };
                 center = new float[] { width * 0.5f, height * 0.5f };
             }
             }
 
 
+            @Override
             public byte getAlpha(float x, float y) {
             public byte getAlpha(float x, float y) {
                 float d = FastMath.abs(FastMath.sqrt((x - center[0]) * (x - center[0]) + (y - center[1]) * (y - center[1])));
                 float d = FastMath.abs(FastMath.sqrt((x - center[0]) * (x - center[0]) + (y - center[1]) * (y - center[1])));
                 return (byte) (d >= r ? 0 : -255.0f * d / r + 255.0f);
                 return (byte) (d >= r ? 0 : -255.0f * d / r + 255.0f);
@@ -139,11 +145,13 @@ public class MaterialHelper extends AbstractBlenderHelper {
             private float   r;
             private float   r;
             private float[] center;
             private float[] center;
 
 
+            @Override
             public void setImageSize(int width, int height) {
             public void setImageSize(int width, int height) {
                 r = Math.min(width, height) * 0.5f;
                 r = Math.min(width, height) * 0.5f;
                 center = new float[] { width * 0.5f, height * 0.5f };
                 center = new float[] { width * 0.5f, height * 0.5f };
             }
             }
 
 
+            @Override
             public byte getAlpha(float x, float y) {
             public byte getAlpha(float x, float y) {
                 float d = FastMath.abs(FastMath.sqrt((x - center[0]) * (x - center[0]) + (y - center[1]) * (y - center[1]))) / r;
                 float d = FastMath.abs(FastMath.sqrt((x - center[0]) * (x - center[0]) + (y - center[1]) * (y - center[1]))) / r;
                 return d >= 1.0f ? 0 : (byte) ((-FastMath.sqrt((2.0f - d) * d) + 1.0f) * 255.0f);
                 return d >= 1.0f ? 0 : (byte) ((-FastMath.sqrt((2.0f - d) * d) + 1.0f) * 255.0f);

+ 3 - 1
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/math/DQuaternion.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -554,6 +554,7 @@ public final class DQuaternion implements Savable, Cloneable, java.io.Serializab
 
 
     }
     }
 
 
+    @Override
     public void write(JmeExporter e) throws IOException {
     public void write(JmeExporter e) throws IOException {
         OutputCapsule cap = e.getCapsule(this);
         OutputCapsule cap = e.getCapsule(this);
         cap.write(x, "x", 0);
         cap.write(x, "x", 0);
@@ -562,6 +563,7 @@ public final class DQuaternion implements Savable, Cloneable, java.io.Serializab
         cap.write(w, "w", 1);
         cap.write(w, "w", 1);
     }
     }
 
 
+    @Override
     public void read(JmeImporter e) throws IOException {
     public void read(JmeImporter e) throws IOException {
         InputCapsule cap = e.getCapsule(this);
         InputCapsule cap = e.getCapsule(this);
         x = cap.readFloat("x", 0);
         x = cap.readFloat("x", 0);

+ 3 - 1
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/math/DTransform.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -158,6 +158,7 @@ public final class DTransform implements Savable, Cloneable, java.io.Serializabl
         return this.getClass().getSimpleName() + "[ " + translation.x + ", " + translation.y + ", " + translation.z + "]\n" + "[ " + rotation.x + ", " + rotation.y + ", " + rotation.z + ", " + rotation.w + "]\n" + "[ " + scale.x + " , " + scale.y + ", " + scale.z + "]";
         return this.getClass().getSimpleName() + "[ " + translation.x + ", " + translation.y + ", " + translation.z + "]\n" + "[ " + rotation.x + ", " + rotation.y + ", " + rotation.z + ", " + rotation.w + "]\n" + "[ " + scale.x + " , " + scale.y + ", " + scale.z + "]";
     }
     }
 
 
+    @Override
     public void write(JmeExporter e) throws IOException {
     public void write(JmeExporter e) throws IOException {
         OutputCapsule capsule = e.getCapsule(this);
         OutputCapsule capsule = e.getCapsule(this);
         capsule.write(rotation, "rot", new DQuaternion());
         capsule.write(rotation, "rot", new DQuaternion());
@@ -165,6 +166,7 @@ public final class DTransform implements Savable, Cloneable, java.io.Serializabl
         capsule.write(scale, "scale", Vector3d.UNIT_XYZ);
         capsule.write(scale, "scale", Vector3d.UNIT_XYZ);
     }
     }
 
 
+    @Override
     public void read(JmeImporter e) throws IOException {
     public void read(JmeImporter e) throws IOException {
         InputCapsule capsule = e.getCapsule(this);
         InputCapsule capsule = e.getCapsule(this);
 
 

+ 3 - 1
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/math/Vector3d.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2019 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -851,6 +851,7 @@ public final class Vector3d implements Savable, Cloneable, Serializable {
         return "(" + x + ", " + y + ", " + z + ")";
         return "(" + x + ", " + y + ", " + z + ")";
     }
     }
 
 
+    @Override
     public void write(JmeExporter e) throws IOException {
     public void write(JmeExporter e) throws IOException {
         OutputCapsule capsule = e.getCapsule(this);
         OutputCapsule capsule = e.getCapsule(this);
         capsule.write(x, "x", 0);
         capsule.write(x, "x", 0);
@@ -858,6 +859,7 @@ public final class Vector3d implements Savable, Cloneable, Serializable {
         capsule.write(z, "z", 0);
         capsule.write(z, "z", 0);
     }
     }
 
 
+    @Override
     public void read(JmeImporter e) throws IOException {
     public void read(JmeImporter e) throws IOException {
         InputCapsule capsule = e.getCapsule(this);
         InputCapsule capsule = e.getCapsule(this);
         x = capsule.readDouble("x", 0);
         x = capsule.readDouble("x", 0);

+ 1 - 1
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/meshes/MeshBuffers.java

@@ -251,7 +251,7 @@ import com.jme3.util.BufferUtils;
                     }
                     }
                 }
                 }
 
 
-                if (vertexGroups != null && vertexGroups.size() > 0) {
+                if (vertexGroups.size() > 0) {
                     Map<Float, Integer> group = vertexGroups.get(i);
                     Map<Float, Integer> group = vertexGroups.get(i);
                     maximumWeightsPerVertex = Math.max(maximumWeightsPerVertex, group.size());
                     maximumWeightsPerVertex = Math.max(maximumWeightsPerVertex, group.size());
                     boneWeightAndIndexes.add(new TreeMap<Float, Integer>(group));
                     boneWeightAndIndexes.add(new TreeMap<Float, Integer>(group));

+ 1 - 0
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/GeneratedTexture.java

@@ -160,6 +160,7 @@ import com.jme3.util.TempVars;
         Vector3f[] uvsArray = uvs.toArray(new Vector3f[uvs.size()]);
         Vector3f[] uvsArray = uvs.toArray(new Vector3f[uvs.size()]);
         BoundingBox boundingBox = UVCoordinatesGenerator.getBoundingBox(geometries);
         BoundingBox boundingBox = UVCoordinatesGenerator.getBoundingBox(geometries);
         Set<TriangleTextureElement> triangleTextureElements = new TreeSet<TriangleTextureElement>(new Comparator<TriangleTextureElement>() {
         Set<TriangleTextureElement> triangleTextureElements = new TreeSet<TriangleTextureElement>(new Comparator<TriangleTextureElement>() {
+            @Override
             public int compare(TriangleTextureElement o1, TriangleTextureElement o2) {
             public int compare(TriangleTextureElement o1, TriangleTextureElement o2) {
                 return o1.faceIndex - o2.faceIndex;
                 return o1.faceIndex - o2.faceIndex;
             }
             }

+ 2 - 0
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/TriangulatedTexture.java

@@ -70,6 +70,7 @@ import com.jme3.util.BufferUtils;
     public TriangulatedTexture(Texture2D texture2d, List<Vector2f> uvs, BlenderContext blenderContext) {
     public TriangulatedTexture(Texture2D texture2d, List<Vector2f> uvs, BlenderContext blenderContext) {
         maxTextureSize = blenderContext.getBlenderKey().getMaxTextureSize();
         maxTextureSize = blenderContext.getBlenderKey().getMaxTextureSize();
         faceTextures = new TreeSet<TriangleTextureElement>(new Comparator<TriangleTextureElement>() {
         faceTextures = new TreeSet<TriangleTextureElement>(new Comparator<TriangleTextureElement>() {
+            @Override
             public int compare(TriangleTextureElement o1, TriangleTextureElement o2) {
             public int compare(TriangleTextureElement o1, TriangleTextureElement o2) {
                 return o1.faceIndex - o2.faceIndex;
                 return o1.faceIndex - o2.faceIndex;
             }
             }
@@ -184,6 +185,7 @@ import com.jme3.util.BufferUtils;
             // sorting the parts by their height (from highest to the lowest)
             // sorting the parts by their height (from highest to the lowest)
             List<TriangleTextureElement> list = new ArrayList<TriangleTextureElement>(faceTextures);
             List<TriangleTextureElement> list = new ArrayList<TriangleTextureElement>(faceTextures);
             Collections.sort(list, new Comparator<TriangleTextureElement>() {
             Collections.sort(list, new Comparator<TriangleTextureElement>() {
+                @Override
                 public int compare(TriangleTextureElement o1, TriangleTextureElement o2) {
                 public int compare(TriangleTextureElement o1, TriangleTextureElement o2) {
                     return o2.image.getHeight() - o1.image.getHeight();
                     return o2.image.getHeight() - o1.image.getHeight();
                 }
                 }

+ 1 - 0
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/blending/AbstractTextureBlender.java

@@ -103,6 +103,7 @@ import com.jme3.texture.Image;
         }
         }
     }
     }
 
 
+    @Override
     public void copyBlendingData(TextureBlender textureBlender) {
     public void copyBlendingData(TextureBlender textureBlender) {
         if (textureBlender instanceof AbstractTextureBlender) {
         if (textureBlender instanceof AbstractTextureBlender) {
             flag = ((AbstractTextureBlender) textureBlender).flag;
             flag = ((AbstractTextureBlender) textureBlender).flag;

+ 1 - 0
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/blending/TextureBlenderLuminance.java

@@ -43,6 +43,7 @@ public class TextureBlenderLuminance extends AbstractTextureBlender {
         super(flag, negateTexture, blendType, materialColor, color, blendFactor);
         super(flag, negateTexture, blendType, materialColor, color, blendFactor);
     }
     }
 
 
+    @Override
     public Image blend(Image image, Image baseImage, BlenderContext blenderContext) {
     public Image blend(Image image, Image baseImage, BlenderContext blenderContext) {
         this.prepareImagesForBlending(image, baseImage);
         this.prepareImagesForBlending(image, baseImage);
 
 

+ 34 - 2
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/NoiseGenerator.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -109,30 +109,36 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
     static {
     static {
         noiseFunctions.put(Integer.valueOf(0), new NoiseFunction() {
         noiseFunctions.put(Integer.valueOf(0), new NoiseFunction() {
             // originalBlenderNoise
             // originalBlenderNoise
+            @Override
             public float execute(float x, float y, float z) {
             public float execute(float x, float y, float z) {
                 return NoiseFunctions.originalBlenderNoise(x, y, z);
                 return NoiseFunctions.originalBlenderNoise(x, y, z);
             }
             }
 
 
+            @Override
             public float executeSigned(float x, float y, float z) {
             public float executeSigned(float x, float y, float z) {
                 return 2.0f * NoiseFunctions.originalBlenderNoise(x, y, z) - 1.0f;
                 return 2.0f * NoiseFunctions.originalBlenderNoise(x, y, z) - 1.0f;
             }
             }
         });
         });
         noiseFunctions.put(Integer.valueOf(1), new NoiseFunction() {
         noiseFunctions.put(Integer.valueOf(1), new NoiseFunction() {
             // orgPerlinNoise
             // orgPerlinNoise
+            @Override
             public float execute(float x, float y, float z) {
             public float execute(float x, float y, float z) {
                 return 0.5f + 0.5f * NoiseFunctions.noise3Perlin(x, y, z);
                 return 0.5f + 0.5f * NoiseFunctions.noise3Perlin(x, y, z);
             }
             }
 
 
+            @Override
             public float executeSigned(float x, float y, float z) {
             public float executeSigned(float x, float y, float z) {
                 return NoiseFunctions.noise3Perlin(x, y, z);
                 return NoiseFunctions.noise3Perlin(x, y, z);
             }
             }
         });
         });
         noiseFunctions.put(Integer.valueOf(2), new NoiseFunction() {
         noiseFunctions.put(Integer.valueOf(2), new NoiseFunction() {
             // newPerlin
             // newPerlin
+            @Override
             public float execute(float x, float y, float z) {
             public float execute(float x, float y, float z) {
                 return 0.5f + 0.5f * NoiseFunctions.newPerlin(x, y, z);
                 return 0.5f + 0.5f * NoiseFunctions.newPerlin(x, y, z);
             }
             }
 
 
+            @Override
             public float executeSigned(float x, float y, float z) {
             public float executeSigned(float x, float y, float z) {
                 return this.execute(x, y, z);
                 return this.execute(x, y, z);
             }
             }
@@ -142,11 +148,13 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
             private final float[] pa = new float[12];
             private final float[] pa = new float[12];
 
 
             // voronoi_F1
             // voronoi_F1
+            @Override
             public float execute(float x, float y, float z) {
             public float execute(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return da[0];
                 return da[0];
             }
             }
 
 
+            @Override
             public float executeSigned(float x, float y, float z) {
             public float executeSigned(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return 2.0f * da[0] - 1.0f;
                 return 2.0f * da[0] - 1.0f;
@@ -157,11 +165,13 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
             private final float[] pa = new float[12];
             private final float[] pa = new float[12];
 
 
             // voronoi_F2
             // voronoi_F2
+            @Override
             public float execute(float x, float y, float z) {
             public float execute(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return da[1];
                 return da[1];
             }
             }
 
 
+            @Override
             public float executeSigned(float x, float y, float z) {
             public float executeSigned(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return 2.0f * da[1] - 1.0f;
                 return 2.0f * da[1] - 1.0f;
@@ -172,11 +182,13 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
             private final float[] pa = new float[12];
             private final float[] pa = new float[12];
 
 
             // voronoi_F3
             // voronoi_F3
+            @Override
             public float execute(float x, float y, float z) {
             public float execute(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return da[2];
                 return da[2];
             }
             }
 
 
+            @Override
             public float executeSigned(float x, float y, float z) {
             public float executeSigned(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return 2.0f * da[2] - 1.0f;
                 return 2.0f * da[2] - 1.0f;
@@ -187,11 +199,13 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
             private final float[] pa = new float[12];
             private final float[] pa = new float[12];
 
 
             // voronoi_F4
             // voronoi_F4
+            @Override
             public float execute(float x, float y, float z) {
             public float execute(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return da[3];
                 return da[3];
             }
             }
 
 
+            @Override
             public float executeSigned(float x, float y, float z) {
             public float executeSigned(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return 2.0f * da[3] - 1.0f;
                 return 2.0f * da[3] - 1.0f;
@@ -202,11 +216,13 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
             private final float[] pa = new float[12];
             private final float[] pa = new float[12];
 
 
             // voronoi_F1F2
             // voronoi_F1F2
+            @Override
             public float execute(float x, float y, float z) {
             public float execute(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return da[1] - da[0];
                 return da[1] - da[0];
             }
             }
 
 
+            @Override
             public float executeSigned(float x, float y, float z) {
             public float executeSigned(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return 2.0f * (da[1] - da[0]) - 1.0f;
                 return 2.0f * (da[1] - da[0]) - 1.0f;
@@ -216,11 +232,13 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
             private final NoiseFunction voronoiF1F2NoiseFunction = noiseFunctions.get(Integer.valueOf(7));
             private final NoiseFunction voronoiF1F2NoiseFunction = noiseFunctions.get(Integer.valueOf(7));
 
 
             // voronoi_Cr
             // voronoi_Cr
+            @Override
             public float execute(float x, float y, float z) {
             public float execute(float x, float y, float z) {
                 float t = 10 * voronoiF1F2NoiseFunction.execute(x, y, z);
                 float t = 10 * voronoiF1F2NoiseFunction.execute(x, y, z);
                 return t > 1.0f ? 1.0f : t;
                 return t > 1.0f ? 1.0f : t;
             }
             }
 
 
+            @Override
             public float executeSigned(float x, float y, float z) {
             public float executeSigned(float x, float y, float z) {
                 float t = 10.0f * voronoiF1F2NoiseFunction.execute(x, y, z);
                 float t = 10.0f * voronoiF1F2NoiseFunction.execute(x, y, z);
                 return t > 1.0f ? 1.0f : 2.0f * t - 1.0f;
                 return t > 1.0f ? 1.0f : 2.0f * t - 1.0f;
@@ -228,6 +246,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         });
         noiseFunctions.put(Integer.valueOf(14), new NoiseFunction() {
         noiseFunctions.put(Integer.valueOf(14), new NoiseFunction() {
             // cellNoise
             // cellNoise
+            @Override
             public float execute(float x, float y, float z) {
             public float execute(float x, float y, float z) {
                 int xi = (int) FastMath.floor(x);
                 int xi = (int) FastMath.floor(x);
                 int yi = (int) FastMath.floor(y);
                 int yi = (int) FastMath.floor(y);
@@ -237,6 +256,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
                 return (n * (n * n * 15731 + 789221) + 1376312589) / 4294967296.0f;
                 return (n * (n * n * 15731 + 789221) + 1376312589) / 4294967296.0f;
             }
             }
 
 
+            @Override
             public float executeSigned(float x, float y, float z) {
             public float executeSigned(float x, float y, float z) {
                 return 2.0f * this.execute(x, y, z) - 1.0f;
                 return 2.0f * this.execute(x, y, z) - 1.0f;
             }
             }
@@ -248,24 +268,28 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
     static {
     static {
         distanceFunctions.put(Integer.valueOf(0), new DistanceFunction() {
         distanceFunctions.put(Integer.valueOf(0), new DistanceFunction() {
             // real distance
             // real distance
+            @Override
             public float execute(float x, float y, float z, float e) {
             public float execute(float x, float y, float z, float e) {
                 return (float) Math.sqrt(x * x + y * y + z * z);
                 return (float) Math.sqrt(x * x + y * y + z * z);
             }
             }
         });
         });
         distanceFunctions.put(Integer.valueOf(1), new DistanceFunction() {
         distanceFunctions.put(Integer.valueOf(1), new DistanceFunction() {
             // distance squared
             // distance squared
+            @Override
             public float execute(float x, float y, float z, float e) {
             public float execute(float x, float y, float z, float e) {
                 return x * x + y * y + z * z;
                 return x * x + y * y + z * z;
             }
             }
         });
         });
         distanceFunctions.put(Integer.valueOf(2), new DistanceFunction() {
         distanceFunctions.put(Integer.valueOf(2), new DistanceFunction() {
             // manhattan/taxicab/cityblock distance
             // manhattan/taxicab/cityblock distance
+            @Override
             public float execute(float x, float y, float z, float e) {
             public float execute(float x, float y, float z, float e) {
                 return FastMath.abs(x) + FastMath.abs(y) + FastMath.abs(z);
                 return FastMath.abs(x) + FastMath.abs(y) + FastMath.abs(z);
             }
             }
         });
         });
         distanceFunctions.put(Integer.valueOf(3), new DistanceFunction() {
         distanceFunctions.put(Integer.valueOf(3), new DistanceFunction() {
             // Chebychev
             // Chebychev
+            @Override
             public float execute(float x, float y, float z, float e) {
             public float execute(float x, float y, float z, float e) {
                 x = FastMath.abs(x);
                 x = FastMath.abs(x);
                 y = FastMath.abs(y);
                 y = FastMath.abs(y);
@@ -276,6 +300,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         });
         distanceFunctions.put(Integer.valueOf(4), new DistanceFunction() {
         distanceFunctions.put(Integer.valueOf(4), new DistanceFunction() {
             // Minkovsky, preset exponent 0.5 (MinkovskyH)
             // Minkovsky, preset exponent 0.5 (MinkovskyH)
+            @Override
             public float execute(float x, float y, float z, float e) {
             public float execute(float x, float y, float z, float e) {
                 float d = (float) (Math.sqrt(FastMath.abs(x)) + Math.sqrt(FastMath.abs(y)) + Math.sqrt(FastMath.abs(z)));
                 float d = (float) (Math.sqrt(FastMath.abs(x)) + Math.sqrt(FastMath.abs(y)) + Math.sqrt(FastMath.abs(z)));
                 return d * d;
                 return d * d;
@@ -283,6 +308,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         });
         distanceFunctions.put(Integer.valueOf(5), new DistanceFunction() {
         distanceFunctions.put(Integer.valueOf(5), new DistanceFunction() {
             // Minkovsky, preset exponent 0.25 (Minkovsky4)
             // Minkovsky, preset exponent 0.25 (Minkovsky4)
+            @Override
             public float execute(float x, float y, float z, float e) {
             public float execute(float x, float y, float z, float e) {
                 x *= x;
                 x *= x;
                 y *= y;
                 y *= y;
@@ -292,6 +318,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         });
         distanceFunctions.put(Integer.valueOf(6), new DistanceFunction() {
         distanceFunctions.put(Integer.valueOf(6), new DistanceFunction() {
             // Minkovsky, general case
             // Minkovsky, general case
+            @Override
             public float execute(float x, float y, float z, float e) {
             public float execute(float x, float y, float z, float e) {
                 return (float) Math.pow(Math.pow(FastMath.abs(x), e) + Math.pow(FastMath.abs(y), e) + Math.pow(FastMath.abs(z), e), 1.0f / e);
                 return (float) Math.pow(Math.pow(FastMath.abs(x), e) + Math.pow(FastMath.abs(y), e) + Math.pow(FastMath.abs(z), e), 1.0f / e);
             }
             }
@@ -303,6 +330,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
     static {
     static {
         musgraveFunctions.put(Integer.valueOf(TEX_MFRACTAL), new MusgraveFunction() {
         musgraveFunctions.put(Integer.valueOf(TEX_MFRACTAL), new MusgraveFunction() {
 
 
+            @Override
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
                 float rmd, value = 1.0f, pwr = 1.0f, pwHL = (float) Math.pow(musgraveData.lacunarity, -musgraveData.h);
                 float rmd, value = 1.0f, pwr = 1.0f, pwHL = (float) Math.pow(musgraveData.lacunarity, -musgraveData.h);
 
 
@@ -322,6 +350,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         });
         musgraveFunctions.put(Integer.valueOf(TEX_RIDGEDMF), new MusgraveFunction() {
         musgraveFunctions.put(Integer.valueOf(TEX_RIDGEDMF), new MusgraveFunction() {
 
 
+            @Override
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
                 float result, signal, weight;
                 float result, signal, weight;
                 float pwHL = (float) Math.pow(musgraveData.lacunarity, -musgraveData.h);
                 float pwHL = (float) Math.pow(musgraveData.lacunarity, -musgraveData.h);
@@ -353,6 +382,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         });
         musgraveFunctions.put(Integer.valueOf(TEX_HYBRIDMF), new MusgraveFunction() {
         musgraveFunctions.put(Integer.valueOf(TEX_HYBRIDMF), new MusgraveFunction() {
 
 
+            @Override
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
                 float result, signal, weight, rmd;
                 float result, signal, weight, rmd;
                 float pwHL = (float) Math.pow(musgraveData.lacunarity, -musgraveData.h);
                 float pwHL = (float) Math.pow(musgraveData.lacunarity, -musgraveData.h);
@@ -386,6 +416,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         });
         musgraveFunctions.put(Integer.valueOf(TEX_FBM), new MusgraveFunction() {
         musgraveFunctions.put(Integer.valueOf(TEX_FBM), new MusgraveFunction() {
 
 
+            @Override
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
                 float rmd, value = 0.0f, pwr = 1.0f, pwHL = (float) Math.pow(musgraveData.lacunarity, -musgraveData.h);
                 float rmd, value = 0.0f, pwr = 1.0f, pwHL = (float) Math.pow(musgraveData.lacunarity, -musgraveData.h);
 
 
@@ -406,6 +437,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         });
         musgraveFunctions.put(Integer.valueOf(TEX_HTERRAIN), new MusgraveFunction() {
         musgraveFunctions.put(Integer.valueOf(TEX_HTERRAIN), new MusgraveFunction() {
 
 
+            @Override
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
                 float value, increment, rmd;
                 float value, increment, rmd;
                 float pwHL = (float) Math.pow(musgraveData.lacunarity, -musgraveData.h);
                 float pwHL = (float) Math.pow(musgraveData.lacunarity, -musgraveData.h);
@@ -464,7 +496,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
                 sum += t * amp;
                 sum += t * amp;
             }
             }
 
 
-            sum *= (float) (1 << noiseDepth) / (float) ((1 << noiseDepth + 1) - 1);
+            sum *= (1 << noiseDepth) / (float) ((1 << noiseDepth + 1) - 1);
             return sum;
             return sum;
         }
         }
 
 

+ 8 - 1
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/TextureGeneratorBlend.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -46,17 +46,20 @@ public final class TextureGeneratorBlend extends TextureGenerator {
     private static final IntensityFunction INTENSITY_FUNCTION[] = new IntensityFunction[7];
     private static final IntensityFunction INTENSITY_FUNCTION[] = new IntensityFunction[7];
     static {
     static {
         INTENSITY_FUNCTION[0] = new IntensityFunction() {// Linear: stype = 0 (TEX_LIN)
         INTENSITY_FUNCTION[0] = new IntensityFunction() {// Linear: stype = 0 (TEX_LIN)
+            @Override
             public float getIntensity(float x, float y, float z) {
             public float getIntensity(float x, float y, float z) {
                 return (1.0f + x) * 0.5f;
                 return (1.0f + x) * 0.5f;
             }
             }
         };
         };
         INTENSITY_FUNCTION[1] = new IntensityFunction() {// Quad: stype = 1 (TEX_QUAD)
         INTENSITY_FUNCTION[1] = new IntensityFunction() {// Quad: stype = 1 (TEX_QUAD)
+            @Override
             public float getIntensity(float x, float y, float z) {
             public float getIntensity(float x, float y, float z) {
                 float result = (1.0f + x) * 0.5f;
                 float result = (1.0f + x) * 0.5f;
                 return result * result;
                 return result * result;
             }
             }
         };
         };
         INTENSITY_FUNCTION[2] = new IntensityFunction() {// Ease: stype = 2 (TEX_EASE)
         INTENSITY_FUNCTION[2] = new IntensityFunction() {// Ease: stype = 2 (TEX_EASE)
+            @Override
             public float getIntensity(float x, float y, float z) {
             public float getIntensity(float x, float y, float z) {
                 float result = (1.0f + x) * 0.5f;
                 float result = (1.0f + x) * 0.5f;
                 if (result <= 0.0f) {
                 if (result <= 0.0f) {
@@ -69,23 +72,27 @@ public final class TextureGeneratorBlend extends TextureGenerator {
             }
             }
         };
         };
         INTENSITY_FUNCTION[3] = new IntensityFunction() {// Diagonal: stype = 3 (TEX_DIAG)
         INTENSITY_FUNCTION[3] = new IntensityFunction() {// Diagonal: stype = 3 (TEX_DIAG)
+            @Override
             public float getIntensity(float x, float y, float z) {
             public float getIntensity(float x, float y, float z) {
                 return (2.0f + x + y) * 0.25f;
                 return (2.0f + x + y) * 0.25f;
             }
             }
         };
         };
         INTENSITY_FUNCTION[4] = new IntensityFunction() {// Sphere: stype = 4 (TEX_SPHERE)
         INTENSITY_FUNCTION[4] = new IntensityFunction() {// Sphere: stype = 4 (TEX_SPHERE)
+            @Override
             public float getIntensity(float x, float y, float z) {
             public float getIntensity(float x, float y, float z) {
                 float result = 1.0f - (float) Math.sqrt(x * x + y * y + z * z);
                 float result = 1.0f - (float) Math.sqrt(x * x + y * y + z * z);
                 return result < 0.0f ? 0.0f : result;
                 return result < 0.0f ? 0.0f : result;
             }
             }
         };
         };
         INTENSITY_FUNCTION[5] = new IntensityFunction() {// Halo: stype = 5 (TEX_HALO)
         INTENSITY_FUNCTION[5] = new IntensityFunction() {// Halo: stype = 5 (TEX_HALO)
+            @Override
             public float getIntensity(float x, float y, float z) {
             public float getIntensity(float x, float y, float z) {
                 float result = 1.0f - (float) Math.sqrt(x * x + y * y + z * z);
                 float result = 1.0f - (float) Math.sqrt(x * x + y * y + z * z);
                 return result <= 0.0f ? 0.0f : result * result;
                 return result <= 0.0f ? 0.0f : result * result;
             }
             }
         };
         };
         INTENSITY_FUNCTION[6] = new IntensityFunction() {// Radial: stype = 6 (TEX_RAD)
         INTENSITY_FUNCTION[6] = new IntensityFunction() {// Radial: stype = 6 (TEX_RAD)
+            @Override
             public float getIntensity(float x, float y, float z) {
             public float getIntensity(float x, float y, float z) {
                 return (float) Math.atan2(y, x) * FastMath.INV_TWO_PI + 0.5f;
                 return (float) Math.atan2(y, x) * FastMath.INV_TWO_PI + 0.5f;
             }
             }

+ 0 - 4
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/TextureGeneratorFactory.java

@@ -16,8 +16,6 @@ public class TextureGeneratorFactory {
                 return new TextureGeneratorDistnoise(noiseGenerator);
                 return new TextureGeneratorDistnoise(noiseGenerator);
             case TextureHelper.TEX_MAGIC:
             case TextureHelper.TEX_MAGIC:
                 return new TextureGeneratorMagic(noiseGenerator);
                 return new TextureGeneratorMagic(noiseGenerator);
-            case TextureHelper.TEX_MARBLE:
-                return new TextureGeneratorMarble(noiseGenerator);
             case TextureHelper.TEX_MUSGRAVE:
             case TextureHelper.TEX_MUSGRAVE:
                 return new TextureGeneratorMusgrave(noiseGenerator);
                 return new TextureGeneratorMusgrave(noiseGenerator);
             case TextureHelper.TEX_NOISE:
             case TextureHelper.TEX_NOISE:
@@ -26,8 +24,6 @@ public class TextureGeneratorFactory {
                 return new TextureGeneratorStucci(noiseGenerator);
                 return new TextureGeneratorStucci(noiseGenerator);
             case TextureHelper.TEX_VORONOI:
             case TextureHelper.TEX_VORONOI:
                 return new TextureGeneratorVoronoi(noiseGenerator);
                 return new TextureGeneratorVoronoi(noiseGenerator);
-            case TextureHelper.TEX_WOOD:
-                return new TextureGeneratorWood(noiseGenerator);
             default:
             default:
                 throw new IllegalStateException("Unknown generated texture type: " + generatedTexture);
                 throw new IllegalStateException("Unknown generated texture type: " + generatedTexture);
         }
         }

+ 11 - 1
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/TextureGeneratorMagic.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -45,51 +45,61 @@ public class TextureGeneratorMagic extends TextureGenerator {
     private static NoiseDepthFunction[] noiseDepthFunctions = new NoiseDepthFunction[10];
     private static NoiseDepthFunction[] noiseDepthFunctions = new NoiseDepthFunction[10];
     static {
     static {
         noiseDepthFunctions[0] = new NoiseDepthFunction() {
         noiseDepthFunctions[0] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
             public void compute(float[] xyz, float turbulence) {
                 xyz[1] = -(float) Math.cos(xyz[0] - xyz[1] + xyz[2]) * turbulence;
                 xyz[1] = -(float) Math.cos(xyz[0] - xyz[1] + xyz[2]) * turbulence;
             }
             }
         };
         };
         noiseDepthFunctions[1] = new NoiseDepthFunction() {
         noiseDepthFunctions[1] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
             public void compute(float[] xyz, float turbulence) {
                 xyz[0] = (float) Math.cos(xyz[0] - xyz[1] - xyz[2]) * turbulence;
                 xyz[0] = (float) Math.cos(xyz[0] - xyz[1] - xyz[2]) * turbulence;
             }
             }
         };
         };
         noiseDepthFunctions[2] = new NoiseDepthFunction() {
         noiseDepthFunctions[2] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
             public void compute(float[] xyz, float turbulence) {
                 xyz[2] = (float) Math.sin(-xyz[0] - xyz[1] - xyz[2]) * turbulence;
                 xyz[2] = (float) Math.sin(-xyz[0] - xyz[1] - xyz[2]) * turbulence;
             }
             }
         };
         };
         noiseDepthFunctions[3] = new NoiseDepthFunction() {
         noiseDepthFunctions[3] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
             public void compute(float[] xyz, float turbulence) {
                 xyz[0] = -(float) Math.cos(-xyz[0] + xyz[1] - xyz[2]) * turbulence;
                 xyz[0] = -(float) Math.cos(-xyz[0] + xyz[1] - xyz[2]) * turbulence;
             }
             }
         };
         };
         noiseDepthFunctions[4] = new NoiseDepthFunction() {
         noiseDepthFunctions[4] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
             public void compute(float[] xyz, float turbulence) {
                 xyz[1] = -(float) Math.sin(-xyz[0] + xyz[1] + xyz[2]) * turbulence;
                 xyz[1] = -(float) Math.sin(-xyz[0] + xyz[1] + xyz[2]) * turbulence;
             }
             }
         };
         };
         noiseDepthFunctions[5] = new NoiseDepthFunction() {
         noiseDepthFunctions[5] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
             public void compute(float[] xyz, float turbulence) {
                 xyz[1] = -(float) Math.cos(-xyz[0] + xyz[1] + xyz[2]) * turbulence;
                 xyz[1] = -(float) Math.cos(-xyz[0] + xyz[1] + xyz[2]) * turbulence;
             }
             }
         };
         };
         noiseDepthFunctions[6] = new NoiseDepthFunction() {
         noiseDepthFunctions[6] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
             public void compute(float[] xyz, float turbulence) {
                 xyz[0] = (float) Math.cos(xyz[0] + xyz[1] + xyz[2]) * turbulence;
                 xyz[0] = (float) Math.cos(xyz[0] + xyz[1] + xyz[2]) * turbulence;
             }
             }
         };
         };
         noiseDepthFunctions[7] = new NoiseDepthFunction() {
         noiseDepthFunctions[7] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
             public void compute(float[] xyz, float turbulence) {
                 xyz[2] = (float) Math.sin(xyz[0] + xyz[1] - xyz[2]) * turbulence;
                 xyz[2] = (float) Math.sin(xyz[0] + xyz[1] - xyz[2]) * turbulence;
             }
             }
         };
         };
         noiseDepthFunctions[8] = new NoiseDepthFunction() {
         noiseDepthFunctions[8] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
             public void compute(float[] xyz, float turbulence) {
                 xyz[0] = -(float) Math.cos(-xyz[0] - xyz[1] + xyz[2]) * turbulence;
                 xyz[0] = -(float) Math.cos(-xyz[0] - xyz[1] + xyz[2]) * turbulence;
             }
             }
         };
         };
         noiseDepthFunctions[9] = new NoiseDepthFunction() {
         noiseDepthFunctions[9] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
             public void compute(float[] xyz, float turbulence) {
                 xyz[1] = -(float) Math.sin(xyz[0] - xyz[1] + xyz[2]) * turbulence;
                 xyz[1] = -(float) Math.sin(xyz[0] - xyz[1] + xyz[2]) * turbulence;
             }
             }

+ 0 - 137
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/TextureGeneratorMarble.java

@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2009-2012 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.scene.plugins.blender.textures.generating;
-
-import com.jme3.scene.plugins.blender.BlenderContext;
-import com.jme3.scene.plugins.blender.file.Structure;
-import com.jme3.scene.plugins.blender.textures.TexturePixel;
-import com.jme3.scene.plugins.blender.textures.generating.NoiseGenerator.NoiseFunction;
-
-/**
- * This class generates the 'marble' texture.
- * @author Marcin Roguski (Kaelthas)
- */
-public class TextureGeneratorMarble extends TextureGeneratorWood {
-    // tex->stype
-    protected static final int TEX_SOFT    = 0;
-    protected static final int TEX_SHARP   = 1;
-    protected static final int TEX_SHARPER = 2;
-
-    protected MarbleData       marbleData;
-    protected int              noisebasis;
-    protected NoiseFunction    noiseFunction;
-
-    /**
-     * Constructor stores the given noise generator.
-     * @param noiseGenerator
-     *            the noise generator
-     */
-    public TextureGeneratorMarble(NoiseGenerator noiseGenerator) {
-        super(noiseGenerator);
-    }
-
-    @Override
-    public void readData(Structure tex, BlenderContext blenderContext) {
-        super.readData(tex, blenderContext);
-        marbleData = new MarbleData(tex);
-        noisebasis = marbleData.noisebasis;
-        noiseFunction = NoiseGenerator.noiseFunctions.get(noisebasis);
-        if (noiseFunction == null) {
-            noiseFunction = NoiseGenerator.noiseFunctions.get(0);
-            noisebasis = 0;
-        }
-    }
-
-    @Override
-    public void getPixel(TexturePixel pixel, float x, float y, float z) {
-        pixel.intensity = this.marbleInt(marbleData, x, y, z);
-        if (colorBand != null) {
-            int colorbandIndex = (int) (pixel.intensity * 1000.0f);
-            pixel.red = colorBand[colorbandIndex][0];
-            pixel.green = colorBand[colorbandIndex][1];
-            pixel.blue = colorBand[colorbandIndex][2];
-
-            this.applyBrightnessAndContrast(bacd, pixel);
-            pixel.alpha = colorBand[colorbandIndex][3];
-        } else {
-            this.applyBrightnessAndContrast(pixel, bacd.contrast, bacd.brightness);
-        }
-    }
-
-    public float marbleInt(MarbleData marbleData, float x, float y, float z) {
-        int waveform;
-        if (marbleData.waveform > TEX_TRI || marbleData.waveform < TEX_SIN) {
-            waveform = 0;
-        } else {
-            waveform = marbleData.waveform;
-        }
-
-        float n = 5.0f * (x + y + z);
-        if (noisebasis == 0) {
-            ++x;
-            ++y;
-            ++z;
-        }
-        float mi = n + marbleData.turbul * NoiseGenerator.NoiseFunctions.turbulence(x, y, z, marbleData.noisesize, marbleData.noisedepth, noiseFunction, marbleData.isHard);
-
-        if (marbleData.stype >= TEX_SOFT) {
-            mi = waveformFunctions[waveform].execute(mi);
-            if (marbleData.stype == TEX_SHARP) {
-                mi = (float) Math.sqrt(mi);
-            } else if (marbleData.stype == TEX_SHARPER) {
-                mi = (float) Math.sqrt(Math.sqrt(mi));
-            }
-        }
-        return mi;
-    }
-
-    private static class MarbleData {
-        public final float   noisesize;
-        public final int     noisebasis;
-        public final int     noisedepth;
-        public final int     stype;
-        public final float   turbul;
-        public final int     waveform;
-        public final boolean isHard;
-
-        public MarbleData(Structure tex) {
-            noisesize = ((Number) tex.getFieldValue("noisesize")).floatValue();
-            noisebasis = ((Number) tex.getFieldValue("noisebasis")).intValue();
-            noisedepth = ((Number) tex.getFieldValue("noisedepth")).intValue();
-            stype = ((Number) tex.getFieldValue("stype")).intValue();
-            turbul = ((Number) tex.getFieldValue("turbul")).floatValue();
-            int noisetype = ((Number) tex.getFieldValue("noisetype")).intValue();
-            waveform = ((Number) tex.getFieldValue("noisebasis2")).intValue();
-            isHard = noisetype != TEX_NOISESOFT;
-        }
-    }
-}

+ 0 - 206
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/generating/TextureGeneratorWood.java

@@ -1,206 +0,0 @@
-/*
- *
- * $Id: noise.c 14611 2008-04-29 08:24:33Z campbellbarton $
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- *
- */
-package com.jme3.scene.plugins.blender.textures.generating;
-
-import com.jme3.math.FastMath;
-import com.jme3.scene.plugins.blender.BlenderContext;
-import com.jme3.scene.plugins.blender.file.Structure;
-import com.jme3.scene.plugins.blender.textures.TexturePixel;
-import com.jme3.scene.plugins.blender.textures.generating.NoiseGenerator.NoiseFunction;
-import com.jme3.texture.Image.Format;
-
-/**
- * This class generates the 'wood' texture.
- * @author Marcin Roguski (Kaelthas)
- */
-public class TextureGeneratorWood extends TextureGenerator {
-    // tex->noisebasis2
-    protected static final int  TEX_SIN       = 0;
-    protected static final int  TEX_SAW       = 1;
-    protected static final int  TEX_TRI       = 2;
-
-    // tex->stype
-    protected static final int  TEX_BAND      = 0;
-    protected static final int  TEX_RING      = 1;
-    protected static final int  TEX_BANDNOISE = 2;
-    protected static final int  TEX_RINGNOISE = 3;
-
-    // tex->noisetype
-    protected static final int  TEX_NOISESOFT = 0;
-    protected static final int  TEX_NOISEPERL = 1;
-
-    protected WoodIntensityData woodIntensityData;
-
-    /**
-     * Constructor stores the given noise generator.
-     * @param noiseGenerator
-     *            the noise generator
-     */
-    public TextureGeneratorWood(NoiseGenerator noiseGenerator) {
-        super(noiseGenerator, Format.Luminance8);
-    }
-
-    @Override
-    public void readData(Structure tex, BlenderContext blenderContext) {
-        super.readData(tex, blenderContext);
-        woodIntensityData = new WoodIntensityData(tex);
-    }
-
-    @Override
-    public void getPixel(TexturePixel pixel, float x, float y, float z) {
-        pixel.intensity = this.woodIntensity(woodIntensityData, x, y, z);
-
-        if (colorBand != null) {
-            int colorbandIndex = (int) (pixel.intensity * 1000.0f);
-            pixel.red = colorBand[colorbandIndex][0];
-            pixel.green = colorBand[colorbandIndex][1];
-            pixel.blue = colorBand[colorbandIndex][2];
-
-            this.applyBrightnessAndContrast(bacd, pixel);
-            pixel.alpha = colorBand[colorbandIndex][3];
-        } else {
-            this.applyBrightnessAndContrast(pixel, bacd.contrast, bacd.brightness);
-        }
-    }
-
-    protected static WaveForm[] waveformFunctions = new WaveForm[3];
-    static {
-        waveformFunctions[0] = new WaveForm() {// sinus (TEX_SIN)
-
-            public float execute(float x) {
-                return 0.5f + 0.5f * (float) Math.sin(x);
-            }
-        };
-        waveformFunctions[1] = new WaveForm() {// saw (TEX_SAW)
-
-            public float execute(float x) {
-                int n = (int) (x * FastMath.INV_TWO_PI);
-                x -= n * FastMath.TWO_PI;
-                if (x < 0.0f) {
-                    x += FastMath.TWO_PI;
-                }
-                return x * FastMath.INV_TWO_PI;
-            }
-        };
-        waveformFunctions[2] = new WaveForm() {// triangle (TEX_TRI)
-
-            public float execute(float x) {
-                return 1.0f - 2.0f * FastMath.abs((float) Math.floor(x * FastMath.INV_TWO_PI + 0.5f) - x * FastMath.INV_TWO_PI);
-            }
-        };
-    }
-
-    /**
-     * Computes basic wood intensity value at x,y,z.
-     * @param woodIntData
-     * @param x
-     *            X coordinate of the texture pixel
-     * @param y
-     *            Y coordinate of the texture pixel
-     * @param z
-     *            Z coordinate of the texture pixel
-     * @return wood intensity at position [x, y, z]
-     */
-    public float woodIntensity(WoodIntensityData woodIntData, float x, float y, float z) {
-        float result;
-
-        switch (woodIntData.woodType) {
-            case TEX_BAND:
-                result = woodIntData.waveformFunction.execute((x + y + z) * 10.0f);
-                break;
-            case TEX_RING:
-                result = woodIntData.waveformFunction.execute((float) Math.sqrt(x * x + y * y + z * z) * 20.0f);
-                break;
-            case TEX_BANDNOISE:
-                if (woodIntData.noisebasis == 0) {
-                    ++x;
-                    ++y;
-                    ++z;
-                }
-                result = woodIntData.turbul * NoiseGenerator.NoiseFunctions.noise(x, y, z, woodIntData.noisesize, 0, woodIntData.noiseFunction, woodIntData.isHard);
-                result = woodIntData.waveformFunction.execute((x + y + z) * 10.0f + result);
-                break;
-            case TEX_RINGNOISE:
-                if (woodIntData.noisebasis == 0) {
-                    ++x;
-                    ++y;
-                    ++z;
-                }
-                result = woodIntData.turbul * NoiseGenerator.NoiseFunctions.noise(x, y, z, woodIntData.noisesize, 0, woodIntData.noiseFunction, woodIntData.isHard);
-                result = woodIntData.waveformFunction.execute((float) Math.sqrt(x * x + y * y + z * z) * 20.0f + result);
-                break;
-            default:
-                result = 0;
-        }
-        return result;
-    }
-
-    /**
-     * A class that collects the data for wood intensity calculations.
-     * @author Marcin Roguski (Kaelthas)
-     */
-    private static class WoodIntensityData {
-        public final WaveForm waveformFunction;
-        public final int      noisebasis;
-        public NoiseFunction  noiseFunction;
-
-        public final float    noisesize;
-        public final float    turbul;
-        public final int      noiseType;
-        public final int      woodType;
-        public final boolean  isHard;
-
-        public WoodIntensityData(Structure tex) {
-            int waveform = ((Number) tex.getFieldValue("noisebasis2")).intValue();// wave form: TEX_SIN=0, TEX_SAW=1, TEX_TRI=2
-            if (waveform > TEX_TRI || waveform < TEX_SIN) {
-                waveform = 0; // check to be sure noisebasis2 is initialized ahead of time
-            }
-            waveformFunction = waveformFunctions[waveform];
-            int noisebasis = ((Number) tex.getFieldValue("noisebasis")).intValue();
-            if (noiseFunction == null) {
-                noiseFunction = NoiseGenerator.noiseFunctions.get(0);
-                noisebasis = 0;
-            }
-            this.noisebasis = noisebasis;
-
-            woodType = ((Number) tex.getFieldValue("stype")).intValue();
-            noisesize = ((Number) tex.getFieldValue("noisesize")).floatValue();
-            turbul = ((Number) tex.getFieldValue("turbul")).floatValue();
-            noiseType = ((Number) tex.getFieldValue("noisetype")).intValue();
-            isHard = noiseType != TEX_NOISESOFT;
-        }
-    }
-
-    protected static interface WaveForm {
-
-        float execute(float x);
-    }
-}

+ 4 - 0
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/io/AWTPixelInputOutput.java

@@ -11,6 +11,7 @@ import jme3tools.converters.RGB565;
  * @author Marcin Roguski (Kaelthas)
  * @author Marcin Roguski (Kaelthas)
  */
  */
 /* package */class AWTPixelInputOutput implements PixelInputOutput {
 /* package */class AWTPixelInputOutput implements PixelInputOutput {
+    @Override
     public void read(Image image, int layer, TexturePixel pixel, int index) {
     public void read(Image image, int layer, TexturePixel pixel, int index) {
         ByteBuffer data = image.getData(layer);
         ByteBuffer data = image.getData(layer);
         switch (image.getFormat()) {
         switch (image.getFormat()) {
@@ -64,11 +65,13 @@ import jme3tools.converters.RGB565;
         }
         }
     }
     }
 
 
+    @Override
     public void read(Image image, int layer, TexturePixel pixel, int x, int y) {
     public void read(Image image, int layer, TexturePixel pixel, int x, int y) {
         int index = (y * image.getWidth() + x) * (image.getFormat().getBitsPerPixel() >> 3);
         int index = (y * image.getWidth() + x) * (image.getFormat().getBitsPerPixel() >> 3);
         this.read(image, layer, pixel, index);
         this.read(image, layer, pixel, index);
     }
     }
 
 
+    @Override
     public void write(Image image, int layer, TexturePixel pixel, int index) {
     public void write(Image image, int layer, TexturePixel pixel, int index) {
         ByteBuffer data = image.getData(layer);
         ByteBuffer data = image.getData(layer);
         switch (image.getFormat()) {
         switch (image.getFormat()) {
@@ -149,6 +152,7 @@ import jme3tools.converters.RGB565;
         }
         }
     }
     }
 
 
+    @Override
     public void write(Image image, int layer, TexturePixel pixel, int x, int y) {
     public void write(Image image, int layer, TexturePixel pixel, int x, int y) {
         int index = (y * image.getWidth() + x) * (image.getFormat().getBitsPerPixel() >> 3);
         int index = (y * image.getWidth() + x) * (image.getFormat().getBitsPerPixel() >> 3);
         this.write(image, layer, pixel, index);
         this.write(image, layer, pixel, index);

+ 4 - 0
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/io/DDSPixelInputOutput.java

@@ -15,10 +15,12 @@ import jme3tools.converters.RGB565;
     /**
     /**
      * For this class the index should be considered as a pixel index in AWT image format.
      * For this class the index should be considered as a pixel index in AWT image format.
      */
      */
+    @Override
     public void read(Image image, int layer, TexturePixel pixel, int index) {
     public void read(Image image, int layer, TexturePixel pixel, int index) {
         this.read(image, layer, pixel, index % image.getWidth(), index / image.getWidth());
         this.read(image, layer, pixel, index % image.getWidth(), index / image.getWidth());
     }
     }
 
 
+    @Override
     public void read(Image image, int layer, TexturePixel pixel, int x, int y) {
     public void read(Image image, int layer, TexturePixel pixel, int x, int y) {
         int xTexetlIndex = x % image.getWidth() >> 2;
         int xTexetlIndex = x % image.getWidth() >> 2;
         int yTexelIndex = y % image.getHeight() >> 2;
         int yTexelIndex = y % image.getHeight() >> 2;
@@ -161,10 +163,12 @@ import jme3tools.converters.RGB565;
         pixel.alpha = alpha;
         pixel.alpha = alpha;
     }
     }
 
 
+    @Override
     public void write(Image image, int layer, TexturePixel pixel, int index) {
     public void write(Image image, int layer, TexturePixel pixel, int index) {
         throw new UnsupportedOperationException("Cannot put the DXT pixel by index because not every index contains the pixel color!");
         throw new UnsupportedOperationException("Cannot put the DXT pixel by index because not every index contains the pixel color!");
     }
     }
 
 
+    @Override
     public void write(Image image, int layer, TexturePixel pixel, int x, int y) {
     public void write(Image image, int layer, TexturePixel pixel, int x, int y) {
         throw new UnsupportedOperationException("Writing to DDS texture pixel by pixel is not yet supported!");
         throw new UnsupportedOperationException("Writing to DDS texture pixel by pixel is not yet supported!");
     }
     }

+ 4 - 0
jme3-blender/src/main/java/com/jme3/scene/plugins/blender/textures/io/LuminancePixelInputOutput.java

@@ -11,6 +11,7 @@ import java.nio.ByteBuffer;
  * @author Marcin Roguski (Kaelthas)
  * @author Marcin Roguski (Kaelthas)
  */
  */
 /* package */class LuminancePixelInputOutput implements PixelInputOutput {
 /* package */class LuminancePixelInputOutput implements PixelInputOutput {
+    @Override
     public void read(Image image, int layer, TexturePixel pixel, int index) {
     public void read(Image image, int layer, TexturePixel pixel, int index) {
         ByteBuffer data = image.getData(layer);
         ByteBuffer data = image.getData(layer);
         switch (image.getFormat()) {
         switch (image.getFormat()) {
@@ -36,11 +37,13 @@ import java.nio.ByteBuffer;
         }
         }
     }
     }
 
 
+    @Override
     public void read(Image image, int layer, TexturePixel pixel, int x, int y) {
     public void read(Image image, int layer, TexturePixel pixel, int x, int y) {
         int index = y * image.getWidth() + x;
         int index = y * image.getWidth() + x;
         this.read(image, layer, pixel, index);
         this.read(image, layer, pixel, index);
     }
     }
 
 
+    @Override
     public void write(Image image, int layer, TexturePixel pixel, int index) {
     public void write(Image image, int layer, TexturePixel pixel, int index) {
         ByteBuffer data = image.getData(layer);
         ByteBuffer data = image.getData(layer);
         data.put(index, pixel.getInt());
         data.put(index, pixel.getInt());
@@ -67,6 +70,7 @@ import java.nio.ByteBuffer;
         }
         }
     }
     }
 
 
+    @Override
     public void write(Image image, int layer, TexturePixel pixel, int x, int y) {
     public void write(Image image, int layer, TexturePixel pixel, int x, int y) {
         int index = y * image.getWidth() + x;
         int index = y * image.getWidth() + x;
         this.write(image, layer, pixel, index);
         this.write(image, layer, pixel, index);

+ 6 - 1
jme3-bullet/src/common/java/com/jme3/bullet/BulletAppState.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2019 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -182,6 +182,7 @@ public class BulletAppState
         executor = new ScheduledThreadPoolExecutor(1);
         executor = new ScheduledThreadPoolExecutor(1);
         final BulletAppState app = this;
         final BulletAppState app = this;
         Callable<Boolean> call = new Callable<Boolean>() {
         Callable<Boolean> call = new Callable<Boolean>() {
+            @Override
             public Boolean call() throws Exception {
             public Boolean call() throws Exception {
                 detachedPhysicsLastUpdate = System.currentTimeMillis();
                 detachedPhysicsLastUpdate = System.currentTimeMillis();
                 pSpace = new PhysicsSpace(worldMin, worldMax, broadphaseType);
                 pSpace = new PhysicsSpace(worldMin, worldMax, broadphaseType);
@@ -200,6 +201,7 @@ public class BulletAppState
         }
         }
     }
     }
     private Callable<Boolean> parallelPhysicsUpdate = new Callable<Boolean>() {
     private Callable<Boolean> parallelPhysicsUpdate = new Callable<Boolean>() {
+        @Override
         public Boolean call() throws Exception {
         public Boolean call() throws Exception {
             pSpace.update(tpf * getSpeed());
             pSpace.update(tpf * getSpeed());
             return true;
             return true;
@@ -207,6 +209,7 @@ public class BulletAppState
     };
     };
     long detachedPhysicsLastUpdate = 0;
     long detachedPhysicsLastUpdate = 0;
     private Callable<Boolean> detachedPhysicsUpdate = new Callable<Boolean>() {
     private Callable<Boolean> detachedPhysicsUpdate = new Callable<Boolean>() {
+        @Override
         public Boolean call() throws Exception {
         public Boolean call() throws Exception {
             pSpace.update(getPhysicsSpace().getAccuracy() * getSpeed());
             pSpace.update(getPhysicsSpace().getAccuracy() * getSpeed());
             pSpace.distributeEvents();
             pSpace.distributeEvents();
@@ -484,6 +487,7 @@ public class BulletAppState
      * @param space the space that is about to be stepped (not null)
      * @param space the space that is about to be stepped (not null)
      * @param f the time per physics step (in seconds, &ge;0)
      * @param f the time per physics step (in seconds, &ge;0)
      */
      */
+    @Override
     public void prePhysicsTick(PhysicsSpace space, float f) {
     public void prePhysicsTick(PhysicsSpace space, float f) {
     }
     }
 
 
@@ -494,6 +498,7 @@ public class BulletAppState
      * @param space the space that is about to be stepped (not null)
      * @param space the space that is about to be stepped (not null)
      * @param f the time per physics step (in seconds, &ge;0)
      * @param f the time per physics step (in seconds, &ge;0)
      */
      */
+    @Override
     public void physicsTick(PhysicsSpace space, float f) {
     public void physicsTick(PhysicsSpace space, float f) {
     }
     }
 
 

+ 1 - 1
jme3-bullet/src/common/java/com/jme3/bullet/animation/BoneLink.java

@@ -99,7 +99,7 @@ public class BoneLink extends PhysicsLink {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public BoneLink() {
+    protected BoneLink() {
     }
     }
 
 
     /**
     /**

+ 1 - 1
jme3-bullet/src/common/java/com/jme3/bullet/animation/PhysicsLink.java

@@ -130,7 +130,7 @@ abstract public class PhysicsLink
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public PhysicsLink() {
+    protected PhysicsLink() {
     }
     }
 
 
     /**
     /**

+ 1 - 1
jme3-bullet/src/common/java/com/jme3/bullet/animation/TorsoLink.java

@@ -107,7 +107,7 @@ public class TorsoLink extends PhysicsLink {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public TorsoLink() {
+    protected TorsoLink() {
     }
     }
 
 
     /**
     /**

+ 4 - 2
jme3-bullet/src/common/java/com/jme3/bullet/collision/shapes/infos/ChildCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -65,7 +65,7 @@ public class ChildCollisionShape implements Savable {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public ChildCollisionShape() {
+    protected ChildCollisionShape() {
     }
     }
 
 
     /**
     /**
@@ -89,6 +89,7 @@ public class ChildCollisionShape implements Savable {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
         capsule.write(location, "location", new Vector3f());
         capsule.write(location, "location", new Vector3f());
@@ -102,6 +103,7 @@ public class ChildCollisionShape implements Savable {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);
         location = (Vector3f) capsule.readSavable("location", new Vector3f());
         location = (Vector3f) capsule.readSavable("location", new Vector3f());

+ 7 - 1
jme3-bullet/src/common/java/com/jme3/bullet/control/AbstractPhysicsControl.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -231,6 +231,7 @@ public abstract class AbstractPhysicsControl implements PhysicsControl, JmeClone
      *
      *
      * @param spatial the spatial to control (or null)
      * @param spatial the spatial to control (or null)
      */
      */
+    @Override
     public void setSpatial(Spatial spatial) {
     public void setSpatial(Spatial spatial) {
         if (this.spatial != null && this.spatial != spatial) {
         if (this.spatial != null && this.spatial != spatial) {
             removeSpatialData(this.spatial);
             removeSpatialData(this.spatial);
@@ -262,6 +263,7 @@ public abstract class AbstractPhysicsControl implements PhysicsControl, JmeClone
      *
      *
      * @param enabled true&rarr;enable the control, false&rarr;disable it
      * @param enabled true&rarr;enable the control, false&rarr;disable it
      */
      */
+    @Override
     public void setEnabled(boolean enabled) {
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
         this.enabled = enabled;
         if (space != null) {
         if (space != null) {
@@ -284,13 +286,16 @@ public abstract class AbstractPhysicsControl implements PhysicsControl, JmeClone
      *
      *
      * @return true if enabled, otherwise false
      * @return true if enabled, otherwise false
      */
      */
+    @Override
     public boolean isEnabled() {
     public boolean isEnabled() {
         return enabled;
         return enabled;
     }
     }
 
 
+    @Override
     public void update(float tpf) {
     public void update(float tpf) {
     }
     }
 
 
+    @Override
     public void render(RenderManager rm, ViewPort vp) {
     public void render(RenderManager rm, ViewPort vp) {
     }
     }
 
 
@@ -326,6 +331,7 @@ public abstract class AbstractPhysicsControl implements PhysicsControl, JmeClone
      *
      *
      * @return the pre-existing space, or null for none
      * @return the pre-existing space, or null for none
      */
      */
+    @Override
     public PhysicsSpace getPhysicsSpace() {
     public PhysicsSpace getPhysicsSpace() {
         return space;
         return space;
     }
     }

+ 4 - 2
jme3-bullet/src/common/java/com/jme3/bullet/control/BetterCharacterControl.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -136,7 +136,7 @@ public class BetterCharacterControl extends AbstractPhysicsControl implements Ph
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public BetterCharacterControl() {
+    protected BetterCharacterControl() {
         jumpForce = new Vector3f();
         jumpForce = new Vector3f();
     }
     }
 
 
@@ -194,6 +194,7 @@ public class BetterCharacterControl extends AbstractPhysicsControl implements Ph
      * @param space the space that is about to be stepped (not null)
      * @param space the space that is about to be stepped (not null)
      * @param tpf the time per physics step (in seconds, &ge;0)
      * @param tpf the time per physics step (in seconds, &ge;0)
      */
      */
+    @Override
     public void prePhysicsTick(PhysicsSpace space, float tpf) {
     public void prePhysicsTick(PhysicsSpace space, float tpf) {
         checkOnGround();
         checkOnGround();
         if (wantToUnDuck && checkCanUnDuck()) {
         if (wantToUnDuck && checkCanUnDuck()) {
@@ -245,6 +246,7 @@ public class BetterCharacterControl extends AbstractPhysicsControl implements Ph
      * @param space the space that was just stepped (not null)
      * @param space the space that was just stepped (not null)
      * @param tpf the time per physics step (in seconds, &ge;0)
      * @param tpf the time per physics step (in seconds, &ge;0)
      */
      */
+    @Override
     public void physicsTick(PhysicsSpace space, float tpf) {
     public void physicsTick(PhysicsSpace space, float tpf) {
         rigidBody.getLinearVelocity(velocity);
         rigidBody.getLinearVelocity(velocity);
     }
     }

+ 7 - 1
jme3-bullet/src/common/java/com/jme3/bullet/control/CharacterControl.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -120,6 +120,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         this.spatial = cloner.clone(spatial);
         this.spatial = cloner.clone(spatial);
     }
     }
          
          
+    @Override
     public void setSpatial(Spatial spatial) {
     public void setSpatial(Spatial spatial) {
         this.spatial = spatial;
         this.spatial = spatial;
         setUserObject(spatial);
         setUserObject(spatial);
@@ -136,6 +137,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         return this.spatial;
         return this.spatial;
     }
     }
 
 
+    @Override
     public void setEnabled(boolean enabled) {
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
         this.enabled = enabled;
         if (space != null) {
         if (space != null) {
@@ -152,6 +154,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         }
         }
     }
     }
 
 
+    @Override
     public boolean isEnabled() {
     public boolean isEnabled() {
         return enabled;
         return enabled;
     }
     }
@@ -172,6 +175,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         this.useViewDirection = viewDirectionEnabled;
         this.useViewDirection = viewDirectionEnabled;
     }
     }
 
 
+    @Override
     public void update(float tpf) {
     public void update(float tpf) {
         if (enabled && spatial != null) {
         if (enabled && spatial != null) {
             Quaternion localRotationQuat = spatial.getLocalRotation();
             Quaternion localRotationQuat = spatial.getLocalRotation();
@@ -195,6 +199,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         }
         }
     }
     }
 
 
+    @Override
     public void render(RenderManager rm, ViewPort vp) {
     public void render(RenderManager rm, ViewPort vp) {
     }
     }
 
 
@@ -225,6 +230,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         space = newSpace;
         space = newSpace;
     }
     }
 
 
+    @Override
     public PhysicsSpace getPhysicsSpace() {
     public PhysicsSpace getPhysicsSpace() {
         return space;
         return space;
     }
     }

+ 8 - 2
jme3-bullet/src/common/java/com/jme3/bullet/control/GhostControl.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -86,7 +86,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public GhostControl() {
+    protected GhostControl() {
     }
     }
 
 
     /**
     /**
@@ -196,6 +196,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      *
      *
      * @param spatial the spatial to control (or null)
      * @param spatial the spatial to control (or null)
      */
      */
+    @Override
     public void setSpatial(Spatial spatial) {
     public void setSpatial(Spatial spatial) {
         this.spatial = spatial;
         this.spatial = spatial;
         setUserObject(spatial);
         setUserObject(spatial);
@@ -222,6 +223,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      *
      *
      * @param enabled true&rarr;enable the control, false&rarr;disable it
      * @param enabled true&rarr;enable the control, false&rarr;disable it
      */
      */
+    @Override
     public void setEnabled(boolean enabled) {
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
         this.enabled = enabled;
         if (space != null) {
         if (space != null) {
@@ -244,6 +246,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      *
      *
      * @return true if enabled, otherwise false
      * @return true if enabled, otherwise false
      */
      */
+    @Override
     public boolean isEnabled() {
     public boolean isEnabled() {
         return enabled;
         return enabled;
     }
     }
@@ -255,6 +258,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      *
      *
      * @param tpf the time interval between frames (in seconds, &ge;0)
      * @param tpf the time interval between frames (in seconds, &ge;0)
      */
      */
+    @Override
     public void update(float tpf) {
     public void update(float tpf) {
         if (!enabled) {
         if (!enabled) {
             return;
             return;
@@ -271,6 +275,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      * @param rm the render manager (not null)
      * @param rm the render manager (not null)
      * @param vp the view port to render (not null)
      * @param vp the view port to render (not null)
      */
      */
+    @Override
     public void render(RenderManager rm, ViewPort vp) {
     public void render(RenderManager rm, ViewPort vp) {
     }
     }
 
 
@@ -307,6 +312,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      *
      *
      * @return the pre-existing space, or null for none
      * @return the pre-existing space, or null for none
      */
      */
+    @Override
     public PhysicsSpace getPhysicsSpace() {
     public PhysicsSpace getPhysicsSpace() {
         return space;
         return space;
     }
     }

+ 6 - 5
jme3-bullet/src/common/java/com/jme3/bullet/control/KinematicRagdollControl.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -409,7 +409,7 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
         while (it.hasNext()) {
         while (it.hasNext()) {
             
             
             boneName = it.next();
             boneName = it.next();
-            bone = (Bone) boneLinks.get(boneName).bone;
+            bone = boneLinks.get(boneName).bone;
             if (!bone.hasUserControl()) {
             if (!bone.hasUserControl()) {
                 Logger.getLogger(KinematicRagdollControl.class.getSimpleName()).log(Level.FINE, "{0} doesn't have user control", boneName);
                 Logger.getLogger(KinematicRagdollControl.class.getSimpleName()).log(Level.FINE, "{0} doesn't have user control", boneName);
                 continue;
                 continue;
@@ -421,7 +421,7 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
             }
             }
             int depth = 0;
             int depth = 0;
             int maxDepth = ikChainDepth.get(bone.getName());
             int maxDepth = ikChainDepth.get(bone.getName());
-            updateBone(boneLinks.get(bone.getName()), tpf * (float) FastMath.sqrt(distance), vars, tmpRot1, tmpRot2, bone, ikTargets.get(boneName), depth, maxDepth);
+            updateBone(boneLinks.get(bone.getName()), tpf * FastMath.sqrt(distance), vars, tmpRot1, tmpRot2, bone, ikTargets.get(boneName), depth, maxDepth);
 
 
             Vector3f position = vars.vect1;
             Vector3f position = vars.vect1;
             
             
@@ -693,10 +693,10 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
                 shape = RagdollUtils.makeShapeFromVerticeWeights(model, RagdollUtils.getBoneIndices(link.bone, skeleton, boneList), initScale, link.bone.getModelSpacePosition(), weightThreshold);
                 shape = RagdollUtils.makeShapeFromVerticeWeights(model, RagdollUtils.getBoneIndices(link.bone, skeleton, boneList), initScale, link.bone.getModelSpacePosition(), weightThreshold);
             }
             }
 
 
-            PhysicsRigidBody shapeNode = new PhysicsRigidBody(shape, rootMass / (float) reccount);
+            PhysicsRigidBody shapeNode = new PhysicsRigidBody(shape, rootMass / reccount);
 
 
             shapeNode.setKinematic(mode == Mode.Kinematic);
             shapeNode.setKinematic(mode == Mode.Kinematic);
-            totalMass += rootMass / (float) reccount;
+            totalMass += rootMass / reccount;
 
 
             link.rigidBody = shapeNode;
             link.rigidBody = shapeNode;
             link.initalWorldRotation = bone.getModelSpaceRotation().clone();
             link.initalWorldRotation = bone.getModelSpaceRotation().clone();
@@ -817,6 +817,7 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
      *
      *
      * @param event (not null)
      * @param event (not null)
      */
      */
+    @Override
     public void collision(PhysicsCollisionEvent event) {
     public void collision(PhysicsCollisionEvent event) {
         PhysicsCollisionObject objA = event.getObjectA();
         PhysicsCollisionObject objA = event.getObjectA();
         PhysicsCollisionObject objB = event.getObjectB();
         PhysicsCollisionObject objB = event.getObjectB();

+ 8 - 2
jme3-bullet/src/common/java/com/jme3/bullet/control/RigidBodyControl.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -89,7 +89,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public RigidBodyControl() {
+    protected RigidBodyControl() {
     }
     }
 
 
     /**
     /**
@@ -193,6 +193,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      *
      *
      * @param spatial the spatial to control (or null)
      * @param spatial the spatial to control (or null)
      */
      */
+    @Override
     public void setSpatial(Spatial spatial) {
     public void setSpatial(Spatial spatial) {
         this.spatial = spatial;
         this.spatial = spatial;
         setUserObject(spatial);
         setUserObject(spatial);
@@ -249,6 +250,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      *
      *
      * @param enabled true&rarr;enable the control, false&rarr;disable it
      * @param enabled true&rarr;enable the control, false&rarr;disable it
      */
      */
+    @Override
     public void setEnabled(boolean enabled) {
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
         this.enabled = enabled;
         if (space != null) {
         if (space != null) {
@@ -271,6 +273,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      *
      *
      * @return true if enabled, otherwise false
      * @return true if enabled, otherwise false
      */
      */
+    @Override
     public boolean isEnabled() {
     public boolean isEnabled() {
         return enabled;
         return enabled;
     }
     }
@@ -347,6 +350,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      *
      *
      * @param tpf the time interval between frames (in seconds, &ge;0)
      * @param tpf the time interval between frames (in seconds, &ge;0)
      */
      */
+    @Override
     public void update(float tpf) {
     public void update(float tpf) {
         if (enabled && spatial != null) {
         if (enabled && spatial != null) {
             if (isKinematic() && kinematicSpatial) {
             if (isKinematic() && kinematicSpatial) {
@@ -366,6 +370,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      * @param rm the render manager (not null)
      * @param rm the render manager (not null)
      * @param vp the view port to render (not null)
      * @param vp the view port to render (not null)
      */
      */
+    @Override
     public void render(RenderManager rm, ViewPort vp) {
     public void render(RenderManager rm, ViewPort vp) {
     }
     }
 
 
@@ -401,6 +406,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      *
      *
      * @return the pre-existing space, or null for none
      * @return the pre-existing space, or null for none
      */
      */
+    @Override
     public PhysicsSpace getPhysicsSpace() {
     public PhysicsSpace getPhysicsSpace() {
         return space;
         return space;
     }
     }

+ 9 - 2
jme3-bullet/src/common/java/com/jme3/bullet/control/VehicleControl.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -80,7 +80,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public VehicleControl() {
+    protected VehicleControl() {
     }
     }
 
 
     /**
     /**
@@ -159,6 +159,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      *
      *
      * @return a new control (not null)
      * @return a new control (not null)
      */
      */
+    @Override
     public Object jmeClone() {
     public Object jmeClone() {
         VehicleControl control = new VehicleControl(collisionShape, mass);
         VehicleControl control = new VehicleControl(collisionShape, mass);
         control.setAngularFactor(getAngularFactor());
         control.setAngularFactor(getAngularFactor());
@@ -231,6 +232,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      *
      *
      * @param spatial spatial to control (or null)
      * @param spatial spatial to control (or null)
      */
      */
+    @Override
     public void setSpatial(Spatial spatial) {
     public void setSpatial(Spatial spatial) {
         this.spatial = spatial;
         this.spatial = spatial;
         setUserObject(spatial);
         setUserObject(spatial);
@@ -250,6 +252,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      *
      *
      * @param enabled true&rarr;enable the control, false&rarr;disable it
      * @param enabled true&rarr;enable the control, false&rarr;disable it
      */
      */
+    @Override
     public void setEnabled(boolean enabled) {
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
         this.enabled = enabled;
         if (space != null) {
         if (space != null) {
@@ -272,6 +275,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      *
      *
      * @return true if enabled, otherwise false
      * @return true if enabled, otherwise false
      */
      */
+    @Override
     public boolean isEnabled() {
     public boolean isEnabled() {
         return enabled;
         return enabled;
     }
     }
@@ -282,6 +286,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      *
      *
      * @param tpf the time interval between frames (in seconds, &ge;0)
      * @param tpf the time interval between frames (in seconds, &ge;0)
      */
      */
+    @Override
     public void update(float tpf) {
     public void update(float tpf) {
         if (enabled && spatial != null) {
         if (enabled && spatial != null) {
             if (getMotionState().applyTransform(spatial)) {
             if (getMotionState().applyTransform(spatial)) {
@@ -301,6 +306,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      * @param rm the render manager (not null)
      * @param rm the render manager (not null)
      * @param vp the view port to render (not null)
      * @param vp the view port to render (not null)
      */
      */
+    @Override
     public void render(RenderManager rm, ViewPort vp) {
     public void render(RenderManager rm, ViewPort vp) {
     }
     }
 
 
@@ -336,6 +342,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      *
      *
      * @return the pre-existing space, or null for none
      * @return the pre-existing space, or null for none
      */
      */
+    @Override
     public PhysicsSpace getPhysicsSpace() {
     public PhysicsSpace getPhysicsSpace() {
         return space;
         return space;
     }
     }

+ 2 - 2
jme3-bullet/src/common/java/com/jme3/bullet/util/CollisionShapeFactory.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -229,7 +229,7 @@ public class CollisionShapeFactory {
      */
      */
     public static CollisionShape createBoxShape(Spatial spatial) {
     public static CollisionShape createBoxShape(Spatial spatial) {
         if (spatial instanceof Geometry) {
         if (spatial instanceof Geometry) {
-            return createSingleBoxShape((Geometry) spatial, spatial);
+            return createSingleBoxShape(spatial, spatial);
         } else if (spatial instanceof Node) {
         } else if (spatial instanceof Node) {
             return createBoxCompoundShape((Node) spatial);
             return createBoxCompoundShape((Node) spatial);
         } else {
         } else {

+ 4 - 4
jme3-bullet/src/main/java/com/jme3/bullet/PhysicsSpace.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2019 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -539,7 +539,7 @@ public class PhysicsSpace {
             Spatial node = (Spatial) obj;
             Spatial node = (Spatial) obj;
             for (int i = 0; i < node.getNumControls(); i++) {
             for (int i = 0; i < node.getNumControls(); i++) {
                 if (node.getControl(i) instanceof PhysicsControl) {
                 if (node.getControl(i) instanceof PhysicsControl) {
-                    add(((PhysicsControl) node.getControl(i)));
+                    add(node.getControl(i));
                 }
                 }
             }
             }
         } else if (obj instanceof PhysicsCollisionObject) {
         } else if (obj instanceof PhysicsCollisionObject) {
@@ -581,7 +581,7 @@ public class PhysicsSpace {
             Spatial node = (Spatial) obj;
             Spatial node = (Spatial) obj;
             for (int i = 0; i < node.getNumControls(); i++) {
             for (int i = 0; i < node.getNumControls(); i++) {
                 if (node.getControl(i) instanceof PhysicsControl) {
                 if (node.getControl(i) instanceof PhysicsControl) {
-                    remove(((PhysicsControl) node.getControl(i)));
+                    remove(node.getControl(i));
                 }
                 }
             }
             }
         } else if (obj instanceof PhysicsCollisionObject) {
         } else if (obj instanceof PhysicsCollisionObject) {
@@ -1129,7 +1129,7 @@ public class PhysicsSpace {
     public List<PhysicsSweepTestResult> sweepTest(CollisionShape shape, Transform start, Transform end) {
     public List<PhysicsSweepTestResult> sweepTest(CollisionShape shape, Transform start, Transform end) {
         List results = new LinkedList();
         List results = new LinkedList();
         sweepTest(shape, start, end , results);
         sweepTest(shape, start, end , results);
-        return (List<PhysicsSweepTestResult>) results;
+        return results;
     }
     }
 
 
     /**
     /**

+ 4 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/BoxCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -57,7 +57,7 @@ public class BoxCollisionShape extends CollisionShape {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public BoxCollisionShape() {
+    protected BoxCollisionShape() {
     }
     }
 
 
     /**
     /**
@@ -86,6 +86,7 @@ public class BoxCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -98,6 +99,7 @@ public class BoxCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 4 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CapsuleCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -64,7 +64,7 @@ public class CapsuleCollisionShape extends CollisionShape{
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public CapsuleCollisionShape() {
+    protected CapsuleCollisionShape() {
     }
     }
 
 
     /**
     /**
@@ -141,6 +141,7 @@ public class CapsuleCollisionShape extends CollisionShape{
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -155,6 +156,7 @@ public class CapsuleCollisionShape extends CollisionShape{
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 2 - 1
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2019 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -201,6 +201,7 @@ public abstract class CollisionShape implements Savable {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
         capsule.write(scale, "scale", new Vector3f(1, 1, 1));
         capsule.write(scale, "scale", new Vector3f(1, 1, 1));

+ 3 - 1
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CompoundCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -152,6 +152,7 @@ public class CompoundCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -164,6 +165,7 @@ public class CompoundCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 4 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/ConeCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -65,7 +65,7 @@ public class ConeCollisionShape extends CollisionShape {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public ConeCollisionShape() {
+    protected ConeCollisionShape() {
     }
     }
 
 
     /**
     /**
@@ -119,6 +119,7 @@ public class ConeCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -133,6 +134,7 @@ public class ConeCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 4 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CylinderCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -62,7 +62,7 @@ public class CylinderCollisionShape extends CollisionShape {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public CylinderCollisionShape() {
+    protected CylinderCollisionShape() {
     }
     }
 
 
     /**
     /**
@@ -128,6 +128,7 @@ public class CylinderCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -141,6 +142,7 @@ public class CylinderCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 4 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/GImpactCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -68,7 +68,7 @@ public class GImpactCollisionShape extends CollisionShape {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public GImpactCollisionShape() {
+    protected GImpactCollisionShape() {
     }
     }
 
 
     /**
     /**
@@ -122,6 +122,7 @@ public class GImpactCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -141,6 +142,7 @@ public class GImpactCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 4 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/HeightfieldCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -93,7 +93,7 @@ public class HeightfieldCollisionShape extends CollisionShape {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public HeightfieldCollisionShape() {
+    protected HeightfieldCollisionShape() {
     }
     }
 
 
     /**
     /**
@@ -193,6 +193,7 @@ public class HeightfieldCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -212,6 +213,7 @@ public class HeightfieldCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 2 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -56,7 +56,7 @@ public class HullCollisionShape extends CollisionShape {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public HullCollisionShape() {
+    protected HullCollisionShape() {
     }
     }
 
 
     /**
     /**

+ 2 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/MeshCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -75,7 +75,7 @@ public class MeshCollisionShape extends CollisionShape {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public MeshCollisionShape() {
+    protected MeshCollisionShape() {
     }
     }
 
 
     /**
     /**

+ 4 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/PlaneCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -56,7 +56,7 @@ public class PlaneCollisionShape extends CollisionShape{
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public PlaneCollisionShape() {
+    protected PlaneCollisionShape() {
     }
     }
 
 
     /**
     /**
@@ -84,6 +84,7 @@ public class PlaneCollisionShape extends CollisionShape{
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -96,6 +97,7 @@ public class PlaneCollisionShape extends CollisionShape{
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 4 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SimplexCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -57,7 +57,7 @@ public class SimplexCollisionShape extends CollisionShape {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public SimplexCollisionShape() {
+    protected SimplexCollisionShape() {
     }
     }
 
 
     /**
     /**
@@ -118,6 +118,7 @@ public class SimplexCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -133,6 +134,7 @@ public class SimplexCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 4 - 2
jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SphereCollisionShape.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -57,7 +57,7 @@ public class SphereCollisionShape extends CollisionShape {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public SphereCollisionShape() {
+    protected SphereCollisionShape() {
     }
     }
 
 
     /**
     /**
@@ -85,6 +85,7 @@ public class SphereCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -97,6 +98,7 @@ public class SphereCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 2 - 2
jme3-bullet/src/main/java/com/jme3/bullet/joints/ConeJoint.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -64,7 +64,7 @@ public class ConeJoint extends PhysicsJoint {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public ConeJoint() {
+    protected ConeJoint() {
     }
     }
 
 
     /**
     /**

+ 4 - 2
jme3-bullet/src/main/java/com/jme3/bullet/joints/HingeJoint.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -80,7 +80,7 @@ public class HingeJoint extends PhysicsJoint {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public HingeJoint() {
+    protected HingeJoint() {
     }
     }
 
 
     /**
     /**
@@ -242,6 +242,7 @@ public class HingeJoint extends PhysicsJoint {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -268,6 +269,7 @@ public class HingeJoint extends PhysicsJoint {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         super.read(im);
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);

+ 6 - 4
jme3-bullet/src/main/java/com/jme3/bullet/joints/PhysicsJoint.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -76,7 +76,7 @@ public abstract class PhysicsJoint implements Savable {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public PhysicsJoint() {
+    protected PhysicsJoint() {
     }
     }
 
 
     /**
     /**
@@ -192,6 +192,7 @@ public abstract class PhysicsJoint implements Savable {
      * @param ex exporter (not null)
      * @param ex exporter (not null)
      * @throws IOException from exporter
      * @throws IOException from exporter
      */
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
     public void write(JmeExporter ex) throws IOException {
         OutputCapsule capsule = ex.getCapsule(this);
         OutputCapsule capsule = ex.getCapsule(this);
         capsule.write(nodeA, "nodeA", null);
         capsule.write(nodeA, "nodeA", null);
@@ -206,10 +207,11 @@ public abstract class PhysicsJoint implements Savable {
      * @param im importer (not null)
      * @param im importer (not null)
      * @throws IOException from importer
      * @throws IOException from importer
      */
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
     public void read(JmeImporter im) throws IOException {
         InputCapsule capsule = im.getCapsule(this);
         InputCapsule capsule = im.getCapsule(this);
-        this.nodeA = ((PhysicsRigidBody) capsule.readSavable("nodeA", new PhysicsRigidBody()));
-        this.nodeB = (PhysicsRigidBody) capsule.readSavable("nodeB", new PhysicsRigidBody());
+        this.nodeA = ((PhysicsRigidBody) capsule.readSavable("nodeA", null));
+        this.nodeB = (PhysicsRigidBody) capsule.readSavable("nodeB", null);
         this.pivotA = (Vector3f) capsule.readSavable("pivotA", new Vector3f());
         this.pivotA = (Vector3f) capsule.readSavable("pivotA", new Vector3f());
         this.pivotB = (Vector3f) capsule.readSavable("pivotB", new Vector3f());
         this.pivotB = (Vector3f) capsule.readSavable("pivotB", new Vector3f());
     }
     }

+ 2 - 2
jme3-bullet/src/main/java/com/jme3/bullet/joints/Point2PointJoint.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -57,7 +57,7 @@ public class Point2PointJoint extends PhysicsJoint {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public Point2PointJoint() {
+    protected Point2PointJoint() {
     }
     }
 
 
     /**
     /**

+ 2 - 2
jme3-bullet/src/main/java/com/jme3/bullet/joints/SixDofJoint.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -99,7 +99,7 @@ public class SixDofJoint extends PhysicsJoint {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public SixDofJoint() {
+    protected SixDofJoint() {
     }
     }
 
 
     /**
     /**

+ 2 - 2
jme3-bullet/src/main/java/com/jme3/bullet/joints/SliderJoint.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -60,7 +60,7 @@ public class SliderJoint extends PhysicsJoint {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public SliderJoint() {
+    protected SliderJoint() {
     }
     }
 
 
     /**
     /**

+ 1 - 1
jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsCharacter.java

@@ -71,7 +71,7 @@ public class PhysicsCharacter extends PhysicsCollisionObject {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public PhysicsCharacter() {
+    protected PhysicsCharacter() {
     }
     }
 
 
     /**
     /**

+ 2 - 2
jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsGhostObject.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -68,7 +68,7 @@ public class PhysicsGhostObject extends PhysicsCollisionObject {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public PhysicsGhostObject() {
+    protected PhysicsGhostObject() {
     }
     }
 
 
     /**
     /**

+ 3 - 2
jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsRigidBody.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -81,7 +81,7 @@ public class PhysicsRigidBody extends PhysicsCollisionObject {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public PhysicsRigidBody() {
+    protected PhysicsRigidBody() {
     }
     }
 
 
     /**
     /**
@@ -794,6 +794,7 @@ public class PhysicsRigidBody extends PhysicsCollisionObject {
      *
      *
      * @param collisionShape the shape to apply (not null, alias created)
      * @param collisionShape the shape to apply (not null, alias created)
      */
      */
+    @Override
     public void setCollisionShape(CollisionShape collisionShape) {
     public void setCollisionShape(CollisionShape collisionShape) {
         super.setCollisionShape(collisionShape);
         super.setCollisionShape(collisionShape);
         if (collisionShape instanceof MeshCollisionShape && mass != 0) {
         if (collisionShape instanceof MeshCollisionShape && mass != 0) {

+ 2 - 2
jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsVehicle.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -90,7 +90,7 @@ public class PhysicsVehicle extends PhysicsRigidBody {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public PhysicsVehicle() {
+    protected PhysicsVehicle() {
     }
     }
 
 
     /**
     /**

+ 2 - 2
jme3-bullet/src/main/java/com/jme3/bullet/objects/VehicleWheel.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2018 jMonkeyEngine
+ * Copyright (c) 2009-2019 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -136,7 +136,7 @@ public class VehicleWheel implements Savable {
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * No-argument constructor needed by SavableClassUtil. Do not invoke
      * directly!
      * directly!
      */
      */
-    public VehicleWheel() {
+    protected VehicleWheel() {
     }
     }
 
 
     /**
     /**

+ 1 - 1
jme3-core/src/main/java/com/jme3/anim/AnimClip.java

@@ -16,7 +16,7 @@ public class AnimClip implements JmeCloneable, Savable {
 
 
     private AnimTrack[] tracks;
     private AnimTrack[] tracks;
 
 
-    public AnimClip() {
+    protected AnimClip() {
     }
     }
 
 
     public AnimClip(String name) {
     public AnimClip(String name) {

+ 1 - 1
jme3-core/src/main/java/com/jme3/anim/Armature.java

@@ -28,7 +28,7 @@ public class Armature implements JmeCloneable, Savable {
     /**
     /**
      * Serialization only
      * Serialization only
      */
      */
-    public Armature() {
+    protected Armature() {
     }
     }
 
 
     /**
     /**

+ 2 - 0
jme3-core/src/main/java/com/jme3/anim/Joint.java

@@ -216,6 +216,7 @@ public class Joint implements Savable, JmeCloneable, HasLocalTransform {
         this.name = name;
         this.name = name;
     }
     }
 
 
+    @Override
     public void setLocalTransform(Transform localTransform) {
     public void setLocalTransform(Transform localTransform) {
         this.localTransform.set(localTransform);
         this.localTransform.set(localTransform);
     }
     }
@@ -272,6 +273,7 @@ public class Joint implements Savable, JmeCloneable, HasLocalTransform {
         return initialTransform;
         return initialTransform;
     }
     }
 
 
+    @Override
     public Transform getLocalTransform() {
     public Transform getLocalTransform() {
         return localTransform;
         return localTransform;
     }
     }

+ 1 - 0
jme3-core/src/main/java/com/jme3/anim/MatrixJointModelTransform.java

@@ -22,6 +22,7 @@ public class MatrixJointModelTransform implements JointModelTransform {
 
 
     }
     }
 
 
+    @Override
     public void getOffsetTransform(Matrix4f outTransform, Matrix4f inverseModelBindMatrix) {
     public void getOffsetTransform(Matrix4f outTransform, Matrix4f inverseModelBindMatrix) {
         modelTransformMatrix.mult(inverseModelBindMatrix, outTransform);
         modelTransformMatrix.mult(inverseModelBindMatrix, outTransform);
     }
     }

+ 3 - 3
jme3-core/src/main/java/com/jme3/anim/MorphTrack.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2019 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -59,7 +59,7 @@ public class MorphTrack implements AnimTrack<float[]> {
     /**
     /**
      * Serialization-only. Do not use.
      * Serialization-only. Do not use.
      */
      */
-    public MorphTrack() {
+    protected MorphTrack() {
     }
     }
 
 
     /**
     /**
@@ -122,7 +122,7 @@ public class MorphTrack implements AnimTrack<float[]> {
 
 
             this.weights = weights;
             this.weights = weights;
 
 
-            assert times != null && times.length == weights.length;
+            assert times.length == weights.length;
         }
         }
     }
     }
 
 

+ 1 - 0
jme3-core/src/main/java/com/jme3/anim/SeparateJointModelTransform.java

@@ -23,6 +23,7 @@ public class SeparateJointModelTransform implements JointModelTransform {
         }
         }
     }
     }
 
 
+    @Override
     public void getOffsetTransform(Matrix4f outTransform, Matrix4f inverseModelBindMatrix) {
     public void getOffsetTransform(Matrix4f outTransform, Matrix4f inverseModelBindMatrix) {
         modelTransform.toTransformMatrix(outTransform).mult(inverseModelBindMatrix, outTransform);
         modelTransform.toTransformMatrix(outTransform).mult(inverseModelBindMatrix, outTransform);
     }
     }

+ 1 - 1
jme3-core/src/main/java/com/jme3/anim/SkinningControl.java

@@ -115,7 +115,7 @@ public class SkinningControl extends AbstractControl implements Cloneable, JmeCl
     /**
     /**
      * Serialization only. Do not use.
      * Serialization only. Do not use.
      */
      */
-    public SkinningControl() {
+    protected SkinningControl() {
     }
     }
 
 
     /**
     /**

+ 3 - 1
jme3-core/src/main/java/com/jme3/anim/TransformTrack.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2019 jMonkeyEngine
+ * Copyright (c) 2009-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -208,10 +208,12 @@ public class TransformTrack implements AnimTrack<Transform> {
         }
         }
     }
     }
 
 
+    @Override
     public double getLength() {
     public double getLength() {
         return length;
         return length;
     }
     }
 
 
+    @Override
     public void getDataAtTime(double t, Transform transform) {
     public void getDataAtTime(double t, Transform transform) {
         float time = (float) t;
         float time = (float) t;
 
 

+ 26 - 31
jme3-core/src/main/java/com/jme3/anim/tween/AbstractTween.java

@@ -1,39 +1,34 @@
 /*
 /*
- * $Id$
- * 
- * Copyright (c) 2015, Simsilica, LLC
+ * Copyright (c) 2015-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions 
+ * modification, are permitted provided that the following conditions
  * are met:
  * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright 
- *    notice, this list of conditions and the following disclaimer.
- * 
- * 2. 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.
- * 
- * 3. Neither the name of the copyright holder 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 HOLDER 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.
+ *
+ * * 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.anim.tween;
 package com.jme3.anim.tween;
 
 
 import com.jme3.util.clone.Cloner;
 import com.jme3.util.clone.Cloner;

+ 26 - 31
jme3-core/src/main/java/com/jme3/anim/tween/Tween.java

@@ -1,39 +1,34 @@
 /*
 /*
- * $Id$
- * 
- * Copyright (c) 2015, Simsilica, LLC
+ * Copyright (c) 2015-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions 
+ * modification, are permitted provided that the following conditions
  * are met:
  * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright 
- *    notice, this list of conditions and the following disclaimer.
- * 
- * 2. 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.
- * 
- * 3. Neither the name of the copyright holder 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 HOLDER 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.
+ *
+ * * 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.anim.tween;
 package com.jme3.anim.tween;
 
 
 /**
 /**

+ 26 - 31
jme3-core/src/main/java/com/jme3/anim/tween/Tweens.java

@@ -1,39 +1,34 @@
 /*
 /*
- * $Id$
- * 
- * Copyright (c) 2015, Simsilica, LLC
+ * Copyright (c) 2015-2020 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions 
+ * modification, are permitted provided that the following conditions
  * are met:
  * are met:
- * 
- * 1. Redistributions of source code must retain the above copyright 
- *    notice, this list of conditions and the following disclaimer.
- * 
- * 2. 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.
- * 
- * 3. Neither the name of the copyright holder 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 HOLDER 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.
+ *
+ * * 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.anim.tween;
 package com.jme3.anim.tween;
 
 
 import com.jme3.anim.util.Primitives;
 import com.jme3.anim.util.Primitives;

+ 1 - 0
jme3-core/src/main/java/com/jme3/anim/tween/action/BlendAction.java

@@ -49,6 +49,7 @@ public class BlendAction extends BlendableAction {
         }
         }
     }
     }
 
 
+    @Override
     public void doInterpolate(double t) {
     public void doInterpolate(double t) {
         blendWeight = blendSpace.getWeight();
         blendWeight = blendSpace.getWeight();
         BlendableAction firstActiveAction = (BlendableAction) actions[firstActiveIndex];
         BlendableAction firstActiveAction = (BlendableAction) actions[firstActiveIndex];

+ 1 - 0
jme3-core/src/main/java/com/jme3/anim/tween/action/ClipAction.java

@@ -63,6 +63,7 @@ public class ClipAction extends BlendableAction {
 
 
     }
     }
 
 
+    @Override
     public String toString() {
     public String toString() {
         return clip.toString();
         return clip.toString();
     }
     }

Some files were not shown because too many files changed in this diff