diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectAutosmelt.kt b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectAutosmelt.kt index 1cdab1fd1..92fb1b173 100644 --- a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectAutosmelt.kt +++ b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectAutosmelt.kt @@ -1,7 +1,6 @@ package com.willfp.libreforge.effects.impl import com.willfp.eco.core.config.interfaces.Config -import com.willfp.eco.core.fast.FastItemStack import com.willfp.libreforge.NoCompileData import com.willfp.libreforge.arguments import com.willfp.libreforge.effects.Effect @@ -12,7 +11,6 @@ import com.willfp.libreforge.triggers.event.EditableBlockDropEvent import com.willfp.libreforge.triggers.event.EditableDropEvent import org.bukkit.Bukkit import org.bukkit.Material -import org.bukkit.enchantments.Enchantment import org.bukkit.entity.Player import org.bukkit.inventory.FurnaceRecipe import org.bukkit.inventory.ItemStack @@ -35,6 +33,13 @@ object EffectAutosmelt : Effect("autosmelt") { ) init { + loadRecipes() + } + + private fun loadRecipes() { + recipes.clear() + + // Load recipes from Bukkit val iterator = Bukkit.recipeIterator() while (iterator.hasNext()) { val recipe = iterator.next() @@ -45,6 +50,32 @@ object EffectAutosmelt : Effect("autosmelt") { @Suppress("DEPRECATION") recipes[recipe.input.type] = Pair(recipe.result.type, xp) } + + // Add fallback recipes for common ores if they're missing (using vanilla XP values) + addFallbackRecipe(Material.IRON_ORE, Material.IRON_INGOT, ceil(0.7f).toInt()) + addFallbackRecipe(Material.DEEPSLATE_IRON_ORE, Material.IRON_INGOT, ceil(0.7f).toInt()) + addFallbackRecipe(Material.GOLD_ORE, Material.GOLD_INGOT, ceil(1.0f).toInt()) + addFallbackRecipe(Material.DEEPSLATE_GOLD_ORE, Material.GOLD_INGOT, ceil(1.0f).toInt()) + addFallbackRecipe(Material.COPPER_ORE, Material.COPPER_INGOT, ceil(0.7f).toInt()) + addFallbackRecipe(Material.DEEPSLATE_COPPER_ORE, Material.COPPER_INGOT, ceil(0.7f).toInt()) + addFallbackRecipe(Material.COAL_ORE, Material.COAL, ceil(0.1f).toInt()) + addFallbackRecipe(Material.DEEPSLATE_COAL_ORE, Material.COAL, ceil(0.1f).toInt()) + addFallbackRecipe(Material.DIAMOND_ORE, Material.DIAMOND, ceil(1.0f).toInt()) + addFallbackRecipe(Material.DEEPSLATE_DIAMOND_ORE, Material.DIAMOND, ceil(1.0f).toInt()) + addFallbackRecipe(Material.EMERALD_ORE, Material.EMERALD, ceil(1.0f).toInt()) + addFallbackRecipe(Material.DEEPSLATE_EMERALD_ORE, Material.EMERALD, ceil(1.0f).toInt()) + addFallbackRecipe(Material.LAPIS_ORE, Material.LAPIS_LAZULI, ceil(0.2f).toInt()) + addFallbackRecipe(Material.DEEPSLATE_LAPIS_ORE, Material.LAPIS_LAZULI, ceil(0.2f).toInt()) + addFallbackRecipe(Material.REDSTONE_ORE, Material.REDSTONE, ceil(0.7f).toInt()) + addFallbackRecipe(Material.DEEPSLATE_REDSTONE_ORE, Material.REDSTONE, ceil(0.7f).toInt()) + addFallbackRecipe(Material.NETHER_GOLD_ORE, Material.GOLD_NUGGET, ceil(1.0f).toInt()) + addFallbackRecipe(Material.NETHER_QUARTZ_ORE, Material.QUARTZ, ceil(0.2f).toInt()) + } + + private fun addFallbackRecipe(input: Material, output: Material, xp: Int) { + if (!recipes.containsKey(input)) { + recipes[input] = Pair(output, xp) + } } private fun getOutput(input: Material): Pair { @@ -70,8 +101,16 @@ object EffectAutosmelt : Effect("autosmelt") { } private fun handleEvent(player: Player, event: EditableDropEvent, config: Config) { - val fortune = FastItemStack.wrap(player.inventory.itemInMainHand) - .getEnchantmentLevel(getEnchantment("fortune")!!, false) + val fortune = try { + val fortuneEnchant = getEnchantment("fortune") + if (fortuneEnchant != null) { + player.inventory.itemInMainHand.getEnchantmentLevel(fortuneEnchant) + } else { + 0 + } + } catch (_: Exception) { + 0 + } event.addModifier { var (type, xp) = getOutput(it.type) diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectDrill.kt b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectDrill.kt index 5121af822..3873dc375 100644 --- a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectDrill.kt +++ b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectDrill.kt @@ -69,7 +69,12 @@ object EffectDrill : MineBlockEffect("drill") { blocks.add(toBreak) } - player.breakBlocksSafely(blocks) + val useSetBlockBreak = config.getBool("prevent_trigger") + if (useSetBlockBreak) { + blocks.forEach { it.breakNaturally() } + } else { + player.breakBlocksSafely(blocks) + } return true } diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectMineRadius.kt b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectMineRadius.kt index a2293dea1..99d05b47f 100644 --- a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectMineRadius.kt +++ b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectMineRadius.kt @@ -83,7 +83,12 @@ object EffectMineRadius : MineBlockEffect("mine_radius") { } } - player.breakBlocksSafely(blocks) + val useSetBlockBreak = config.getBool("prevent_trigger") + if (useSetBlockBreak) { + blocks.forEach { it.breakNaturally() } + } else { + player.breakBlocksSafely(blocks) + } return true } diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectMineRadiusOneDeep.kt b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectMineRadiusOneDeep.kt index 64becf271..182a941e6 100644 --- a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectMineRadiusOneDeep.kt +++ b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectMineRadiusOneDeep.kt @@ -114,7 +114,12 @@ object EffectMineRadiusOneDeep : MineBlockEffect("mine_radius_one } } - player.breakBlocksSafely(blocks) + val useSetBlockBreak = config.getBool("prevent_trigger") + if (useSetBlockBreak) { + blocks.forEach { it.breakNaturally() } + } else { + player.breakBlocksSafely(blocks) + } return true } diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectShootArrow.kt b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectShootArrow.kt index 3cb4d89da..b695e3af0 100644 --- a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectShootArrow.kt +++ b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectShootArrow.kt @@ -1,7 +1,6 @@ package com.willfp.libreforge.effects.impl import com.willfp.eco.core.config.interfaces.Config -import com.willfp.eco.util.runExempted import com.willfp.libreforge.NoCompileData import com.willfp.libreforge.effects.Effect import com.willfp.libreforge.triggers.TriggerData @@ -20,25 +19,23 @@ object EffectShootArrow : Effect("shoot_arrow") { val velocity = data.velocity val fire = ((data.event as? EntityShootBowEvent)?.projectile?.fireTicks ?: 0) > 0 - player.runExempted { - val arrow = if (velocity == null || !config.getBool("inherit_velocity")) { - player.launchProjectile(Arrow::class.java) - } else { - player.launchProjectile(Arrow::class.java, velocity) - } - - if (config.getBool("launch-at-location") && data.location != null) { - arrow.teleportAsync(data.location) - } - - arrow.pickupStatus = AbstractArrow.PickupStatus.DISALLOWED - if (fire) { - arrow.fireTicks = Int.MAX_VALUE - } - - if (config.getBool("no_source")) { - arrow.shooter = null - } + val arrow = if (velocity == null || !config.getBool("inherit_velocity")) { + player.launchProjectile(Arrow::class.java) + } else { + player.launchProjectile(Arrow::class.java, velocity) + } + + if (config.getBool("launch-at-location") && data.location != null) { + arrow.teleportAsync(data.location) + } + + arrow.pickupStatus = AbstractArrow.PickupStatus.DISALLOWED + if (fire) { + arrow.fireTicks = Int.MAX_VALUE + } + + if (config.getBool("no_source")) { + arrow.shooter = null } return true diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectSpawnPotionCloud.kt b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectSpawnPotionCloud.kt index e45ddd92a..62a250b60 100644 --- a/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectSpawnPotionCloud.kt +++ b/core/common/src/main/kotlin/com/willfp/libreforge/effects/impl/EffectSpawnPotionCloud.kt @@ -5,6 +5,7 @@ import com.willfp.libreforge.NoCompileData import com.willfp.libreforge.arguments import com.willfp.libreforge.effects.Effect import com.willfp.libreforge.getIntFromExpression +import com.willfp.libreforge.plugin import com.willfp.libreforge.triggers.TriggerData import com.willfp.libreforge.triggers.TriggerParameter import org.bukkit.entity.AreaEffectCloud @@ -43,6 +44,12 @@ object EffectSpawnPotionCloud : Effect("spawn_potion_cloud") { cloud.source = data.player + plugin.scheduler.runLater(duration.toLong()) { + if (!cloud.isDead) { + cloud.remove() + } + } + return true } } diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/effects/templates/MineBlockEffect.kt b/core/common/src/main/kotlin/com/willfp/libreforge/effects/templates/MineBlockEffect.kt index 483077fcd..a3bb944bc 100644 --- a/core/common/src/main/kotlin/com/willfp/libreforge/effects/templates/MineBlockEffect.kt +++ b/core/common/src/main/kotlin/com/willfp/libreforge/effects/templates/MineBlockEffect.kt @@ -1,7 +1,6 @@ package com.willfp.libreforge.effects.templates import com.willfp.eco.core.config.interfaces.Config -import com.willfp.eco.util.runExempted import com.willfp.libreforge.effects.Effect import com.willfp.libreforge.plugin import com.willfp.libreforge.triggers.TriggerData @@ -26,17 +25,15 @@ abstract class MineBlockEffect(id: String) : Effect(id) { if (plugin.configYml.getBool("effects.use-setblock-break")) { blocks.forEach { it.type = Material.AIR } } else { - this.runExempted { - for (block in blocks) { - if (block.world != this.world) { - continue - } - - block.setMetadata(ignoreKey, plugin.createMetadataValue(true)) - this.breakBlock(block) - block.removeMetadata(ignoreKey, plugin) + for (block in blocks) { + if (block.world != this.world) { + continue } + + block.setMetadata(ignoreKey, plugin.createMetadataValue(true)) + this.breakBlock(block) + block.removeMetadata(ignoreKey, plugin) } } } -} +} \ No newline at end of file diff --git a/core/common/src/main/kotlin/com/willfp/libreforge/triggers/impl/TriggerAltClick.kt b/core/common/src/main/kotlin/com/willfp/libreforge/triggers/impl/TriggerAltClick.kt index e912ab310..6b2b53519 100644 --- a/core/common/src/main/kotlin/com/willfp/libreforge/triggers/impl/TriggerAltClick.kt +++ b/core/common/src/main/kotlin/com/willfp/libreforge/triggers/impl/TriggerAltClick.kt @@ -12,6 +12,7 @@ import org.bukkit.Tag import org.bukkit.entity.Entity import org.bukkit.entity.LivingEntity import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority import org.bukkit.event.block.Action import org.bukkit.event.player.PlayerInteractEvent import java.util.UUID @@ -56,7 +57,8 @@ object TriggerAltClick : Trigger("alt_click") { Material.BLAST_FURNACE, Material.BREWING_STAND, Material.DISPENSER, - Material.DROPPER + Material.DROPPER, + Material.BEDROCK ) private val preventDoubleTriggers = mutableSetOf() @@ -71,7 +73,7 @@ object TriggerAltClick : Trigger("alt_click") { BLOCK_BLACKLIST.addAll(Tag.SHULKER_BOXES.values) } - @EventHandler + @EventHandler(priority = EventPriority.LOW) fun handle(event: PlayerInteractEvent) { val player = event.player diff --git a/core/common/src/main/resources/chains.yml b/core/common/src/main/resources/chains.yml index 05c75c4bf..4c89fa40c 100644 --- a/core/common/src/main/resources/chains.yml +++ b/core/common/src/main/resources/chains.yml @@ -6,8 +6,8 @@ chains: - id: shoot_arrow args: repeat: - times: "2 * %arrows%" - start: "-11 * %arrows%" + times: 3 + start: -22 increment: 22 inherit_velocity: true mutators: