9
0
mirror of https://github.com/Auxilor/Reforges.git synced 2025-12-21 07:59:26 +00:00

Compare commits

..

27 Commits

Author SHA1 Message Date
Auxilor
7279958cca libreforge-updater 2022-10-18 14:13:24 +01:00
Auxilor
6689c3cf23 Fixed GUI, Improved _example.yml 2022-10-18 14:02:09 +01:00
Auxilor
df8357ac61 libreforge-updater 2022-10-16 23:26:48 +01:00
Auxilor
aa0f06092e libreforge-updater 2022-10-13 20:12:39 +01:00
Auxilor
19083d54b8 libreforge-updater 2022-10-10 21:04:09 +01:00
Auxilor
2a6c2941d8 libreforge-updater 2022-10-09 15:02:19 +01:00
Auxilor
757dffb08d libreforge-updater 2022-10-07 19:51:01 +01:00
Auxilor
277a0bef78 libreforge-updater 2022-10-06 12:04:08 +01:00
Auxilor
c7f8b9f97e libreforge-updater 2022-10-04 15:53:05 +01:00
Auxilor
0f97e2dfc4 Fixed reforge GUI 2022-10-04 12:33:52 +01:00
Auxilor
ae503fd646 libreforge-updater 2022-10-03 18:29:16 +01:00
Auxilor
89df16dabe libreforge-updater 2022-10-02 14:57:56 +01:00
Auxilor
c6dfa1849d libreforge-updater 2022-09-28 17:52:47 +01:00
Auxilor
fb4022dfd9 libreforge-updater 2022-09-26 18:27:29 +01:00
Auxilor
60c785717a libreforge-updater 2022-09-26 14:41:56 +01:00
Auxilor
a3810a9ff8 libreforge-updater 2022-09-26 10:51:59 +01:00
Auxilor
3498b575dc libreforge-updater 2022-09-22 17:30:19 +01:00
Auxilor
8f5668d8c4 libreforge-updater 2022-09-21 15:28:42 +01:00
Auxilor
6cde0ca092 libreforge-updater 2022-09-20 10:39:57 +01:00
Auxilor
d54e4ee8d5 libreforge-updater 2022-09-17 15:45:48 +01:00
Auxilor
65ef2a63d2 libreforge-updater 2022-09-15 12:16:42 +01:00
Auxilor
0d1ea5a7c8 libreforge-updater 2022-09-15 12:10:27 +01:00
Auxilor
7d32350eed libreforge-updater 2022-09-14 18:54:05 +01:00
Auxilor
4361ce0407 libreforge-updater 2022-09-14 15:13:49 +01:00
Auxilor
4267f5bd5d libreforge-updater 2022-09-14 15:10:16 +01:00
Auxilor
a5fc6e7436 libreforge-updater 2022-09-14 13:00:33 +01:00
Auxilor
cc5dfc0b0d libreforge-updater 2022-09-13 19:16:01 +01:00
13 changed files with 171 additions and 74 deletions

View File

@@ -44,8 +44,8 @@ allprojects {
}
dependencies {
compileOnly 'com.willfp:eco:6.38.0'
implementation 'com.willfp:libreforge:3.98.1'
compileOnly 'com.willfp:eco:6.43.0'
implementation 'com.willfp:libreforge:3.113.0'
implementation 'org.joml:joml:1.10.4'
compileOnly 'org.jetbrains:annotations:23.0.0'

View File

@@ -62,10 +62,6 @@ class ReforgesPlugin : LibReforgePlugin() {
)
}
override fun getMinimumEcoVersion(): String {
return "6.38.0"
}
companion object {
/**
* Instance of Reforges.

View File

@@ -1,10 +1,15 @@
package com.willfp.reforges.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.libreforge.LibReforgePlugin
import com.willfp.libreforge.lrcdb.CommandExport
import com.willfp.libreforge.lrcdb.CommandImport
import com.willfp.libreforge.lrcdb.ExportableConfig
import com.willfp.reforges.reforges.Reforges
import org.bukkit.command.CommandSender
class CommandReforges(plugin: EcoPlugin) : PluginCommand(plugin, "reforges", "reforges.command.reforges", false) {
class CommandReforges(plugin: LibReforgePlugin) :
PluginCommand(plugin, "reforges", "reforges.command.reforges", false) {
override fun onExecute(sender: CommandSender, args: List<String>) {
sender.sendMessage(
plugin.langYml.getMessage("invalid-command")
@@ -16,5 +21,14 @@ class CommandReforges(plugin: EcoPlugin) : PluginCommand(plugin, "reforges", "re
.addSubcommand(CommandGive(plugin))
.addSubcommand(CommandOpen(plugin))
.addSubcommand(CommandApply(plugin))
.addSubcommand(CommandImport("reforges", plugin))
.addSubcommand(CommandExport(plugin) {
Reforges.values().map {
ExportableConfig(
it.id,
it.config
)
}
})
}
}
}

View File

@@ -0,0 +1,5 @@
package com.willfp.reforges.gui
import com.willfp.reforges.util.ReforgeStatus
data class PricedReforgeStatus(val status: ReforgeStatus, val cost: Double)

View File

@@ -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,
@@ -229,8 +216,9 @@ object ReforgeGUI {
.toTypedArray()
menu = menu(plugin.configYml.getInt("gui.rows")) {
setTitle(plugin.langYml.getFormattedString("menu.title"))
title = plugin.langYml.getFormattedString("menu.title")
setMask(FillerMask(MaskItems(*maskItems), *maskPattern))
allowChangingHeldItem()
val slot = slot(
ItemStackBuilder(Material.BLACK_STAINED_GLASS_PANE)
@@ -261,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(
@@ -288,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))

View File

@@ -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)

View File

@@ -184,7 +184,6 @@ point-names: # If you have point names that look ugly (eg g_souls) then you can
use-faster-move-trigger: true # Disable if you want move trigger to detect sub-1-block movements
raytrace-distance: 80 # The distance that alt_click should check for a location
block-item-drop-place-check: true # If the block_item_drop trigger should only fire on naturally placed blocks (prevents dupes)
potions:
icon:
@@ -195,6 +194,4 @@ potions:
triggered: true
particles:
permanent: false
triggered: true
share-configs: true # If your configs are allowed to be used to gather data and improve the plugin. Nothing identifying (IP, Name, etc) is shared.
triggered: true

View File

@@ -18,6 +18,13 @@ messages:
invalid-reforge: "&cInvalid reforge!"
needs-reforge: "&cYou must specify a reforge"
cannot-transmit: "&cYou can't transmit here!"
must-specify-lrcdb-id: "&cYou must specify the ID of the config to download! Not sure what this means? Go to &alrcdb.auxilor.io"
lrcdb-import-error: "&cError importing config: &f%message%"
lrcdb-import-success: "&fImported &a%name%&f! Reload the plugin to install it"
must-specify-config-name: "&cYou must specify the config name!"
invalid-config-name: "&cInvalid config name!"
lrcdb-export-error: "&cError exporting config: &f%message%"
lrcdb-export-success: "&fExported &a%name%&f! View it on &alrcdb.auxilor.io&f, or share your config ID: &f%id%"
menu:
title: "Reforge Item"

View File

@@ -0,0 +1,19 @@
# Options for lrcdb (https://lrcdb.auxilor.io), a website to share configs
# with other server owners, so you can get more configs without making them
# yourself!
author: "Unknown Author" # The name attached to configs you export
# Options about automatically sharing configs you create
share-configs:
# If you want all your configs to automatically be publicly available,
# set this to true. This really helps out other users!
publicly: false
# If you don't want your configs to be usable to gather information about
# plugin usage or to improve the plugins in the future, disable this.
# Nothing identifying is shared.
enabled: true
# If you disable share-configs, you can still share select configs publicly
# with /ecoenchants export <config>.

View File

@@ -46,6 +46,8 @@ permissions:
reforges.command.give: true
reforges.command.apply: true
reforges.command.open: true
reforges.command.import: true
reforges.command.export: true
reforges.command.reload:
description: Allows reloading the config
@@ -65,3 +67,9 @@ permissions:
reforges.command.apply:
description: Allows the user of /reforges apply.
default: op
reforges.command.import:
description: Allows the user of /reforges import.
default: op
reforges.command.export:
description: Allows the user of /reforges export.
default: op

View File

@@ -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: []

View File

@@ -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

View File

@@ -1,4 +1,4 @@
#libreforge-updater
#Mon Sep 12 21:22:09 BST 2022
version=5.49.1
#Tue Oct 18 14:13:24 BST 2022
version=5.64.0
plugin-name=Reforges