mirror of
https://github.com/Auxilor/Reforges.git
synced 2025-12-24 09:29:23 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f23b22a05 | ||
|
|
7279958cca | ||
|
|
6689c3cf23 |
@@ -45,7 +45,7 @@ allprojects {
|
||||
|
||||
dependencies {
|
||||
compileOnly 'com.willfp:eco:6.43.0'
|
||||
implementation 'com.willfp:libreforge:3.112.1'
|
||||
implementation 'com.willfp:libreforge:3.114.0'
|
||||
implementation 'org.joml:joml:1.10.4'
|
||||
|
||||
compileOnly 'org.jetbrains:annotations:23.0.0'
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.willfp.reforges.gui
|
||||
|
||||
import com.willfp.reforges.util.ReforgeStatus
|
||||
|
||||
data class PricedReforgeStatus(val status: ReforgeStatus, val cost: Double)
|
||||
@@ -4,21 +4,21 @@ import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.config.updating.ConfigUpdater
|
||||
import com.willfp.eco.core.drops.DropQueue
|
||||
import com.willfp.eco.core.fast.fast
|
||||
import com.willfp.eco.core.gui.captiveSlot
|
||||
import com.willfp.eco.core.gui.menu
|
||||
import com.willfp.eco.core.gui.menu.Menu
|
||||
import com.willfp.eco.core.gui.slot
|
||||
import com.willfp.eco.core.gui.slot.FillerMask
|
||||
import com.willfp.eco.core.gui.slot.MaskItems
|
||||
import com.willfp.eco.core.gui.slot.Slot
|
||||
import com.willfp.eco.core.integrations.economy.EconomyManager
|
||||
import com.willfp.eco.core.items.Items
|
||||
import com.willfp.eco.core.items.builder.ItemStackBuilder
|
||||
import com.willfp.eco.core.items.isEmpty
|
||||
import com.willfp.eco.util.NumberUtils
|
||||
import com.willfp.reforges.reforges.PriceMultipliers
|
||||
import com.willfp.reforges.reforges.Reforge
|
||||
import com.willfp.reforges.reforges.ReforgeTarget
|
||||
import com.willfp.reforges.reforges.ReforgeTargets
|
||||
import com.willfp.reforges.reforges.util.MetadatedReforgeStatus
|
||||
import com.willfp.reforges.util.ReforgeStatus
|
||||
import com.willfp.reforges.util.getRandomReforge
|
||||
import com.willfp.reforges.util.reforge
|
||||
@@ -28,40 +28,28 @@ import org.bukkit.Material
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import java.util.*
|
||||
import java.util.Locale
|
||||
import kotlin.math.pow
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
object ReforgeGUI {
|
||||
private lateinit var menu: Menu
|
||||
|
||||
private fun Menu.getReforgeStatus(player: Player): MetadatedReforgeStatus {
|
||||
val captive = this.getCaptiveItems(player)
|
||||
val item = captive.getOrNull(0)
|
||||
val stone = captive.getOrNull(1)
|
||||
private fun Menu.getItemToReforge(player: Player) = this.getState<ItemStack>(
|
||||
player,
|
||||
"item_to_reforge"
|
||||
)
|
||||
|
||||
val targets = mutableListOf<ReforgeTarget>()
|
||||
private fun Menu.getReforgeStone(player: Player) = this.getState<ItemStack>(
|
||||
player,
|
||||
"reforge_stone"
|
||||
)
|
||||
|
||||
var cost = 0.0
|
||||
val status = if (item == null || item.type == Material.AIR) {
|
||||
ReforgeStatus.NO_ITEM
|
||||
} else {
|
||||
targets.addAll(ReforgeTargets.getForItem(item))
|
||||
if (targets.isEmpty()) {
|
||||
ReforgeStatus.INVALID_ITEM
|
||||
} else {
|
||||
val reforgeStone = stone.reforgeStone
|
||||
if (reforgeStone != null && reforgeStone.canBeAppliedTo(item)) {
|
||||
cost = reforgeStone.stonePrice.toDouble()
|
||||
ReforgeStatus.ALLOW_STONE
|
||||
} else {
|
||||
ReforgeStatus.ALLOW
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return MetadatedReforgeStatus(status, cost)
|
||||
}
|
||||
private fun Menu.getReforgeStatus(player: Player): PricedReforgeStatus =
|
||||
this.getState<PricedReforgeStatus>(player, "reforge_status") ?: PricedReforgeStatus(
|
||||
ReforgeStatus.NO_ITEM,
|
||||
0.0
|
||||
)
|
||||
|
||||
@JvmStatic
|
||||
fun open(player: Player) {
|
||||
@@ -77,7 +65,7 @@ object ReforgeGUI {
|
||||
|
||||
val cost = when {
|
||||
status == ReforgeStatus.ALLOW || (status == ReforgeStatus.ALLOW_STONE && specialCost < 0) -> {
|
||||
val amountOfReforges = menu.getCaptiveItems(player)[0].timesReforged
|
||||
val amountOfReforges = menu.getItemToReforge(player)?.timesReforged ?: 0
|
||||
|
||||
plugin.configYml.getDouble("reforge.cost") *
|
||||
plugin.configYml.getDouble("reforge.cost-exponent").pow(amountOfReforges) *
|
||||
@@ -91,8 +79,8 @@ object ReforgeGUI {
|
||||
|
||||
var xpCost = plugin.configYml.getInt("reforge.xp-cost")
|
||||
if (status == ReforgeStatus.ALLOW) {
|
||||
val item = menu.getCaptiveItems(player)[0]
|
||||
val reforges = item.timesReforged
|
||||
val item = menu.getItemToReforge(player)
|
||||
val reforges = item?.timesReforged ?: 0
|
||||
xpCost *= PriceMultipliers.getForPlayer(player).multiplier.toInt()
|
||||
xpCost *= plugin.configYml.getDouble("reforge.cost-exponent").pow(reforges.toDouble()).toInt()
|
||||
}
|
||||
@@ -106,7 +94,7 @@ object ReforgeGUI {
|
||||
.replace("%xpcost%", NumberUtils.format(xpCost.toDouble()))
|
||||
.replace(
|
||||
"%stone%",
|
||||
menu.getCaptiveItems(player).getOrNull(1).reforgeStone?.name ?: ""
|
||||
menu.getReforgeStone(player)?.reforgeStone?.name ?: ""
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -114,9 +102,8 @@ object ReforgeGUI {
|
||||
|
||||
onLeftClick { event, _, menu ->
|
||||
val player = event.whoClicked as Player
|
||||
val captive = menu.getCaptiveItems(player)
|
||||
|
||||
val item = captive.getOrNull(0) ?: return@onLeftClick
|
||||
val item = menu.getItemToReforge(player) ?: return@onLeftClick
|
||||
val currentReforge = item.reforge
|
||||
|
||||
val targets = ReforgeTargets.getForItem(item)
|
||||
@@ -124,7 +111,7 @@ object ReforgeGUI {
|
||||
|
||||
var usedStone = false
|
||||
|
||||
val stoneInMenu = menu.getCaptiveItems(player).getOrNull(1).reforgeStone
|
||||
val stoneInMenu = menu.getReforgeStone(player)?.reforgeStone
|
||||
|
||||
val reforge = if (stoneInMenu != null && stoneInMenu.canBeAppliedTo(item)) {
|
||||
usedStone = true
|
||||
@@ -198,9 +185,9 @@ object ReforgeGUI {
|
||||
item.reforge = reforge
|
||||
|
||||
if (usedStone) {
|
||||
val stone = menu.getCaptiveItems(player)[1]
|
||||
stone.itemMeta = null
|
||||
stone.amount = 0
|
||||
val stone = menu.getReforgeStone(player)
|
||||
stone?.itemMeta = null
|
||||
stone?.amount = 0
|
||||
if (plugin.configYml.getBool("gui.stone-sound.enabled")) {
|
||||
player.playSound(
|
||||
player.location,
|
||||
@@ -262,13 +249,13 @@ object ReforgeGUI {
|
||||
setSlot(
|
||||
plugin.configYml.getInt("gui.item-slot.row"),
|
||||
plugin.configYml.getInt("gui.item-slot.column"),
|
||||
Slot.builder().setCaptive().build()
|
||||
captiveSlot()
|
||||
)
|
||||
|
||||
setSlot(
|
||||
plugin.configYml.getInt("gui.stone-slot.row"),
|
||||
plugin.configYml.getInt("gui.stone-slot.column"),
|
||||
Slot.builder().setCaptive().build()
|
||||
captiveSlot()
|
||||
)
|
||||
|
||||
setSlot(
|
||||
@@ -289,6 +276,50 @@ object ReforgeGUI {
|
||||
}
|
||||
)
|
||||
|
||||
onRender { player, menu ->
|
||||
menu.addState(
|
||||
player, "item_to_reforge", menu.getCaptiveItem(
|
||||
player,
|
||||
plugin.configYml.getInt("gui.item-slot.row"),
|
||||
plugin.configYml.getInt("gui.item-slot.column")
|
||||
)
|
||||
)
|
||||
|
||||
menu.addState(
|
||||
player, "reforge_stone", menu.getCaptiveItem(
|
||||
player,
|
||||
plugin.configYml.getInt("gui.stone-slot.row"),
|
||||
plugin.configYml.getInt("gui.stone-slot.column")
|
||||
)
|
||||
)
|
||||
|
||||
val item = menu.getItemToReforge(player)
|
||||
|
||||
val stone = menu.getReforgeStone(player)
|
||||
|
||||
val targets = mutableListOf<ReforgeTarget>()
|
||||
|
||||
var cost = 0.0
|
||||
val status = if (item.isEmpty) {
|
||||
ReforgeStatus.NO_ITEM
|
||||
} else {
|
||||
targets.addAll(ReforgeTargets.getForItem(item!!))
|
||||
if (targets.isEmpty()) {
|
||||
ReforgeStatus.INVALID_ITEM
|
||||
} else {
|
||||
val reforgeStone = stone.reforgeStone
|
||||
if (reforgeStone != null && reforgeStone.canBeAppliedTo(item)) {
|
||||
cost = reforgeStone.stonePrice.toDouble()
|
||||
ReforgeStatus.ALLOW_STONE
|
||||
} else {
|
||||
ReforgeStatus.ALLOW
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
menu.addState(player, "reforge_status", PricedReforgeStatus(status, cost))
|
||||
}
|
||||
|
||||
onClose { event, menu ->
|
||||
DropQueue(event.player as Player)
|
||||
.addItems(menu.getCaptiveItems(event.player as Player))
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
package com.willfp.reforges.reforges.util
|
||||
|
||||
import com.willfp.reforges.util.ReforgeStatus
|
||||
|
||||
data class MetadatedReforgeStatus(val status: ReforgeStatus, val cost: Double)
|
||||
@@ -4,25 +4,48 @@
|
||||
# including in subfolders if you want to organize your reforge configs
|
||||
# _example.yml is not loaded.
|
||||
|
||||
name: "<gradient:#4776E6>Acute</gradient:#8E54E9>"
|
||||
description:
|
||||
- "&a+2% &fTriple Damage Chance"
|
||||
targets:
|
||||
- axe
|
||||
name: "<gradient:#AAFFA9>Dynamic</gradient:#11FFBD>" # The display name for the reforge
|
||||
description: # The lore to add to an item with this reforge:
|
||||
- "&a+5% &fDamage"
|
||||
- "&a+10% &fCrit Damage"
|
||||
targets: # The targets that this reforge can be applied to
|
||||
- melee
|
||||
|
||||
# Options for the reforge stone
|
||||
stone:
|
||||
enabled: false
|
||||
name: ''
|
||||
lore: []
|
||||
item: ''
|
||||
craftable: false
|
||||
recipe: []
|
||||
enabled: true # If this reforge requires the use of a reforge stone
|
||||
name: "<gradient:#AAFFA9>Dynamic</gradient:#11FFBD>&f Reforge Stone" # The display name of the stone
|
||||
lore: # The lore of the stone
|
||||
- "&7Place on the right of the"
|
||||
- "&7reforge menu to apply the"
|
||||
- "<gradient:#AAFFA9>Dynamic</gradient:#11FFBD>&7 reforge!"
|
||||
item: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmM0YTY1YzY4OWIyZDM2NDA5MTAwYTYwYzJhYjhkM2QwYTY3Y2U5NGVlYTNjMWY3YWM5NzRmZDg5MzU2OGI1ZCJ9fX0=
|
||||
craftable: true # If the reforge stone should be craftable
|
||||
price: 100000 # (Optional) The price required to apply this reforge, overrides the default reforge price
|
||||
recipe: # The recipe for the stone to have
|
||||
- air
|
||||
- ecoitems:blank_reforge_stone ? air
|
||||
- air
|
||||
- iron_block
|
||||
- daylight_sensor
|
||||
- iron_block
|
||||
- air
|
||||
- phantom_membrane
|
||||
- air
|
||||
|
||||
# The effects of the reforge (i.e. the functionality)
|
||||
# See here: https://plugins.auxilor.io/effects/configuring-an-effect
|
||||
effects:
|
||||
- id: damage_multiplier
|
||||
args:
|
||||
multiplier: 3
|
||||
chance: 2
|
||||
multiplier: 1.05
|
||||
triggers:
|
||||
- melee_attack
|
||||
- id: crit_multiplier
|
||||
args:
|
||||
multiplier: 1.1
|
||||
triggers:
|
||||
- melee_attack
|
||||
|
||||
# The conditions required to use the reforge
|
||||
conditions: []
|
||||
@@ -13,6 +13,7 @@ stone:
|
||||
- "<gradient:#AAFFA9>Dynamic</gradient:#11FFBD>&7 reforge!"
|
||||
item: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmM0YTY1YzY4OWIyZDM2NDA5MTAwYTYwYzJhYjhkM2QwYTY3Y2U5NGVlYTNjMWY3YWM5NzRmZDg5MzU2OGI1ZCJ9fX0=
|
||||
craftable: true
|
||||
price: 100000
|
||||
recipe:
|
||||
- air
|
||||
- ecoitems:blank_reforge_stone ? air
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#libreforge-updater
|
||||
#Sun Oct 16 23:26:48 BST 2022
|
||||
version=5.63.1
|
||||
#Wed Oct 19 20:43:41 BST 2022
|
||||
version=5.65.0
|
||||
plugin-name=Reforges
|
||||
|
||||
Reference in New Issue
Block a user