First progress on forge support

- add forge module
- github actions build and release
- aim for all-in-one jar supporting both fabric and forge

**NOTICE**
Forge support is not currently working.

Signed-off-by: Lucas Petrino <nsx1lucas@gmail.com>
This commit is contained in:
2024-01-15 23:21:57 +13:00
parent 4eaf638e42
commit 5ab33b1e63
19 changed files with 368 additions and 30 deletions

89
forge/build.gradle.kts Normal file
View File

@@ -0,0 +1,89 @@
architectury {
platformSetupLoomIde()
forge()
}
loom {
accessWidenerPath.set(project(":common").loom.accessWidenerPath)
forge.apply {
convertAccessWideners.set(true)
extraAccessWideners.add(loom.accessWidenerPath.get().asFile.name)
mixinConfig("weatherchanger.mixins.json")
}
}
val common: Configuration by configurations.creating
val shadowCommon: Configuration by configurations.creating
configurations {
compileOnly.configure { extendsFrom(common) }
runtimeOnly.configure { extendsFrom(common) }
}
dependencies {
forge("net.minecraftforge:forge:${rootProject.property("forge.version")}")
common(project(":common", "namedElements")) {
isTransitive = false
}
shadowCommon(project(":common", "transformProductionForge")) {
isTransitive = false
}
}
tasks {
processResources {
inputs.property("group", rootProject.property("maven_group"))
inputs.property("version", project.version)
filesMatching("META-INF/mods.toml") {
expand(mapOf(
"group" to rootProject.property("maven_group"),
"version" to project.version,
"mod_id" to rootProject.property("mod_id"),
"minecraft_version" to rootProject.property("minecraft_version")
))
}
}
remapJar {
injectAccessWidener.set(true)
}
jar {
from("../LICENSE.md")
from("../assets/logo.png") {
rename { "icon.png" }
}
dependsOn(":common:transformProductionForge")
from({
shadowCommon.filter { it.name.endsWith("jar") }.map { zipTree(it) }
})
}
}
java {
withSourcesJar()
}
publishing {
publications {
create<MavenPublication>("mavenJava") {
from(components["java"])
}
}
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
repositories {
// Add repositories to publish to here.
// Notice: This block does NOT have the same function as the block in the top level.
// The repositories here will be used for publishing your artifact, not for
// retrieving dependencies.
}
}

1
forge/gradle.properties Normal file
View File

@@ -0,0 +1 @@
loom.platform=forge

View File

@@ -0,0 +1,10 @@
package me.lucaslah.weatherchanger.forge;
import me.lucaslah.weatherchanger.keybinding.KeybindingManager;
public class ForgeKeybindingManager extends KeybindingManager {
@Override
public void registerKeys() {
// forge handles keybindings in a event
}
}

View File

@@ -0,0 +1,57 @@
package me.lucaslah.weatherchanger.forge;
import me.lucaslah.weatherchanger.WeatherChanger;
import me.lucaslah.weatherchanger.keybinding.Key;
import net.minecraft.client.MinecraftClient;
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
@Mod("weatherchanger")
public class WeatherChangerForge {
private static WeatherChangerForge instance;
private ForgeKeybindingManager forgeKeybindingManager;
public WeatherChangerForge() {
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
modEventBus.addListener(this::onClientSetup);
}
private void onClientSetup(FMLClientSetupEvent event) {
instance = this;
forgeKeybindingManager = new ForgeKeybindingManager();
MinecraftForge.EVENT_BUS.register(this);
WeatherChanger.init(new WeatherChangerPlatformImpl());
}
public static WeatherChangerForge getInstance() {
return instance;
}
public ForgeKeybindingManager getKeybindingManager() {
return forgeKeybindingManager;
}
@SubscribeEvent
public void registerBindings(RegisterKeyMappingsEvent event) {
for (Key key : forgeKeybindingManager.getEntries()) {
event.register(key.getKeyBinding());
}
}
@SubscribeEvent
public void onClientTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
for (Key key : forgeKeybindingManager.getEntries()) {
if (key.isEnabled() && key.getKeyBinding().wasPressed()) {
key.onPress(MinecraftClient.getInstance());
}
}
}
}
}

View File

@@ -0,0 +1,19 @@
package me.lucaslah.weatherchanger.forge;
import me.lucaslah.weatherchanger.WeatherChangerPlatform;
import me.lucaslah.weatherchanger.keybinding.KeybindingManager;
import net.minecraftforge.fml.loading.FMLPaths;
import java.nio.file.Path;
public class WeatherChangerPlatformImpl implements WeatherChangerPlatform {
@Override
public Path getConfigDirectory() {
return FMLPaths.CONFIGDIR.get();
}
@Override
public KeybindingManager getKeybindingManager() {
return WeatherChangerForge.getInstance().getKeybindingManager();
}
}

View File

@@ -0,0 +1,28 @@
modLoader = "javafml"
loaderVersion = "[4,)"
issueTrackerURL = "https://github.com/Lucaslah/WeatherChanger/issues"
license = "LGPL-3.0"
[[mods]]
modId = "${mod_id}"
version = "${version}"
displayName = "Weather Changer"
authors = "Lucaslah"
description = '''
Client side weather change for Minecraft
'''
logoFile = "icon.png"
[[dependencies.${mod_id}]]
modId = "forge"
mandatory = true
versionRange = "[43,)"
ordering = "NONE"
side = "CLIENT"
[[dependencies.${mod_id}]]
modId = "minecraft"
mandatory = true
versionRange = "[${minecraft_version},)"
ordering = "NONE"
side = "CLIENT"

View File

@@ -0,0 +1,6 @@
{
"pack": {
"description": "Weather Changer",
"pack_format": 9
}
}