diff --git a/api/src/main/java/net/momirealms/customfishing/api/manager/VersionManager.java b/api/src/main/java/net/momirealms/customfishing/api/manager/VersionManager.java index cba49684..efdcf3eb 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/manager/VersionManager.java +++ b/api/src/main/java/net/momirealms/customfishing/api/manager/VersionManager.java @@ -31,9 +31,11 @@ public interface VersionManager { boolean isSpigot(); - public boolean isFolia(); + public boolean hasRegionScheduler(); String getPluginVersion(); + boolean isMojmap(); + String getServerVersion(); } diff --git a/api/src/main/java/net/momirealms/customfishing/api/util/ReflectionUtils.java b/api/src/main/java/net/momirealms/customfishing/api/util/ReflectionUtils.java index 3b610547..abcf3a4c 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/util/ReflectionUtils.java +++ b/api/src/main/java/net/momirealms/customfishing/api/util/ReflectionUtils.java @@ -37,6 +37,7 @@ public class ReflectionUtils { public static Class bukkitClass; public static void load() { + // spigot map try { Class bar = Class.forName("net.minecraft.network.protocol.game.PacketPlayOutBoss"); Field remove = bar.getDeclaredField("f"); @@ -50,9 +51,25 @@ public class ReflectionUtils { updateConstructor.setAccessible(true); iChatComponentMethod = MinecraftReflection.getChatSerializerClass().getMethod("a", String.class); iChatComponentMethod.setAccessible(true); - } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException | NoSuchMethodException exception) { - LogUtils.severe("Error occurred when loading reflections", exception); - exception.printStackTrace(); + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException | NoSuchMethodException e1) { + // mojmap + try { + Class bar = Class.forName("net.minecraft.network.protocol.game.ClientboundBossEventPacket"); + Field remove = bar.getDeclaredField("REMOVE_OPERATION"); + remove.setAccessible(true); + removeBossBarPacket = remove.get(null); + Class packetBossClassF = Class.forName("net.minecraft.network.protocol.game.ClientboundBossEventPacket$UpdateProgressOperation"); + progressConstructor = packetBossClassF.getDeclaredConstructor(float.class); + progressConstructor.setAccessible(true); + Class packetBossClassE = Class.forName("net.minecraft.network.protocol.game.ClientboundBossEventPacket$UpdateNameOperation"); + updateConstructor = packetBossClassE.getDeclaredConstructor(MinecraftReflection.getIChatBaseComponentClass()); + updateConstructor.setAccessible(true); + iChatComponentMethod = MinecraftReflection.getChatSerializerClass().getMethod("fromJson", String.class); + iChatComponentMethod.setAccessible(true); + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException | NoSuchMethodException e2) { + LogUtils.severe("Error occurred when loading reflections", e2); + e2.printStackTrace(); + } return; } if (CustomFishingPlugin.get().getVersionManager().isSpigot()) return; diff --git a/plugin/src/main/java/net/momirealms/customfishing/command/CommandManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/command/CommandManagerImpl.java index 4fd30933..eae79a6d 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/command/CommandManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/command/CommandManagerImpl.java @@ -42,40 +42,42 @@ public class CommandManagerImpl implements CommandManager { public CommandManagerImpl(CustomFishingPluginImpl plugin) { this.plugin = plugin; - if (!CommandAPI.isLoaded()) - CommandAPI.onLoad(new CommandAPIBukkitConfig(plugin).silentLogs(true)); } @Override public void load() { - new CommandAPICommand("customfishing") - .withAliases("cfishing") - .withPermission("customfishing.admin") - .withSubcommands( - getReloadCommand(), - getMarketCommand(), - getAboutCommand(), - GUIEditorCommand.INSTANCE.getEditorCommand(), - DataCommand.INSTANCE.getDataCommand(), - CompetitionCommand.INSTANCE.getCompetitionCommand(), - ItemCommand.INSTANCE.getItemCommand(), - DebugCommand.INSTANCE.getDebugCommand(), - StatisticsCommand.INSTANCE.getStatisticsCommand() - ) - .register(); - - if (plugin.getMarketManager().isEnable()) { - new CommandAPICommand("sellfish") - .withPermission("customfishing.sellfish") - .executesPlayer((player, args) -> { - if (plugin.getMarketManager().isEnable()) - plugin.getMarketManager().openMarketGUI(player); - }) + if (!plugin.getVersionManager().isMojmap()) { + if (!CommandAPI.isLoaded()) + CommandAPI.onLoad(new CommandAPIBukkitConfig(plugin).silentLogs(true)); + new CommandAPICommand("customfishing") + .withAliases("cfishing") + .withPermission("customfishing.admin") + .withSubcommands( + getReloadCommand(), + getMarketCommand(), + getAboutCommand(), + GUIEditorCommand.INSTANCE.getEditorCommand(), + DataCommand.INSTANCE.getDataCommand(), + CompetitionCommand.INSTANCE.getCompetitionCommand(), + ItemCommand.INSTANCE.getItemCommand(), + DebugCommand.INSTANCE.getDebugCommand(), + StatisticsCommand.INSTANCE.getStatisticsCommand() + ) .register(); - } - if (plugin.getBagManager().isEnabled()) { - FishingBagCommand.INSTANCE.getBagCommand().register(); + if (plugin.getMarketManager().isEnable()) { + new CommandAPICommand("sellfish") + .withPermission("customfishing.sellfish") + .executesPlayer((player, args) -> { + if (plugin.getMarketManager().isEnable()) + plugin.getMarketManager().openMarketGUI(player); + }) + .register(); + } + + if (plugin.getBagManager().isEnabled()) { + FishingBagCommand.INSTANCE.getBagCommand().register(); + } } } diff --git a/plugin/src/main/java/net/momirealms/customfishing/scheduler/SchedulerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/scheduler/SchedulerImpl.java index 6ae14cfd..43745e3c 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/scheduler/SchedulerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/scheduler/SchedulerImpl.java @@ -40,7 +40,7 @@ public class SchedulerImpl implements Scheduler { public SchedulerImpl(CustomFishingPlugin plugin) { this.plugin = plugin; - this.syncScheduler = plugin.getVersionManager().isFolia() ? + this.syncScheduler = plugin.getVersionManager().hasRegionScheduler() ? new FoliaSchedulerImpl(plugin) : new BukkitSchedulerImpl(plugin); this.schedule = new ScheduledThreadPoolExecutor(1); this.schedule.setMaximumPoolSize(1); diff --git a/plugin/src/main/java/net/momirealms/customfishing/version/VersionManagerImpl.java b/plugin/src/main/java/net/momirealms/customfishing/version/VersionManagerImpl.java index 7b30764a..5bf573b8 100644 --- a/plugin/src/main/java/net/momirealms/customfishing/version/VersionManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customfishing/version/VersionManagerImpl.java @@ -39,7 +39,8 @@ public class VersionManagerImpl implements VersionManager { private final String serverVersion; private final CustomFishingPluginImpl plugin; private final boolean isSpigot; - private boolean isFolia; + private boolean hasRegionScheduler; + private boolean isMojmap; private final String pluginVersion; @SuppressWarnings("deprecation") @@ -73,7 +74,15 @@ public class VersionManagerImpl implements VersionManager { // Check if the server is Folia try { Class.forName("io.papermc.paper.threadedregions.scheduler.AsyncScheduler"); - this.isFolia = true; + this.hasRegionScheduler = true; + } catch (ClassNotFoundException ignored) { + + } + + // Check if the server is Mojmap + try { + Class.forName("net.minecraft.network.protocol.game.ClientboundBossEventPacket"); + this.isMojmap = true; } catch (ClassNotFoundException ignored) { } @@ -109,8 +118,13 @@ public class VersionManagerImpl implements VersionManager { } @Override - public boolean isFolia() { - return isFolia; + public boolean hasRegionScheduler() { + return hasRegionScheduler; + } + + @Override + public boolean isMojmap() { + return isMojmap; } @Override