feat(config-network): integrate with ModMenu
This commit is contained in:
parent
172d4d5b79
commit
ef6c58e93d
@ -7,10 +7,17 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public class PlaceholderScreen extends Screen {
|
public class PlaceholderScreen extends Screen {
|
||||||
private final Screen parent;
|
private final Screen parent;
|
||||||
private final Text description = Text.translatable("libjf-config-core-v2.no-screen.description");
|
|
||||||
|
|
||||||
protected PlaceholderScreen(Screen parent) {
|
public PlaceholderScreen(Screen parent) {
|
||||||
super(Text.translatable("libjf-config-core-v2.no-screen"));
|
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;
|
this.parent = parent;
|
||||||
addDrawable((context, mouseX, mouseY, delta) -> {
|
addDrawable((context, mouseX, mouseY, delta) -> {
|
||||||
context.drawCenteredTextWithShadow(textRenderer, description, width / 2, (height - textRenderer.fontHeight) / 2, 0xFFFFFF);
|
context.drawCenteredTextWithShadow(textRenderer, description, width / 2, (height - textRenderer.fontHeight) / 2, 0xFFFFFF);
|
||||||
|
@ -10,8 +10,10 @@ base {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
val fabricVersion: String by rootProject.extra
|
val fabricVersion: String by rootProject.extra
|
||||||
|
val modmenuVersion: String by rootProject.extra
|
||||||
api(devProject(":libjf-base"))
|
api(devProject(":libjf-base"))
|
||||||
api(devProject(":libjf-config-core-v2"))
|
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-networking-api-v1", fabricVersion))!!)
|
||||||
include(modImplementation(fabricApi.module("fabric-command-api-v2", fabricVersion))!!)
|
include(modImplementation(fabricApi.module("fabric-command-api-v2", fabricVersion))!!)
|
||||||
}
|
}
|
||||||
|
@ -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")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -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"
|
||||||
|
}
|
@ -45,7 +45,7 @@ public record PMResponseHandler(Consumer<Response> handler) implements ResponseH
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PacketByteBuf get() {
|
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");
|
else throw new UnsupportedOperationException("Method not found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -14,7 +14,8 @@
|
|||||||
"environment": "*",
|
"environment": "*",
|
||||||
"entrypoints": {
|
"entrypoints": {
|
||||||
"server": ["io.gitlab.jfronny.libjf.config.impl.network.server.JfConfigNetworkServer::initialize"],
|
"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": {
|
"depends": {
|
||||||
"fabricloader": ">=0.12.0",
|
"fabricloader": ">=0.12.0",
|
||||||
|
Loading…
Reference in New Issue
Block a user