Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,7 @@ jobs:
java-version: 17
- name: Grant execute permission
run: chmod +x ./gradlew
- name: Setup project
run: ./gradlew
- name: Build with Gradle
run: ./gradlew build
32 changes: 30 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
id 'java'
id 'xyz.wagyourtail.unimined' version "1.3.9-SNAPSHOT"
id 'xyz.wagyourtail.unimined' version "1.4.1-SNAPSHOT"
id 'maven-publish'
}

Expand All @@ -19,25 +19,39 @@ repositories {
includeGroup "maven.modrinth"
}
}
unimined.ornitheMaven()
unimined.quiltMaven()

maven {
name = "Jitpack"
url 'https://jitpack.io/'
}
}

configurations {
ornitheImplementation
}

unimined.minecraft {
version project.minecraft_version

mappings {
calamus()
searge()
mcp(project.mcp_channel, "${project.mcp_version}-${project.minecraft_version}")

devFallbackNamespace("searge")
devNamespace("mcp")
}

legacyFabric {
loader project.loader_version
accessWidener = file("src/main/resources/fabricated-rift.accesswidener")
}

mods.remap(configurations.ornitheImplementation) {
namespace("calamus")
}
}

dependencies {
Expand All @@ -46,10 +60,24 @@ dependencies {
implementation("com.github.thecatcore.CursedMixinExtensions:fabric:1.0.0") {
exclude(module: 'fabric-loader')
}
implementation("com.github.thecatcore:WFVAIO:1.1.0") {
implementation("com.github.thecatcore:WFVAIO:1.2.1") {
exclude(module: 'fabric-loader')
}
implementation("net.legacyfabric.legacy-fabric-api:legacy-fabric-logger-api-v1:1.0.4+common+ae4aa0d092")

if (file(".gradle/unimined/local/modTransform/core-0.6.0-mapped-mcp.jar").exists()) {
fabricApi.osl("1.13.2", "0.16.3").forEach {
modImplementation(ornitheImplementation(it))
}

modImplementation(ornitheImplementation("com.terraformersmc:modmenu:0.3.0+mc1.13.2"))
} else {
fabricApi.osl("1.13.2", "0.16.3").forEach {
ornitheImplementation(it)
}

ornitheImplementation("com.terraformersmc:modmenu:0.3.0+mc1.13.2")
}
}

processResources {
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.github.fabriccompatibilitylayers.fabricatedrift;

import io.github.fabriccompatibilitylayers.fabricatedrift.modmenu.ModMenuUtils;
import net.fabricmc.loader.api.FabricLoader;
import org.dimdev.riftloader.ModInfo;

import java.util.Collection;
import java.util.Map;

public class CompatibilityHelper {
public static void addToModList(Collection<ModInfo> modInfos) {
if (FabricLoader.getInstance().isModLoaded("modmenu")) {
ModMenuUtils.addRiftMods(modInfos);
}
}

public static void registerBuiltinMods(Map<String, ModInfo> modInfos) {
if (FabricLoader.getInstance().isModLoaded("modmenu")) {
ModInfo info = new ModInfo();
info.id = "riftmodlist";
info.name = "Rift Mod List";
info.authors.add("Danielshe");
info.version = "2.1.0b";
info.description = "Adds a mod list to your client.";
info.url = "https://modrinth.com/mod/rift-mod-list";
info.source = modInfos.get("rift").source;

modInfos.put(info.id, info);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ public List<ModDiscovererConfig> getModDiscoverers() {

@Override
public List<ModRemapper> collectSubRemappers(List<ModCandidate> list) {
if (FabricLoader.getInstance().isModLoaded("modmenu")) {
list.removeIf(candidate -> "riftmodlist".equals(candidate.getId()));
}

return Collections.emptyList();
}

Expand Down Expand Up @@ -70,7 +74,12 @@ public void addRemappingLibraries(List<RemapLibrary> list, EnvType envType) {

@Override
public void registerAdditionalMappings(MappingBuilder mappingBuilder) {

if (FabricLoader.getInstance().isModLoaded("modmenu")) {
mappingBuilder.addMapping("me/shedaniel/api/ConfigRegistry", "io/github/fabriccompatibilitylayers/fabricatedrift/modmenu/RiftModListConfigRegistry")
.method("registerConfig", "(Ljava/lang/String;Ljava/lang/Runnable;)V")
.method("unregisterConfig", "(Ljava/lang/String;)V")
.method("getConfigRunnable", "(Ljava/lang/String;)Ljava/util/Optional;");
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@

import java.io.IOException;
import java.net.URI;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -58,7 +55,11 @@ public List<ModCandidate> collect(ModDiscovererConfig modDiscovererConfig, Path
ZIP_PROPERTIES.put("encoding", "UTF-8");
}

private static FileSystem getJarFileSystem(Path path) throws IOException {
return FileSystems.newFileSystem(URI.create("jar:" + path.toUri()), ZIP_PROPERTIES);
public static FileSystem getJarFileSystem(Path path) throws IOException {
try {
return FileSystems.newFileSystem(URI.create("jar:" + path.toUri()), ZIP_PROPERTIES);
} catch (FileSystemAlreadyExistsException e) {
return FileSystems.getFileSystem(URI.create("jar:" + path.toUri()));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.github.fabriccompatibilitylayers.fabricatedrift.mixin.modmenu;

import com.terraformersmc.modmenu.util.mod.fabric.FabricIconHandler;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.texture.DynamicTexture;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

import java.nio.file.Path;
import java.util.Map;

@Environment(EnvType.CLIENT)
@Mixin(value = FabricIconHandler.class, remap = false)
public interface FabricIconHandlerAccessor {
@Accessor(value = "modIconCache", remap = false)
Map<Path, DynamicTexture> getCache();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.github.fabriccompatibilitylayers.fabricatedrift.modmenu;

import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;

import java.util.HashMap;
import java.util.Map;

public class FabricatedRiftModMenuCompat implements ModMenuApi {
@Override
public Map<String, ConfigScreenFactory<?>> getProvidedConfigScreenFactories() {
Map<String, ConfigScreenFactory<?>> factories = new HashMap<>();

for (Map.Entry<String, Runnable> entry : RiftModListConfigRegistry.modConfigRunnableMap.entrySet()) {
factories.put("rift_" + entry.getKey(), parent -> new FakeGuiScreen(parent, entry.getValue()));
}

return factories;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package io.github.fabriccompatibilitylayers.fabricatedrift.modmenu;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;

public class FakeGuiScreen extends GuiScreen {
private final GuiScreen parent;
private final Runnable guiOpener;

public FakeGuiScreen(GuiScreen parent, Runnable guiOpener) {
this.parent = parent;
this.guiOpener = guiOpener;
}

@Override
public void setWorldAndResolution(Minecraft mc, int width, int height) {
super.setWorldAndResolution(mc, width, height);

this.mc.displayGuiScreen(this.parent);
guiOpener.run();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package io.github.fabriccompatibilitylayers.fabricatedrift.modmenu;

import com.terraformersmc.modmenu.ModMenu;
import com.terraformersmc.modmenu.util.mod.Mod;
import com.terraformersmc.modmenu.util.mod.fabric.FabricIconHandler;
import io.github.fabriccompatibilitylayers.fabricatedrift.RiftCandidateCollector;
import io.github.fabriccompatibilitylayers.fabricatedrift.mixin.modmenu.FabricIconHandlerAccessor;
import net.minecraft.client.renderer.texture.DynamicTexture;
import net.minecraft.client.renderer.texture.NativeImage;
import org.apache.commons.lang3.Validate;
import org.dimdev.riftloader.ModInfo;

import java.io.InputStream;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collection;
import java.util.Objects;

public class ModMenuUtils {
public static DynamicTexture createIcon(FabricIconHandler handler, RiftMod info) {
try {
FabricIconHandlerAccessor accessor = (FabricIconHandlerAccessor) handler;

Path iconPath = info.rootPath.resolve(info.modInfo.iconPath.replace("/", info.rootPath.getFileSystem().getSeparator()));

if (!accessor.getCache().containsKey(iconPath)) {
try (FileSystem fs = RiftCandidateCollector.getJarFileSystem(info.modInfo.source.toPath())) {
InputStream inputStream = Files.newInputStream(fs.getPath("/" + info.modInfo.iconPath));

DynamicTexture var8;
try {
NativeImage image = NativeImage.read(Objects.requireNonNull(inputStream));
Validate.validState(image.getWidth() == image.getHeight(), "Must be square icon");
DynamicTexture tex = new DynamicTexture(image);
accessor.getCache().put(iconPath, tex);
var8 = tex;
} catch (Throwable var10) {
if (inputStream != null) {
try {
inputStream.close();
} catch (Throwable var9) {
var10.addSuppressed(var9);
}
}

throw var10;
}

if (inputStream != null) {
inputStream.close();
}

return var8;
}
}

return accessor.getCache().get(iconPath);
} catch (Throwable t) {
t.printStackTrace();
return null;
}
}

public static void addRiftMods(Collection<ModInfo> modInfos) {
for (ModInfo modInfo : modInfos) {
Mod mod = new RiftMod(modInfo);

ModMenu.MODS.put(mod.getId(), mod);
}

ModMenu.clearModCountCache();
}
}
Loading