feat(config-network): integrate with ModMenu
ci/woodpecker/push/docs Pipeline was successful Details
ci/woodpecker/push/jfmod Pipeline was successful Details

This commit is contained in:
Johannes Frohnmeyer 2023-10-08 17:51:13 +02:00
parent 172d4d5b79
commit ef6c58e93d
Signed by: Johannes
GPG Key ID: E76429612C2929F4
7 changed files with 75 additions and 5 deletions

View File

@ -7,10 +7,17 @@ import java.util.Objects;
public class PlaceholderScreen extends Screen {
private final Screen parent;
private final Text description = Text.translatable("libjf-config-core-v2.no-screen.description");
protected PlaceholderScreen(Screen parent) {
super(Text.translatable("libjf-config-core-v2.no-screen"));
public PlaceholderScreen(Screen parent) {
this(
parent,
Text.translatable("libjf-config-core-v2.no-screen"),
Text.translatable("libjf-config-core-v2.no-screen.description")
);
}
public PlaceholderScreen(Screen parent, Text title, Text description) {
super(title);
this.parent = parent;
addDrawable((context, mouseX, mouseY, delta) -> {
context.drawCenteredTextWithShadow(textRenderer, description, width / 2, (height - textRenderer.fontHeight) / 2, 0xFFFFFF);

View File

@ -10,8 +10,10 @@ base {
dependencies {
val fabricVersion: String by rootProject.extra
val modmenuVersion: String by rootProject.extra
api(devProject(":libjf-base"))
api(devProject(":libjf-config-core-v2"))
modCompileOnly("com.terraformersmc:modmenu:$modmenuVersion")
include(modImplementation(fabricApi.module("fabric-networking-api-v1", fabricVersion))!!)
include(modImplementation(fabricApi.module("fabric-command-api-v2", fabricVersion))!!)
}

View File

@ -0,0 +1,35 @@
package io.gitlab.jfronny.libjf.config.impl.network.client;
import com.terraformersmc.modmenu.api.ModMenuApi;
import io.gitlab.jfronny.libjf.config.api.v2.ConfigHolder;
import io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory;
import io.gitlab.jfronny.libjf.config.impl.network.PermissionDeniedException;
import io.gitlab.jfronny.libjf.config.impl.network.RequestRouter;
import io.gitlab.jfronny.libjf.config.impl.network.rci.MirrorConfigHolder;
import io.gitlab.jfronny.libjf.config.impl.ui.PlaceholderScreen;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.minecraft.text.Text;
public class JfConfigNetworkModMenu implements ModMenuApi {
@Override
public com.terraformersmc.modmenu.api.ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> {
if (!JfConfigNetworkClient.isAvailable) return new PlaceholderScreen(
parent,
Text.translatable(RequestRouter.MOD_ID + ".modmenu.unavailable.title"),
Text.translatable(RequestRouter.MOD_ID + ".modmenu.unavailable.description")
);
try {
ConfigHolder ch = new MirrorConfigHolder(ClientPlayNetworking.getSender());
ch.getRegistered();
return ConfigScreenFactory.getInstance().createOverview(ch, parent);
} catch (PermissionDeniedException pe) {
return new PlaceholderScreen(
parent,
Text.translatable(RequestRouter.MOD_ID + ".modmenu.denied.title"),
Text.translatable(RequestRouter.MOD_ID + ".modmenu.denied.description")
);
}
};
}
}

View File

@ -0,0 +1,7 @@
{
"libjf-config-network-v0.modmenu.unavailable.title": "Unavailable",
"libjf-config-network-v0.modmenu.unavailable.description": "libjf-config-network-v0 server is unavailable",
"libjf-config-network-v0.modmenu.denied.title": "Permission denied",
"libjf-config-network-v0.modmenu.denied.description": "You do not have permission to edit configs on this server",
"overview.jfconfig.title": "Serverside Mods Overview"
}

View File

@ -45,7 +45,7 @@ public record PMResponseHandler(Consumer<Response> handler) implements ResponseH
@Override
public PacketByteBuf get() {
if (this == DENY) throw new RuntimeException("Access not allowed");
if (this == DENY) throw new PermissionDeniedException("Access not allowed");
else throw new UnsupportedOperationException("Method not found");
}
}

View File

@ -0,0 +1,18 @@
package io.gitlab.jfronny.libjf.config.impl.network;
public class PermissionDeniedException extends RuntimeException {
public PermissionDeniedException() {
}
public PermissionDeniedException(String message) {
super(message);
}
public PermissionDeniedException(String message, Throwable cause) {
super(message, cause);
}
public PermissionDeniedException(Throwable cause) {
super(cause);
}
}

View File

@ -14,7 +14,8 @@
"environment": "*",
"entrypoints": {
"server": ["io.gitlab.jfronny.libjf.config.impl.network.server.JfConfigNetworkServer::initialize"],
"client": ["io.gitlab.jfronny.libjf.config.impl.network.client.JfConfigNetworkClient::initialize"]
"client": ["io.gitlab.jfronny.libjf.config.impl.network.client.JfConfigNetworkClient::initialize"],
"modmenu": ["io.gitlab.jfronny.libjf.config.impl.network.client.JfConfigNetworkModMenu"]
},
"depends": {
"fabricloader": ">=0.12.0",