Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,5 @@ astra.properties
local.properties
.gradle/
build/
orm/src/test/resources/mysql.json
orm/src/test/resources/mysql.json
core-neoforge/runs
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugins {
alias(libs.plugins.klibs.gradle.detekt.compose) apply false
alias(libs.plugins.klibs.gradle.dokka.root) apply false
alias(libs.plugins.klibs.gradle.dokka.module) apply false
alias(libs.plugins.klibs.gradle.java.core) apply false
alias(libs.plugins.klibs.gradle.java.version) apply false
alias(libs.plugins.klibs.gradle.publication) apply false
alias(libs.plugins.klibs.gradle.rootinfo) apply false
}
Expand All @@ -21,6 +21,6 @@ subprojects.forEach {
it.apply(plugin = "ru.astrainteractive.gradleplugin.publication")
}
it.plugins.withId("org.jetbrains.kotlin.jvm") {
it.apply(plugin = "ru.astrainteractive.gradleplugin.java.core")
it.apply(plugin = "ru.astrainteractive.gradleplugin.java.version")
}
}

This file was deleted.

22 changes: 12 additions & 10 deletions core-forge/build.gradle.kts → core-neoforge/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import ru.astrainteractive.gradleplugin.property.extension.ModelPropertyValueExt.requireJinfo

plugins {
kotlin("jvm")
kotlin("plugin.serialization")
alias(libs.plugins.forgegradle)
alias(libs.plugins.neoforgegradle)
}

dependencies {
// Kotlin
compileOnly(libs.kotlin.coroutines.core)

compileOnly(libs.klibs.mikro.core)

compileOnly(libs.kyori.api)
compileOnly(libs.kyori.gson)
compileOnly(libs.kyori.legacy)
Expand All @@ -25,16 +25,18 @@ dependencies {
implementation(projects.command)
}

dependencies {
minecraft(
"net.minecraftforge",
"forge",
"${libs.versions.minecraft.mojang.version.get()}-${libs.versions.minecraft.forgeversion.get()}"
tasks.withType<JavaCompile> {
javaCompiler.set(
javaToolchains.compilerFor {
requireJinfo.jtarget.majorVersion
.let(JavaLanguageVersion::of)
.let(languageVersion::set)
}
)
}

minecraft {
mappings("official", libs.versions.minecraft.mojang.version.get())
dependencies {
compileOnly(libs.minecraft.neoforgeversion)
}

configurations.runtimeElements {
Expand Down
1 change: 1 addition & 0 deletions core-neoforge/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
makeevrserg.java.source=21
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import net.minecraft.commands.CommandSourceStack
import net.minecraftforge.event.RegisterCommandsEvent
import net.minecraftforge.eventbus.api.EventPriority
import net.neoforged.bus.api.EventPriority
import net.neoforged.neoforge.event.RegisterCommandsEvent
import ru.astrainteractive.astralibs.event.flowEvent

class ForgeCommandRegistrarContext(
class NeoForgeCommandRegistrarContext(
private val mainScope: CoroutineScope,
) {
private val registerCommandsEvent = flowEvent<RegisterCommandsEvent>(EventPriority.HIGHEST)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package ru.astrainteractive.astralibs.coroutine

import kotlinx.coroutines.MainCoroutineDispatcher
import net.minecraft.client.Minecraft
import net.neoforged.api.distmarker.Dist
import net.neoforged.fml.loading.FMLEnvironment
import ru.astrainteractive.astralibs.server.util.NeoForgeUtil
import java.util.concurrent.Executor
import kotlin.coroutines.CoroutineContext

class NeoForgeMainDispatcher : MainCoroutineDispatcher() {
override val immediate: MainCoroutineDispatcher
get() = this
private val executor = when (FMLEnvironment.dist) {
Dist.CLIENT -> Minecraft.getInstance()
Dist.DEDICATED_SERVER -> Executor { block ->
NeoForgeUtil.requireServer().executeBlocking(block) // .doRunTask(task)
}
}

override fun isDispatchNeeded(context: CoroutineContext): Boolean {
return true
}

override fun dispatch(context: CoroutineContext, block: Runnable) {
executor.execute(block)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.launch
import net.minecraftforge.common.MinecraftForge
import net.minecraftforge.eventbus.api.Event
import net.minecraftforge.eventbus.api.EventPriority
import net.neoforged.bus.api.Event
import net.neoforged.bus.api.EventPriority
import net.neoforged.neoforge.common.NeoForge
import java.util.function.Consumer

fun <T : Event> flowEvent(
Expand All @@ -17,14 +17,14 @@ fun <T : Event> flowEvent(
val consumer = Consumer<T> { event ->
launch { send(event) }
}
MinecraftForge.EVENT_BUS.addListener<T>(
NeoForge.EVENT_BUS.addListener<T>(
priority,
isCancelled,
type,
consumer
)
awaitClose {
MinecraftForge.EVENT_BUS.unregister(consumer)
NeoForge.EVENT_BUS.unregister(consumer)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.onEach
import net.minecraft.world.entity.player.Player
import net.minecraft.world.level.storage.ServerLevelData
import net.minecraftforge.event.entity.living.LivingEvent
import net.neoforged.neoforge.event.tick.PlayerTickEvent
import ru.astrainteractive.astralibs.server.location.Location
import ru.astrainteractive.klibs.mikro.core.util.cast
import ru.astrainteractive.klibs.mikro.core.util.tryCast
Expand All @@ -16,7 +16,7 @@ import kotlin.time.Duration.Companion.seconds
import kotlin.time.toJavaDuration

class PlayerMoveEvent(
val instance: LivingEvent.LivingTickEvent,
val instance: PlayerTickEvent.Post,
val oldLocation: Location,
val newLocation: Location,
val player: Player
Expand All @@ -27,7 +27,7 @@ fun playerMoveFlowEvent() = flow {
.newBuilder()
.expireAfterAccess(10.seconds.toJavaDuration())
.build<UUID, Location>()
flowEvent<LivingEvent.LivingTickEvent>()
flowEvent<PlayerTickEvent.Post>()
.filter { it.entity is Player }
.onEach { event ->
val player = event.entity.tryCast<Player>() ?: return@onEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import ru.astrainteractive.astralibs.permission.Permissible
import ru.astrainteractive.astralibs.server.player.MinecraftPlayer
import ru.astrainteractive.astralibs.server.player.OfflineMinecraftPlayer
import ru.astrainteractive.astralibs.server.player.OnlineMinecraftPlayer
import ru.astrainteractive.astralibs.server.util.ForgeUtil
import ru.astrainteractive.astralibs.server.util.NeoForgeUtil
import ru.astrainteractive.astralibs.server.util.asOnlineMinecraftPlayer
import ru.astrainteractive.astralibs.server.util.getOnlinePlayer
import java.util.UUID

class ForgeMinecraftNativeBridge : MinecraftNativeBridge {
class NeoForgeMinecraftNativeBridge : MinecraftNativeBridge {
override fun OnlineMinecraftPlayer.asAudience(): Audience {
return OnlinePlayerAudience(this)
}
Expand All @@ -28,12 +28,12 @@ class ForgeMinecraftNativeBridge : MinecraftNativeBridge {
}

private fun findOnlinePlayer(uuid: UUID): OnlineMinecraftPlayer? {
val player = ForgeUtil.getOnlinePlayer(uuid) ?: return null
val player = NeoForgeUtil.getOnlinePlayer(uuid) ?: return null
return player.asOnlineMinecraftPlayer()
}

private fun findOfflinePlayer(uuid: UUID): OfflineMinecraftPlayer? {
val player = ForgeUtil.getOnlinePlayer(uuid) ?: return null
val player = NeoForgeUtil.getOnlinePlayer(uuid) ?: return null
return OfflineMinecraftPlayer(
uuid = player.uuid,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,34 @@ package ru.astrainteractive.astralibs.server

import ru.astrainteractive.astralibs.server.player.OfflineMinecraftPlayer
import ru.astrainteractive.astralibs.server.player.OnlineMinecraftPlayer
import ru.astrainteractive.astralibs.server.util.ForgeUtil
import ru.astrainteractive.astralibs.server.util.NeoForgeUtil
import ru.astrainteractive.astralibs.server.util.asOfflineMinecraftPlayer
import ru.astrainteractive.astralibs.server.util.asOnlineMinecraftPlayer
import ru.astrainteractive.astralibs.server.util.getOnlinePlayer
import ru.astrainteractive.astralibs.server.util.getOnlinePlayers
import ru.astrainteractive.astralibs.server.util.getPlayerGameProfile
import java.util.UUID

object ForgePlatformServer : PlatformServer {
object NeoForgePlatformServer : PlatformServer {
override fun getOnlinePlayers(): List<OnlineMinecraftPlayer> {
return ForgeUtil
return NeoForgeUtil
.getOnlinePlayers()
.map { serverPlayer -> serverPlayer.asOnlineMinecraftPlayer() }
}

override fun findOnlinePlayer(uuid: UUID): OnlineMinecraftPlayer? {
return ForgeUtil.getOnlinePlayer(uuid)?.asOnlineMinecraftPlayer()
return NeoForgeUtil.getOnlinePlayer(uuid)?.asOnlineMinecraftPlayer()
}

override fun findOfflinePlayer(uuid: UUID): OfflineMinecraftPlayer? {
return ForgeUtil.getPlayerGameProfile(uuid)?.asOfflineMinecraftPlayer()
return NeoForgeUtil.getPlayerGameProfile(uuid)?.asOfflineMinecraftPlayer()
}

override fun findOnlinePlayer(name: String): OnlineMinecraftPlayer? {
return ForgeUtil.getOnlinePlayer(name)?.asOnlineMinecraftPlayer()
return NeoForgeUtil.getOnlinePlayer(name)?.asOnlineMinecraftPlayer()
}

override fun findOfflinePlayer(name: String): OfflineMinecraftPlayer? {
return ForgeUtil.getPlayerGameProfile(name)?.asOfflineMinecraftPlayer()
return NeoForgeUtil.getPlayerGameProfile(name)?.asOfflineMinecraftPlayer()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ fun CommandSourceStack.asAudience() = Audience { component ->
}

fun OnlineMinecraftPlayer.asAudience() = Audience { component ->
val player = ForgeUtil.getOnlinePlayer(uuid) ?: return@Audience
val player = NeoForgeUtil.getOnlinePlayer(uuid) ?: return@Audience
player.sendSystemMessage(component.toNative())
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import ru.astrainteractive.astralibs.server.player.OnlineMinecraftPlayer
import ru.astrainteractive.klibs.mikro.core.util.cast

fun OnlineMinecraftPlayer.asLocatable() = Locatable {
val player = ForgeUtil.getOnlinePlayer(uuid) ?: error("$this is not online")
val player = NeoForgeUtil.getOnlinePlayer(uuid) ?: error("$this is not online")
Location(
x = player.x,
y = player.y,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,18 @@ import ru.astrainteractive.astralibs.kyori.KyoriComponentSerializer
fun net.kyori.adventure.text.Component.toNative(): Component {
val json = KyoriComponentSerializer.Json
val jsonComponent = json.serializer.serialize(this)
return Serializer.fromJson(jsonComponent) ?: Component.empty()

return Serializer.fromJson(
jsonComponent,
NeoForgeUtil.requireServer().registryAccess()
) ?: Component.empty()
}

fun Component.toKyori(): net.kyori.adventure.text.Component {
val json = Serializer.toJson(this)
val json = Serializer.toJson(
this,
NeoForgeUtil.requireServer().registryAccess()
)
return KyoriComponentSerializer.Json.serializer.deserialize(json)
}

Expand Down
Loading
Loading