diff --git a/build.gradle.kts b/build.gradle.kts index 2ca845ac..c0a47616 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ buildscript { } dependencies { - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10") } } @@ -13,7 +13,7 @@ plugins { id("com.github.johnrengelman.shadow") version "7.1.2" id("maven-publish") id("java") - kotlin("jvm") version "1.6.21" + kotlin("jvm") version "1.7.10" } dependencies { @@ -81,8 +81,8 @@ allprojects { dependencies { // Kotlin - implementation(kotlin("stdlib", version = "1.6.21")) - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1") + implementation(kotlin("stdlib", version = "1.7.10")) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.2") // Included in spigot jar, no need to move to implementation compileOnly("org.jetbrains:annotations:23.0.0") diff --git a/eco-api/src/main/java/com/willfp/eco/core/display/DisplayModule.java b/eco-api/src/main/java/com/willfp/eco/core/display/DisplayModule.java index 1feab3b6..5c000ae9 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/display/DisplayModule.java +++ b/eco-api/src/main/java/com/willfp/eco/core/display/DisplayModule.java @@ -64,6 +64,21 @@ public abstract class DisplayModule extends PluginDependent { // Technically optional. } + /** + * Display an item. + * + * @param itemStack The item. + * @param player The player. + * @param properties The properties. + * @param args Optional args for display. + */ + public void display(@NotNull final ItemStack itemStack, + @Nullable final Player player, + @NotNull final DisplayProperties properties, + @NotNull final Object... args) { + // Technically optional. + } + /** * Revert an item. * diff --git a/eco-api/src/main/java/com/willfp/eco/core/display/DisplayProperties.java b/eco-api/src/main/java/com/willfp/eco/core/display/DisplayProperties.java new file mode 100644 index 00000000..ad0befe2 --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/display/DisplayProperties.java @@ -0,0 +1,18 @@ +package com.willfp.eco.core.display; + +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +/** + * Extra properties passed into {@link DisplayModule}. + * + * @param inInventory If the item was in an inventory. + * @param inGui If the item is assumed to be in a gui. (Not perfectly accurate). + * @param originalItem The original item, not to be modified. + */ +public record DisplayProperties( + boolean inInventory, + boolean inGui, + @NotNull ItemStack originalItem +) { +} diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/display/EcoDisplayHandler.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/display/EcoDisplayHandler.kt index d0680b4f..199869fe 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/display/EcoDisplayHandler.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/display/EcoDisplayHandler.kt @@ -4,6 +4,7 @@ import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.display.Display import com.willfp.eco.core.display.DisplayHandler import com.willfp.eco.core.display.DisplayModule +import com.willfp.eco.core.display.DisplayProperties import com.willfp.eco.core.fast.fast import org.bukkit.NamespacedKey import org.bukkit.entity.Player @@ -32,13 +33,21 @@ class EcoDisplayHandler(plugin: EcoPlugin) : DisplayHandler { } } - Display.revert(itemStack) if (!itemStack.hasItemMeta()) { return itemStack } + val original = itemStack.clone() + val inventory = player?.openInventory?.topInventory + val inInventory = inventory?.contains(original) ?: false + + val props = DisplayProperties( + inInventory, + inInventory && inventory?.holder == null, + original + ) for ((_, modules) in registeredModules) { for (module in modules) { @@ -48,6 +57,7 @@ class EcoDisplayHandler(plugin: EcoPlugin) : DisplayHandler { if (player != null) { module.display(itemStack, player as Player?, *varargs) + module.display(itemStack, player as Player?, props, *varargs) } } }