Compare commits

..

47 Commits
6.8.1 ... 6.9.3

Author SHA1 Message Date
Auxilor
9aa465844d Finally fixed Adventure + MiniMessage shading / Dependency issues 2021-10-03 12:54:38 +01:00
Auxilor
a692fbee01 Moved Adventure to api implementation, Removed GriefDefender 2021-10-03 11:51:55 +01:00
Auxilor
4223e8f17a Updated to 6.9.2 2021-10-02 12:20:37 +01:00
Auxilor
5f26b23a53 Adventure bug fixing 2021-10-02 12:20:27 +01:00
Auxilor
c8c179981c Adventure bug fixing 2021-10-02 12:20:05 +01:00
Auxilor
c1b3bec67c Moved adventure off to implementation and relocated 2021-10-01 18:57:00 +01:00
Auxilor
f2535ce75c Updated to 6.9.1 2021-10-01 18:33:14 +01:00
Auxilor
049d64821e Added adventure-api to plugin.yml 2021-10-01 18:32:57 +01:00
Auxilor
bf5766e61c Fixed minimessage bug 2021-10-01 15:32:38 +01:00
Auxilor
38da5fe6d1 Fixed adventure audience bug 2021-10-01 14:05:16 +01:00
Auxilor
e16649873b Moved MiniMessage to being shaded 2021-10-01 13:56:29 +01:00
Will FP
a3b0b4f847 Updated kotlin lib loader to 1.5.31 2021-10-01 12:09:08 +01:00
Will FP
d9f1ddd188 Merge pull request #19 from Auxilor/dependabot/gradle/me.clip-placeholderapi-2.10.10
Bump placeholderapi from 2.10.9 to 2.10.10
2021-10-01 12:07:54 +01:00
Will FP
14a4d9291b Merge pull request #20 from Auxilor/dependabot/gradle/org.jetbrains.kotlin-kotlin-stdlib-1.5.31
Bump kotlin-stdlib from 1.5.21 to 1.5.31
2021-10-01 12:07:40 +01:00
dependabot[bot]
6630044546 Bump placeholderapi from 2.10.9 to 2.10.10
Bumps placeholderapi from 2.10.9 to 2.10.10.

---
updated-dependencies:
- dependency-name: me.clip:placeholderapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-01 11:07:15 +00:00
Will FP
1043981fe4 Merge pull request #22 from Auxilor/dependabot/gradle/com.github.TechFortress-GriefPrevention-16.17.1
Bump GriefPrevention from 16.14.0 to 16.17.1
2021-10-01 12:06:54 +01:00
Will FP
fb0b7c52cf Merge pull request #18 from Auxilor/dependabot/gradle/org.spigotmc-spigot-api-1.17.1-R0.1-SNAPSHOT
Bump spigot-api from 1.17-R0.1-SNAPSHOT to 1.17.1-R0.1-SNAPSHOT
2021-10-01 12:06:26 +01:00
dependabot[bot]
74e5464f7d Bump GriefPrevention from 16.14.0 to 16.17.1
Bumps [GriefPrevention](https://github.com/TechFortress/GriefPrevention) from 16.14.0 to 16.17.1.
- [Release notes](https://github.com/TechFortress/GriefPrevention/releases)
- [Commits](https://github.com/TechFortress/GriefPrevention/compare/16.14.0...16.17.1)

---
updated-dependencies:
- dependency-name: com.github.TechFortress:GriefPrevention
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-01 11:02:04 +00:00
dependabot[bot]
2ad1ff4cdb Bump kotlin-stdlib from 1.5.21 to 1.5.31
Bumps [kotlin-stdlib](https://github.com/JetBrains/kotlin) from 1.5.21 to 1.5.31.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/v1.5.31/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v1.5.21...v1.5.31)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin:kotlin-stdlib
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-01 11:01:47 +00:00
dependabot[bot]
2d47c18be6 Bump spigot-api from 1.17-R0.1-SNAPSHOT to 1.17.1-R0.1-SNAPSHOT
Bumps spigot-api from 1.17-R0.1-SNAPSHOT to 1.17.1-R0.1-SNAPSHOT.

---
updated-dependencies:
- dependency-name: org.spigotmc:spigot-api
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-01 11:00:17 +00:00
Will FP
69e67be436 Create dependabot.yml 2021-10-01 11:59:52 +01:00
Auxilor
c144723d5b Updated to 6.9.0 2021-10-01 11:13:01 +01:00
Auxilor
108375f545 Added formatToComponent throughout StringUtils 2021-10-01 11:12:48 +01:00
Auxilor
83d5b3e96e Closed adventure on disable 2021-10-01 11:09:25 +01:00
Auxilor
37e09a470e Added config thread-safety (hopefully) 2021-10-01 11:05:45 +01:00
Auxilor
1f064110b7 Added MiniMessage markdown (discord flavor) support 2021-10-01 11:01:40 +01:00
Auxilor
94a0b4de5d Moved order of StringUtils#format 2021-10-01 10:57:46 +01:00
Auxilor
8a68666f86 Added adventure into eco 2021-10-01 10:56:05 +01:00
Auxilor
2c218d1088 Internal menu changes 2021-10-01 10:38:46 +01:00
Auxilor
3fa95d82a6 Fixed gradient div by zero exception 2021-10-01 10:34:47 +01:00
Auxilor
9648b42c4d Added MiniMessage support to StringUtils#format 2021-10-01 10:33:09 +01:00
Auxilor
66887f0a3a Updated to 6.8.6 2021-09-30 12:22:16 +01:00
Auxilor
410cdfe7e3 Improved WorldGuard code 2021-09-30 12:22:03 +01:00
Auxilor
bbffdc7e23 Improved WorldGuard code 2021-09-30 12:21:55 +01:00
Will FP
0d267e2bec Merge pull request #16
Fixed WorldGuard AntiGrief manager using damage-animals flag only
2021-09-30 12:15:38 +01:00
Auxilor
578256f89b Updated to 6.8.5 2021-09-29 10:32:24 +01:00
Auxilor
90ecbfce00 Added use-lower-protocollib-priority 2021-09-29 10:32:12 +01:00
_OfTeN_
9945704338 Fixed WorldGuard AntiGrief manager using damage-animals flag only 2021-09-29 00:42:53 +03:00
Auxilor
5c7a7876d8 Improved GriefDefender support 2021-09-27 14:11:42 +01:00
Will FP
94df0e67a6 Merge pull request #15
GriefDefender support
2021-09-27 14:07:56 +01:00
_OfTeN_
92c4e62709 Hopefully added GriefDefender support 2021-09-26 15:00:05 +03:00
Auxilor
e094a1e934 Merge remote-tracking branch 'origin/master' 2021-09-24 09:50:12 +01:00
Auxilor
26c07a20e7 Updated to 6.8.3 2021-09-24 09:50:05 +01:00
Auxilor
ad68e1efef Fixed legacyToJson nullability bug 2021-09-24 09:49:54 +01:00
Auxilor
d8c3a3befa Removed redundant suppression 2021-09-21 19:18:01 +01:00
Auxilor
aa52dcdf94 Updated to 6.8.2 2021-09-20 17:01:39 +01:00
Auxilor
9d3ba7ea88 Improved towny integration 2021-09-20 17:01:16 +01:00
27 changed files with 266 additions and 75 deletions

11
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "gradle" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"

View File

@@ -87,6 +87,7 @@ allprojects {
shadowJar { shadowJar {
relocate('org.bstats', 'com.willfp.eco.shaded.bstats') relocate('org.bstats', 'com.willfp.eco.shaded.bstats')
relocate('net.kyori.adventure.text.minimessage', 'com.willfp.eco.shaded.minimessage')
} }
jar { jar {

View File

@@ -6,12 +6,18 @@ group 'com.willfp'
version rootProject.version version rootProject.version
dependencies { dependencies {
compileOnly 'org.spigotmc:spigot-api:1.17-R0.1-SNAPSHOT' // Adventure
compileOnly 'net.kyori:adventure-platform-bukkit:4.0.0'
compileOnly 'net.kyori:adventure-text-minimessage:4.1.0-SNAPSHOT'
compileOnly 'net.kyori:adventure-api:4.9.1'
compileOnly 'net.kyori:adventure-text-serializer-gson:4.8.1'
compileOnly 'net.kyori:adventure-text-serializer-legacy:4.8.1'
// Other
compileOnly 'org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT'
compileOnly 'org.apache.maven:maven-artifact:3.0.3' compileOnly 'org.apache.maven:maven-artifact:3.0.3'
compileOnly 'com.comphenix.protocol:ProtocolLib:4.6.0-SNAPSHOT' compileOnly 'com.comphenix.protocol:ProtocolLib:4.6.0-SNAPSHOT'
compileOnly 'com.google.code.gson:gson:2.8.7' compileOnly 'com.google.code.gson:gson:2.8.7'
compileOnly 'net.kyori:adventure-text-serializer-gson:4.8.1'
compileOnly 'net.kyori:adventure-text-serializer-legacy:4.8.1'
} }
java { java {
@@ -23,8 +29,8 @@ build.dependsOn publishToMavenLocal
publishing { publishing {
publications { publications {
shadow(MavenPublication) { shadow(MavenPublication) { publication ->
from components.java project.shadow.component(publication)
artifactId 'eco' artifactId 'eco'
} }
} }

View File

@@ -15,6 +15,7 @@ import com.willfp.eco.core.proxy.Cleaner;
import com.willfp.eco.core.proxy.ProxyFactory; import com.willfp.eco.core.proxy.ProxyFactory;
import com.willfp.eco.core.requirement.RequirementFactory; import com.willfp.eco.core.requirement.RequirementFactory;
import com.willfp.eco.core.scheduling.Scheduler; import com.willfp.eco.core.scheduling.Scheduler;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -201,5 +202,14 @@ public interface Handler {
* *
* @return The factory. * @return The factory.
*/ */
@NotNull
RequirementFactory getRequirementFactory(); RequirementFactory getRequirementFactory();
/**
* Get Adventure audiences.
*
* @return The audiences.
*/
@NotNull
BukkitAudiences getAdventure();
} }

View File

@@ -150,7 +150,6 @@ public class Display {
* @param player The player. * @param player The player.
* @param args The args. * @param args The args.
*/ */
@SuppressWarnings("checkstyle:FinalParameters")
@ApiStatus.Internal @ApiStatus.Internal
public static void callDisplayModule(@NotNull final DisplayModule module, public static void callDisplayModule(@NotNull final DisplayModule module,
@NotNull final ItemStack itemStack, @NotNull final ItemStack itemStack,

View File

@@ -0,0 +1,36 @@
package com.willfp.eco.util;
import com.willfp.eco.core.Eco;
import lombok.experimental.UtilityClass;
import net.kyori.adventure.audience.Audience;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
/**
* Utilities / API methods for players.
*/
@UtilityClass
public class PlayerUtils {
/**
* Get the audience from a player.
*
* @param player The player.
* @return The audience.
*/
@NotNull
public Audience getAudience(@NotNull final Player player) {
return Eco.getHandler().getAdventure().player(player);
}
/**
* Get the audience from a command sender.
*
* @param sender The command sender.
* @return The audience.
*/
@NotNull
public Audience getAudience(@NotNull final CommandSender sender) {
return Eco.getHandler().getAdventure().sender(sender);
}
}

View File

@@ -1,10 +1,13 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.willfp.eco.core.Prerequisite;
import com.willfp.eco.core.integrations.placeholder.PlaceholderManager; import com.willfp.eco.core.integrations.placeholder.PlaceholderManager;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.markdown.DiscordFlavor;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
@@ -12,7 +15,7 @@ import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.awt.Color; import java.awt.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -26,7 +29,7 @@ import static net.md_5.bungee.api.ChatColor.COLOR_CHAR;
* Utilities / API methods for strings. * Utilities / API methods for strings.
*/ */
@UtilityClass @UtilityClass
public class StringUtils { public class StringUtils {
/** /**
* Regexes for gradients. * Regexes for gradients.
*/ */
@@ -168,6 +171,68 @@ public class StringUtils {
return format(message, null, option); return format(message, null, option);
} }
/**
* Format a string to a component.
* <p>
* Converts color codes and placeholders.
*
* @param message The message to translate.
* @return The message, formatted, as a component.
* @see StringUtils#format(String, Player)
*/
@NotNull
public Component formatToComponent(@NotNull final String message) {
return formatToComponent(message, (Player) null);
}
/**
* Format a string.
* <p>
* Converts color codes and placeholders for a player.
*
* @param message The message to format.
* @param player The player to translate placeholders with respect to.
* @return The message, formatted.
*/
@NotNull
public Component formatToComponent(@NotNull final String message,
@Nullable final Player player) {
return formatToComponent(message, player, FormatOption.WITH_PLACEHOLDERS);
}
/**
* Format a string to a component.
* <p>
* Converts color codes and placeholders if specified.
*
* @param message The message to translate.
* @param option The format option.
* @return The message, formatted, as a component.
* @see StringUtils#format(String, Player)
*/
@NotNull
public Component formatToComponent(@NotNull final String message,
@NotNull final FormatOption option) {
return formatToComponent(message, null, option);
}
/**
* Format a string to a component.
* <p>
* Coverts color codes and placeholders for a player if specified.
*
* @param message The message to format.
* @param player The player to translate placeholders with respect to.
* @param option The format options.
* @return The message, formatted, as a component.
*/
@NotNull
public Component formatToComponent(@NotNull final String message,
@Nullable final Player player,
@NotNull final FormatOption option) {
return toComponent(format(message, player, option));
}
/** /**
* Format a string. * Format a string.
* <p> * <p>
@@ -183,15 +248,22 @@ public class StringUtils {
@Nullable final Player player, @Nullable final Player player,
@NotNull final FormatOption option) { @NotNull final FormatOption option) {
String processedMessage = message; String processedMessage = message;
processedMessage = translateGradients(processedMessage);
if (option == FormatOption.WITH_PLACEHOLDERS) { if (option == FormatOption.WITH_PLACEHOLDERS) {
processedMessage = PlaceholderManager.translatePlaceholders(processedMessage, player); processedMessage = PlaceholderManager.translatePlaceholders(processedMessage, player);
} }
processedMessage = translateGradients(processedMessage);
processedMessage = translateHexColorCodes(processedMessage); processedMessage = translateHexColorCodes(processedMessage);
processedMessage = ChatColor.translateAlternateColorCodes('&', processedMessage); processedMessage = ChatColor.translateAlternateColorCodes('&', processedMessage);
if (Prerequisite.HAS_PAPER.isMet()) {
processedMessage = translateMiniMessage(processedMessage);
}
return processedMessage; return processedMessage;
} }
private static String translateMiniMessage(@NotNull final String message) {
return LEGACY_COMPONENT_SERIALIZER.serialize(MiniMessage.withMarkdownFlavor(DiscordFlavor.get()).parse(message));
}
private static String translateHexColorCodes(@NotNull final String message) { private static String translateHexColorCodes(@NotNull final String message) {
String processedMessage = message; String processedMessage = message;
for (Pattern pattern : HEX_PATTERNS) { for (Pattern pattern : HEX_PATTERNS) {
@@ -257,6 +329,9 @@ public class StringUtils {
@NotNull final Color end, @NotNull final Color end,
final int step) { final int step) {
ChatColor[] colors = new ChatColor[step]; ChatColor[] colors = new ChatColor[step];
if (step <= 1) {
return colors;
}
int stepR = Math.abs(start.getRed() - end.getRed()) / (step - 1); int stepR = Math.abs(start.getRed() - end.getRed()) / (step - 1);
int stepG = Math.abs(start.getGreen() - end.getGreen()) / (step - 1); int stepG = Math.abs(start.getGreen() - end.getGreen()) / (step - 1);
int stepB = Math.abs(start.getBlue() - end.getBlue()) / (step - 1); int stepB = Math.abs(start.getBlue() - end.getBlue()) / (step - 1);
@@ -336,10 +411,14 @@ public class StringUtils {
* @return The JSON String. * @return The JSON String.
*/ */
@NotNull @NotNull
public String legacyToJson(@NotNull final String legacy) { public String legacyToJson(@Nullable final String legacy) {
String processed = legacy;
if (legacy == null) {
processed = "";
}
return GsonComponentSerializer.gson().serialize( return GsonComponentSerializer.gson().serialize(
Component.empty().decoration(TextDecoration.ITALIC, false).append( Component.empty().decoration(TextDecoration.ITALIC, false).append(
LEGACY_COMPONENT_SERIALIZER.deserialize(legacy) LEGACY_COMPONENT_SERIALIZER.deserialize(processed)
) )
); );
} }
@@ -357,6 +436,33 @@ public class StringUtils {
); );
} }
/**
* Convert legacy (bukkit) text to Component.
*
* @param legacy The legacy text.
* @return The component.
*/
@NotNull
public Component toComponent(@Nullable final String legacy) {
String processed = legacy;
if (legacy == null) {
processed = "";
}
return LEGACY_COMPONENT_SERIALIZER.deserialize(processed);
}
/**
* Convert Component to legacy (bukkit) text.
*
* @param component The component.
* @return The legacy text.
*/
@NotNull
public String toLegacy(@NotNull final Component component) {
return LEGACY_COMPONENT_SERIALIZER.serialize(component);
}
/** /**
* Options for formatting. * Options for formatting.
*/ */

View File

@@ -16,6 +16,6 @@ subprojects {
dependencies { dependencies {
compileOnly project(":eco-api") compileOnly project(":eco-api")
compileOnly 'org.jetbrains.kotlin:kotlin-stdlib:1.5.21' compileOnly 'org.jetbrains.kotlin:kotlin-stdlib:1.5.31'
} }
} }

View File

@@ -2,7 +2,9 @@ group 'com.willfp'
version rootProject.version version rootProject.version
dependencies { dependencies {
compileOnly 'org.spigotmc:spigot-api:1.17-R0.1-SNAPSHOT' compileOnly 'org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT'
compileOnly 'me.clip:placeholderapi:2.10.9' compileOnly 'me.clip:placeholderapi:2.10.10'
compileOnly 'org.reflections:reflections:0.9.12' compileOnly 'org.reflections:reflections:0.9.12'
compileOnly 'net.kyori:adventure-text-minimessage:4.1.0-SNAPSHOT'
compileOnly 'net.kyori:adventure-platform-bukkit:4.0.0'
} }

View File

@@ -6,14 +6,15 @@ import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.eco.util.StringUtils import com.willfp.eco.util.StringUtils
import org.apache.commons.lang.Validate import org.apache.commons.lang.Validate
import java.util.* import java.util.*
import java.util.concurrent.ConcurrentHashMap
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
open class EcoJSONConfigWrapper : JSONConfig { open class EcoJSONConfigWrapper : JSONConfig {
val handle: Gson = GsonBuilder().setPrettyPrinting().create() val handle: Gson = GsonBuilder().setPrettyPrinting().create()
val values = mutableMapOf<String, Any?>() val values = ConcurrentHashMap<String, Any?>()
private val cache = mutableMapOf<String, Any>() private val cache = ConcurrentHashMap<String, Any>()
fun init(values: Map<String, Any?>) { fun init(values: Map<String, Any?>) {
this.values.clear() this.values.clear()

View File

@@ -6,11 +6,12 @@ import org.apache.commons.lang.Validate
import org.bukkit.configuration.ConfigurationSection import org.bukkit.configuration.ConfigurationSection
import org.bukkit.configuration.file.YamlConfiguration import org.bukkit.configuration.file.YamlConfiguration
import java.io.StringReader import java.io.StringReader
import java.util.concurrent.ConcurrentHashMap
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
open class EcoYamlConfigWrapper<T : ConfigurationSection> : Config { open class EcoYamlConfigWrapper<T : ConfigurationSection> : Config {
lateinit var handle: T lateinit var handle: T
private val cache = mutableMapOf<String, Any?>() private val cache = ConcurrentHashMap<String, Any?>()
protected fun init(config: T): Config { protected fun init(config: T): Config {
handle = config handle = config

View File

@@ -22,11 +22,11 @@ class EcoMenu(
): Menu { ): Menu {
override fun getSlot(row: Int, column: Int): Slot { override fun getSlot(row: Int, column: Int): Slot {
if (row < 1 || row > this.rows) { if (row < 1 || row > this.rows) {
throw IllegalArgumentException("Invalid row number!") return slots[0][0]
} }
if (column < 1 || column > 9) { if (column < 1 || column > 9) {
throw IllegalArgumentException("Invalid column number!") return slots[0][0]
} }
return slots[row - 1][column - 1] return slots[row - 1][column - 1]

View File

@@ -18,9 +18,7 @@ class ExtendedInventory(
fun refresh(player: Player) { fun refresh(player: Player) {
captiveItems.clear() captiveItems.clear()
for (i in 0 until inventory.size) { for (i in 0 until inventory.size) {
val pair = MenuUtils.convertSlotToRowColumn(i) val (row, column) = MenuUtils.convertSlotToRowColumn(i)
val row = pair.first!!
val column = pair.second!!
val slot = menu.getSlot(row, column) val slot = menu.getSlot(row, column)
if (slot is EcoCaptivatorSlot) { if (slot is EcoCaptivatorSlot) {
val defaultItem = slot.getItemStack(player) val defaultItem = slot.getItemStack(player)

View File

@@ -2,10 +2,11 @@ package com.willfp.eco.internal.gui.menu
import com.willfp.eco.core.gui.menu.Menu import com.willfp.eco.core.gui.menu.Menu
import org.bukkit.inventory.Inventory import org.bukkit.inventory.Inventory
import java.util.*
object MenuHandler { object MenuHandler {
private val menus = mutableMapOf<ExtendedInventory, EcoMenu>() private val menus = WeakHashMap<ExtendedInventory, EcoMenu>()
private val inventories = mutableMapOf<Inventory, ExtendedInventory>() private val inventories = WeakHashMap<Inventory, ExtendedInventory>()
fun registerMenu( fun registerMenu(
inventory: Inventory, inventory: Inventory,

View File

@@ -3,22 +3,29 @@ version rootProject.version
dependencies { dependencies {
implementation 'org.bstats:bstats-bukkit:1.7' implementation 'org.bstats:bstats-bukkit:1.7'
implementation('net.kyori:adventure-text-minimessage:4.1.0-SNAPSHOT') {
exclude group: 'net.kyori', module: 'adventure-api'
}
compileOnly 'net.kyori:adventure-platform-bukkit:4.0.0'
compileOnly 'net.kyori:adventure-api:4.9.1'
compileOnly 'net.kyori:adventure-text-serializer-gson:4.8.1'
compileOnly 'net.kyori:adventure-text-serializer-legacy:4.8.1'
compileOnly 'org.apache.maven:maven-artifact:3.0.3' compileOnly 'org.apache.maven:maven-artifact:3.0.3'
compileOnly 'com.google.code.gson:gson:2.8.7' compileOnly 'com.google.code.gson:gson:2.8.7'
compileOnly 'org.spigotmc:spigot-api:1.17-R0.1-SNAPSHOT' compileOnly 'org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT'
compileOnly project(":eco-core:core-proxy") compileOnly project(":eco-core:core-proxy")
compileOnly project(":eco-core:core-backend") compileOnly project(":eco-core:core-backend")
compileOnly 'com.comphenix.protocol:ProtocolLib:4.6.0-SNAPSHOT' compileOnly 'com.comphenix.protocol:ProtocolLib:4.6.0-SNAPSHOT'
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.4-SNAPSHOT' compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.4-SNAPSHOT'
compileOnly 'com.github.TechFortress:GriefPrevention:16.14.0' compileOnly 'com.github.TechFortress:GriefPrevention:16.17.1'
compileOnly 'com.massivecraft:Factions:1.6.9.5-U0.5.10' compileOnly 'com.massivecraft:Factions:1.6.9.5-U0.5.10'
compileOnly 'com.github.cryptomorin:kingdoms:1.10.14' compileOnly 'com.github.cryptomorin:kingdoms:1.10.14'
compileOnly 'com.github.TownyAdvanced:Towny:0.96.2.0' compileOnly 'com.github.TownyAdvanced:Towny:0.97.1.0'
compileOnly 'com.github.angeschossen:LandsAPI:4.7.3' compileOnly 'com.github.angeschossen:LandsAPI:4.7.3'
compileOnly 'fr.neatmonster:nocheatplus:3.16.1-SNAPSHOT' compileOnly 'fr.neatmonster:nocheatplus:3.16.1-SNAPSHOT'
compileOnly 'com.github.jiangdashao:matrix-api-repo:317d4635fd' compileOnly 'com.github.jiangdashao:matrix-api-repo:317d4635fd'
compileOnly 'com.gmail.nossr50.mcMMO:mcMMO:2.1.157' compileOnly 'com.gmail.nossr50.mcMMO:mcMMO:2.1.157'
compileOnly 'me.clip:placeholderapi:2.10.9' compileOnly 'me.clip:placeholderapi:2.10.10'
compileOnly 'com.willfp:Oraxen:e1f4003d8d' compileOnly 'com.willfp:Oraxen:e1f4003d8d'
compileOnly 'com.github.brcdev-minecraft:shopgui-api:2.2.0' compileOnly 'com.github.brcdev-minecraft:shopgui-api:2.2.0'
compileOnly 'com.github.LoneDev6:API-ItemsAdder:2.4.7' compileOnly 'com.github.LoneDev6:API-ItemsAdder:2.4.7'

View File

@@ -35,6 +35,7 @@ import com.willfp.eco.internal.requirement.EcoRequirementFactory
import com.willfp.eco.internal.scheduling.EcoScheduler import com.willfp.eco.internal.scheduling.EcoScheduler
import com.willfp.eco.proxy.FastItemStackFactoryProxy import com.willfp.eco.proxy.FastItemStackFactoryProxy
import com.willfp.eco.spigot.integrations.bstats.MetricHandler import com.willfp.eco.spigot.integrations.bstats.MetricHandler
import net.kyori.adventure.platform.bukkit.BukkitAudiences
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import java.util.logging.Logger import java.util.logging.Logger
@@ -42,6 +43,7 @@ import java.util.logging.Logger
class EcoHandler : EcoSpigotPlugin(), Handler { class EcoHandler : EcoSpigotPlugin(), Handler {
private val cleaner = EcoCleaner() private val cleaner = EcoCleaner()
private val requirementFactory = EcoRequirementFactory() private val requirementFactory = EcoRequirementFactory()
private lateinit var adventure: BukkitAudiences
override fun createScheduler(plugin: EcoPlugin): Scheduler { override fun createScheduler(plugin: EcoPlugin): Scheduler {
return EcoScheduler(plugin) return EcoScheduler(plugin)
@@ -126,4 +128,12 @@ class EcoHandler : EcoSpigotPlugin(), Handler {
override fun getRequirementFactory(): RequirementFactory { override fun getRequirementFactory(): RequirementFactory {
return requirementFactory return requirementFactory
} }
override fun getAdventure(): BukkitAudiences {
return adventure
}
fun setAdventure(adventure: BukkitAudiences) {
this.adventure = adventure
}
} }

View File

@@ -1,6 +1,7 @@
package com.willfp.eco.spigot package com.willfp.eco.spigot
import com.willfp.eco.core.AbstractPacketAdapter import com.willfp.eco.core.AbstractPacketAdapter
import com.willfp.eco.core.Eco
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.display.Display import com.willfp.eco.core.display.Display
import com.willfp.eco.core.integrations.IntegrationLoader import com.willfp.eco.core.integrations.IntegrationLoader
@@ -31,6 +32,7 @@ import com.willfp.eco.spigot.integrations.shop.ShopShopGuiPlus
import com.willfp.eco.spigot.recipes.ShapedRecipeListener import com.willfp.eco.spigot.recipes.ShapedRecipeListener
import com.willfp.eco.util.BlockUtils import com.willfp.eco.util.BlockUtils
import com.willfp.eco.util.SkullUtils import com.willfp.eco.util.SkullUtils
import net.kyori.adventure.platform.bukkit.BukkitAudiences
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.block.Block import org.bukkit.block.Block
@@ -67,6 +69,7 @@ abstract class EcoSpigotPlugin : EcoPlugin(
override fun handleEnable() { override fun handleEnable() {
CollatedRunnable(this) CollatedRunnable(this)
(Eco.getHandler() as EcoHandler).adventure = BukkitAudiences.create(this)
this.logger.info("Ignore messages about deprecated events!") this.logger.info("Ignore messages about deprecated events!")
@@ -87,6 +90,10 @@ abstract class EcoSpigotPlugin : EcoPlugin(
this.getProxy(FastItemStackFactoryProxy::class.java).create(ItemStack(Material.AIR)).unwrap() this.getProxy(FastItemStackFactoryProxy::class.java).create(ItemStack(Material.AIR)).unwrap()
} }
override fun handleDisable() {
Eco.getHandler().adventure.close()
}
override fun handleReload() { override fun handleReload() {
CollatedRunnable(this) CollatedRunnable(this)
DropManager.update(this) DropManager.update(this)

View File

@@ -11,7 +11,10 @@ import com.willfp.eco.proxy.ChatComponentProxy
import org.bukkit.entity.Player import org.bukkit.entity.Player
class PacketChat(plugin: EcoPlugin) : class PacketChat(plugin: EcoPlugin) :
AbstractPacketAdapter(plugin, PacketType.Play.Server.CHAT, ListenerPriority.MONITOR, true) { AbstractPacketAdapter(plugin,
PacketType.Play.Server.CHAT,
if (plugin.configYml.getBool("use-lower-protocollib-priority")) ListenerPriority.NORMAL else ListenerPriority.MONITOR,
true) {
override fun onSend( override fun onSend(
packet: PacketContainer, packet: PacketContainer,
player: Player, player: Player,

View File

@@ -13,7 +13,10 @@ import org.bukkit.inventory.ItemFlag
import org.bukkit.inventory.MerchantRecipe import org.bukkit.inventory.MerchantRecipe
class PacketOpenWindowMerchant(plugin: EcoPlugin) : class PacketOpenWindowMerchant(plugin: EcoPlugin) :
AbstractPacketAdapter(plugin, PacketType.Play.Server.OPEN_WINDOW_MERCHANT, ListenerPriority.MONITOR, true) { AbstractPacketAdapter(plugin,
PacketType.Play.Server.OPEN_WINDOW_MERCHANT,
if (plugin.configYml.getBool("use-lower-protocollib-priority")) ListenerPriority.NORMAL else ListenerPriority.MONITOR,
true) {
override fun onSend( override fun onSend(
packet: PacketContainer, packet: PacketContainer,
player: Player, player: Player,

View File

@@ -23,9 +23,7 @@ class GUIListener(private val plugin: EcoPlugin) : Listener {
return return
} }
val menu = MenuHandler.getMenu(event.clickedInventory ?: return) ?: return val menu = MenuHandler.getMenu(event.clickedInventory ?: return) ?: return
val rowColumn = MenuUtils.convertSlotToRowColumn(event.slot) val (row, column) = MenuUtils.convertSlotToRowColumn(event.slot)
val row = rowColumn.first!!
val column = rowColumn.second!!
val slot = menu.getSlot(row, column) val slot = menu.getSlot(row, column)
Validate.isTrue(slot is EcoSlot, "Slot not instance of EcoSlot!") Validate.isTrue(slot is EcoSlot, "Slot not instance of EcoSlot!")
val ecoSlot = menu.getSlot(row, column) as EcoSlot val ecoSlot = menu.getSlot(row, column) as EcoSlot

View File

@@ -2,9 +2,7 @@ package com.willfp.eco.spigot.integrations.antigrief
import com.palmergames.bukkit.towny.TownyAPI import com.palmergames.bukkit.towny.TownyAPI
import com.palmergames.bukkit.towny.TownyUniverse import com.palmergames.bukkit.towny.TownyUniverse
import com.palmergames.bukkit.towny.`object`.Town
import com.palmergames.bukkit.towny.`object`.TownyPermission import com.palmergames.bukkit.towny.`object`.TownyPermission
import com.palmergames.bukkit.towny.`object`.WorldCoord
import com.palmergames.bukkit.towny.utils.PlayerCacheUtil import com.palmergames.bukkit.towny.utils.PlayerCacheUtil
import com.willfp.eco.core.integrations.antigrief.AntigriefWrapper import com.willfp.eco.core.integrations.antigrief.AntigriefWrapper
import org.bukkit.Location import org.bukkit.Location
@@ -67,22 +65,8 @@ class AntigriefTowny : AntigriefWrapper {
true true
} }
} }
if (victim is Player) { val townBlock = TownyAPI.getInstance().getTownBlock(victim.location) ?: return true
try { return townBlock.permissions.pvp
val town: Town = WorldCoord.parseWorldCoord(victim.getLocation()).townBlock.town
return town.isPVP
} catch (ignored: Exception) {
// If exception, no town was found, thus return true.
}
} else {
try {
val town: Town = WorldCoord.parseWorldCoord(victim.location).townBlock.town
return town.hasMobs()
} catch (ignored: Exception) {
// If exception, no town was found, thus return true.
}
}
return true
} }
override fun getPluginName(): String { override fun getPluginName(): String {

View File

@@ -11,7 +11,9 @@ import com.willfp.eco.core.integrations.antigrief.AntigriefWrapper
import org.apache.commons.lang.Validate import org.apache.commons.lang.Validate
import org.bukkit.Location import org.bukkit.Location
import org.bukkit.block.Block import org.bukkit.block.Block
import org.bukkit.entity.Animals
import org.bukkit.entity.LivingEntity import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Monster
import org.bukkit.entity.Player import org.bukkit.entity.Player
class AntigriefWorldGuard : AntigriefWrapper { class AntigriefWorldGuard : AntigriefWrapper {
@@ -79,22 +81,21 @@ class AntigriefWorldGuard : AntigriefWrapper {
val localPlayer: LocalPlayer = WorldGuardPlugin.inst().wrapPlayer(player) val localPlayer: LocalPlayer = WorldGuardPlugin.inst().wrapPlayer(player)
val container: RegionContainer = WorldGuard.getInstance().platform.regionContainer val container: RegionContainer = WorldGuard.getInstance().platform.regionContainer
val query: RegionQuery = container.createQuery() val query: RegionQuery = container.createQuery()
if (victim is Player) { val flag = when(victim) {
if (!query.testBuild(BukkitAdapter.adapt(victim.getLocation()), localPlayer, Flags.PVP)) { is Player -> Flags.PVP
return WorldGuard.getInstance().platform.sessionManager.hasBypass( is Monster -> Flags.MOB_DAMAGE
localPlayer, is Animals -> Flags.DAMAGE_ANIMALS
BukkitAdapter.adapt(player.world) else -> return true
) }
}
} else { return if (!query.testBuild(BukkitAdapter.adapt(victim.location), localPlayer, flag)) {
if (!query.testBuild(BukkitAdapter.adapt(victim.location), localPlayer, Flags.DAMAGE_ANIMALS)) { WorldGuard.getInstance().platform.sessionManager.hasBypass(
return WorldGuard.getInstance().platform.sessionManager.hasBypass( localPlayer,
localPlayer, BukkitAdapter.adapt(player.world)
BukkitAdapter.adapt(player.world) )
) } else {
} true
} }
return true
} }
override fun getPluginName(): String { override fun getPluginName(): String {

View File

@@ -14,4 +14,9 @@ use-fast-collated-drops: true
# bStats is important and you should keep it enabled. # bStats is important and you should keep it enabled.
# This option is only here because of compliance with data protection laws. # This option is only here because of compliance with data protection laws.
enable-bstats: true enable-bstats: true
# Some plugins use their own item display systems (eg Triton)
# And must be ran after eco. Don't enable this unless you run a conflicting plugin
# and have been told to enable it.
use-lower-protocollib-priority: false

View File

@@ -24,10 +24,11 @@ softdepend:
- ShopGUIPlus - ShopGUIPlus
- ItemsAdder - ItemsAdder
- Oraxen - Oraxen
- HeadDatabase
libraries: libraries:
- org.reflections:reflections:0.9.12 - 'org.reflections:reflections:0.9.12'
- org.apache.maven:maven-artifact:3.0.3 - 'org.apache.maven:maven-artifact:3.0.3'
- net.kyori:adventure-text-serializer-gson:4.8.1 - 'org.jetbrains.kotlin:kotlin-stdlib:1.5.31'
- net.kyori:adventure-text-serializer-legacy:4.8.1 - 'net.kyori:adventure-platform-bukkit:4.0.0'
- org.jetbrains.kotlin:kotlin-stdlib:1.5.21 - 'net.kyori:adventure-api:4.9.1'
- 'net.kyori:adventure-text-serializer-gson:4.8.1'
- 'net.kyori:adventure-text-serializer-legacy:4.8.1'

View File

@@ -2,5 +2,5 @@ group 'com.willfp'
version rootProject.version version rootProject.version
dependencies { dependencies {
compileOnly 'org.spigotmc:spigot-api:1.17-R0.1-SNAPSHOT' compileOnly 'org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT'
} }

View File

@@ -1,2 +1,2 @@
version = 6.8.1 version = 6.9.3
plugin-name = eco plugin-name = eco

Binary file not shown.