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 {
|
||||
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);
|
||||
|
|
|
@ -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))!!)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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": "*",
|
||||
"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",
|
||||
|
|
Loading…
Reference in New Issue