Browse Source

Merge pull request #7 from jMonkeyEngine/master

Update fork PR
joliver82 5 years ago
parent
commit
9d8cbfa576
100 changed files with 627 additions and 600 deletions
  1. 18 14
      .github/workflows/main.yml
  2. 3 0
      README.md
  3. 21 19
      build.gradle
  4. 7 3
      gradle.properties
  5. BIN
      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     
         with:
           fetch-depth: 1
-
-      - name: Build        
+      - name: Validate the Gradle wrapper
+        uses: gradle/wrapper-validation-action@v1
+      - name: Build
         run: |
           # Build
           # Note: since this is crossbuild we use the buildForPlatforms filter to tell
           # 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 
 
       - name: Upload natives
@@ -96,10 +97,11 @@ jobs:
         uses: actions/checkout@v1     
         with:
           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-bullet-native-android:assemble 
      
@@ -137,8 +139,9 @@ jobs:
         uses: actions/setup-java@v1
         with:
           java-version: ${{ matrix.jdk }}
-          architecture: x64 
-          
+          architecture: x64
+      - name: Validate the Gradle wrapper
+        uses: gradle/wrapper-validation-action@v1
       - name: Build Natives
         shell: bash
         env:
@@ -159,7 +162,7 @@ jobs:
           fi
           
           # 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 \
           :jme3-bullet-native:build
                   
@@ -233,12 +236,13 @@ jobs:
         with:
           name: linuxarm-natives
           path: build/native
-                                                     
+      - name: Validate the Gradle wrapper
+        uses: gradle/wrapper-validation-action@v1
       - name: Build Engine
         shell: bash
         run: |
           # Build
-          gradle -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true build
+          ./gradlew -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true build
           
           if [ "${{ matrix.deploy }}" = "true" ];
           then  
@@ -247,7 +251,7 @@ jobs:
             sudo apt-get install -y zip
 
             # 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
             mkdir -p ./dist/release/
@@ -255,7 +259,7 @@ jobs:
             
             # Create the maven artifacts
             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)
             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/)
  - [Skullstone](http://www.skullstonegame.com/)
  - [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
 

+ 21 - 19
build.gradle

@@ -158,29 +158,29 @@ task configureAndroidNDK {
 
 gradle.rootProject.ext.set("usePrebuildNatives", buildNativeProjects!="true");
 
-if(skipPrebuildLibraries!="true"&&buildNativeProjects!="true"){
+if (skipPrebuildLibraries != "true" && buildNativeProjects != "true") {
     String rootPath = rootProject.projectDir.absolutePath
 
     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) }
 
-        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 {
             outputs.file nativesZipFile
             doFirst {
                 File target = file(nativesZipFile);
-                println("Download natives from "+nativesUrl+" to "+nativesZipFile);
+                println("Download natives from " + nativesUrl + " to " + nativesZipFile);
                 target.getParentFile().mkdirs();
                 ant.get(src: nativesUrl, dest: target);
             }
@@ -192,28 +192,26 @@ if(skipPrebuildLibraries!="true"&&buildNativeProjects!="true"){
             dependsOn getNativesZipFile
 
             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())
                     if (doCopy) {
-                        println("Copy "+src+" "+dest);
+                        println("Copy " + src + " " + dest);
                         dest.getParentFile().mkdirs();
                         Files.copy(src.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING);
                     }
                 }
             }
         }
-        build.dependsOn extractPrebuiltNatives
+
+        assemble.dependsOn extractPrebuiltNatives
     }
 }
 
 
-
-
-
 //class IncrementalReverseTask extends DefaultTask {
 //    @InputDirectory
 //    def File inputDir
@@ -249,3 +247,7 @@ if(skipPrebuildLibraries!="true"&&buildNativeProjects!="true"){
 //        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
 # (use -PjmeVersionName="myVersion" from commandline to specify a custom version name )
-jmeVersionName = 
+jmeVersionName =
 
 # If true, the version name will contain the commit hash
 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
 buildJavaDoc = true
 

BIN
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
 
+#
+# 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
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
 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.
-DEFAULT_JVM_OPTS=""
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 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\""
 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"`
     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
     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
 @rem ##########################################################################
 @rem
@@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0
 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.
-set DEFAULT_JVM_OPTS=
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
 
 @rem Find java.exe
 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) {
         boolean include = true;
         try {
-            Class<?> clazz = (Class<?>) Class.forName(className);
+            Class<?> clazz = Class.forName(className);
             if (Application.class.isAssignableFrom(clazz)) {
                 Log.d(TAG, "Class " + className + " is a jME Application");
             } else {

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

@@ -1,5 +1,5 @@
 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.
 String decodeBuildDir = "${buildDir}" + File.separator + 'decode'

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

@@ -1,11 +1,11 @@
 // 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'
 
 // OpenAL Soft directory the download is extracted into
 // Typically, the downloaded OpenAL Soft zip file will extract to a directory
 // called "openal-soft"
-String openALSoftFolder = 'openal-soft-e5016f8'
+String openALSoftFolder = 'openal-soft-e5016f814a265ed592a88acea95cf912c4bfdf12'
 
 //Working directories for the ndk build.
 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 whichButton
      */
+    @Override
     public void onClick(DialogInterface dialog, int whichButton) {
         if (whichButton != -2) {
             if (app != null) {
@@ -473,6 +474,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
         handler.setLevel(Level.ALL);
     }
 
+    @Override
     public void initialize() {
         app.initialize();
         if (handleExitHook) {
@@ -488,10 +490,12 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
         }
     }
 
+    @Override
     public void reshape(int width, int height) {
         app.reshape(width, height);
     }
 
+    @Override
     public void update() {
         app.update();
         // 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) {
         app.requestClose(esc);
     }
 
+    @Override
     public void destroy() {
         if (app != null) {
             app.destroy();
@@ -516,6 +522,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
         }
     }
 
+    @Override
     public void gainFocus() {
         logger.fine("gainFocus");
         if (view != null) {
@@ -547,6 +554,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
         }
     }
 
+    @Override
     public void loseFocus() {
         logger.fine("loseFocus");
         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.
  *
  * 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) {
                         // landscape
                         fixedSizeWidth = maxResolutionDimension;
-                        fixedSizeHeight = (int)(maxResolutionDimension * ((float)viewHeight / (float)viewWidth));
+                        fixedSizeHeight = (int)(maxResolutionDimension * (viewHeight / (float)viewWidth));
                     } else if (viewHeight > viewWidth && viewHeight > maxResolutionDimension) {
                         // portrait
-                        fixedSizeWidth = (int)(maxResolutionDimension * ((float)viewWidth / (float)viewHeight));
+                        fixedSizeWidth = (int)(maxResolutionDimension * (viewWidth / (float)viewHeight));
                         fixedSizeHeight = maxResolutionDimension;
                     } else if (viewWidth == viewHeight && viewWidth > 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.
  *
  * 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 {
     private int androidApiLevel = Build.VERSION.SDK_INT;
 
+    @Override
     public void appStep(AppStep appStep) {
         if (androidApiLevel >= 18) {
             switch(appStep) {
@@ -140,6 +141,7 @@ public class DefaultAndroidProfiler implements AppProfiler {
 
     }
 
+    @Override
     public void vpStep(VpStep vpStep, ViewPort vp, RenderQueue.Bucket bucket) {
         if (androidApiLevel >= 18) {
             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.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -478,7 +478,7 @@ public class MjpegFileWriter {
             baos.write(fcc);
             baos.write(intBytes(swapInt(cb)));
             for (int i = 0; i < ind.size(); i++) {
-                AVIIndex in = (AVIIndex) ind.get(i);
+                AVIIndex in = ind.get(i);
                 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.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -73,6 +73,7 @@ public class VideoRecorderAppState extends AbstractAppState {
     private Application app;
     private ExecutorService executor = Executors.newCachedThreadPool(new ThreadFactory() {
 
+        @Override
         public Thread newThread(Runnable r) {
             Thread th = new Thread(r);
             th.setName("jME3 Video Processor");
@@ -239,6 +240,7 @@ public class VideoRecorderAppState extends AbstractAppState {
                 renderer.readFrameBufferWithFormat(out, item.buffer, Image.Format.BGRA8);
                 executor.submit(new Callable<Void>() {
 
+                    @Override
                     public Void call() throws Exception {
                         if (fastMode) {
                             item.data = item.buffer.array();
@@ -260,6 +262,7 @@ public class VideoRecorderAppState extends AbstractAppState {
             }
         }
 
+        @Override
         public void initialize(RenderManager rm, ViewPort viewPort) {
             logger.log(Level.INFO, "initialize in VideoProcessor");
             this.camera = viewPort.getCamera();
@@ -275,13 +278,16 @@ public class VideoRecorderAppState extends AbstractAppState {
             }
         }
 
+        @Override
         public void reshape(ViewPort vp, int w, int h) {
         }
 
+        @Override
         public boolean isInitialized() {
             return this.isInitilized;
         }
 
+        @Override
         public void preFrame(float tpf) {
             if (null == writer) {
                 try {
@@ -292,14 +298,17 @@ public class VideoRecorderAppState extends AbstractAppState {
             }
         }
 
+        @Override
         public void postQueue(RenderQueue rq) {
         }
 
+        @Override
         public void postFrame(FrameBuffer out) {
             numFrames++;
             addImage(renderManager.getRenderer(), out);
         }
 
+        @Override
         public void cleanup() {
             logger.log(Level.INFO, "cleanup in VideoProcessor");
             logger.log(Level.INFO, "VideoProcessor numFrames: {0}", numFrames);
@@ -332,22 +341,27 @@ public class VideoRecorderAppState extends AbstractAppState {
             this.ticks = 0;
         }
 
+        @Override
         public long getTime() {
             return (long) (this.ticks * (1.0f / this.framerate) * 1000f);
         }
 
+        @Override
         public long getResolution() {
             return 1000L;
         }
 
+        @Override
         public float getFrameRate() {
             return this.framerate;
         }
 
+        @Override
         public float getTimePerFrame() {
-            return (float) (1.0f / this.framerate);
+            return 1.0f / this.framerate;
         }
 
+        @Override
         public void update() {
             long time = System.currentTimeMillis();
             long difference = time - lastTime;
@@ -364,6 +378,7 @@ public class VideoRecorderAppState extends AbstractAppState {
             this.ticks++;
         }
 
+        @Override
         public void reset() {
             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() {
     }
 
+    @Override
     public void setRootPath(String 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() {
     }
 
+    @Override
     public native String alGetString(int parameter);
 
+    @Override
     public native int alGenSources();
 
+    @Override
     public native int alGetError();
 
+    @Override
     public native void alDeleteSources(int numSources, IntBuffer sources);
 
+    @Override
     public native void alGenBuffers(int numBuffers, IntBuffer buffers);
 
+    @Override
     public native void alDeleteBuffers(int numBuffers, IntBuffer buffers);
 
+    @Override
     public native void alSourceStop(int source);
 
+    @Override
     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);
 
+    @Override
     public native void alSourcePlay(int source);
 
+    @Override
     public native void alSourcePause(int source);
 
+    @Override
     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);
 
+    @Override
     public native int alGetSourcei(int source, int param);
 
+    @Override
     public native void alSourceUnqueueBuffers(int source, int numBuffers, IntBuffer buffers);
 
+    @Override
     public native void alSourceQueueBuffers(int source, int numBuffers, IntBuffer buffers);
 
+    @Override
     public native void alListener(int param, FloatBuffer data);
 
+    @Override
     public native void alListenerf(int param, float value);
 
+    @Override
     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);
 
 }

+ 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() {
     }
 
+    @Override
     public native void createALC();
 
+    @Override
     public native void destroyALC();
 
+    @Override
     public native boolean isCreated();
 
+    @Override
     public native String alcGetString(int parameter);
     
+    @Override
     public native boolean alcIsExtensionPresent(String extension);
     
+    @Override
     public native void alcGetInteger(int param, IntBuffer buffer, int size);
     
+    @Override
     public native void alcDevicePauseSOFT();
     
+    @Override
     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() {
     }
 
+    @Override
     public native void alGenAuxiliaryEffectSlots(int numSlots, IntBuffer buffers);
 
+    @Override
     public native void alGenEffects(int numEffects, IntBuffer buffers);
 
+    @Override
     public native void alEffecti(int effect, int param, int value);
 
+    @Override
     public native void alAuxiliaryEffectSloti(int effectSlot, int param, int value);
 
+    @Override
     public native void alDeleteEffects(int numEffects, IntBuffer buffers);
 
+    @Override
     public native void alDeleteAuxiliaryEffectSlots(int numEffectSlots, IntBuffer buffers);
 
+    @Override
     public native void alGenFilters(int numFilters, IntBuffer buffers);
 
+    @Override
     public native void alFilteri(int filter, int param, int value);
 
+    @Override
     public native void alFilterf(int filter, int param, float value);
 
+    @Override
     public native void alDeleteFilters(int numFilters, IntBuffer buffers);
 
+    @Override
     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");
         }
 
+        @Override
         public void setTime(float time) {
             try {
                 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.
  *
  * 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) {
                     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.
  *
  * 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
         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}",
                 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.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -87,7 +87,7 @@ public class TouchEventPool {
         TouchEvent evt = null;
         int curSize = eventPool.size();
         while (curSize > 0) {
-            evt = (TouchEvent)eventPool.pop();
+            evt = eventPool.pop();
             if (evt.isConsumed()) {
                 break;
             } 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.
  *
  * 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);
 
+    @Override
     public void resetStats() {
     }
 
@@ -86,10 +87,12 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         }
     }
 
+    @Override
     public void glActiveTexture(int texture) {
         GLES20.glActiveTexture(texture);
     }
 
+    @Override
     public void glAttachShader(int program, int shader) {
         GLES20.glAttachShader(program, shader);
     }
@@ -99,144 +102,179 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         GLES30.glBeginQuery(target, query);
     }
 
+    @Override
     public void glBindBuffer(int target, int buffer) {
         GLES20.glBindBuffer(target, buffer);
     }
 
+    @Override
     public void glBindTexture(int target, int texture) {
         GLES20.glBindTexture(target, texture);
     }
 
+    @Override
     public void glBlendFunc(int sfactor, int dfactor) {
         GLES20.glBlendFunc(sfactor, dfactor);
     }
     
+    @Override
     public void glBlendFuncSeparate(int sfactorRGB, int dfactorRGB, int sfactorAlpha, int dfactorAlpha) {
        GLES20.glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
     }
 
+    @Override
     public void glBufferData(int target, FloatBuffer data, int usage) {
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
     }
 
+    @Override
     public void glBufferData(int target, ShortBuffer data, int usage) {
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
     }
 
+    @Override
     public void glBufferData(int target, ByteBuffer data, int usage) {
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
     }
 
+    @Override
     public void glBufferData(int target, long data_size, int usage) {
         GLES20.glBufferData(target, (int) data_size, null, usage);
     }
 
+    @Override
     public void glBufferSubData(int target, long offset, FloatBuffer data) {
         GLES20.glBufferSubData(target, (int) offset, getLimitBytes(data), data);
     }
 
+    @Override
     public void glBufferSubData(int target, long offset, ShortBuffer data) {
         GLES20.glBufferSubData(target, (int) offset, getLimitBytes(data), data);
     }
 
+    @Override
     public void glBufferSubData(int target, long offset, ByteBuffer data) {
         GLES20.glBufferSubData(target, (int) offset, getLimitBytes(data), data);
     }
 
+    @Override
     public void glGetBufferSubData(int target, long offset, ByteBuffer data) {
         throw new UnsupportedOperationException("OpenGL ES 2 does not support glGetBufferSubData");
     }
 
+    @Override
     public void glClear(int mask) {
         GLES20.glClear(mask);
     }
 
+    @Override
     public void glClearColor(float red, float green, float blue, float alpha) {
         GLES20.glClearColor(red, green, blue, alpha);
     }
 
+    @Override
     public void glColorMask(boolean red, boolean green, boolean blue, boolean alpha) {
         GLES20.glColorMask(red, green, blue, alpha);
     }
 
+    @Override
     public void glCompileShader(int shader) {
         GLES20.glCompileShader(shader);
     }
 
+    @Override
     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);
     }
 
+    @Override
     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);
     }
 
+    @Override
     public int glCreateProgram() {
         return GLES20.glCreateProgram();
     }
 
+    @Override
     public int glCreateShader(int shaderType) {
         return GLES20.glCreateShader(shaderType);
     }
 
+    @Override
     public void glCullFace(int mode) {
         GLES20.glCullFace(mode);
     }
 
+    @Override
     public void glDeleteBuffers(IntBuffer buffers) {
         checkLimit(buffers);
         GLES20.glDeleteBuffers(buffers.limit(), buffers);
     }
 
+    @Override
     public void glDeleteProgram(int program) {
         GLES20.glDeleteProgram(program);
     }
 
+    @Override
     public void glDeleteShader(int shader) {
         GLES20.glDeleteShader(shader);
     }
 
+    @Override
     public void glDeleteTextures(IntBuffer textures) {
         checkLimit(textures);
         GLES20.glDeleteTextures(textures.limit(), textures);
     }
 
+    @Override
     public void glDepthFunc(int func) {
         GLES20.glDepthFunc(func);
     }
 
+    @Override
     public void glDepthMask(boolean flag) {
         GLES20.glDepthMask(flag);
     }
 
+    @Override
     public void glDepthRange(double nearVal, double farVal) {
         GLES20.glDepthRangef((float)nearVal, (float)farVal);
     }
 
+    @Override
     public void glDetachShader(int program, int shader) {
         GLES20.glDetachShader(program, shader);
     }
 
+    @Override
     public void glDisable(int cap) {
         GLES20.glDisable(cap);
     }
 
+    @Override
     public void glDisableVertexAttribArray(int index) {
         GLES20.glDisableVertexAttribArray(index);
     }
 
+    @Override
     public void glDrawArrays(int mode, int first, int count) {
         GLES20.glDrawArrays(mode, first, count);
     }
 
+    @Override
     public void glDrawRangeElements(int mode, int start, int end, int count, int type, long indices) {
         GLES20.glDrawElements(mode, count, type, (int)indices);
     }
 
+    @Override
     public void glEnable(int cap) {
         GLES20.glEnable(cap);
     }
 
+    @Override
     public void glEnableVertexAttribArray(int index) {
         GLES20.glEnableVertexAttribArray(index);
     }
@@ -246,11 +284,13 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         GLES30.glEndQuery(target);
     }
 
+    @Override
     public void glGenBuffers(IntBuffer buffers) {
         checkLimit(buffers);
         GLES20.glGenBuffers(buffers.limit(), buffers);
     }
 
+    @Override
     public void glGenTextures(IntBuffer textures) {
         checkLimit(textures);
         GLES20.glGenTextures(textures.limit(), textures);
@@ -261,29 +301,35 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         GLES30.glGenQueries(num, buff);
     }
 
+    @Override
     public int glGetAttribLocation(int program, String name) {
         return GLES20.glGetAttribLocation(program, name);
     }
 
+    @Override
     public void glGetBoolean(int pname, ByteBuffer params) {
         // GLES20.glGetBoolean(pname, params);
         throw new UnsupportedOperationException("Today is not a good day for this");
     }
 
+    @Override
     public int glGetError() {
         return GLES20.glGetError();
     }
 
+    @Override
     public void glGetInteger(int pname, IntBuffer params) {
         checkLimit(params);
         GLES20.glGetIntegerv(pname, params);
     }
 
+    @Override
     public void glGetProgram(int program, int pname, IntBuffer params) {
         checkLimit(params);
         GLES20.glGetProgramiv(program, pname, params);
     }
 
+    @Override
     public String glGetProgramInfoLog(int program, int maxLength) {
         return GLES20.glGetProgramInfoLog(program);
     }
@@ -303,51 +349,63 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         return buff.get(0);
     }
 
+    @Override
     public void glGetShader(int shader, int pname, IntBuffer params) {
         checkLimit(params);
         GLES20.glGetShaderiv(shader, pname, params);
     }
 
+    @Override
     public String glGetShaderInfoLog(int shader, int maxLength) {
         return GLES20.glGetShaderInfoLog(shader);
     }
 
+    @Override
     public String glGetString(int name) {
         return GLES20.glGetString(name);
     }
 
+    @Override
     public int glGetUniformLocation(int program, String name) {
         return GLES20.glGetUniformLocation(program, name);
     }
 
+    @Override
     public boolean glIsEnabled(int cap) {
         return GLES20.glIsEnabled(cap);
     }
 
+    @Override
     public void glLineWidth(float width) {
         GLES20.glLineWidth(width);
     }
 
+    @Override
     public void glLinkProgram(int program) {
         GLES20.glLinkProgram(program);
     }
 
+    @Override
     public void glPixelStorei(int pname, int param) {
         GLES20.glPixelStorei(pname, param);
     }
 
+    @Override
     public void glPolygonOffset(float factor, float units) {
         GLES20.glPolygonOffset(factor, units);
     }
 
+    @Override
     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);
     }
 
+    @Override
     public void glScissor(int x, int y, int width, int height) {
         GLES20.glScissor(x, y, width, height);
     }
 
+    @Override
     public void glShaderSource(int shader, String[] string, IntBuffer length) {
         if (string.length != 1) {
             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]);
     }
 
+    @Override
     public void glStencilFuncSeparate(int face, int func, int ref, int mask) {
         GLES20.glStencilFuncSeparate(face, func, ref, mask);
     }
 
+    @Override
     public void glStencilOpSeparate(int face, int sfail, int dpfail, int 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) {
         GLES20.glTexImage2D(target, level, internalFormat, width, height, 0, format, type, data);
     }
 
+    @Override
     public void glTexParameterf(int target, int pname, float param) {
         GLES20.glTexParameterf(target, pname, param);
     }
 
+    @Override
     public void glTexParameteri(int target, int pname, int 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) {
         GLES20.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, data);
     }
 
+    @Override
     public void glUniform1(int location, FloatBuffer value) {
         GLES20.glUniform1fv(location, getLimitCount(value, 1), value);
     }
 
+    @Override
     public void glUniform1(int location, IntBuffer value) {
         GLES20.glUniform1iv(location, getLimitCount(value, 1), value);
     }
 
+    @Override
     public void glUniform1f(int location, float v0) {
         GLES20.glUniform1f(location, v0);
     }
 
+    @Override
     public void glUniform1i(int location, int v0) {
         GLES20.glUniform1i(location, v0);
     }
 
+    @Override
     public void glUniform2(int location, IntBuffer value) {
         GLES20.glUniform2iv(location, getLimitCount(value, 2), value);
     }
 
+    @Override
     public void glUniform2(int location, FloatBuffer value) {
         GLES20.glUniform2fv(location, getLimitCount(value, 2), value);
     }
 
+    @Override
     public void glUniform2f(int location, float v0, float v1) {
         GLES20.glUniform2f(location, v0, v1);
     }
 
+    @Override
     public void glUniform3(int location, IntBuffer value) {
         GLES20.glUniform3iv(location, getLimitCount(value, 3), value);
     }
 
+    @Override
     public void glUniform3(int location, FloatBuffer value) {
         GLES20.glUniform3fv(location, getLimitCount(value, 3), value);
     }
 
+    @Override
     public void glUniform3f(int location, float v0, float v1, float v2) {
         GLES20.glUniform3f(location, v0, v1, v2);
     }
 
+    @Override
     public void glUniform4(int location, FloatBuffer value) {
         GLES20.glUniform4fv(location, getLimitCount(value, 4), value);
     }
 
+    @Override
     public void glUniform4(int location, IntBuffer value) {
         GLES20.glUniform4iv(location, getLimitCount(value, 4), value);
     }
 
+    @Override
     public void glUniform4f(int location, float v0, float v1, float v2, float v3) {
         GLES20.glUniform4f(location, v0, v1, v2, v3);
     }
 
+    @Override
     public void glUniformMatrix3(int location, boolean transpose, FloatBuffer value) {
         GLES20.glUniformMatrix3fv(location, getLimitCount(value, 3 * 3), transpose, value);
     }
 
+    @Override
     public void glUniformMatrix4(int location, boolean transpose, FloatBuffer value) {
         GLES20.glUniformMatrix4fv(location, getLimitCount(value, 4 * 4), transpose, value);
     }
 
+    @Override
     public void glUseProgram(int program) {
         GLES20.glUseProgram(program);
     }
 
+    @Override
     public void glVertexAttribPointer(int index, int size, int type, boolean normalized, int stride, long pointer) {
         GLES20.glVertexAttribPointer(index, size, type, normalized, stride, (int)pointer);
     }
 
+    @Override
     public void glViewport(int x, int y, int width, int 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) {
         GLES30.glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
     }
 
+    @Override
     public void glBufferData(int target, IntBuffer data, int usage) {
         GLES20.glBufferData(target, getLimitBytes(data), data, usage);
     }
 
+    @Override
     public void glBufferSubData(int target, long offset, IntBuffer data) {
         GLES20.glBufferSubData(target, (int)offset, getLimitBytes(data), data);
     }
 
+    @Override
     public void glDrawArraysInstancedARB(int mode, int first, int count, int primcount) {
         GLES30.glDrawArraysInstanced(mode, first, count, primcount);
     }
 
+    @Override
     public void glDrawBuffers(IntBuffer bufs) {
         GLES30.glDrawBuffers(bufs.limit(), bufs);
     }
 
+    @Override
     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);
     }
 
+    @Override
     public void glGetMultisample(int pname, int index, FloatBuffer val) {
         GLES31.glGetMultisamplefv(pname, index, val);
     }
 
+    @Override
     public void glRenderbufferStorageMultisampleEXT(int target, int samples, int internalformat, int width, int height) {
         GLES30.glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
     }
 
+    @Override
     public void glTexImage2DMultisample(int target, int samples, int internalformat, int width, int height, boolean fixedsamplelocations) {
         GLES31.glTexStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
     }
 
+    @Override
     public void glVertexAttribDivisorARB(int index, int divisor) {
         GLES30.glVertexAttribDivisor(index, divisor);
     }
 
+    @Override
     public void glBindFramebufferEXT(int param1, int param2) {
         GLES20.glBindFramebuffer(param1, param2);
     }
 
+    @Override
     public void glBindRenderbufferEXT(int param1, int param2) {
         GLES20.glBindRenderbuffer(param1, param2);
     }
 
+    @Override
     public int glCheckFramebufferStatusEXT(int param1) {
         return GLES20.glCheckFramebufferStatus(param1);
     }
 
+    @Override
     public void glDeleteFramebuffersEXT(IntBuffer param1) {
         checkLimit(param1);
         GLES20.glDeleteFramebuffers(param1.limit(), param1);
     }
 
+    @Override
     public void glDeleteRenderbuffersEXT(IntBuffer param1) {
         checkLimit(param1);
         GLES20.glDeleteRenderbuffers(param1.limit(), param1);
     }
 
+    @Override
     public void glFramebufferRenderbufferEXT(int param1, int param2, int param3, int param4) {
         GLES20.glFramebufferRenderbuffer(param1, param2, param3, param4);
     }
 
+    @Override
     public void glFramebufferTexture2DEXT(int param1, int param2, int param3, int param4, int param5) {
         GLES20.glFramebufferTexture2D(param1, param2, param3, param4, param5);
     }
 
+    @Override
     public void glGenFramebuffersEXT(IntBuffer param1) {
         checkLimit(param1);
         GLES20.glGenFramebuffers(param1.limit(), param1);
     }
 
+    @Override
     public void glGenRenderbuffersEXT(IntBuffer param1) {
         checkLimit(param1);
         GLES20.glGenRenderbuffers(param1.limit(), param1);
     }
 
+    @Override
     public void glGenerateMipmapEXT(int param1) {
         GLES20.glGenerateMipmap(param1);
     }
 
+    @Override
     public void glRenderbufferStorageEXT(int param1, int param2, int param3, int 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);
     }
 
+    @Override
     public void glAlphaFunc(int func, float ref) {
     }
     
+    @Override
     public void glPointSize(float size) {
     }
 
+    @Override
     public void glPolygonMode(int face, int mode) {
     }
 
     // Wrapper to DrawBuffers as there's no DrawBuffer method in GLES
+    @Override
     public void glDrawBuffer(int mode) {
         tmpBuff.clear();
         tmpBuff.put(0, mode);
@@ -587,25 +694,30 @@ public class AndroidGL implements GL, GL2, GLES_30, GLExt, GLFbo {
         glDrawBuffers(tmpBuff);
     }
 
+    @Override
     public void glReadBuffer(int mode) {
         GLES30.glReadBuffer(mode);
     }
 
+    @Override
     public void glCompressedTexImage3D(int target, int level, int internalFormat, int width, int height, int depth,
                                            int border, ByteBuffer 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,
                                               int height, int depth, int format, ByteBuffer 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,
                                  int format, int type, ByteBuffer 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,
                                     int depth, int format, int type, ByteBuffer 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) {
         view.getHandler().post(new Runnable() {
 
+            @Override
             public void run() {
                 InputMethodManager manager =
                         (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.
  *
  * 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
         Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+            @Override
             public void uncaughtException(Thread thread, Throwable 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) {
-            minFrameDuration = (long)(1000d / (double)settings.getFrameRate()); // ms
+            minFrameDuration = (long)(1000d / settings.getFrameRate()); // ms
             logger.log(Level.FINE, "Setting min tpf: {0}ms", minFrameDuration);
         } else {
             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) {
         logger.log(Level.FINE, "requestDialog: title: {0}, initialValue: {1}",
                 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",
                         new DialogInterface.OnClickListener() {
+                            @Override
                             public void onClick(DialogInterface dialog, int whichButton) {
                                 /* User clicked OK, send COMPLETE action
                                  * and text */
@@ -464,6 +467,7 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
                             }
                         }).setNegativeButton("Cancel",
                         new DialogInterface.OnClickListener() {
+                            @Override
                             public void onClick(DialogInterface dialog, int whichButton) {
                                 /* User clicked CANCEL, send CANCEL action
                                  * 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.
  *
  * 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 {
         Bitmap bitmap = null;
         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;
     
+    @Override
     public Image load(AssetInfo info) throws IOException {
         boolean flip = ((TextureKey) info.getKey()).isFlipY();
         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;
     }
 
+    @Override
     public Iterator<T> iterator() {
         return new RingBufferIterator();
     }
@@ -58,14 +59,17 @@ public class RingBuffer<T> implements Iterable<T> {
 
         private int i = 0;
 
+        @Override
         public boolean hasNext() {
             return i < count;
         }
 
+        @Override
         public void remove() {
             throw new UnsupportedOperationException();
         }
 
+        @Override
         public T next() {
             if (!hasNext()) {
                 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.
  *
  * 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");
         if (fieldValue instanceof Structure) {
             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);
         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.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -100,9 +100,11 @@ public class MaterialHelper extends AbstractBlenderHelper {
         super(blenderVersion, blenderContext);
         // setting alpha masks
         alphaMasks.put(ALPHA_MASK_NONE, new IAlphaMask() {
+            @Override
             public void setImageSize(int width, int height) {
             }
 
+            @Override
             public byte getAlpha(float x, float y) {
                 return (byte) 255;
             }
@@ -111,11 +113,13 @@ public class MaterialHelper extends AbstractBlenderHelper {
             private float   r;
             private float[] center;
 
+            @Override
             public void setImageSize(int width, int height) {
                 r = Math.min(width, height) * 0.5f;
                 center = new float[] { width * 0.5f, height * 0.5f };
             }
 
+            @Override
             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])));
                 return (byte) (d >= r ? 0 : 255);
@@ -125,11 +129,13 @@ public class MaterialHelper extends AbstractBlenderHelper {
             private float   r;
             private float[] center;
 
+            @Override
             public void setImageSize(int width, int height) {
                 r = Math.min(width, height) * 0.5f;
                 center = new float[] { width * 0.5f, height * 0.5f };
             }
 
+            @Override
             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])));
                 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[] center;
 
+            @Override
             public void setImageSize(int width, int height) {
                 r = Math.min(width, height) * 0.5f;
                 center = new float[] { width * 0.5f, height * 0.5f };
             }
 
+            @Override
             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;
                 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.
  *
  * 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 {
         OutputCapsule cap = e.getCapsule(this);
         cap.write(x, "x", 0);
@@ -562,6 +563,7 @@ public final class DQuaternion implements Savable, Cloneable, java.io.Serializab
         cap.write(w, "w", 1);
     }
 
+    @Override
     public void read(JmeImporter e) throws IOException {
         InputCapsule cap = e.getCapsule(this);
         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.
  *
  * 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 + "]";
     }
 
+    @Override
     public void write(JmeExporter e) throws IOException {
         OutputCapsule capsule = e.getCapsule(this);
         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);
     }
 
+    @Override
     public void read(JmeImporter e) throws IOException {
         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.
  *
  * 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 + ")";
     }
 
+    @Override
     public void write(JmeExporter e) throws IOException {
         OutputCapsule capsule = e.getCapsule(this);
         capsule.write(x, "x", 0);
@@ -858,6 +859,7 @@ public final class Vector3d implements Savable, Cloneable, Serializable {
         capsule.write(z, "z", 0);
     }
 
+    @Override
     public void read(JmeImporter e) throws IOException {
         InputCapsule capsule = e.getCapsule(this);
         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);
                     maximumWeightsPerVertex = Math.max(maximumWeightsPerVertex, group.size());
                     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()]);
         BoundingBox boundingBox = UVCoordinatesGenerator.getBoundingBox(geometries);
         Set<TriangleTextureElement> triangleTextureElements = new TreeSet<TriangleTextureElement>(new Comparator<TriangleTextureElement>() {
+            @Override
             public int compare(TriangleTextureElement o1, TriangleTextureElement o2) {
                 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) {
         maxTextureSize = blenderContext.getBlenderKey().getMaxTextureSize();
         faceTextures = new TreeSet<TriangleTextureElement>(new Comparator<TriangleTextureElement>() {
+            @Override
             public int compare(TriangleTextureElement o1, TriangleTextureElement o2) {
                 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)
             List<TriangleTextureElement> list = new ArrayList<TriangleTextureElement>(faceTextures);
             Collections.sort(list, new Comparator<TriangleTextureElement>() {
+                @Override
                 public int compare(TriangleTextureElement o1, TriangleTextureElement o2) {
                     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) {
         if (textureBlender instanceof AbstractTextureBlender) {
             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);
     }
 
+    @Override
     public Image blend(Image image, Image baseImage, BlenderContext blenderContext) {
         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.
  *
  * 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 {
         noiseFunctions.put(Integer.valueOf(0), new NoiseFunction() {
             // originalBlenderNoise
+            @Override
             public float execute(float x, float y, float z) {
                 return NoiseFunctions.originalBlenderNoise(x, y, z);
             }
 
+            @Override
             public float executeSigned(float x, float y, float z) {
                 return 2.0f * NoiseFunctions.originalBlenderNoise(x, y, z) - 1.0f;
             }
         });
         noiseFunctions.put(Integer.valueOf(1), new NoiseFunction() {
             // orgPerlinNoise
+            @Override
             public float execute(float x, float y, float z) {
                 return 0.5f + 0.5f * NoiseFunctions.noise3Perlin(x, y, z);
             }
 
+            @Override
             public float executeSigned(float x, float y, float z) {
                 return NoiseFunctions.noise3Perlin(x, y, z);
             }
         });
         noiseFunctions.put(Integer.valueOf(2), new NoiseFunction() {
             // newPerlin
+            @Override
             public float execute(float x, float y, float z) {
                 return 0.5f + 0.5f * NoiseFunctions.newPerlin(x, y, z);
             }
 
+            @Override
             public float executeSigned(float x, float y, float 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];
 
             // voronoi_F1
+            @Override
             public float execute(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return da[0];
             }
 
+            @Override
             public float executeSigned(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 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];
 
             // voronoi_F2
+            @Override
             public float execute(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return da[1];
             }
 
+            @Override
             public float executeSigned(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 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];
 
             // voronoi_F3
+            @Override
             public float execute(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return da[2];
             }
 
+            @Override
             public float executeSigned(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 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];
 
             // voronoi_F4
+            @Override
             public float execute(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return da[3];
             }
 
+            @Override
             public float executeSigned(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 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];
 
             // voronoi_F1F2
+            @Override
             public float execute(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 return da[1] - da[0];
             }
 
+            @Override
             public float executeSigned(float x, float y, float z) {
                 NoiseFunctions.voronoi(x, y, z, da, pa, 1, NATURAL_DISTANCE_FUNCTION);
                 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));
 
             // voronoi_Cr
+            @Override
             public float execute(float x, float y, float z) {
                 float t = 10 * voronoiF1F2NoiseFunction.execute(x, y, z);
                 return t > 1.0f ? 1.0f : t;
             }
 
+            @Override
             public float executeSigned(float x, float y, float z) {
                 float t = 10.0f * voronoiF1F2NoiseFunction.execute(x, y, z);
                 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() {
             // cellNoise
+            @Override
             public float execute(float x, float y, float z) {
                 int xi = (int) FastMath.floor(x);
                 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;
             }
 
+            @Override
             public float executeSigned(float x, float y, float z) {
                 return 2.0f * this.execute(x, y, z) - 1.0f;
             }
@@ -248,24 +268,28 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
     static {
         distanceFunctions.put(Integer.valueOf(0), new DistanceFunction() {
             // real distance
+            @Override
             public float execute(float x, float y, float z, float e) {
                 return (float) Math.sqrt(x * x + y * y + z * z);
             }
         });
         distanceFunctions.put(Integer.valueOf(1), new DistanceFunction() {
             // distance squared
+            @Override
             public float execute(float x, float y, float z, float e) {
                 return x * x + y * y + z * z;
             }
         });
         distanceFunctions.put(Integer.valueOf(2), new DistanceFunction() {
             // manhattan/taxicab/cityblock distance
+            @Override
             public float execute(float x, float y, float z, float e) {
                 return FastMath.abs(x) + FastMath.abs(y) + FastMath.abs(z);
             }
         });
         distanceFunctions.put(Integer.valueOf(3), new DistanceFunction() {
             // Chebychev
+            @Override
             public float execute(float x, float y, float z, float e) {
                 x = FastMath.abs(x);
                 y = FastMath.abs(y);
@@ -276,6 +300,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         distanceFunctions.put(Integer.valueOf(4), new DistanceFunction() {
             // Minkovsky, preset exponent 0.5 (MinkovskyH)
+            @Override
             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)));
                 return d * d;
@@ -283,6 +308,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         distanceFunctions.put(Integer.valueOf(5), new DistanceFunction() {
             // Minkovsky, preset exponent 0.25 (Minkovsky4)
+            @Override
             public float execute(float x, float y, float z, float e) {
                 x *= x;
                 y *= y;
@@ -292,6 +318,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         distanceFunctions.put(Integer.valueOf(6), new DistanceFunction() {
             // Minkovsky, general case
+            @Override
             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);
             }
@@ -303,6 +330,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
     static {
         musgraveFunctions.put(Integer.valueOf(TEX_MFRACTAL), new MusgraveFunction() {
 
+            @Override
             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);
 
@@ -322,6 +350,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         musgraveFunctions.put(Integer.valueOf(TEX_RIDGEDMF), new MusgraveFunction() {
 
+            @Override
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
                 float result, signal, weight;
                 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() {
 
+            @Override
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
                 float result, signal, weight, rmd;
                 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() {
 
+            @Override
             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);
 
@@ -406,6 +437,7 @@ import com.jme3.scene.plugins.blender.textures.generating.TextureGeneratorMusgra
         });
         musgraveFunctions.put(Integer.valueOf(TEX_HTERRAIN), new MusgraveFunction() {
 
+            @Override
             public float execute(MusgraveData musgraveData, float x, float y, float z) {
                 float value, increment, rmd;
                 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 *= (float) (1 << noiseDepth) / (float) ((1 << noiseDepth + 1) - 1);
+            sum *= (1 << noiseDepth) / (float) ((1 << noiseDepth + 1) - 1);
             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.
  *
  * 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];
     static {
         INTENSITY_FUNCTION[0] = new IntensityFunction() {// Linear: stype = 0 (TEX_LIN)
+            @Override
             public float getIntensity(float x, float y, float z) {
                 return (1.0f + x) * 0.5f;
             }
         };
         INTENSITY_FUNCTION[1] = new IntensityFunction() {// Quad: stype = 1 (TEX_QUAD)
+            @Override
             public float getIntensity(float x, float y, float z) {
                 float result = (1.0f + x) * 0.5f;
                 return result * result;
             }
         };
         INTENSITY_FUNCTION[2] = new IntensityFunction() {// Ease: stype = 2 (TEX_EASE)
+            @Override
             public float getIntensity(float x, float y, float z) {
                 float result = (1.0f + x) * 0.5f;
                 if (result <= 0.0f) {
@@ -69,23 +72,27 @@ public final class TextureGeneratorBlend extends TextureGenerator {
             }
         };
         INTENSITY_FUNCTION[3] = new IntensityFunction() {// Diagonal: stype = 3 (TEX_DIAG)
+            @Override
             public float getIntensity(float x, float y, float z) {
                 return (2.0f + x + y) * 0.25f;
             }
         };
         INTENSITY_FUNCTION[4] = new IntensityFunction() {// Sphere: stype = 4 (TEX_SPHERE)
+            @Override
             public float getIntensity(float x, float y, float z) {
                 float result = 1.0f - (float) Math.sqrt(x * x + y * y + z * z);
                 return result < 0.0f ? 0.0f : result;
             }
         };
         INTENSITY_FUNCTION[5] = new IntensityFunction() {// Halo: stype = 5 (TEX_HALO)
+            @Override
             public float getIntensity(float x, float y, float z) {
                 float result = 1.0f - (float) Math.sqrt(x * x + y * y + z * z);
                 return result <= 0.0f ? 0.0f : result * result;
             }
         };
         INTENSITY_FUNCTION[6] = new IntensityFunction() {// Radial: stype = 6 (TEX_RAD)
+            @Override
             public float getIntensity(float x, float y, float z) {
                 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);
             case TextureHelper.TEX_MAGIC:
                 return new TextureGeneratorMagic(noiseGenerator);
-            case TextureHelper.TEX_MARBLE:
-                return new TextureGeneratorMarble(noiseGenerator);
             case TextureHelper.TEX_MUSGRAVE:
                 return new TextureGeneratorMusgrave(noiseGenerator);
             case TextureHelper.TEX_NOISE:
@@ -26,8 +24,6 @@ public class TextureGeneratorFactory {
                 return new TextureGeneratorStucci(noiseGenerator);
             case TextureHelper.TEX_VORONOI:
                 return new TextureGeneratorVoronoi(noiseGenerator);
-            case TextureHelper.TEX_WOOD:
-                return new TextureGeneratorWood(noiseGenerator);
             default:
                 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.
  *
  * 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];
     static {
         noiseDepthFunctions[0] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
                 xyz[1] = -(float) Math.cos(xyz[0] - xyz[1] + xyz[2]) * turbulence;
             }
         };
         noiseDepthFunctions[1] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
                 xyz[0] = (float) Math.cos(xyz[0] - xyz[1] - xyz[2]) * turbulence;
             }
         };
         noiseDepthFunctions[2] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
                 xyz[2] = (float) Math.sin(-xyz[0] - xyz[1] - xyz[2]) * turbulence;
             }
         };
         noiseDepthFunctions[3] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
                 xyz[0] = -(float) Math.cos(-xyz[0] + xyz[1] - xyz[2]) * turbulence;
             }
         };
         noiseDepthFunctions[4] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
                 xyz[1] = -(float) Math.sin(-xyz[0] + xyz[1] + xyz[2]) * turbulence;
             }
         };
         noiseDepthFunctions[5] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
                 xyz[1] = -(float) Math.cos(-xyz[0] + xyz[1] + xyz[2]) * turbulence;
             }
         };
         noiseDepthFunctions[6] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
                 xyz[0] = (float) Math.cos(xyz[0] + xyz[1] + xyz[2]) * turbulence;
             }
         };
         noiseDepthFunctions[7] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
                 xyz[2] = (float) Math.sin(xyz[0] + xyz[1] - xyz[2]) * turbulence;
             }
         };
         noiseDepthFunctions[8] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float turbulence) {
                 xyz[0] = -(float) Math.cos(-xyz[0] - xyz[1] + xyz[2]) * turbulence;
             }
         };
         noiseDepthFunctions[9] = new NoiseDepthFunction() {
+            @Override
             public void compute(float[] xyz, float 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)
  */
 /* package */class AWTPixelInputOutput implements PixelInputOutput {
+    @Override
     public void read(Image image, int layer, TexturePixel pixel, int index) {
         ByteBuffer data = image.getData(layer);
         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) {
         int index = (y * image.getWidth() + x) * (image.getFormat().getBitsPerPixel() >> 3);
         this.read(image, layer, pixel, index);
     }
 
+    @Override
     public void write(Image image, int layer, TexturePixel pixel, int index) {
         ByteBuffer data = image.getData(layer);
         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) {
         int index = (y * image.getWidth() + x) * (image.getFormat().getBitsPerPixel() >> 3);
         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.
      */
+    @Override
     public void read(Image image, int layer, TexturePixel pixel, int index) {
         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) {
         int xTexetlIndex = x % image.getWidth() >> 2;
         int yTexelIndex = y % image.getHeight() >> 2;
@@ -161,10 +163,12 @@ import jme3tools.converters.RGB565;
         pixel.alpha = alpha;
     }
 
+    @Override
     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!");
     }
 
+    @Override
     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!");
     }

+ 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)
  */
 /* package */class LuminancePixelInputOutput implements PixelInputOutput {
+    @Override
     public void read(Image image, int layer, TexturePixel pixel, int index) {
         ByteBuffer data = image.getData(layer);
         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) {
         int index = y * image.getWidth() + x;
         this.read(image, layer, pixel, index);
     }
 
+    @Override
     public void write(Image image, int layer, TexturePixel pixel, int index) {
         ByteBuffer data = image.getData(layer);
         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) {
         int index = y * image.getWidth() + x;
         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.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -182,6 +182,7 @@ public class BulletAppState
         executor = new ScheduledThreadPoolExecutor(1);
         final BulletAppState app = this;
         Callable<Boolean> call = new Callable<Boolean>() {
+            @Override
             public Boolean call() throws Exception {
                 detachedPhysicsLastUpdate = System.currentTimeMillis();
                 pSpace = new PhysicsSpace(worldMin, worldMax, broadphaseType);
@@ -200,6 +201,7 @@ public class BulletAppState
         }
     }
     private Callable<Boolean> parallelPhysicsUpdate = new Callable<Boolean>() {
+        @Override
         public Boolean call() throws Exception {
             pSpace.update(tpf * getSpeed());
             return true;
@@ -207,6 +209,7 @@ public class BulletAppState
     };
     long detachedPhysicsLastUpdate = 0;
     private Callable<Boolean> detachedPhysicsUpdate = new Callable<Boolean>() {
+        @Override
         public Boolean call() throws Exception {
             pSpace.update(getPhysicsSpace().getAccuracy() * getSpeed());
             pSpace.distributeEvents();
@@ -484,6 +487,7 @@ public class BulletAppState
      * @param space the space that is about to be stepped (not null)
      * @param f the time per physics step (in seconds, &ge;0)
      */
+    @Override
     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 f the time per physics step (in seconds, &ge;0)
      */
+    @Override
     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
      * 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
      * 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
      * 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.
  *
  * 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
      * directly!
      */
-    public ChildCollisionShape() {
+    protected ChildCollisionShape() {
     }
 
     /**
@@ -89,6 +89,7 @@ public class ChildCollisionShape implements Savable {
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         OutputCapsule capsule = ex.getCapsule(this);
         capsule.write(location, "location", new Vector3f());
@@ -102,6 +103,7 @@ public class ChildCollisionShape implements Savable {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         InputCapsule capsule = im.getCapsule(this);
         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.
  *
  * 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)
      */
+    @Override
     public void setSpatial(Spatial spatial) {
         if (this.spatial != null && this.spatial != 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
      */
+    @Override
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
         if (space != null) {
@@ -284,13 +286,16 @@ public abstract class AbstractPhysicsControl implements PhysicsControl, JmeClone
      *
      * @return true if enabled, otherwise false
      */
+    @Override
     public boolean isEnabled() {
         return enabled;
     }
 
+    @Override
     public void update(float tpf) {
     }
 
+    @Override
     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
      */
+    @Override
     public PhysicsSpace getPhysicsSpace() {
         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.
  *
  * 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
      * directly!
      */
-    public BetterCharacterControl() {
+    protected BetterCharacterControl() {
         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 tpf the time per physics step (in seconds, &ge;0)
      */
+    @Override
     public void prePhysicsTick(PhysicsSpace space, float tpf) {
         checkOnGround();
         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 tpf the time per physics step (in seconds, &ge;0)
      */
+    @Override
     public void physicsTick(PhysicsSpace space, float tpf) {
         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.
  *
  * 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);
     }
          
+    @Override
     public void setSpatial(Spatial spatial) {
         this.spatial = spatial;
         setUserObject(spatial);
@@ -136,6 +137,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         return this.spatial;
     }
 
+    @Override
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
         if (space != null) {
@@ -152,6 +154,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         }
     }
 
+    @Override
     public boolean isEnabled() {
         return enabled;
     }
@@ -172,6 +175,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         this.useViewDirection = viewDirectionEnabled;
     }
 
+    @Override
     public void update(float tpf) {
         if (enabled && spatial != null) {
             Quaternion localRotationQuat = spatial.getLocalRotation();
@@ -195,6 +199,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         }
     }
 
+    @Override
     public void render(RenderManager rm, ViewPort vp) {
     }
 
@@ -225,6 +230,7 @@ public class CharacterControl extends PhysicsCharacter implements PhysicsControl
         space = newSpace;
     }
 
+    @Override
     public PhysicsSpace getPhysicsSpace() {
         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.
  *
  * 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
      * directly!
      */
-    public GhostControl() {
+    protected GhostControl() {
     }
 
     /**
@@ -196,6 +196,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      *
      * @param spatial the spatial to control (or null)
      */
+    @Override
     public void setSpatial(Spatial spatial) {
         this.spatial = 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
      */
+    @Override
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
         if (space != null) {
@@ -244,6 +246,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      *
      * @return true if enabled, otherwise false
      */
+    @Override
     public boolean isEnabled() {
         return enabled;
     }
@@ -255,6 +258,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      *
      * @param tpf the time interval between frames (in seconds, &ge;0)
      */
+    @Override
     public void update(float tpf) {
         if (!enabled) {
             return;
@@ -271,6 +275,7 @@ public class GhostControl extends PhysicsGhostObject implements PhysicsControl,
      * @param rm the render manager (not null)
      * @param vp the view port to render (not null)
      */
+    @Override
     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
      */
+    @Override
     public PhysicsSpace getPhysicsSpace() {
         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.
  *
  * 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()) {
             
             boneName = it.next();
-            bone = (Bone) boneLinks.get(boneName).bone;
+            bone = boneLinks.get(boneName).bone;
             if (!bone.hasUserControl()) {
                 Logger.getLogger(KinematicRagdollControl.class.getSimpleName()).log(Level.FINE, "{0} doesn't have user control", boneName);
                 continue;
@@ -421,7 +421,7 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
             }
             int depth = 0;
             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;
             
@@ -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);
             }
 
-            PhysicsRigidBody shapeNode = new PhysicsRigidBody(shape, rootMass / (float) reccount);
+            PhysicsRigidBody shapeNode = new PhysicsRigidBody(shape, rootMass / reccount);
 
             shapeNode.setKinematic(mode == Mode.Kinematic);
-            totalMass += rootMass / (float) reccount;
+            totalMass += rootMass / reccount;
 
             link.rigidBody = shapeNode;
             link.initalWorldRotation = bone.getModelSpaceRotation().clone();
@@ -817,6 +817,7 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
      *
      * @param event (not null)
      */
+    @Override
     public void collision(PhysicsCollisionEvent event) {
         PhysicsCollisionObject objA = event.getObjectA();
         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.
  *
  * 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
      * directly!
      */
-    public RigidBodyControl() {
+    protected RigidBodyControl() {
     }
 
     /**
@@ -193,6 +193,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      *
      * @param spatial the spatial to control (or null)
      */
+    @Override
     public void setSpatial(Spatial spatial) {
         this.spatial = 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
      */
+    @Override
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
         if (space != null) {
@@ -271,6 +273,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      *
      * @return true if enabled, otherwise false
      */
+    @Override
     public boolean isEnabled() {
         return enabled;
     }
@@ -347,6 +350,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      *
      * @param tpf the time interval between frames (in seconds, &ge;0)
      */
+    @Override
     public void update(float tpf) {
         if (enabled && spatial != null) {
             if (isKinematic() && kinematicSpatial) {
@@ -366,6 +370,7 @@ public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl
      * @param rm the render manager (not null)
      * @param vp the view port to render (not null)
      */
+    @Override
     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
      */
+    @Override
     public PhysicsSpace getPhysicsSpace() {
         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.
  *
  * 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
      * directly!
      */
-    public VehicleControl() {
+    protected VehicleControl() {
     }
 
     /**
@@ -159,6 +159,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      *
      * @return a new control (not null)
      */
+    @Override
     public Object jmeClone() {
         VehicleControl control = new VehicleControl(collisionShape, mass);
         control.setAngularFactor(getAngularFactor());
@@ -231,6 +232,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      *
      * @param spatial spatial to control (or null)
      */
+    @Override
     public void setSpatial(Spatial spatial) {
         this.spatial = 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
      */
+    @Override
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
         if (space != null) {
@@ -272,6 +275,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      *
      * @return true if enabled, otherwise false
      */
+    @Override
     public boolean isEnabled() {
         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)
      */
+    @Override
     public void update(float tpf) {
         if (enabled && spatial != null) {
             if (getMotionState().applyTransform(spatial)) {
@@ -301,6 +306,7 @@ public class VehicleControl extends PhysicsVehicle implements PhysicsControl, Jm
      * @param rm the render manager (not null)
      * @param vp the view port to render (not null)
      */
+    @Override
     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
      */
+    @Override
     public PhysicsSpace getPhysicsSpace() {
         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.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -229,7 +229,7 @@ public class CollisionShapeFactory {
      */
     public static CollisionShape createBoxShape(Spatial spatial) {
         if (spatial instanceof Geometry) {
-            return createSingleBoxShape((Geometry) spatial, spatial);
+            return createSingleBoxShape(spatial, spatial);
         } else if (spatial instanceof Node) {
             return createBoxCompoundShape((Node) spatial);
         } 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.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -539,7 +539,7 @@ public class PhysicsSpace {
             Spatial node = (Spatial) obj;
             for (int i = 0; i < node.getNumControls(); i++) {
                 if (node.getControl(i) instanceof PhysicsControl) {
-                    add(((PhysicsControl) node.getControl(i)));
+                    add(node.getControl(i));
                 }
             }
         } else if (obj instanceof PhysicsCollisionObject) {
@@ -581,7 +581,7 @@ public class PhysicsSpace {
             Spatial node = (Spatial) obj;
             for (int i = 0; i < node.getNumControls(); i++) {
                 if (node.getControl(i) instanceof PhysicsControl) {
-                    remove(((PhysicsControl) node.getControl(i)));
+                    remove(node.getControl(i));
                 }
             }
         } else if (obj instanceof PhysicsCollisionObject) {
@@ -1129,7 +1129,7 @@ public class PhysicsSpace {
     public List<PhysicsSweepTestResult> sweepTest(CollisionShape shape, Transform start, Transform end) {
         List results = new LinkedList();
         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.
  *
  * 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
      * directly!
      */
-    public BoxCollisionShape() {
+    protected BoxCollisionShape() {
     }
 
     /**
@@ -86,6 +86,7 @@ public class BoxCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -98,6 +99,7 @@ public class BoxCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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
      * directly!
      */
-    public CapsuleCollisionShape() {
+    protected CapsuleCollisionShape() {
     }
 
     /**
@@ -141,6 +141,7 @@ public class CapsuleCollisionShape extends CollisionShape{
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -155,6 +156,7 @@ public class CapsuleCollisionShape extends CollisionShape{
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         OutputCapsule capsule = ex.getCapsule(this);
         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.
  *
  * 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)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -164,6 +165,7 @@ public class CompoundCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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
      * directly!
      */
-    public ConeCollisionShape() {
+    protected ConeCollisionShape() {
     }
 
     /**
@@ -119,6 +119,7 @@ public class ConeCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -133,6 +134,7 @@ public class ConeCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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
      * directly!
      */
-    public CylinderCollisionShape() {
+    protected CylinderCollisionShape() {
     }
 
     /**
@@ -128,6 +128,7 @@ public class CylinderCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -141,6 +142,7 @@ public class CylinderCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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
      * directly!
      */
-    public GImpactCollisionShape() {
+    protected GImpactCollisionShape() {
     }
 
     /**
@@ -122,6 +122,7 @@ public class GImpactCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -141,6 +142,7 @@ public class GImpactCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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
      * directly!
      */
-    public HeightfieldCollisionShape() {
+    protected HeightfieldCollisionShape() {
     }
 
     /**
@@ -193,6 +193,7 @@ public class HeightfieldCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -212,6 +213,7 @@ public class HeightfieldCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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
      * 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.
  *
  * 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
      * 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.
  *
  * 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
      * directly!
      */
-    public PlaneCollisionShape() {
+    protected PlaneCollisionShape() {
     }
 
     /**
@@ -84,6 +84,7 @@ public class PlaneCollisionShape extends CollisionShape{
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -96,6 +97,7 @@ public class PlaneCollisionShape extends CollisionShape{
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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
      * directly!
      */
-    public SimplexCollisionShape() {
+    protected SimplexCollisionShape() {
     }
 
     /**
@@ -118,6 +118,7 @@ public class SimplexCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -133,6 +134,7 @@ public class SimplexCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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
      * directly!
      */
-    public SphereCollisionShape() {
+    protected SphereCollisionShape() {
     }
 
     /**
@@ -85,6 +85,7 @@ public class SphereCollisionShape extends CollisionShape {
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -97,6 +98,7 @@ public class SphereCollisionShape extends CollisionShape {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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
      * 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.
  *
  * 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
      * directly!
      */
-    public HingeJoint() {
+    protected HingeJoint() {
     }
 
     /**
@@ -242,6 +242,7 @@ public class HingeJoint extends PhysicsJoint {
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         super.write(ex);
         OutputCapsule capsule = ex.getCapsule(this);
@@ -268,6 +269,7 @@ public class HingeJoint extends PhysicsJoint {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         super.read(im);
         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.
  *
  * 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
      * directly!
      */
-    public PhysicsJoint() {
+    protected PhysicsJoint() {
     }
 
     /**
@@ -192,6 +192,7 @@ public abstract class PhysicsJoint implements Savable {
      * @param ex exporter (not null)
      * @throws IOException from exporter
      */
+    @Override
     public void write(JmeExporter ex) throws IOException {
         OutputCapsule capsule = ex.getCapsule(this);
         capsule.write(nodeA, "nodeA", null);
@@ -206,10 +207,11 @@ public abstract class PhysicsJoint implements Savable {
      * @param im importer (not null)
      * @throws IOException from importer
      */
+    @Override
     public void read(JmeImporter im) throws IOException {
         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.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.
  *
  * 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
      * 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.
  *
  * 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
      * 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.
  *
  * 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
      * 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
      * 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.
  *
  * 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
      * 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.
  *
  * 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
      * directly!
      */
-    public PhysicsRigidBody() {
+    protected PhysicsRigidBody() {
     }
 
     /**
@@ -794,6 +794,7 @@ public class PhysicsRigidBody extends PhysicsCollisionObject {
      *
      * @param collisionShape the shape to apply (not null, alias created)
      */
+    @Override
     public void setCollisionShape(CollisionShape collisionShape) {
         super.setCollisionShape(collisionShape);
         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.
  *
  * 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
      * 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.
  *
  * 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
      * 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;
 
-    public AnimClip() {
+    protected AnimClip() {
     }
 
     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
      */
-    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;
     }
 
+    @Override
     public void setLocalTransform(Transform localTransform) {
         this.localTransform.set(localTransform);
     }
@@ -272,6 +273,7 @@ public class Joint implements Savable, JmeCloneable, HasLocalTransform {
         return initialTransform;
     }
 
+    @Override
     public Transform getLocalTransform() {
         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) {
         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.
  *
  * 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.
      */
-    public MorphTrack() {
+    protected MorphTrack() {
     }
 
     /**
@@ -122,7 +122,7 @@ public class MorphTrack implements AnimTrack<float[]> {
 
             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) {
         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.
      */
-    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.
  *
  * 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() {
         return length;
     }
 
+    @Override
     public void getDataAtTime(double t, Transform transform) {
         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.
- * 
+ *
  * 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:
- * 
- * 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;
 
 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.
- * 
+ *
  * 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:
- * 
- * 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;
 
 /**

+ 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.
- * 
+ *
  * 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:
- * 
- * 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;
 
 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) {
         blendWeight = blendSpace.getWeight();
         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() {
         return clip.toString();
     }

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