Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,6 @@ import io.github.pylonmc.pylon.core.entity.EntityListener
import io.github.pylonmc.pylon.core.entity.EntityStorage
import io.github.pylonmc.pylon.core.entity.PylonEntity
import io.github.pylonmc.pylon.core.fluid.placement.FluidPipePlacementService
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
Expand All @@ -39,10 +36,8 @@ import io.github.pylonmc.pylon.core.recipe.RecipeCompletion
import io.github.pylonmc.pylon.core.recipe.RecipeType
import io.github.pylonmc.pylon.core.registry.PylonRegistry
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
import io.papermc.paper.ServerBuildInfo
Expand Down Expand Up @@ -145,34 +140,18 @@ object PylonCore : JavaPlugin(), PylonAddon {
pm.registerEvents(RecipeCompletion, this)

if (PylonConfig.WailaConfig.enabled) {
PylonGuide.settingsPage.addSetting(PageButton(PlayerSettingsPage.wailaSettings))
pm.registerEvents(Waila, this)
}

PylonGuide.settingsPage.addSetting(PageButton(PlayerSettingsPage.resourcePackSettings))

if (PylonConfig.ArmorTextureConfig.ENABLED) {
if (!PylonConfig.ArmorTextureConfig.FORCED) {
PlayerSettingsPage.resourcePackSettings.addSetting(TogglePlayerSettingButton(
pylonKey("toggle-armor-textures"),
toggle = { player -> player.hasCustomArmorTextures = !player.hasCustomArmorTextures },
isEnabled = { player -> player.hasCustomArmorTextures },
))
}
packetEvents.eventManager.registerListener(ArmorTextureEngine, PacketListenerPriority.HIGHEST)
}

if (PylonConfig.BlockTextureConfig.ENABLED) {
PlayerSettingsPage.resourcePackSettings.addSetting(PageButton(PlayerSettingsPage.blockTextureSettings))
pm.registerEvents(BlockTextureEngine, this)
BlockTextureEngine.updateOccludingCacheJob.start()
}

if (PylonConfig.RESEARCHES_ENABLED) {
PylonGuide.settingsPage.addSetting(PlayerSettingsPage.researchConfetti)
PylonGuide.settingsPage.addSetting(PlayerSettingsPage.researchSounds)
}

Bukkit.getScheduler().runTaskTimer(
this,
MultiblockCache.MultiblockChecker,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
package io.github.pylonmc.pylon.core.content.guide

import io.github.pylonmc.pylon.core.addon.PylonAddon
import io.github.pylonmc.pylon.core.config.PylonConfig
import io.github.pylonmc.pylon.core.guide.pages.InfoPage
import io.github.pylonmc.pylon.core.guide.pages.PlayerSettingsPage
import io.github.pylonmc.pylon.core.guide.button.BackButton
import io.github.pylonmc.pylon.core.guide.button.FluidButton
import io.github.pylonmc.pylon.core.guide.button.PageButton
import io.github.pylonmc.pylon.core.guide.button.ResearchesButton
import io.github.pylonmc.pylon.core.guide.pages.RootPage
import io.github.pylonmc.pylon.core.guide.pages.SearchItemsAndFluidsPage
import io.github.pylonmc.pylon.core.guide.pages.base.GuidePage
import io.github.pylonmc.pylon.core.guide.pages.fluid.FluidsPage
import io.github.pylonmc.pylon.core.guide.pages.base.SimpleDynamicGuidePage
import io.github.pylonmc.pylon.core.guide.pages.base.SimpleStaticGuidePage
import io.github.pylonmc.pylon.core.guide.pages.item.ItemIngredientsPage
import io.github.pylonmc.pylon.core.guide.pages.research.AddonResearchesPage
import io.github.pylonmc.pylon.core.guide.pages.research.ResearchItemsPage
import io.github.pylonmc.pylon.core.guide.pages.research.ResearchesPage
import io.github.pylonmc.pylon.core.guide.pages.settings.MainSettingsPage
import io.github.pylonmc.pylon.core.item.PylonItem
import io.github.pylonmc.pylon.core.item.base.PylonInteractor
import io.github.pylonmc.pylon.core.item.builder.ItemStackBuilder
import io.github.pylonmc.pylon.core.item.research.Research
import io.github.pylonmc.pylon.core.registry.PylonRegistry
import io.github.pylonmc.pylon.core.util.pylonKey
import io.papermc.paper.datacomponent.DataComponentTypes
import net.kyori.adventure.key.Key
Expand All @@ -24,7 +33,7 @@ import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerInteractEvent
import org.bukkit.event.player.PlayerJoinEvent
import org.bukkit.inventory.ItemStack
import java.util.UUID
import java.util.*

/**
* The one and only Pylon guide.
Expand Down Expand Up @@ -75,22 +84,52 @@ class PylonGuide(stack: ItemStack) : PylonItem(stack), PylonInteractor {
val hiddenResearches: MutableSet<NamespacedKey> = mutableSetOf()

@JvmStatic
val fluidsPage = FluidsPage()
val fluidsPage = object : SimpleDynamicGuidePage(
pylonKey("fluids"),
{ PylonRegistry.FLUIDS.map { FluidButton(it) }.toMutableList() }
) {}

@JvmStatic
val infoPage = InfoPage()
val fluidsButton = PageButton(Material.WATER_BUCKET, fluidsPage)

@JvmStatic
val infoPage = SimpleStaticGuidePage(pylonKey("info"))

@JvmStatic
val infoButton = PageButton(Material.LANTERN, infoPage)

@JvmStatic
val researchesPage = ResearchesPage()

@JvmStatic
val researchesButton = PageButton(Material.BREWING_STAND, researchesPage)

@JvmStatic
fun addonResearchesPage(addon: PylonAddon) = AddonResearchesPage(addon)

@JvmStatic
fun addonResearchesButton(addon: PylonAddon) = ResearchesButton(addon)

@JvmStatic
fun researchItemsPage(research: Research) = ResearchItemsPage(research)

@JvmStatic
val rootPage = RootPage()

@JvmStatic
val backButton = BackButton()

@JvmStatic
val searchItemsAndFluidsPage = SearchItemsAndFluidsPage()

@JvmStatic
val settingsPage = PlayerSettingsPage()
val searchItemsAndFluidsButton = PageButton(Material.OAK_SIGN, searchItemsAndFluidsPage)

@JvmStatic
val mainSettingsPage = MainSettingsPage

@JvmStatic
val mainSettingsButton = PageButton(Material.COMPARATOR, mainSettingsPage)

/**
* Lowest priority to avoid another plugin saving the players data or doing something
Expand All @@ -106,6 +145,9 @@ class PylonGuide(stack: ItemStack) : PylonItem(stack), PylonInteractor {
@JvmStatic
fun ingredientsPage(stack: ItemStack) = ItemIngredientsPage(stack)

@JvmStatic
fun ingredientsButton(stack: ItemStack) = PageButton(Material.SCULK_SENSOR, ingredientsPage(stack))

/**
* Hide an item from showing up in searches
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import xyz.xenondevs.invui.item.impl.AbstractItem
/**
* Represents the back button in the guide.
*/
open class BackButton() : AbstractItem() {
class BackButton : AbstractItem() {

override fun getItemProvider() = ItemStackBuilder.gui(Material.ENCHANTED_BOOK, pylonKey("guide_back"))
.name(Component.translatable("pylon.pyloncore.guide.button.back.name"))
Expand All @@ -24,7 +24,7 @@ open class BackButton() : AbstractItem() {

if (clickType.isShiftClick) {
history.clear()
PylonGuide.rootPage.open(player);
PylonGuide.rootPage.open(player)
} else if (history.size >= 2) {
history.removeLast() // remove the current page
history.removeLast().open(player)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import io.github.pylonmc.pylon.core.recipe.RecipeInput
import io.papermc.paper.datacomponent.DataComponentTypes
import kotlinx.coroutines.delay
import net.kyori.adventure.text.Component
import org.bukkit.Bukkit
import org.bukkit.Material
import org.bukkit.Registry
import org.bukkit.entity.Player
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,34 @@
package io.github.pylonmc.pylon.core.guide.button

import io.github.pylonmc.pylon.core.guide.pages.base.GuidePage
import io.github.pylonmc.pylon.core.guide.pages.RootPage;
import io.github.pylonmc.pylon.core.item.builder.ItemStackBuilder
import io.github.pylonmc.pylon.core.util.pylonKey
import net.kyori.adventure.text.Component
import org.bukkit.Material
import org.bukkit.entity.Player
import org.bukkit.event.inventory.ClickType
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.inventory.ItemStack
import xyz.xenondevs.invui.item.impl.AbstractItem

/**
* A button that opens another page in the guide.
*
* The name and lore of [stack] are ignored, and overwritten by the supplied name and lore.
*
* The name will be inherited from the page name. The lore will be blank, unless you add it
* at `pylon.<your-addon>.guide.button.<button-key>: "your name here"`
*
* @see GuidePage
*/
open class PageButton(val page: GuidePage) : AbstractItem() {
open class PageButton(val stack: ItemStack, val page: GuidePage) : AbstractItem() {

constructor(material: Material, page: GuidePage) : this(ItemStack(material), page)

override fun getItemProvider() = page.item
override fun getItemProvider(viewer: Player?) = ItemStackBuilder.gui(stack, "${pylonKey("guide_page")}:${page.key}")
.name(Component.translatable("pylon.${page.key.namespace}.guide.page.${page.key.key}"))
.clearLore()
.lore(Component.translatable("pylon.${page.key.namespace}.guide.button.${page.key.key}", ""))

override fun handleClick(clickType: ClickType, player: Player, event: InventoryClickEvent) {
page.open(player)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import io.github.pylonmc.pylon.core.item.builder.ItemStackBuilder
import io.github.pylonmc.pylon.core.item.research.Research
import io.github.pylonmc.pylon.core.item.research.Research.Companion.researchPoints
import io.github.pylonmc.pylon.core.util.getAddon
import io.github.pylonmc.pylon.core.util.gui.GuiItems
import io.github.pylonmc.pylon.core.util.pylonKey
import net.kyori.adventure.text.Component
import org.bukkit.Material
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.github.pylonmc.pylon.core.guide.button

import io.github.pylonmc.pylon.core.addon.PylonAddon
import io.github.pylonmc.pylon.core.guide.pages.research.AddonResearchesPage
import io.github.pylonmc.pylon.core.item.builder.ItemStackBuilder
import org.bukkit.entity.Player
import org.bukkit.event.inventory.ClickType
import org.bukkit.event.inventory.InventoryClickEvent
import xyz.xenondevs.invui.item.impl.AbstractItem

/**
* A button that opens the research page for a specific addon.
*/
class ResearchesButton(val addon: PylonAddon) : AbstractItem() {
val page = AddonResearchesPage(addon)

override fun getItemProvider() = ItemStackBuilder.of(addon.material)
.name(addon.displayName)

override fun handleClick(clickType: ClickType, player: Player, event: InventoryClickEvent) {
page.open(player)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import xyz.xenondevs.invui.item.impl.AbstractItem
* - This is useful for adding visual indicators of the current setting value, such as changing the material or custom model data.
* - The name and lore of the button will be applied on top of this ItemStack.
*
* [placeholderProvider] Provides additional placeholders for the translation. (See [TranslatableComponent.arguments] and [PylonArgument])
* [placeholderProvider] Provides additional placeholders for the translation. (See [net.kyori.adventure.text.TranslatableComponent.arguments] and [PylonArgument])
* - By default there is a placeholder "value" which contains the current setting value.
*/
data class NumericPlayerSettingButton<N : Number>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import xyz.xenondevs.invui.item.impl.AbstractItem
* - The name and lore of the button will be applied on top of this ItemStack.
* - By default the button is lime concrete when enabled and red concrete when disabled with custom model data of "{key}_enabled" and "{key}_disabled" respectively.
*
* [placeholderProvider] Provides additional placeholders for the translation. (See [TranslatableComponent.arguments] and [PylonArgument])
* [placeholderProvider] Provides additional placeholders for the translation. (See [net.kyori.adventure.text.TranslatableComponent.arguments] and [PylonArgument])
*/
data class TogglePlayerSettingButton(
val key: NamespacedKey,
Expand Down

This file was deleted.

Loading