From c4705975fa4c3f0983558eeceda2c111e31635b8 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sun, 20 Mar 2022 12:49:18 +0000 Subject: [PATCH] Added semi_instant roll --- .../ecocrates/crate/roll/RollSemiInstant.kt | 74 +++++++++++++++++++ .../com/willfp/ecocrates/crate/roll/Rolls.kt | 1 + .../core-plugin/src/main/resources/config.yml | 9 ++- 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/roll/RollSemiInstant.kt diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/roll/RollSemiInstant.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/roll/RollSemiInstant.kt new file mode 100644 index 0000000..dd46b2a --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/roll/RollSemiInstant.kt @@ -0,0 +1,74 @@ +package com.willfp.ecocrates.crate.roll + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.util.NumberUtils +import com.willfp.ecocrates.crate.Crate +import com.willfp.ecocrates.reward.Reward +import org.bukkit.Location +import org.bukkit.entity.Item +import org.bukkit.entity.Player +import org.bukkit.util.Vector + +class RollSemiInstant private constructor( + override val reward: Reward, + override val crate: Crate, + override val plugin: EcoPlugin, + override val player: Player, + override val location: Location, + override val isReroll: Boolean +) : Roll { + private val itemLifespan = plugin.configYml.getInt("rolls.semi_instant.item-lifespan") + + private val randomness = plugin.configYml.getDouble("rolls.semi_instant.velocity.randomness") + + private val velocity = Vector( + plugin.configYml.getDouble("rolls.semi_instant.velocity.x"), + plugin.configYml.getDouble("rolls.semi_instant.velocity.y"), + plugin.configYml.getDouble("rolls.semi_instant.velocity.z") + ).apply { + this.x += NumberUtils.randFloat(-randomness, randomness) + this.y += NumberUtils.randFloat(-randomness, randomness) + this.z += NumberUtils.randFloat(-randomness, randomness) + } + + private lateinit var item: Item + + override fun roll() { + val world = location.world!! + + item = world.dropItem(location, reward.getDisplay(player, crate)) + item.pickupDelay = Int.MAX_VALUE + item.isCustomNameVisible = true + item.customName = reward.displayName + + player.closeInventory() + + item.velocity = velocity + } + + override fun tick(tick: Int) { + // No tick. + } + + override fun shouldContinueTicking(tick: Int): Boolean { + return false + } + + override fun onFinish() { + plugin.scheduler.runLater(itemLifespan.toLong()) { + item.remove() + } + } + + object Factory : RollFactory("semi_instant") { + override fun create(options: RollOptions): RollSemiInstant = + RollSemiInstant( + options.reward, + options.crate, + options.plugin, + options.player, + options.location, + options.isReroll + ) + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/roll/Rolls.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/roll/Rolls.kt index c5b3dbe..09d12ce 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/roll/Rolls.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/roll/Rolls.kt @@ -12,6 +12,7 @@ object Rolls { val ENCIRCLE: RollFactory<*> = RollEncircle.Factory val QUICK: RollFactory<*> = RollQuick.Factory val INSTANT: RollFactory<*> = RollInstant.Factory + val SEMI_INSTANT: RollFactory<*> = RollSemiInstant.Factory /** * Get roll factory matching id. diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 3db1099..8e641f5 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -100,4 +100,11 @@ rolls: quick: height: 1.5 rise-velocity: 0.05 - suspend: 10 \ No newline at end of file + suspend: 10 + semi_instant: + velocity: + randomness: 0.2 + x: 0 + y: 1 + z: 0 + item-lifespan: 30 \ No newline at end of file