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