9
0
mirror of https://github.com/Auxilor/Reforges.git synced 2025-12-20 15:39:30 +00:00

Compare commits

...

13 Commits

Author SHA1 Message Date
often
2ba6e6f9f3 Fixed TargetYml#getSlot 2024-01-16 18:04:40 +03:00
Will FP
ef8c85c722 libreforge-updater 2024-01-16 13:28:38 +00:00
Will FP
0889efd92c Fix 2024-01-14 15:55:10 +00:00
Will FP
5cd66bc797 libreforge-updater 2024-01-13 14:23:25 +00:00
Will FP
332356fc50 libreforge-updater 2024-01-07 13:51:08 +00:00
Will FP
f8ca89e607 Reforges now uses the slot system 2024-01-06 15:19:42 +00:00
Will FP
94c4d354db libreforge-updater 2024-01-06 09:19:20 +00:00
Auxilor
0a7ef0b65a libreforge-updater 2024-01-04 17:26:18 +00:00
Auxilor
1df223c741 Fixed compile bug 2024-01-01 20:04:30 +00:00
Auxilor
db5c627f4d libreforge-updater 2024-01-01 20:03:31 +00:00
Will FP
f0a6a4c9b8 libreforge-updater 2023-12-27 14:16:44 +01:00
Will FP
d9296cca53 libreforge-updater 2023-12-24 14:54:24 +01:00
Auxilor
534c8a6018 libreforge-updater 2023-12-20 15:59:05 +00:00
12 changed files with 40 additions and 180 deletions

View File

@@ -2,27 +2,21 @@ package com.willfp.reforges
import com.willfp.eco.core.command.impl.PluginCommand import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.eco.core.display.DisplayModule import com.willfp.eco.core.display.DisplayModule
import com.willfp.eco.core.integrations.IntegrationLoader
import com.willfp.eco.core.items.Items import com.willfp.eco.core.items.Items
import com.willfp.libreforge.conditions.Conditions import com.willfp.libreforge.conditions.Conditions
import com.willfp.libreforge.loader.LibreforgePlugin import com.willfp.libreforge.loader.LibreforgePlugin
import com.willfp.libreforge.loader.configs.ConfigCategory import com.willfp.libreforge.loader.configs.ConfigCategory
import com.willfp.libreforge.registerHolderProvider import com.willfp.libreforge.registerHolderProvider
import com.willfp.libreforge.registerPlayerRefreshFunction
import com.willfp.libreforge.registerSpecificHolderProvider
import com.willfp.libreforge.registerSpecificRefreshFunction
import com.willfp.reforges.commands.CommandReforge import com.willfp.reforges.commands.CommandReforge
import com.willfp.reforges.commands.CommandReforges import com.willfp.reforges.commands.CommandReforges
import com.willfp.reforges.config.TargetYml import com.willfp.reforges.config.TargetYml
import com.willfp.reforges.display.ReforgesDisplay import com.willfp.reforges.display.ReforgesDisplay
import com.willfp.reforges.integrations.talismans.TalismansIntegration
import com.willfp.reforges.libreforge.ConditionHasReforge import com.willfp.reforges.libreforge.ConditionHasReforge
import com.willfp.reforges.reforges.ReforgeFinder
import com.willfp.reforges.reforges.Reforges import com.willfp.reforges.reforges.Reforges
import com.willfp.reforges.reforges.util.ReforgeArgParser import com.willfp.reforges.reforges.util.ReforgeArgParser
import com.willfp.reforges.util.AntiPlaceListener import com.willfp.reforges.util.AntiPlaceListener
import com.willfp.reforges.util.DiscoverRecipeListener import com.willfp.reforges.util.DiscoverRecipeListener
import com.willfp.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.Listener import org.bukkit.event.Listener
class ReforgesPlugin : LibreforgePlugin() { class ReforgesPlugin : LibreforgePlugin() {
@@ -44,13 +38,7 @@ class ReforgesPlugin : LibreforgePlugin() {
Items.registerArgParser(ReforgeArgParser) Items.registerArgParser(ReforgeArgParser)
registerSpecificHolderProvider<Player> { registerHolderProvider(ReforgeFinder.toHolderProvider())
ReforgeLookup.provideReforges(it)
}
registerSpecificRefreshFunction<Player> {
ReforgeLookup.clearCache(it)
}
} }
override fun loadListeners(): List<Listener> { override fun loadListeners(): List<Listener> {
@@ -71,12 +59,6 @@ class ReforgesPlugin : LibreforgePlugin() {
return ReforgesDisplay(this) return ReforgesDisplay(this)
} }
override fun loadIntegrationLoaders(): List<IntegrationLoader> {
return listOf(
IntegrationLoader("Talismans") { TalismansIntegration.registerProvider() }
)
}
companion object { companion object {
/** /**
* Instance of Reforges. * Instance of Reforges.

View File

@@ -5,8 +5,10 @@ import com.willfp.eco.core.config.ConfigType
import com.willfp.eco.core.config.StaticBaseConfig import com.willfp.eco.core.config.StaticBaseConfig
import com.willfp.eco.core.items.Items import com.willfp.eco.core.items.Items
import com.willfp.eco.core.items.TestableItem import com.willfp.eco.core.items.TestableItem
import com.willfp.reforges.reforges.ReforgeTarget import com.willfp.libreforge.slot.SlotType
import java.util.* import com.willfp.libreforge.slot.SlotTypes
import com.willfp.libreforge.slot.impl.SlotTypeAny
import java.util.Locale
import java.util.function.Consumer import java.util.function.Consumer
class TargetYml(plugin: EcoPlugin) : StaticBaseConfig("target", plugin, ConfigType.YAML) { 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. * @param target The name of the target.
* @return All materials. * @return The [SlotType].
*/ */
fun getSlot(target: String): ReforgeTarget.Slot { fun getSlot(target: String): SlotType {
return ReforgeTarget.Slot.valueOf(this.getString("$target.slot").uppercase(Locale.getDefault())) return SlotTypes[this.getString("$target.slot")] ?: SlotTypeAny
} }
} }

View File

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

View File

@@ -8,8 +8,9 @@ import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.arguments import com.willfp.libreforge.arguments
import com.willfp.libreforge.conditions.Condition import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get 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.reforges.Reforge
import com.willfp.reforges.util.ReforgeLookup
import org.bukkit.entity.Player import org.bukkit.entity.Player
object ConditionHasReforge : Condition<NoCompileData>("has_reforge") { object ConditionHasReforge : Condition<NoCompileData>("has_reforge") {
@@ -25,9 +26,7 @@ object ConditionHasReforge : Condition<NoCompileData>("has_reforge") {
): Boolean { ): Boolean {
val player = dispatcher.get<Player>() ?: return false val player = dispatcher.get<Player>() ?: return false
return ReforgeLookup.provideReforges(player) return player.toDispatcher().getHoldersOfType<Reforge>()
.map { it.holder }
.filterIsInstance<Reforge>()
.map { it.id.key } .map { it.id.key }
.containsIgnoreCase(config.getString("reforge")) .containsIgnoreCase(config.getString("reforge"))
} }

View File

@@ -111,7 +111,6 @@ class Reforge(
onReforgeEffects?.trigger( onReforgeEffects?.trigger(
player.toDispatcher(), player.toDispatcher(),
TriggerData( TriggerData(
holder = ItemProvidedHolder(this, item),
player = player, player = player,
item = item item = item
) )

View File

@@ -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 slot in holder.targets.map { it.slot }.toSet()
}
}

View File

@@ -2,12 +2,13 @@ package com.willfp.reforges.reforges
import com.willfp.eco.core.items.TestableItem import com.willfp.eco.core.items.TestableItem
import com.willfp.eco.core.recipe.parts.EmptyTestableItem import com.willfp.eco.core.recipe.parts.EmptyTestableItem
import com.willfp.libreforge.slot.SlotType
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import java.util.* import java.util.Objects
class ReforgeTarget( class ReforgeTarget(
val id: String, val id: String,
val slot: Slot, val slot: SlotType,
val items: MutableSet<TestableItem> val items: MutableSet<TestableItem>
) { ) {
init { init {
@@ -34,10 +35,4 @@ class ReforgeTarget(
override fun hashCode(): Int { override fun hashCode(): Int {
return Objects.hash(this.id) return Objects.hash(this.id)
} }
enum class Slot {
HANDS,
ARMOR,
ANY
}
} }

View File

@@ -2,13 +2,14 @@ package com.willfp.reforges.reforges
import com.google.common.collect.ImmutableSet import com.google.common.collect.ImmutableSet
import com.willfp.eco.core.config.updating.ConfigUpdater import com.willfp.eco.core.config.updating.ConfigUpdater
import com.willfp.libreforge.slot.impl.SlotTypeAny
import com.willfp.reforges.ReforgesPlugin import com.willfp.reforges.ReforgesPlugin
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
object ReforgeTargets { object ReforgeTargets {
private val registered = mutableMapOf<String, ReforgeTarget>() private val registered = mutableMapOf<String, ReforgeTarget>()
val ALL = ReforgeTarget("all", ReforgeTarget.Slot.ANY, HashSet()) val ALL = ReforgeTarget("all", SlotTypeAny, HashSet())
init { init {
registered["all"] = ALL registered["all"] = ALL

View File

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

View File

@@ -8,7 +8,6 @@ depend:
- eco - eco
softdepend: softdepend:
- libreforge - libreforge
- Talismans
commands: commands:
reforges: reforges:

View File

@@ -1,11 +1,10 @@
# #
# A target consists of items and a slot. # 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: pickaxe:
slot: hands slot: hands

View File

@@ -1,5 +1,5 @@
#libreforge-updater #libreforge-updater
#Thu Dec 14 16:12:57 GMT 2023 #Tue Jan 16 13:28:38 GMT 2024
kotlin.code.style=official kotlin.code.style=official
libreforge-version=4.49.2 libreforge-version=4.55.1
version=6.49.1 version=6.54.2