Compare commits

...

13 Commits

Author SHA1 Message Date
Auxilor
c0ed083a5c Fixed PAPI 2022-10-04 11:58:15 +01:00
Auxilor
04f04bb7a6 Fixed custom model data parser 2022-10-04 11:48:06 +01:00
Auxilor
b8a3806ff9 Updated to 6.43.5 2022-10-04 11:44:17 +01:00
Auxilor
ae49d41542 Fixes to placeholders and integrations 2022-10-04 11:43:10 +01:00
Auxilor
5f2255a3bc Fixed initial render 2022-10-03 23:33:39 +01:00
Auxilor
065ccfbe67 Updated to 6.43.4 2022-10-03 22:30:27 +01:00
Auxilor
17727c9015 Optimized second render for captive changes 2022-10-03 22:30:20 +01:00
Auxilor
ea64e69b4d Fixed GUI bug 2022-10-03 22:25:03 +01:00
Auxilor
07ca6c2359 Fixed 2 more GUI bugs 2022-10-03 21:58:53 +01:00
Auxilor
162558b1c2 Updated to 6.43.3 2022-10-03 13:44:28 +01:00
Auxilor
10f9e8dce0 Fixed Skull 2022-10-03 13:44:17 +01:00
Will FP
b02943d7ff Merge pull request #204
Fix: Skull texture out of bounds error
2022-10-03 13:42:39 +01:00
MillionthOdin16
1cf08955a0 Additional check for bounds error
explanation in comment
2022-10-02 19:33:37 -04:00
13 changed files with 111 additions and 45 deletions

View File

@@ -21,7 +21,6 @@ import com.willfp.eco.core.gui.menu.MenuBuilder;
import com.willfp.eco.core.gui.menu.MenuType;
import com.willfp.eco.core.gui.slot.SlotBuilder;
import com.willfp.eco.core.gui.slot.functional.SlotProvider;
import com.willfp.eco.core.integrations.placeholder.PlaceholderIntegration;
import com.willfp.eco.core.items.TestableItem;
import com.willfp.eco.core.placeholder.AdditionalPlayer;
import com.willfp.eco.core.placeholder.PlaceholderInjectable;
@@ -138,10 +137,9 @@ public interface Eco {
* Create a PAPI integration.
*
* @param plugin The plugin.
* @return The integration.
*/
@NotNull
PlaceholderIntegration createPAPIIntegration(@NotNull EcoPlugin plugin);
void createPAPIIntegration(@NotNull EcoPlugin plugin);
/**
* Create a proxy factory.

View File

@@ -13,7 +13,6 @@ import com.willfp.eco.core.factory.MetadataValueFactory;
import com.willfp.eco.core.factory.NamespacedKeyFactory;
import com.willfp.eco.core.factory.RunnableFactory;
import com.willfp.eco.core.integrations.IntegrationLoader;
import com.willfp.eco.core.integrations.placeholder.PlaceholderManager;
import com.willfp.eco.core.proxy.ProxyFactory;
import com.willfp.eco.core.scheduling.Scheduler;
import com.willfp.eco.core.web.UpdateChecker;
@@ -375,8 +374,7 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike {
.collect(Collectors.toSet());
if (enabledPlugins.contains("PlaceholderAPI".toLowerCase())) {
this.loadedIntegrations.add("PlaceholderAPI");
PlaceholderManager.addIntegration(Eco.get().createPAPIIntegration(this));
Eco.get().createPAPIIntegration(this);
}
this.loadIntegrationLoaders().forEach(integrationLoader -> {
@@ -386,6 +384,8 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike {
}
});
this.loadedIntegrations.removeIf(pl -> pl.equalsIgnoreCase(this.getName()));
this.getLogger().info("Loaded integrations: " + String.join(", ", this.getLoadedIntegrations()));
Prerequisite.update();

View File

@@ -139,7 +139,7 @@ public interface MenuBuilder extends PageBuilder {
* @return The builder.
*/
default MenuBuilder maxPages(@NotNull final Function<Player, Integer> pages) {
return onOpen((player, menu) -> menu.addState(player, Page.MAX_PAGE_KEY, pages.apply(player)));
return onRender((player, menu) -> menu.addState(player, Page.MAX_PAGE_KEY, pages.apply(player)));
}
/**

View File

@@ -70,7 +70,7 @@ public final class PlaceholderManager {
/**
* The default PlaceholderAPI pattern; brought in for compatibility.
*/
private static final Pattern PATTERN = Pattern.compile("[%]([^%]+)[%]");
private static final Pattern PATTERN = Pattern.compile("[%]([^% ]+)[%]");
/**
* Register a new placeholder integration.

View File

@@ -31,6 +31,8 @@ class RenderedInventory(
val state = mutableMapOf<String, Any?>()
fun render() {
val previousCaptive = captiveItems.toMap()
captiveItems.clear()
for (row in (1..menu.rows)) {
@@ -60,9 +62,27 @@ class RenderedInventory(
}
menu.runOnRender(player)
// Run second render if captive items changed
if (captiveItems != previousCaptive) {
for (row in (1..menu.rows)) {
for (column in (1..menu.columns)) {
val bukkit = MenuUtils.rowColumnToSlot(row, column, menu.columns)
val slot = menu.getSlot(row, column, player, menu)
val renderedItem = slot.getItemStack(player)
if (!slot.isCaptive(player, menu)) {
inventory.setItem(bukkit, renderedItem)
}
}
}
}
}
fun renderDefaultCaptiveItems() {
menu.runOnRender(player)
for (row in (1..menu.rows)) {
for (column in (1..menu.columns)) {
val bukkit = MenuUtils.rowColumnToSlot(row, column, menu.columns)

View File

@@ -1,13 +1,15 @@
package com.willfp.eco.internal.integrations
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.integrations.placeholder.PlaceholderIntegration
import com.willfp.eco.core.integrations.placeholder.PlaceholderManager
import me.clip.placeholderapi.PlaceholderAPI
import me.clip.placeholderapi.expansion.PlaceholderExpansion
import org.bukkit.entity.Player
class PlaceholderIntegrationPAPI(private val plugin: EcoPlugin) : PlaceholderExpansion(), PlaceholderIntegration {
class PAPIExpansion(private val plugin: EcoPlugin) : PlaceholderExpansion() {
init {
register()
}
override fun persist(): Boolean {
return true
}
@@ -34,29 +36,4 @@ class PlaceholderIntegrationPAPI(private val plugin: EcoPlugin) : PlaceholderExp
): String {
return PlaceholderManager.getResult(player, identifier, plugin)
}
override fun registerIntegration() {
register()
}
override fun getPluginName(): String {
return "PlaceholderAPI"
}
override fun translate(
text: String,
player: Player?
): String {
return PlaceholderAPI.setPlaceholders(player, text)
}
override fun findPlaceholdersIn(text: String): MutableList<String> {
val placeholders = mutableListOf<String>()
val matcher = PlaceholderAPI.getPlaceholderPattern().matcher(text)
while (matcher.find()) {
placeholders.add(matcher.group())
}
return placeholders
}
}
}

View File

@@ -27,6 +27,10 @@ object ArgParserCustomModelData : LookupArgParser {
return Predicate {
val testMeta = it.itemMeta ?: return@Predicate false
if (!testMeta.hasCustomModelData()) {
return@Predicate false
}
testMeta.customModelData == modelData
}
}

View File

@@ -29,7 +29,27 @@ var SkullMeta.texture: String?
setProfile.isAccessible = true
}
if (base64 == null) {
/* This length check below was lost in the conversion. For some reason the base64
* string is length 8 when this is called pretty frequently, causing an
* out of bounds exception.
*
* Could not pass event EntityPotionEffectEvent to Talismans v5.116.0
* java.lang.StringIndexOutOfBoundsException: begin -12, end 8, length 8
* at java.lang.String.checkBoundsBeginEnd(String.java:4604) ~[?:?]
* at java.lang.String.substring(String.java:2707) ~[?:?]
* at java.lang.String.substring(String.java:2680) ~[?:?]
* at com.willfp.eco.internal.spigot.proxy.v1_19_R1.common.SkullKt.setTexture(Skull.kt:36)
*
if (base64.length < 20) {
return
}
*
* ^ Update to this comment: a length 8 string ("textures") was being sent
* because the get() method wasn't working right. This has been fixed, but the
* check needs to remain implemented.
*/
if (base64 == null || base64.length < 20) {
setProfile.invoke(this, null)
} else {
val uuid = UUID(

View File

@@ -34,7 +34,7 @@ import com.willfp.eco.internal.gui.MergedStateMenu
import com.willfp.eco.internal.gui.menu.EcoMenuBuilder
import com.willfp.eco.internal.gui.menu.renderedInventory
import com.willfp.eco.internal.gui.slot.EcoSlotBuilder
import com.willfp.eco.internal.integrations.PlaceholderIntegrationPAPI
import com.willfp.eco.internal.integrations.PAPIExpansion
import com.willfp.eco.internal.logging.EcoLogger
import com.willfp.eco.internal.proxy.EcoProxyFactory
import com.willfp.eco.internal.scheduling.EcoScheduler
@@ -114,8 +114,9 @@ class EcoImpl : EcoSpigotPlugin(), Eco {
override fun createLogger(plugin: EcoPlugin) =
EcoLogger(plugin)
override fun createPAPIIntegration(plugin: EcoPlugin) =
PlaceholderIntegrationPAPI(plugin)
override fun createPAPIIntegration(plugin: EcoPlugin) {
PAPIExpansion(plugin)
}
override fun getEcoPlugin(): EcoPlugin =
this

View File

@@ -14,6 +14,7 @@ import com.willfp.eco.core.integrations.customitems.CustomItemsManager
import com.willfp.eco.core.integrations.economy.EconomyManager
import com.willfp.eco.core.integrations.hologram.HologramManager
import com.willfp.eco.core.integrations.mcmmo.McmmoManager
import com.willfp.eco.core.integrations.placeholder.PlaceholderManager
import com.willfp.eco.core.integrations.shop.ShopManager
import com.willfp.eco.core.items.Items
import com.willfp.eco.internal.entities.EntityArgParserAdult
@@ -106,6 +107,7 @@ import com.willfp.eco.internal.spigot.integrations.hologram.HologramDecentHologr
import com.willfp.eco.internal.spigot.integrations.hologram.HologramHolographicDisplays
import com.willfp.eco.internal.spigot.integrations.mcmmo.McmmoIntegrationImpl
import com.willfp.eco.internal.spigot.integrations.multiverseinventories.MultiverseInventoriesIntegration
import com.willfp.eco.internal.spigot.integrations.placeholder.PlaceholderIntegrationPAPI
import com.willfp.eco.internal.spigot.integrations.shop.ShopDeluxeSellwands
import com.willfp.eco.internal.spigot.integrations.shop.ShopEconomyShopGUI
import com.willfp.eco.internal.spigot.integrations.shop.ShopShopGuiPlus
@@ -311,6 +313,9 @@ abstract class EcoSpigotPlugin : EcoPlugin() {
}
},
// Placeholder
IntegrationLoader("PlaceholderAPI") { PlaceholderManager.addIntegration(PlaceholderIntegrationPAPI()) },
// Misc
IntegrationLoader("mcMMO") { McmmoManager.register(McmmoIntegrationImpl()) },
IntegrationLoader("Multiverse-Inventories") {

View File

@@ -50,6 +50,14 @@ class GUIListener(private val plugin: EcoPlugin) : Listener {
}
}
@EventHandler(
priority = EventPriority.HIGHEST
)
fun handleRender(event: InventoryClickEvent) {
val player = event.whoClicked as? Player ?: return
player.renderActiveMenu()
}
@EventHandler(
priority = EventPriority.HIGH
)
@@ -63,8 +71,6 @@ class GUIListener(private val plugin: EcoPlugin) : Listener {
val (row, column) = MenuUtils.convertSlotToRowColumn(event.slot, menu.columns)
menu.getSlot(row, column, player, menu).handle(player, event, menu)
plugin.scheduler.run { rendered.render() }
}
@EventHandler(
@@ -172,7 +178,6 @@ class GUIListener(private val plugin: EcoPlugin) : Listener {
val rendered = player.renderedInventory ?: return
if (rendered.menu.allowsChangingHeldItem()) {
player.renderActiveMenu()
return
}

View File

@@ -0,0 +1,36 @@
package com.willfp.eco.internal.spigot.integrations.placeholder
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.integrations.placeholder.PlaceholderIntegration
import me.clip.placeholderapi.PlaceholderAPI
import org.bukkit.entity.Player
import java.util.regex.Pattern
class PlaceholderIntegrationPAPI : PlaceholderIntegration {
private val pattern = Pattern.compile("[%]([^% ]+)[%]")
override fun registerIntegration() {
// Do nothing.
}
override fun getPluginName(): String {
return "PlaceholderAPI"
}
override fun translate(
text: String,
player: Player?
): String {
return PlaceholderAPI.setPlaceholders(player, text)
}
override fun findPlaceholdersIn(text: String): MutableList<String> {
val placeholders = mutableListOf<String>()
val matcher = pattern.matcher(text)
while (matcher.find()) {
placeholders.add(matcher.group())
}
return placeholders
}
}

View File

@@ -1,3 +1,3 @@
version = 6.43.2
version = 6.43.5
plugin-name = eco
kotlin.code.style = official