Skip to content

implement Folia support #114

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open
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
5 changes: 5 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ dependencies {
implementation(libs.nashorn)
implementation(libs.adventure.platform)
implementation(libs.adventure.minimessage)
implementation(libs.minelib.scheduler.global)
implementation(libs.minelib.scheduler.async)
implementation(libs.minelib.scheduler.entity)
implementation(libs.minelib.scheduler.canceller)

compileOnly("org.jetbrains:annotations:23.0.0")
}
Expand All @@ -49,6 +53,7 @@ tasks {
relocate("org.objectweb.asm", "com.extendedclip.deluxemenus.libs.asm")
relocate("org.openjdk.nashorn", "com.extendedclip.deluxemenus.libs.nashorn")
relocate("net.kyori", "com.extendedclip.deluxemenus.libs.adventure")
relocate("io.github.projectunified.minelib", "com.extendedclip.deluxemenus.libs.minelib")
archiveFileName.set("DeluxeMenus-${rootProject.version}.jar")
}
java {
Expand Down
5 changes: 5 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ score = "4.24.3.5"
nashorn = "15.6"
adventure-platform = "4.3.4"
adventure-minimessage = "4.18.0"
minelib = "1.2.1"

[libraries]
# Compile only
Expand All @@ -33,3 +34,7 @@ score = { module = "com.github.Ssomar-Developement:SCore", version.ref = "score"
nashorn = { module = "org.openjdk.nashorn:nashorn-core", version.ref = "nashorn" }
adventure-platform = { module = "net.kyori:adventure-platform-bukkit", version.ref = "adventure-platform" }
adventure-minimessage = { module = "net.kyori:adventure-text-minimessage", version.ref = "adventure-minimessage" }
minelib-scheduler-global = { module = "io.github.projectunified:minelib-scheduler-global", version.ref = "minelib" }
minelib-scheduler-async = { module = "io.github.projectunified:minelib-scheduler-async", version.ref = "minelib" }
minelib-scheduler-entity = { module = "io.github.projectunified:minelib-scheduler-entity", version.ref = "minelib" }
minelib-scheduler-canceller = { module = "io.github.projectunified:minelib-scheduler-canceller", version.ref = "minelib" }
33 changes: 11 additions & 22 deletions src/main/java/com/extendedclip/deluxemenus/DeluxeMenus.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,7 @@
import com.extendedclip.deluxemenus.config.GeneralConfig;
import com.extendedclip.deluxemenus.dupe.DupeFixer;
import com.extendedclip.deluxemenus.dupe.MenuItemMarker;
import com.extendedclip.deluxemenus.hooks.BaseHeadHook;
import com.extendedclip.deluxemenus.hooks.ExecutableBlocksHook;
import com.extendedclip.deluxemenus.hooks.ExecutableItemsHook;
import com.extendedclip.deluxemenus.hooks.HeadDatabaseHook;
import com.extendedclip.deluxemenus.hooks.ItemHook;
import com.extendedclip.deluxemenus.hooks.ItemsAdderHook;
import com.extendedclip.deluxemenus.hooks.MMOItemsHook;
import com.extendedclip.deluxemenus.hooks.NamedHeadHook;
import com.extendedclip.deluxemenus.hooks.OraxenHook;
import com.extendedclip.deluxemenus.hooks.TextureHeadHook;
import com.extendedclip.deluxemenus.hooks.VaultHook;
import com.extendedclip.deluxemenus.hooks.*;
import com.extendedclip.deluxemenus.listener.PlayerListener;
import com.extendedclip.deluxemenus.menu.Menu;
import com.extendedclip.deluxemenus.menu.options.HeadType;
Expand All @@ -30,6 +20,7 @@
import com.extendedclip.deluxemenus.utils.VersionHelper;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import io.github.projectunified.minelib.scheduler.canceller.TaskCanceller;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
Expand All @@ -41,11 +32,7 @@
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.function.Function;
import java.util.logging.Level;
import java.util.stream.Collectors;
Expand All @@ -56,21 +43,23 @@ public class DeluxeMenus extends JavaPlugin {

private static final DebugLevel STACKTRACE_PRINT_LEVEL = DebugLevel.MEDIUM;

private static DeluxeMenus instance;
private final GeneralConfig generalConfig = new GeneralConfig(this);
private PersistentMetaHandler persistentMetaHandler;
private MenuItemMarker menuItemMarker;

private BukkitAudiences audiences;

private VaultHook vaultHook;

private ItemStack head;
private Map<String, ItemHook> itemHooks;

private final GeneralConfig generalConfig = new GeneralConfig(this);
private DeluxeMenusConfig menuConfig;

public static DeluxeMenus getInstance() {
return instance;
}

@Override
public void onLoad() {
instance = this;
if (NbtProvider.isAvailable()) {
this.debug(DebugLevel.HIGHEST, Level.INFO, "NMS hook has been setup successfully!");
return;
Expand Down Expand Up @@ -119,7 +108,7 @@ public void onEnable() {
public void onDisable() {
Bukkit.getMessenger().unregisterOutgoingPluginChannel(this, "BungeeCord");

Bukkit.getScheduler().cancelTasks(this);
TaskCanceller.get(this).cancelAll();

if (this.audiences != null) {
this.audiences.close();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.extendedclip.deluxemenus.action;

import com.extendedclip.deluxemenus.DeluxeMenus;
import io.github.projectunified.minelib.scheduler.async.AsyncScheduler;
import io.github.projectunified.minelib.scheduler.common.scheduler.Scheduler;
import io.github.projectunified.minelib.scheduler.entity.EntityScheduler;
import io.github.projectunified.minelib.scheduler.global.GlobalScheduler;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;

import java.util.function.Function;

public enum ActionScheduler {
GLOBAL(player -> GlobalScheduler.get(DeluxeMenus.getInstance())),
ASYNC(player -> AsyncScheduler.get(DeluxeMenus.getInstance())),
PLAYER(player -> {
if (player == null) {
throw new IllegalArgumentException("Player cannot be null for player scheduler");
}
return EntityScheduler.get(DeluxeMenus.getInstance(), player);
})
;
private final Function<Player, Scheduler> schedulerFunction;

ActionScheduler(Function<Player, Scheduler> schedulerFunction) {
this.schedulerFunction = schedulerFunction;
}

public Scheduler getScheduler(@Nullable Player player) {
return schedulerFunction.apply(player);
}
}
14 changes: 12 additions & 2 deletions src/main/java/com/extendedclip/deluxemenus/action/ActionType.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
public enum ActionType {
META("[meta]", "Handle meta for a player",
"- '[meta] <set/remove/add/subtract/switch> <key> <value type> <value>'"),
CONSOLE("[console]", "Execute a command from the console",
CONSOLE(ActionScheduler.GLOBAL, "[console]", "Execute a command from the console",
"- '[console] <command with no slash>'"),
PLAYER("[player]", "Execute a command for the menu viewer",
"- '[player] <command with no slash>'"),
Expand Down Expand Up @@ -52,16 +52,22 @@ public enum ActionType {
private static final Map<String, ActionType> BY_NAME = Arrays.stream(values())
.collect(Collectors.toMap(e -> e.name().toUpperCase(Locale.ROOT), Function.identity()));

private final ActionScheduler scheduler;
private final String identifier;
private final String description;
private final String usage;

ActionType(@NotNull final String identifier, @NotNull final String description, @NotNull final String usage) {
ActionType(@NotNull final ActionScheduler scheduler, @NotNull final String identifier, @NotNull final String description, @NotNull final String usage) {
this.scheduler = scheduler;
this.identifier = identifier;
this.description = description;
this.usage = usage;
}

ActionType(@NotNull final String identifier, @NotNull final String description, @NotNull final String usage) {
this(ActionScheduler.PLAYER, identifier, description, usage);
}

/**
* Get an {@link ActionType} by its name.
*
Expand Down Expand Up @@ -118,6 +124,10 @@ public static String listAllActionTypes() {
return builder.toString();
}

public @NotNull ActionScheduler getScheduler() {
return scheduler;
}

public @NotNull String getIdentifier() {
return identifier;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,19 @@
import com.extendedclip.deluxemenus.DeluxeMenus;
import com.extendedclip.deluxemenus.menu.Menu;
import com.extendedclip.deluxemenus.menu.MenuHolder;
import com.extendedclip.deluxemenus.utils.AdventureUtils;
import com.extendedclip.deluxemenus.utils.DebugLevel;
import com.extendedclip.deluxemenus.utils.ExpUtils;
import com.extendedclip.deluxemenus.utils.SoundUtils;
import com.extendedclip.deluxemenus.utils.StringUtils;
import com.extendedclip.deluxemenus.utils.VersionHelper;
import com.extendedclip.deluxemenus.utils.*;
import io.github.projectunified.minelib.scheduler.global.GlobalScheduler;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.*;
import java.util.logging.Level;

public class ClickActionTask extends BukkitRunnable {
public class ClickActionTask implements Runnable {

private final DeluxeMenus plugin;
private final UUID uuid;
Expand Down Expand Up @@ -439,4 +429,13 @@ public void run() {
break;
}
}
}

public void runTaskLater(DeluxeMenus plugin, long delay) {
GlobalScheduler.get(plugin).runLater(this, delay);
}

public void runTask(DeluxeMenus plugin) {
GlobalScheduler.get(plugin).run(this);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,19 @@
import com.extendedclip.deluxemenus.utils.ItemUtils;
import com.extendedclip.deluxemenus.utils.LocationUtils;
import com.extendedclip.deluxemenus.utils.VersionHelper;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.function.BiConsumer;
import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import io.github.projectunified.minelib.scheduler.common.scheduler.Scheduler;
import com.google.common.base.Enums;
import com.google.common.primitives.Ints;
import org.bukkit.DyeColor;
Expand Down Expand Up @@ -1202,12 +1215,14 @@ public void onClick(@NotNull final MenuHolder holder) {

final ClickActionTask actionTask = new ClickActionTask(plugin, holder.getViewer().getUniqueId(), action.getType(), action.getExecutable(), holder.getTypedArgs(), holder.parsePlaceholdersInArguments(), holder.parsePlaceholdersAfterArguments());

Scheduler scheduler = action.getType().getScheduler().getScheduler(holder.getViewer());

if (action.hasDelay()) {
actionTask.runTaskLater(plugin, action.getDelay(holder));
scheduler.runLater(actionTask, action.getDelay(holder));
continue;
}

actionTask.runTask(plugin);
scheduler.run(actionTask);
}
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.extendedclip.deluxemenus.DeluxeMenus;
import com.extendedclip.deluxemenus.listener.Listener;
import com.extendedclip.deluxemenus.utils.DebugLevel;
import io.github.projectunified.minelib.scheduler.global.GlobalScheduler;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
Expand Down Expand Up @@ -55,8 +56,7 @@ private void onDrop(@NotNull final PlayerDropItemEvent event) {

@EventHandler
private void onLogin(@NotNull final PlayerLoginEvent event) {
plugin.getServer().getScheduler().runTaskLater(
plugin,
GlobalScheduler.get(plugin).runLater(
() -> {
for (final ItemStack itemStack : event.getPlayer().getInventory().getContents()) {
if (itemStack == null) continue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
import com.extendedclip.deluxemenus.cache.SimpleCache;
import com.extendedclip.deluxemenus.utils.DebugLevel;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;

import io.github.projectunified.minelib.scheduler.global.GlobalScheduler;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.api.Type;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -47,17 +48,19 @@ public ItemStack getItem(@NotNull final String... arguments) {

ItemStack mmoItem = null;
try {
mmoItem = Bukkit.getScheduler().callSyncMethod(plugin, () -> {
CompletableFuture<ItemStack> future = new CompletableFuture<>();
GlobalScheduler.get(DeluxeMenus.getInstance()).run(() -> {
ItemStack item = MMOItems.plugin.getItem(itemType, splitArgs[1]);

if (item == null) {
return new ItemStack(Material.STONE, 1);
future.complete(new ItemStack(Material.STONE, 1));
return;
}

cache.put(arguments[0], item);

return item;
}).get();
future.complete(item);
});
mmoItem = future.get();
} catch (InterruptedException | ExecutionException e) {
plugin.debug(DebugLevel.HIGHEST, Level.SEVERE, "Error getting MMOItem synchronously.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import com.extendedclip.deluxemenus.requirement.RequirementList;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.bukkit.Bukkit;
import io.github.projectunified.minelib.scheduler.global.GlobalScheduler;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
Expand Down Expand Up @@ -93,7 +93,7 @@ public void onClose(InventoryCloseEvent event) {

if (Menu.isInMenu(player)) {
Menu.closeMenu(plugin, player, false);
Bukkit.getScheduler().runTaskLater(plugin, () -> {
GlobalScheduler.get(plugin).runLater(() -> {
Menu.cleanInventory(plugin, player);
player.updateInventory();
}, 3L);
Expand Down
9 changes: 6 additions & 3 deletions src/main/java/com/extendedclip/deluxemenus/menu/Menu.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
import java.util.Map.Entry;
import java.util.logging.Level;

import io.github.projectunified.minelib.scheduler.async.AsyncScheduler;
import io.github.projectunified.minelib.scheduler.global.GlobalScheduler;
import me.clip.placeholderapi.util.Msg;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
Expand Down Expand Up @@ -190,7 +193,7 @@ public static void closeMenu(final @NotNull DeluxeMenus plugin, final @NotNull P
}

if (close) {
Bukkit.getScheduler().runTask(plugin, () -> {
GlobalScheduler.get(DeluxeMenus.getInstance()).run(() -> {
player.closeInventory();
cleanInventory(plugin, player);
});
Expand Down Expand Up @@ -280,7 +283,7 @@ public void openMenu(final @NotNull Player viewer, final @Nullable Map<String, S
return;
}

Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
AsyncScheduler.get(DeluxeMenus.getInstance()).run(() -> {

Set<MenuItem> activeItems = new HashSet<>();

Expand Down Expand Up @@ -369,7 +372,7 @@ public void openMenu(final @NotNull Player viewer, final @Nullable Map<String, S

final boolean updatePlaceholders = update;

Bukkit.getScheduler().runTask(plugin, () -> {
GlobalScheduler.get(DeluxeMenus.getInstance()).run(() -> {
if (isInMenu(holder.getViewer())) {
closeMenu(plugin, holder.getViewer(), false);
}
Expand Down
Loading