Skip to content

Commit

Permalink
feat: experimental Folia support
Browse files Browse the repository at this point in the history
  • Loading branch information
Skyslycer committed Jun 2, 2024
1 parent e7d4edd commit 146a4f3
Show file tree
Hide file tree
Showing 17 changed files with 70 additions and 56 deletions.
2 changes: 2 additions & 0 deletions api/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ repositories {
maven("https://repo.dmulloy2.net/repository/public/")
maven("https://repo.codemc.io/repository/maven-snapshots/")
maven("https://repo.codemc.io/repository/maven-public/")
maven("https://nexuslite.gcnt.net/repos/other/")
}

dependencies {
Expand All @@ -30,6 +31,7 @@ dependencies {
compileOnly(libs.bundles.adventure)
compileOnly(libs.configurate)
compileOnly(libs.nbtapi)
compileOnly(libs.folialib)
}

tasks {
Expand Down
15 changes: 12 additions & 3 deletions api/src/main/java/de/skyslycer/hmcwraps/HMCWraps.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.skyslycer.hmcwraps;

import com.tcoded.folialib.FoliaLib;
import de.skyslycer.hmcwraps.actions.ActionHandler;
import de.skyslycer.hmcwraps.itemhook.HookAccessor;
import de.skyslycer.hmcwraps.messages.MessageHandler;
Expand All @@ -11,13 +12,14 @@
import de.skyslycer.hmcwraps.wrap.CollectionHelper;
import de.skyslycer.hmcwraps.wrap.Wrapper;
import de.skyslycer.hmcwraps.wrap.WrapsLoader;
import java.nio.file.Path;
import java.util.List;
import java.util.UUID;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

import java.nio.file.Path;
import java.util.List;
import java.util.UUID;

public interface HMCWraps extends Plugin {

Path PLUGIN_PATH = Path.of("plugins", "HMCWraps");
Expand Down Expand Up @@ -132,4 +134,11 @@ public interface HMCWraps extends Plugin {
*/
HookAccessor getHookAccessor();

/**
* Get the FoliaLib instance.
*
* @return The FoliaLib instance
*/
FoliaLib getFoliaLib();

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.github.retrooper.packetevents.protocol.player.EquipmentSlot;
import com.github.retrooper.packetevents.util.Vector3f;
import com.github.retrooper.packetevents.wrapper.play.server.*;
import com.tcoded.folialib.wrapper.task.WrappedTask;
import de.skyslycer.hmcwraps.HMCWraps;
import de.skyslycer.hmcwraps.preview.Preview;
import de.skyslycer.hmcwraps.util.PlayerUtil;
Expand All @@ -16,13 +17,10 @@
import io.github.retrooper.packetevents.util.SpigotReflectionUtil;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitTask;

import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.function.Consumer;
Expand All @@ -34,8 +32,8 @@ public class FloatingPreview implements Preview {
private final ItemStack item;
private final Consumer<Player> onClose;
private final HMCWraps plugin;
private BukkitTask task;
private BukkitTask cancelTask;
private WrappedTask task;
private WrappedTask cancelTask;

public FloatingPreview(Player player, ItemStack item, Consumer<Player> onClose, HMCWraps plugin) {
this.player = player;
Expand All @@ -52,21 +50,19 @@ public void preview() {
sendTeleportPacket();
sendEquipPacket();

task = Bukkit.getScheduler()
.runTaskTimerAsynchronously(plugin, new RotateRunnable(player, entityId, plugin), 3, 1);
task = plugin.getFoliaLib().getImpl().runTimerAsync(new RotateRunnable(player, entityId, plugin), 3, 1);

cancelTask = Bukkit.getScheduler()
.runTaskLater(plugin, () -> plugin.getPreviewManager().remove(player.getUniqueId(), true),
cancelTask = plugin.getFoliaLib().getImpl().runAtEntityLater(player, () -> plugin.getPreviewManager().remove(player.getUniqueId(), true),
plugin.getConfiguration().getPreview().getDuration() * 20L);
}

public void cancel(boolean open) {
Optional.of(task).ifPresent(BukkitTask::cancel);
Optional.of(cancelTask).ifPresent(BukkitTask::cancel);
Optional.of(task).ifPresent(WrappedTask::cancel);
Optional.of(cancelTask).ifPresent(WrappedTask::cancel);
if (open && onClose != null) {
onClose.accept(player);
}
Bukkit.getScheduler().runTaskLater(plugin, () -> {
plugin.getFoliaLib().getImpl().runAtEntityLater(player, () -> {
PacketEvents.getAPI().getPlayerManager().sendPacket(player, new WrapperPlayServerDestroyEntities(entityId));
if (plugin.getConfiguration().getPreview().getSneakCancel().isActionBar()) {
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(" "));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,16 @@

import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSetSlot;
import com.tcoded.folialib.wrapper.task.WrappedTask;
import de.skyslycer.hmcwraps.HMCWraps;
import de.skyslycer.hmcwraps.messages.Messages;
import de.skyslycer.hmcwraps.preview.Preview;
import de.skyslycer.hmcwraps.util.StringUtil;
import io.github.retrooper.packetevents.util.SpigotReflectionUtil;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitTask;

import java.util.Optional;
import java.util.function.Consumer;
Expand All @@ -23,8 +22,8 @@ public class HandPreview implements Preview {
private final ItemStack item;
private final Consumer<Player> onClose;
private final HMCWraps plugin;
private BukkitTask task;
private BukkitTask cancelTask;
private WrappedTask task;
private WrappedTask cancelTask;
private ItemStack oldItem;
private int slot = 0;

Expand All @@ -42,23 +41,22 @@ public void preview() {
slot = 36 + player.getInventory().getHeldItemSlot();
sendFakeItem(item);

task = Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, () -> {
task = plugin.getFoliaLib().getImpl().runTimerAsync(() -> {
if (plugin.getConfiguration().getPreview().getSneakCancel().isActionBar() && plugin.getConfiguration().getPreview().getSneakCancel().isEnabled()) {
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, StringUtil.parse(player, plugin.getMessageHandler().get(Messages.PREVIEW_BAR)));
}
}, 3, 1);
cancelTask = Bukkit.getScheduler()
.runTaskLater(plugin, () -> plugin.getPreviewManager().remove(player.getUniqueId(), true),
cancelTask = plugin.getFoliaLib().getImpl().runAtEntityLater(player, () -> plugin.getPreviewManager().remove(player.getUniqueId(), true),
plugin.getConfiguration().getPreview().getDuration() * 20L);
}

public void cancel(boolean open) {
Optional.of(task).ifPresent(BukkitTask::cancel);
Optional.of(cancelTask).ifPresent(BukkitTask::cancel);
Optional.of(task).ifPresent(WrappedTask::cancel);
Optional.of(cancelTask).ifPresent(WrappedTask::cancel);
if (open && onClose != null) {
onClose.accept(player);
}
Bukkit.getScheduler().runTaskLater(plugin, () -> {
plugin.getFoliaLib().getImpl().runAtEntityLater(player, () -> {
sendFakeItem(oldItem);
if (plugin.getConfiguration().getPreview().getSneakCancel().isActionBar()) {
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(" "));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@
import de.tr7zw.changeme.nbtapi.NBTItem;
import de.tr7zw.changeme.nbtapi.NbtApiException;
import dev.triumphteam.gui.builder.item.ItemBuilder;
import org.bukkit.*;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.profile.PlayerProfile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import org.spongepowered.configurate.objectmapping.ConfigSerializable;

import java.util.List;
import java.util.Map;

@ConfigSerializable
public class PhysicalWrap extends SerializableItem {
Expand Down
11 changes: 7 additions & 4 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ plugins {
}

group = "de.skyslycer"
version = "1.4.4"
version = "1.4.5"

val shadePattern = "$group.hmcwraps.shade"

Expand All @@ -24,6 +24,7 @@ repositories {
maven("https://repo.bytecode.space/repository/maven-public/")
maven("https://mvn.lumine.io/repository/maven-public/")
maven("https://repo.codemc.io/repository/maven-public/")
maven("https://nexuslite.gcnt.net/repos/other/")
}

dependencies {
Expand All @@ -36,6 +37,7 @@ dependencies {
implementation(libs.particles)
implementation(libs.gui)
implementation(libs.nbtapi)
implementation(libs.folialib)
implementation(libs.configurate) {
exclude("org.yaml")
}
Expand Down Expand Up @@ -70,11 +72,12 @@ tasks {
relocate("org.intellij", "$shadePattern.annotations")
relocate("org.jetbrains", "$shadePattern.annotations")
relocate("io.leangen", "$shadePattern.leangen")
relocate("com.tcoded.folialib", "$shadePattern.folialib")

exclude("com/google/**")
exclude("assets/mappings/block/**")
exclude("assets/mappings/particle/**")
exclude("assets/mappings/potion/**")
//exclude("assets/mappings/block/**")
//exclude("assets/mappings/particle/**")
//exclude("assets/mappings/potion/**")
exclude("lamp_pt.properties")
exclude("lamp_it.properties")
exclude("lamp_fr.properties")
Expand Down
3 changes: 2 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,15 @@ dependencyResolutionManagement {
library("annotations", "org.jetbrains:annotations:24.1.0")
}
create("libs") {
library("packets", "com.github.retrooper.packetevents:spigot:2.2.1")
library("packets", "com.github.retrooper.packetevents:spigot:2.3.0")
library("particles", "com.owen1212055:particlehelper:1.1.0-SNAPSHOT")
library("configupdater", "com.github.BG-Software-LLC:CommentedConfiguration:-SNAPSHOT")
library("bstats", "org.bstats:bstats-bukkit:3.0.2")
library("gui", "dev.triumphteam:triumph-gui:3.1.7")
library("configurate", "org.spongepowered:configurate-yaml:4.1.2")
library("mclogs", "com.github.aternosorg:mclogs-java:v2.2.0")
library("nbtapi", "de.tr7zw:item-nbt-api:2.12.0")
library("folialib", "com.tcoded:FoliaLib:0.3.1")

library("adventure-api", "net.kyori", "adventure-api").versionRef("adventure")
library("minimessage", "net.kyori", "adventure-text-minimessage").versionRef("adventure")
Expand Down
16 changes: 12 additions & 4 deletions src/main/java/de/skyslycer/hmcwraps/HMCWrapsPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.bgsoftware.common.config.CommentedConfiguration;
import com.github.retrooper.packetevents.PacketEvents;
import com.tcoded.folialib.FoliaLib;
import com.tcoded.folialib.wrapper.task.WrappedTask;
import de.skyslycer.hmcwraps.actions.ActionHandler;
import de.skyslycer.hmcwraps.actions.register.DefaultActionRegister;
import de.skyslycer.hmcwraps.commands.CommandRegister;
Expand Down Expand Up @@ -33,7 +35,6 @@
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;
import org.spongepowered.configurate.ConfigurationOptions;
import org.spongepowered.configurate.yaml.YamlConfigurationLoader;

Expand Down Expand Up @@ -64,7 +65,8 @@ public class HMCWrapsPlugin extends JavaPlugin implements HMCWraps {
private HookAccessor hookAccessor;
private Config config;
private MessageHandler messageHandler;
private BukkitTask checkTask;
private WrappedTask checkTask;
private FoliaLib foliaLib;
private final Map<UUID, String> wrapGui = new HashMap<>();

@Override
Expand All @@ -79,6 +81,7 @@ public void onLoad() {

@Override
public void onEnable() {
foliaLib = new FoliaLib(this);
checkDependency("PlaceholderAPI", false);
if (checkDependency("ItemsAdder", false)) {
hooks.add(new ItemsAdderItemHook());
Expand Down Expand Up @@ -225,7 +228,7 @@ private void startCheckTask() {
if (config.getPermissions().getInventoryCheckInterval() == -1) {
return;
}
checkTask = Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> Bukkit.getOnlinePlayers().forEach(player -> {
checkTask = foliaLib.getImpl().runTimerAsync(() -> Bukkit.getOnlinePlayers().forEach(player -> {
for (int i = 0; i < player.getInventory().getContents().length - 1; i++) {
var item = player.getInventory().getItem(i);
if (item == null || item.getType().isAir()) {
Expand All @@ -237,7 +240,7 @@ private void startCheckTask() {
}
if (!PermissionUtil.hasPermission(this, wrap, item, player)) {
int finalI = i; // ;(
Bukkit.getScheduler().runTask(this, () -> {
getFoliaLib().getImpl().runAtEntity(player, (ignored) -> {
var newItem = getWrapper().removeWrap(item, player, getConfiguration().getPermissions().isPermissionPhysical()
&& (wrap.getPhysical() != null && wrap.getPhysical().isKeepAfterUnwrap()));
player.getInventory().setItem(finalI, newItem);
Expand Down Expand Up @@ -334,4 +337,9 @@ public Map<UUID, String> getWrapGui() {
return wrapGui;
}

@Override
public FoliaLib getFoliaLib() {
return foliaLib;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public static void registerCommands(HMCWrapsPlugin plugin) {
.replace("<usage>", command.getUsage()).replace("<description>", command.getDescription()) : null;
});
commandHandler.register(new WrapCommand(plugin), new DebugCommand(plugin));
commandHandler.registerBrigadier();
//commandHandler.registerBrigadier();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import revxrsal.commands.annotation.*;
Expand Down Expand Up @@ -131,10 +130,10 @@ private void uploadAndSend(CommandSender sender, Debuggable debuggable, boolean
plugin.getLogger().info("Debug information (" + debuggable.getClass().getSimpleName() + "): \n" + DebugCreator.debugToJson(debuggable));
StringUtil.sendComponent(sender, Component.text("Debug information (" + debuggable.getClass().getSimpleName() + ") printed to console.").color(NamedTextColor.GREEN));
if (upload) {
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, () -> {
plugin.getFoliaLib().getImpl().runAsync((ignored) -> {
var link = DebugCreator.upload(DebugCreator.debugToJson(debuggable), "json");
handleLink(sender, link.orElse(null), debuggable.getClass().getSimpleName());
}, 0L);
});
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/de/skyslycer/hmcwraps/commands/WrapCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -121,14 +121,14 @@ public void onReload(CommandSender sender) {
player.closeInventory();
}
}
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, () -> {
plugin.getFoliaLib().getImpl().runAsync((ignored) -> {
plugin.unload();
plugin.load();
plugin.getMessageHandler().send(sender, Messages.COMMAND_RELOAD,
Placeholder.parsed("time", String.format("%.2f", (System.nanoTime() - current) / 1_000_000.0)),
Placeholder.parsed("wraps", String.valueOf(plugin.getWrapsLoader().getWraps().size())),
Placeholder.parsed("collections", String.valueOf(plugin.getWrapsLoader().getCollections().size())));
}, 0L);
});
}

@Subcommand("convert")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import de.skyslycer.hmcwraps.serialization.preview.PreviewType;
import de.skyslycer.hmcwraps.serialization.wrap.WrappableItem;
import de.skyslycer.hmcwraps.util.PermissionUtil;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
Expand Down Expand Up @@ -53,13 +52,13 @@ public void onInventoryClick(InventoryClickEvent event) {
switch (event.getAction()) {
case PLACE_ALL, PLACE_SOME, PLACE_ONE, SWAP_WITH_CURSOR -> {
var slot = event.getRawSlot();
Bukkit.getScheduler().runTaskLater(plugin, () -> {
plugin.getFoliaLib().getImpl().runAtEntityLater(player, () -> {
var updatedItem = PermissionUtil.check(plugin, player, event.getView().getItem(slot));
if (updatedItem == null || updatedItem.equals(event.getView().getItem(slot))) return;
event.getView().setItem(slot, updatedItem);
}, 1);
}
case MOVE_TO_OTHER_INVENTORY -> Bukkit.getScheduler().runTaskLater(plugin, () -> {
case MOVE_TO_OTHER_INVENTORY -> plugin.getFoliaLib().getImpl().runAtEntityLater(player, () -> {
if (event.getClickedInventory() == player.getInventory()) {
PermissionUtil.loopThroughInventory(plugin, player, player.getOpenInventory().getTopInventory());
} else {
Expand All @@ -70,7 +69,7 @@ public void onInventoryClick(InventoryClickEvent event) {

if (event.getClick() == ClickType.NUMBER_KEY) {
var slot = event.getHotbarButton();
Bukkit.getScheduler().runTaskLater(plugin, () -> {
plugin.getFoliaLib().getImpl().runAtEntityLater(player, () -> {
var updatedItem = PermissionUtil.check(plugin, player, player.getInventory().getItem(slot));
if (updatedItem == null || updatedItem.equals(event.getView().getItem(slot))) return;
player.getInventory().setItem(slot, updatedItem);
Expand Down
Loading

0 comments on commit 146a4f3

Please sign in to comment.