[FEAT] Paper Support
This commit is contained in:
@@ -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";
|
||||
|
@@ -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")
|
||||
|
119
patches/1.21/Forge/build.gradle.patch
Normal file
119
patches/1.21/Forge/build.gradle.patch
Normal file
@@ -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)
|
||||
-}
|
@@ -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);
|
||||
- });
|
||||
- }
|
||||
-}
|
@@ -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);
|
||||
- }
|
||||
-
|
||||
-}
|
@@ -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();
|
||||
- }
|
||||
-}
|
@@ -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<ResourceLocation, CreativeModeTab> TABS = new HashMap<>();
|
||||
-
|
||||
- public ForgeCommonHelper() {
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public BridgedMinecraftServer getMCServer() {
|
||||
- return BridgedMinecraftServer.of(ServerLifecycleHooks.getCurrentServer());
|
||||
- }
|
||||
-}
|
@@ -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();
|
||||
- }
|
||||
-}
|
@@ -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();
|
||||
- }
|
||||
-}
|
@@ -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());
|
||||
- }
|
||||
-
|
||||
-}
|
@@ -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<Optional<BiFunction<Minecraft, Screen, Screen>>> 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))
|
||||
- );
|
||||
- }
|
||||
- }
|
||||
- });
|
||||
- }
|
||||
-
|
||||
-}
|
@@ -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();
|
||||
- }
|
||||
-
|
||||
-}
|
@@ -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()
|
||||
- )
|
||||
- ));
|
||||
- }
|
||||
- }
|
||||
-
|
||||
-}
|
@@ -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<Class<?>, SimpleChannel> CHANNELS = new HashMap<>();
|
||||
-
|
||||
- public CraterForgeNetworkHandler(PacketSide side) {
|
||||
- super(side);
|
||||
- }
|
||||
-
|
||||
- protected <T> void registerPacket(PacketHolder<T> 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 <T> void sendToServer(T packet) {
|
||||
- this.sendToServer(packet, false);
|
||||
- }
|
||||
-
|
||||
- public <T> 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 <T> 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 <T> Function<FriendlyByteBuf, T> mojangDecoder(Function<BridgedFriendlyByteBuf, T> handler) {
|
||||
- return byteBuf -> handler.apply(BridgedFriendlyByteBuf.of(byteBuf));
|
||||
- }
|
||||
-
|
||||
- private <T> BiConsumer<T, FriendlyByteBuf> mojangEncoder(BiConsumer<T, BridgedFriendlyByteBuf> handler) {
|
||||
- return ((t, byteBuf) -> handler.accept(t, BridgedFriendlyByteBuf.of(byteBuf)));
|
||||
- }
|
||||
-
|
||||
- private <T> BiConsumer<T, CustomPayloadEvent.Context> buildHandler(Consumer<PacketContext<T>> 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);
|
||||
- };
|
||||
- }
|
||||
-}
|
@@ -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"
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
||||
- }
|
||||
-}
|
@@ -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")
|
||||
|
13
patches/1.21/Paper/build.gradle.patch
Normal file
13
patches/1.21/Paper/build.gradle.patch
Normal file
@@ -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)
|
||||
}
|
10
patches/1.21/Paper/src/main/resources/paper-plugin.yml.patch
Normal file
10
patches/1.21/Paper/src/main/resources/paper-plugin.yml.patch
Normal file
@@ -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
|
@@ -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()
|
||||
|
@@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user