From 853d3e2e37949e4b9b07808c145cbcadb91ab806 Mon Sep 17 00:00:00 2001 From: NicoNeko Date: Tue, 10 Feb 2026 11:02:23 +0200 Subject: [PATCH] Add PlayerToItem mutator --- .../willfp/libreforge/mutators/Mutators.kt | 4 ++- .../mutators/impl/MutatorLocationToCursor.kt | 9 ++--- .../mutators/impl/MutatorPlayerToItem.kt | 33 +++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 core/common/src/main/kotlin/com/willfp/libreforge/mutators/impl/MutatorPlayerToItem.kt diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/mutators/Mutators.kt b/core/common/src/main/kotlin/com/willfp/libreforge/mutators/Mutators.kt index 37e93c4d9..28c994914 100644 --- a/core/common/src/main/kotlin/com/willfp/libreforge/mutators/Mutators.kt +++ b/core/common/src/main/kotlin/com/willfp/libreforge/mutators/Mutators.kt @@ -14,6 +14,7 @@ import com.willfp.libreforge.mutators.impl.MutatorLocationToPlayer import com.willfp.libreforge.mutators.impl.MutatorLocationToProjectile import com.willfp.libreforge.mutators.impl.MutatorLocationToVictim import com.willfp.libreforge.mutators.impl.MutatorPlayerAsVictim +import com.willfp.libreforge.mutators.impl.MutatorPlayerToItem import com.willfp.libreforge.mutators.impl.MutatorSpinLocation import com.willfp.libreforge.mutators.impl.MutatorSpinVelocity import com.willfp.libreforge.mutators.impl.MutatorTranslateLocation @@ -21,7 +22,7 @@ import com.willfp.libreforge.mutators.impl.MutatorVictimAsDispatcher import com.willfp.libreforge.mutators.impl.MutatorVictimAsPlayer import com.willfp.libreforge.mutators.impl.MutatorVictimToOwner -object Mutators: Registry>() { +object Mutators : Registry>() { /** * Compile a list of [configs] into a MutatorList in a given [context]. */ @@ -78,5 +79,6 @@ object Mutators: Registry>() { register(MutatorDispatcherAsPlayer) register(MutatorDispatcherAsVictim) register(MutatorLocationToDrop) + register(MutatorPlayerToItem) } } diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/mutators/impl/MutatorLocationToCursor.kt b/core/common/src/main/kotlin/com/willfp/libreforge/mutators/impl/MutatorLocationToCursor.kt index 823d04331..39df5ed21 100644 --- a/core/common/src/main/kotlin/com/willfp/libreforge/mutators/impl/MutatorLocationToCursor.kt +++ b/core/common/src/main/kotlin/com/willfp/libreforge/mutators/impl/MutatorLocationToCursor.kt @@ -3,6 +3,7 @@ package com.willfp.libreforge.mutators.impl import com.willfp.eco.core.config.interfaces.Config import com.willfp.libreforge.NoCompileData import com.willfp.libreforge.arguments +import com.willfp.libreforge.getFormattedString import com.willfp.libreforge.mutators.Mutator import com.willfp.libreforge.mutators.parameterTransformers import com.willfp.libreforge.plugin @@ -12,10 +13,10 @@ import org.bukkit.FluidCollisionMode object MutatorLocationToCursor : Mutator("location_to_cursor") { override val arguments = arguments { - require("target", "You must specify a target (block or entity)!", Config::getString) { + require("target", "You must specify a target (block or entity)!", Config::getFormattedString) { it in listOf("block", "entity") } - require("start", "You must specify a start point! (player or victim)", Config::getString) { + require("start", "You must specify a start point! (player or victim)", Config::getFormattedString) { it in listOf("player", "victim") } } @@ -26,8 +27,8 @@ object MutatorLocationToCursor : Mutator("location_to_cursor") { } override fun mutate(data: TriggerData, config: Config, compileData: NoCompileData): TriggerData { - val target = config.getString("target") - val startingEntity = config.getString("start") + val target = config.getFormattedString("target", data) + val startingEntity = config.getFormattedString("start", data) val start = if (startingEntity.equals("player", true)) { data.player diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/mutators/impl/MutatorPlayerToItem.kt b/core/common/src/main/kotlin/com/willfp/libreforge/mutators/impl/MutatorPlayerToItem.kt new file mode 100644 index 000000000..e9de03730 --- /dev/null +++ b/core/common/src/main/kotlin/com/willfp/libreforge/mutators/impl/MutatorPlayerToItem.kt @@ -0,0 +1,33 @@ +package com.willfp.libreforge.mutators.impl + +import com.willfp.eco.core.config.interfaces.Config +import com.willfp.libreforge.ViolationContext +import com.willfp.libreforge.arguments +import com.willfp.libreforge.mutators.Mutator +import com.willfp.libreforge.mutators.parameterTransformers +import com.willfp.libreforge.slot.SlotType +import com.willfp.libreforge.slot.SlotTypes +import com.willfp.libreforge.slot.impl.SlotTypeAny +import com.willfp.libreforge.triggers.TriggerData +import com.willfp.libreforge.triggers.TriggerParameter + +object MutatorPlayerToItem : Mutator("player_to_item") { + override val arguments = arguments { + require("slot", "You must specify a slot!") + } + + override val parameterTransformers = parameterTransformers { + TriggerParameter.PLAYER becomes TriggerParameter.ITEM + } + + override fun mutate(data: TriggerData, config: Config, compileData: SlotType): TriggerData { + data.player ?: return data + return data.copy( + item = compileData.getItems(data.player)[0] + ) + } + + override fun makeCompileData(config: Config, context: ViolationContext): SlotType { + return SlotTypes.get(config.getFormattedString("slot")) ?: return SlotTypeAny + } +}