diff --git a/.jenkins/Jenkinsfile.snapshot b/.jenkins/Jenkinsfile.snapshot index 176dd0b..e9b9008 100644 --- a/.jenkins/Jenkinsfile.snapshot +++ b/.jenkins/Jenkinsfile.snapshot @@ -2,8 +2,8 @@ def projectName = "CraterLib"; def projectIcon = "https://cdn.modrinth.com/data/Nn8Wasaq/a172c634683a11a2e9ae593e56eba7885743bb44.png"; def JDK = "21"; def majorMc = "1.21.2"; -def modLoaders = "neoforge|fabric|quilt"; -def supportedMc = "1.21.2"; +def modLoaders = "neoforge|fabric|quilt|paper"; +def supportedMc = "1.21.3"; def reltype = "port"; pipeline { diff --git a/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java b/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java index bf52038..10212d2 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java @@ -1,3 +1,4 @@ +// @excludeplugin package com.hypherionmc.craterlib.compat; import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; @@ -13,4 +14,4 @@ public class FTBEssentials { } -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index a68e6f7..9a35718 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -12,7 +12,9 @@ import net.kyori.adventure.text.serializer.json.JSONOptions; import net.minecraft.ChatFormatting; import net.minecraft.SharedConstants; import net.minecraft.Util; +// @noplugin import net.minecraft.client.Minecraft; +// #noplugin import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; @@ -37,8 +39,10 @@ public class ChatUtils { } private static HolderLookup.Provider getRegistryLookup() { + // @noplugin if (ModloaderEnvironment.INSTANCE.getEnvironment().isClient() && Minecraft.getInstance().level != null) return Minecraft.getInstance().level.registryAccess(); + // #noplugin if (ModloaderEnvironment.INSTANCE.getEnvironment().isServer() && CommonPlatform.INSTANCE.getMCServer() != null) return CommonPlatform.INSTANCE.getMCServer().toMojang().registryAccess(); @@ -113,7 +117,15 @@ public class ChatUtils { public static net.kyori.adventure.text.Component format(String value) { value = convertFormattingCodes(value); - return miniMessage.deserializeOr(value, net.kyori.adventure.text.Component.translatable(value)); + + try { + return miniMessage.deserializeOr(value, net.kyori.adventure.text.Component.translatable(value)); + } catch (Exception ignored) { + // Mini message fails to format text that contain legacy formatting. Since we support both, that's bad. + // We just ignore the exception here so that the whole format doesn't fail + } + + return net.kyori.adventure.text.Component.translatable(value); } private static String convertFormattingCodes(String input) { diff --git a/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java b/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java index 2305d14..f61b5ad 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java @@ -10,6 +10,8 @@ import java.util.ServiceLoader; */ public class InternalServiceUtil { + public static ClassLoader loader = Thread.currentThread().getContextClassLoader(); + /** * Try to load a service * @@ -17,7 +19,7 @@ public class InternalServiceUtil { * @return The loaded class */ public static T load(Class clazz) { - final T loadedService = ServiceLoader.load(clazz) + final T loadedService = ServiceLoader.load(clazz, loader) .findFirst() .orElseThrow(() -> new NullPointerException("Failed to load service for " + clazz.getName())); CraterConstants.LOG.debug("Loaded {} for service {}", loadedService, clazz); diff --git a/Fabric/build.gradle b/Fabric/build.gradle index a3a6220..d14e5d4 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -113,10 +113,10 @@ publisher { setModrinthID(modrinth_id) setNightbloomID("craterlib") setVersionType("release") - setChangelog("https://raw.githubusercontent.com/hypherionmc/changelogs/main/craterlib/changelog-fabric.md") + setChangelog(rootProject.file("changelog.md")) setProjectVersion("${minecraft_version}-${project.version}") - setDisplayName("[FABRIC/QUILT 1.21.2] CraterLib - ${project.version}") - setGameVersions("1.21.2") + setDisplayName("[FABRIC/QUILT 1.21.3] CraterLib - ${project.version}") + setGameVersions("1.21.3") setLoaders("fabric", "quilt") setArtifact(remapJar) setCurseEnvironment("both") diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java b/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java index dbcaf63..ce16da7 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java @@ -13,7 +13,7 @@ public class FabricCompatHelper implements CompatUtils { if (!ModloaderEnvironment.INSTANCE.isModLoaded("melius-vanish")) return true; - return Vanish.isPlayerVanished(player.toMojangServerPlayer()); + return !Vanish.isPlayerVanished(player.toMojangServerPlayer()); } @Override diff --git a/Forge/build.gradle b/Forge/build.gradle index b117838..9f2ac13 100644 --- a/Forge/build.gradle +++ b/Forge/build.gradle @@ -105,7 +105,7 @@ publisher { setModrinthID(modrinth_id) setNightbloomID("craterlib") setVersionType("release") - setChangelog("https://raw.githubusercontent.com/hypherionmc/changelogs/main/craterlib/changelog-forge.md") + setChangelog(rootProject.file("changelog.md")) setProjectVersion("${minecraft_version}-${project.version}") setDisplayName("[Forge 1.20.6] CraterLib - ${project.version}") setGameVersions("1.20.6") diff --git a/NeoForge/build.gradle b/NeoForge/build.gradle index 4ff1561..cec72cb 100644 --- a/NeoForge/build.gradle +++ b/NeoForge/build.gradle @@ -111,10 +111,10 @@ publisher { setModrinthID(modrinth_id) setNightbloomID("craterlib") setVersionType("release") - setChangelog("https://raw.githubusercontent.com/hypherionmc/changelogs/main/craterlib/changelog-forge.md") + setChangelog(rootProject.file("changelog.md")) setProjectVersion("${minecraft_version}-${project.version}") - setDisplayName("[NeoForge 1.21.2] CraterLib - ${project.version}") - setGameVersions("1.21.2") + setDisplayName("[NeoForge 1.21.3] CraterLib - ${project.version}") + setGameVersions("1.21.3") setLoaders("neoforge") setArtifact(remapJar) setCurseEnvironment("both") diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java index 469c172..a39412c 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java @@ -12,7 +12,7 @@ public class NeoForgeCompatHelper implements CompatUtils { if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) return true; - return VanishUtil.isVanished(player.toMojangServerPlayer()); + return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/Paper/build.gradle b/Paper/build.gradle new file mode 100644 index 0000000..db96228 --- /dev/null +++ b/Paper/build.gradle @@ -0,0 +1,80 @@ +plugins { + id "io.papermc.paperweight.userdev" version "1.7.3" + id "xyz.jpenilla.run-paper" version "2.3.0" +} + +archivesBaseName = "${mod_name.replace(" ", "")}-Paper-${minecraft_version}" + +origami { + excludedPackages = ["com.hypherionmc.craterlib.client", "com.hypherionmc.craterlib.mixin", "com.hypherionmc.craterlib.nojang.client", "com.hypherionmc.craterlib.core.rpcsdk", "com.hypherionmc.craterlib.nojang.realmsclient"] + excludedResources = ["pack.mcmeta", "craterlib.mixins.json"] +} + +dependencies { + paperweight.paperDevBundle("${minecraft_version}-R0.1-SNAPSHOT") + + // Do not edit or remove + implementation project(":Common") +} + +shadowJar { + from sourceSets.main.output + configurations = [project.configurations.shade] + + dependencies { + exclude(dependency('com.google.code.gson:.*')) + exclude(dependency('net.kyori:.*')) + + relocate 'me.hypherionmc.moonconfig', 'shadow.hypherionmc.moonconfig' + relocate 'me.hypherionmc.mcdiscordformatter', 'shadow.hypherionmc.mcdiscordformatter' + + exclude("linux-x86-64/**", "win32-x86/**", "win32-x86-64/**", "darwin/**") + } + + setArchiveClassifier(null) + mergeServiceFiles() +} + +jar { + archiveClassifier.set "slim" +} + +tasks { + runServer { + minecraftVersion(project.minecraft_version) + } +} + +processResources { + def buildProps = project.properties.clone() + + filesMatching(['paper-plugin.yml']) { + expand buildProps + } +} + +compileTestJava.enabled = false + +tasks.assemble { + dependsOn(tasks.reobfJar) +} + +publisher { + apiKeys { + modrinth(System.getenv("MODRINTH_TOKEN")) + nightbloom(System.getenv("PLATFORM_KEY")) + } + + setModrinthID(modrinth_id) + setNightbloomID("craterlib") + setVersionType("alpha") + setChangelog(rootProject.file("changelog.md")) + setProjectVersion("${minecraft_version}-${project.version}") + setDisplayName("[Paper 1.21.3] CraterLib - ${project.version}") + setGameVersions("1.21.3") + setLoaders("paper") + setArtifact(reobfJar.outputJar) +} + +publishModrinth.dependsOn(reobfJar) +publishNightbloom.dependsOn(reobfJar) \ No newline at end of file diff --git a/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java b/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java new file mode 100644 index 0000000..4b1d4d0 --- /dev/null +++ b/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java @@ -0,0 +1,19 @@ +package com.hypherionmc.craterlib.common; + +import com.hypherionmc.craterlib.core.platform.CommonPlatform; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; +import net.minecraft.server.MinecraftServer; + +/** + * @author HypherionSA + */ +public class PaperCommonHelper implements CommonPlatform { + + public PaperCommonHelper() { + } + + @Override + public BridgedMinecraftServer getMCServer() { + return BridgedMinecraftServer.of(MinecraftServer.getServer()); + } +} diff --git a/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java b/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java new file mode 100644 index 0000000..484a849 --- /dev/null +++ b/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java @@ -0,0 +1,78 @@ +package com.hypherionmc.craterlib.common; + +import com.hypherionmc.craterlib.core.platform.CompatUtils; +import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.hypherionmc.craterlib.utils.ChatUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.metadata.MetadataValue; +import org.bukkit.plugin.Plugin; + +import java.lang.reflect.Method; + +public class PaperCompatHelper implements CompatUtils { + + @Override + public boolean isPlayerActive(BridgedPlayer player) { + // Essentials Vanish + if (ModloaderEnvironment.INSTANCE.isModLoaded("Essentials")) { + return !isEssentialsVanished(player); + } + + // PhantomAdmin Vanish + if (ModloaderEnvironment.INSTANCE.isModLoaded("PhantomAdmin")) + return !isPhantomVanished(player); + + // Other vanish mods + try { + Player p = (Player) player.toMojangServerPlayer(); + for (MetadataValue meta : p.getMetadata("vanished")) { + if (meta.asBoolean()) return true; + } + } catch (Exception ignored) {} + + return true; + } + + @Override + public String getSkinUUID(BridgedPlayer player) { + return player.getStringUUID(); + } + + private boolean isEssentialsVanished(BridgedPlayer player) { + try { + Plugin p = Bukkit.getPluginManager().getPlugin("Essentials"); + if (p == null) + return false; + + Method getUser = p.getClass().getMethod("getUser", String.class); + Object essentialsPlayer = getUser.invoke(p, ChatUtils.resolve(player.getName(), false)); + + if (essentialsPlayer != null) { + Method isVanished = essentialsPlayer.getClass().getMethod("isVanished"); + return (boolean) isVanished.invoke(essentialsPlayer); + } + } catch (Exception ignored) {} + + return false; + } + + private boolean isPhantomVanished(BridgedPlayer player) { + try { + Plugin p = Bukkit.getPluginManager().getPlugin("PhantomAdmin"); + if (p == null) + return false; + + Method isInvisible = p.getClass().getDeclaredMethod("isInvisible", Player.class); + isInvisible.setAccessible(true); + + return (boolean) isInvisible.invoke(p, (Player) player.toMojangServerPlayer()); + } catch (Exception ignored) { + ignored.printStackTrace(); + } + + return false; + } + +} diff --git a/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java b/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java new file mode 100644 index 0000000..2206ada --- /dev/null +++ b/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java @@ -0,0 +1,70 @@ +package com.hypherionmc.craterlib.common; + +import com.hypherionmc.craterlib.core.platform.Environment; +import com.hypherionmc.craterlib.core.platform.LoaderType; +import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; +import net.minecraft.SharedConstants; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +import java.io.File; +import java.util.Arrays; + +/** + * @author HypherionSA + */ +public class PaperLoaderHelper implements ModloaderEnvironment { + + public PaperLoaderHelper() { + } + + @Override + public boolean isFabric() { + return false; + } + + @Override + public LoaderType getLoaderType() { + return LoaderType.PAPER; + } + + @Override + public String getGameVersion() { + return SharedConstants.getCurrentVersion().getName(); + } + + @Override + public File getGameFolder() { + return new File("."); + } + + @Override + public File getConfigFolder() { + return new File("config"); + } + + @Override + public File getModsFolder() { + return Bukkit.getPluginsFolder(); + } + + @Override + public Environment getEnvironment() { + return Environment.SERVER; + } + + @Override + public boolean isModLoaded(String modid) { + return Bukkit.getPluginManager().isPluginEnabled(modid); + } + + @Override + public boolean isDevEnv() { + return false; + } + + @Override + public int getModCount() { + return (int) Arrays.stream(Bukkit.getPluginManager().getPlugins()).filter(Plugin::isEnabled).count(); + } +} diff --git a/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java b/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java new file mode 100644 index 0000000..09e49c2 --- /dev/null +++ b/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java @@ -0,0 +1,13 @@ +package com.hypherionmc.craterlib.paper; + +import com.hypherionmc.craterlib.CraterConstants; +import io.papermc.paper.plugin.bootstrap.BootstrapContext; +import io.papermc.paper.plugin.bootstrap.PluginBootstrap; + +public class CraterLibBootstrap implements PluginBootstrap { + + @Override + public void bootstrap(BootstrapContext bootstrapContext) { + CraterConstants.LOG.info("Hello from CraterLib"); + } +} diff --git a/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java b/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java new file mode 100644 index 0000000..bc36636 --- /dev/null +++ b/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java @@ -0,0 +1,31 @@ +package com.hypherionmc.craterlib.paper; + +import com.hypherionmc.craterlib.api.events.server.CraterRegisterCommandEvent; +import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.core.platform.CommonPlatform; +import com.hypherionmc.craterlib.utils.InternalServiceUtil; +import net.minecraft.server.MinecraftServer; +import org.bukkit.plugin.java.JavaPlugin; + +public class CraterLibPlugin extends JavaPlugin { + + private final PaperEventListener listener = new PaperEventListener(); + + public CraterLibPlugin() { + super(); + InternalServiceUtil.loader = getClassLoader(); + } + + @Override + public void onLoad() { + listener.onServerStarting(MinecraftServer.getServer()); + } + + @Override + public void onEnable() { + CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent(MinecraftServer.getServer().createCommandSourceStack().dispatcher())); + getServer().getPluginManager().registerEvents(listener, this); + getServer().getScheduler().scheduleSyncDelayedTask(this, listener::onServerStarted); + } + +} \ No newline at end of file diff --git a/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java b/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java new file mode 100644 index 0000000..a7ddaf7 --- /dev/null +++ b/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java @@ -0,0 +1,113 @@ +package com.hypherionmc.craterlib.paper; + +import com.hypherionmc.craterlib.api.events.common.CraterPlayerDeathEvent; +import com.hypherionmc.craterlib.api.events.server.PlayerPreLoginEvent; +import com.hypherionmc.craterlib.api.events.server.*; +import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.advancements.BridgedAdvancement; +import com.hypherionmc.craterlib.nojang.authlib.BridgedGameProfile; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.mojang.authlib.GameProfile; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.ParseResults; +import io.papermc.paper.event.player.AsyncChatEvent; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.MinecraftServer; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.craftbukkit.advancement.CraftAdvancement; +import org.bukkit.craftbukkit.damage.CraftDamageSource; +import org.bukkit.craftbukkit.entity.CraftPlayer; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.*; +import org.bukkit.event.server.ServerCommandEvent; + +public class PaperEventListener implements Listener { + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerDeath(PlayerDeathEvent event) { + CraterEventBus.INSTANCE.postEvent( + new CraterPlayerDeathEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), ((CraftDamageSource) event.getDamageSource()).getHandle()) + ); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onAdvancement(PlayerAdvancementDoneEvent event) { + if (((CraftAdvancement) event.getAdvancement()).getHandle().value().display().isEmpty() || !((CraftAdvancement) event.getAdvancement()).getHandle().value().display().get().shouldAnnounceChat()) + return; + + CraterEventBus.INSTANCE.postEvent( + new CraterAdvancementEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), BridgedAdvancement.of(((CraftAdvancement) event.getAdvancement()).getHandle().value())) + ); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerJoin(PlayerJoinEvent event) { + CraterEventBus.INSTANCE.postEvent(new CraterPlayerEvent.PlayerLoggedIn(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()))); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerLeave(PlayerQuitEvent event) { + CraterEventBus.INSTANCE.postEvent(new CraterPlayerEvent.PlayerLoggedOut(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()))); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onServerChat(AsyncChatEvent event) { + CraterEventBus.INSTANCE.postEvent( + new CraterServerChatEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), PlainTextComponentSerializer.plainText().serialize(event.message()), event.message()) + ); + } + + public void onServerStarting(MinecraftServer server) { + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(BridgedMinecraftServer.of(server))); + } + + public void onServerStarted() { + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started(BridgedMinecraftServer.of(MinecraftServer.getServer()))); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onCommandEvent(PlayerCommandPreprocessEvent event) { + CommandSourceStack stack = null; + + if (event.getPlayer() instanceof CraftPlayer craftPlayer) { + stack = craftPlayer.getHandle().createCommandSourceStack(); + } else if (event.getPlayer() instanceof ConsoleCommandSender) { + stack = MinecraftServer.getServer().createCommandSourceStack(); + } + + if (stack == null) + return; + + String cmd = event.getMessage().substring(1); + + CommandDispatcher dispatcher = MinecraftServer.getServer().getCommands().getDispatcher(); + ParseResults parseResults = dispatcher.parse(cmd, stack); + CraterEventBus.INSTANCE.postEvent(CraterCommandEvent.of(parseResults, cmd)); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onServerCommandEvent(ServerCommandEvent event) { + CommandSourceStack stack = MinecraftServer.getServer().createCommandSourceStack(); + + String cmd = event.getCommand(); + + CommandDispatcher dispatcher = MinecraftServer.getServer().getCommands().getDispatcher(); + ParseResults parseResults = dispatcher.parse(cmd, stack); + CraterEventBus.INSTANCE.postEvent(CraterCommandEvent.of(parseResults, cmd)); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPreLogin(AsyncPlayerPreLoginEvent event) { + PlayerPreLoginEvent playerPreLoginEvent = new PlayerPreLoginEvent(null, BridgedGameProfile.of(new GameProfile(event.getUniqueId(), event.getName()))); + CraterEventBus.INSTANCE.postEvent(playerPreLoginEvent); + + if (playerPreLoginEvent.wasCancelled() || playerPreLoginEvent.getMessage() != null) { + event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, playerPreLoginEvent.getMessage()); + } + } +} \ No newline at end of file diff --git a/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform b/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform new file mode 100644 index 0000000..1075687 --- /dev/null +++ b/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform @@ -0,0 +1 @@ +com.hypherionmc.craterlib.common.PaperCommonHelper \ No newline at end of file diff --git a/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils b/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils new file mode 100644 index 0000000..6a92b1f --- /dev/null +++ b/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils @@ -0,0 +1 @@ +com.hypherionmc.craterlib.common.PaperCompatHelper \ No newline at end of file diff --git a/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment b/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment new file mode 100644 index 0000000..7c40d9a --- /dev/null +++ b/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment @@ -0,0 +1 @@ +com.hypherionmc.craterlib.common.PaperLoaderHelper \ No newline at end of file diff --git a/Paper/src/main/resources/paper-plugin.yml b/Paper/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..6e8d4e8 --- /dev/null +++ b/Paper/src/main/resources/paper-plugin.yml @@ -0,0 +1,8 @@ +name: CraterLib +version: ${version} +description: "A Modding API used to create 'universal' mods" +main: com.hypherionmc.craterlib.paper.CraterLibPlugin +author: HypherionSA +api-version: '1.21.3' +bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap +load: STARTUP \ No newline at end of file diff --git a/build.gradle b/build.gradle index 1e3c04e..25ede52 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,8 @@ plugins { id 'com.github.johnrengelman.shadow' version '8.1.1' apply false id "xyz.wagyourtail.unimined" version "1.3.9" apply false id "com.hypherionmc.modutils.modpublisher" version "2.1.6" - id "com.hypherionmc.modutils.orion" version "1.0.+" + id "com.hypherionmc.modutils.orion" version "1.0.24" + id "com.hypherionmc.modutils.orion.origami" version "1.0.24" apply false id 'maven-publish' } @@ -35,6 +36,10 @@ subprojects { apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'com.hypherionmc.modutils.modpublisher' + if (project.name === "Paper") { + apply plugin: 'com.hypherionmc.modutils.orion.origami' + } + sourceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 @@ -100,17 +105,19 @@ subprojects { * = DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING = * =============================================================================== */ - unimined.minecraft(sourceSets.main, true) { - version minecraft_version + if (project.name !== "Paper") { + unimined.minecraft(sourceSets.main, true) { + version minecraft_version - mappings { - mojmap() - devNamespace "mojmap" - } + mappings { + mojmap() + devNamespace "mojmap" + } - mods { - remap(configurations.stupidRemapArch) { - catchAWNamespaceAssertion() + mods { + remap(configurations.stupidRemapArch) { + catchAWNamespaceAssertion() + } } } } diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..c66ef9b --- /dev/null +++ b/changelog.md @@ -0,0 +1,11 @@ +**New Features**: + +- Paper Support. Currently only available on Modrinth and NightBloom + +**Bug Fixes**: + +- Fixed Vanish compact API being swapped + +**Changes**: + +- Config library now logs which line of the config the error is on \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 370d452..1d9e085 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ #Project version_major=2 version_minor=1 -version_patch=1 +version_patch=2 version_build=0 #Mod @@ -10,18 +10,18 @@ mod_id=craterlib mod_name=CraterLib # Shared -minecraft_version=1.21.2 +minecraft_version=1.21.3 project_group=com.hypherionmc.craterlib # Fabric fabric_loader=0.16.7 -fabric_api=0.106.1+1.21.2 +fabric_api=0.107.3+1.21.3 # Forge forge_version=50.0.6 # NeoForged -neoforge_version=0-beta +neoforge_version=16-beta # Dependencies moon_config=1.0.10 diff --git a/settings.gradle b/settings.gradle index 07a31e6..e3b6e5f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,4 +14,6 @@ pluginManagement { } rootProject.name = 'CraterLib' -include("Common", "Fabric", "NeoForge") \ No newline at end of file +include("Common", "Fabric", "NeoForge") +include 'Paper' +