Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import io.github.pylonmc.pylon.core.guide.button.PageButton
import io.github.pylonmc.pylon.core.guide.button.setting.TogglePlayerSettingButton
import io.github.pylonmc.pylon.core.guide.pages.PlayerSettingsPage
import io.github.pylonmc.pylon.core.i18n.PylonTranslator
import io.github.pylonmc.pylon.core.item.PylonInventoryTicker
import io.github.pylonmc.pylon.core.item.PylonItem
import io.github.pylonmc.pylon.core.item.PylonItemListener
import io.github.pylonmc.pylon.core.item.research.Research
Expand All @@ -33,10 +34,10 @@ import io.github.pylonmc.pylon.core.recipe.ConfigurableRecipeType
import io.github.pylonmc.pylon.core.recipe.PylonRecipeListener
import io.github.pylonmc.pylon.core.recipe.RecipeType
import io.github.pylonmc.pylon.core.registry.PylonRegistry
import io.github.pylonmc.pylon.core.util.mergeGlobalConfig
import io.github.pylonmc.pylon.core.resourcepack.armor.ArmorTextureEngine
import io.github.pylonmc.pylon.core.resourcepack.armor.ArmorTextureEngine.hasCustomArmorTextures
import io.github.pylonmc.pylon.core.resourcepack.block.BlockTextureEngine
import io.github.pylonmc.pylon.core.util.mergeGlobalConfig
import io.github.pylonmc.pylon.core.util.pylonKey
import io.github.pylonmc.pylon.core.waila.Waila
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder
Expand All @@ -56,7 +57,7 @@ import org.bukkit.permissions.Permission
import org.bukkit.permissions.PermissionDefault
import org.bukkit.plugin.java.JavaPlugin
import xyz.xenondevs.invui.InvUI
import java.util.Locale
import java.util.*
import kotlin.io.path.*

/**
Expand Down Expand Up @@ -98,6 +99,7 @@ object PylonCore : JavaPlugin(), PylonAddon {
Bukkit.getPluginManager().registerEvents(BlockStorage, this)
Bukkit.getPluginManager().registerEvents(BlockListener, this)
Bukkit.getPluginManager().registerEvents(PylonItemListener, this)
Bukkit.getScheduler().runTaskTimer(this, PylonInventoryTicker(), 0, PylonConfig.inventoryTickerBaseRate)
Bukkit.getPluginManager().registerEvents(TickManager, this)
Bukkit.getPluginManager().registerEvents(MultiblockCache, this)
Bukkit.getPluginManager().registerEvents(EntityStorage, this)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ object PylonConfig {
@JvmStatic
val disabledItems = config.getOrThrow("disabled-items", ConfigAdapter.SET.from(ConfigAdapter.NAMESPACED_KEY))

@JvmStatic
val inventoryTickerBaseRate = config.getOrThrow("inventory-ticker-base-rate", ConfigAdapter.LONG)

object WailaConfig {
private val config = Config(PylonCore, "config.yml")

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package io.github.pylonmc.pylon.core.item

import io.github.pylonmc.pylon.core.item.base.PylonInventoryTicker
import org.bukkit.Bukkit

internal class PylonInventoryTicker() : Runnable {
private var count = 0L
override fun run() {
for (player in Bukkit.getOnlinePlayers()) {
for (item in player.inventory) {
val pylonItem = PylonItem.fromStack(item)
if (pylonItem is PylonInventoryTicker && count % pylonItem.tickInterval == 0L) {
pylonItem.onTick(player)
}
}
}
count += 1L
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.github.pylonmc.pylon.core.item.base

import io.github.pylonmc.pylon.core.config.PylonConfig
import org.bukkit.entity.Player

/**
* An item should implement this interface to tick when a player has the item in their inventory
*/
interface PylonInventoryTicker {
/**
* Called when the item is detected in the player's inventory.
* will be called at [tickInterval] * [PylonConfig.inventoryTickerBaseRate
* @param player The player whose inventory the item was in
*/
fun onTick(player: Player)

/** Determines the rate at which the [onTick] method will be called.
* [onTick] will be called at [tickInterval] * [PylonConfig.inventoryTickerBaseRate] */
val tickInterval: Long
}
3 changes: 3 additions & 0 deletions pylon-core/src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ block-data-autosave-interval-seconds: 60

entity-data-autosave-interval-seconds: 60

# The lowest tick interval at which pylon inventory ticker items may tick
inventory-ticker-base-rate: 10

waila:
# The interval (in Minecraft ticks), between WAILA checks
# Set to 0 to disable WAILA globally
Expand Down