mirror of
https://github.com/Auxilor/Reforges.git
synced 2025-12-19 15:09:23 +00:00
Compare commits
132 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
24f45a729f | ||
|
|
2bd9f98828 | ||
|
|
2eb1d079b9 | ||
|
|
772d0b798b | ||
|
|
c69804cae4 | ||
|
|
0cd50135a1 | ||
|
|
ae10d11a0d | ||
|
|
a86c02da3e | ||
|
|
be9fbf9d56 | ||
|
|
19856fe31b | ||
|
|
4bcfdb17c3 | ||
|
|
dd42a42c0f | ||
|
|
bc33fb9e52 | ||
|
|
b3713a2fc4 | ||
|
|
7338ea3259 | ||
|
|
c24567bdd9 | ||
|
|
14ac6a7d7c | ||
|
|
d82eabc304 | ||
|
|
53005f6f61 | ||
|
|
445d7b6a11 | ||
|
|
8bcaf8f0b2 | ||
|
|
c74b3c0e59 | ||
|
|
e23ec1f90c | ||
|
|
e449268b3a | ||
|
|
6b31417bab | ||
|
|
58d5b26848 | ||
|
|
b2a9c250c7 | ||
|
|
371eb4e6c0 | ||
|
|
9424cc0475 | ||
|
|
c9230bd61f | ||
|
|
c3c55ad862 | ||
|
|
533c86b7fd | ||
|
|
214f693a16 | ||
|
|
015042c754 | ||
|
|
95ab511716 | ||
|
|
7f02a89b50 | ||
|
|
60002bb33c | ||
|
|
520a783b95 | ||
|
|
24eb69398f | ||
|
|
2251227fd8 | ||
|
|
6488aac611 | ||
|
|
5ef604c464 | ||
|
|
063dc05b4e | ||
|
|
b8bd4375a9 | ||
|
|
51ddca9b85 | ||
|
|
0ecdc49a13 | ||
|
|
61676fe568 | ||
|
|
56e0c05043 | ||
|
|
791161fa3a | ||
|
|
ce332651b2 | ||
|
|
4eedabd5cb | ||
|
|
91daaf053f | ||
|
|
66bbcb9d87 | ||
|
|
504998a78d | ||
|
|
18a5abbc57 | ||
|
|
b3ec0a487b | ||
|
|
e40d4f666f | ||
|
|
37083c9980 | ||
|
|
f7bee746e2 | ||
|
|
7fb5bfc895 | ||
|
|
26765564ea | ||
|
|
2ba6e6f9f3 | ||
|
|
ef8c85c722 | ||
|
|
0889efd92c | ||
|
|
5cd66bc797 | ||
|
|
332356fc50 | ||
|
|
f8ca89e607 | ||
|
|
94c4d354db | ||
|
|
0a7ef0b65a | ||
|
|
1df223c741 | ||
|
|
db5c627f4d | ||
|
|
f0a6a4c9b8 | ||
|
|
d9296cca53 | ||
|
|
534c8a6018 | ||
|
|
5b48c4f159 | ||
|
|
cc98189027 | ||
|
|
8fa7d145ac | ||
|
|
a89a6503ad | ||
|
|
1c10a2fbe4 | ||
|
|
7bc6afdf43 | ||
|
|
3725e55f43 | ||
|
|
3cbc54429e | ||
|
|
068b9b1cdb | ||
|
|
43cfa1ab9f | ||
|
|
d68c7b1f43 | ||
|
|
1a14a11aa4 | ||
|
|
ff3af6b412 | ||
|
|
7bd43e6506 | ||
|
|
89c9935801 | ||
|
|
e15d6be301 | ||
|
|
eaba6c24a8 | ||
|
|
d75a301cfa | ||
|
|
319afce452 | ||
|
|
8932593683 | ||
|
|
3fa95a5576 | ||
|
|
b5ec89f5d4 | ||
|
|
508c1e1d66 | ||
|
|
d921254584 | ||
|
|
2160fb5acc | ||
|
|
536b1d9dbf | ||
|
|
cef4abcfad | ||
|
|
7414ce787a | ||
|
|
d90fcc0d1a | ||
|
|
84e02044e1 | ||
|
|
19097fb7b5 | ||
|
|
8d86487eb6 | ||
|
|
32bf727816 | ||
|
|
023ae3d10e | ||
|
|
070b95eb94 | ||
|
|
a65f5add37 | ||
|
|
31a7b0f62f | ||
|
|
b11e34e823 | ||
|
|
cabae5c469 | ||
|
|
c930b89c8d | ||
|
|
9a6945c824 | ||
|
|
10a2e9ca7f | ||
|
|
22b18f7b24 | ||
|
|
a09444f3c0 | ||
|
|
df7e85e27b | ||
|
|
35ceb4bc68 | ||
|
|
89ecd11695 | ||
|
|
7b3b287f71 | ||
|
|
3f55d5a141 | ||
|
|
d2a925ec3e | ||
|
|
4e3128840f | ||
|
|
4074531b01 | ||
|
|
f506b10552 | ||
|
|
69e0ed176d | ||
|
|
31464a7ff7 | ||
|
|
182b4a354a | ||
|
|
d9315dfda9 | ||
|
|
4270804b1b |
4
.github/workflows/publish-release.yml
vendored
4
.github/workflows/publish-release.yml
vendored
@@ -15,11 +15,11 @@ jobs:
|
||||
- name: Checkout latest code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up JDK 17
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
java-version: 21
|
||||
|
||||
- name: Change wrapper permissions
|
||||
run: chmod +x ./gradlew
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
|
||||
plugins {
|
||||
java
|
||||
`java-library`
|
||||
`maven-publish`
|
||||
kotlin("jvm") version "1.7.10"
|
||||
id("com.github.johnrengelman.shadow") version "8.0.0"
|
||||
kotlin("jvm") version "2.1.0"
|
||||
id("com.gradleup.shadow") version "8.3.0"
|
||||
id("com.willfp.libreforge-gradle-plugin") version "1.0.0"
|
||||
}
|
||||
|
||||
@@ -25,7 +27,7 @@ allprojects {
|
||||
apply(plugin = "java")
|
||||
apply(plugin = "kotlin")
|
||||
apply(plugin = "maven-publish")
|
||||
apply(plugin = "com.github.johnrengelman.shadow")
|
||||
apply(plugin = "com.gradleup.shadow")
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
@@ -37,14 +39,14 @@ allprojects {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly("com.willfp:eco:6.56.0")
|
||||
compileOnly("com.willfp:eco:6.73.0")
|
||||
compileOnly("org.jetbrains:annotations:23.0.0")
|
||||
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:1.7.10")
|
||||
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:2.1.0")
|
||||
}
|
||||
|
||||
java {
|
||||
withSourcesJar()
|
||||
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
||||
}
|
||||
|
||||
tasks {
|
||||
@@ -54,8 +56,8 @@ allprojects {
|
||||
}
|
||||
|
||||
compileKotlin {
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
compilerOptions {
|
||||
jvmTarget.set(JvmTarget.JVM_21)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ group = "com.willfp"
|
||||
version = rootProject.version
|
||||
|
||||
dependencies {
|
||||
compileOnly("io.papermc.paper:paper-api:1.19.3-R0.1-SNAPSHOT")
|
||||
compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
|
||||
compileOnly("com.willfp:Talismans:6.0.0")
|
||||
compileOnly("com.github.ben-manes.caffeine:caffeine:3.0.2")
|
||||
|
||||
|
||||
@@ -2,24 +2,26 @@ package com.willfp.reforges
|
||||
|
||||
import com.willfp.eco.core.command.impl.PluginCommand
|
||||
import com.willfp.eco.core.display.DisplayModule
|
||||
import com.willfp.eco.core.integrations.IntegrationLoader
|
||||
import com.willfp.eco.core.items.Items
|
||||
import com.willfp.libreforge.conditions.Conditions
|
||||
import com.willfp.libreforge.loader.LibreforgePlugin
|
||||
import com.willfp.libreforge.loader.configs.ConfigCategory
|
||||
import com.willfp.libreforge.registerHolderProvider
|
||||
import com.willfp.libreforge.registerPlayerRefreshFunction
|
||||
import com.willfp.reforges.commands.CommandReforge
|
||||
import com.willfp.reforges.commands.CommandReforges
|
||||
import com.willfp.reforges.config.TargetYml
|
||||
import com.willfp.reforges.display.ReforgesDisplay
|
||||
import com.willfp.reforges.integrations.talismans.TalismansIntegration
|
||||
import com.willfp.reforges.gui.ReforgeGUI
|
||||
import com.willfp.reforges.libreforge.ConditionHasReforge
|
||||
import com.willfp.reforges.reforges.PriceMultipliers
|
||||
import com.willfp.reforges.reforges.ReforgeFinder
|
||||
import com.willfp.reforges.reforges.ReforgeStoneTag
|
||||
import com.willfp.reforges.reforges.ReforgeTargets
|
||||
import com.willfp.reforges.reforges.ReforgedTag
|
||||
import com.willfp.reforges.reforges.Reforges
|
||||
import com.willfp.reforges.reforges.util.ReforgeArgParser
|
||||
import com.willfp.reforges.util.AntiPlaceListener
|
||||
import com.willfp.reforges.util.DiscoverRecipeListener
|
||||
import com.willfp.reforges.util.ReforgeLookup
|
||||
import org.bukkit.event.Listener
|
||||
|
||||
class ReforgesPlugin : LibreforgePlugin() {
|
||||
@@ -41,8 +43,16 @@ class ReforgesPlugin : LibreforgePlugin() {
|
||||
|
||||
Items.registerArgParser(ReforgeArgParser)
|
||||
|
||||
registerHolderProvider { ReforgeLookup.provideReforges(it) }
|
||||
registerPlayerRefreshFunction { ReforgeLookup.clearCache(it) }
|
||||
Items.registerTag(ReforgedTag(this))
|
||||
Items.registerTag(ReforgeStoneTag(this))
|
||||
|
||||
registerHolderProvider(ReforgeFinder.toHolderProvider())
|
||||
}
|
||||
|
||||
override fun handleReload() {
|
||||
ReforgeTargets.update(this)
|
||||
PriceMultipliers.update(this)
|
||||
ReforgeGUI.update(this)
|
||||
}
|
||||
|
||||
override fun loadListeners(): List<Listener> {
|
||||
@@ -59,13 +69,9 @@ class ReforgesPlugin : LibreforgePlugin() {
|
||||
)
|
||||
}
|
||||
|
||||
override fun createDisplayModule(): DisplayModule {
|
||||
return ReforgesDisplay(this)
|
||||
}
|
||||
|
||||
override fun loadIntegrationLoaders(): List<IntegrationLoader> {
|
||||
override fun loadDisplayModules(): List<DisplayModule> {
|
||||
return listOf(
|
||||
IntegrationLoader("Talismans") { TalismansIntegration.registerProvider() }
|
||||
ReforgesDisplay(this)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ class CommandApply(
|
||||
if (sender is Player) {
|
||||
val item = sender.inventory.itemInMainHand
|
||||
item.reforge = reforge
|
||||
reforge.runOnReforgeEffects(sender, item)
|
||||
sender.sendMessage(
|
||||
plugin.langYml.getMessage("applied-reforge")
|
||||
.replace("%reforge%", reforge.name)
|
||||
@@ -45,7 +46,10 @@ class CommandApply(
|
||||
return
|
||||
}
|
||||
|
||||
player.inventory.itemInMainHand.reforge = reforge
|
||||
val item = player.inventory.itemInMainHand
|
||||
|
||||
item.reforge = reforge
|
||||
reforge.runOnReforgeEffects(player, item)
|
||||
sender.sendMessage(
|
||||
plugin.langYml.getMessage("applied-reforge")
|
||||
.replace("%reforge%", reforge.name)
|
||||
|
||||
@@ -5,8 +5,10 @@ import com.willfp.eco.core.config.ConfigType
|
||||
import com.willfp.eco.core.config.StaticBaseConfig
|
||||
import com.willfp.eco.core.items.Items
|
||||
import com.willfp.eco.core.items.TestableItem
|
||||
import com.willfp.reforges.reforges.ReforgeTarget
|
||||
import java.util.*
|
||||
import com.willfp.libreforge.slot.SlotType
|
||||
import com.willfp.libreforge.slot.SlotTypes
|
||||
import com.willfp.libreforge.slot.impl.SlotTypeAny
|
||||
import java.util.Locale
|
||||
import java.util.function.Consumer
|
||||
|
||||
class TargetYml(plugin: EcoPlugin) : StaticBaseConfig("target", plugin, ConfigType.YAML) {
|
||||
@@ -32,12 +34,12 @@ class TargetYml(plugin: EcoPlugin) : StaticBaseConfig("target", plugin, ConfigTy
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all materials from a target name.
|
||||
* Get a [SlotType] for the target.
|
||||
*
|
||||
* @param target The name of the target.
|
||||
* @return All materials.
|
||||
* @return The [SlotType].
|
||||
*/
|
||||
fun getSlot(target: String): ReforgeTarget.Slot {
|
||||
return ReforgeTarget.Slot.valueOf(this.getString("$target.slot").uppercase(Locale.getDefault()))
|
||||
fun getSlot(target: String): SlotType {
|
||||
return SlotTypes[this.getString("$target.slot")] ?: SlotTypeAny
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.willfp.eco.core.display.DisplayPriority
|
||||
import com.willfp.eco.core.display.DisplayProperties
|
||||
import com.willfp.eco.core.fast.FastItemStack
|
||||
import com.willfp.eco.core.fast.fast
|
||||
import com.willfp.eco.core.placeholder.context.placeholderContext
|
||||
import com.willfp.eco.util.SkullUtils
|
||||
import com.willfp.eco.util.StringUtils
|
||||
import com.willfp.eco.util.formatEco
|
||||
@@ -47,12 +48,15 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin
|
||||
|
||||
val reforge = fast.persistentDataContainer.reforge
|
||||
|
||||
val context = placeholderContext(
|
||||
player = player,
|
||||
item = itemStack
|
||||
)
|
||||
|
||||
if (reforge == null && stone == null) {
|
||||
if (plugin.configYml.getBool("reforge.show-reforgable")) {
|
||||
if (plugin.configYml.getBool("reforge.no-reforgable-in-gui")) {
|
||||
if (props.inGui) {
|
||||
return
|
||||
}
|
||||
if (props.inGui) {
|
||||
return
|
||||
}
|
||||
|
||||
val addLore: MutableList<String> = ArrayList()
|
||||
@@ -91,10 +95,11 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin
|
||||
for (string in plugin.configYml.getFormattedStrings("reforge.reforged-prefix")) {
|
||||
addLore.add(Display.PREFIX + string.replace("%reforge%", reforge.name))
|
||||
}
|
||||
addLore.addAll(reforge.description)
|
||||
addLore.addAll(reforge.description.formatEco(context))
|
||||
addLore.replaceAll { "${Display.PREFIX}$it" }
|
||||
lore.addAll(addLore)
|
||||
}
|
||||
|
||||
if (plugin.configYml.getBool("reforge.display-in-name")) {
|
||||
val displayName = fastItemStack.displayNameComponent
|
||||
|
||||
@@ -115,7 +120,7 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin
|
||||
if (player != null) {
|
||||
val provided = ItemProvidedHolder(reforge, itemStack)
|
||||
|
||||
val lines = reforge.conditions.getNotMetLines(player, provided).map { Display.PREFIX + it }
|
||||
val lines = provided.getNotMetLines(player).map { Display.PREFIX + it }
|
||||
|
||||
if (lines.isNotEmpty()) {
|
||||
lore.add(Display.PREFIX)
|
||||
|
||||
@@ -2,7 +2,6 @@ package com.willfp.reforges.gui
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.config.emptyConfig
|
||||
import com.willfp.eco.core.config.updating.ConfigUpdater
|
||||
import com.willfp.eco.core.drops.DropQueue
|
||||
import com.willfp.eco.core.gui.captiveSlot
|
||||
import com.willfp.eco.core.gui.menu
|
||||
@@ -24,7 +23,6 @@ import com.willfp.ecomponent.CaptiveItem
|
||||
import com.willfp.ecomponent.menuStateVar
|
||||
import com.willfp.ecomponent.setSlot
|
||||
import com.willfp.libreforge.LibreforgeSpigotPlugin
|
||||
import com.willfp.reforges.reforges.PriceMultipliers
|
||||
import com.willfp.reforges.reforges.PriceMultipliers.reforgePriceMultiplier
|
||||
import com.willfp.reforges.reforges.Reforge
|
||||
import com.willfp.reforges.reforges.ReforgeTarget
|
||||
@@ -150,6 +148,8 @@ private class ActivatorSlot(
|
||||
item.timesReforged++
|
||||
item.reforge = reforge
|
||||
|
||||
reforge.runOnReforgeEffects(player, item)
|
||||
|
||||
if (usedStone) {
|
||||
val stone = reforgeStone[player]
|
||||
stone?.amount = stone?.amount?.minus(1) ?: 0
|
||||
@@ -190,14 +190,11 @@ object ReforgeGUI {
|
||||
|
||||
private lateinit var defaultPrice: ConfiguredPrice
|
||||
|
||||
@JvmStatic
|
||||
fun open(player: Player) {
|
||||
menu.open(player)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@ConfigUpdater
|
||||
fun update(plugin: EcoPlugin) {
|
||||
internal fun update(plugin: EcoPlugin) {
|
||||
itemToReforge = CaptiveItem()
|
||||
reforgeStone = CaptiveItem()
|
||||
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
package com.willfp.reforges.integrations.talismans
|
||||
|
||||
import com.willfp.eco.core.integrations.Integration
|
||||
import com.willfp.reforges.reforges.ReforgeTarget
|
||||
import com.willfp.reforges.util.ReforgeLookup
|
||||
import com.willfp.talismans.talismans.util.TalismanChecks
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
object TalismansIntegration : Integration {
|
||||
@JvmStatic
|
||||
fun registerProvider() {
|
||||
ReforgeLookup.registerProvider { player ->
|
||||
val provided = mutableMapOf<ItemStack?, ReforgeTarget.Slot?>()
|
||||
for (itemStack in TalismanChecks.getTalismanItemsOnPlayer(player)) {
|
||||
provided[itemStack] = ReforgeTarget.Slot.ANY
|
||||
}
|
||||
|
||||
provided
|
||||
}
|
||||
}
|
||||
|
||||
override fun getPluginName(): String {
|
||||
return "Talismans"
|
||||
}
|
||||
}
|
||||
@@ -2,11 +2,15 @@ package com.willfp.reforges.libreforge
|
||||
|
||||
import com.willfp.eco.core.config.interfaces.Config
|
||||
import com.willfp.eco.util.containsIgnoreCase
|
||||
import com.willfp.libreforge.Dispatcher
|
||||
import com.willfp.libreforge.NoCompileData
|
||||
import com.willfp.libreforge.ProvidedHolder
|
||||
import com.willfp.libreforge.arguments
|
||||
import com.willfp.libreforge.conditions.Condition
|
||||
import com.willfp.libreforge.get
|
||||
import com.willfp.libreforge.getHoldersOfType
|
||||
import com.willfp.libreforge.toDispatcher
|
||||
import com.willfp.reforges.reforges.Reforge
|
||||
import com.willfp.reforges.util.ReforgeLookup
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
object ConditionHasReforge : Condition<NoCompileData>("has_reforge") {
|
||||
@@ -14,10 +18,15 @@ object ConditionHasReforge : Condition<NoCompileData>("has_reforge") {
|
||||
require("reforge", "You must specify the reforge!")
|
||||
}
|
||||
|
||||
override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean {
|
||||
return ReforgeLookup.provideReforges(player)
|
||||
.map { it.holder }
|
||||
.filterIsInstance<Reforge>()
|
||||
override fun isMet(
|
||||
dispatcher: Dispatcher<*>,
|
||||
config: Config,
|
||||
holder: ProvidedHolder,
|
||||
compileData: NoCompileData
|
||||
): Boolean {
|
||||
val player = dispatcher.get<Player>() ?: return false
|
||||
|
||||
return player.toDispatcher().getHoldersOfType<Reforge>()
|
||||
.map { it.id.key }
|
||||
.containsIgnoreCase(config.getString("reforge"))
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.willfp.reforges.reforges
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.config.updating.ConfigUpdater
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
@Suppress("UNUSED")
|
||||
@@ -9,13 +8,6 @@ object PriceMultipliers {
|
||||
private val REGISTRY = mutableListOf<PriceMultiplier>()
|
||||
private val NO_MULTIPLIER = PriceMultiplier("none", 1.0, 0)
|
||||
|
||||
/**
|
||||
* Get the permission multiplier for a given player.
|
||||
*
|
||||
* @param player The player.
|
||||
* @return The multiplier.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getForPlayer(player: Player): PriceMultiplier {
|
||||
var current = NO_MULTIPLIER
|
||||
|
||||
@@ -38,19 +30,11 @@ object PriceMultipliers {
|
||||
val Player.reforgePriceMultiplier: Double
|
||||
get() = getForPlayer(this).multiplier
|
||||
|
||||
/**
|
||||
* List of all registered multipliers.
|
||||
*
|
||||
* @return The multipliers.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun values(): List<PriceMultiplier> {
|
||||
return REGISTRY.toList()
|
||||
}
|
||||
|
||||
@ConfigUpdater
|
||||
@JvmStatic
|
||||
fun update(plugin: EcoPlugin) {
|
||||
internal fun update(plugin: EcoPlugin) {
|
||||
REGISTRY.clear()
|
||||
|
||||
for (config in plugin.configYml.getSubsections("price-multipliers")) {
|
||||
|
||||
@@ -11,12 +11,16 @@ import com.willfp.eco.core.recipe.Recipes
|
||||
import com.willfp.eco.core.registry.Registrable
|
||||
import com.willfp.eco.util.StringUtils
|
||||
import com.willfp.libreforge.Holder
|
||||
import com.willfp.libreforge.ItemProvidedHolder
|
||||
import com.willfp.libreforge.ViolationContext
|
||||
import com.willfp.libreforge.conditions.Conditions
|
||||
import com.willfp.libreforge.effects.Effects
|
||||
import com.willfp.libreforge.toDispatcher
|
||||
import com.willfp.libreforge.triggers.TriggerData
|
||||
import com.willfp.reforges.ReforgesPlugin
|
||||
import com.willfp.reforges.util.reforgeStone
|
||||
import net.kyori.adventure.text.format.TextDecoration
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import java.util.Objects
|
||||
|
||||
@@ -30,7 +34,7 @@ class Reforge(
|
||||
|
||||
val namePrefixComponent = StringUtils.toComponent("$name ").decoration(TextDecoration.ITALIC, false)
|
||||
|
||||
val description: List<String> = config.getFormattedStrings("description")
|
||||
val description: List<String> = config.getStrings("description")
|
||||
|
||||
val targets = config.getStrings("targets").mapNotNull { ReforgeTargets.getByName(it) }.toSet()
|
||||
|
||||
@@ -73,12 +77,17 @@ class Reforge(
|
||||
}
|
||||
} else null
|
||||
|
||||
private val onReforgeEffects = Effects.compileChain(
|
||||
config.getSubsections("on-reforge-effects"),
|
||||
ViolationContext(plugin, "Reforge $id").with("on-reforge-effects")
|
||||
)
|
||||
|
||||
init {
|
||||
stone.reforgeStone = this
|
||||
|
||||
if (config.getBool("stone.enabled")) {
|
||||
CustomItem(
|
||||
plugin.namespacedKeyFactory.create("stone_" + this.id),
|
||||
plugin.namespacedKeyFactory.create("stone_" + this.id.key),
|
||||
{ test -> test.reforgeStone == this },
|
||||
stone
|
||||
).register()
|
||||
@@ -98,6 +107,16 @@ class Reforge(
|
||||
return targets.any { target -> target.items.any { it.matches(item) } }
|
||||
}
|
||||
|
||||
fun runOnReforgeEffects(player: Player, item: ItemStack) {
|
||||
onReforgeEffects?.trigger(
|
||||
player.toDispatcher(),
|
||||
TriggerData(
|
||||
player = player,
|
||||
item = item
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getID(): String {
|
||||
return this.id.key
|
||||
}
|
||||
@@ -121,4 +140,4 @@ class Reforge(
|
||||
override fun toString(): String {
|
||||
return "Reforge{$id}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.willfp.reforges.reforges
|
||||
|
||||
import com.willfp.libreforge.slot.ItemHolderFinder
|
||||
import com.willfp.libreforge.slot.SlotType
|
||||
import com.willfp.reforges.util.reforge
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
object ReforgeFinder : ItemHolderFinder<Reforge>() {
|
||||
override fun find(item: ItemStack): List<Reforge> {
|
||||
return listOfNotNull(item.reforge)
|
||||
}
|
||||
|
||||
override fun isValidInSlot(holder: Reforge, slot: SlotType): Boolean {
|
||||
return holder.targets.map { it.slot }.any { it.isOrContains(slot) }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.willfp.reforges.reforges
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.items.tag.CustomItemTag
|
||||
import com.willfp.reforges.util.reforgeStone
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class ReforgeStoneTag(plugin: EcoPlugin): CustomItemTag(plugin.createNamespacedKey("stone")) {
|
||||
override fun matches(p0: ItemStack): Boolean {
|
||||
return p0.reforgeStone != null
|
||||
}
|
||||
|
||||
override fun getExampleItem(): ItemStack {
|
||||
return Reforges.values().random().stone
|
||||
}
|
||||
}
|
||||
@@ -2,12 +2,13 @@ package com.willfp.reforges.reforges
|
||||
|
||||
import com.willfp.eco.core.items.TestableItem
|
||||
import com.willfp.eco.core.recipe.parts.EmptyTestableItem
|
||||
import com.willfp.libreforge.slot.SlotType
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import java.util.*
|
||||
import java.util.Objects
|
||||
|
||||
class ReforgeTarget(
|
||||
val id: String,
|
||||
val slot: Slot,
|
||||
val slot: SlotType,
|
||||
val items: MutableSet<TestableItem>
|
||||
) {
|
||||
init {
|
||||
@@ -34,10 +35,4 @@ class ReforgeTarget(
|
||||
override fun hashCode(): Int {
|
||||
return Objects.hash(this.id)
|
||||
}
|
||||
|
||||
enum class Slot {
|
||||
HANDS,
|
||||
ARMOR,
|
||||
ANY
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,38 +1,24 @@
|
||||
package com.willfp.reforges.reforges
|
||||
|
||||
import com.google.common.collect.ImmutableSet
|
||||
import com.willfp.eco.core.config.updating.ConfigUpdater
|
||||
import com.willfp.libreforge.slot.impl.SlotTypeAny
|
||||
import com.willfp.reforges.ReforgesPlugin
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
object ReforgeTargets {
|
||||
private val registered = mutableMapOf<String, ReforgeTarget>()
|
||||
|
||||
val ALL = ReforgeTarget("all", ReforgeTarget.Slot.ANY, HashSet())
|
||||
val ALL = ReforgeTarget("all", SlotTypeAny, HashSet())
|
||||
|
||||
init {
|
||||
registered["all"] = ALL
|
||||
update(ReforgesPlugin.instance)
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ReforgeTarget matching name.
|
||||
*
|
||||
* @param name The name to search for.
|
||||
* @return The matching ReforgeTarget, or null if not found.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getByName(name: String): ReforgeTarget? {
|
||||
return registered[name]
|
||||
}
|
||||
|
||||
/**
|
||||
* Get target from item.
|
||||
*
|
||||
* @param item The item.
|
||||
* @return The target.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getForItem(item: ItemStack?): List<ReforgeTarget> {
|
||||
if (item == null) {
|
||||
return emptyList()
|
||||
@@ -43,14 +29,7 @@ object ReforgeTargets {
|
||||
.filter { it.matches(item) }
|
||||
}
|
||||
|
||||
/**
|
||||
* Update all targets.
|
||||
*
|
||||
* @param plugin Instance of Reforges.
|
||||
*/
|
||||
@ConfigUpdater
|
||||
@JvmStatic
|
||||
fun update(plugin: ReforgesPlugin) {
|
||||
internal fun update(plugin: ReforgesPlugin) {
|
||||
ALL.items.clear()
|
||||
for (id in ArrayList(registered.keys)) {
|
||||
if (id.equals("all", ignoreCase = true)) {
|
||||
@@ -69,12 +48,6 @@ object ReforgeTargets {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all targets.
|
||||
*
|
||||
* @return A set of all targets.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun values(): Set<ReforgeTarget> {
|
||||
return ImmutableSet.copyOf(registered.values)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.willfp.reforges.reforges
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.items.tag.CustomItemTag
|
||||
import com.willfp.reforges.util.reforge
|
||||
import com.willfp.reforges.util.reforgeStone
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class ReforgedTag(plugin: EcoPlugin): CustomItemTag(plugin.createNamespacedKey("reforged")) {
|
||||
override fun matches(p0: ItemStack): Boolean {
|
||||
return p0.reforge != null
|
||||
}
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
package com.willfp.reforges.util
|
||||
|
||||
import com.github.benmanes.caffeine.cache.Caffeine
|
||||
import com.willfp.libreforge.ItemProvidedHolder
|
||||
import com.willfp.reforges.ReforgesPlugin
|
||||
import com.willfp.reforges.reforges.ReforgeTarget
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
typealias SlotProvider = (Player) -> Map<ItemStack?, ReforgeTarget.Slot?>
|
||||
|
||||
object ReforgeLookup {
|
||||
private val plugin = ReforgesPlugin.instance
|
||||
private val slotProviders = mutableSetOf<(Player) -> Map<ItemStack, ReforgeTarget.Slot>>()
|
||||
|
||||
private val itemCache = Caffeine.newBuilder()
|
||||
.expireAfterWrite(2, TimeUnit.SECONDS)
|
||||
.build<Player, Map<ItemStack, ReforgeTarget.Slot>>()
|
||||
|
||||
private val reforgeCache = Caffeine.newBuilder()
|
||||
.expireAfterWrite(2, TimeUnit.SECONDS)
|
||||
.build<Player, Collection<ItemProvidedHolder>>()
|
||||
|
||||
@JvmStatic
|
||||
fun registerProvider(provider: SlotProvider) {
|
||||
slotProviders.add {
|
||||
val found = mutableMapOf<ItemStack, ReforgeTarget.Slot>()
|
||||
for ((item, slot) in provider(it)) {
|
||||
if (item != null && slot != null) {
|
||||
found[item] = slot
|
||||
}
|
||||
}
|
||||
found
|
||||
}
|
||||
}
|
||||
|
||||
private fun provide(player: Player): Map<ItemStack, ReforgeTarget.Slot> {
|
||||
return itemCache.get(player) {
|
||||
val found = mutableMapOf<ItemStack, ReforgeTarget.Slot>()
|
||||
for (provider in slotProviders) {
|
||||
found.putAll(provider(player))
|
||||
}
|
||||
|
||||
found
|
||||
}
|
||||
}
|
||||
|
||||
fun provideReforges(player: Player): List<ItemProvidedHolder> {
|
||||
return reforgeCache.get(player) {
|
||||
val found = mutableListOf<ItemProvidedHolder>()
|
||||
|
||||
for ((itemStack, slot) in provide(player)) {
|
||||
val reforge = itemStack.reforge ?: continue
|
||||
if (slot != ReforgeTarget.Slot.ANY) {
|
||||
if (!reforge.targets.map { it.slot }.contains(slot)) {
|
||||
continue
|
||||
}
|
||||
}
|
||||
found.add(
|
||||
ItemProvidedHolder(
|
||||
reforge,
|
||||
itemStack
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
found
|
||||
}.toList()
|
||||
}
|
||||
|
||||
fun clearCache(player: Player) {
|
||||
itemCache.invalidate(player)
|
||||
reforgeCache.invalidate(player)
|
||||
}
|
||||
|
||||
init {
|
||||
registerProvider {
|
||||
mapOf(
|
||||
Pair(
|
||||
it.inventory.itemInMainHand,
|
||||
ReforgeTarget.Slot.HANDS
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
if (!plugin.configYml.getBool("no-offhand")) {
|
||||
registerProvider {
|
||||
mapOf(
|
||||
Pair(
|
||||
it.inventory.itemInOffHand,
|
||||
ReforgeTarget.Slot.HANDS
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
registerProvider {
|
||||
val items = mutableMapOf<ItemStack?, ReforgeTarget.Slot?>()
|
||||
for (stack in it.inventory.armorContents) {
|
||||
items[stack] = ReforgeTarget.Slot.ARMOR
|
||||
}
|
||||
items
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -146,12 +146,11 @@ reforge:
|
||||
reforgable-suffix:
|
||||
- ""
|
||||
- "&8This item can be reforged!"
|
||||
no-reforgable-in-gui: true # Not perfect, won't work 100% of the time
|
||||
# due to how GUIs are handled differently in different plugins, but should help.
|
||||
|
||||
display-in-lore: true
|
||||
display-in-name: true
|
||||
|
||||
# The lore to display if an item is reforged, above the reforge description
|
||||
reforged-prefix:
|
||||
- ""
|
||||
- "%reforge%"
|
||||
|
||||
@@ -6,3 +6,4 @@ options:
|
||||
resource-id: 1330
|
||||
bstats-id: 12412
|
||||
color: "&3"
|
||||
uses-reflective-reload: false
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
name: ${pluginName}
|
||||
version: ${version}
|
||||
main: com.willfp.reforges.ReforgesPlugin
|
||||
api-version: 1.19
|
||||
|
||||
dependencies:
|
||||
- name: eco
|
||||
required: true
|
||||
bootstrap: false
|
||||
|
||||
- name: libreforge
|
||||
required: false
|
||||
bootstrap: false
|
||||
|
||||
- name: Talismans
|
||||
required: false
|
||||
bootstrap: false
|
||||
|
||||
load-after:
|
||||
- name: eco
|
||||
bootstrap: false
|
||||
|
||||
|
||||
permissions:
|
||||
reforges.*:
|
||||
description: All reforges permissions
|
||||
default: op
|
||||
children:
|
||||
reforges.command.*: true
|
||||
reforges.command.*:
|
||||
description: All commands
|
||||
default: op
|
||||
children:
|
||||
reforges.command.reload: true
|
||||
reforges.command.reforges: true
|
||||
reforges.command.reforge: true
|
||||
reforges.command.give: true
|
||||
reforges.command.apply: true
|
||||
reforges.command.open: true
|
||||
|
||||
reforges.command.reload:
|
||||
description: Allows reloading the config
|
||||
default: op
|
||||
reforges.command.reforges:
|
||||
description: Allows the user of /reforges.
|
||||
default: true
|
||||
reforges.command.reforge:
|
||||
description: Allows the user of /reforge.
|
||||
default: true
|
||||
reforges.command.give:
|
||||
description: Allows the user of /reforges give.
|
||||
default: op
|
||||
reforges.command.open:
|
||||
description: Allows the user of /reforges open.
|
||||
default: op
|
||||
reforges.command.apply:
|
||||
description: Allows the user of /reforges apply.
|
||||
default: op
|
||||
@@ -8,7 +8,6 @@ depend:
|
||||
- eco
|
||||
softdepend:
|
||||
- libreforge
|
||||
- Talismans
|
||||
|
||||
commands:
|
||||
reforges:
|
||||
|
||||
@@ -54,3 +54,6 @@ effects:
|
||||
|
||||
# The conditions required to use the reforge
|
||||
conditions: [ ]
|
||||
|
||||
# Effects to run when the reforge is applied to an item.
|
||||
on-reforge-effects: [ ]
|
||||
|
||||
@@ -1,45 +1,27 @@
|
||||
#
|
||||
# A target consists of items and a slot.
|
||||
# The slot is either hands, armor, or any.
|
||||
# Hands means the reforge will activate on hands, armor
|
||||
# means it will only work on armor, and any
|
||||
# means it will activate whenever its on the player.
|
||||
#
|
||||
|
||||
# The options for slot are mainhand, offhand, hands, helmet, chestplate,
|
||||
# leggings, boots, armor, any, a number from 0-40 (to specify an exact slot),
|
||||
# or a list of slots like "9, 10, 11, mainhand"
|
||||
|
||||
pickaxe:
|
||||
slot: hands
|
||||
items:
|
||||
- wooden_pickaxe
|
||||
- stone_pickaxe
|
||||
- iron_pickaxe
|
||||
- golden_pickaxe
|
||||
- diamond_pickaxe
|
||||
- netherite_pickaxe
|
||||
- "#items_pickaxes"
|
||||
|
||||
axe:
|
||||
slot: hands
|
||||
items:
|
||||
- wooden_axe
|
||||
- stone_axe
|
||||
- iron_axe
|
||||
- golden_axe
|
||||
- diamond_axe
|
||||
- netherite_axe
|
||||
- "#items_axes"
|
||||
|
||||
melee:
|
||||
slot: hands
|
||||
items:
|
||||
- wooden_axe
|
||||
- stone_axe
|
||||
- iron_axe
|
||||
- golden_axe
|
||||
- diamond_axe
|
||||
- netherite_axe
|
||||
- wooden_sword
|
||||
- stone_sword
|
||||
- iron_sword
|
||||
- golden_sword
|
||||
- diamond_sword
|
||||
- netherite_sword
|
||||
- "#items_axes"
|
||||
- "#items_swords"
|
||||
|
||||
trident:
|
||||
slot: hands
|
||||
items:
|
||||
@@ -52,31 +34,7 @@ bow:
|
||||
armor:
|
||||
slot: armor
|
||||
items:
|
||||
- turtle_helmet
|
||||
- leather_helmet
|
||||
- chainmail_helmet
|
||||
- iron_helmet
|
||||
- golden_helmet
|
||||
- diamond_helmet
|
||||
- netherite_helmet
|
||||
|
||||
- leather_chestplate
|
||||
- chainmail_chestplate
|
||||
- iron_chestplate
|
||||
- golden_chestplate
|
||||
- diamond_chestplate
|
||||
- netherite_chestplate
|
||||
|
||||
- leather_leggings
|
||||
- chainmail_leggings
|
||||
- iron_leggings
|
||||
- golden_leggings
|
||||
- diamond_leggings
|
||||
- netherite_leggings
|
||||
|
||||
- leather_boots
|
||||
- chainmail_boots
|
||||
- iron_boots
|
||||
- golden_boots
|
||||
- diamond_boots
|
||||
- netherite_boots
|
||||
- "#items_head_armor"
|
||||
- "#items_chest_armor"
|
||||
- "#items_leg_armor"
|
||||
- "#items_foot_armor"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#libreforge-updater
|
||||
#Thu Jul 06 18:47:19 BST 2023
|
||||
#Mon Oct 06 08:56:44 BST 2025
|
||||
kotlin.code.style=official
|
||||
libreforge-version=4.21.1
|
||||
version=6.20.1
|
||||
libreforge-version=4.79.0
|
||||
version=6.78.0
|
||||
|
||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
jdk: openjdk17
|
||||
before_install:
|
||||
- source "$HOME/.sdkman/bin/sdkman-init.sh"
|
||||
- sdk update
|
||||
- sdk install java 17.0.1-tem
|
||||
- sdk use java 17.0.1-tem
|
||||
@@ -2,12 +2,14 @@ pluginManagement {
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
mavenLocal()
|
||||
maven("https://repo.jpenilla.xyz/snapshots/")
|
||||
maven("https://repo.auxilor.io/repository/maven-public/")
|
||||
maven("https://repo.papermc.io/repository/maven-public/")
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.name = "Reforges"
|
||||
plugins {
|
||||
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
|
||||
}
|
||||
|
||||
// Core
|
||||
include(":eco-core")
|
||||
|
||||
Reference in New Issue
Block a user