diff --git a/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java b/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java index d410a7f..2ee36cd 100644 --- a/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/1.18.2/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; diff --git a/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index ab49e4a..d805ab3 100644 --- a/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -9,7 +9,6 @@ import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.text.serializer.json.JSONOptions; import net.minecraft.ChatFormatting; import net.minecraft.SharedConstants; -import net.minecraft.Util; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; import net.minecraft.network.chat.TextComponent; @@ -100,7 +99,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/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java b/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java index 2305d14..f61b5ad 100644 --- a/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java +++ b/1.18.2/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/1.18.2/Fabric/build.gradle b/1.18.2/Fabric/build.gradle index a124d33..993c6e7 100644 --- a/1.18.2/Fabric/build.gradle +++ b/1.18.2/Fabric/build.gradle @@ -111,7 +111,7 @@ 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.18.2] CraterLib - ${project.version}") setGameVersions("1.18.2") diff --git a/1.18.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java b/1.18.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java index dbcaf63..ce16da7 100644 --- a/1.18.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java +++ b/1.18.2/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/1.18.2/Forge/build.gradle b/1.18.2/Forge/build.gradle index 29451b4..a375388 100644 --- a/1.18.2/Forge/build.gradle +++ b/1.18.2/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.18.2] CraterLib - ${project.version}") setGameVersions("1.18.2") diff --git a/1.18.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java b/1.18.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java index 34d519d..7c4795b 100644 --- a/1.18.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java +++ b/1.18.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java @@ -12,7 +12,7 @@ public class ForgeCompatHelper implements CompatUtils { if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) return true; - return VanishUtil.isVanished(player.toMojangServerPlayer()); + return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/1.18.2/build.gradle b/1.18.2/build.gradle index eac7ca3..fbe3bec 100644 --- a/1.18.2/build.gradle +++ b/1.18.2/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' } @@ -29,6 +30,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_17 targetCompatibility = JavaVersion.VERSION_17 @@ -95,17 +100,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/1.18.2/changelog.md b/1.18.2/changelog.md new file mode 100644 index 0000000..c66ef9b --- /dev/null +++ b/1.18.2/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/1.18.2/gradle.properties b/1.18.2/gradle.properties index 5a55a99..ad3c439 100644 --- a/1.18.2/gradle.properties +++ b/1.18.2/gradle.properties @@ -1,7 +1,7 @@ #Project version_major=2 version_minor=1 -version_patch=1 +version_patch=2 version_build=0 #Mod diff --git a/1.19.2/.jenkins/Jenkinsfile.snapshot b/1.19.2/.jenkins/Jenkinsfile.snapshot index b607fc4..7548a93 100644 --- a/1.19.2/.jenkins/Jenkinsfile.snapshot +++ b/1.19.2/.jenkins/Jenkinsfile.snapshot @@ -2,7 +2,7 @@ def projectName = "CraterLib"; def projectIcon = "https://cdn.modrinth.com/data/Nn8Wasaq/a172c634683a11a2e9ae593e56eba7885743bb44.png"; def JDK = "17"; def majorMc = "1.19.2"; -def modLoaders = "forge|fabric|quilt"; +def modLoaders = "forge|fabric|quilt|paper"; def supportedMc = "1.19.2"; def reltype = "snapshot"; diff --git a/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java b/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java index 02cd63c..7546979 100644 --- a/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java +++ b/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java @@ -14,8 +14,14 @@ public class CraterPlayerDeathEvent extends CraterEvent { private final BridgedPlayer player; private final DamageSource damageSource; + private Component deathMessage; + + public CraterPlayerDeathEvent(BridgedPlayer player, DamageSource source, Component deathMessage) { + this(player, source); + this.deathMessage = deathMessage; + } public Component getDeathMessage() { - return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + return deathMessage != null ? deathMessage : ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); } } diff --git a/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java b/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java index d410a7f..2ee36cd 100644 --- a/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/1.19.2/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; diff --git a/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index 089d04b..b25dff5 100644 --- a/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -12,6 +12,7 @@ import net.minecraft.SharedConstants; import net.minecraft.Util; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; + public class ChatUtils { private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( @@ -97,7 +98,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/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java b/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java index 2305d14..f61b5ad 100644 --- a/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java +++ b/1.19.2/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/1.19.2/Fabric/build.gradle b/1.19.2/Fabric/build.gradle index 5b4fde7..4067f50 100644 --- a/1.19.2/Fabric/build.gradle +++ b/1.19.2/Fabric/build.gradle @@ -112,7 +112,7 @@ 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.19.2] CraterLib - ${project.version}") setGameVersions("1.19.2") diff --git a/1.19.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java b/1.19.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java index dbcaf63..ce16da7 100644 --- a/1.19.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java +++ b/1.19.2/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/1.19.2/Forge/build.gradle b/1.19.2/Forge/build.gradle index 4a37880..d9fe734 100644 --- a/1.19.2/Forge/build.gradle +++ b/1.19.2/Forge/build.gradle @@ -106,7 +106,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.19.2] CraterLib - ${project.version}") setGameVersions("1.19.2") diff --git a/1.19.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java b/1.19.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java index 34d519d..7c4795b 100644 --- a/1.19.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java +++ b/1.19.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java @@ -12,7 +12,7 @@ public class ForgeCompatHelper implements CompatUtils { if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) return true; - return VanishUtil.isVanished(player.toMojangServerPlayer()); + return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/1.19.2/build.gradle b/1.19.2/build.gradle index 5a37940..74ae41e 100644 --- a/1.19.2/build.gradle +++ b/1.19.2/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' } @@ -29,6 +30,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_17 targetCompatibility = JavaVersion.VERSION_17 @@ -93,17 +98,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/1.19.2/changelog.md b/1.19.2/changelog.md new file mode 100644 index 0000000..c66ef9b --- /dev/null +++ b/1.19.2/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/1.19.2/gradle.properties b/1.19.2/gradle.properties index b4408b1..aa962a1 100644 --- a/1.19.2/gradle.properties +++ b/1.19.2/gradle.properties @@ -1,7 +1,7 @@ #Project version_major=2 version_minor=1 -version_patch=1 +version_patch=2 version_build=0 #Mod diff --git a/1.19.3/.jenkins/Jenkinsfile.snapshot b/1.19.3/.jenkins/Jenkinsfile.snapshot index 1f67c23..8fcbb59 100644 --- a/1.19.3/.jenkins/Jenkinsfile.snapshot +++ b/1.19.3/.jenkins/Jenkinsfile.snapshot @@ -2,7 +2,7 @@ def projectName = "CraterLib"; def projectIcon = "https://cdn.modrinth.com/data/Nn8Wasaq/a172c634683a11a2e9ae593e56eba7885743bb44.png"; def JDK = "17"; def majorMc = "1.19.3"; -def modLoaders = "forge|fabric|quilt"; +def modLoaders = "forge|fabric|quilt|paper"; def supportedMc = "1.19.4"; def reltype = "snapshot"; diff --git a/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java b/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java index 02cd63c..e6dcebd 100644 --- a/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java +++ b/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java @@ -14,8 +14,14 @@ public class CraterPlayerDeathEvent extends CraterEvent { private final BridgedPlayer player; private final DamageSource damageSource; + private Component deathMessage; + + public CraterPlayerDeathEvent(BridgedPlayer player, DamageSource damageSource, Component deathMessage) { + this(player, null); + this.deathMessage = deathMessage; + } public Component getDeathMessage() { - return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + return deathMessage != null ? deathMessage : ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); } } diff --git a/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java b/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java index bf52038..10212d2 100644 --- a/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/1.19.3/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/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index 089d04b..2bf9275 100644 --- a/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -6,17 +6,14 @@ import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; -import net.kyori.adventure.text.serializer.json.JSONOptions; import net.minecraft.ChatFormatting; -import net.minecraft.SharedConstants; import net.minecraft.Util; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; + public class ChatUtils { - private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( - JSONOptions.byDataVersion().at(SharedConstants.getCurrentVersion().getDataVersion().getVersion()) - ).build(); + private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().build(); private static final MiniMessage miniMessage = MiniMessage.miniMessage(); @@ -97,7 +94,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/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java b/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java index 2305d14..f61b5ad 100644 --- a/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java +++ b/1.19.3/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/1.19.3/Fabric/build.gradle b/1.19.3/Fabric/build.gradle index 6554530..18cf7f3 100644 --- a/1.19.3/Fabric/build.gradle +++ b/1.19.3/Fabric/build.gradle @@ -112,7 +112,7 @@ 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.19.4] CraterLib - ${project.version}") setGameVersions("1.19.4") diff --git a/1.19.3/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java b/1.19.3/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java index dbcaf63..ce16da7 100644 --- a/1.19.3/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java +++ b/1.19.3/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/1.19.3/Forge/build.gradle b/1.19.3/Forge/build.gradle index 6bedefe..8f027ab 100644 --- a/1.19.3/Forge/build.gradle +++ b/1.19.3/Forge/build.gradle @@ -107,7 +107,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.19.4] CraterLib - ${project.version}") setGameVersions("1.19.4") diff --git a/1.19.3/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java b/1.19.3/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java index 34d519d..7c4795b 100644 --- a/1.19.3/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java +++ b/1.19.3/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java @@ -12,7 +12,7 @@ public class ForgeCompatHelper implements CompatUtils { if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) return true; - return VanishUtil.isVanished(player.toMojangServerPlayer()); + return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/1.19.3/Paper/build.gradle b/1.19.3/Paper/build.gradle new file mode 100644 index 0000000..44dca62 --- /dev/null +++ b/1.19.3/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.19.4] CraterLib - ${project.version}") + setGameVersions("1.19.4") + setLoaders("paper") + setArtifact(reobfJar.outputJar) +} + +publishModrinth.dependsOn(reobfJar) +publishNightbloom.dependsOn(reobfJar) diff --git a/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java b/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java new file mode 100644 index 0000000..4b1d4d0 --- /dev/null +++ b/1.19.3/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/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java b/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java new file mode 100644 index 0000000..484a849 --- /dev/null +++ b/1.19.3/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/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java b/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java similarity index 50% rename from 1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java rename to 1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java index 6f15754..2206ada 100644 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java +++ b/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java @@ -4,19 +4,18 @@ 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 net.minecraft.client.Minecraft; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.fml.loading.FMLPaths; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; import java.io.File; +import java.util.Arrays; /** * @author HypherionSA */ -public class ForgeLoaderHelper implements ModloaderEnvironment { +public class PaperLoaderHelper implements ModloaderEnvironment { - public ForgeLoaderHelper() { + public PaperLoaderHelper() { } @Override @@ -26,54 +25,46 @@ public class ForgeLoaderHelper implements ModloaderEnvironment { @Override public LoaderType getLoaderType() { - return LoaderType.FORGE; + return LoaderType.PAPER; } @Override public String getGameVersion() { - return SharedConstants.VERSION_STRING; + return SharedConstants.getCurrentVersion().getName(); } @Override public File getGameFolder() { - return Minecraft.getInstance().gameDirectory; + return new File("."); } @Override public File getConfigFolder() { - return FMLPaths.CONFIGDIR.get().toFile(); + return new File("config"); } @Override public File getModsFolder() { - return FMLPaths.MODSDIR.get().toFile(); + return Bukkit.getPluginsFolder(); } @Override public Environment getEnvironment() { - switch (FMLLoader.getDist()) { - case CLIENT -> { - return Environment.CLIENT; - } - case DEDICATED_SERVER -> { - return Environment.SERVER; - } - } - return Environment.UNKNOWN; + return Environment.SERVER; } @Override public boolean isModLoaded(String modid) { - return ModList.get().isLoaded(modid); + return Bukkit.getPluginManager().isPluginEnabled(modid); } @Override public boolean isDevEnv() { - return !FMLLoader.isProduction(); + return false; } @Override public int getModCount() { - return ModList.get().size(); + return (int) Arrays.stream(Bukkit.getPluginManager().getPlugins()).filter(Plugin::isEnabled).count(); } } diff --git a/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java b/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java new file mode 100644 index 0000000..09e49c2 --- /dev/null +++ b/1.19.3/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/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java b/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java new file mode 100644 index 0000000..937b70a --- /dev/null +++ b/1.19.3/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().getCommands().getDispatcher())); + getServer().getPluginManager().registerEvents(listener, this); + getServer().getScheduler().scheduleSyncDelayedTask(this, listener::onServerStarted); + } + +} diff --git a/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java b/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java new file mode 100644 index 0000000..1f5c542 --- /dev/null +++ b/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java @@ -0,0 +1,112 @@ +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.v1_19_R3.advancement.CraftAdvancement; +import org.bukkit.craftbukkit.v1_19_R3.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()), null, event.deathMessage()) + ); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onAdvancement(PlayerAdvancementDoneEvent event) { + if (((CraftAdvancement) event.getAdvancement()).getHandle().getDisplay() == null || !(((CraftAdvancement) event.getAdvancement()).getHandle().getDisplay().shouldAnnounceChat())) + return; + + CraterEventBus.INSTANCE.postEvent( + new CraterAdvancementEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), BridgedAdvancement.of(((CraftAdvancement) event.getAdvancement()).getHandle())) + ); + } + + @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()); + } + } +} diff --git a/1.19.3/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform b/1.19.3/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform new file mode 100644 index 0000000..1075687 --- /dev/null +++ b/1.19.3/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/1.19.3/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils b/1.19.3/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils new file mode 100644 index 0000000..6a92b1f --- /dev/null +++ b/1.19.3/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/1.19.3/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment b/1.19.3/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment new file mode 100644 index 0000000..7c40d9a --- /dev/null +++ b/1.19.3/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/1.19.3/Paper/src/main/resources/paper-plugin.yml b/1.19.3/Paper/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..5c3758e --- /dev/null +++ b/1.19.3/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.19' +bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap +load: STARTUP diff --git a/1.19.3/build.gradle b/1.19.3/build.gradle index 5a37940..74ae41e 100644 --- a/1.19.3/build.gradle +++ b/1.19.3/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' } @@ -29,6 +30,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_17 targetCompatibility = JavaVersion.VERSION_17 @@ -93,17 +98,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/1.19.3/changelog.md b/1.19.3/changelog.md new file mode 100644 index 0000000..c66ef9b --- /dev/null +++ b/1.19.3/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/1.19.3/gradle.properties b/1.19.3/gradle.properties index 3ffbfc8..580f17b 100644 --- a/1.19.3/gradle.properties +++ b/1.19.3/gradle.properties @@ -1,7 +1,7 @@ #Project version_major=2 version_minor=1 -version_patch=1 +version_patch=2 version_build=0 #Mod diff --git a/1.19.3/settings.gradle b/1.19.3/settings.gradle index 1d4c2a4..33cbb66 100644 --- a/1.19.3/settings.gradle +++ b/1.19.3/settings.gradle @@ -15,3 +15,4 @@ pluginManagement { rootProject.name = 'CraterLib-1.19.3' include("Common", "Fabric", "Forge") +include 'Paper' diff --git a/1.20.2/.jenkins/Jenkinsfile.snapshot b/1.20.2/.jenkins/Jenkinsfile.snapshot index e0ecf75..4b1e387 100644 --- a/1.20.2/.jenkins/Jenkinsfile.snapshot +++ b/1.20.2/.jenkins/Jenkinsfile.snapshot @@ -2,7 +2,7 @@ def projectName = "CraterLib"; def projectIcon = "https://cdn.modrinth.com/data/Nn8Wasaq/a172c634683a11a2e9ae593e56eba7885743bb44.png"; def JDK = "17"; def majorMc = "1.20.2"; -def modLoaders = "forge|fabric|quilt"; +def modLoaders = "forge|fabric|quilt|paper"; def supportedMc = "1.20.2"; def reltype = "snapshot"; diff --git a/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java b/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java index 02cd63c..e6dcebd 100644 --- a/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java +++ b/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java @@ -14,8 +14,14 @@ public class CraterPlayerDeathEvent extends CraterEvent { private final BridgedPlayer player; private final DamageSource damageSource; + private Component deathMessage; + + public CraterPlayerDeathEvent(BridgedPlayer player, DamageSource damageSource, Component deathMessage) { + this(player, null); + this.deathMessage = deathMessage; + } public Component getDeathMessage() { - return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + return deathMessage != null ? deathMessage : ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); } } diff --git a/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java b/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java index bf52038..10212d2 100644 --- a/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/1.20.2/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/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index 089d04b..2bf9275 100644 --- a/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -6,17 +6,14 @@ import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; -import net.kyori.adventure.text.serializer.json.JSONOptions; import net.minecraft.ChatFormatting; -import net.minecraft.SharedConstants; import net.minecraft.Util; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; + public class ChatUtils { - private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( - JSONOptions.byDataVersion().at(SharedConstants.getCurrentVersion().getDataVersion().getVersion()) - ).build(); + private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().build(); private static final MiniMessage miniMessage = MiniMessage.miniMessage(); @@ -97,7 +94,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/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java b/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java index 2305d14..f61b5ad 100644 --- a/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java +++ b/1.20.2/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/1.20.2/Fabric/build.gradle b/1.20.2/Fabric/build.gradle index e18bccb..af41957 100644 --- a/1.20.2/Fabric/build.gradle +++ b/1.20.2/Fabric/build.gradle @@ -112,7 +112,7 @@ 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.20.2] CraterLib - ${project.version}") setGameVersions("1.20.2") diff --git a/1.20.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java b/1.20.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java index dbcaf63..ce16da7 100644 --- a/1.20.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java +++ b/1.20.2/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/1.20.2/Forge/build.gradle b/1.20.2/Forge/build.gradle index 75ef599..ad7c988 100644 --- a/1.20.2/Forge/build.gradle +++ b/1.20.2/Forge/build.gradle @@ -107,7 +107,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.2] CraterLib - ${project.version}") setGameVersions("1.20.2") diff --git a/1.20.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java b/1.20.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java index 34d519d..7c4795b 100644 --- a/1.20.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java +++ b/1.20.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java @@ -12,7 +12,7 @@ public class ForgeCompatHelper implements CompatUtils { if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) return true; - return VanishUtil.isVanished(player.toMojangServerPlayer()); + return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/1.20.2/Paper/build.gradle b/1.20.2/Paper/build.gradle new file mode 100644 index 0000000..1b10ccc --- /dev/null +++ b/1.20.2/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.20.2] CraterLib - ${project.version}") + setGameVersions("1.20.2") + setLoaders("paper") + setArtifact(reobfJar.outputJar) +} + +publishModrinth.dependsOn(reobfJar) +publishNightbloom.dependsOn(reobfJar) diff --git a/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java b/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java new file mode 100644 index 0000000..4b1d4d0 --- /dev/null +++ b/1.20.2/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/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java b/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java new file mode 100644 index 0000000..484a849 --- /dev/null +++ b/1.20.2/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/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java b/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java similarity index 50% rename from 1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java rename to 1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java index 6f15754..2206ada 100644 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java +++ b/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java @@ -4,19 +4,18 @@ 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 net.minecraft.client.Minecraft; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.fml.loading.FMLPaths; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; import java.io.File; +import java.util.Arrays; /** * @author HypherionSA */ -public class ForgeLoaderHelper implements ModloaderEnvironment { +public class PaperLoaderHelper implements ModloaderEnvironment { - public ForgeLoaderHelper() { + public PaperLoaderHelper() { } @Override @@ -26,54 +25,46 @@ public class ForgeLoaderHelper implements ModloaderEnvironment { @Override public LoaderType getLoaderType() { - return LoaderType.FORGE; + return LoaderType.PAPER; } @Override public String getGameVersion() { - return SharedConstants.VERSION_STRING; + return SharedConstants.getCurrentVersion().getName(); } @Override public File getGameFolder() { - return Minecraft.getInstance().gameDirectory; + return new File("."); } @Override public File getConfigFolder() { - return FMLPaths.CONFIGDIR.get().toFile(); + return new File("config"); } @Override public File getModsFolder() { - return FMLPaths.MODSDIR.get().toFile(); + return Bukkit.getPluginsFolder(); } @Override public Environment getEnvironment() { - switch (FMLLoader.getDist()) { - case CLIENT -> { - return Environment.CLIENT; - } - case DEDICATED_SERVER -> { - return Environment.SERVER; - } - } - return Environment.UNKNOWN; + return Environment.SERVER; } @Override public boolean isModLoaded(String modid) { - return ModList.get().isLoaded(modid); + return Bukkit.getPluginManager().isPluginEnabled(modid); } @Override public boolean isDevEnv() { - return !FMLLoader.isProduction(); + return false; } @Override public int getModCount() { - return ModList.get().size(); + return (int) Arrays.stream(Bukkit.getPluginManager().getPlugins()).filter(Plugin::isEnabled).count(); } } diff --git a/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java b/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java new file mode 100644 index 0000000..09e49c2 --- /dev/null +++ b/1.20.2/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/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java b/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java new file mode 100644 index 0000000..937b70a --- /dev/null +++ b/1.20.2/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().getCommands().getDispatcher())); + getServer().getPluginManager().registerEvents(listener, this); + getServer().getScheduler().scheduleSyncDelayedTask(this, listener::onServerStarted); + } + +} diff --git a/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java b/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java new file mode 100644 index 0000000..ba6551b --- /dev/null +++ b/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java @@ -0,0 +1,116 @@ +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.advancements.Advancement; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.MinecraftServer; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.craftbukkit.v1_20_R2.advancement.CraftAdvancement; +import org.bukkit.craftbukkit.v1_20_R2.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()), null, event.deathMessage()) + ); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onAdvancement(PlayerAdvancementDoneEvent event) { + AdvancementHolder advancement = ((CraftAdvancement) event.getAdvancement()).getHandle(); + + if (advancement.value().display().isEmpty() || !advancement.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()); + } + } +} diff --git a/1.20.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform b/1.20.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform new file mode 100644 index 0000000..1075687 --- /dev/null +++ b/1.20.2/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/1.20.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils b/1.20.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils new file mode 100644 index 0000000..6a92b1f --- /dev/null +++ b/1.20.2/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/1.20.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment b/1.20.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment new file mode 100644 index 0000000..7c40d9a --- /dev/null +++ b/1.20.2/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/1.20.2/Paper/src/main/resources/paper-plugin.yml b/1.20.2/Paper/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..50e8646 --- /dev/null +++ b/1.20.2/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.20' +bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap +load: STARTUP diff --git a/1.20.2/build.gradle b/1.20.2/build.gradle index 5a37940..74ae41e 100644 --- a/1.20.2/build.gradle +++ b/1.20.2/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' } @@ -29,6 +30,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_17 targetCompatibility = JavaVersion.VERSION_17 @@ -93,17 +98,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/1.20.2/changelog.md b/1.20.2/changelog.md new file mode 100644 index 0000000..c66ef9b --- /dev/null +++ b/1.20.2/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/1.20.2/gradle.properties b/1.20.2/gradle.properties index 2696bd6..9df3f61 100644 --- a/1.20.2/gradle.properties +++ b/1.20.2/gradle.properties @@ -1,7 +1,7 @@ #Project version_major=2 version_minor=1 -version_patch=1 +version_patch=2 version_build=0 #Mod diff --git a/1.20.2/settings.gradle b/1.20.2/settings.gradle index 11f1e70..d52a3dd 100644 --- a/1.20.2/settings.gradle +++ b/1.20.2/settings.gradle @@ -15,3 +15,4 @@ pluginManagement { rootProject.name = 'CraterLib-1.20.2' include("Common", "Fabric", "Forge") +include 'Paper' diff --git a/1.20.4/.jenkins/Jenkinsfile.snapshot b/1.20.4/.jenkins/Jenkinsfile.snapshot index 0e31ba1..2959391 100644 --- a/1.20.4/.jenkins/Jenkinsfile.snapshot +++ b/1.20.4/.jenkins/Jenkinsfile.snapshot @@ -2,7 +2,7 @@ def projectName = "CraterLib"; def projectIcon = "https://cdn.modrinth.com/data/Nn8Wasaq/a172c634683a11a2e9ae593e56eba7885743bb44.png"; def JDK = "17"; def majorMc = "1.20.4"; -def modLoaders = "neoforge|forge|fabric|quilt"; +def modLoaders = "neoforge|forge|fabric|quilt|paper"; def supportedMc = "1.20.4"; def reltype = "snapshot"; diff --git a/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java b/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java index 02cd63c..e6dcebd 100644 --- a/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java +++ b/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java @@ -14,8 +14,14 @@ public class CraterPlayerDeathEvent extends CraterEvent { private final BridgedPlayer player; private final DamageSource damageSource; + private Component deathMessage; + + public CraterPlayerDeathEvent(BridgedPlayer player, DamageSource damageSource, Component deathMessage) { + this(player, null); + this.deathMessage = deathMessage; + } public Component getDeathMessage() { - return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + return deathMessage != null ? deathMessage : ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); } } diff --git a/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java b/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java index bf52038..10212d2 100644 --- a/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/1.20.4/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/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index 089d04b..b25dff5 100644 --- a/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -12,6 +12,7 @@ import net.minecraft.SharedConstants; import net.minecraft.Util; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; + public class ChatUtils { private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( @@ -97,7 +98,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/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java b/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java index 2305d14..f61b5ad 100644 --- a/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java +++ b/1.20.4/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/1.20.4/Fabric/build.gradle b/1.20.4/Fabric/build.gradle index b2d9668..7ce8c69 100644 --- a/1.20.4/Fabric/build.gradle +++ b/1.20.4/Fabric/build.gradle @@ -113,7 +113,7 @@ 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.20.4] CraterLib - ${project.version}") setGameVersions("1.20.4") diff --git a/1.20.4/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java b/1.20.4/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java index dbcaf63..ce16da7 100644 --- a/1.20.4/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java +++ b/1.20.4/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/1.20.4/Forge/build.gradle b/1.20.4/Forge/build.gradle index 0ecaa19..28df2c5 100644 --- a/1.20.4/Forge/build.gradle +++ b/1.20.4/Forge/build.gradle @@ -107,7 +107,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.4] CraterLib - ${project.version}") setGameVersions("1.20.4") diff --git a/1.20.4/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java b/1.20.4/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java index 34d519d..7c4795b 100644 --- a/1.20.4/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java +++ b/1.20.4/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java @@ -12,7 +12,7 @@ public class ForgeCompatHelper implements CompatUtils { if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) return true; - return VanishUtil.isVanished(player.toMojangServerPlayer()); + return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/1.20.4/NeoForge/build.gradle b/1.20.4/NeoForge/build.gradle index 8915bc4..0931e82 100644 --- a/1.20.4/NeoForge/build.gradle +++ b/1.20.4/NeoForge/build.gradle @@ -106,7 +106,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("[NeoForge 1.20.4] CraterLib - ${project.version}") setGameVersions("1.20.4") diff --git a/1.20.4/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java b/1.20.4/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java index 469c172..a39412c 100644 --- a/1.20.4/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java +++ b/1.20.4/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/1.20.4/Paper/build.gradle b/1.20.4/Paper/build.gradle new file mode 100644 index 0000000..977ab3f --- /dev/null +++ b/1.20.4/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.20.4] CraterLib - ${project.version}") + setGameVersions("1.20.4") + setLoaders("paper") + setArtifact(reobfJar.outputJar) +} + +publishModrinth.dependsOn(reobfJar) +publishNightbloom.dependsOn(reobfJar) diff --git a/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java b/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java new file mode 100644 index 0000000..4b1d4d0 --- /dev/null +++ b/1.20.4/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/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java b/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java new file mode 100644 index 0000000..484a849 --- /dev/null +++ b/1.20.4/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/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java b/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java new file mode 100644 index 0000000..2206ada --- /dev/null +++ b/1.20.4/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/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java b/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java new file mode 100644 index 0000000..09e49c2 --- /dev/null +++ b/1.20.4/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/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java b/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java new file mode 100644 index 0000000..bc36636 --- /dev/null +++ b/1.20.4/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/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java b/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java new file mode 100644 index 0000000..69f7d5f --- /dev/null +++ b/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java @@ -0,0 +1,112 @@ +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.v1_20_R3.advancement.CraftAdvancement; +import org.bukkit.craftbukkit.v1_20_R3.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()), null, event.deathMessage()) + ); + } + + @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()); + } + } +} diff --git a/1.20.4/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform b/1.20.4/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform new file mode 100644 index 0000000..1075687 --- /dev/null +++ b/1.20.4/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/1.20.4/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils b/1.20.4/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils new file mode 100644 index 0000000..6a92b1f --- /dev/null +++ b/1.20.4/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/1.20.4/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment b/1.20.4/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment new file mode 100644 index 0000000..7c40d9a --- /dev/null +++ b/1.20.4/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/1.20.4/Paper/src/main/resources/paper-plugin.yml b/1.20.4/Paper/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..50e8646 --- /dev/null +++ b/1.20.4/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.20' +bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap +load: STARTUP diff --git a/1.20.4/build.gradle b/1.20.4/build.gradle index 6c58de8..d5286cd 100644 --- a/1.20.4/build.gradle +++ b/1.20.4/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' } @@ -29,6 +30,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_17 targetCompatibility = JavaVersion.VERSION_17 @@ -93,17 +98,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/1.20.4/changelog.md b/1.20.4/changelog.md new file mode 100644 index 0000000..c66ef9b --- /dev/null +++ b/1.20.4/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/1.20.4/gradle.properties b/1.20.4/gradle.properties index 0dbd6ab..e7ddc8c 100644 --- a/1.20.4/gradle.properties +++ b/1.20.4/gradle.properties @@ -1,7 +1,7 @@ #Project version_major=2 version_minor=1 -version_patch=1 +version_patch=2 version_build=0 #Mod diff --git a/1.20.4/settings.gradle b/1.20.4/settings.gradle index 9bd5d13..5ad0079 100644 --- a/1.20.4/settings.gradle +++ b/1.20.4/settings.gradle @@ -15,3 +15,4 @@ pluginManagement { rootProject.name = 'CraterLib-1.20.4' include("Common", "Fabric", "Forge", "NeoForge") +include 'Paper' diff --git a/1.20/.jenkins/Jenkinsfile.snapshot b/1.20/.jenkins/Jenkinsfile.snapshot index 738594b..0ffab2f 100644 --- a/1.20/.jenkins/Jenkinsfile.snapshot +++ b/1.20/.jenkins/Jenkinsfile.snapshot @@ -2,7 +2,7 @@ def projectName = "CraterLib"; def projectIcon = "https://cdn.modrinth.com/data/Nn8Wasaq/a172c634683a11a2e9ae593e56eba7885743bb44.png"; def JDK = "17"; def majorMc = "1.20"; -def modLoaders = "forge|fabric|quilt"; +def modLoaders = "forge|fabric|quilt|paper"; def supportedMc = "1.20|1.20.1"; def reltype = "snapshot"; diff --git a/1.20/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java b/1.20/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java index 02cd63c..e6dcebd 100644 --- a/1.20/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java +++ b/1.20/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java @@ -14,8 +14,14 @@ public class CraterPlayerDeathEvent extends CraterEvent { private final BridgedPlayer player; private final DamageSource damageSource; + private Component deathMessage; + + public CraterPlayerDeathEvent(BridgedPlayer player, DamageSource damageSource, Component deathMessage) { + this(player, null); + this.deathMessage = deathMessage; + } public Component getDeathMessage() { - return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + return deathMessage != null ? deathMessage : ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); } } diff --git a/1.20/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java b/1.20/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java index bf52038..10212d2 100644 --- a/1.20/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/1.20/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/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index 089d04b..2bf9275 100644 --- a/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -6,17 +6,14 @@ import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; -import net.kyori.adventure.text.serializer.json.JSONOptions; import net.minecraft.ChatFormatting; -import net.minecraft.SharedConstants; import net.minecraft.Util; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; + public class ChatUtils { - private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( - JSONOptions.byDataVersion().at(SharedConstants.getCurrentVersion().getDataVersion().getVersion()) - ).build(); + private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().build(); private static final MiniMessage miniMessage = MiniMessage.miniMessage(); @@ -97,7 +94,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/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java b/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java index 2305d14..f61b5ad 100644 --- a/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java +++ b/1.20/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/1.20/Fabric/build.gradle b/1.20/Fabric/build.gradle index edbadf2..fd59e31 100644 --- a/1.20/Fabric/build.gradle +++ b/1.20/Fabric/build.gradle @@ -112,7 +112,7 @@ 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.20/1.20.1] CraterLib - ${project.version}") setGameVersions("1.20", "1.20.1") diff --git a/1.20/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java b/1.20/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java index dbcaf63..ce16da7 100644 --- a/1.20/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java +++ b/1.20/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/1.20/Forge/build.gradle b/1.20/Forge/build.gradle index 058181c..cb78650 100644 --- a/1.20/Forge/build.gradle +++ b/1.20/Forge/build.gradle @@ -107,7 +107,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/1.20.1] CraterLib - ${project.version}") setGameVersions("1.20", "1.20.1") diff --git a/1.20/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java b/1.20/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java index 34d519d..7c4795b 100644 --- a/1.20/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java +++ b/1.20/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java @@ -12,7 +12,7 @@ public class ForgeCompatHelper implements CompatUtils { if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) return true; - return VanishUtil.isVanished(player.toMojangServerPlayer()); + return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/1.20/Paper/build.gradle b/1.20/Paper/build.gradle new file mode 100644 index 0000000..215e135 --- /dev/null +++ b/1.20/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.20-1.20.1] CraterLib - ${project.version}") + setGameVersions("1.20", "1.20.1") + setLoaders("paper") + setArtifact(reobfJar.outputJar) +} + +publishModrinth.dependsOn(reobfJar) +publishNightbloom.dependsOn(reobfJar) diff --git a/1.20/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java b/1.20/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java new file mode 100644 index 0000000..4b1d4d0 --- /dev/null +++ b/1.20/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/1.20/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java b/1.20/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java new file mode 100644 index 0000000..484a849 --- /dev/null +++ b/1.20/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/1.20/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java b/1.20/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java new file mode 100644 index 0000000..2206ada --- /dev/null +++ b/1.20/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/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java b/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java new file mode 100644 index 0000000..09e49c2 --- /dev/null +++ b/1.20/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/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java b/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java new file mode 100644 index 0000000..937b70a --- /dev/null +++ b/1.20/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().getCommands().getDispatcher())); + getServer().getPluginManager().registerEvents(listener, this); + getServer().getScheduler().scheduleSyncDelayedTask(this, listener::onServerStarted); + } + +} diff --git a/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java b/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java new file mode 100644 index 0000000..cbce97b --- /dev/null +++ b/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java @@ -0,0 +1,112 @@ +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.v1_20_R1.advancement.CraftAdvancement; +import org.bukkit.craftbukkit.v1_20_R1.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()), null, event.deathMessage()) + ); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onAdvancement(PlayerAdvancementDoneEvent event) { + if (((CraftAdvancement) event.getAdvancement()).getHandle() == null || ((CraftAdvancement) event.getAdvancement()).getHandle().getDisplay() == null || !((CraftAdvancement) event.getAdvancement()).getHandle().getDisplay().shouldAnnounceChat()) + return; + + CraterEventBus.INSTANCE.postEvent( + new CraterAdvancementEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), BridgedAdvancement.of(((CraftAdvancement) event.getAdvancement()).getHandle())) + ); + } + + @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()); + } + } +} diff --git a/1.20/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform b/1.20/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform new file mode 100644 index 0000000..1075687 --- /dev/null +++ b/1.20/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/1.20/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils b/1.20/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils new file mode 100644 index 0000000..6a92b1f --- /dev/null +++ b/1.20/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/1.20/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment b/1.20/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment new file mode 100644 index 0000000..7c40d9a --- /dev/null +++ b/1.20/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/1.20/Paper/src/main/resources/paper-plugin.yml b/1.20/Paper/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..50e8646 --- /dev/null +++ b/1.20/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.20' +bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap +load: STARTUP diff --git a/1.20/build.gradle b/1.20/build.gradle index 17dd23e..5f08a9f 100644 --- a/1.20/build.gradle +++ b/1.20/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' } @@ -28,6 +29,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_17 targetCompatibility = JavaVersion.VERSION_17 @@ -92,17 +97,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/1.20/changelog.md b/1.20/changelog.md new file mode 100644 index 0000000..c66ef9b --- /dev/null +++ b/1.20/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/1.20/gradle.properties b/1.20/gradle.properties index efced36..ace17ba 100644 --- a/1.20/gradle.properties +++ b/1.20/gradle.properties @@ -1,7 +1,7 @@ #Project version_major=2 version_minor=1 -version_patch=1 +version_patch=2 version_build=0 #Mod diff --git a/1.20/settings.gradle b/1.20/settings.gradle index 4b6866f..79d6e2b 100644 --- a/1.20/settings.gradle +++ b/1.20/settings.gradle @@ -15,3 +15,4 @@ pluginManagement { rootProject.name = 'CraterLib-1.20' include("Common", "Fabric", "Forge") +include 'Paper' diff --git a/1.21.2/.jenkins/Jenkinsfile.snapshot b/1.21.2/.jenkins/Jenkinsfile.snapshot index bfc1247..dd5bb20 100644 --- a/1.21.2/.jenkins/Jenkinsfile.snapshot +++ b/1.21.2/.jenkins/Jenkinsfile.snapshot @@ -2,9 +2,9 @@ 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 reltype = "release"; +def modLoaders = "neoforge|fabric|quilt|paper"; +def supportedMc = "1.21.3"; +def reltype = "snapshot"; pipeline { agent { diff --git a/1.21.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java b/1.21.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java index bf52038..10212d2 100644 --- a/1.21.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/1.21.2/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/1.21.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/1.21.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index a68e6f7..9a35718 100644 --- a/1.21.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/1.21.2/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/1.21.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java b/1.21.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java index 2305d14..f61b5ad 100644 --- a/1.21.2/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java +++ b/1.21.2/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/1.21.2/Fabric/build.gradle b/1.21.2/Fabric/build.gradle index a3a6220..d14e5d4 100644 --- a/1.21.2/Fabric/build.gradle +++ b/1.21.2/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/1.21.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java b/1.21.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java index dbcaf63..ce16da7 100644 --- a/1.21.2/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java +++ b/1.21.2/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/1.21.2/Forge/build.gradle b/1.21.2/Forge/build.gradle deleted file mode 100644 index b117838..0000000 --- a/1.21.2/Forge/build.gradle +++ /dev/null @@ -1,116 +0,0 @@ -// Adjust the output jar name here -archivesBaseName = "${mod_name.replace(" ", "")}-Forge-${minecraft_version}" - -dependencies { - // Compat - // NOT AVAILABLE ON FORGE modImplementation("maven.modrinth:vanishmod:${vanishmod}") - - // Do not edit or remove - implementation project(":Common") -} - -shadowJar { - from sourceSets.main.output - configurations = [project.configurations.shade] - - dependencies { - exclude(dependency('com.google.code.gson:.*')) - - relocate 'me.hypherionmc.moonconfig', 'shadow.hypherionmc.moonconfig' - relocate 'me.hypherionmc.mcdiscordformatter', 'shadow.hypherionmc.mcdiscordformatter' - relocate 'net.kyori', 'shadow.kyori' - } - - setArchiveClassifier('dev-shadow') - mergeServiceFiles() -} - -/** - * =============================================================================== - * = DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING = - * =============================================================================== - */ - -unimined.minecraft { - minecraftForge { - loader forge_version - mixinConfig("${mod_id}.mixins.json", "${mod_id}.forge.mixins.json") - } -} - -remapJar { - inputFile.set shadowJar.archiveFile - dependsOn shadowJar - archiveClassifier.set null -} - -jar { - archiveClassifier.set "dev" -} - -processResources { - from project(":Common").sourceSets.main.resources - def buildProps = project.properties.clone() - - filesMatching("META-INF/mods.toml") { - expand buildProps - } -} - -compileTestJava.enabled = false - -tasks.withType(JavaCompile).configureEach { - source(project(":Common").sourceSets.main.allSource) -} - -/** - * Publishing Config - */ -publishing { - publications { - mavenJava(MavenPublication) { - artifactId project.archivesBaseName - from components.java - - artifact(remapJar) { - builtBy remapJar - } - - pom.withXml { - Node pomNode = asNode() - pomNode.dependencies.'*'.findAll() { - it.artifactId.text() == 'regutils-joined-fabric' || - it.artifactId.text() == 'core' || - it.artifactId.text() == 'toml' - }.each() { - it.parent().remove(it) - } - } - } - } - - repositories { - maven rootProject.orion.getPublishingMaven() - } -} - -publisher { - apiKeys { - modrinth(System.getenv("MODRINTH_TOKEN")) - curseforge(System.getenv("CURSE_TOKEN")) - nightbloom(System.getenv("PLATFORM_KEY")) - } - - setCurseID(curse_id) - setModrinthID(modrinth_id) - setNightbloomID("craterlib") - setVersionType("release") - setChangelog("https://raw.githubusercontent.com/hypherionmc/changelogs/main/craterlib/changelog-forge.md") - setProjectVersion("${minecraft_version}-${project.version}") - setDisplayName("[Forge 1.20.6] CraterLib - ${project.version}") - setGameVersions("1.20.6") - setLoaders("forge") - setArtifact(remapJar) - setCurseEnvironment("both") - setIsManualRelease(true) -} \ No newline at end of file diff --git a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java b/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java deleted file mode 100644 index 754d986..0000000 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.hypherionmc.craterlib; - -import com.hypherionmc.craterlib.api.events.client.LateInitEvent; -import com.hypherionmc.craterlib.common.ForgeServerEvents; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork; -import com.hypherionmc.craterlib.core.networking.data.PacketSide; -import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; -import com.hypherionmc.craterlib.network.CraterForgeNetworkHandler; -import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; -import com.hypherionmc.craterlib.nojang.client.BridgedOptions; -import net.minecraft.client.Minecraft; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.loading.FMLLoader; - -@Mod(CraterConstants.MOD_ID) -public class CraterLib { - - public CraterLib() { - MinecraftForge.EVENT_BUS.register(new ForgeServerEvents()); - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup); - } - - public void commonSetup(FMLCommonSetupEvent evt) { - new CraterPacketNetwork(new CraterForgeNetworkHandler(FMLLoader.getDist().isClient() ? PacketSide.CLIENT : PacketSide.SERVER)); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options)); - CraterEventBus.INSTANCE.postEvent(event); - }); - } -} diff --git a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java b/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java deleted file mode 100644 index cb096d5..0000000 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.hypherionmc.craterlib.client; - -import com.hypherionmc.craterlib.CraterConstants; -import com.hypherionmc.craterlib.api.events.client.CraterClientTickEvent; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; -import net.minecraft.client.Minecraft; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = CraterConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) -public class ForgeClientEvents { - - @SubscribeEvent - public static void clientTick(TickEvent.LevelTickEvent event) { - if (Minecraft.getInstance().level == null) - return; - - CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(BridgedClientLevel.of(Minecraft.getInstance().level)); - CraterEventBus.INSTANCE.postEvent(craterClientTickEvent); - } - -} diff --git a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java b/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java deleted file mode 100644 index 6776622..0000000 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.hypherionmc.craterlib.client; - -import com.hypherionmc.craterlib.core.platform.ClientPlatform; -import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; -import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; -import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; -import net.minecraft.client.Minecraft; -import net.minecraft.network.Connection; - -import java.util.Objects; - -/** - * @author HypherionSA - * @date 16/06/2022 - */ -public class ForgeClientHelper implements ClientPlatform { - - public ForgeClientHelper() { - } - - @Override - public BridgedMinecraft getClientInstance() { - return new BridgedMinecraft(); - } - - @Override - public BridgedPlayer getClientPlayer() { - return BridgedPlayer.of(Minecraft.getInstance().player); - } - - @Override - public BridgedClientLevel getClientLevel() { - return BridgedClientLevel.of(Minecraft.getInstance().level); - } - - @Override - public Connection getClientConnection() { - Objects.requireNonNull(Minecraft.getInstance().getConnection(), "Cannot send packets when not in game!"); - return Minecraft.getInstance().getConnection().getConnection(); - } -} diff --git a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java b/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java deleted file mode 100644 index 281ddd7..0000000 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.hypherionmc.craterlib.common; - -import com.hypherionmc.craterlib.core.platform.CommonPlatform; -import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraftforge.server.ServerLifecycleHooks; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author HypherionSA - */ -public class ForgeCommonHelper implements CommonPlatform { - - public static Map TABS = new HashMap<>(); - - public ForgeCommonHelper() { - } - - @Override - public BridgedMinecraftServer getMCServer() { - return BridgedMinecraftServer.of(ServerLifecycleHooks.getCurrentServer()); - } -} diff --git a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java b/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java deleted file mode 100644 index f325837..0000000 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hypherionmc.craterlib.common; - -import com.hypherionmc.craterlib.core.platform.CompatUtils; -import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; - -public class ForgeCompatHelper implements CompatUtils { - - @Override - public boolean isPlayerActive(BridgedPlayer player) { - return true; - } - - @Override - public String getSkinUUID(BridgedPlayer player) { - return player.getStringUUID(); - } -} diff --git a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java b/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java deleted file mode 100644 index f354ddc..0000000 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.hypherionmc.craterlib.common; - -import com.hypherionmc.craterlib.api.events.server.CraterRegisterCommandEvent; -import com.hypherionmc.craterlib.api.events.server.CraterServerLifecycleEvent; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import com.hypherionmc.craterlib.nojang.commands.CommandsRegistry; -import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.event.server.ServerStartingEvent; -import net.minecraftforge.event.server.ServerStoppedEvent; -import net.minecraftforge.event.server.ServerStoppingEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; - -public class ForgeServerEvents { - - @SubscribeEvent - public void serverStarting(ServerStartingEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(BridgedMinecraftServer.of(event.getServer()))); - } - - @SubscribeEvent - public void serverStarted(ServerStartedEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started(BridgedMinecraftServer.of(event.getServer()))); - } - - @SubscribeEvent - public void serverStopping(ServerStoppingEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping(BridgedMinecraftServer.of(event.getServer()))); - } - - @SubscribeEvent - public void serverStopped(ServerStoppedEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped(BridgedMinecraftServer.of(event.getServer()))); - } - - @SubscribeEvent - public void onCommandRegister(RegisterCommandsEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent()); - CommandsRegistry.INSTANCE.registerCommands(event.getDispatcher()); - } - -} diff --git a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java b/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java deleted file mode 100644 index 927bd23..0000000 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.hypherionmc.craterlib.mixin; - -import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen; -import com.hypherionmc.craterlib.core.config.ConfigController; -import com.hypherionmc.craterlib.core.config.ModuleConfig; -import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; -import net.minecraftforge.client.ConfigScreenHandler; -import net.minecraftforge.forgespi.language.IModInfo; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Optional; -import java.util.function.BiFunction; - -/** - * @author HypherionSA - */ -@Mixin(ConfigScreenHandler.class) -public class ConfigScreenHandlerMixin { - - /** - * Inject Auto Generated config Screens into forge - * - */ - @Inject(at = @At("RETURN"), method = "getScreenFactoryFor", cancellable = true, remap = false) - private static void injectConfigScreen(IModInfo selectedMod, CallbackInfoReturnable>> cir) { - ConfigController.getMonitoredConfigs().forEach((conf, watcher) -> { - if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) { - ModuleConfig config = (ModuleConfig) conf; - if (config.getModId().equals(selectedMod.getModId())) { - cir.setReturnValue( - Optional.of((minecraft, screen) -> new CraterConfigScreen(config, screen)) - ); - } - } - }); - } - -} diff --git a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java b/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java deleted file mode 100644 index 012b6ff..0000000 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.hypherionmc.craterlib.mixin; - -import com.hypherionmc.craterlib.api.events.server.CraterServerChatEvent; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; -import com.hypherionmc.craterlib.utils.ChatUtils; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.PlayerChatMessage; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.FilteredText; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(value = ServerGamePacketListenerImpl.class, priority = Integer.MIN_VALUE) -public class ServerGamePacketListenerImplMixin { - - @Shadow - public ServerPlayer player; - - @Inject( - method = "lambda$handleChat$5", - at = @At("HEAD"), - cancellable = true - ) - private void injectChatEvent(Component component, PlayerChatMessage arg, FilteredText p_296589_, CallbackInfo ci) { - Component finalcomp = component == null ? arg.decoratedContent() : component; - CraterServerChatEvent event = new CraterServerChatEvent(BridgedPlayer.of(this.player), finalcomp.getString(), ChatUtils.mojangToAdventure(finalcomp)); - CraterEventBus.INSTANCE.postEvent(event); - if (event.wasCancelled()) - ci.cancel(); - } - -} diff --git a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java b/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java deleted file mode 100644 index cb697db..0000000 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.hypherionmc.craterlib.mixin; - -import com.hypherionmc.craterlib.api.events.server.ServerStatusEvent; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import com.hypherionmc.craterlib.utils.ChatUtils; -import net.minecraft.network.Connection; -import net.minecraft.network.protocol.status.ClientboundStatusResponsePacket; -import net.minecraft.network.protocol.status.ServerStatus; -import net.minecraft.network.protocol.status.ServerboundStatusRequestPacket; -import net.minecraft.server.network.ServerStatusPacketListenerImpl; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ServerStatusPacketListenerImpl.class) -public class ServerStatusPacketListenerMixin { - - @Shadow - @Final - private ServerStatus status; - - @Shadow @Final private Connection connection; - - @Inject(method = "handleStatusRequest", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/network/Connection;send(Lnet/minecraft/network/protocol/Packet;)V", - shift = At.Shift.BEFORE), - cancellable = true - ) - private void injectHandleStatusRequest(ServerboundStatusRequestPacket arg, CallbackInfo ci) { - ServerStatusEvent.StatusRequestEvent event = new ServerStatusEvent.StatusRequestEvent(ChatUtils.mojangToAdventure(status.description())); - CraterEventBus.INSTANCE.postEvent(event); - - if (event.getNewStatus() != null) { - ci.cancel(); - this.connection.send(new ClientboundStatusResponsePacket( - new ServerStatus(ChatUtils.adventureToMojang( - event.getNewStatus()), - status.players(), - status.version(), - status.favicon(), - status.enforcesSecureChat(), - status.isModded() - ) - )); - } - } - -} \ No newline at end of file diff --git a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java b/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java deleted file mode 100644 index cc14988..0000000 --- a/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.hypherionmc.craterlib.network; - -import com.hypherionmc.craterlib.CraterConstants; -import com.hypherionmc.craterlib.core.networking.PacketRegistry; -import com.hypherionmc.craterlib.core.networking.data.PacketContext; -import com.hypherionmc.craterlib.core.networking.data.PacketHolder; -import com.hypherionmc.craterlib.core.networking.data.PacketSide; -import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; -import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; -import net.minecraft.client.Minecraft; -import net.minecraft.network.Connection; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraftforge.event.network.CustomPayloadEvent; -import net.minecraftforge.network.ChannelBuilder; -import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.network.SimpleChannel; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -import java.util.function.Function; - -/** - * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 - */ -public class CraterForgeNetworkHandler extends PacketRegistry { - private final Map, SimpleChannel> CHANNELS = new HashMap<>(); - - public CraterForgeNetworkHandler(PacketSide side) { - super(side); - } - - protected void registerPacket(PacketHolder holder) { - if (CHANNELS.get(holder.messageType()) == null) { - SimpleChannel channel = ChannelBuilder - .named(holder.type().id()) - .clientAcceptedVersions((a, b) -> true) - .serverAcceptedVersions((a, b) -> true) - .networkProtocolVersion(1) - .simpleChannel(); - - channel.messageBuilder(holder.messageType()) - .decoder(mojangDecoder(holder.decoder())) - .encoder(mojangEncoder(holder.encoder())) - .consumerNetworkThread(buildHandler(holder.handler())) - .add(); - - CHANNELS.put(holder.messageType(), channel); - } else { - CraterConstants.LOG.error("Trying to register duplicate packet for type {}", holder.messageType()); - } - } - - public void sendToServer(T packet) { - this.sendToServer(packet, false); - } - - public void sendToServer(T packet, boolean ignoreCheck) { - SimpleChannel channel = CHANNELS.get(packet.getClass()); - Connection connection = Minecraft.getInstance().getConnection().getConnection(); - if (channel.isRemotePresent(connection) || ignoreCheck) { - channel.send(packet, PacketDistributor.SERVER.noArg()); - } - } - - public void sendToClient(T packet, BridgedPlayer player) { - SimpleChannel channel = CHANNELS.get(packet.getClass()); - ServerGamePacketListenerImpl connection = player.getConnection(); - if (connection == null) - return; - - if (channel.isRemotePresent(connection.getConnection())) { - channel.send(packet, PacketDistributor.PLAYER.with(player.toMojangServerPlayer())); - } - } - - private Function mojangDecoder(Function handler) { - return byteBuf -> handler.apply(BridgedFriendlyByteBuf.of(byteBuf)); - } - - private BiConsumer mojangEncoder(BiConsumer handler) { - return ((t, byteBuf) -> handler.accept(t, BridgedFriendlyByteBuf.of(byteBuf))); - } - - private BiConsumer buildHandler(Consumer> handler) { - return (message, ctx) -> { - ctx.enqueueWork(() -> { - PacketSide side = ctx.getDirection().getReceptionSide().isServer() ? PacketSide.SERVER : PacketSide.CLIENT; - ServerPlayer player = ctx.getSender(); - handler.accept(new PacketContext<>(BridgedPlayer.of(player), message, side)); - }); - ctx.setPacketHandled(true); - }; - } -} \ No newline at end of file diff --git a/1.21.2/Forge/src/main/resources/META-INF/mods.toml b/1.21.2/Forge/src/main/resources/META-INF/mods.toml deleted file mode 100644 index c2c7608..0000000 --- a/1.21.2/Forge/src/main/resources/META-INF/mods.toml +++ /dev/null @@ -1,31 +0,0 @@ -modLoader = "javafml" -loaderVersion = "[50,)" -license = "MIT" -issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues" - -[[mods]] - modId = "${mod_id}" - version = "${version}" - displayName = "${mod_name}" - displayURL = "https://modrinth.com/mod/craterlib" - logoFile = "craterlib_logo.png" - #credits="Thanks for this example mod goes to Java" - authors = "${mod_author}, Zenith" - description = ''' - A library mod used by First Dark Development and HypherionSA Mods - ''' - displayTest = "NONE" - -[[dependencies.${ mod_id }]] - modId = "forge" - mandatory = true - versionRange = "[50,)" - ordering = "NONE" - side = "BOTH" - -[[dependencies.${ mod_id }]] - modId = "minecraft" - mandatory = true - versionRange = "[1.20.6,1.21)" - ordering = "NONE" - side = "BOTH" diff --git a/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform b/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform deleted file mode 100644 index a12ad8c..0000000 --- a/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform +++ /dev/null @@ -1 +0,0 @@ -com.hypherionmc.craterlib.client.ForgeClientHelper \ No newline at end of file diff --git a/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform b/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform deleted file mode 100644 index 09e119f..0000000 --- a/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform +++ /dev/null @@ -1 +0,0 @@ -com.hypherionmc.craterlib.common.ForgeCommonHelper \ No newline at end of file diff --git a/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils b/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils deleted file mode 100644 index a9f823d..0000000 --- a/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils +++ /dev/null @@ -1 +0,0 @@ -com.hypherionmc.craterlib.common.ForgeCompatHelper \ No newline at end of file diff --git a/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment b/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment deleted file mode 100644 index 02b4e07..0000000 --- a/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment +++ /dev/null @@ -1 +0,0 @@ -com.hypherionmc.craterlib.common.ForgeLoaderHelper \ No newline at end of file diff --git a/1.21.2/Forge/src/main/resources/craterlib.forge.mixins.json b/1.21.2/Forge/src/main/resources/craterlib.forge.mixins.json deleted file mode 100644 index 892f6d7..0000000 --- a/1.21.2/Forge/src/main/resources/craterlib.forge.mixins.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "com.hypherionmc.craterlib.mixin", - "compatibilityLevel": "JAVA_17", - "mixins": [ - ], - "client": [ - "ConfigScreenHandlerMixin" - ], - "server": [ - "ServerGamePacketListenerImplMixin", - "ServerStatusPacketListenerMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} diff --git a/1.21.2/Forge/src/main/resources/craterlib_logo.png b/1.21.2/Forge/src/main/resources/craterlib_logo.png deleted file mode 100644 index ce0159c..0000000 Binary files a/1.21.2/Forge/src/main/resources/craterlib_logo.png and /dev/null differ diff --git a/1.21.2/NeoForge/build.gradle b/1.21.2/NeoForge/build.gradle index 298607e..e243512 100644 --- a/1.21.2/NeoForge/build.gradle +++ b/1.21.2/NeoForge/build.gradle @@ -106,10 +106,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/1.21.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java b/1.21.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java index 469c172..a39412c 100644 --- a/1.21.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java +++ b/1.21.2/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/1.21.2/Paper/build.gradle b/1.21.2/Paper/build.gradle new file mode 100644 index 0000000..db96228 --- /dev/null +++ b/1.21.2/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/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java b/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java new file mode 100644 index 0000000..4b1d4d0 --- /dev/null +++ b/1.21.2/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/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java b/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java new file mode 100644 index 0000000..484a849 --- /dev/null +++ b/1.21.2/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/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java b/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java new file mode 100644 index 0000000..2206ada --- /dev/null +++ b/1.21.2/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/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java b/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java new file mode 100644 index 0000000..09e49c2 --- /dev/null +++ b/1.21.2/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/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java b/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java new file mode 100644 index 0000000..bc36636 --- /dev/null +++ b/1.21.2/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/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java b/1.21.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java new file mode 100644 index 0000000..a7ddaf7 --- /dev/null +++ b/1.21.2/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/1.21.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform b/1.21.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform new file mode 100644 index 0000000..1075687 --- /dev/null +++ b/1.21.2/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/1.21.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils b/1.21.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils new file mode 100644 index 0000000..6a92b1f --- /dev/null +++ b/1.21.2/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/1.21.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment b/1.21.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment new file mode 100644 index 0000000..7c40d9a --- /dev/null +++ b/1.21.2/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/1.21.2/Paper/src/main/resources/paper-plugin.yml b/1.21.2/Paper/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..6e8d4e8 --- /dev/null +++ b/1.21.2/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/1.21.2/build.gradle b/1.21.2/build.gradle index ad6e0f3..e42c10c 100644 --- a/1.21.2/build.gradle +++ b/1.21.2/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' } @@ -30,6 +31,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 @@ -95,17 +100,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/1.21.2/changelog.md b/1.21.2/changelog.md new file mode 100644 index 0000000..c66ef9b --- /dev/null +++ b/1.21.2/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/1.21.2/gradle.properties b/1.21.2/gradle.properties index 83ddf26..ed1c80c 100644 --- a/1.21.2/gradle.properties +++ b/1.21.2/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/1.21.2/settings.gradle b/1.21.2/settings.gradle index 07a31e6..e3b6e5f 100644 --- a/1.21.2/settings.gradle +++ b/1.21.2/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' + diff --git a/1.21/.jenkins/Jenkinsfile.snapshot b/1.21/.jenkins/Jenkinsfile.snapshot index a39cf15..b90b534 100644 --- a/1.21/.jenkins/Jenkinsfile.snapshot +++ b/1.21/.jenkins/Jenkinsfile.snapshot @@ -2,7 +2,7 @@ def projectName = "CraterLib"; def projectIcon = "https://cdn.modrinth.com/data/Nn8Wasaq/a172c634683a11a2e9ae593e56eba7885743bb44.png"; def JDK = "21"; def majorMc = "1.21"; -def modLoaders = "neoforge|fabric|quilt"; +def modLoaders = "neoforge|fabric|quilt|paper"; def supportedMc = "1.21|1.21.1"; def reltype = "snapshot"; diff --git a/1.21/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java b/1.21/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java index bf52038..10212d2 100644 --- a/1.21/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/1.21/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/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index a68e6f7..9a35718 100644 --- a/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/1.21/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/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java b/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java index 2305d14..f61b5ad 100644 --- a/1.21/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java +++ b/1.21/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/1.21/Fabric/build.gradle b/1.21/Fabric/build.gradle index 6eb855d..5a0f1ae 100644 --- a/1.21/Fabric/build.gradle +++ b/1.21/Fabric/build.gradle @@ -113,7 +113,7 @@ 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.x] CraterLib - ${project.version}") setGameVersions("1.21", "1.21.1") diff --git a/1.21/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java b/1.21/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java index dbcaf63..ce16da7 100644 --- a/1.21/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCompatHelper.java +++ b/1.21/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/1.21/Forge/build.gradle b/1.21/Forge/build.gradle deleted file mode 100644 index b117838..0000000 --- a/1.21/Forge/build.gradle +++ /dev/null @@ -1,116 +0,0 @@ -// Adjust the output jar name here -archivesBaseName = "${mod_name.replace(" ", "")}-Forge-${minecraft_version}" - -dependencies { - // Compat - // NOT AVAILABLE ON FORGE modImplementation("maven.modrinth:vanishmod:${vanishmod}") - - // Do not edit or remove - implementation project(":Common") -} - -shadowJar { - from sourceSets.main.output - configurations = [project.configurations.shade] - - dependencies { - exclude(dependency('com.google.code.gson:.*')) - - relocate 'me.hypherionmc.moonconfig', 'shadow.hypherionmc.moonconfig' - relocate 'me.hypherionmc.mcdiscordformatter', 'shadow.hypherionmc.mcdiscordformatter' - relocate 'net.kyori', 'shadow.kyori' - } - - setArchiveClassifier('dev-shadow') - mergeServiceFiles() -} - -/** - * =============================================================================== - * = DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING = - * =============================================================================== - */ - -unimined.minecraft { - minecraftForge { - loader forge_version - mixinConfig("${mod_id}.mixins.json", "${mod_id}.forge.mixins.json") - } -} - -remapJar { - inputFile.set shadowJar.archiveFile - dependsOn shadowJar - archiveClassifier.set null -} - -jar { - archiveClassifier.set "dev" -} - -processResources { - from project(":Common").sourceSets.main.resources - def buildProps = project.properties.clone() - - filesMatching("META-INF/mods.toml") { - expand buildProps - } -} - -compileTestJava.enabled = false - -tasks.withType(JavaCompile).configureEach { - source(project(":Common").sourceSets.main.allSource) -} - -/** - * Publishing Config - */ -publishing { - publications { - mavenJava(MavenPublication) { - artifactId project.archivesBaseName - from components.java - - artifact(remapJar) { - builtBy remapJar - } - - pom.withXml { - Node pomNode = asNode() - pomNode.dependencies.'*'.findAll() { - it.artifactId.text() == 'regutils-joined-fabric' || - it.artifactId.text() == 'core' || - it.artifactId.text() == 'toml' - }.each() { - it.parent().remove(it) - } - } - } - } - - repositories { - maven rootProject.orion.getPublishingMaven() - } -} - -publisher { - apiKeys { - modrinth(System.getenv("MODRINTH_TOKEN")) - curseforge(System.getenv("CURSE_TOKEN")) - nightbloom(System.getenv("PLATFORM_KEY")) - } - - setCurseID(curse_id) - setModrinthID(modrinth_id) - setNightbloomID("craterlib") - setVersionType("release") - setChangelog("https://raw.githubusercontent.com/hypherionmc/changelogs/main/craterlib/changelog-forge.md") - setProjectVersion("${minecraft_version}-${project.version}") - setDisplayName("[Forge 1.20.6] CraterLib - ${project.version}") - setGameVersions("1.20.6") - setLoaders("forge") - setArtifact(remapJar) - setCurseEnvironment("both") - setIsManualRelease(true) -} \ No newline at end of file diff --git a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java b/1.21/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java deleted file mode 100644 index 754d986..0000000 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.hypherionmc.craterlib; - -import com.hypherionmc.craterlib.api.events.client.LateInitEvent; -import com.hypherionmc.craterlib.common.ForgeServerEvents; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork; -import com.hypherionmc.craterlib.core.networking.data.PacketSide; -import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; -import com.hypherionmc.craterlib.network.CraterForgeNetworkHandler; -import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; -import com.hypherionmc.craterlib.nojang.client.BridgedOptions; -import net.minecraft.client.Minecraft; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.loading.FMLLoader; - -@Mod(CraterConstants.MOD_ID) -public class CraterLib { - - public CraterLib() { - MinecraftForge.EVENT_BUS.register(new ForgeServerEvents()); - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup); - } - - public void commonSetup(FMLCommonSetupEvent evt) { - new CraterPacketNetwork(new CraterForgeNetworkHandler(FMLLoader.getDist().isClient() ? PacketSide.CLIENT : PacketSide.SERVER)); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options)); - CraterEventBus.INSTANCE.postEvent(event); - }); - } -} diff --git a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java b/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java deleted file mode 100644 index cb096d5..0000000 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.hypherionmc.craterlib.client; - -import com.hypherionmc.craterlib.CraterConstants; -import com.hypherionmc.craterlib.api.events.client.CraterClientTickEvent; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; -import net.minecraft.client.Minecraft; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber(modid = CraterConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) -public class ForgeClientEvents { - - @SubscribeEvent - public static void clientTick(TickEvent.LevelTickEvent event) { - if (Minecraft.getInstance().level == null) - return; - - CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(BridgedClientLevel.of(Minecraft.getInstance().level)); - CraterEventBus.INSTANCE.postEvent(craterClientTickEvent); - } - -} diff --git a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java b/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java deleted file mode 100644 index 6776622..0000000 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.hypherionmc.craterlib.client; - -import com.hypherionmc.craterlib.core.platform.ClientPlatform; -import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; -import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; -import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; -import net.minecraft.client.Minecraft; -import net.minecraft.network.Connection; - -import java.util.Objects; - -/** - * @author HypherionSA - * @date 16/06/2022 - */ -public class ForgeClientHelper implements ClientPlatform { - - public ForgeClientHelper() { - } - - @Override - public BridgedMinecraft getClientInstance() { - return new BridgedMinecraft(); - } - - @Override - public BridgedPlayer getClientPlayer() { - return BridgedPlayer.of(Minecraft.getInstance().player); - } - - @Override - public BridgedClientLevel getClientLevel() { - return BridgedClientLevel.of(Minecraft.getInstance().level); - } - - @Override - public Connection getClientConnection() { - Objects.requireNonNull(Minecraft.getInstance().getConnection(), "Cannot send packets when not in game!"); - return Minecraft.getInstance().getConnection().getConnection(); - } -} diff --git a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java b/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java deleted file mode 100644 index 281ddd7..0000000 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.hypherionmc.craterlib.common; - -import com.hypherionmc.craterlib.core.platform.CommonPlatform; -import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraftforge.server.ServerLifecycleHooks; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author HypherionSA - */ -public class ForgeCommonHelper implements CommonPlatform { - - public static Map TABS = new HashMap<>(); - - public ForgeCommonHelper() { - } - - @Override - public BridgedMinecraftServer getMCServer() { - return BridgedMinecraftServer.of(ServerLifecycleHooks.getCurrentServer()); - } -} diff --git a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java b/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java deleted file mode 100644 index f325837..0000000 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hypherionmc.craterlib.common; - -import com.hypherionmc.craterlib.core.platform.CompatUtils; -import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; - -public class ForgeCompatHelper implements CompatUtils { - - @Override - public boolean isPlayerActive(BridgedPlayer player) { - return true; - } - - @Override - public String getSkinUUID(BridgedPlayer player) { - return player.getStringUUID(); - } -} diff --git a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java b/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java deleted file mode 100644 index f354ddc..0000000 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.hypherionmc.craterlib.common; - -import com.hypherionmc.craterlib.api.events.server.CraterRegisterCommandEvent; -import com.hypherionmc.craterlib.api.events.server.CraterServerLifecycleEvent; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import com.hypherionmc.craterlib.nojang.commands.CommandsRegistry; -import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.event.server.ServerStartingEvent; -import net.minecraftforge.event.server.ServerStoppedEvent; -import net.minecraftforge.event.server.ServerStoppingEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; - -public class ForgeServerEvents { - - @SubscribeEvent - public void serverStarting(ServerStartingEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(BridgedMinecraftServer.of(event.getServer()))); - } - - @SubscribeEvent - public void serverStarted(ServerStartedEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started(BridgedMinecraftServer.of(event.getServer()))); - } - - @SubscribeEvent - public void serverStopping(ServerStoppingEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping(BridgedMinecraftServer.of(event.getServer()))); - } - - @SubscribeEvent - public void serverStopped(ServerStoppedEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped(BridgedMinecraftServer.of(event.getServer()))); - } - - @SubscribeEvent - public void onCommandRegister(RegisterCommandsEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent()); - CommandsRegistry.INSTANCE.registerCommands(event.getDispatcher()); - } - -} diff --git a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java b/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java deleted file mode 100644 index 927bd23..0000000 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.hypherionmc.craterlib.mixin; - -import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen; -import com.hypherionmc.craterlib.core.config.ConfigController; -import com.hypherionmc.craterlib.core.config.ModuleConfig; -import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; -import net.minecraftforge.client.ConfigScreenHandler; -import net.minecraftforge.forgespi.language.IModInfo; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Optional; -import java.util.function.BiFunction; - -/** - * @author HypherionSA - */ -@Mixin(ConfigScreenHandler.class) -public class ConfigScreenHandlerMixin { - - /** - * Inject Auto Generated config Screens into forge - * - */ - @Inject(at = @At("RETURN"), method = "getScreenFactoryFor", cancellable = true, remap = false) - private static void injectConfigScreen(IModInfo selectedMod, CallbackInfoReturnable>> cir) { - ConfigController.getMonitoredConfigs().forEach((conf, watcher) -> { - if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) { - ModuleConfig config = (ModuleConfig) conf; - if (config.getModId().equals(selectedMod.getModId())) { - cir.setReturnValue( - Optional.of((minecraft, screen) -> new CraterConfigScreen(config, screen)) - ); - } - } - }); - } - -} diff --git a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java b/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java deleted file mode 100644 index 012b6ff..0000000 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.hypherionmc.craterlib.mixin; - -import com.hypherionmc.craterlib.api.events.server.CraterServerChatEvent; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; -import com.hypherionmc.craterlib.utils.ChatUtils; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.PlayerChatMessage; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.FilteredText; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(value = ServerGamePacketListenerImpl.class, priority = Integer.MIN_VALUE) -public class ServerGamePacketListenerImplMixin { - - @Shadow - public ServerPlayer player; - - @Inject( - method = "lambda$handleChat$5", - at = @At("HEAD"), - cancellable = true - ) - private void injectChatEvent(Component component, PlayerChatMessage arg, FilteredText p_296589_, CallbackInfo ci) { - Component finalcomp = component == null ? arg.decoratedContent() : component; - CraterServerChatEvent event = new CraterServerChatEvent(BridgedPlayer.of(this.player), finalcomp.getString(), ChatUtils.mojangToAdventure(finalcomp)); - CraterEventBus.INSTANCE.postEvent(event); - if (event.wasCancelled()) - ci.cancel(); - } - -} diff --git a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java b/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java deleted file mode 100644 index cb697db..0000000 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.hypherionmc.craterlib.mixin; - -import com.hypherionmc.craterlib.api.events.server.ServerStatusEvent; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import com.hypherionmc.craterlib.utils.ChatUtils; -import net.minecraft.network.Connection; -import net.minecraft.network.protocol.status.ClientboundStatusResponsePacket; -import net.minecraft.network.protocol.status.ServerStatus; -import net.minecraft.network.protocol.status.ServerboundStatusRequestPacket; -import net.minecraft.server.network.ServerStatusPacketListenerImpl; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ServerStatusPacketListenerImpl.class) -public class ServerStatusPacketListenerMixin { - - @Shadow - @Final - private ServerStatus status; - - @Shadow @Final private Connection connection; - - @Inject(method = "handleStatusRequest", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/network/Connection;send(Lnet/minecraft/network/protocol/Packet;)V", - shift = At.Shift.BEFORE), - cancellable = true - ) - private void injectHandleStatusRequest(ServerboundStatusRequestPacket arg, CallbackInfo ci) { - ServerStatusEvent.StatusRequestEvent event = new ServerStatusEvent.StatusRequestEvent(ChatUtils.mojangToAdventure(status.description())); - CraterEventBus.INSTANCE.postEvent(event); - - if (event.getNewStatus() != null) { - ci.cancel(); - this.connection.send(new ClientboundStatusResponsePacket( - new ServerStatus(ChatUtils.adventureToMojang( - event.getNewStatus()), - status.players(), - status.version(), - status.favicon(), - status.enforcesSecureChat(), - status.isModded() - ) - )); - } - } - -} \ No newline at end of file diff --git a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java b/1.21/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java deleted file mode 100644 index cc14988..0000000 --- a/1.21/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.hypherionmc.craterlib.network; - -import com.hypherionmc.craterlib.CraterConstants; -import com.hypherionmc.craterlib.core.networking.PacketRegistry; -import com.hypherionmc.craterlib.core.networking.data.PacketContext; -import com.hypherionmc.craterlib.core.networking.data.PacketHolder; -import com.hypherionmc.craterlib.core.networking.data.PacketSide; -import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; -import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; -import net.minecraft.client.Minecraft; -import net.minecraft.network.Connection; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraftforge.event.network.CustomPayloadEvent; -import net.minecraftforge.network.ChannelBuilder; -import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.network.SimpleChannel; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -import java.util.function.Function; - -/** - * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 - */ -public class CraterForgeNetworkHandler extends PacketRegistry { - private final Map, SimpleChannel> CHANNELS = new HashMap<>(); - - public CraterForgeNetworkHandler(PacketSide side) { - super(side); - } - - protected void registerPacket(PacketHolder holder) { - if (CHANNELS.get(holder.messageType()) == null) { - SimpleChannel channel = ChannelBuilder - .named(holder.type().id()) - .clientAcceptedVersions((a, b) -> true) - .serverAcceptedVersions((a, b) -> true) - .networkProtocolVersion(1) - .simpleChannel(); - - channel.messageBuilder(holder.messageType()) - .decoder(mojangDecoder(holder.decoder())) - .encoder(mojangEncoder(holder.encoder())) - .consumerNetworkThread(buildHandler(holder.handler())) - .add(); - - CHANNELS.put(holder.messageType(), channel); - } else { - CraterConstants.LOG.error("Trying to register duplicate packet for type {}", holder.messageType()); - } - } - - public void sendToServer(T packet) { - this.sendToServer(packet, false); - } - - public void sendToServer(T packet, boolean ignoreCheck) { - SimpleChannel channel = CHANNELS.get(packet.getClass()); - Connection connection = Minecraft.getInstance().getConnection().getConnection(); - if (channel.isRemotePresent(connection) || ignoreCheck) { - channel.send(packet, PacketDistributor.SERVER.noArg()); - } - } - - public void sendToClient(T packet, BridgedPlayer player) { - SimpleChannel channel = CHANNELS.get(packet.getClass()); - ServerGamePacketListenerImpl connection = player.getConnection(); - if (connection == null) - return; - - if (channel.isRemotePresent(connection.getConnection())) { - channel.send(packet, PacketDistributor.PLAYER.with(player.toMojangServerPlayer())); - } - } - - private Function mojangDecoder(Function handler) { - return byteBuf -> handler.apply(BridgedFriendlyByteBuf.of(byteBuf)); - } - - private BiConsumer mojangEncoder(BiConsumer handler) { - return ((t, byteBuf) -> handler.accept(t, BridgedFriendlyByteBuf.of(byteBuf))); - } - - private BiConsumer buildHandler(Consumer> handler) { - return (message, ctx) -> { - ctx.enqueueWork(() -> { - PacketSide side = ctx.getDirection().getReceptionSide().isServer() ? PacketSide.SERVER : PacketSide.CLIENT; - ServerPlayer player = ctx.getSender(); - handler.accept(new PacketContext<>(BridgedPlayer.of(player), message, side)); - }); - ctx.setPacketHandled(true); - }; - } -} \ No newline at end of file diff --git a/1.21/Forge/src/main/resources/META-INF/mods.toml b/1.21/Forge/src/main/resources/META-INF/mods.toml deleted file mode 100644 index c2c7608..0000000 --- a/1.21/Forge/src/main/resources/META-INF/mods.toml +++ /dev/null @@ -1,31 +0,0 @@ -modLoader = "javafml" -loaderVersion = "[50,)" -license = "MIT" -issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues" - -[[mods]] - modId = "${mod_id}" - version = "${version}" - displayName = "${mod_name}" - displayURL = "https://modrinth.com/mod/craterlib" - logoFile = "craterlib_logo.png" - #credits="Thanks for this example mod goes to Java" - authors = "${mod_author}, Zenith" - description = ''' - A library mod used by First Dark Development and HypherionSA Mods - ''' - displayTest = "NONE" - -[[dependencies.${ mod_id }]] - modId = "forge" - mandatory = true - versionRange = "[50,)" - ordering = "NONE" - side = "BOTH" - -[[dependencies.${ mod_id }]] - modId = "minecraft" - mandatory = true - versionRange = "[1.20.6,1.21)" - ordering = "NONE" - side = "BOTH" diff --git a/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform b/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform deleted file mode 100644 index a12ad8c..0000000 --- a/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform +++ /dev/null @@ -1 +0,0 @@ -com.hypherionmc.craterlib.client.ForgeClientHelper \ No newline at end of file diff --git a/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform b/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform deleted file mode 100644 index 09e119f..0000000 --- a/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform +++ /dev/null @@ -1 +0,0 @@ -com.hypherionmc.craterlib.common.ForgeCommonHelper \ No newline at end of file diff --git a/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils b/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils deleted file mode 100644 index a9f823d..0000000 --- a/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils +++ /dev/null @@ -1 +0,0 @@ -com.hypherionmc.craterlib.common.ForgeCompatHelper \ No newline at end of file diff --git a/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment b/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment deleted file mode 100644 index 02b4e07..0000000 --- a/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment +++ /dev/null @@ -1 +0,0 @@ -com.hypherionmc.craterlib.common.ForgeLoaderHelper \ No newline at end of file diff --git a/1.21/Forge/src/main/resources/craterlib.forge.mixins.json b/1.21/Forge/src/main/resources/craterlib.forge.mixins.json deleted file mode 100644 index 892f6d7..0000000 --- a/1.21/Forge/src/main/resources/craterlib.forge.mixins.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "com.hypherionmc.craterlib.mixin", - "compatibilityLevel": "JAVA_17", - "mixins": [ - ], - "client": [ - "ConfigScreenHandlerMixin" - ], - "server": [ - "ServerGamePacketListenerImplMixin", - "ServerStatusPacketListenerMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} diff --git a/1.21/Forge/src/main/resources/craterlib_logo.png b/1.21/Forge/src/main/resources/craterlib_logo.png deleted file mode 100644 index ce0159c..0000000 Binary files a/1.21/Forge/src/main/resources/craterlib_logo.png and /dev/null differ diff --git a/1.21/NeoForge/build.gradle b/1.21/NeoForge/build.gradle index 9fa64b3..e602557 100644 --- a/1.21/NeoForge/build.gradle +++ b/1.21/NeoForge/build.gradle @@ -106,7 +106,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("[NeoForge 1.21.x] CraterLib - ${project.version}") setGameVersions("1.21", "1.21.1") diff --git a/1.21/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java b/1.21/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java index 469c172..a39412c 100644 --- a/1.21/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java +++ b/1.21/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/1.21/Paper/build.gradle b/1.21/Paper/build.gradle new file mode 100644 index 0000000..0582e27 --- /dev/null +++ b/1.21/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-1.21.1] CraterLib - ${project.version}") + setGameVersions("1.21", "1.21.1") + setLoaders("paper") + setArtifact(reobfJar.outputJar) +} + +publishModrinth.dependsOn(reobfJar) +publishNightbloom.dependsOn(reobfJar) diff --git a/1.21/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java b/1.21/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java new file mode 100644 index 0000000..4b1d4d0 --- /dev/null +++ b/1.21/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/1.21/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java b/1.21/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java new file mode 100644 index 0000000..484a849 --- /dev/null +++ b/1.21/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/1.21/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java b/1.21/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java new file mode 100644 index 0000000..2206ada --- /dev/null +++ b/1.21/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/1.21/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java b/1.21/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java new file mode 100644 index 0000000..09e49c2 --- /dev/null +++ b/1.21/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/1.21/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java b/1.21/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java new file mode 100644 index 0000000..bc36636 --- /dev/null +++ b/1.21/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/1.21/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java b/1.21/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java new file mode 100644 index 0000000..a7ddaf7 --- /dev/null +++ b/1.21/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/1.21/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform b/1.21/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform new file mode 100644 index 0000000..1075687 --- /dev/null +++ b/1.21/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/1.21/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils b/1.21/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils new file mode 100644 index 0000000..6a92b1f --- /dev/null +++ b/1.21/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/1.21/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment b/1.21/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment new file mode 100644 index 0000000..7c40d9a --- /dev/null +++ b/1.21/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/1.21/Paper/src/main/resources/paper-plugin.yml b/1.21/Paper/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..47e5a49 --- /dev/null +++ b/1.21/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' +bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap +load: STARTUP diff --git a/1.21/build.gradle b/1.21/build.gradle index 4d9de8c..08e2213 100644 --- a/1.21/build.gradle +++ b/1.21/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' } @@ -29,6 +30,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 @@ -93,17 +98,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/1.21/changelog.md b/1.21/changelog.md new file mode 100644 index 0000000..c66ef9b --- /dev/null +++ b/1.21/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/1.21/gradle.properties b/1.21/gradle.properties index 550a6d5..ede1bbc 100644 --- a/1.21/gradle.properties +++ b/1.21/gradle.properties @@ -1,7 +1,7 @@ #Project version_major=2 version_minor=1 -version_patch=1 +version_patch=2 version_build=0 #Mod @@ -21,7 +21,7 @@ fabric_api=0.100.1+1.21 forge_version=50.0.6 # NeoForged -neoforge_version=0-beta +neoforge_version=16-beta # Dependencies moon_config=1.0.10 diff --git a/1.21/settings.gradle b/1.21/settings.gradle index 07a31e6..e3b6e5f 100644 --- a/1.21/settings.gradle +++ b/1.21/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' + diff --git a/build.gradle b/build.gradle index eb54e2d..b28988d 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ import codechicken.diffpatch.util.PatchMode plugins { id 'java' - id "com.hypherionmc.modutils.orion.porting" version "1.0.20" + id "com.hypherionmc.modutils.orion.porting" version "1.0.24" } orionporting { diff --git a/commit.sha b/commit.sha index 4b54ca4..de3b733 100644 --- a/commit.sha +++ b/commit.sha @@ -1 +1 @@ -4e2eafb7027f1235c67ebd187944d789d1aa6c12 \ No newline at end of file +0a7d569db49dd69e378de08da7c815993f91c523 \ No newline at end of file diff --git a/patches/1.18.2/.jenkins/Jenkinsfile.snapshot.patch b/patches/1.18.2/.jenkins/Jenkinsfile.snapshot.patch index 821081d..9fb8116 100644 --- a/patches/1.18.2/.jenkins/Jenkinsfile.snapshot.patch +++ b/patches/1.18.2/.jenkins/Jenkinsfile.snapshot.patch @@ -5,8 +5,8 @@ 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"; +def JDK = "17"; +def majorMc = "1.18.2"; diff --git a/patches/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java.patch b/patches/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java.patch index 8a7479d..49b00c1 100644 --- a/patches/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java.patch +++ b/patches/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java.patch @@ -1,6 +1,6 @@ --- a/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java -@@ -8,8 +8,8 @@ +@@ -9,8 +9,8 @@ public class FTBEssentials { public static boolean isPlayerMuted(BridgedPlayer player) { diff --git a/patches/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch b/patches/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch index 8bac0bb..896ff97 100644 --- a/patches/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch +++ b/patches/1.18.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch @@ -8,11 +8,14 @@ import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer; import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; -@@ -12,11 +10,10 @@ +@@ -11,14 +9,10 @@ + import net.kyori.adventure.text.serializer.json.JSONOptions; import net.minecraft.ChatFormatting; import net.minecraft.SharedConstants; - import net.minecraft.Util; +-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; @@ -22,7 +25,7 @@ public class ChatUtils { -@@ -28,30 +25,20 @@ +@@ -30,32 +24,20 @@ public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { final String serialised = adventureSerializer.serialize(inComponent); @@ -37,8 +40,10 @@ } - 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(); @@ -56,7 +61,7 @@ } public static String strip(String inString, String... toStrip) { -@@ -80,7 +67,7 @@ +@@ -84,7 +66,7 @@ } public static net.kyori.adventure.text.Component resolve(String component, boolean formatted) { @@ -65,7 +70,7 @@ if (formatted) { returnVal = MinecraftSerializer.INSTANCE.serialize(component); } -@@ -108,7 +95,7 @@ +@@ -112,7 +94,7 @@ if (identifier == null) return net.kyori.adventure.text.Component.text("Unknown"); diff --git a/patches/1.18.2/Fabric/build.gradle.patch b/patches/1.18.2/Fabric/build.gradle.patch index d319250..cb867d5 100644 --- a/patches/1.18.2/Fabric/build.gradle.patch +++ b/patches/1.18.2/Fabric/build.gradle.patch @@ -11,10 +11,10 @@ @@ -115,8 +113,8 @@ 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") + setDisplayName("[FABRIC/QUILT 1.18.2] CraterLib - ${project.version}") + setGameVersions("1.18.2") setLoaders("fabric", "quilt") diff --git a/patches/1.18.2/Forge/build.gradle.patch b/patches/1.18.2/Forge/build.gradle.patch index cca8a99..cd9e4f0 100644 --- a/patches/1.18.2/Forge/build.gradle.patch +++ b/patches/1.18.2/Forge/build.gradle.patch @@ -11,7 +11,7 @@ implementation project(":Common") @@ -107,8 +107,8 @@ 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/patches/1.18.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch b/patches/1.18.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch index a1cb371..0081213 100644 --- a/patches/1.18.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch +++ b/patches/1.18.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch @@ -16,7 +16,7 @@ + if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) + return true; + -+ return VanishUtil.isVanished(player.toMojangServerPlayer()); ++ return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/patches/1.18.2/NeoForge/build.gradle.patch b/patches/1.18.2/NeoForge/build.gradle.patch index 6a429fb..5cfba59 100644 --- a/patches/1.18.2/NeoForge/build.gradle.patch +++ b/patches/1.18.2/NeoForge/build.gradle.patch @@ -114,10 +114,10 @@ - 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/patches/1.18.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch b/patches/1.18.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch index 5b25efb..8885834 100644 --- a/patches/1.18.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch +++ b/patches/1.18.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch @@ -15,7 +15,7 @@ - if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) - return true; - -- return VanishUtil.isVanished(player.toMojangServerPlayer()); +- return !VanishUtil.isVanished(player.toMojangServerPlayer()); - } - - @Override diff --git a/patches/1.18.2/Paper/build.gradle.patch b/patches/1.18.2/Paper/build.gradle.patch new file mode 100644 index 0000000..db3e2a6 --- /dev/null +++ b/patches/1.18.2/Paper/build.gradle.patch @@ -0,0 +1,83 @@ +--- a/Paper/build.gradle ++++ /dev/null +@@ -1,80 +1,0 @@ +-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) diff --git a/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java.patch b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java.patch new file mode 100644 index 0000000..761c62b --- /dev/null +++ b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java.patch @@ -0,0 +1,22 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java ++++ /dev/null +@@ -1,19 +1,0 @@ +-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/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java.patch b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java.patch new file mode 100644 index 0000000..45dcd94 --- /dev/null +++ b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java.patch @@ -0,0 +1,81 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java ++++ /dev/null +@@ -1,78 +1,0 @@ +-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/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java.patch b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java.patch new file mode 100644 index 0000000..a401f11 --- /dev/null +++ b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java.patch @@ -0,0 +1,73 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java ++++ /dev/null +@@ -1,70 +1,0 @@ +-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/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java.patch b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java.patch new file mode 100644 index 0000000..b77344a --- /dev/null +++ b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java.patch @@ -0,0 +1,16 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java ++++ /dev/null +@@ -1,13 +1,0 @@ +-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/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch new file mode 100644 index 0000000..6861fe5 --- /dev/null +++ b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch @@ -0,0 +1,34 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java ++++ /dev/null +@@ -1,31 +1,0 @@ +-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); +- } +- +-} diff --git a/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch new file mode 100644 index 0000000..bbe9a49 --- /dev/null +++ b/patches/1.18.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch @@ -0,0 +1,116 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java ++++ /dev/null +@@ -1,113 +1,0 @@ +-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()); +- } +- } +-} diff --git a/patches/1.18.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch b/patches/1.18.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch new file mode 100644 index 0000000..51795ab --- /dev/null +++ b/patches/1.18.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch @@ -0,0 +1,4 @@ +--- a/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.PaperCommonHelper diff --git a/patches/1.18.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch b/patches/1.18.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch new file mode 100644 index 0000000..1cb4322 --- /dev/null +++ b/patches/1.18.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch @@ -0,0 +1,4 @@ +--- a/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.PaperCompatHelper diff --git a/patches/1.18.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch b/patches/1.18.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch new file mode 100644 index 0000000..a7ad544 --- /dev/null +++ b/patches/1.18.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch @@ -0,0 +1,4 @@ +--- a/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.PaperLoaderHelper diff --git a/patches/1.18.2/Paper/src/main/resources/paper-plugin.yml.patch b/patches/1.18.2/Paper/src/main/resources/paper-plugin.yml.patch new file mode 100644 index 0000000..03e886c --- /dev/null +++ b/patches/1.18.2/Paper/src/main/resources/paper-plugin.yml.patch @@ -0,0 +1,11 @@ +--- a/Paper/src/main/resources/paper-plugin.yml ++++ /dev/null +@@ -1,8 +1,0 @@ +-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 diff --git a/patches/1.18.2/build.gradle.patch b/patches/1.18.2/build.gradle.patch index 54c9f79..e3c14d1 100644 --- a/patches/1.18.2/build.gradle.patch +++ b/patches/1.18.2/build.gradle.patch @@ -1,6 +1,6 @@ --- a/build.gradle +++ b/build.gradle -@@ -7,21 +7,15 @@ +@@ -8,21 +8,15 @@ id 'maven-publish' } @@ -23,9 +23,9 @@ identifier("${relType}") } } -@@ -35,14 +29,13 @@ - apply plugin: 'com.github.johnrengelman.shadow' - apply plugin: 'com.hypherionmc.modutils.modpublisher' +@@ -40,14 +34,13 @@ + apply plugin: 'com.hypherionmc.modutils.orion.origami' + } - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 @@ -40,7 +40,7 @@ maven { name = "Modrinth" -@@ -68,11 +61,13 @@ +@@ -73,11 +66,13 @@ shade "me.hypherionmc.moon-config:toml:${moon_config}" shade "me.hypherionmc.moon-config:json:${moon_config}" shade "com.hypherionmc:rpcsdk:${rpc_sdk}" @@ -55,7 +55,7 @@ compileOnly 'net.luckperms:api:5.4' compileOnly("org.projectlombok:lombok:${lombok}") annotationProcessor("org.projectlombok:lombok:${lombok}") -@@ -117,7 +112,7 @@ +@@ -124,7 +119,7 @@ tasks.withType(JavaCompile).configureEach { it.options.encoding = 'UTF-8' diff --git a/patches/1.18.2/gradle.properties.patch b/patches/1.18.2/gradle.properties.patch index d1784c8..5c10b7f 100644 --- a/patches/1.18.2/gradle.properties.patch +++ b/patches/1.18.2/gradle.properties.patch @@ -4,13 +4,13 @@ mod_name=CraterLib # Shared --minecraft_version=1.21.2 +-minecraft_version=1.21.3 +minecraft_version=1.18.2 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 +fabric_loader=0.15.11 +fabric_api=0.76.0+1.18.2 @@ -18,7 +18,7 @@ -forge_version=50.0.6 - -# NeoForged --neoforge_version=0-beta +-neoforge_version=16-beta +forge_version=40.2.0 # Dependencies diff --git a/patches/1.18.2/settings.gradle.patch b/patches/1.18.2/settings.gradle.patch index 7ac621f..e3a189b 100644 --- a/patches/1.18.2/settings.gradle.patch +++ b/patches/1.18.2/settings.gradle.patch @@ -1,10 +1,12 @@ --- a/settings.gradle +++ b/settings.gradle -@@ -13,5 +13,5 @@ +@@ -13,7 +13,5 @@ } } -rootProject.name = 'CraterLib' -include("Common", "Fabric", "NeoForge") +-include 'Paper' +- +rootProject.name = 'CraterLib-1.18.2' +include("Common", "Fabric", "Forge") diff --git a/patches/1.19.2/.jenkins/Jenkinsfile.snapshot.patch b/patches/1.19.2/.jenkins/Jenkinsfile.snapshot.patch index 971ad46..01e605a 100644 --- a/patches/1.19.2/.jenkins/Jenkinsfile.snapshot.patch +++ b/patches/1.19.2/.jenkins/Jenkinsfile.snapshot.patch @@ -5,12 +5,12 @@ 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"; +def JDK = "17"; +def majorMc = "1.19.2"; -+def modLoaders = "forge|fabric|quilt"; ++def modLoaders = "forge|fabric|quilt|paper"; +def supportedMc = "1.19.2"; +def reltype = "snapshot"; diff --git a/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch b/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch new file mode 100644 index 0000000..95ba85f --- /dev/null +++ b/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch @@ -0,0 +1,18 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java ++++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java +@@ -14,8 +14,14 @@ + + private final BridgedPlayer player; + private final DamageSource damageSource; ++ private Component deathMessage; ++ ++ public CraterPlayerDeathEvent(BridgedPlayer player, DamageSource source, Component deathMessage) { ++ this(player, source); ++ this.deathMessage = deathMessage; ++ } + + public Component getDeathMessage() { +- return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); ++ return deathMessage != null ? deathMessage : ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + } + } diff --git a/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java.patch b/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java.patch index 8a7479d..49b00c1 100644 --- a/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java.patch +++ b/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java.patch @@ -1,6 +1,6 @@ --- a/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/compat/FTBEssentials.java -@@ -8,8 +8,8 @@ +@@ -9,8 +9,8 @@ public class FTBEssentials { public static boolean isPlayerMuted(BridgedPlayer player) { diff --git a/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch b/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch index 18581e9..86c8439 100644 --- a/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch +++ b/patches/1.19.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch @@ -8,20 +8,19 @@ import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer; import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; -@@ -12,12 +10,8 @@ +@@ -12,11 +10,6 @@ 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; import net.minecraft.network.chat.Style; -- - public class ChatUtils { - private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( -@@ -28,22 +22,12 @@ +@@ -30,24 +23,12 @@ public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { final String serialised = adventureSerializer.serialize(inComponent); @@ -36,8 +35,10 @@ - } - - 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(); diff --git a/patches/1.19.2/Fabric/build.gradle.patch b/patches/1.19.2/Fabric/build.gradle.patch index 0736b2e..8254280 100644 --- a/patches/1.19.2/Fabric/build.gradle.patch +++ b/patches/1.19.2/Fabric/build.gradle.patch @@ -10,10 +10,10 @@ @@ -115,8 +114,8 @@ 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") + setDisplayName("[FABRIC/QUILT 1.19.2] CraterLib - ${project.version}") + setGameVersions("1.19.2") setLoaders("fabric", "quilt") diff --git a/patches/1.19.2/Forge/build.gradle.patch b/patches/1.19.2/Forge/build.gradle.patch index c5166bf..3b91653 100644 --- a/patches/1.19.2/Forge/build.gradle.patch +++ b/patches/1.19.2/Forge/build.gradle.patch @@ -13,7 +13,7 @@ } @@ -107,8 +108,8 @@ 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/patches/1.19.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch b/patches/1.19.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch index a1cb371..0081213 100644 --- a/patches/1.19.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch +++ b/patches/1.19.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch @@ -16,7 +16,7 @@ + if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) + return true; + -+ return VanishUtil.isVanished(player.toMojangServerPlayer()); ++ return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/patches/1.19.2/NeoForge/build.gradle.patch b/patches/1.19.2/NeoForge/build.gradle.patch index 6a429fb..5cfba59 100644 --- a/patches/1.19.2/NeoForge/build.gradle.patch +++ b/patches/1.19.2/NeoForge/build.gradle.patch @@ -114,10 +114,10 @@ - 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/patches/1.19.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch b/patches/1.19.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch index 5b25efb..8885834 100644 --- a/patches/1.19.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch +++ b/patches/1.19.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch @@ -15,7 +15,7 @@ - if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) - return true; - -- return VanishUtil.isVanished(player.toMojangServerPlayer()); +- return !VanishUtil.isVanished(player.toMojangServerPlayer()); - } - - @Override diff --git a/patches/1.19.2/Paper/build.gradle.patch b/patches/1.19.2/Paper/build.gradle.patch new file mode 100644 index 0000000..db3e2a6 --- /dev/null +++ b/patches/1.19.2/Paper/build.gradle.patch @@ -0,0 +1,83 @@ +--- a/Paper/build.gradle ++++ /dev/null +@@ -1,80 +1,0 @@ +-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) diff --git a/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java.patch b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java.patch new file mode 100644 index 0000000..761c62b --- /dev/null +++ b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java.patch @@ -0,0 +1,22 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCommonHelper.java ++++ /dev/null +@@ -1,19 +1,0 @@ +-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/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java.patch b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java.patch new file mode 100644 index 0000000..45dcd94 --- /dev/null +++ b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java.patch @@ -0,0 +1,81 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java ++++ /dev/null +@@ -1,78 +1,0 @@ +-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/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java.patch b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java.patch new file mode 100644 index 0000000..a401f11 --- /dev/null +++ b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java.patch @@ -0,0 +1,73 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperLoaderHelper.java ++++ /dev/null +@@ -1,70 +1,0 @@ +-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/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java.patch b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java.patch new file mode 100644 index 0000000..b77344a --- /dev/null +++ b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java.patch @@ -0,0 +1,16 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibBootstrap.java ++++ /dev/null +@@ -1,13 +1,0 @@ +-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/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch new file mode 100644 index 0000000..6861fe5 --- /dev/null +++ b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch @@ -0,0 +1,34 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java ++++ /dev/null +@@ -1,31 +1,0 @@ +-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); +- } +- +-} diff --git a/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch new file mode 100644 index 0000000..bbe9a49 --- /dev/null +++ b/patches/1.19.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch @@ -0,0 +1,116 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java ++++ /dev/null +@@ -1,113 +1,0 @@ +-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()); +- } +- } +-} diff --git a/patches/1.19.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch b/patches/1.19.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch new file mode 100644 index 0000000..51795ab --- /dev/null +++ b/patches/1.19.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch @@ -0,0 +1,4 @@ +--- a/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.PaperCommonHelper diff --git a/patches/1.19.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch b/patches/1.19.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch new file mode 100644 index 0000000..1cb4322 --- /dev/null +++ b/patches/1.19.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch @@ -0,0 +1,4 @@ +--- a/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.PaperCompatHelper diff --git a/patches/1.19.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch b/patches/1.19.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch new file mode 100644 index 0000000..a7ad544 --- /dev/null +++ b/patches/1.19.2/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch @@ -0,0 +1,4 @@ +--- a/Paper/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.PaperLoaderHelper diff --git a/patches/1.19.2/Paper/src/main/resources/paper-plugin.yml.patch b/patches/1.19.2/Paper/src/main/resources/paper-plugin.yml.patch new file mode 100644 index 0000000..03e886c --- /dev/null +++ b/patches/1.19.2/Paper/src/main/resources/paper-plugin.yml.patch @@ -0,0 +1,11 @@ +--- a/Paper/src/main/resources/paper-plugin.yml ++++ /dev/null +@@ -1,8 +1,0 @@ +-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 diff --git a/patches/1.19.2/build.gradle.patch b/patches/1.19.2/build.gradle.patch index eadaf6b..d162486 100644 --- a/patches/1.19.2/build.gradle.patch +++ b/patches/1.19.2/build.gradle.patch @@ -1,6 +1,6 @@ --- a/build.gradle +++ b/build.gradle -@@ -7,21 +7,15 @@ +@@ -8,21 +8,15 @@ id 'maven-publish' } @@ -23,9 +23,9 @@ identifier("${relType}") } } -@@ -35,14 +29,13 @@ - apply plugin: 'com.github.johnrengelman.shadow' - apply plugin: 'com.hypherionmc.modutils.modpublisher' +@@ -40,14 +34,13 @@ + apply plugin: 'com.hypherionmc.modutils.orion.origami' + } - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 @@ -40,7 +40,7 @@ maven { name = "Modrinth" -@@ -68,7 +61,7 @@ +@@ -73,7 +66,7 @@ shade "me.hypherionmc.moon-config:toml:${moon_config}" shade "me.hypherionmc.moon-config:json:${moon_config}" shade "com.hypherionmc:rpcsdk:${rpc_sdk}" @@ -49,7 +49,7 @@ shade "net.kyori:adventure-api:${adventure}" shade "net.kyori:adventure-text-serializer-gson:${adventure}" shade "net.kyori:adventure-text-minimessage:${adventure}" -@@ -117,7 +110,7 @@ +@@ -124,7 +117,7 @@ tasks.withType(JavaCompile).configureEach { it.options.encoding = 'UTF-8' diff --git a/patches/1.19.2/gradle.properties.patch b/patches/1.19.2/gradle.properties.patch index e6c0071..53d0a96 100644 --- a/patches/1.19.2/gradle.properties.patch +++ b/patches/1.19.2/gradle.properties.patch @@ -4,13 +4,13 @@ mod_name=CraterLib # Shared --minecraft_version=1.21.2 +-minecraft_version=1.21.3 +minecraft_version=1.19.2 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 +fabric_loader=0.15.11 +fabric_api=0.76.0+1.19.2 @@ -18,7 +18,7 @@ -forge_version=50.0.6 - -# NeoForged --neoforge_version=0-beta +-neoforge_version=16-beta +forge_version=43.4.0 # Dependencies diff --git a/patches/1.19.2/settings.gradle.patch b/patches/1.19.2/settings.gradle.patch index 76a8416..8e6b747 100644 --- a/patches/1.19.2/settings.gradle.patch +++ b/patches/1.19.2/settings.gradle.patch @@ -1,10 +1,12 @@ --- a/settings.gradle +++ b/settings.gradle -@@ -13,5 +13,5 @@ +@@ -13,7 +13,5 @@ } } -rootProject.name = 'CraterLib' -include("Common", "Fabric", "NeoForge") +-include 'Paper' +- +rootProject.name = 'CraterLib-1.19.2' +include("Common", "Fabric", "Forge") diff --git a/patches/1.19.3/.jenkins/Jenkinsfile.snapshot.patch b/patches/1.19.3/.jenkins/Jenkinsfile.snapshot.patch index a8ce476..b893e15 100644 --- a/patches/1.19.3/.jenkins/Jenkinsfile.snapshot.patch +++ b/patches/1.19.3/.jenkins/Jenkinsfile.snapshot.patch @@ -5,12 +5,12 @@ 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"; +def JDK = "17"; +def majorMc = "1.19.3"; -+def modLoaders = "forge|fabric|quilt"; ++def modLoaders = "forge|fabric|quilt|paper"; +def supportedMc = "1.19.4"; +def reltype = "snapshot"; diff --git a/patches/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch b/patches/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch new file mode 100644 index 0000000..247d090 --- /dev/null +++ b/patches/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch @@ -0,0 +1,18 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java ++++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java +@@ -14,8 +14,14 @@ + + private final BridgedPlayer player; + private final DamageSource damageSource; ++ private Component deathMessage; ++ ++ public CraterPlayerDeathEvent(BridgedPlayer player, DamageSource damageSource, Component deathMessage) { ++ this(player, null); ++ this.deathMessage = deathMessage; ++ } + + public Component getDeathMessage() { +- return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); ++ return deathMessage != null ? deathMessage : ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + } + } diff --git a/patches/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch b/patches/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch index 18581e9..44be8a3 100644 --- a/patches/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch +++ b/patches/1.19.3/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch @@ -1,6 +1,6 @@ --- a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java -@@ -1,7 +1,5 @@ +@@ -1,53 +1,30 @@ package com.hypherionmc.craterlib.utils; -import com.hypherionmc.craterlib.core.platform.CommonPlatform; @@ -8,20 +8,29 @@ import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer; import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; -@@ -12,12 +10,8 @@ + import net.kyori.adventure.text.format.NamedTextColor; + import net.kyori.adventure.text.minimessage.MiniMessage; + import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +-import net.kyori.adventure.text.serializer.json.JSONOptions; import net.minecraft.ChatFormatting; - import net.minecraft.SharedConstants; +-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; import net.minecraft.network.chat.Style; -- + public class ChatUtils { - private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( -@@ -28,22 +22,12 @@ +- private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( +- JSONOptions.byDataVersion().at(SharedConstants.getCurrentVersion().getDataVersion().getVersion()) +- ).build(); ++ private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().build(); + + private static final MiniMessage miniMessage = MiniMessage.miniMessage(); public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { final String serialised = adventureSerializer.serialize(inComponent); @@ -36,8 +45,10 @@ - } - - 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(); diff --git a/patches/1.19.3/Fabric/build.gradle.patch b/patches/1.19.3/Fabric/build.gradle.patch index 612fe6c..2340ce3 100644 --- a/patches/1.19.3/Fabric/build.gradle.patch +++ b/patches/1.19.3/Fabric/build.gradle.patch @@ -10,10 +10,10 @@ @@ -115,8 +114,8 @@ 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") + setDisplayName("[FABRIC/QUILT 1.19.4] CraterLib - ${project.version}") + setGameVersions("1.19.4") setLoaders("fabric", "quilt") diff --git a/patches/1.19.3/Forge/build.gradle.patch b/patches/1.19.3/Forge/build.gradle.patch index 4e10f64..f03b8ed 100644 --- a/patches/1.19.3/Forge/build.gradle.patch +++ b/patches/1.19.3/Forge/build.gradle.patch @@ -13,7 +13,7 @@ implementation project(":Common") @@ -107,8 +109,8 @@ 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/patches/1.19.3/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch b/patches/1.19.3/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch index a1cb371..0081213 100644 --- a/patches/1.19.3/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch +++ b/patches/1.19.3/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch @@ -16,7 +16,7 @@ + if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) + return true; + -+ return VanishUtil.isVanished(player.toMojangServerPlayer()); ++ return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/patches/1.19.3/NeoForge/build.gradle.patch b/patches/1.19.3/NeoForge/build.gradle.patch index 6a429fb..5cfba59 100644 --- a/patches/1.19.3/NeoForge/build.gradle.patch +++ b/patches/1.19.3/NeoForge/build.gradle.patch @@ -114,10 +114,10 @@ - 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/patches/1.19.3/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch b/patches/1.19.3/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch index 5b25efb..8885834 100644 --- a/patches/1.19.3/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch +++ b/patches/1.19.3/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch @@ -15,7 +15,7 @@ - if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) - return true; - -- return VanishUtil.isVanished(player.toMojangServerPlayer()); +- return !VanishUtil.isVanished(player.toMojangServerPlayer()); - } - - @Override diff --git a/patches/1.19.3/Paper/build.gradle.patch b/patches/1.19.3/Paper/build.gradle.patch new file mode 100644 index 0000000..faea366 --- /dev/null +++ b/patches/1.19.3/Paper/build.gradle.patch @@ -0,0 +1,13 @@ +--- a/Paper/build.gradle ++++ b/Paper/build.gradle +@@ -70,8 +70,8 @@ + setVersionType("alpha") + setChangelog(rootProject.file("changelog.md")) + setProjectVersion("${minecraft_version}-${project.version}") +- setDisplayName("[Paper 1.21.3] CraterLib - ${project.version}") +- setGameVersions("1.21.3") ++ setDisplayName("[Paper 1.19.4] CraterLib - ${project.version}") ++ setGameVersions("1.19.4") + setLoaders("paper") + setArtifact(reobfJar.outputJar) + } diff --git a/patches/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch b/patches/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch new file mode 100644 index 0000000..a84b370 --- /dev/null +++ b/patches/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch @@ -0,0 +1,11 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java ++++ b/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java +@@ -23,7 +23,7 @@ + + @Override + public void onEnable() { +- CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent(MinecraftServer.getServer().createCommandSourceStack().dispatcher())); ++ CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent(MinecraftServer.getServer().getCommands().getDispatcher())); + getServer().getPluginManager().registerEvents(listener, this); + getServer().getScheduler().scheduleSyncDelayedTask(this, listener::onServerStarted); + } diff --git a/patches/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch b/patches/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch new file mode 100644 index 0000000..d9feb0f --- /dev/null +++ b/patches/1.19.3/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch @@ -0,0 +1,35 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java ++++ b/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java +@@ -16,9 +16,8 @@ + 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.craftbukkit.v1_19_R3.advancement.CraftAdvancement; ++import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; + import org.bukkit.event.EventHandler; + import org.bukkit.event.EventPriority; + import org.bukkit.event.Listener; +@@ -31,17 +30,17 @@ + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerDeath(PlayerDeathEvent event) { + CraterEventBus.INSTANCE.postEvent( +- new CraterPlayerDeathEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), ((CraftDamageSource) event.getDamageSource()).getHandle()) ++ new CraterPlayerDeathEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), null, event.deathMessage()) + ); + } + + @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()) ++ if (((CraftAdvancement) event.getAdvancement()).getHandle().getDisplay() == null || !(((CraftAdvancement) event.getAdvancement()).getHandle().getDisplay().shouldAnnounceChat())) + return; + + CraterEventBus.INSTANCE.postEvent( +- new CraterAdvancementEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), BridgedAdvancement.of(((CraftAdvancement) event.getAdvancement()).getHandle().value())) ++ new CraterAdvancementEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), BridgedAdvancement.of(((CraftAdvancement) event.getAdvancement()).getHandle())) + ); + } + diff --git a/patches/1.19.3/Paper/src/main/resources/paper-plugin.yml.patch b/patches/1.19.3/Paper/src/main/resources/paper-plugin.yml.patch new file mode 100644 index 0000000..a3fd774 --- /dev/null +++ b/patches/1.19.3/Paper/src/main/resources/paper-plugin.yml.patch @@ -0,0 +1,10 @@ +--- a/Paper/src/main/resources/paper-plugin.yml ++++ b/Paper/src/main/resources/paper-plugin.yml +@@ -3,6 +3,6 @@ + description: "A Modding API used to create 'universal' mods" + main: com.hypherionmc.craterlib.paper.CraterLibPlugin + author: HypherionSA +-api-version: '1.21.3' ++api-version: '1.19' + bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap + load: STARTUP diff --git a/patches/1.19.3/build.gradle.patch b/patches/1.19.3/build.gradle.patch index eadaf6b..d162486 100644 --- a/patches/1.19.3/build.gradle.patch +++ b/patches/1.19.3/build.gradle.patch @@ -1,6 +1,6 @@ --- a/build.gradle +++ b/build.gradle -@@ -7,21 +7,15 @@ +@@ -8,21 +8,15 @@ id 'maven-publish' } @@ -23,9 +23,9 @@ identifier("${relType}") } } -@@ -35,14 +29,13 @@ - apply plugin: 'com.github.johnrengelman.shadow' - apply plugin: 'com.hypherionmc.modutils.modpublisher' +@@ -40,14 +34,13 @@ + apply plugin: 'com.hypherionmc.modutils.orion.origami' + } - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 @@ -40,7 +40,7 @@ maven { name = "Modrinth" -@@ -68,7 +61,7 @@ +@@ -73,7 +66,7 @@ shade "me.hypherionmc.moon-config:toml:${moon_config}" shade "me.hypherionmc.moon-config:json:${moon_config}" shade "com.hypherionmc:rpcsdk:${rpc_sdk}" @@ -49,7 +49,7 @@ shade "net.kyori:adventure-api:${adventure}" shade "net.kyori:adventure-text-serializer-gson:${adventure}" shade "net.kyori:adventure-text-minimessage:${adventure}" -@@ -117,7 +110,7 @@ +@@ -124,7 +117,7 @@ tasks.withType(JavaCompile).configureEach { it.options.encoding = 'UTF-8' diff --git a/patches/1.19.3/gradle.properties.patch b/patches/1.19.3/gradle.properties.patch index 7de1099..4b737c3 100644 --- a/patches/1.19.3/gradle.properties.patch +++ b/patches/1.19.3/gradle.properties.patch @@ -4,13 +4,13 @@ mod_name=CraterLib # Shared --minecraft_version=1.21.2 +-minecraft_version=1.21.3 +minecraft_version=1.19.4 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 +fabric_loader=0.15.11 +fabric_api=0.87.2+1.19.4 @@ -18,7 +18,7 @@ -forge_version=50.0.6 - -# NeoForged --neoforge_version=0-beta +-neoforge_version=16-beta +forge_version=45.3.0 # Dependencies diff --git a/patches/1.19.3/settings.gradle.patch b/patches/1.19.3/settings.gradle.patch index 0ddbb30..3e9a96f 100644 --- a/patches/1.19.3/settings.gradle.patch +++ b/patches/1.19.3/settings.gradle.patch @@ -1,6 +1,6 @@ --- a/settings.gradle +++ b/settings.gradle -@@ -13,5 +13,5 @@ +@@ -13,7 +13,6 @@ } } @@ -8,3 +8,5 @@ -include("Common", "Fabric", "NeoForge") +rootProject.name = 'CraterLib-1.19.3' +include("Common", "Fabric", "Forge") + include 'Paper' +- diff --git a/patches/1.20.2/.jenkins/Jenkinsfile.snapshot.patch b/patches/1.20.2/.jenkins/Jenkinsfile.snapshot.patch index fa52e2f..0606816 100644 --- a/patches/1.20.2/.jenkins/Jenkinsfile.snapshot.patch +++ b/patches/1.20.2/.jenkins/Jenkinsfile.snapshot.patch @@ -5,12 +5,12 @@ 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"; +def JDK = "17"; +def majorMc = "1.20.2"; -+def modLoaders = "forge|fabric|quilt"; ++def modLoaders = "forge|fabric|quilt|paper"; +def supportedMc = "1.20.2"; +def reltype = "snapshot"; diff --git a/patches/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch b/patches/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch new file mode 100644 index 0000000..247d090 --- /dev/null +++ b/patches/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch @@ -0,0 +1,18 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java ++++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java +@@ -14,8 +14,14 @@ + + private final BridgedPlayer player; + private final DamageSource damageSource; ++ private Component deathMessage; ++ ++ public CraterPlayerDeathEvent(BridgedPlayer player, DamageSource damageSource, Component deathMessage) { ++ this(player, null); ++ this.deathMessage = deathMessage; ++ } + + public Component getDeathMessage() { +- return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); ++ return deathMessage != null ? deathMessage : ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + } + } diff --git a/patches/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch b/patches/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch index 18581e9..44be8a3 100644 --- a/patches/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch +++ b/patches/1.20.2/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch @@ -1,6 +1,6 @@ --- a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java -@@ -1,7 +1,5 @@ +@@ -1,53 +1,30 @@ package com.hypherionmc.craterlib.utils; -import com.hypherionmc.craterlib.core.platform.CommonPlatform; @@ -8,20 +8,29 @@ import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer; import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; -@@ -12,12 +10,8 @@ + import net.kyori.adventure.text.format.NamedTextColor; + import net.kyori.adventure.text.minimessage.MiniMessage; + import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +-import net.kyori.adventure.text.serializer.json.JSONOptions; import net.minecraft.ChatFormatting; - import net.minecraft.SharedConstants; +-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; import net.minecraft.network.chat.Style; -- + public class ChatUtils { - private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( -@@ -28,22 +22,12 @@ +- private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( +- JSONOptions.byDataVersion().at(SharedConstants.getCurrentVersion().getDataVersion().getVersion()) +- ).build(); ++ private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().build(); + + private static final MiniMessage miniMessage = MiniMessage.miniMessage(); public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { final String serialised = adventureSerializer.serialize(inComponent); @@ -36,8 +45,10 @@ - } - - 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(); diff --git a/patches/1.20.2/Fabric/build.gradle.patch b/patches/1.20.2/Fabric/build.gradle.patch index 4e6eadc..9bacec7 100644 --- a/patches/1.20.2/Fabric/build.gradle.patch +++ b/patches/1.20.2/Fabric/build.gradle.patch @@ -10,10 +10,10 @@ @@ -115,8 +114,8 @@ 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") + setDisplayName("[FABRIC/QUILT 1.20.2] CraterLib - ${project.version}") + setGameVersions("1.20.2") setLoaders("fabric", "quilt") diff --git a/patches/1.20.2/Forge/build.gradle.patch b/patches/1.20.2/Forge/build.gradle.patch index 8a2d0fa..85edc53 100644 --- a/patches/1.20.2/Forge/build.gradle.patch +++ b/patches/1.20.2/Forge/build.gradle.patch @@ -13,7 +13,7 @@ implementation project(":Common") @@ -107,8 +109,8 @@ 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/patches/1.20.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch b/patches/1.20.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch index a1cb371..0081213 100644 --- a/patches/1.20.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch +++ b/patches/1.20.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch @@ -16,7 +16,7 @@ + if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) + return true; + -+ return VanishUtil.isVanished(player.toMojangServerPlayer()); ++ return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/patches/1.20.2/NeoForge/build.gradle.patch b/patches/1.20.2/NeoForge/build.gradle.patch index 6a429fb..5cfba59 100644 --- a/patches/1.20.2/NeoForge/build.gradle.patch +++ b/patches/1.20.2/NeoForge/build.gradle.patch @@ -114,10 +114,10 @@ - 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/patches/1.20.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch b/patches/1.20.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch index 5b25efb..8885834 100644 --- a/patches/1.20.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch +++ b/patches/1.20.2/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch @@ -15,7 +15,7 @@ - if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) - return true; - -- return VanishUtil.isVanished(player.toMojangServerPlayer()); +- return !VanishUtil.isVanished(player.toMojangServerPlayer()); - } - - @Override diff --git a/patches/1.20.2/Paper/build.gradle.patch b/patches/1.20.2/Paper/build.gradle.patch new file mode 100644 index 0000000..063e3a0 --- /dev/null +++ b/patches/1.20.2/Paper/build.gradle.patch @@ -0,0 +1,13 @@ +--- a/Paper/build.gradle ++++ b/Paper/build.gradle +@@ -70,8 +70,8 @@ + setVersionType("alpha") + setChangelog(rootProject.file("changelog.md")) + setProjectVersion("${minecraft_version}-${project.version}") +- setDisplayName("[Paper 1.21.3] CraterLib - ${project.version}") +- setGameVersions("1.21.3") ++ setDisplayName("[Paper 1.20.2] CraterLib - ${project.version}") ++ setGameVersions("1.20.2") + setLoaders("paper") + setArtifact(reobfJar.outputJar) + } diff --git a/patches/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch b/patches/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch new file mode 100644 index 0000000..a84b370 --- /dev/null +++ b/patches/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch @@ -0,0 +1,11 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java ++++ b/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java +@@ -23,7 +23,7 @@ + + @Override + public void onEnable() { +- CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent(MinecraftServer.getServer().createCommandSourceStack().dispatcher())); ++ CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent(MinecraftServer.getServer().getCommands().getDispatcher())); + getServer().getPluginManager().registerEvents(listener, this); + getServer().getScheduler().scheduleSyncDelayedTask(this, listener::onServerStarted); + } diff --git a/patches/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch b/patches/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch new file mode 100644 index 0000000..dc7abbe --- /dev/null +++ b/patches/1.20.2/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch @@ -0,0 +1,37 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java ++++ b/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java +@@ -13,12 +13,13 @@ + import com.mojang.brigadier.ParseResults; + import io.papermc.paper.event.player.AsyncChatEvent; + import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; ++import net.minecraft.advancements.Advancement; ++import net.minecraft.advancements.AdvancementHolder; + 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.craftbukkit.v1_20_R2.advancement.CraftAdvancement; ++import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer; + import org.bukkit.event.EventHandler; + import org.bukkit.event.EventPriority; + import org.bukkit.event.Listener; +@@ -31,13 +32,15 @@ + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerDeath(PlayerDeathEvent event) { + CraterEventBus.INSTANCE.postEvent( +- new CraterPlayerDeathEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), ((CraftDamageSource) event.getDamageSource()).getHandle()) ++ new CraterPlayerDeathEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), null, event.deathMessage()) + ); + } + + @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()) ++ AdvancementHolder advancement = ((CraftAdvancement) event.getAdvancement()).getHandle(); ++ ++ if (advancement.value().display().isEmpty() || !advancement.value().display().get().shouldAnnounceChat()) + return; + + CraterEventBus.INSTANCE.postEvent( diff --git a/patches/1.20.2/Paper/src/main/resources/paper-plugin.yml.patch b/patches/1.20.2/Paper/src/main/resources/paper-plugin.yml.patch new file mode 100644 index 0000000..4e22db9 --- /dev/null +++ b/patches/1.20.2/Paper/src/main/resources/paper-plugin.yml.patch @@ -0,0 +1,10 @@ +--- a/Paper/src/main/resources/paper-plugin.yml ++++ b/Paper/src/main/resources/paper-plugin.yml +@@ -3,6 +3,6 @@ + description: "A Modding API used to create 'universal' mods" + main: com.hypherionmc.craterlib.paper.CraterLibPlugin + author: HypherionSA +-api-version: '1.21.3' ++api-version: '1.20' + bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap + load: STARTUP diff --git a/patches/1.20.2/build.gradle.patch b/patches/1.20.2/build.gradle.patch index eadaf6b..d162486 100644 --- a/patches/1.20.2/build.gradle.patch +++ b/patches/1.20.2/build.gradle.patch @@ -1,6 +1,6 @@ --- a/build.gradle +++ b/build.gradle -@@ -7,21 +7,15 @@ +@@ -8,21 +8,15 @@ id 'maven-publish' } @@ -23,9 +23,9 @@ identifier("${relType}") } } -@@ -35,14 +29,13 @@ - apply plugin: 'com.github.johnrengelman.shadow' - apply plugin: 'com.hypherionmc.modutils.modpublisher' +@@ -40,14 +34,13 @@ + apply plugin: 'com.hypherionmc.modutils.orion.origami' + } - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 @@ -40,7 +40,7 @@ maven { name = "Modrinth" -@@ -68,7 +61,7 @@ +@@ -73,7 +66,7 @@ shade "me.hypherionmc.moon-config:toml:${moon_config}" shade "me.hypherionmc.moon-config:json:${moon_config}" shade "com.hypherionmc:rpcsdk:${rpc_sdk}" @@ -49,7 +49,7 @@ shade "net.kyori:adventure-api:${adventure}" shade "net.kyori:adventure-text-serializer-gson:${adventure}" shade "net.kyori:adventure-text-minimessage:${adventure}" -@@ -117,7 +110,7 @@ +@@ -124,7 +117,7 @@ tasks.withType(JavaCompile).configureEach { it.options.encoding = 'UTF-8' diff --git a/patches/1.20.2/gradle.properties.patch b/patches/1.20.2/gradle.properties.patch index c91e214..8df9577 100644 --- a/patches/1.20.2/gradle.properties.patch +++ b/patches/1.20.2/gradle.properties.patch @@ -4,13 +4,13 @@ mod_name=CraterLib # Shared --minecraft_version=1.21.2 +-minecraft_version=1.21.3 +minecraft_version=1.20.2 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 +fabric_loader=0.15.11 +fabric_api=0.91.6+1.20.2 @@ -18,7 +18,7 @@ -forge_version=50.0.6 - -# NeoForged --neoforge_version=0-beta +-neoforge_version=16-beta +forge_version=48.1.0 # Dependencies diff --git a/patches/1.20.2/settings.gradle.patch b/patches/1.20.2/settings.gradle.patch index c9134fa..a20d780 100644 --- a/patches/1.20.2/settings.gradle.patch +++ b/patches/1.20.2/settings.gradle.patch @@ -1,6 +1,6 @@ --- a/settings.gradle +++ b/settings.gradle -@@ -13,5 +13,5 @@ +@@ -13,7 +13,6 @@ } } @@ -8,3 +8,5 @@ -include("Common", "Fabric", "NeoForge") +rootProject.name = 'CraterLib-1.20.2' +include("Common", "Fabric", "Forge") + include 'Paper' +- diff --git a/patches/1.20.4/.jenkins/Jenkinsfile.snapshot.patch b/patches/1.20.4/.jenkins/Jenkinsfile.snapshot.patch index 251bad0..5d88b5f 100644 --- a/patches/1.20.4/.jenkins/Jenkinsfile.snapshot.patch +++ b/patches/1.20.4/.jenkins/Jenkinsfile.snapshot.patch @@ -5,12 +5,12 @@ 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"; +def JDK = "17"; +def majorMc = "1.20.4"; -+def modLoaders = "neoforge|forge|fabric|quilt"; ++def modLoaders = "neoforge|forge|fabric|quilt|paper"; +def supportedMc = "1.20.4"; +def reltype = "snapshot"; diff --git a/patches/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch b/patches/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch new file mode 100644 index 0000000..247d090 --- /dev/null +++ b/patches/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch @@ -0,0 +1,18 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java ++++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java +@@ -14,8 +14,14 @@ + + private final BridgedPlayer player; + private final DamageSource damageSource; ++ private Component deathMessage; ++ ++ public CraterPlayerDeathEvent(BridgedPlayer player, DamageSource damageSource, Component deathMessage) { ++ this(player, null); ++ this.deathMessage = deathMessage; ++ } + + public Component getDeathMessage() { +- return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); ++ return deathMessage != null ? deathMessage : ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + } + } diff --git a/patches/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch b/patches/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch index 18581e9..86c8439 100644 --- a/patches/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch +++ b/patches/1.20.4/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch @@ -8,20 +8,19 @@ import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer; import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; -@@ -12,12 +10,8 @@ +@@ -12,11 +10,6 @@ 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; import net.minecraft.network.chat.Style; -- - public class ChatUtils { - private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( -@@ -28,22 +22,12 @@ +@@ -30,24 +23,12 @@ public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { final String serialised = adventureSerializer.serialize(inComponent); @@ -36,8 +35,10 @@ - } - - 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(); diff --git a/patches/1.20.4/Fabric/build.gradle.patch b/patches/1.20.4/Fabric/build.gradle.patch index efe38db..e1d6355 100644 --- a/patches/1.20.4/Fabric/build.gradle.patch +++ b/patches/1.20.4/Fabric/build.gradle.patch @@ -2,10 +2,10 @@ +++ b/Fabric/build.gradle @@ -115,8 +115,8 @@ 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") + setDisplayName("[FABRIC/QUILT 1.20.4] CraterLib - ${project.version}") + setGameVersions("1.20.4") setLoaders("fabric", "quilt") diff --git a/patches/1.20.4/Forge/build.gradle.patch b/patches/1.20.4/Forge/build.gradle.patch index 1f74580..5cbb069 100644 --- a/patches/1.20.4/Forge/build.gradle.patch +++ b/patches/1.20.4/Forge/build.gradle.patch @@ -13,7 +13,7 @@ implementation project(":Common") @@ -107,8 +109,8 @@ 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/patches/1.20.4/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch b/patches/1.20.4/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch index a1cb371..0081213 100644 --- a/patches/1.20.4/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch +++ b/patches/1.20.4/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch @@ -16,7 +16,7 @@ + if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) + return true; + -+ return VanishUtil.isVanished(player.toMojangServerPlayer()); ++ return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/patches/1.20.4/NeoForge/build.gradle.patch b/patches/1.20.4/NeoForge/build.gradle.patch index 48e2c65..1b92ada 100644 --- a/patches/1.20.4/NeoForge/build.gradle.patch +++ b/patches/1.20.4/NeoForge/build.gradle.patch @@ -25,10 +25,10 @@ } @@ -113,8 +108,8 @@ 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") + setDisplayName("[NeoForge 1.20.4] CraterLib - ${project.version}") + setGameVersions("1.20.4") setLoaders("neoforge") diff --git a/patches/1.20.4/Paper/build.gradle.patch b/patches/1.20.4/Paper/build.gradle.patch new file mode 100644 index 0000000..8d03048 --- /dev/null +++ b/patches/1.20.4/Paper/build.gradle.patch @@ -0,0 +1,13 @@ +--- a/Paper/build.gradle ++++ b/Paper/build.gradle +@@ -70,8 +70,8 @@ + setVersionType("alpha") + setChangelog(rootProject.file("changelog.md")) + setProjectVersion("${minecraft_version}-${project.version}") +- setDisplayName("[Paper 1.21.3] CraterLib - ${project.version}") +- setGameVersions("1.21.3") ++ setDisplayName("[Paper 1.20.4] CraterLib - ${project.version}") ++ setGameVersions("1.20.4") + setLoaders("paper") + setArtifact(reobfJar.outputJar) + } diff --git a/patches/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch b/patches/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch new file mode 100644 index 0000000..6a7d57a --- /dev/null +++ b/patches/1.20.4/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch @@ -0,0 +1,23 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java ++++ b/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java +@@ -16,9 +16,8 @@ + 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.craftbukkit.v1_20_R3.advancement.CraftAdvancement; ++import org.bukkit.craftbukkit.v1_20_R3.entity.CraftPlayer; + import org.bukkit.event.EventHandler; + import org.bukkit.event.EventPriority; + import org.bukkit.event.Listener; +@@ -31,7 +30,7 @@ + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerDeath(PlayerDeathEvent event) { + CraterEventBus.INSTANCE.postEvent( +- new CraterPlayerDeathEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), ((CraftDamageSource) event.getDamageSource()).getHandle()) ++ new CraterPlayerDeathEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), null, event.deathMessage()) + ); + } + diff --git a/patches/1.20.4/Paper/src/main/resources/paper-plugin.yml.patch b/patches/1.20.4/Paper/src/main/resources/paper-plugin.yml.patch new file mode 100644 index 0000000..4e22db9 --- /dev/null +++ b/patches/1.20.4/Paper/src/main/resources/paper-plugin.yml.patch @@ -0,0 +1,10 @@ +--- a/Paper/src/main/resources/paper-plugin.yml ++++ b/Paper/src/main/resources/paper-plugin.yml +@@ -3,6 +3,6 @@ + description: "A Modding API used to create 'universal' mods" + main: com.hypherionmc.craterlib.paper.CraterLibPlugin + author: HypherionSA +-api-version: '1.21.3' ++api-version: '1.20' + bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap + load: STARTUP diff --git a/patches/1.20.4/build.gradle.patch b/patches/1.20.4/build.gradle.patch index 938e95f..765d594 100644 --- a/patches/1.20.4/build.gradle.patch +++ b/patches/1.20.4/build.gradle.patch @@ -1,6 +1,6 @@ --- a/build.gradle +++ b/build.gradle -@@ -7,21 +7,15 @@ +@@ -8,21 +8,15 @@ id 'maven-publish' } @@ -23,9 +23,9 @@ identifier("${relType}") } } -@@ -35,14 +29,13 @@ - apply plugin: 'com.github.johnrengelman.shadow' - apply plugin: 'com.hypherionmc.modutils.modpublisher' +@@ -40,14 +34,13 @@ + apply plugin: 'com.hypherionmc.modutils.orion.origami' + } - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 @@ -40,7 +40,7 @@ maven { name = "Modrinth" -@@ -117,7 +110,7 @@ +@@ -124,7 +117,7 @@ tasks.withType(JavaCompile).configureEach { it.options.encoding = 'UTF-8' diff --git a/patches/1.20.4/gradle.properties.patch b/patches/1.20.4/gradle.properties.patch index 5c921ef..5043931 100644 --- a/patches/1.20.4/gradle.properties.patch +++ b/patches/1.20.4/gradle.properties.patch @@ -4,13 +4,13 @@ mod_name=CraterLib # Shared --minecraft_version=1.21.2 +-minecraft_version=1.21.3 +minecraft_version=1.20.4 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 +fabric_loader=0.15.11 +fabric_api=0.97.0+1.20.4 @@ -19,7 +19,7 @@ +forge_version=49.0.49 # NeoForged --neoforge_version=0-beta +-neoforge_version=16-beta +neoforge_version=234 # Dependencies diff --git a/patches/1.20.4/settings.gradle.patch b/patches/1.20.4/settings.gradle.patch index 793539a..f0c94af 100644 --- a/patches/1.20.4/settings.gradle.patch +++ b/patches/1.20.4/settings.gradle.patch @@ -1,6 +1,6 @@ --- a/settings.gradle +++ b/settings.gradle -@@ -13,5 +13,5 @@ +@@ -13,7 +13,6 @@ } } @@ -8,3 +8,5 @@ -include("Common", "Fabric", "NeoForge") +rootProject.name = 'CraterLib-1.20.4' +include("Common", "Fabric", "Forge", "NeoForge") + include 'Paper' +- diff --git a/patches/1.20/.jenkins/Jenkinsfile.snapshot.patch b/patches/1.20/.jenkins/Jenkinsfile.snapshot.patch index 98ab31a..c7b8b4e 100644 --- a/patches/1.20/.jenkins/Jenkinsfile.snapshot.patch +++ b/patches/1.20/.jenkins/Jenkinsfile.snapshot.patch @@ -5,12 +5,12 @@ 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"; +def JDK = "17"; +def majorMc = "1.20"; -+def modLoaders = "forge|fabric|quilt"; ++def modLoaders = "forge|fabric|quilt|paper"; +def supportedMc = "1.20|1.20.1"; +def reltype = "snapshot"; diff --git a/patches/1.20/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch b/patches/1.20/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch new file mode 100644 index 0000000..247d090 --- /dev/null +++ b/patches/1.20/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java.patch @@ -0,0 +1,18 @@ +--- a/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java ++++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java +@@ -14,8 +14,14 @@ + + private final BridgedPlayer player; + private final DamageSource damageSource; ++ private Component deathMessage; ++ ++ public CraterPlayerDeathEvent(BridgedPlayer player, DamageSource damageSource, Component deathMessage) { ++ this(player, null); ++ this.deathMessage = deathMessage; ++ } + + public Component getDeathMessage() { +- return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); ++ return deathMessage != null ? deathMessage : ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + } + } diff --git a/patches/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch b/patches/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch index 18581e9..44be8a3 100644 --- a/patches/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch +++ b/patches/1.20/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java.patch @@ -1,6 +1,6 @@ --- a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java -@@ -1,7 +1,5 @@ +@@ -1,53 +1,30 @@ package com.hypherionmc.craterlib.utils; -import com.hypherionmc.craterlib.core.platform.CommonPlatform; @@ -8,20 +8,29 @@ import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer; import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; -@@ -12,12 +10,8 @@ + import net.kyori.adventure.text.format.NamedTextColor; + import net.kyori.adventure.text.minimessage.MiniMessage; + import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +-import net.kyori.adventure.text.serializer.json.JSONOptions; import net.minecraft.ChatFormatting; - import net.minecraft.SharedConstants; +-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; import net.minecraft.network.chat.Style; -- + public class ChatUtils { - private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( -@@ -28,22 +22,12 @@ +- private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( +- JSONOptions.byDataVersion().at(SharedConstants.getCurrentVersion().getDataVersion().getVersion()) +- ).build(); ++ private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().build(); + + private static final MiniMessage miniMessage = MiniMessage.miniMessage(); public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { final String serialised = adventureSerializer.serialize(inComponent); @@ -36,8 +45,10 @@ - } - - 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(); diff --git a/patches/1.20/Fabric/build.gradle.patch b/patches/1.20/Fabric/build.gradle.patch index d20dfb5..d92f870 100644 --- a/patches/1.20/Fabric/build.gradle.patch +++ b/patches/1.20/Fabric/build.gradle.patch @@ -10,10 +10,10 @@ @@ -115,8 +114,8 @@ 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") + setDisplayName("[FABRIC/QUILT 1.20/1.20.1] CraterLib - ${project.version}") + setGameVersions("1.20", "1.20.1") setLoaders("fabric", "quilt") diff --git a/patches/1.20/Forge/build.gradle.patch b/patches/1.20/Forge/build.gradle.patch index cea056e..fe5c46c 100644 --- a/patches/1.20/Forge/build.gradle.patch +++ b/patches/1.20/Forge/build.gradle.patch @@ -13,7 +13,7 @@ implementation project(":Common") @@ -107,8 +109,8 @@ 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/patches/1.20/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch b/patches/1.20/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch index a1cb371..0081213 100644 --- a/patches/1.20/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch +++ b/patches/1.20/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch @@ -16,7 +16,7 @@ + if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) + return true; + -+ return VanishUtil.isVanished(player.toMojangServerPlayer()); ++ return !VanishUtil.isVanished(player.toMojangServerPlayer()); } @Override diff --git a/patches/1.20/NeoForge/build.gradle.patch b/patches/1.20/NeoForge/build.gradle.patch index 6a429fb..5cfba59 100644 --- a/patches/1.20/NeoForge/build.gradle.patch +++ b/patches/1.20/NeoForge/build.gradle.patch @@ -114,10 +114,10 @@ - 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/patches/1.20/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch b/patches/1.20/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch index 5b25efb..8885834 100644 --- a/patches/1.20/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch +++ b/patches/1.20/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCompatHelper.java.patch @@ -15,7 +15,7 @@ - if (!ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) - return true; - -- return VanishUtil.isVanished(player.toMojangServerPlayer()); +- return !VanishUtil.isVanished(player.toMojangServerPlayer()); - } - - @Override diff --git a/patches/1.20/Paper/build.gradle.patch b/patches/1.20/Paper/build.gradle.patch new file mode 100644 index 0000000..2ef3ddc --- /dev/null +++ b/patches/1.20/Paper/build.gradle.patch @@ -0,0 +1,13 @@ +--- a/Paper/build.gradle ++++ b/Paper/build.gradle +@@ -70,8 +70,8 @@ + setVersionType("alpha") + setChangelog(rootProject.file("changelog.md")) + setProjectVersion("${minecraft_version}-${project.version}") +- setDisplayName("[Paper 1.21.3] CraterLib - ${project.version}") +- setGameVersions("1.21.3") ++ setDisplayName("[Paper 1.20-1.20.1] CraterLib - ${project.version}") ++ setGameVersions("1.20", "1.20.1") + setLoaders("paper") + setArtifact(reobfJar.outputJar) + } diff --git a/patches/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch b/patches/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch new file mode 100644 index 0000000..a84b370 --- /dev/null +++ b/patches/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java.patch @@ -0,0 +1,11 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java ++++ b/Paper/src/main/java/com/hypherionmc/craterlib/paper/CraterLibPlugin.java +@@ -23,7 +23,7 @@ + + @Override + public void onEnable() { +- CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent(MinecraftServer.getServer().createCommandSourceStack().dispatcher())); ++ CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent(MinecraftServer.getServer().getCommands().getDispatcher())); + getServer().getPluginManager().registerEvents(listener, this); + getServer().getScheduler().scheduleSyncDelayedTask(this, listener::onServerStarted); + } diff --git a/patches/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch b/patches/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch new file mode 100644 index 0000000..ab689ee --- /dev/null +++ b/patches/1.20/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java.patch @@ -0,0 +1,35 @@ +--- a/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java ++++ b/Paper/src/main/java/com/hypherionmc/craterlib/paper/PaperEventListener.java +@@ -16,9 +16,8 @@ + 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.craftbukkit.v1_20_R1.advancement.CraftAdvancement; ++import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; + import org.bukkit.event.EventHandler; + import org.bukkit.event.EventPriority; + import org.bukkit.event.Listener; +@@ -31,17 +30,17 @@ + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerDeath(PlayerDeathEvent event) { + CraterEventBus.INSTANCE.postEvent( +- new CraterPlayerDeathEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), ((CraftDamageSource) event.getDamageSource()).getHandle()) ++ new CraterPlayerDeathEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), null, event.deathMessage()) + ); + } + + @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()) ++ if (((CraftAdvancement) event.getAdvancement()).getHandle() == null || ((CraftAdvancement) event.getAdvancement()).getHandle().getDisplay() == null || !((CraftAdvancement) event.getAdvancement()).getHandle().getDisplay().shouldAnnounceChat()) + return; + + CraterEventBus.INSTANCE.postEvent( +- new CraterAdvancementEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), BridgedAdvancement.of(((CraftAdvancement) event.getAdvancement()).getHandle().value())) ++ new CraterAdvancementEvent(BridgedPlayer.of(((CraftPlayer) event.getPlayer()).getHandle()), BridgedAdvancement.of(((CraftAdvancement) event.getAdvancement()).getHandle())) + ); + } + diff --git a/patches/1.20/Paper/src/main/resources/paper-plugin.yml.patch b/patches/1.20/Paper/src/main/resources/paper-plugin.yml.patch new file mode 100644 index 0000000..4e22db9 --- /dev/null +++ b/patches/1.20/Paper/src/main/resources/paper-plugin.yml.patch @@ -0,0 +1,10 @@ +--- a/Paper/src/main/resources/paper-plugin.yml ++++ b/Paper/src/main/resources/paper-plugin.yml +@@ -3,6 +3,6 @@ + description: "A Modding API used to create 'universal' mods" + main: com.hypherionmc.craterlib.paper.CraterLibPlugin + author: HypherionSA +-api-version: '1.21.3' ++api-version: '1.20' + bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap + load: STARTUP diff --git a/patches/1.20/build.gradle.patch b/patches/1.20/build.gradle.patch index fa8babe..c8b3ea8 100644 --- a/patches/1.20/build.gradle.patch +++ b/patches/1.20/build.gradle.patch @@ -1,6 +1,6 @@ --- a/build.gradle +++ b/build.gradle -@@ -7,21 +7,14 @@ +@@ -8,21 +8,14 @@ id 'maven-publish' } @@ -23,9 +23,9 @@ identifier("${relType}") } } -@@ -35,14 +28,13 @@ - apply plugin: 'com.github.johnrengelman.shadow' - apply plugin: 'com.hypherionmc.modutils.modpublisher' +@@ -40,14 +33,13 @@ + apply plugin: 'com.hypherionmc.modutils.orion.origami' + } - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 @@ -40,7 +40,7 @@ maven { name = "Modrinth" -@@ -68,7 +60,7 @@ +@@ -73,7 +65,7 @@ shade "me.hypherionmc.moon-config:toml:${moon_config}" shade "me.hypherionmc.moon-config:json:${moon_config}" shade "com.hypherionmc:rpcsdk:${rpc_sdk}" @@ -49,7 +49,7 @@ shade "net.kyori:adventure-api:${adventure}" shade "net.kyori:adventure-text-serializer-gson:${adventure}" shade "net.kyori:adventure-text-minimessage:${adventure}" -@@ -117,7 +109,7 @@ +@@ -124,7 +116,7 @@ tasks.withType(JavaCompile).configureEach { it.options.encoding = 'UTF-8' diff --git a/patches/1.20/gradle.properties.patch b/patches/1.20/gradle.properties.patch index 3081862..3319fe2 100644 --- a/patches/1.20/gradle.properties.patch +++ b/patches/1.20/gradle.properties.patch @@ -4,13 +4,13 @@ mod_name=CraterLib # Shared --minecraft_version=1.21.2 +-minecraft_version=1.21.3 +minecraft_version=1.20 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 +fabric_loader=0.15.11 +fabric_api=0.83.0+1.20 @@ -18,7 +18,7 @@ -forge_version=50.0.6 - -# NeoForged --neoforge_version=0-beta +-neoforge_version=16-beta +forge_version=46.0.14 # Dependencies diff --git a/patches/1.20/settings.gradle.patch b/patches/1.20/settings.gradle.patch index c57b5d0..77df3fd 100644 --- a/patches/1.20/settings.gradle.patch +++ b/patches/1.20/settings.gradle.patch @@ -1,6 +1,6 @@ --- a/settings.gradle +++ b/settings.gradle -@@ -13,5 +13,5 @@ +@@ -13,7 +13,6 @@ } } @@ -8,3 +8,5 @@ -include("Common", "Fabric", "NeoForge") +rootProject.name = 'CraterLib-1.20' +include("Common", "Fabric", "Forge") + include 'Paper' +- diff --git a/patches/1.21.2/.jenkins/Jenkinsfile.snapshot.patch b/patches/1.21.2/.jenkins/Jenkinsfile.snapshot.patch index 15cedd7..7f18f35 100644 --- a/patches/1.21.2/.jenkins/Jenkinsfile.snapshot.patch +++ b/patches/1.21.2/.jenkins/Jenkinsfile.snapshot.patch @@ -2,10 +2,10 @@ +++ b/.jenkins/Jenkinsfile.snapshot @@ -4,7 +4,7 @@ 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"; -+def reltype = "release"; ++def reltype = "snapshot"; pipeline { agent { diff --git a/patches/1.21.2/Forge/build.gradle.patch b/patches/1.21.2/Forge/build.gradle.patch new file mode 100644 index 0000000..6153adf --- /dev/null +++ b/patches/1.21.2/Forge/build.gradle.patch @@ -0,0 +1,119 @@ +--- a/Forge/build.gradle ++++ /dev/null +@@ -1,116 +1,0 @@ +-// Adjust the output jar name here +-archivesBaseName = "${mod_name.replace(" ", "")}-Forge-${minecraft_version}" +- +-dependencies { +- // Compat +- // NOT AVAILABLE ON FORGE modImplementation("maven.modrinth:vanishmod:${vanishmod}") +- +- // Do not edit or remove +- implementation project(":Common") +-} +- +-shadowJar { +- from sourceSets.main.output +- configurations = [project.configurations.shade] +- +- dependencies { +- exclude(dependency('com.google.code.gson:.*')) +- +- relocate 'me.hypherionmc.moonconfig', 'shadow.hypherionmc.moonconfig' +- relocate 'me.hypherionmc.mcdiscordformatter', 'shadow.hypherionmc.mcdiscordformatter' +- relocate 'net.kyori', 'shadow.kyori' +- } +- +- setArchiveClassifier('dev-shadow') +- mergeServiceFiles() +-} +- +-/** +- * =============================================================================== +- * = DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING = +- * =============================================================================== +- */ +- +-unimined.minecraft { +- minecraftForge { +- loader forge_version +- mixinConfig("${mod_id}.mixins.json", "${mod_id}.forge.mixins.json") +- } +-} +- +-remapJar { +- inputFile.set shadowJar.archiveFile +- dependsOn shadowJar +- archiveClassifier.set null +-} +- +-jar { +- archiveClassifier.set "dev" +-} +- +-processResources { +- from project(":Common").sourceSets.main.resources +- def buildProps = project.properties.clone() +- +- filesMatching("META-INF/mods.toml") { +- expand buildProps +- } +-} +- +-compileTestJava.enabled = false +- +-tasks.withType(JavaCompile).configureEach { +- source(project(":Common").sourceSets.main.allSource) +-} +- +-/** +- * Publishing Config +- */ +-publishing { +- publications { +- mavenJava(MavenPublication) { +- artifactId project.archivesBaseName +- from components.java +- +- artifact(remapJar) { +- builtBy remapJar +- } +- +- pom.withXml { +- Node pomNode = asNode() +- pomNode.dependencies.'*'.findAll() { +- it.artifactId.text() == 'regutils-joined-fabric' || +- it.artifactId.text() == 'core' || +- it.artifactId.text() == 'toml' +- }.each() { +- it.parent().remove(it) +- } +- } +- } +- } +- +- repositories { +- maven rootProject.orion.getPublishingMaven() +- } +-} +- +-publisher { +- apiKeys { +- modrinth(System.getenv("MODRINTH_TOKEN")) +- curseforge(System.getenv("CURSE_TOKEN")) +- nightbloom(System.getenv("PLATFORM_KEY")) +- } +- +- setCurseID(curse_id) +- setModrinthID(modrinth_id) +- setNightbloomID("craterlib") +- setVersionType("release") +- setChangelog(rootProject.file("changelog.md")) +- setProjectVersion("${minecraft_version}-${project.version}") +- setDisplayName("[Forge 1.20.6] CraterLib - ${project.version}") +- setGameVersions("1.20.6") +- setLoaders("forge") +- setArtifact(remapJar) +- setCurseEnvironment("both") +- setIsManualRelease(true) +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java.patch new file mode 100644 index 0000000..5811ef4 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java.patch @@ -0,0 +1,39 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java ++++ /dev/null +@@ -1,36 +1,0 @@ +-package com.hypherionmc.craterlib; +- +-import com.hypherionmc.craterlib.api.events.client.LateInitEvent; +-import com.hypherionmc.craterlib.common.ForgeServerEvents; +-import com.hypherionmc.craterlib.core.event.CraterEventBus; +-import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork; +-import com.hypherionmc.craterlib.core.networking.data.PacketSide; +-import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; +-import com.hypherionmc.craterlib.network.CraterForgeNetworkHandler; +-import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +-import com.hypherionmc.craterlib.nojang.client.BridgedOptions; +-import net.minecraft.client.Minecraft; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.common.MinecraftForge; +-import net.minecraftforge.fml.DistExecutor; +-import net.minecraftforge.fml.common.Mod; +-import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +-import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +-import net.minecraftforge.fml.loading.FMLLoader; +- +-@Mod(CraterConstants.MOD_ID) +-public class CraterLib { +- +- public CraterLib() { +- MinecraftForge.EVENT_BUS.register(new ForgeServerEvents()); +- FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup); +- } +- +- public void commonSetup(FMLCommonSetupEvent evt) { +- new CraterPacketNetwork(new CraterForgeNetworkHandler(FMLLoader.getDist().isClient() ? PacketSide.CLIENT : PacketSide.SERVER)); +- DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { +- LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options)); +- CraterEventBus.INSTANCE.postEvent(event); +- }); +- } +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java.patch new file mode 100644 index 0000000..d22373c --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java.patch @@ -0,0 +1,28 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java ++++ /dev/null +@@ -1,25 +1,0 @@ +-package com.hypherionmc.craterlib.client; +- +-import com.hypherionmc.craterlib.CraterConstants; +-import com.hypherionmc.craterlib.api.events.client.CraterClientTickEvent; +-import com.hypherionmc.craterlib.core.event.CraterEventBus; +-import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; +-import net.minecraft.client.Minecraft; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.event.TickEvent; +-import net.minecraftforge.eventbus.api.SubscribeEvent; +-import net.minecraftforge.fml.common.Mod; +- +-@Mod.EventBusSubscriber(modid = CraterConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) +-public class ForgeClientEvents { +- +- @SubscribeEvent +- public static void clientTick(TickEvent.LevelTickEvent event) { +- if (Minecraft.getInstance().level == null) +- return; +- +- CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(BridgedClientLevel.of(Minecraft.getInstance().level)); +- CraterEventBus.INSTANCE.postEvent(craterClientTickEvent); +- } +- +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java.patch new file mode 100644 index 0000000..9aa0d76 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java.patch @@ -0,0 +1,44 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java ++++ /dev/null +@@ -1,41 +1,0 @@ +-package com.hypherionmc.craterlib.client; +- +-import com.hypherionmc.craterlib.core.platform.ClientPlatform; +-import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +-import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; +-import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +-import net.minecraft.client.Minecraft; +-import net.minecraft.network.Connection; +- +-import java.util.Objects; +- +-/** +- * @author HypherionSA +- * @date 16/06/2022 +- */ +-public class ForgeClientHelper implements ClientPlatform { +- +- public ForgeClientHelper() { +- } +- +- @Override +- public BridgedMinecraft getClientInstance() { +- return new BridgedMinecraft(); +- } +- +- @Override +- public BridgedPlayer getClientPlayer() { +- return BridgedPlayer.of(Minecraft.getInstance().player); +- } +- +- @Override +- public BridgedClientLevel getClientLevel() { +- return BridgedClientLevel.of(Minecraft.getInstance().level); +- } +- +- @Override +- public Connection getClientConnection() { +- Objects.requireNonNull(Minecraft.getInstance().getConnection(), "Cannot send packets when not in game!"); +- return Minecraft.getInstance().getConnection().getConnection(); +- } +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java.patch new file mode 100644 index 0000000..2a298e0 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java.patch @@ -0,0 +1,29 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java ++++ /dev/null +@@ -1,26 +1,0 @@ +-package com.hypherionmc.craterlib.common; +- +-import com.hypherionmc.craterlib.core.platform.CommonPlatform; +-import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; +-import net.minecraft.resources.ResourceLocation; +-import net.minecraft.world.item.CreativeModeTab; +-import net.minecraftforge.server.ServerLifecycleHooks; +- +-import java.util.HashMap; +-import java.util.Map; +- +-/** +- * @author HypherionSA +- */ +-public class ForgeCommonHelper implements CommonPlatform { +- +- public static Map TABS = new HashMap<>(); +- +- public ForgeCommonHelper() { +- } +- +- @Override +- public BridgedMinecraftServer getMCServer() { +- return BridgedMinecraftServer.of(ServerLifecycleHooks.getCurrentServer()); +- } +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch new file mode 100644 index 0000000..38a40e8 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch @@ -0,0 +1,20 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java ++++ /dev/null +@@ -1,17 +1,0 @@ +-package com.hypherionmc.craterlib.common; +- +-import com.hypherionmc.craterlib.core.platform.CompatUtils; +-import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +- +-public class ForgeCompatHelper implements CompatUtils { +- +- @Override +- public boolean isPlayerActive(BridgedPlayer player) { +- return true; +- } +- +- @Override +- public String getSkinUUID(BridgedPlayer player) { +- return player.getStringUUID(); +- } +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java.patch new file mode 100644 index 0000000..1c600ed --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java.patch @@ -0,0 +1,82 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java ++++ /dev/null +@@ -1,79 +1,0 @@ +-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 net.minecraft.client.Minecraft; +-import net.minecraftforge.fml.ModList; +-import net.minecraftforge.fml.loading.FMLLoader; +-import net.minecraftforge.fml.loading.FMLPaths; +- +-import java.io.File; +- +-/** +- * @author HypherionSA +- */ +-public class ForgeLoaderHelper implements ModloaderEnvironment { +- +- public ForgeLoaderHelper() { +- } +- +- @Override +- public boolean isFabric() { +- return false; +- } +- +- @Override +- public LoaderType getLoaderType() { +- return LoaderType.FORGE; +- } +- +- @Override +- public String getGameVersion() { +- return SharedConstants.VERSION_STRING; +- } +- +- @Override +- public File getGameFolder() { +- return Minecraft.getInstance().gameDirectory; +- } +- +- @Override +- public File getConfigFolder() { +- return FMLPaths.CONFIGDIR.get().toFile(); +- } +- +- @Override +- public File getModsFolder() { +- return FMLPaths.MODSDIR.get().toFile(); +- } +- +- @Override +- public Environment getEnvironment() { +- switch (FMLLoader.getDist()) { +- case CLIENT -> { +- return Environment.CLIENT; +- } +- case DEDICATED_SERVER -> { +- return Environment.SERVER; +- } +- } +- return Environment.UNKNOWN; +- } +- +- @Override +- public boolean isModLoaded(String modid) { +- return ModList.get().isLoaded(modid); +- } +- +- @Override +- public boolean isDevEnv() { +- return !FMLLoader.isProduction(); +- } +- +- @Override +- public int getModCount() { +- return ModList.get().size(); +- } +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java.patch new file mode 100644 index 0000000..6344341 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java.patch @@ -0,0 +1,46 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java ++++ /dev/null +@@ -1,43 +1,0 @@ +-package com.hypherionmc.craterlib.common; +- +-import com.hypherionmc.craterlib.api.events.server.CraterRegisterCommandEvent; +-import com.hypherionmc.craterlib.api.events.server.CraterServerLifecycleEvent; +-import com.hypherionmc.craterlib.core.event.CraterEventBus; +-import com.hypherionmc.craterlib.nojang.commands.CommandsRegistry; +-import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; +-import net.minecraftforge.event.RegisterCommandsEvent; +-import net.minecraftforge.event.server.ServerStartedEvent; +-import net.minecraftforge.event.server.ServerStartingEvent; +-import net.minecraftforge.event.server.ServerStoppedEvent; +-import net.minecraftforge.event.server.ServerStoppingEvent; +-import net.minecraftforge.eventbus.api.SubscribeEvent; +- +-public class ForgeServerEvents { +- +- @SubscribeEvent +- public void serverStarting(ServerStartingEvent event) { +- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(BridgedMinecraftServer.of(event.getServer()))); +- } +- +- @SubscribeEvent +- public void serverStarted(ServerStartedEvent event) { +- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started(BridgedMinecraftServer.of(event.getServer()))); +- } +- +- @SubscribeEvent +- public void serverStopping(ServerStoppingEvent event) { +- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping(BridgedMinecraftServer.of(event.getServer()))); +- } +- +- @SubscribeEvent +- public void serverStopped(ServerStoppedEvent event) { +- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped(BridgedMinecraftServer.of(event.getServer()))); +- } +- +- @SubscribeEvent +- public void onCommandRegister(RegisterCommandsEvent event) { +- CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent()); +- CommandsRegistry.INSTANCE.registerCommands(event.getDispatcher()); +- } +- +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java.patch new file mode 100644 index 0000000..bd91ed3 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java.patch @@ -0,0 +1,46 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java ++++ /dev/null +@@ -1,43 +1,0 @@ +-package com.hypherionmc.craterlib.mixin; +- +-import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen; +-import com.hypherionmc.craterlib.core.config.ConfigController; +-import com.hypherionmc.craterlib.core.config.ModuleConfig; +-import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen; +-import net.minecraft.client.Minecraft; +-import net.minecraft.client.gui.screens.Screen; +-import net.minecraftforge.client.ConfigScreenHandler; +-import net.minecraftforge.forgespi.language.IModInfo; +-import org.spongepowered.asm.mixin.Mixin; +-import org.spongepowered.asm.mixin.injection.At; +-import org.spongepowered.asm.mixin.injection.Inject; +-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +- +-import java.util.Optional; +-import java.util.function.BiFunction; +- +-/** +- * @author HypherionSA +- */ +-@Mixin(ConfigScreenHandler.class) +-public class ConfigScreenHandlerMixin { +- +- /** +- * Inject Auto Generated config Screens into forge +- * +- */ +- @Inject(at = @At("RETURN"), method = "getScreenFactoryFor", cancellable = true, remap = false) +- private static void injectConfigScreen(IModInfo selectedMod, CallbackInfoReturnable>> cir) { +- ConfigController.getMonitoredConfigs().forEach((conf, watcher) -> { +- if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) { +- ModuleConfig config = (ModuleConfig) conf; +- if (config.getModId().equals(selectedMod.getModId())) { +- cir.setReturnValue( +- Optional.of((minecraft, screen) -> new CraterConfigScreen(config, screen)) +- ); +- } +- } +- }); +- } +- +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch new file mode 100644 index 0000000..837e55e --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch @@ -0,0 +1,40 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java ++++ /dev/null +@@ -1,37 +1,0 @@ +-package com.hypherionmc.craterlib.mixin; +- +-import com.hypherionmc.craterlib.api.events.server.CraterServerChatEvent; +-import com.hypherionmc.craterlib.core.event.CraterEventBus; +-import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +-import com.hypherionmc.craterlib.utils.ChatUtils; +-import net.minecraft.network.chat.Component; +-import net.minecraft.network.chat.PlayerChatMessage; +-import net.minecraft.server.level.ServerPlayer; +-import net.minecraft.server.network.FilteredText; +-import net.minecraft.server.network.ServerGamePacketListenerImpl; +-import org.spongepowered.asm.mixin.Mixin; +-import org.spongepowered.asm.mixin.Shadow; +-import org.spongepowered.asm.mixin.injection.At; +-import org.spongepowered.asm.mixin.injection.Inject; +-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +- +-@Mixin(value = ServerGamePacketListenerImpl.class, priority = Integer.MIN_VALUE) +-public class ServerGamePacketListenerImplMixin { +- +- @Shadow +- public ServerPlayer player; +- +- @Inject( +- method = "lambda$handleChat$5", +- at = @At("HEAD"), +- cancellable = true +- ) +- private void injectChatEvent(Component component, PlayerChatMessage arg, FilteredText p_296589_, CallbackInfo ci) { +- Component finalcomp = component == null ? arg.decoratedContent() : component; +- CraterServerChatEvent event = new CraterServerChatEvent(BridgedPlayer.of(this.player), finalcomp.getString(), ChatUtils.mojangToAdventure(finalcomp)); +- CraterEventBus.INSTANCE.postEvent(event); +- if (event.wasCancelled()) +- ci.cancel(); +- } +- +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java.patch new file mode 100644 index 0000000..e22d953 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java.patch @@ -0,0 +1,56 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java ++++ /dev/null +@@ -1,53 +1,0 @@ +-package com.hypherionmc.craterlib.mixin; +- +-import com.hypherionmc.craterlib.api.events.server.ServerStatusEvent; +-import com.hypherionmc.craterlib.core.event.CraterEventBus; +-import com.hypherionmc.craterlib.utils.ChatUtils; +-import net.minecraft.network.Connection; +-import net.minecraft.network.protocol.status.ClientboundStatusResponsePacket; +-import net.minecraft.network.protocol.status.ServerStatus; +-import net.minecraft.network.protocol.status.ServerboundStatusRequestPacket; +-import net.minecraft.server.network.ServerStatusPacketListenerImpl; +-import org.spongepowered.asm.mixin.Final; +-import org.spongepowered.asm.mixin.Mixin; +-import org.spongepowered.asm.mixin.Shadow; +-import org.spongepowered.asm.mixin.injection.At; +-import org.spongepowered.asm.mixin.injection.Inject; +-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +- +-@Mixin(ServerStatusPacketListenerImpl.class) +-public class ServerStatusPacketListenerMixin { +- +- @Shadow +- @Final +- private ServerStatus status; +- +- @Shadow @Final private Connection connection; +- +- @Inject(method = "handleStatusRequest", +- at = @At( +- value = "INVOKE", +- target = "Lnet/minecraft/network/Connection;send(Lnet/minecraft/network/protocol/Packet;)V", +- shift = At.Shift.BEFORE), +- cancellable = true +- ) +- private void injectHandleStatusRequest(ServerboundStatusRequestPacket arg, CallbackInfo ci) { +- ServerStatusEvent.StatusRequestEvent event = new ServerStatusEvent.StatusRequestEvent(ChatUtils.mojangToAdventure(status.description())); +- CraterEventBus.INSTANCE.postEvent(event); +- +- if (event.getNewStatus() != null) { +- ci.cancel(); +- this.connection.send(new ClientboundStatusResponsePacket( +- new ServerStatus(ChatUtils.adventureToMojang( +- event.getNewStatus()), +- status.players(), +- status.version(), +- status.favicon(), +- status.enforcesSecureChat(), +- status.isModded() +- ) +- )); +- } +- } +- +-} diff --git a/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java.patch b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java.patch new file mode 100644 index 0000000..ccbb5cd --- /dev/null +++ b/patches/1.21.2/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java.patch @@ -0,0 +1,101 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java ++++ /dev/null +@@ -1,98 +1,0 @@ +-package com.hypherionmc.craterlib.network; +- +-import com.hypherionmc.craterlib.CraterConstants; +-import com.hypherionmc.craterlib.core.networking.PacketRegistry; +-import com.hypherionmc.craterlib.core.networking.data.PacketContext; +-import com.hypherionmc.craterlib.core.networking.data.PacketHolder; +-import com.hypherionmc.craterlib.core.networking.data.PacketSide; +-import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +-import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +-import net.minecraft.client.Minecraft; +-import net.minecraft.network.Connection; +-import net.minecraft.network.FriendlyByteBuf; +-import net.minecraft.server.level.ServerPlayer; +-import net.minecraft.server.network.ServerGamePacketListenerImpl; +-import net.minecraftforge.event.network.CustomPayloadEvent; +-import net.minecraftforge.network.ChannelBuilder; +-import net.minecraftforge.network.PacketDistributor; +-import net.minecraftforge.network.SimpleChannel; +- +-import java.util.HashMap; +-import java.util.Map; +-import java.util.function.BiConsumer; +-import java.util.function.Consumer; +-import java.util.function.Function; +- +-/** +- * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 +- */ +-public class CraterForgeNetworkHandler extends PacketRegistry { +- private final Map, SimpleChannel> CHANNELS = new HashMap<>(); +- +- public CraterForgeNetworkHandler(PacketSide side) { +- super(side); +- } +- +- protected void registerPacket(PacketHolder holder) { +- if (CHANNELS.get(holder.messageType()) == null) { +- SimpleChannel channel = ChannelBuilder +- .named(holder.type().id()) +- .clientAcceptedVersions((a, b) -> true) +- .serverAcceptedVersions((a, b) -> true) +- .networkProtocolVersion(1) +- .simpleChannel(); +- +- channel.messageBuilder(holder.messageType()) +- .decoder(mojangDecoder(holder.decoder())) +- .encoder(mojangEncoder(holder.encoder())) +- .consumerNetworkThread(buildHandler(holder.handler())) +- .add(); +- +- CHANNELS.put(holder.messageType(), channel); +- } else { +- CraterConstants.LOG.error("Trying to register duplicate packet for type {}", holder.messageType()); +- } +- } +- +- public void sendToServer(T packet) { +- this.sendToServer(packet, false); +- } +- +- public void sendToServer(T packet, boolean ignoreCheck) { +- SimpleChannel channel = CHANNELS.get(packet.getClass()); +- Connection connection = Minecraft.getInstance().getConnection().getConnection(); +- if (channel.isRemotePresent(connection) || ignoreCheck) { +- channel.send(packet, PacketDistributor.SERVER.noArg()); +- } +- } +- +- public void sendToClient(T packet, BridgedPlayer player) { +- SimpleChannel channel = CHANNELS.get(packet.getClass()); +- ServerGamePacketListenerImpl connection = player.getConnection(); +- if (connection == null) +- return; +- +- if (channel.isRemotePresent(connection.getConnection())) { +- channel.send(packet, PacketDistributor.PLAYER.with(player.toMojangServerPlayer())); +- } +- } +- +- private Function mojangDecoder(Function handler) { +- return byteBuf -> handler.apply(BridgedFriendlyByteBuf.of(byteBuf)); +- } +- +- private BiConsumer mojangEncoder(BiConsumer handler) { +- return ((t, byteBuf) -> handler.accept(t, BridgedFriendlyByteBuf.of(byteBuf))); +- } +- +- private BiConsumer buildHandler(Consumer> handler) { +- return (message, ctx) -> { +- ctx.enqueueWork(() -> { +- PacketSide side = ctx.getDirection().getReceptionSide().isServer() ? PacketSide.SERVER : PacketSide.CLIENT; +- ServerPlayer player = ctx.getSender(); +- handler.accept(new PacketContext<>(BridgedPlayer.of(player), message, side)); +- }); +- ctx.setPacketHandled(true); +- }; +- } +-} diff --git a/patches/1.21.2/Forge/src/main/resources/META-INF/mods.toml.patch b/patches/1.21.2/Forge/src/main/resources/META-INF/mods.toml.patch new file mode 100644 index 0000000..5bfc5ca --- /dev/null +++ b/patches/1.21.2/Forge/src/main/resources/META-INF/mods.toml.patch @@ -0,0 +1,34 @@ +--- a/Forge/src/main/resources/META-INF/mods.toml ++++ /dev/null +@@ -1,31 +1,0 @@ +-modLoader = "javafml" +-loaderVersion = "[50,)" +-license = "MIT" +-issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues" +- +-[[mods]] +- modId = "${mod_id}" +- version = "${version}" +- displayName = "${mod_name}" +- displayURL = "https://modrinth.com/mod/craterlib" +- logoFile = "craterlib_logo.png" +- #credits="Thanks for this example mod goes to Java" +- authors = "${mod_author}, Zenith" +- description = ''' +- A library mod used by First Dark Development and HypherionSA Mods +- ''' +- displayTest = "NONE" +- +-[[dependencies.${ mod_id }]] +- modId = "forge" +- mandatory = true +- versionRange = "[50,)" +- ordering = "NONE" +- side = "BOTH" +- +-[[dependencies.${ mod_id }]] +- modId = "minecraft" +- mandatory = true +- versionRange = "[1.20.6,1.21)" +- ordering = "NONE" +- side = "BOTH" diff --git a/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform.patch b/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform.patch new file mode 100644 index 0000000..ffa18e4 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform.patch @@ -0,0 +1,4 @@ +--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.client.ForgeClientHelper diff --git a/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch b/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch new file mode 100644 index 0000000..102cb45 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch @@ -0,0 +1,4 @@ +--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.ForgeCommonHelper diff --git a/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch b/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch new file mode 100644 index 0000000..e38c93b --- /dev/null +++ b/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch @@ -0,0 +1,4 @@ +--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.ForgeCompatHelper diff --git a/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch b/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch new file mode 100644 index 0000000..f97d6c0 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch @@ -0,0 +1,4 @@ +--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.ForgeLoaderHelper diff --git a/patches/1.21.2/Forge/src/main/resources/craterlib.forge.mixins.json.patch b/patches/1.21.2/Forge/src/main/resources/craterlib.forge.mixins.json.patch new file mode 100644 index 0000000..f714e59 --- /dev/null +++ b/patches/1.21.2/Forge/src/main/resources/craterlib.forge.mixins.json.patch @@ -0,0 +1,21 @@ +--- a/Forge/src/main/resources/craterlib.forge.mixins.json ++++ /dev/null +@@ -1,18 +1,0 @@ +-{ +- "required": true, +- "minVersion": "0.8", +- "package": "com.hypherionmc.craterlib.mixin", +- "compatibilityLevel": "JAVA_17", +- "mixins": [ +- ], +- "client": [ +- "ConfigScreenHandlerMixin" +- ], +- "server": [ +- "ServerGamePacketListenerImplMixin", +- "ServerStatusPacketListenerMixin" +- ], +- "injectors": { +- "defaultRequire": 1 +- } +-} diff --git a/patches/1.21.2/build.gradle.patch b/patches/1.21.2/build.gradle.patch index 6973612..b1d15b2 100644 --- a/patches/1.21.2/build.gradle.patch +++ b/patches/1.21.2/build.gradle.patch @@ -1,6 +1,6 @@ --- a/build.gradle +++ b/build.gradle -@@ -9,15 +9,10 @@ +@@ -10,15 +10,10 @@ var relType = project.properties["releaseType"] ?: "${release_type}" diff --git a/patches/1.21/.jenkins/Jenkinsfile.snapshot.patch b/patches/1.21/.jenkins/Jenkinsfile.snapshot.patch index a6a23ba..f02ba25 100644 --- a/patches/1.21/.jenkins/Jenkinsfile.snapshot.patch +++ b/patches/1.21/.jenkins/Jenkinsfile.snapshot.patch @@ -6,8 +6,8 @@ def JDK = "21"; -def majorMc = "1.21.2"; +def majorMc = "1.21"; - def modLoaders = "neoforge|fabric|quilt"; --def supportedMc = "1.21.2"; + def modLoaders = "neoforge|fabric|quilt|paper"; +-def supportedMc = "1.21.3"; -def reltype = "port"; +def supportedMc = "1.21|1.21.1"; +def reltype = "snapshot"; diff --git a/patches/1.21/Fabric/build.gradle.patch b/patches/1.21/Fabric/build.gradle.patch index 4aa78e3..b7b790f 100644 --- a/patches/1.21/Fabric/build.gradle.patch +++ b/patches/1.21/Fabric/build.gradle.patch @@ -2,10 +2,10 @@ +++ b/Fabric/build.gradle @@ -115,8 +115,8 @@ 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") + setDisplayName("[FABRIC/QUILT 1.21.x] CraterLib - ${project.version}") + setGameVersions("1.21", "1.21.1") setLoaders("fabric", "quilt") diff --git a/patches/1.21/Forge/build.gradle.patch b/patches/1.21/Forge/build.gradle.patch new file mode 100644 index 0000000..6153adf --- /dev/null +++ b/patches/1.21/Forge/build.gradle.patch @@ -0,0 +1,119 @@ +--- a/Forge/build.gradle ++++ /dev/null +@@ -1,116 +1,0 @@ +-// Adjust the output jar name here +-archivesBaseName = "${mod_name.replace(" ", "")}-Forge-${minecraft_version}" +- +-dependencies { +- // Compat +- // NOT AVAILABLE ON FORGE modImplementation("maven.modrinth:vanishmod:${vanishmod}") +- +- // Do not edit or remove +- implementation project(":Common") +-} +- +-shadowJar { +- from sourceSets.main.output +- configurations = [project.configurations.shade] +- +- dependencies { +- exclude(dependency('com.google.code.gson:.*')) +- +- relocate 'me.hypherionmc.moonconfig', 'shadow.hypherionmc.moonconfig' +- relocate 'me.hypherionmc.mcdiscordformatter', 'shadow.hypherionmc.mcdiscordformatter' +- relocate 'net.kyori', 'shadow.kyori' +- } +- +- setArchiveClassifier('dev-shadow') +- mergeServiceFiles() +-} +- +-/** +- * =============================================================================== +- * = DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING = +- * =============================================================================== +- */ +- +-unimined.minecraft { +- minecraftForge { +- loader forge_version +- mixinConfig("${mod_id}.mixins.json", "${mod_id}.forge.mixins.json") +- } +-} +- +-remapJar { +- inputFile.set shadowJar.archiveFile +- dependsOn shadowJar +- archiveClassifier.set null +-} +- +-jar { +- archiveClassifier.set "dev" +-} +- +-processResources { +- from project(":Common").sourceSets.main.resources +- def buildProps = project.properties.clone() +- +- filesMatching("META-INF/mods.toml") { +- expand buildProps +- } +-} +- +-compileTestJava.enabled = false +- +-tasks.withType(JavaCompile).configureEach { +- source(project(":Common").sourceSets.main.allSource) +-} +- +-/** +- * Publishing Config +- */ +-publishing { +- publications { +- mavenJava(MavenPublication) { +- artifactId project.archivesBaseName +- from components.java +- +- artifact(remapJar) { +- builtBy remapJar +- } +- +- pom.withXml { +- Node pomNode = asNode() +- pomNode.dependencies.'*'.findAll() { +- it.artifactId.text() == 'regutils-joined-fabric' || +- it.artifactId.text() == 'core' || +- it.artifactId.text() == 'toml' +- }.each() { +- it.parent().remove(it) +- } +- } +- } +- } +- +- repositories { +- maven rootProject.orion.getPublishingMaven() +- } +-} +- +-publisher { +- apiKeys { +- modrinth(System.getenv("MODRINTH_TOKEN")) +- curseforge(System.getenv("CURSE_TOKEN")) +- nightbloom(System.getenv("PLATFORM_KEY")) +- } +- +- setCurseID(curse_id) +- setModrinthID(modrinth_id) +- setNightbloomID("craterlib") +- setVersionType("release") +- setChangelog(rootProject.file("changelog.md")) +- setProjectVersion("${minecraft_version}-${project.version}") +- setDisplayName("[Forge 1.20.6] CraterLib - ${project.version}") +- setGameVersions("1.20.6") +- setLoaders("forge") +- setArtifact(remapJar) +- setCurseEnvironment("both") +- setIsManualRelease(true) +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java.patch new file mode 100644 index 0000000..5811ef4 --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java.patch @@ -0,0 +1,39 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java ++++ /dev/null +@@ -1,36 +1,0 @@ +-package com.hypherionmc.craterlib; +- +-import com.hypherionmc.craterlib.api.events.client.LateInitEvent; +-import com.hypherionmc.craterlib.common.ForgeServerEvents; +-import com.hypherionmc.craterlib.core.event.CraterEventBus; +-import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork; +-import com.hypherionmc.craterlib.core.networking.data.PacketSide; +-import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; +-import com.hypherionmc.craterlib.network.CraterForgeNetworkHandler; +-import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +-import com.hypherionmc.craterlib.nojang.client.BridgedOptions; +-import net.minecraft.client.Minecraft; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.common.MinecraftForge; +-import net.minecraftforge.fml.DistExecutor; +-import net.minecraftforge.fml.common.Mod; +-import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +-import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +-import net.minecraftforge.fml.loading.FMLLoader; +- +-@Mod(CraterConstants.MOD_ID) +-public class CraterLib { +- +- public CraterLib() { +- MinecraftForge.EVENT_BUS.register(new ForgeServerEvents()); +- FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup); +- } +- +- public void commonSetup(FMLCommonSetupEvent evt) { +- new CraterPacketNetwork(new CraterForgeNetworkHandler(FMLLoader.getDist().isClient() ? PacketSide.CLIENT : PacketSide.SERVER)); +- DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { +- LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options)); +- CraterEventBus.INSTANCE.postEvent(event); +- }); +- } +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java.patch new file mode 100644 index 0000000..d22373c --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java.patch @@ -0,0 +1,28 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java ++++ /dev/null +@@ -1,25 +1,0 @@ +-package com.hypherionmc.craterlib.client; +- +-import com.hypherionmc.craterlib.CraterConstants; +-import com.hypherionmc.craterlib.api.events.client.CraterClientTickEvent; +-import com.hypherionmc.craterlib.core.event.CraterEventBus; +-import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; +-import net.minecraft.client.Minecraft; +-import net.minecraftforge.api.distmarker.Dist; +-import net.minecraftforge.event.TickEvent; +-import net.minecraftforge.eventbus.api.SubscribeEvent; +-import net.minecraftforge.fml.common.Mod; +- +-@Mod.EventBusSubscriber(modid = CraterConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) +-public class ForgeClientEvents { +- +- @SubscribeEvent +- public static void clientTick(TickEvent.LevelTickEvent event) { +- if (Minecraft.getInstance().level == null) +- return; +- +- CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(BridgedClientLevel.of(Minecraft.getInstance().level)); +- CraterEventBus.INSTANCE.postEvent(craterClientTickEvent); +- } +- +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java.patch new file mode 100644 index 0000000..9aa0d76 --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java.patch @@ -0,0 +1,44 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java ++++ /dev/null +@@ -1,41 +1,0 @@ +-package com.hypherionmc.craterlib.client; +- +-import com.hypherionmc.craterlib.core.platform.ClientPlatform; +-import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +-import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; +-import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +-import net.minecraft.client.Minecraft; +-import net.minecraft.network.Connection; +- +-import java.util.Objects; +- +-/** +- * @author HypherionSA +- * @date 16/06/2022 +- */ +-public class ForgeClientHelper implements ClientPlatform { +- +- public ForgeClientHelper() { +- } +- +- @Override +- public BridgedMinecraft getClientInstance() { +- return new BridgedMinecraft(); +- } +- +- @Override +- public BridgedPlayer getClientPlayer() { +- return BridgedPlayer.of(Minecraft.getInstance().player); +- } +- +- @Override +- public BridgedClientLevel getClientLevel() { +- return BridgedClientLevel.of(Minecraft.getInstance().level); +- } +- +- @Override +- public Connection getClientConnection() { +- Objects.requireNonNull(Minecraft.getInstance().getConnection(), "Cannot send packets when not in game!"); +- return Minecraft.getInstance().getConnection().getConnection(); +- } +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java.patch new file mode 100644 index 0000000..2a298e0 --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java.patch @@ -0,0 +1,29 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java ++++ /dev/null +@@ -1,26 +1,0 @@ +-package com.hypherionmc.craterlib.common; +- +-import com.hypherionmc.craterlib.core.platform.CommonPlatform; +-import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; +-import net.minecraft.resources.ResourceLocation; +-import net.minecraft.world.item.CreativeModeTab; +-import net.minecraftforge.server.ServerLifecycleHooks; +- +-import java.util.HashMap; +-import java.util.Map; +- +-/** +- * @author HypherionSA +- */ +-public class ForgeCommonHelper implements CommonPlatform { +- +- public static Map TABS = new HashMap<>(); +- +- public ForgeCommonHelper() { +- } +- +- @Override +- public BridgedMinecraftServer getMCServer() { +- return BridgedMinecraftServer.of(ServerLifecycleHooks.getCurrentServer()); +- } +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch new file mode 100644 index 0000000..38a40e8 --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java.patch @@ -0,0 +1,20 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java ++++ /dev/null +@@ -1,17 +1,0 @@ +-package com.hypherionmc.craterlib.common; +- +-import com.hypherionmc.craterlib.core.platform.CompatUtils; +-import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +- +-public class ForgeCompatHelper implements CompatUtils { +- +- @Override +- public boolean isPlayerActive(BridgedPlayer player) { +- return true; +- } +- +- @Override +- public String getSkinUUID(BridgedPlayer player) { +- return player.getStringUUID(); +- } +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java.patch new file mode 100644 index 0000000..1c600ed --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java.patch @@ -0,0 +1,82 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java ++++ /dev/null +@@ -1,79 +1,0 @@ +-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 net.minecraft.client.Minecraft; +-import net.minecraftforge.fml.ModList; +-import net.minecraftforge.fml.loading.FMLLoader; +-import net.minecraftforge.fml.loading.FMLPaths; +- +-import java.io.File; +- +-/** +- * @author HypherionSA +- */ +-public class ForgeLoaderHelper implements ModloaderEnvironment { +- +- public ForgeLoaderHelper() { +- } +- +- @Override +- public boolean isFabric() { +- return false; +- } +- +- @Override +- public LoaderType getLoaderType() { +- return LoaderType.FORGE; +- } +- +- @Override +- public String getGameVersion() { +- return SharedConstants.VERSION_STRING; +- } +- +- @Override +- public File getGameFolder() { +- return Minecraft.getInstance().gameDirectory; +- } +- +- @Override +- public File getConfigFolder() { +- return FMLPaths.CONFIGDIR.get().toFile(); +- } +- +- @Override +- public File getModsFolder() { +- return FMLPaths.MODSDIR.get().toFile(); +- } +- +- @Override +- public Environment getEnvironment() { +- switch (FMLLoader.getDist()) { +- case CLIENT -> { +- return Environment.CLIENT; +- } +- case DEDICATED_SERVER -> { +- return Environment.SERVER; +- } +- } +- return Environment.UNKNOWN; +- } +- +- @Override +- public boolean isModLoaded(String modid) { +- return ModList.get().isLoaded(modid); +- } +- +- @Override +- public boolean isDevEnv() { +- return !FMLLoader.isProduction(); +- } +- +- @Override +- public int getModCount() { +- return ModList.get().size(); +- } +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java.patch new file mode 100644 index 0000000..6344341 --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java.patch @@ -0,0 +1,46 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java ++++ /dev/null +@@ -1,43 +1,0 @@ +-package com.hypherionmc.craterlib.common; +- +-import com.hypherionmc.craterlib.api.events.server.CraterRegisterCommandEvent; +-import com.hypherionmc.craterlib.api.events.server.CraterServerLifecycleEvent; +-import com.hypherionmc.craterlib.core.event.CraterEventBus; +-import com.hypherionmc.craterlib.nojang.commands.CommandsRegistry; +-import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; +-import net.minecraftforge.event.RegisterCommandsEvent; +-import net.minecraftforge.event.server.ServerStartedEvent; +-import net.minecraftforge.event.server.ServerStartingEvent; +-import net.minecraftforge.event.server.ServerStoppedEvent; +-import net.minecraftforge.event.server.ServerStoppingEvent; +-import net.minecraftforge.eventbus.api.SubscribeEvent; +- +-public class ForgeServerEvents { +- +- @SubscribeEvent +- public void serverStarting(ServerStartingEvent event) { +- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(BridgedMinecraftServer.of(event.getServer()))); +- } +- +- @SubscribeEvent +- public void serverStarted(ServerStartedEvent event) { +- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started(BridgedMinecraftServer.of(event.getServer()))); +- } +- +- @SubscribeEvent +- public void serverStopping(ServerStoppingEvent event) { +- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping(BridgedMinecraftServer.of(event.getServer()))); +- } +- +- @SubscribeEvent +- public void serverStopped(ServerStoppedEvent event) { +- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped(BridgedMinecraftServer.of(event.getServer()))); +- } +- +- @SubscribeEvent +- public void onCommandRegister(RegisterCommandsEvent event) { +- CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent()); +- CommandsRegistry.INSTANCE.registerCommands(event.getDispatcher()); +- } +- +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java.patch new file mode 100644 index 0000000..bd91ed3 --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java.patch @@ -0,0 +1,46 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java ++++ /dev/null +@@ -1,43 +1,0 @@ +-package com.hypherionmc.craterlib.mixin; +- +-import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen; +-import com.hypherionmc.craterlib.core.config.ConfigController; +-import com.hypherionmc.craterlib.core.config.ModuleConfig; +-import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen; +-import net.minecraft.client.Minecraft; +-import net.minecraft.client.gui.screens.Screen; +-import net.minecraftforge.client.ConfigScreenHandler; +-import net.minecraftforge.forgespi.language.IModInfo; +-import org.spongepowered.asm.mixin.Mixin; +-import org.spongepowered.asm.mixin.injection.At; +-import org.spongepowered.asm.mixin.injection.Inject; +-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +- +-import java.util.Optional; +-import java.util.function.BiFunction; +- +-/** +- * @author HypherionSA +- */ +-@Mixin(ConfigScreenHandler.class) +-public class ConfigScreenHandlerMixin { +- +- /** +- * Inject Auto Generated config Screens into forge +- * +- */ +- @Inject(at = @At("RETURN"), method = "getScreenFactoryFor", cancellable = true, remap = false) +- private static void injectConfigScreen(IModInfo selectedMod, CallbackInfoReturnable>> cir) { +- ConfigController.getMonitoredConfigs().forEach((conf, watcher) -> { +- if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) { +- ModuleConfig config = (ModuleConfig) conf; +- if (config.getModId().equals(selectedMod.getModId())) { +- cir.setReturnValue( +- Optional.of((minecraft, screen) -> new CraterConfigScreen(config, screen)) +- ); +- } +- } +- }); +- } +- +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch new file mode 100644 index 0000000..837e55e --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java.patch @@ -0,0 +1,40 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java ++++ /dev/null +@@ -1,37 +1,0 @@ +-package com.hypherionmc.craterlib.mixin; +- +-import com.hypherionmc.craterlib.api.events.server.CraterServerChatEvent; +-import com.hypherionmc.craterlib.core.event.CraterEventBus; +-import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +-import com.hypherionmc.craterlib.utils.ChatUtils; +-import net.minecraft.network.chat.Component; +-import net.minecraft.network.chat.PlayerChatMessage; +-import net.minecraft.server.level.ServerPlayer; +-import net.minecraft.server.network.FilteredText; +-import net.minecraft.server.network.ServerGamePacketListenerImpl; +-import org.spongepowered.asm.mixin.Mixin; +-import org.spongepowered.asm.mixin.Shadow; +-import org.spongepowered.asm.mixin.injection.At; +-import org.spongepowered.asm.mixin.injection.Inject; +-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +- +-@Mixin(value = ServerGamePacketListenerImpl.class, priority = Integer.MIN_VALUE) +-public class ServerGamePacketListenerImplMixin { +- +- @Shadow +- public ServerPlayer player; +- +- @Inject( +- method = "lambda$handleChat$5", +- at = @At("HEAD"), +- cancellable = true +- ) +- private void injectChatEvent(Component component, PlayerChatMessage arg, FilteredText p_296589_, CallbackInfo ci) { +- Component finalcomp = component == null ? arg.decoratedContent() : component; +- CraterServerChatEvent event = new CraterServerChatEvent(BridgedPlayer.of(this.player), finalcomp.getString(), ChatUtils.mojangToAdventure(finalcomp)); +- CraterEventBus.INSTANCE.postEvent(event); +- if (event.wasCancelled()) +- ci.cancel(); +- } +- +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java.patch new file mode 100644 index 0000000..e22d953 --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java.patch @@ -0,0 +1,56 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java ++++ /dev/null +@@ -1,53 +1,0 @@ +-package com.hypherionmc.craterlib.mixin; +- +-import com.hypherionmc.craterlib.api.events.server.ServerStatusEvent; +-import com.hypherionmc.craterlib.core.event.CraterEventBus; +-import com.hypherionmc.craterlib.utils.ChatUtils; +-import net.minecraft.network.Connection; +-import net.minecraft.network.protocol.status.ClientboundStatusResponsePacket; +-import net.minecraft.network.protocol.status.ServerStatus; +-import net.minecraft.network.protocol.status.ServerboundStatusRequestPacket; +-import net.minecraft.server.network.ServerStatusPacketListenerImpl; +-import org.spongepowered.asm.mixin.Final; +-import org.spongepowered.asm.mixin.Mixin; +-import org.spongepowered.asm.mixin.Shadow; +-import org.spongepowered.asm.mixin.injection.At; +-import org.spongepowered.asm.mixin.injection.Inject; +-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +- +-@Mixin(ServerStatusPacketListenerImpl.class) +-public class ServerStatusPacketListenerMixin { +- +- @Shadow +- @Final +- private ServerStatus status; +- +- @Shadow @Final private Connection connection; +- +- @Inject(method = "handleStatusRequest", +- at = @At( +- value = "INVOKE", +- target = "Lnet/minecraft/network/Connection;send(Lnet/minecraft/network/protocol/Packet;)V", +- shift = At.Shift.BEFORE), +- cancellable = true +- ) +- private void injectHandleStatusRequest(ServerboundStatusRequestPacket arg, CallbackInfo ci) { +- ServerStatusEvent.StatusRequestEvent event = new ServerStatusEvent.StatusRequestEvent(ChatUtils.mojangToAdventure(status.description())); +- CraterEventBus.INSTANCE.postEvent(event); +- +- if (event.getNewStatus() != null) { +- ci.cancel(); +- this.connection.send(new ClientboundStatusResponsePacket( +- new ServerStatus(ChatUtils.adventureToMojang( +- event.getNewStatus()), +- status.players(), +- status.version(), +- status.favicon(), +- status.enforcesSecureChat(), +- status.isModded() +- ) +- )); +- } +- } +- +-} diff --git a/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java.patch b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java.patch new file mode 100644 index 0000000..ccbb5cd --- /dev/null +++ b/patches/1.21/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java.patch @@ -0,0 +1,101 @@ +--- a/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java ++++ /dev/null +@@ -1,98 +1,0 @@ +-package com.hypherionmc.craterlib.network; +- +-import com.hypherionmc.craterlib.CraterConstants; +-import com.hypherionmc.craterlib.core.networking.PacketRegistry; +-import com.hypherionmc.craterlib.core.networking.data.PacketContext; +-import com.hypherionmc.craterlib.core.networking.data.PacketHolder; +-import com.hypherionmc.craterlib.core.networking.data.PacketSide; +-import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +-import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +-import net.minecraft.client.Minecraft; +-import net.minecraft.network.Connection; +-import net.minecraft.network.FriendlyByteBuf; +-import net.minecraft.server.level.ServerPlayer; +-import net.minecraft.server.network.ServerGamePacketListenerImpl; +-import net.minecraftforge.event.network.CustomPayloadEvent; +-import net.minecraftforge.network.ChannelBuilder; +-import net.minecraftforge.network.PacketDistributor; +-import net.minecraftforge.network.SimpleChannel; +- +-import java.util.HashMap; +-import java.util.Map; +-import java.util.function.BiConsumer; +-import java.util.function.Consumer; +-import java.util.function.Function; +- +-/** +- * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 +- */ +-public class CraterForgeNetworkHandler extends PacketRegistry { +- private final Map, SimpleChannel> CHANNELS = new HashMap<>(); +- +- public CraterForgeNetworkHandler(PacketSide side) { +- super(side); +- } +- +- protected void registerPacket(PacketHolder holder) { +- if (CHANNELS.get(holder.messageType()) == null) { +- SimpleChannel channel = ChannelBuilder +- .named(holder.type().id()) +- .clientAcceptedVersions((a, b) -> true) +- .serverAcceptedVersions((a, b) -> true) +- .networkProtocolVersion(1) +- .simpleChannel(); +- +- channel.messageBuilder(holder.messageType()) +- .decoder(mojangDecoder(holder.decoder())) +- .encoder(mojangEncoder(holder.encoder())) +- .consumerNetworkThread(buildHandler(holder.handler())) +- .add(); +- +- CHANNELS.put(holder.messageType(), channel); +- } else { +- CraterConstants.LOG.error("Trying to register duplicate packet for type {}", holder.messageType()); +- } +- } +- +- public void sendToServer(T packet) { +- this.sendToServer(packet, false); +- } +- +- public void sendToServer(T packet, boolean ignoreCheck) { +- SimpleChannel channel = CHANNELS.get(packet.getClass()); +- Connection connection = Minecraft.getInstance().getConnection().getConnection(); +- if (channel.isRemotePresent(connection) || ignoreCheck) { +- channel.send(packet, PacketDistributor.SERVER.noArg()); +- } +- } +- +- public void sendToClient(T packet, BridgedPlayer player) { +- SimpleChannel channel = CHANNELS.get(packet.getClass()); +- ServerGamePacketListenerImpl connection = player.getConnection(); +- if (connection == null) +- return; +- +- if (channel.isRemotePresent(connection.getConnection())) { +- channel.send(packet, PacketDistributor.PLAYER.with(player.toMojangServerPlayer())); +- } +- } +- +- private Function mojangDecoder(Function handler) { +- return byteBuf -> handler.apply(BridgedFriendlyByteBuf.of(byteBuf)); +- } +- +- private BiConsumer mojangEncoder(BiConsumer handler) { +- return ((t, byteBuf) -> handler.accept(t, BridgedFriendlyByteBuf.of(byteBuf))); +- } +- +- private BiConsumer buildHandler(Consumer> handler) { +- return (message, ctx) -> { +- ctx.enqueueWork(() -> { +- PacketSide side = ctx.getDirection().getReceptionSide().isServer() ? PacketSide.SERVER : PacketSide.CLIENT; +- ServerPlayer player = ctx.getSender(); +- handler.accept(new PacketContext<>(BridgedPlayer.of(player), message, side)); +- }); +- ctx.setPacketHandled(true); +- }; +- } +-} diff --git a/patches/1.21/Forge/src/main/resources/META-INF/mods.toml.patch b/patches/1.21/Forge/src/main/resources/META-INF/mods.toml.patch new file mode 100644 index 0000000..5bfc5ca --- /dev/null +++ b/patches/1.21/Forge/src/main/resources/META-INF/mods.toml.patch @@ -0,0 +1,34 @@ +--- a/Forge/src/main/resources/META-INF/mods.toml ++++ /dev/null +@@ -1,31 +1,0 @@ +-modLoader = "javafml" +-loaderVersion = "[50,)" +-license = "MIT" +-issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues" +- +-[[mods]] +- modId = "${mod_id}" +- version = "${version}" +- displayName = "${mod_name}" +- displayURL = "https://modrinth.com/mod/craterlib" +- logoFile = "craterlib_logo.png" +- #credits="Thanks for this example mod goes to Java" +- authors = "${mod_author}, Zenith" +- description = ''' +- A library mod used by First Dark Development and HypherionSA Mods +- ''' +- displayTest = "NONE" +- +-[[dependencies.${ mod_id }]] +- modId = "forge" +- mandatory = true +- versionRange = "[50,)" +- ordering = "NONE" +- side = "BOTH" +- +-[[dependencies.${ mod_id }]] +- modId = "minecraft" +- mandatory = true +- versionRange = "[1.20.6,1.21)" +- ordering = "NONE" +- side = "BOTH" diff --git a/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform.patch b/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform.patch new file mode 100644 index 0000000..ffa18e4 --- /dev/null +++ b/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform.patch @@ -0,0 +1,4 @@ +--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.client.ForgeClientHelper diff --git a/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch b/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch new file mode 100644 index 0000000..102cb45 --- /dev/null +++ b/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform.patch @@ -0,0 +1,4 @@ +--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.ForgeCommonHelper diff --git a/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch b/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch new file mode 100644 index 0000000..e38c93b --- /dev/null +++ b/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils.patch @@ -0,0 +1,4 @@ +--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.ForgeCompatHelper diff --git a/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch b/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch new file mode 100644 index 0000000..f97d6c0 --- /dev/null +++ b/patches/1.21/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment.patch @@ -0,0 +1,4 @@ +--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment ++++ /dev/null +@@ -1,1 +1,0 @@ +-com.hypherionmc.craterlib.common.ForgeLoaderHelper diff --git a/patches/1.21/Forge/src/main/resources/craterlib.forge.mixins.json.patch b/patches/1.21/Forge/src/main/resources/craterlib.forge.mixins.json.patch new file mode 100644 index 0000000..f714e59 --- /dev/null +++ b/patches/1.21/Forge/src/main/resources/craterlib.forge.mixins.json.patch @@ -0,0 +1,21 @@ +--- a/Forge/src/main/resources/craterlib.forge.mixins.json ++++ /dev/null +@@ -1,18 +1,0 @@ +-{ +- "required": true, +- "minVersion": "0.8", +- "package": "com.hypherionmc.craterlib.mixin", +- "compatibilityLevel": "JAVA_17", +- "mixins": [ +- ], +- "client": [ +- "ConfigScreenHandlerMixin" +- ], +- "server": [ +- "ServerGamePacketListenerImplMixin", +- "ServerStatusPacketListenerMixin" +- ], +- "injectors": { +- "defaultRequire": 1 +- } +-} diff --git a/patches/1.21/NeoForge/build.gradle.patch b/patches/1.21/NeoForge/build.gradle.patch index d06b6e7..8638f0d 100644 --- a/patches/1.21/NeoForge/build.gradle.patch +++ b/patches/1.21/NeoForge/build.gradle.patch @@ -16,10 +16,10 @@ } @@ -113,8 +108,8 @@ 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") + setDisplayName("[NeoForge 1.21.x] CraterLib - ${project.version}") + setGameVersions("1.21", "1.21.1") setLoaders("neoforge") diff --git a/patches/1.21/Paper/build.gradle.patch b/patches/1.21/Paper/build.gradle.patch new file mode 100644 index 0000000..57c307e --- /dev/null +++ b/patches/1.21/Paper/build.gradle.patch @@ -0,0 +1,13 @@ +--- a/Paper/build.gradle ++++ b/Paper/build.gradle +@@ -70,8 +70,8 @@ + setVersionType("alpha") + setChangelog(rootProject.file("changelog.md")) + setProjectVersion("${minecraft_version}-${project.version}") +- setDisplayName("[Paper 1.21.3] CraterLib - ${project.version}") +- setGameVersions("1.21.3") ++ setDisplayName("[Paper 1.21-1.21.1] CraterLib - ${project.version}") ++ setGameVersions("1.21", "1.21.1") + setLoaders("paper") + setArtifact(reobfJar.outputJar) + } diff --git a/patches/1.21/Paper/src/main/resources/paper-plugin.yml.patch b/patches/1.21/Paper/src/main/resources/paper-plugin.yml.patch new file mode 100644 index 0000000..ef3144f --- /dev/null +++ b/patches/1.21/Paper/src/main/resources/paper-plugin.yml.patch @@ -0,0 +1,10 @@ +--- a/Paper/src/main/resources/paper-plugin.yml ++++ b/Paper/src/main/resources/paper-plugin.yml +@@ -3,6 +3,6 @@ + description: "A Modding API used to create 'universal' mods" + main: com.hypherionmc.craterlib.paper.CraterLibPlugin + author: HypherionSA +-api-version: '1.21.3' ++api-version: '1.21' + bootstrapper: com.hypherionmc.craterlib.paper.CraterLibBootstrap + load: STARTUP diff --git a/patches/1.21/build.gradle.patch b/patches/1.21/build.gradle.patch index 054bb55..263568c 100644 --- a/patches/1.21/build.gradle.patch +++ b/patches/1.21/build.gradle.patch @@ -1,6 +1,6 @@ --- a/build.gradle +++ b/build.gradle -@@ -7,21 +7,15 @@ +@@ -8,21 +8,15 @@ id 'maven-publish' } @@ -23,7 +23,7 @@ identifier("${relType}") } } -@@ -42,7 +36,6 @@ +@@ -47,7 +41,6 @@ repositories { mavenCentral() diff --git a/patches/1.21/gradle.properties.patch b/patches/1.21/gradle.properties.patch index 3ae6fc0..fef6430 100644 --- a/patches/1.21/gradle.properties.patch +++ b/patches/1.21/gradle.properties.patch @@ -4,13 +4,13 @@ mod_name=CraterLib # Shared --minecraft_version=1.21.2 +-minecraft_version=1.21.3 +minecraft_version=1.21 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 +fabric_loader=0.15.11 +fabric_api=0.100.1+1.21