Skip to content
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
7 changes: 7 additions & 0 deletions Compatibility/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>Folia-Compatibility</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>com.viaversion</groupId>
<artifactId>viaversion-api</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.songoda.core.compatibility;

import com.songoda.core.compatibility.folia.SchedulerRunnable;
import com.songoda.core.compatibility.folia.SchedulerUtils;
import com.viaversion.viaversion.api.Via;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

Expand Down Expand Up @@ -37,10 +38,13 @@ public static ServerVersion getClientVersion(Player player) {
*/
@Deprecated
public static void onLoginProtocol(Player p, JavaPlugin plugin) {
Bukkit.getScheduler().runTaskLater(plugin, () -> {
if (p.isOnline()) {
final int version = protocolsupport.api.ProtocolSupportAPI.getProtocolVersion(p).getId();
players.put(p.getUniqueId(), protocolToVersion(version));
SchedulerUtils.runTaskLater(plugin, new SchedulerRunnable() {
@Override
public void run() {
if (p.isOnline()) {
final int version = protocolsupport.api.ProtocolSupportAPI.getProtocolVersion(p).getId();
players.put(p.getUniqueId(), protocolToVersion(version));
}
}
}, 20);
}
Expand All @@ -50,10 +54,13 @@ public static void onLoginProtocol(Player p, JavaPlugin plugin) {
*/
@Deprecated
public static void onLoginVia(Player p, JavaPlugin plugin) {
Bukkit.getScheduler().runTaskLater(plugin, () -> {
if (p.isOnline()) {
final int version = Via.getAPI().getPlayerVersion(p.getUniqueId());
players.put(p.getUniqueId(), protocolToVersion(version));
SchedulerUtils.runTaskLater(plugin, new SchedulerRunnable() {
@Override
public void run() {
if (p.isOnline()) {
final int version = Via.getAPI().getPlayerVersion(p.getUniqueId());
players.put(p.getUniqueId(), protocolToVersion(version));
}
}
}, 20);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import org.bukkit.Bukkit;

public enum ServerProject {
UNKNOWN, CRAFTBUKKIT, SPIGOT, PAPER, TACO, GLOWSTONE, MOCK_BUKKIT;
UNKNOWN, CRAFTBUKKIT, SPIGOT, PAPER, FOLIA, TACO, GLOWSTONE, MOCK_BUKKIT;
private static final ServerProject serverProject = checkProject();

private static ServerProject checkProject() {
Expand Down Expand Up @@ -38,6 +38,12 @@ private static ServerProject checkProject() {
} catch (ClassNotFoundException ignore) {
}

try {
Class.forName("io.papermc.paper.threadedregions.RegionizedServer");
return FOLIA;
} catch (ClassNotFoundException ignored) {
}

// spigot is the fork that pretty much all builds are based on anymore
try {
Class.forName("org.spigotmc.SpigotConfig");
Expand Down
28 changes: 21 additions & 7 deletions Core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@
<include>com.github.GeorgeV220:LibraryLoader</include>
<include>org.ow2.asm:asm</include>
<include>org.ow2.asm:asm-commons</include>

<include>io.papermc:paperlib</include>
</includes>
</artifactSet>

Expand Down Expand Up @@ -165,6 +167,11 @@
<pattern>org.objectweb.asm</pattern>
<shadedPattern>com.songoda.core.third_party.org.objectweb.asm</shadedPattern>
</relocation>

<relocation>
<pattern>io.papermc.lib</pattern>
<shadedPattern>com.craftaro.third_party.io.papermc.lib</shadedPattern>
</relocation>
</relocations>

<filters>
Expand Down Expand Up @@ -208,7 +215,21 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>dev.folia</groupId>
<artifactId>folia-api</artifactId>
<version>1.19.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>

<!--suppress VulnerableLibrariesLocal -->
<dependency>
<groupId>io.papermc</groupId>
<artifactId>paperlib</artifactId>
<version>1.0.8</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>SongodaCore-Compatibility</artifactId>
Expand Down Expand Up @@ -370,13 +391,6 @@
<scope>compile</scope>
</dependency>

<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-commons</artifactId>
<version>9.2</version>
<scope>compile</scope>
</dependency>

<!-- DB Stuff Start -->
<dependency>
<groupId>com.zaxxer</groupId>
Expand Down
59 changes: 46 additions & 13 deletions Core/src/main/java/com/songoda/core/SongodaCore.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package com.songoda.core;

import com.songoda.core.compatibility.folia.SchedulerRunnable;
import com.songoda.core.compatibility.folia.SchedulerTask;
import com.songoda.core.compatibility.folia.SchedulerUtils;
import com.songoda.core.commands.CommandManager;
import com.songoda.core.compatibility.ClientVersion;
import com.songoda.core.core.PluginInfo;
import com.songoda.core.core.SongodaCoreCommand;
import com.songoda.core.core.SongodaCoreDiagCommand;
import com.cryptomorin.xseries.XMaterial;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
Expand All @@ -16,15 +20,16 @@
import org.bukkit.event.server.PluginEnableEvent;
import org.bukkit.plugin.ServicePriority;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.logging.Level;

public class SongodaCore {
Expand Down Expand Up @@ -181,15 +186,26 @@ private void init() {
Bukkit.getPluginManager().registerEvents(this.shadingListener, this.piggybackedPlugin);

// we aggressively want to own this command
this.tasks.add(Bukkit.getScheduler().runTaskLaterAsynchronously(this.piggybackedPlugin, () ->
CommandManager.registerCommandDynamically(this.piggybackedPlugin, "songoda", this.commandManager, this.commandManager),
10 * 60));
this.tasks.add(Bukkit.getScheduler().runTaskLaterAsynchronously(this.piggybackedPlugin, () ->
CommandManager.registerCommandDynamically(this.piggybackedPlugin, "songoda", this.commandManager, this.commandManager),
20 * 60));
this.tasks.add(Bukkit.getScheduler().runTaskLaterAsynchronously(this.piggybackedPlugin, () ->
CommandManager.registerCommandDynamically(this.piggybackedPlugin, "songoda", this.commandManager, this.commandManager),
20 * 60 * 2));
tasks.add(SchedulerUtils.runTaskLater(piggybackedPlugin, new SchedulerRunnable() {
@Override
public void run() {
CommandManager.registerCommandDynamically(piggybackedPlugin, "songoda", commandManager, commandManager);
}
}, 10 * 60));

tasks.add(SchedulerUtils.runTaskLater(piggybackedPlugin, new SchedulerRunnable() {
@Override
public void run() {
CommandManager.registerCommandDynamically(piggybackedPlugin, "songoda", commandManager, commandManager);
}
}, 20 * 60));

tasks.add(SchedulerUtils.runTaskLater(piggybackedPlugin, new SchedulerRunnable() {
@Override
public void run() {
CommandManager.registerCommandDynamically(piggybackedPlugin, "songoda", commandManager, commandManager);
}
}, 20 * 60 * 2));
}

/**
Expand All @@ -198,8 +214,8 @@ private void init() {
private void destroy() {
Bukkit.getServicesManager().unregister(SongodaCore.class, INSTANCE);

this.tasks.stream().filter(Objects::nonNull)
.forEach(task -> Bukkit.getScheduler().cancelTask(task.getTaskId()));
tasks.stream().filter(Objects::nonNull)
.forEach(SchedulerUtils::cancelTask);

HandlerList.unregisterAll(this.loginListener);
if (!hasShading()) {
Expand All @@ -211,7 +227,7 @@ private void destroy() {
this.loginListener = null;
}

private final ArrayList<BukkitTask> tasks = new ArrayList<>();
private final ArrayList<SchedulerTask> tasks = new ArrayList<>();

private void register(JavaPlugin plugin, int pluginID, String icon, String libraryVersion) {
getLogger().info(getPrefix() + "Hooked " + plugin.getName() + ".");
Expand Down Expand Up @@ -338,6 +354,23 @@ void onEnable(PluginEnableEvent event) {
}

private class EventListener implements Listener {
final HashMap<UUID, Long> lastCheck = new HashMap<>();

@EventHandler
void onLogin(PlayerLoginEvent event) {
final Player player = event.getPlayer();

// don't spam players with update checks
long now = System.currentTimeMillis();
Long last = this.lastCheck.get(player.getUniqueId());

if (last != null && now - 10000 < last) {
return;
}

this.lastCheck.put(player.getUniqueId(), now);
}

@EventHandler
void onDisable(PluginDisableEvent event) {
// don't track disabled plugins
Expand Down
13 changes: 10 additions & 3 deletions Core/src/main/java/com/songoda/core/SongodaPlugin.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.songoda.core;

import com.songoda.core.compatibility.folia.SchedulerRunnable;
import com.songoda.core.compatibility.folia.SchedulerUtils;
import com.songoda.core.configuration.Config;
import com.songoda.core.database.DataManager;
import com.songoda.core.database.DataMigration;
Expand All @@ -11,7 +13,6 @@
import com.songoda.core.locale.Locale;
import com.songoda.core.utils.Metrics;
import de.tr7zw.changeme.nbtapi.utils.MinecraftVersion;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
Expand Down Expand Up @@ -117,7 +118,8 @@ public final void onLoad() {
dependencies.add(new Dependency("https://repo.songoda.com/repository/third-party/", "com;cryptomorin", "XSeries", "13.7.0", false,
new Relocation("com;cryptomorin;xseries", "com;songoda;third_party;com;cryptomorin;xseries")) // Custom relocation if the package names not match with the groupId
);

dependencies.add(new Dependency("https://papermc.io/repo/repository/maven-public/", "io;papermc", "paperlib", "1.0.8"));

//Load plugin dependencies
new DependencyLoader(this).loadDependencies(dependencies);

Expand Down Expand Up @@ -154,7 +156,12 @@ public final void onEnable() {
}

// Load Data.
Bukkit.getScheduler().runTaskLater(this, this::onDataLoad, this.dataLoadDelay);
SchedulerUtils.runTaskLater(this, new SchedulerRunnable() {
@Override
public void run() {
onDataLoad();
}
}, this.dataLoadDelay);

if (this.emergencyStop) {
console.sendMessage(ChatColor.RED + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
Expand Down
50 changes: 33 additions & 17 deletions Core/src/main/java/com/songoda/core/gui/GuiManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.songoda.core.compatibility.ClientVersion;
import com.songoda.core.compatibility.ServerVersion;
import com.cryptomorin.xseries.XMaterial;
import com.songoda.core.compatibility.folia.SchedulerRunnable;
import com.songoda.core.compatibility.folia.SchedulerUtils;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -102,23 +104,29 @@ public void showGUI(Player player, Gui gui) {
return;
}

Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> {
Gui openInv = this.openInventories.get(player);
SchedulerUtils.runTaskAsynchronously(plugin, new SchedulerRunnable() {
@Override
public void run() {
Gui openInv = openInventories.get(player);

if (openInv != null) {
openInv.open = false;
}
if (openInv != null) {
openInv.open = false;
}

Inventory inv = gui.getOrCreateInventory(this);
Inventory inv = gui.getOrCreateInventory(GuiManager.this);

Bukkit.getScheduler().runTask(this.plugin, () -> {
player.openInventory(inv);
gui.onOpen(this, player);
SchedulerUtils.runTask(plugin, new SchedulerRunnable() {
@Override
public void run() {
player.openInventory(inv);
gui.onOpen(GuiManager.this, player);

synchronized (this.lock) {
this.openInventories.put(player, gui);
}
});
synchronized (GuiManager.this.lock) {
GuiManager.this.openInventories.put(player, gui);
}
}
});
}
});
}

Expand All @@ -136,9 +144,12 @@ public void showPopup(Player player, String message, XMaterial icon, BackgroundT
popup.add();
popup.grant(player);

Bukkit.getScheduler().runTaskLaterAsynchronously(this.plugin, () -> {
popup.revoke(player);
popup.remove();
SchedulerUtils.runTaskLaterAsynchronously(plugin, new SchedulerRunnable() {
@Override
public void run() {
popup.revoke(player);
popup.remove();
}
}, 70);

return;
Expand Down Expand Up @@ -285,7 +296,12 @@ void onCloseGUI(InventoryCloseEvent event) {
if (this.manager.shutdown) {
gui.onClose(this.manager, player);
} else {
Bukkit.getScheduler().runTaskLater(this.manager.plugin, () -> gui.onClose(this.manager, player), 1);
SchedulerUtils.runEntityTaskLater(manager.plugin, player, new SchedulerRunnable() {
@Override
public void run() {
gui.onClose(manager, player);
}
}, 1);
}

this.manager.openInventories.remove(player);
Expand Down
Loading