Move explosive enhancment into isolation
[no changelog]
This commit is contained in:
@@ -154,10 +154,6 @@ val SourceSet.modImplementationConfigurationName
|
|||||||
loom.remapConfigurations.find {
|
loom.remapConfigurations.find {
|
||||||
it.targetConfigurationName.get() == this.implementationConfigurationName
|
it.targetConfigurationName.get() == this.implementationConfigurationName
|
||||||
}!!.sourceConfiguration
|
}!!.sourceConfiguration
|
||||||
val configuredSourceSet = createIsolatedSourceSet("configured")
|
|
||||||
val sodiumSourceSet = createIsolatedSourceSet("sodium")
|
|
||||||
val citResewnSourceSet = createIsolatedSourceSet("citresewn")
|
|
||||||
val yaclSourceSet = createIsolatedSourceSet("yacl")
|
|
||||||
|
|
||||||
val shadowMe by configurations.creating {
|
val shadowMe by configurations.creating {
|
||||||
exclude(group = "org.jetbrains.kotlin")
|
exclude(group = "org.jetbrains.kotlin")
|
||||||
@@ -182,6 +178,12 @@ val nonModImplentation by configurations.creating {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val configuredSourceSet = createIsolatedSourceSet("configured")
|
||||||
|
val sodiumSourceSet = createIsolatedSourceSet("sodium")
|
||||||
|
val citResewnSourceSet = createIsolatedSourceSet("citresewn")
|
||||||
|
val yaclSourceSet = createIsolatedSourceSet("yacl")
|
||||||
|
val explosiveEnhancementSourceSet = createIsolatedSourceSet("explosiveEnhancement")
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Minecraft dependencies
|
// Minecraft dependencies
|
||||||
"minecraft"(libs.minecraft)
|
"minecraft"(libs.minecraft)
|
||||||
@@ -196,7 +198,7 @@ dependencies {
|
|||||||
modImplementation(libs.modmenu)
|
modImplementation(libs.modmenu)
|
||||||
modImplementation(libs.moulconfig)
|
modImplementation(libs.moulconfig)
|
||||||
modImplementation(libs.manninghamMills)
|
modImplementation(libs.manninghamMills)
|
||||||
modCompileOnly(libs.explosiveenhancement)
|
(explosiveEnhancementSourceSet.modImplementationConfigurationName)(libs.explosiveenhancement)
|
||||||
modImplementation(libs.hypixelmodapi)
|
modImplementation(libs.hypixelmodapi)
|
||||||
include(libs.hypixelmodapi.fabric)
|
include(libs.hypixelmodapi.fabric)
|
||||||
compileOnly(project(":javaplugin"))
|
compileOnly(project(":javaplugin"))
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package moe.nea.firmament.compat.explosiveenhancement
|
||||||
|
|
||||||
|
import com.google.auto.service.AutoService
|
||||||
|
import net.superkat.explosiveenhancement.api.ExplosiveApi
|
||||||
|
import net.minecraft.util.math.Vec3d
|
||||||
|
import moe.nea.firmament.features.fixes.CompatibliltyFeatures
|
||||||
|
import moe.nea.firmament.features.fixes.CompatibliltyFeatures.TConfig
|
||||||
|
import moe.nea.firmament.util.MC
|
||||||
|
import moe.nea.firmament.util.compatloader.CompatLoader
|
||||||
|
|
||||||
|
@AutoService(CompatibliltyFeatures.ExplosiveApiWrapper::class)
|
||||||
|
@CompatLoader.RequireMod("explosiveenhancement")
|
||||||
|
class ExplosiveEnhancementSpawner : CompatibliltyFeatures.ExplosiveApiWrapper {
|
||||||
|
override fun spawnParticle(vec3d: Vec3d, power: Float) {
|
||||||
|
ExplosiveApi.spawnParticles(MC.world, vec3d.x, vec3d.y, vec3d.z, TConfig.explosionSize / 10F)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,16 +1,12 @@
|
|||||||
|
|
||||||
|
|
||||||
package moe.nea.firmament.features.fixes
|
package moe.nea.firmament.features.fixes
|
||||||
|
|
||||||
import net.fabricmc.loader.api.FabricLoader
|
|
||||||
import net.superkat.explosiveenhancement.api.ExplosiveApi
|
|
||||||
import net.minecraft.particle.ParticleTypes
|
import net.minecraft.particle.ParticleTypes
|
||||||
import net.minecraft.util.math.Vec3d
|
import net.minecraft.util.math.Vec3d
|
||||||
import moe.nea.firmament.annotations.Subscribe
|
import moe.nea.firmament.annotations.Subscribe
|
||||||
import moe.nea.firmament.events.ParticleSpawnEvent
|
import moe.nea.firmament.events.ParticleSpawnEvent
|
||||||
import moe.nea.firmament.features.FirmamentFeature
|
import moe.nea.firmament.features.FirmamentFeature
|
||||||
import moe.nea.firmament.gui.config.ManagedConfig
|
import moe.nea.firmament.gui.config.ManagedConfig
|
||||||
import moe.nea.firmament.util.MC
|
import moe.nea.firmament.util.compatloader.CompatLoader
|
||||||
|
|
||||||
object CompatibliltyFeatures : FirmamentFeature {
|
object CompatibliltyFeatures : FirmamentFeature {
|
||||||
override val identifier: String
|
override val identifier: String
|
||||||
@@ -26,17 +22,11 @@ object CompatibliltyFeatures : FirmamentFeature {
|
|||||||
|
|
||||||
interface ExplosiveApiWrapper {
|
interface ExplosiveApiWrapper {
|
||||||
fun spawnParticle(vec3d: Vec3d, power: Float)
|
fun spawnParticle(vec3d: Vec3d, power: Float)
|
||||||
|
|
||||||
|
companion object : CompatLoader<ExplosiveApiWrapper>(ExplosiveApiWrapper::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
class ExplosiveApiWrapperImpl : ExplosiveApiWrapper {
|
private val explosiveApiWrapper = ExplosiveApiWrapper.singleInstance
|
||||||
override fun spawnParticle(vec3d: Vec3d, power: Float) {
|
|
||||||
ExplosiveApi.spawnParticles(MC.world, vec3d.x, vec3d.y, vec3d.z, TConfig.explosionSize / 10F)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val explosiveApiWrapper = if (FabricLoader.getInstance().isModLoaded("explosiveenhancement")) {
|
|
||||||
ExplosiveApiWrapperImpl()
|
|
||||||
} else null
|
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
fun onExplosion(it: ParticleSpawnEvent) {
|
fun onExplosion(it: ParticleSpawnEvent) {
|
||||||
|
|||||||
47
src/main/kotlin/util/compatloader/CompatLoader.kt
Normal file
47
src/main/kotlin/util/compatloader/CompatLoader.kt
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
package moe.nea.firmament.util.compatloader
|
||||||
|
|
||||||
|
import java.util.ServiceLoader
|
||||||
|
import net.fabricmc.loader.api.FabricLoader
|
||||||
|
import kotlin.streams.asSequence
|
||||||
|
import moe.nea.firmament.Firmament
|
||||||
|
|
||||||
|
abstract class CompatLoader<T : Any>(val kClass: Class<T>) {
|
||||||
|
val loader: ServiceLoader<T> = ServiceLoader.load(kClass)
|
||||||
|
val allValidInstances by lazy {
|
||||||
|
loader.reload()
|
||||||
|
loader.stream()
|
||||||
|
.asSequence()
|
||||||
|
.filter { provider ->
|
||||||
|
runCatching {
|
||||||
|
shouldLoad(provider.type())
|
||||||
|
}.getOrElse {
|
||||||
|
Firmament.logger.error("Could not determine whether to load a ${kClass.name} subclass", it)
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.mapNotNull { provider ->
|
||||||
|
runCatching {
|
||||||
|
provider.get()
|
||||||
|
}.getOrElse {
|
||||||
|
Firmament.logger.error(
|
||||||
|
"Could not load desired instance ${provider.type().name} for ${kClass.name}",
|
||||||
|
it)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.toList()
|
||||||
|
}
|
||||||
|
val singleInstance by lazy { allValidInstances.singleOrNull() }
|
||||||
|
|
||||||
|
open fun shouldLoad(type: Class<out T>): Boolean {
|
||||||
|
return checkRequiredModsPresent(type)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun checkRequiredModsPresent(type: Class<*>): Boolean {
|
||||||
|
val requiredMods = type.getAnnotationsByType(RequireMod::class.java)
|
||||||
|
return requiredMods.all { FabricLoader.getInstance().isModLoaded(it.modId) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Repeatable
|
||||||
|
annotation class RequireMod(val modId: String)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user