From 0dbad55eaa37de793236f2f6908a5c6c6bf256e8 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sat, 12 Nov 2022 20:30:12 +0100 Subject: [PATCH] physics submodule --- .gitmodules | 3 +++ pixlyzer-physics | 1 + pom.xml | 5 ++++ .../de/bixilon/pixlyzer/EntitySpawner.kt | 27 +++++++++++-------- .../kotlin/de/bixilon/pixlyzer/PixLyzer.kt | 9 +++++++ wrapper/PixLyzer.py | 1 + 6 files changed, 35 insertions(+), 11 deletions(-) create mode 160000 pixlyzer-physics diff --git a/.gitmodules b/.gitmodules index 915e660..85924b9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "wrapper/data"] path = wrapper/data url = ssh://git@gitlab.bixilon.de:222/bixilon/pixlyzer-data.git +[submodule "pixlyzer-physics"] + path = pixlyzer-physics + url = ssh://git@gitlab.bixilon.de:222/bixilon/pixlyzer-physics.git diff --git a/pixlyzer-physics b/pixlyzer-physics new file mode 160000 index 0000000..04c3129 --- /dev/null +++ b/pixlyzer-physics @@ -0,0 +1 @@ +Subproject commit 04c31297179487ac728e97df5e7108a316516838 diff --git a/pom.xml b/pom.xml index ae6d686..104db46 100644 --- a/pom.xml +++ b/pom.xml @@ -99,6 +99,11 @@ jackson-databind 2.13.3 + + de.bixilon + kutil + 1.17.1 + com.github.oshi diff --git a/src/main/kotlin/de/bixilon/pixlyzer/EntitySpawner.kt b/src/main/kotlin/de/bixilon/pixlyzer/EntitySpawner.kt index dfa2c18..ba8491b 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/EntitySpawner.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/EntitySpawner.kt @@ -91,6 +91,20 @@ object EntitySpawner { val CLIENT_LEVEL = OBJENSIS.newInstance(levelClass) as ClientWorld + fun World.setDimension() { + getClass("net.minecraft.world.dimension.OverworldDimension", "net.minecraft.world.dimension.DimensionType")?.let { + val dimension = OBJENSIS.newInstance(it) + getField(DimensionType::class.java, "minimumY")?.set(dimension, 0) + getField(World::class.java, "dimensionEntry")?.let { + setFinalField(getField(World::class.java, "dimensionEntry")!!, this, getClass("net.minecraft.util.registry.RegistryEntry\$Direct")!!.getConstructor(Any::class.java).newInstance(dimension)) + } + try { + setFinalField(getField(World::class.java, "dimension")!!, this, dimension) + } catch (ignored: Throwable) { + } + } + } + init { val randomField = getField(World::class.java, "random")!! @@ -98,17 +112,8 @@ object EntitySpawner { setFinalField(getField(World::class.java, "border")!!, CLIENT_LEVEL, WorldBorder()) setFinalField(getField(World::class.java, "properties")!!, CLIENT_LEVEL, OBJENSIS.newInstance(getClass("net.minecraft.world.level.LevelProperties"))) setFinalField(getField(levelClass, "scoreboard")!!, CLIENT_LEVEL, Scoreboard()) - getClass("net.minecraft.world.dimension.OverworldDimension", "net.minecraft.world.dimension.DimensionType")?.let { - val dimension = OBJENSIS.newInstance(it) - getField(DimensionType::class.java, "minimumY")?.set(dimension, 0) - getField(World::class.java, "dimensionEntry")?.let { - setFinalField(getField(World::class.java, "dimensionEntry")!!, CLIENT_LEVEL, getClass("net.minecraft.util.registry.RegistryEntry\$Direct")!!.getConstructor(Any::class.java).newInstance(dimension)) - } - try { - setFinalField(getField(World::class.java, "dimension")!!, CLIENT_LEVEL, dimension) - } catch (ignored: Throwable) { - } - } + CLIENT_LEVEL.setDimension() + val networkHandler = OBJENSIS.newInstance(ClientPlayNetworkHandler::class.java) networkHandler.recipeManager = RecipeManager() getField(ClientWorld::class.java, "networkHandler", "netHandler")!!.set(CLIENT_LEVEL, networkHandler) diff --git a/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt b/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt index 5253048..3fde1a2 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt @@ -1,5 +1,6 @@ package de.bixilon.pixlyzer +import de.bixilon.kutil.reflection.ReflectionUtil.forceInit import de.bixilon.mbf.MBFBinaryWriter import de.bixilon.mbf.MBFCompressionTypes import de.bixilon.mbf.MBFData @@ -76,6 +77,14 @@ object PixLyzer { println("Class loading done in ${System.currentTimeMillis() - classesLoadStartTime}ms") + val physics = getClass("de.bixilon.pixlyzer.physics.PhysicsExtractor") + if (physics == null) { + println("Physics module not found, ignoring") + } else { + physics.forceInit() + physics.getDeclaredMethod("start").invoke(null) + } + val all: MutableMap = mutableMapOf() for (generator in Generators.GENERATORS) { val startTime = System.currentTimeMillis() diff --git a/wrapper/PixLyzer.py b/wrapper/PixLyzer.py index 2560b77..8334a8b 100755 --- a/wrapper/PixLyzer.py +++ b/wrapper/PixLyzer.py @@ -42,6 +42,7 @@ LIBRARIES = [ ("com.fasterxml.jackson.core", "jackson-annotations", JACKSON_VERSION), ("com.github.luben", "zstd-jni", "1.5.2-3"), ("de.bixilon", "mbf-kotlin", "0.2.1"), + ("de.bixilon", "kutil", "1.17.1"), ] VERSION_MANIFEST_URL = "https://launchermeta.mojang.com/mc/game/version_manifest.json"