Skip to content
Open
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: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ BukkitLibraryManager bukkitLibraryManager = new BukkitLibraryManager(plugin);
// Create a library manager for a Bungee plugin
BungeeLibraryManager bungeeLibraryManager = new BungeeLibraryManager(plugin);

// Also Nukkit, Sponge, Paper, and Velocity are supported
// Also Nukkit, Sponge, Paper, Velocity and Fabric are supported
```

Create a Library instance with the library builder
Expand Down
15 changes: 15 additions & 0 deletions fabric/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* This file was generated by the Gradle 'init' task.
*/

plugins {
id("net.byteflux.java-conventions")
}

dependencies {
api(project(":libby-core"))
compileOnly("net.fabricmc:fabric-loader:0.16.14")
compileOnly("org.slf4j:slf4j-api:2.0.9")
}

description = "libby-fabric"
72 changes: 72 additions & 0 deletions fabric/src/main/java/net/byteflux/libby/FabricLibraryManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package net.byteflux.libby;

import net.byteflux.libby.logging.adapters.FabricLogAdapter;
import net.fabricmc.loader.api.ModContainer;
import net.fabricmc.loader.impl.launch.FabricLauncherBase;
import org.slf4j.Logger;

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;

import static java.util.Objects.requireNonNull;

/**
* A runtime dependency manager for Fabric mods.
*/
public class FabricLibraryManager extends LibraryManager {
private final ModContainer modContainer;

/**
* Creates a new Fabric library manager.
*
* @param logger the mod logger
* @param dataDirectory mod's data directory
* @param modContainer the mod container to manage
* @param directoryName download directory name
*/
public FabricLibraryManager(Logger logger,
Path dataDirectory,
ModContainer modContainer,
String directoryName) {
super(new FabricLogAdapter(logger), dataDirectory, directoryName);
this.modContainer = requireNonNull(modContainer, "modContainer");
}

/**
* Creates a new Fabric library manager.
*
* @param logger the mod logger
* @param dataDirectory mod's data directory
* @param modContainer the mod container to manage
*/
public FabricLibraryManager(Logger logger,
Path dataDirectory,
ModContainer modContainer) {
this(logger, dataDirectory, modContainer, "lib");
}

/**
* Adds a file to the Fabric mod's classpath.
*
* @param file the file to add
*/
@Override
protected void addToClasspath(Path file) {
FabricLauncherBase.getLauncher().addToClassPath(file);
}

@Override
protected InputStream getPluginResourceAsInputStream(String path) {
return modContainer.findPath(path)
.map(p -> {
try {
return Files.newInputStream(p);
} catch (IOException e) {
throw new RuntimeException("Could not open resource: " + path, e);
}
})
.orElse(null);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package net.byteflux.libby.logging.adapters;

import net.byteflux.libby.logging.LogLevel;
import org.slf4j.Logger;

import static java.util.Objects.requireNonNull;

/**
* Logging adapter that logs to a Fabric mod logger.
*/
public class FabricLogAdapter implements LogAdapter {
/**
* Fabric mod logger
*/
private final Logger logger;

/**
* Creates a new Fabric log adapter that logs to a {@link Logger}.
*
* @param logger the mod logger to wrap
*/
public FabricLogAdapter(Logger logger) {
this.logger = requireNonNull(logger, "logger");
}

/**
* Logs a message with the provided level to the Fabric mod logger.
*
* @param level message severity level
* @param message the message to log
*/
@Override
public void log(LogLevel level, String message) {
switch (requireNonNull(level, "level")) {
case DEBUG:
logger.debug(message);
break;
case INFO:
logger.info(message);
break;
case WARN:
logger.warn(message);
break;
case ERROR:
logger.error(message);
break;
}
}

/**
* Logs a message and stack trace with the provided level to the Fabric
* mod logger.
*
* @param level message severity level
* @param message the message to log
* @param throwable the throwable to print
*/
@Override
public void log(LogLevel level, String message, Throwable throwable) {
switch (requireNonNull(level, "level")) {
case DEBUG:
logger.debug(message, throwable);
break;
case INFO:
logger.info(message, throwable);
break;
case WARN:
logger.warn(message, throwable);
break;
case ERROR:
logger.error(message, throwable);
break;
}
}
}
2 changes: 2 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ include(":libby-core")
include(":libby-sponge")
include(":libby-bungee")
include(":libby-velocity")
include(":libby-fabric")
project(":libby-bukkit").projectDir = file("bukkit")
project(":libby-paper").projectDir = file("paper")
project(":libby-nukkit").projectDir = file("nukkit")
project(":libby-core").projectDir = file("core")
project(":libby-sponge").projectDir = file("sponge")
project(":libby-bungee").projectDir = file("bungee")
project(":libby-velocity").projectDir = file("velocity")
project(":libby-fabric").projectDir = file("fabric")