mirror of
https://gitlab.com/cable-mc/cobblemon.git
synced 2026-10-20 14:16:26 -04:00
feat+refactor: add separate molang script modifier and rename og molang modifier to expression
This commit is contained in:
+2
-2
@@ -24,11 +24,11 @@ import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
|
||||
class MoLangModifier(
|
||||
class ExpressionModifier(
|
||||
val query: ExpressionLike = "1.0".asExpressionLike(),
|
||||
) : CatchRateModifier {
|
||||
companion object {
|
||||
const val VARIANT = "molang"
|
||||
const val VARIANT = "expression"
|
||||
val runtime = MoLangRuntime().setup()
|
||||
}
|
||||
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.api.pokeball.catching.modifiers
|
||||
|
||||
import com.bedrockk.molang.runtime.MoLangRuntime
|
||||
import com.cobblemon.mod.common.api.molang.ExpressionLike
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asBiomeMoLangValue
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asStruct
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asWorldMoLangValue
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.setup
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.CatchRateModifier
|
||||
import com.cobblemon.mod.common.api.scripting.CobblemonScripts
|
||||
import com.cobblemon.mod.common.pokemon.Pokemon
|
||||
import com.cobblemon.mod.common.util.asExpressionLike
|
||||
import com.cobblemon.mod.common.util.toBlockPos
|
||||
import com.cobblemon.mod.common.util.withPlayerValue
|
||||
import com.cobblemon.mod.common.util.withQueryValue
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
|
||||
class ScriptModifier(
|
||||
val location: ResourceLocation
|
||||
) : CatchRateModifier {
|
||||
companion object {
|
||||
const val VARIANT = "script"
|
||||
val runtime = MoLangRuntime().setup()
|
||||
}
|
||||
|
||||
override fun isGuaranteed(): Boolean = false
|
||||
|
||||
override fun value(
|
||||
thrower: LivingEntity,
|
||||
pokemon: Pokemon
|
||||
): Float {
|
||||
val worldValue =
|
||||
thrower
|
||||
.level()
|
||||
.registryAccess()
|
||||
.registryOrThrow(Registries.DIMENSION)
|
||||
.wrapAsHolder(thrower.level())
|
||||
.asWorldMoLangValue()
|
||||
|
||||
val biomeValue = thrower.level().getBiome(thrower.position().toBlockPos()).asBiomeMoLangValue()
|
||||
|
||||
var ballRuntime = runtime
|
||||
.withQueryValue("world", worldValue)
|
||||
.withQueryValue("biome", biomeValue)
|
||||
.withQueryValue("pokemon", pokemon.asStruct())
|
||||
|
||||
if (thrower is ServerPlayer) {
|
||||
ballRuntime = ballRuntime.withPlayerValue("player", thrower)
|
||||
}
|
||||
|
||||
return CobblemonScripts.run(location, ballRuntime)?.asDouble()?.toFloat() ?: 0.0f
|
||||
}
|
||||
|
||||
override fun behavior(
|
||||
thrower: LivingEntity,
|
||||
pokemon: Pokemon
|
||||
): CatchRateModifier.Behavior = CatchRateModifier.Behavior.MULTIPLY
|
||||
|
||||
override fun isValid(
|
||||
thrower: LivingEntity,
|
||||
pokemon: Pokemon
|
||||
): Boolean = true
|
||||
|
||||
override fun modifyCatchRate(
|
||||
currentCatchRate: Float,
|
||||
thrower: LivingEntity,
|
||||
pokemon: Pokemon
|
||||
): Float = this.behavior(thrower, pokemon).mutator(currentCatchRate, this.value(thrower, pokemon))
|
||||
}
|
||||
@@ -21,13 +21,11 @@ import com.cobblemon.mod.common.api.events.pokeball.ThrownPokeballHitEvent
|
||||
import com.cobblemon.mod.common.api.events.pokemon.PokemonCapturedEvent
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMoLangValue
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asMostSpecificMoLangValue
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.asStruct
|
||||
import com.cobblemon.mod.common.api.molang.MoLangFunctions.setup
|
||||
import com.cobblemon.mod.common.api.net.serializers.StringSetDataSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.Vec3DataSerializer
|
||||
import com.cobblemon.mod.common.api.pokeball.PokeBalls
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.CaptureContext
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.modifiers.MoLangModifier
|
||||
import com.cobblemon.mod.common.api.pokemon.status.Statuses
|
||||
import com.cobblemon.mod.common.api.reactive.SimpleObservable
|
||||
import com.cobblemon.mod.common.api.scheduling.Schedulable
|
||||
|
||||
+4
-2
@@ -15,8 +15,9 @@ import com.cobblemon.mod.common.api.pokeball.catching.modifiers.BaseStatModifier
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.modifiers.CatchRateModifierAdapter
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.modifiers.GuaranteedModifier
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.modifiers.LabelModifier
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.modifiers.MoLangModifier
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.modifiers.ExpressionModifier
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.modifiers.PropertyBasedModifier
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.modifiers.ScriptModifier
|
||||
import com.cobblemon.mod.common.api.pokeball.catching.modifiers.SimpleModifier
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
|
||||
import com.cobblemon.mod.common.util.readString
|
||||
@@ -43,7 +44,8 @@ object CobblemonCatchRateModifierAdapter : CatchRateModifierAdapter {
|
||||
this.registerType(GuaranteedModifier.VARIANT, GuaranteedModifier::class)
|
||||
this.registerType(PropertyBasedModifier.VARIANT, PropertyBasedModifier::class)
|
||||
this.registerType(LabelModifier.VARIANT, LabelModifier::class)
|
||||
this.registerType(MoLangModifier.VARIANT, MoLangModifier::class)
|
||||
this.registerType(ExpressionModifier.VARIANT, ExpressionModifier::class)
|
||||
this.registerType(ScriptModifier.VARIANT, ScriptModifier::class)
|
||||
}
|
||||
|
||||
val gson: Gson by lazy {
|
||||
|
||||
Reference in New Issue
Block a user