aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/util')
-rw-r--r--src/main/kotlin/util/JvmUtil.kt32
-rw-r--r--src/main/kotlin/util/MC.kt2
-rw-r--r--src/main/kotlin/util/TestUtil.kt5
3 files changed, 37 insertions, 2 deletions
diff --git a/src/main/kotlin/util/JvmUtil.kt b/src/main/kotlin/util/JvmUtil.kt
new file mode 100644
index 0000000..5be5ebd
--- /dev/null
+++ b/src/main/kotlin/util/JvmUtil.kt
@@ -0,0 +1,32 @@
+package moe.nea.firmament.util
+
+import com.sun.tools.attach.VirtualMachine
+import java.lang.management.ManagementFactory
+import java.nio.file.Path
+import kotlin.io.path.absolutePathString
+
+object JvmUtil {
+ fun guessJVMPid(): String {
+ val name = ManagementFactory.getRuntimeMXBean().name
+ val pid = name.substringBefore('@')
+ ErrorUtil.softCheck("Not a valid PID: $pid", pid.toIntOrNull() != null)
+ return pid
+ }
+
+ fun getVM(): VirtualMachine {
+ return VirtualMachine.attach(guessJVMPid())
+ }
+
+ fun useVM(block: (VirtualMachine) -> Unit) {
+ val vm = getVM()
+ block(vm)
+ vm.detach()
+ }
+
+ fun loadAgent(jarPath: Path, options: String? = null) {
+ useVM {
+ it.loadAgent(jarPath.absolutePathString(), options)
+ }
+ }
+
+}
diff --git a/src/main/kotlin/util/MC.kt b/src/main/kotlin/util/MC.kt
index f7c81da..a60d5c4 100644
--- a/src/main/kotlin/util/MC.kt
+++ b/src/main/kotlin/util/MC.kt
@@ -105,7 +105,7 @@ object MC {
inline val currentRegistries: RegistryWrapper.WrapperLookup? get() = world?.registryManager
val defaultRegistries: RegistryWrapper.WrapperLookup by lazy { BuiltinRegistries.createWrapperLookup() }
inline val currentOrDefaultRegistries get() = currentRegistries ?: defaultRegistries
- val defaultItems: RegistryWrapper.Impl<Item> = defaultRegistries.getOrThrow(RegistryKeys.ITEM)
+ val defaultItems: RegistryWrapper.Impl<Item> by lazy { defaultRegistries.getOrThrow(RegistryKeys.ITEM) }
var lastWorld: World? = null
get() {
field = world ?: field
diff --git a/src/main/kotlin/util/TestUtil.kt b/src/main/kotlin/util/TestUtil.kt
index 68a406f..2d38f35 100644
--- a/src/main/kotlin/util/TestUtil.kt
+++ b/src/main/kotlin/util/TestUtil.kt
@@ -1,5 +1,8 @@
package moe.nea.firmament.util
object TestUtil {
- val isInTest = Thread.currentThread().stackTrace.any { it.className.startsWith("org.junit.") }
+ val isInTest =
+ Thread.currentThread().stackTrace.any {
+ it.className.startsWith("org.junit.") || it.className.startsWith("io.kotest.")
+ }
}