update to latest engine release candidate
This commit is contained in:
445
platform-web/build.gradle
Normal file
445
platform-web/build.gradle
Normal file
@@ -0,0 +1,445 @@
|
||||
|
||||
plugins {
|
||||
id 'com.github.node-gradle.node' version '7.1.0'
|
||||
id "java"
|
||||
id "war"
|
||||
id "org.teavm" version "${teaVmVersion}"
|
||||
}
|
||||
|
||||
import java.security.MessageDigest
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Paths
|
||||
apply from: "${rootDir}/gradle/libs/class-finder.gradle"
|
||||
|
||||
configurations {
|
||||
withResources {
|
||||
canBeResolved = true
|
||||
}
|
||||
}
|
||||
|
||||
node {
|
||||
download = true
|
||||
distBaseUrl = null
|
||||
version = "22.18.0"
|
||||
}
|
||||
|
||||
configurations.configureEach {
|
||||
exclude group: 'org.ngengine', module: 'jme3-jbullet'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.teavm:teavm-jso:${teaVmVersion}"
|
||||
implementation "org.teavm:teavm-jso-apis:${teaVmVersion}"
|
||||
implementation "org.teavm:teavm-metaprogramming-api:${teaVmVersion}"
|
||||
implementation "org.teavm:teavm-classlib:${teaVmVersion}"
|
||||
implementation "org.teavm:teavm-tooling:${teaVmVersion}"
|
||||
implementation "org.teavm:teavm-core:${teaVmVersion}"
|
||||
|
||||
implementation "org.ngengine:nge-platform-teavm:${ngePlatformVersion}"
|
||||
implementation "org.ngengine:nge-app:${ngeVersion}"
|
||||
implementation "org.ngengine:jme3-plugins-json:${ngeVersion}"
|
||||
implementation "org.ngengine:nge-web:${ngeVersion}"
|
||||
implementation "org.ngengine:nge-web-bullet:${ngeVersion}"
|
||||
|
||||
implementation project(':app')
|
||||
|
||||
withResources project(':app')
|
||||
withResources "org.ngengine:nge-platform-teavm:${ngePlatformVersion}"
|
||||
withResources "org.ngengine:nge-web:${ngeVersion}"
|
||||
withResources "org.ngengine:nge-web-bullet:${ngeVersion}"
|
||||
}
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(21)
|
||||
}
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
test {
|
||||
resources {
|
||||
srcDirs = ['src/test/resources', 'src/main/resources']
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def binaryExclusions = [
|
||||
'**/*.class',
|
||||
'**/*.dll',
|
||||
'**/*.so',
|
||||
'**/*.dylib',
|
||||
'**/package.html',
|
||||
"**/*.kotlin_builtins",
|
||||
"**/build.data",
|
||||
"**/*.xml",
|
||||
"**/test*.png",
|
||||
// '**/*.java'
|
||||
]
|
||||
|
||||
|
||||
|
||||
def generateHashes(File dir) {
|
||||
def hashes = []
|
||||
Files.walk(Paths.get(dir.toURI())).filter {
|
||||
Files.isRegularFile(it)
|
||||
}.forEach { file ->
|
||||
def relativePath = dir.toPath().relativize(file).toString()
|
||||
if(relativePath.endsWith(".class")) return;
|
||||
if(relativePath.endsWith(".java")) return;
|
||||
def hash = generateSHA256(file.toFile())
|
||||
def size = file.toFile().length()
|
||||
hashes << "$hash $size $relativePath"
|
||||
}
|
||||
return hashes.join('\n')
|
||||
}
|
||||
|
||||
def generateSHA256(file) {
|
||||
def messageDigest = MessageDigest.getInstance("SHA-256")
|
||||
file.eachByte(4096) { bytes, len ->
|
||||
messageDigest.update(bytes, 0, len)
|
||||
}
|
||||
return messageDigest.digest().collect { String.format("%02x", it) }.join()
|
||||
}
|
||||
|
||||
task copyAllResources {
|
||||
|
||||
dependsOn configurations.runtimeClasspath.getTaskDependencyFromProjectDependency(true, 'jar')
|
||||
dependsOn 'jar'
|
||||
|
||||
['compileTeavmJava','processTeavmResources','compileJava','processResources']
|
||||
.each { tn -> if (tasks.findByName(tn) != null) dependsOn tn }
|
||||
|
||||
doLast {
|
||||
def dest = file("${rootDir}/dist/web")
|
||||
dest.mkdirs()
|
||||
|
||||
def safeCopy = { spec ->
|
||||
copy {
|
||||
into dest
|
||||
from spec
|
||||
exclude(*binaryExclusions)
|
||||
exclude '**/module-info.class'
|
||||
includeEmptyDirs = false
|
||||
duplicatesStrategy = DuplicatesStrategy.INCLUDE
|
||||
}
|
||||
}
|
||||
safeCopy('src/main/resources')
|
||||
|
||||
def runtimeFiles = configurations.runtimeClasspath.resolvedConfiguration.lenientConfiguration.files
|
||||
runtimeFiles.each { f ->
|
||||
if (!f.exists()) return
|
||||
if (f.isDirectory()) {
|
||||
safeCopy(f)
|
||||
} else if (f.name.endsWith('.jar')) {
|
||||
safeCopy(project.zipTree(f))
|
||||
}
|
||||
}
|
||||
|
||||
println "Resource aggregation complete. Total files: " + fileTree(dest).matching { exclude(*binaryExclusions) }.files.size()
|
||||
|
||||
def manifestFile = file("${rootDir}/dist/web/manifest.json")
|
||||
if (manifestFile.exists()) {
|
||||
def manifest = new groovy.json.JsonSlurper().parseText(manifestFile.text)
|
||||
manifest.name = Title
|
||||
manifest.short_name = ShortName
|
||||
|
||||
manifestFile.text = groovy.json.JsonOutput.prettyPrint(groovy.json.JsonOutput.toJson(manifest))
|
||||
println "Updated manifest.json: name=$Title, short_name=$ShortName"
|
||||
}
|
||||
|
||||
def outputDir = file("${rootDir}/dist/web/")
|
||||
def outputFile = file("${rootDir}/dist/web/resources.index.txt")
|
||||
|
||||
outputFile.text = generateHashes(outputDir)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def generateClassListFile(File outputFile, Collection<String> classes, Closure<String> lineFormatter) {
|
||||
outputFile.parentFile.mkdirs()
|
||||
outputFile.text = classes.collect(lineFormatter).join('\n')
|
||||
println "Generated class list at ${outputFile.absolutePath}"
|
||||
}
|
||||
|
||||
def generateCodeFromTemplate(File outputFile, String template, Map<String, Object> vars) {
|
||||
outputFile.parentFile.mkdirs()
|
||||
String result = template
|
||||
vars.each { key, value ->
|
||||
result = result.replace("{{$key}}", value.toString())
|
||||
}
|
||||
outputFile.text = result
|
||||
println "Generated code at ${outputFile.absolutePath}"
|
||||
}
|
||||
|
||||
task scanClasspathForTeaVM {
|
||||
dependsOn configurations.compileClasspath.getTaskDependencyFromProjectDependency(true, 'classes')
|
||||
doLast {
|
||||
def scanResults = project.scanClasspathForClasses(project)
|
||||
|
||||
def preserveListFile = file("${buildDir}/generated/teaReflectList.txt")
|
||||
generateClassListFile(preserveListFile, scanResults.classes) { className ->
|
||||
"**/${className.replace('.', '/')}.java"
|
||||
}
|
||||
|
||||
def reflectionSupplierFile = file("${buildDir}/generated/teaReflect.java")
|
||||
def template = """private static void initGenerated() {
|
||||
{{classInitializers}}
|
||||
}"""
|
||||
generateCodeFromTemplate(reflectionSupplierFile, template, [
|
||||
classInitializers: scanResults.reflectionClasses.collect {
|
||||
" TeaReflectionSupplier.addReflectionClass(\"${it}\");"
|
||||
}.join('\n')
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
task updateTeaReflectionSupplier {
|
||||
dependsOn scanClasspathForTeaVM
|
||||
doLast {
|
||||
def reflectionSupplierFile = file("${buildDir}/generated/teaReflect.java")
|
||||
def teaReflectionSupplierFile = file("${projectDir}/src/main/java/org/ngengine/platform/TeaReflectionSupplier.java")
|
||||
|
||||
if (reflectionSupplierFile.exists() && teaReflectionSupplierFile.exists()) {
|
||||
def content = teaReflectionSupplierFile.text
|
||||
def initGeneratedContent = reflectionSupplierFile.text
|
||||
content = content.replaceAll(/(?s)private static void initGenerated\(\)\s*\{.*?\}/, initGeneratedContent)
|
||||
teaReflectionSupplierFile.text = content
|
||||
println "Updated TeaReflectionSupplier.java with generated initGenerated() method"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.named('compileJava').configure {
|
||||
dependsOn 'updateTeaReflectionSupplier'
|
||||
}
|
||||
|
||||
teavm.js {
|
||||
addedToWebApp = false
|
||||
mainClass = "org.ngengine.platform.WebLauncher"
|
||||
obfuscated = false
|
||||
debugInformation = true
|
||||
strict= false
|
||||
outOfProcess=false
|
||||
// optimization=org.teavm.gradle.api.OptimizationLevel.NONE
|
||||
sourceMap=true
|
||||
moduleType = org.teavm.gradle.api.JSModuleType.ES2015
|
||||
|
||||
def classesToPreserve=[]
|
||||
def preserveListFile = file("${buildDir}/generated/teaReflectList.txt")
|
||||
if (preserveListFile.exists()) {
|
||||
preserveListFile.readLines().each { line ->
|
||||
if (line.trim()) {
|
||||
classesToPreserve.add(line.trim())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def fqcnToPreserve = new LinkedHashSet<String>()
|
||||
|
||||
def toFqcn = { File baseDir, File f ->
|
||||
def rel = f.path.substring(baseDir.path.length() + 1)
|
||||
rel = rel.replaceAll(/\.java$/, '').replaceAll(/\.class$/, '')
|
||||
rel.replace('/', '.')
|
||||
}
|
||||
|
||||
rootProject.allprojects.each { prj ->
|
||||
def ss = prj.extensions.findByName('sourceSets')
|
||||
def mainSS = ss?.findByName('main')
|
||||
if (mainSS == null) return
|
||||
mainSS.java.srcDirs.each { srcDir ->
|
||||
if (!srcDir.exists()) return
|
||||
fileTree(srcDir).matching { include classesToPreserve }.forEach { f ->
|
||||
def fqcn = toFqcn(srcDir, f)
|
||||
fqcnToPreserve.add(fqcn)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def rtArtifacts = configurations.runtimeClasspath.resolvedConfiguration.lenientConfiguration.files
|
||||
rtArtifacts.each { artifact ->
|
||||
if (!artifact.exists()) return
|
||||
if (artifact.isDirectory()) {
|
||||
fileTree(artifact).matching { include classesToPreserve.collect { it.replace('.java', '.class') } }.forEach { f ->
|
||||
def fqcn = toFqcn(artifact, f)
|
||||
fqcnToPreserve.add(fqcn)
|
||||
}
|
||||
} else if (artifact.name.endsWith('.jar')) {
|
||||
def classFilePatterns = classesToPreserve.collect { it.replace('.java', '.class') }
|
||||
.collect { it.replace('**/', '') }
|
||||
|
||||
try {
|
||||
def jarFile = new java.util.jar.JarFile(artifact)
|
||||
def entries = jarFile.entries()
|
||||
|
||||
while (entries.hasMoreElements()) {
|
||||
def entry = entries.nextElement()
|
||||
if (entry.isDirectory()) continue
|
||||
|
||||
def entryName = entry.getName()
|
||||
if (classFilePatterns.any { pattern ->
|
||||
entryName.endsWith(pattern) || entryName.matches(pattern.replace("*", ".*"))
|
||||
}) {
|
||||
def fqcn = entryName.replaceAll(/\.class$/, '').replace('/', '.')
|
||||
fqcnToPreserve.add(fqcn)
|
||||
}
|
||||
}
|
||||
jarFile.close()
|
||||
} catch (Exception e) {
|
||||
println "WARNING: Could not process JAR file: ${artifact.name} - ${e.message}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fqcnToPreserve.each {
|
||||
preservedClasses.add(it)
|
||||
}
|
||||
|
||||
targetFileName = "webapp.js"
|
||||
}
|
||||
|
||||
|
||||
|
||||
task buildWebApp {
|
||||
dependsOn 'compileJava', 'generateJavaScript', 'copyAllResources'
|
||||
doLast {
|
||||
def jsDir = file("$buildDir/generated/teavm/js")
|
||||
def distDir = file("${rootDir}/dist/web")
|
||||
distDir.mkdirs()
|
||||
copy {
|
||||
from jsDir
|
||||
into distDir
|
||||
}
|
||||
println "Copied web app to: $distDir"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
task buildBundledWebApp {
|
||||
dependsOn buildWebApp
|
||||
doLast {
|
||||
def jsDir = file("$rootDir/dist/web")
|
||||
def bundledJsDir = file("$rootDir/dist/web-bundle")
|
||||
def bundleIgnoreFile = file("$jsDir/bundle-ignore.txt")
|
||||
def zipFile = file("$bundledJsDir/ngeapp-bundle.zip")
|
||||
def configFile = file("$bundledJsDir/ngeapp.json")
|
||||
|
||||
bundledJsDir.mkdirs()
|
||||
|
||||
// Read ignore patterns from bundle-ignore.txt
|
||||
def ignorePatterns = []
|
||||
if (bundleIgnoreFile.exists()) {
|
||||
bundleIgnoreFile.eachLine { line ->
|
||||
if (line.trim() && !line.startsWith('//')) ignorePatterns.add(line.trim())
|
||||
}
|
||||
println "Found ${ignorePatterns.size()} patterns to exclude from bundle"
|
||||
} else {
|
||||
println "Warning: bundle-ignore.txt not found at ${bundleIgnoreFile}. No files will be excluded from the bundle."
|
||||
}
|
||||
|
||||
|
||||
// Create zip with everything except ignored files
|
||||
ant.zip(destfile: zipFile) {
|
||||
fileset(dir: jsDir) {
|
||||
ignorePatterns.each { pattern ->
|
||||
if (pattern.endsWith('/')) {
|
||||
exclude(name: "${pattern}**")
|
||||
} else {
|
||||
exclude(name: pattern)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Copy ignored files to bundledjs directory
|
||||
if (!ignorePatterns.isEmpty()) {
|
||||
println "Copying excluded files to bundled directory..."
|
||||
|
||||
delete fileTree(bundledJsDir).matching { include '**/*' exclude 'ngeapp-bundle.zip', 'ngeapp-config.json' }
|
||||
|
||||
fileTree(jsDir).visit { fileDetails ->
|
||||
if (fileDetails.isDirectory()) return
|
||||
|
||||
def relativePath = fileDetails.relativePath.toString()
|
||||
def matchesPattern = false
|
||||
|
||||
for (pattern in ignorePatterns) {
|
||||
if (pattern.endsWith('/')) {
|
||||
if (relativePath.startsWith(pattern) || relativePath.startsWith(pattern.substring(0, pattern.length() - 1))) {
|
||||
matchesPattern = true
|
||||
break
|
||||
}
|
||||
} else {
|
||||
if (relativePath == pattern) {
|
||||
matchesPattern = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (matchesPattern) {
|
||||
println "Copying excluded file: $relativePath"
|
||||
copy {
|
||||
from fileDetails.file
|
||||
into new File(bundledJsDir, fileDetails.relativePath.parent.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
println "Finished copying excluded files"
|
||||
}
|
||||
// Calculate hash of zip file
|
||||
def hash = generateSHA256(zipFile)
|
||||
|
||||
// Set bundle in config file
|
||||
def config = [:]
|
||||
if (configFile.exists()) {
|
||||
try {
|
||||
config = new groovy.json.JsonSlurper().parseText(configFile.text)
|
||||
println "Updating existing config file: $configFile.path"
|
||||
} catch (Exception e) {
|
||||
println "Warning: Could not parse existing config file: $e.message"
|
||||
config = [:]
|
||||
}
|
||||
}
|
||||
|
||||
config.bundle = "ngeapp-bundle.zip"
|
||||
config.bundleHash = hash
|
||||
configFile.text = groovy.json.JsonOutput.prettyPrint(groovy.json.JsonOutput.toJson(config))
|
||||
|
||||
println "Created bundle: $zipFile.path"
|
||||
println "Bundle hash: $hash"
|
||||
println "Config written to: $configFile.path"
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
task npmCi(type: NpmTask) {
|
||||
workingDir = file("${projectDir}")
|
||||
args = ['ci']
|
||||
}
|
||||
|
||||
task runWebApp(type: NpxTask) {
|
||||
dependsOn buildWebApp
|
||||
workingDir = file("$rootDir/dist/web")
|
||||
command = 'http-server'
|
||||
args = [ '.', '-p', '8000']
|
||||
}
|
||||
|
||||
task runBundledWebApp(type: NpxTask) {
|
||||
dependsOn buildBundledWebApp
|
||||
workingDir = file("$rootDir/dist/web-bundle")
|
||||
command = 'http-server'
|
||||
args = [ '.', '-p', '8000']
|
||||
}
|
||||
|
||||
task deployWebApp(type: NpxTask) {
|
||||
dependsOn buildBundledWebApp
|
||||
dependsOn npmCi
|
||||
command = 'nostr-deploy-cli'
|
||||
args = ['deploy','--skip-setup', '-d', "${rootDir}/dist/web-bundle"]
|
||||
workingDir = file("${projectDir}")
|
||||
}
|
||||
|
||||
2033
platform-web/package-lock.json
generated
Normal file
2033
platform-web/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
5
platform-web/package.json
Normal file
5
platform-web/package.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"nostr-deploy-cli": "^0.7.6"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,744 @@
|
||||
package org.ngengine.platform;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.teavm.classlib.ReflectionContext;
|
||||
import org.teavm.classlib.ReflectionSupplier;
|
||||
import org.teavm.model.ClassReader;
|
||||
import org.teavm.model.FieldReader;
|
||||
|
||||
import org.teavm.model.MethodDescriptor;
|
||||
import org.teavm.model.MethodReader;
|
||||
import org.teavm.model.ValueType;
|
||||
|
||||
public class TeaReflectionSupplier implements ReflectionSupplier {
|
||||
private static ArrayList<Pattern> regexPatterns = new ArrayList<>();
|
||||
|
||||
private static ArrayList<Class<?>> clazzList = new ArrayList<>();
|
||||
private static ArrayList<String> clazzNameList = new ArrayList<>();
|
||||
static {
|
||||
init();
|
||||
}
|
||||
|
||||
private static void initGenerated() {
|
||||
TeaReflectionSupplier.addReflectionClass("com.jcraft.jzlib.Deflate");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jcraft.jzlib.GZIPHeader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.AnimClip");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.AnimComposer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.AnimLayer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.AnimTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.Armature");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.ArmatureMask");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.Joint");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.MatrixJointModelTransform");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.MorphControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.MorphTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.SeparateJointModelTransform");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.SingleLayerInfluenceMask");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.SkinningControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.TransformTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.tween.AbstractTween");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.tween.Tween");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.tween.action.Action");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.tween.action.BaseAction");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.tween.action.BlendAction");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.tween.action.BlendableAction");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.tween.action.ClipAction");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.util.HasLocalTransform");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.anim.util.JointModelTransform");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.AnimControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.Animation");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.AudioTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.Bone");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.BoneTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.ClonableTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.CompactArray");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.CompactFloatArray");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.CompactQuaternionArray");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.CompactVector3Array");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.EffectTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.Pose");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.PoseTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.Skeleton");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.SkeletonControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.SpatialTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.Track");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.animation.TrackInfo");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.app.StatsView");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.app.state.ScreenshotAppState");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.AssetKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.AssetLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.AssetLocator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.AssetProcessor");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.CloneableAssetProcessor");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.CloneableSmartAsset");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.FilterKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.MaterialKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.ModelKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.ShaderNodeDefinitionKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.TextureKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.cache.AssetCache");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.cache.SimpleAssetCache");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.cache.WeakRefAssetCache");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.cache.WeakRefCloneAssetCache");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.plugins.ClasspathLocator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.plugins.FileLocator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.plugins.HttpZipLocator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.plugins.UrlLocator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.asset.plugins.ZipLocator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.AudioBuffer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.AudioData");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.AudioKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.AudioNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.AudioStream");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.BandPassFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.Filter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.HighPassFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.LowPassFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.plugins.OGGLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.audio.plugins.WAVLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bounding.BoundingBox");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bounding.BoundingSphere");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bounding.BoundingVolume");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.animation.BoneLink");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.animation.DacConfiguration");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.animation.DacLinks");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.animation.DynamicAnimControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.animation.PhysicsLink");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.animation.RangeOfMotion");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.animation.TorsoLink");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.PhysicsCollisionObject");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.BoxCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.CapsuleCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.CollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.CompoundCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.ConeCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.CylinderCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.GImpactCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.HeightfieldCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.HullCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.MeshCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.PlaneCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.SimplexCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.SphereCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.collision.shapes.infos.ChildCollisionShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.control.AbstractPhysicsControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.control.BetterCharacterControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.control.CharacterControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.control.GhostControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.control.KinematicRagdollControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.control.PhysicsControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.control.RigidBodyControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.control.VehicleControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.debug.AbstractPhysicsDebugControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.debug.BulletCharacterDebugControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.debug.BulletGhostObjectDebugControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.debug.BulletJointDebugControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.debug.BulletRigidBodyDebugControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.debug.BulletVehicleDebugControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.joints.ConeJoint");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.joints.HingeJoint");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.joints.PhysicsJoint");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.joints.Point2PointJoint");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.joints.SixDofJoint");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.joints.SliderJoint");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.objects.PhysicsCharacter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.objects.PhysicsGhostObject");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.objects.PhysicsRigidBody");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.objects.PhysicsVehicle");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.bullet.objects.VehicleWheel");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.Cinematic");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.KeyFrame");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.MotionPath");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.TimeLine");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.events.AbstractCinematicEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.events.AnimEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.events.AnimationEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.events.AnimationTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.events.CameraEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.events.CinematicEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.events.MotionEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.events.MotionTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.events.SoundEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.cinematic.events.SoundTrack");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.collision.bih.BIHNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.collision.bih.BIHTree");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.ParticleEmitter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.ParticleMesh");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.ParticlePointMesh");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.ParticleTriMesh");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.influencers.DefaultParticleInfluencer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.influencers.EmptyParticleInfluencer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.influencers.NewtonianParticleInfluencer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.influencers.ParticleInfluencer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.influencers.RadialParticleInfluencer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.shapes.EmitterBoxShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.shapes.EmitterMeshConvexHullShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.shapes.EmitterMeshFaceShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.shapes.EmitterMeshVertexShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.shapes.EmitterPointShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.shapes.EmitterShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.effect.shapes.EmitterSphereShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.environment.EnvironmentProbeControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.environment.util.BoundingSphereDebug");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.environment.util.Circle");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.export.JmeImporter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.export.NullSavable");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.export.Savable");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.export.binary.BinaryImporter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.export.binary.BinaryLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.export.xml.XMLImporter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.font.BitmapCharacter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.font.BitmapCharacterSet");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.font.BitmapFont");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.font.BitmapText");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.font.BitmapTextPage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.font.GlyphParser");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.font.Kerning");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.font.Rectangle");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.font.StringBlock");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.font.plugins.BitmapFontLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.input.ChaseCamera");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.light.AmbientLight");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.light.DirectionalLight");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.light.Light");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.light.LightList");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.light.LightProbe");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.light.OrientedBoxProbeArea");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.light.PointLight");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.light.ProbeArea");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.light.SphereProbeArea");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.light.SpotLight");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.MatParam");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.MatParamOverride");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.MatParamTexture");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.Material");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.MaterialList");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.MaterialProcessor");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.RenderState");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.ShaderGenerationInfo");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.Technique");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.TechniqueDef");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.logic.DefaultTechniqueDefLogic");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.logic.MultiPassLightingLogic");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.logic.SinglePassAndImageBasedLightingLogic");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.logic.SinglePassLightingLogic");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.logic.StaticPassLightingLogic");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.logic.TechniqueDefLogic");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.plugins.J3MLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.material.plugins.ShaderNodeDefinitionLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.ColorRGBA");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Line");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.LineSegment");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Matrix3f");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Matrix4f");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Plane");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Quaternion");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Ray");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Rectangle");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Ring");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Spline");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Transform");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Triangle");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Vector2f");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Vector3f");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.math.Vector4f");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.AbstractMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.Message");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.message.ChannelInfoMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.message.ClientRegistrationMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.message.CompressedMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.message.DisconnectMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.message.GZIPCompressedMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.message.SerializerRegistrationsMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.message.ZIPCompressedMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.rmi.RemoteMethodCallMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.rmi.RemoteMethodReturnMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.rmi.RemoteObjectDefMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.service.rpc.msg.RpcCallMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.network.service.rpc.msg.RpcResponseMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.plugins.gson.GsonParser");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.plugins.json.JsonParser");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.Filter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.FilterPostProcessor");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.HDRRenderer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.PreDepthProcessor");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.SceneProcessor");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.BloomFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.CartoonEdgeFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.ColorOverlayFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.ComposeFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.ContrastAdjustmentFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.CrossHatchFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.DepthOfFieldFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.FXAAFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.FadeFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.FogFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.GammaCorrectionFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.KHRToneMapFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.LightScatteringFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.PosterizationFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.RadialBlurFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.SoftBloomFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.ToneMapFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.filters.TranslucentBucketFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.post.ssao.SSAOFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.renderer.Camera");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.AssetLinkNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.BatchNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.CameraNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.CollisionData");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.Geometry");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.GeometryGroupNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.LightNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.Mesh");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.Node");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.SimpleBatchNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.Spatial");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.UserData");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.VertexBuffer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.control.AbstractControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.control.BillboardControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.control.CameraControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.control.Control");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.control.LightControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.control.LodControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.control.UpdateControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.Arrow");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.Grid");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.SkeletonDebugger");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.SkeletonInterBoneWire");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.SkeletonPoints");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.SkeletonWire");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.WireBox");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.WireFrustum");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.WireSphere");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.custom.ArmatureDebugger");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.custom.ArmatureInterJointsWire");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.custom.ArmatureNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.debug.custom.JointShape");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.instancing.InstancedGeometry");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.instancing.InstancedNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.mesh.MorphTarget");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.IrBoneWeightIndex");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.IrVertex");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.MTLLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.OBJLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.fbx.ContentTextureKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.fbx.ContentTextureLocator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.fbx.FbxLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.fbx.SceneKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.fbx.SceneLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.fbx.SceneWithAnimationLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.gltf.BinDataKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.gltf.BinLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.gltf.GlbLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.gltf.GltfLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.gltf.GltfModelKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.ogre.MaterialLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.ogre.MeshLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.ogre.OgreMeshKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.ogre.SceneLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.ogre.SceneMeshLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.ogre.SkeletonLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.plugins.ogre.matext.OgreMaterialKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.AbstractBox");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.Box");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.CenterQuad");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.Curve");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.Cylinder");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.Dome");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.Line");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.PQTorus");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.Quad");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.RectangleMesh");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.Sphere");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.StripBox");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.Surface");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.scene.shape.Torus");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shader.Shader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shader.ShaderNode");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shader.ShaderNodeDefinition");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shader.ShaderNodeVariable");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shader.VariableMapping");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shader.bufferobject.BufferObject");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shader.bufferobject.BufferRegion");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shader.plugins.GLSLLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shader.plugins.ShaderAssetKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.AbstractShadowFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.AbstractShadowRenderer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.BasicShadowRenderer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.DirectionalLightShadowFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.DirectionalLightShadowRenderer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.PointLightShadowFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.PointLightShadowRenderer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.PssmShadowFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.PssmShadowRenderer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.SpotLightShadowFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.shadow.SpotLightShadowRenderer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.system.AppSettings");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.system.JmeSystem");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.system.JmeSystemDelegate");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.GeoMap");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.LODGeomap");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.MultiTerrainLodControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.NormalRecalcControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.TerrainGrid");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.TerrainGridLodControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.TerrainGridTileLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.TerrainLodControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.TerrainPatch");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.TerrainQuad");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.grid.AssetTileLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.grid.FractalTileLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.grid.ImageTileLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.lodcalc.LodCalculator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.lodcalc.LodThreshold");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.lodcalc.PerspectiveLodCalculator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.terrain.geomipmap.lodcalc.SimpleLodThreshold");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.FrameBuffer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.Image");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.Texture");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.Texture2D");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.Texture3D");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.TextureArray");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.TextureCubeMap");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.TextureProcessor");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.plugins.DDSLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.plugins.PFMLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.plugins.SVGTextureKey");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.plugins.TGALoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.texture.plugins.ktx.KTXLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.ui.Picture");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.BufferAllocator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.IntMap");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.ListMap");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.NativeObject");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.PrimitiveAllocator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.ReflectionAllocator");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.SafeArrayList");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.clone.JmeCloneable");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.res.DefaultResourceLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.res.ResourceLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.util.struct.StructStd140BufferObject");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.water.ReflectionProcessor");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.water.SimpleWaterProcessor");
|
||||
TeaReflectionSupplier.addReflectionClass("com.jme3.water.WaterFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.ActionButton");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.Button");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.Checkbox");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.Container");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.GridPanel");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.Insets3f");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.Label");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.ListBox");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.OptionPanel");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.Panel");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.PasswordField");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.ProgressBar");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.RollupPanel");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.Selector");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.Slider");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.Spinner");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.TabbedPanel");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.TextField");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.AbstractGuiComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.BorderLayout");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.BoxLayout");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.DynamicInsetsComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.IconComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.InsetsComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.QuadBackgroundComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.SpringGridLayout");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.TbtQuadBackgroundComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.Text2d");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.TextComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.component.TextEntryComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.core.AbstractNodeControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.core.CommandMap");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.core.GuiComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.core.GuiControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.core.GuiLayout");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.core.GuiMaterial");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.core.LightingMaterialAdapter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.core.UnshadedMaterialAdapter");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.dnd.DragAndDropControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.effect.EffectControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.event.CursorEventControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.event.MouseEventControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.focus.DefaultFocusTraversalControl");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.geom.DMesh");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.geom.MBox");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.geom.TbtQuad");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.list.DefaultCellRenderer");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.style.Attributes");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.style.ContainsSelector");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.style.ElementId");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.style.ElementSelector");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.style.Selector");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.style.StyleTree");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.style.Styles");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.text.DefaultDocumentModel");
|
||||
TeaReflectionSupplier.addReflectionClass("com.simsilica.lemur.value.DefaultValueRenderer");
|
||||
TeaReflectionSupplier.addReflectionClass("de.jarnbjo.vorbis.Floor1");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.ads.ImmersiveAdComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.ads.ImmersiveAdControl");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.Auth");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.AuthConfig");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.AuthSelectionWindow");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.AuthStrategy");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.Nip46AuthStrategy");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.nip07.Nip07Auth");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.nip07.Nip07AuthWindow");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.nip46.Nip46Auth");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.nip46.Nip46AuthWindow");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.nip46.Nip46ChallengeWindow");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.nsec.NsecAuth");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.nsec.NsecAuthWindow");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.auth.stored.StoredAuthSelectionWindow");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.Component");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.StallingComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.fragments.AppFragment");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.fragments.AssetLoadingFragment");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.fragments.AsyncAssetLoadingFragment");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.fragments.Fragment");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.fragments.GuiViewPortFragment");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.fragments.InputHandlerFragment");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.fragments.LogicFragment");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.fragments.MainViewPortFragment");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.components.fragments.RenderFragment");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.demo.adc.CharacterComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.demo.adc.HudComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.demo.adc.LoadingScreenComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.demo.adc.MapComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.demo.adc.PhysicsComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.demo.adc.PostprocessingComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.demo.adc.SoundComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.CollectionSavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.MapSavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.Nip46MetadataSavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.Nip46SignerSavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.NostrEventSavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.NostrKeyPairSavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.NostrPrivateKeySavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.NostrPublicKeySavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.NostrRelayInfoSavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.NumberSavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.SavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.export.StringSavableWrapper");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.NAspectPreservingQuadBackground");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.NButton");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.NIconButton");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.NLabel");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.NLoadingSpinner");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.NQrViewer");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.NSVGIcon");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.NTextInput");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.NVSpacer");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.containers.NColumn");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.containers.NContainer");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.containers.NMultiPageList");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.containers.NPanel");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.components.containers.NRow");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.qr.BitBuffer");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.win.NToast");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.win.NWindow");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.win.NWindowManagerComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.win.std.NConfirmDialogWindow");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.win.std.NErrorWindow");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.gui.win.std.NHud");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.lnurl.LnUrlPayerData");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.network.Lobby");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.network.LocalLobby");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.network.protocol.messages.BinaryMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.network.protocol.messages.ByteDataMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.network.protocol.messages.ClassRegistrationAckMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.network.protocol.messages.CompressedMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.network.protocol.messages.TextDataMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.network.protocol.messages.TextMessage");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.NostrFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.NostrRelayInfo");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.NostrRelayLifecycleManager");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.NostrRelaySubManager");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.event.NostrEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.event.SignedNostrEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.event.UnsignedNostrEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.keypair.NostrKey");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.keypair.NostrKeyPair");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.keypair.NostrPrivateKey");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.keypair.NostrPublicKey");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.listeners.NostrRelayComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.nip01.Nip01UserMetadataFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.nip05.Nip05Nip46Data");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.nip46.BunkerUrl");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.nip46.Nip46AppMetadata");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.nip46.NostrconnectUrl");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.nip50.NostrSearchFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.rtc.turn.NostrTURNSettings");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.signer.NostrKeyPairSigner");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.signer.NostrNIP07Signer");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.signer.NostrNIP46Signer");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostr4j.signer.NostrSigner");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostrads.protocol.AdBidEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostrads.protocol.AdBidFilter");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostrads.protocol.AdEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostrads.protocol.negotiation.AdAcceptOfferEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostrads.protocol.negotiation.AdBailEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostrads.protocol.negotiation.AdNegotiationEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostrads.protocol.negotiation.AdOfferEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostrads.protocol.negotiation.AdPaymentRequestEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostrads.protocol.negotiation.AdPayoutEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.nostrads.protocol.negotiation.AdPowNegotiationEvent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.platform.RTCSettings");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.player.PlayerManagerComponent");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.web.context.HeapAllocator");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.web.context.WebSystem");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.web.filesystem.WebImageLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.web.filesystem.WebLocator");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.web.filesystem.WebResourceLoader");
|
||||
TeaReflectionSupplier.addReflectionClass("org.ngengine.web.json.TeaJSONParser");
|
||||
}
|
||||
|
||||
private static void init() {
|
||||
initGenerated();
|
||||
}
|
||||
|
||||
public static void addReflectionClass(Class<?> c) {
|
||||
clazzList.add(c);
|
||||
}
|
||||
|
||||
public static void addReflectionClass(String className) {
|
||||
clazzNameList.add(className);
|
||||
}
|
||||
|
||||
|
||||
public static void addRegex(String regex) {
|
||||
regexPatterns.add(Pattern.compile(regex));
|
||||
}
|
||||
public TeaReflectionSupplier() {
|
||||
System.out.println("TeaReflectionSupplier initialized");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getAccessibleFields(ReflectionContext context, String className) {
|
||||
Set<String> fields = new HashSet<>();
|
||||
ClassReader cls = context.getClassSource().get(className);
|
||||
if (cls == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
try {
|
||||
|
||||
Class<?> clazz = context.getClassLoader().loadClass(className);
|
||||
|
||||
if (cls != null) {
|
||||
if (canHaveReflection(clazz)) {
|
||||
for (FieldReader field : cls.getFields()) {
|
||||
String name = field.getName();
|
||||
fields.add(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (ClassNotFoundException e) {
|
||||
new RuntimeException(e);
|
||||
}
|
||||
|
||||
return fields;
|
||||
}
|
||||
|
||||
private boolean isWhitelistedType(ReflectionContext context, ValueType t) throws ClassNotFoundException{
|
||||
boolean canHaveReflection = false;
|
||||
if (t instanceof ValueType.Void) {
|
||||
return true;
|
||||
}
|
||||
if (t instanceof ValueType.Array) {
|
||||
ValueType.Array a = (ValueType.Array) t;
|
||||
t = a.getItemType();
|
||||
|
||||
}
|
||||
if (t instanceof ValueType.Object) {
|
||||
ValueType.Object obj = (ValueType.Object) t;
|
||||
if(obj.getClassName().startsWith("java.lang")) {
|
||||
canHaveReflection = true;
|
||||
} else {
|
||||
Class<?> sc = context.getClassLoader().loadClass(obj.getClassName());
|
||||
canHaveReflection = canHaveReflection(sc);
|
||||
}
|
||||
} else if (t instanceof ValueType.Primitive) {
|
||||
canHaveReflection = true;
|
||||
}
|
||||
return canHaveReflection;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<MethodDescriptor> getAccessibleMethods(ReflectionContext context, String className) {
|
||||
Set<MethodDescriptor> methods = new HashSet<>();
|
||||
|
||||
ClassReader cls = context.getClassSource().get(className);
|
||||
if (cls == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
try {
|
||||
Class<?> clazz = context.getClassLoader().loadClass(className);
|
||||
|
||||
if (canHaveReflection(clazz)) {
|
||||
Collection<? extends MethodReader> methods2 = cls.getMethods();
|
||||
int constructors = 0;
|
||||
for (MethodReader method : methods2) {
|
||||
|
||||
boolean isConstructor = method.getName().equals("<init>");
|
||||
if(isConstructor) {
|
||||
constructors++;
|
||||
}
|
||||
|
||||
boolean canHaveReflection = true;
|
||||
|
||||
|
||||
if (canHaveReflection && !isConstructor) {
|
||||
ValueType t = method.getResultType();
|
||||
canHaveReflection = isWhitelistedType(context, t);
|
||||
}
|
||||
|
||||
if (!canHaveReflection) {
|
||||
continue;
|
||||
}
|
||||
|
||||
MethodDescriptor descriptor = method.getDescriptor();
|
||||
methods.add(descriptor);
|
||||
}
|
||||
}
|
||||
} catch (ClassNotFoundException e) {
|
||||
new RuntimeException(e);
|
||||
}
|
||||
return methods;
|
||||
}
|
||||
|
||||
private boolean canHaveReflection(Class<?> clazz) {
|
||||
for (Class<?> c : clazzList) {
|
||||
|
||||
if (c.isAssignableFrom(clazz) || c.equals(clazz)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
String className = clazz.getName();
|
||||
for(String cn : clazzNameList) {
|
||||
if(cn.equals(className)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
for (Pattern pattern : regexPatterns) {
|
||||
if (pattern.matcher(className).matches()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.ngengine.platform;
|
||||
|
||||
import org.ngengine.NGEApplication.NGEAppRunner;
|
||||
import org.ngengine.app.Main;
|
||||
import org.ngengine.platform.teavm.TeaVMPlatform;
|
||||
import org.ngengine.web.context.WebSystem;
|
||||
import com.jme3.system.JmeSystem;
|
||||
|
||||
|
||||
public class WebLauncher {
|
||||
|
||||
public static void main(String[] args) {
|
||||
new Thread(()->{ // must be a thread to run in a suspendable context in teavm
|
||||
NGEPlatform.set(new TeaVMPlatform());
|
||||
JmeSystem.setSystemDelegate(new WebSystem());
|
||||
|
||||
NGEAppRunner runner = Main.main(args);
|
||||
runner.start();
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
org.ngengine.platform.TeaReflectionSupplier
|
||||
13
platform-web/src/main/resources/manifest.json
Normal file
13
platform-web/src/main/resources/manifest.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "Nostr Game Engine Web App",
|
||||
"short_name": "ngewebapp",
|
||||
"start_url": "index.html",
|
||||
"display": "standalone",
|
||||
"icons": [{
|
||||
"src": "logo.webp",
|
||||
"sizes": "4096x4096",
|
||||
"type": "image/webp"
|
||||
}],
|
||||
"background_color": "#08020c",
|
||||
"theme_color": "#08020c"
|
||||
}
|
||||
Reference in New Issue
Block a user