mirror of
https://github.com/Auxilor/Reforges.git
synced 2025-12-20 15:39:30 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ba6e6f9f3 | ||
|
|
ef8c85c722 | ||
|
|
0889efd92c | ||
|
|
5cd66bc797 | ||
|
|
332356fc50 | ||
|
|
f8ca89e607 | ||
|
|
94c4d354db | ||
|
|
0a7ef0b65a | ||
|
|
1df223c741 | ||
|
|
db5c627f4d | ||
|
|
f0a6a4c9b8 | ||
|
|
d9296cca53 | ||
|
|
534c8a6018 | ||
|
|
5b48c4f159 |
@@ -2,27 +2,21 @@ 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.libreforge.registerSpecificHolderProvider
|
||||
import com.willfp.libreforge.registerSpecificRefreshFunction
|
||||
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.libreforge.ConditionHasReforge
|
||||
import com.willfp.reforges.reforges.ReforgeFinder
|
||||
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.entity.Player
|
||||
import org.bukkit.event.Listener
|
||||
|
||||
class ReforgesPlugin : LibreforgePlugin() {
|
||||
@@ -44,13 +38,7 @@ class ReforgesPlugin : LibreforgePlugin() {
|
||||
|
||||
Items.registerArgParser(ReforgeArgParser)
|
||||
|
||||
registerSpecificHolderProvider<Player> {
|
||||
ReforgeLookup.provideReforges(it)
|
||||
}
|
||||
|
||||
registerSpecificRefreshFunction<Player> {
|
||||
ReforgeLookup.clearCache(it)
|
||||
}
|
||||
registerHolderProvider(ReforgeFinder.toHolderProvider())
|
||||
}
|
||||
|
||||
override fun loadListeners(): List<Listener> {
|
||||
@@ -71,12 +59,6 @@ class ReforgesPlugin : LibreforgePlugin() {
|
||||
return ReforgesDisplay(this)
|
||||
}
|
||||
|
||||
override fun loadIntegrationLoaders(): List<IntegrationLoader> {
|
||||
return listOf(
|
||||
IntegrationLoader("Talismans") { TalismansIntegration.registerProvider() }
|
||||
)
|
||||
}
|
||||
|
||||
companion object {
|
||||
/**
|
||||
* Instance of Reforges.
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -8,8 +8,9 @@ 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") {
|
||||
@@ -25,9 +26,7 @@ object ConditionHasReforge : Condition<NoCompileData>("has_reforge") {
|
||||
): Boolean {
|
||||
val player = dispatcher.get<Player>() ?: return false
|
||||
|
||||
return ReforgeLookup.provideReforges(player)
|
||||
.map { it.holder }
|
||||
.filterIsInstance<Reforge>()
|
||||
return player.toDispatcher().getHoldersOfType<Reforge>()
|
||||
.map { it.id.key }
|
||||
.containsIgnoreCase(config.getString("reforge"))
|
||||
}
|
||||
|
||||
@@ -111,7 +111,6 @@ class Reforge(
|
||||
onReforgeEffects?.trigger(
|
||||
player.toDispatcher(),
|
||||
TriggerData(
|
||||
holder = ItemProvidedHolder(this, item),
|
||||
player = player,
|
||||
item = item
|
||||
)
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,13 +2,14 @@ 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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,6 @@ depend:
|
||||
- eco
|
||||
softdepend:
|
||||
- libreforge
|
||||
- Talismans
|
||||
|
||||
commands:
|
||||
reforges:
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
#
|
||||
# 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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#libreforge-updater
|
||||
#Mon Dec 11 12:12:20 GMT 2023
|
||||
#Tue Jan 16 13:28:38 GMT 2024
|
||||
kotlin.code.style=official
|
||||
libreforge-version=4.49.0
|
||||
version=6.49.0
|
||||
libreforge-version=4.55.1
|
||||
version=6.54.2
|
||||
|
||||
Reference in New Issue
Block a user