[DEV] New Cloth Config GUIs, new nojang apis, and bug fixes

This commit is contained in:
2025-01-14 17:14:57 +02:00
parent 864baeb6c5
commit 8a46899769
290 changed files with 6213 additions and 459 deletions

View File

@@ -1,11 +1,13 @@
--- a/Common/build.gradle
+++ b/Common/build.gradle
@@ -1,8 +1,8 @@
@@ -1,10 +1,10 @@
archivesBaseName = "${mod_name.replace(" ", "")}-Common-${minecraft_version}"
dependencies {
- stupidRemapArch("dev.ftb.mods:ftb-essentials:${ftb_essentials}")
stupidRemapArch("dev.ftb.mods:ftb-ranks:${ftb_ranks}")
stupidRemapArch("me.shedaniel.cloth:cloth-config:${cloth_config}")
+
}

View File

@@ -1,6 +1,6 @@
--- a/Common/src/main/java/com/hypherionmc/craterlib/api/commands/CraterCommand.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/api/commands/CraterCommand.java
@@ -14,6 +14,7 @@
@@ -15,6 +15,7 @@
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.arguments.GameProfileArgument;
@@ -8,7 +8,7 @@
import net.minecraft.world.entity.player.Player;
import org.jetbrains.annotations.ApiStatus;
@@ -53,7 +54,7 @@
@@ -54,7 +55,7 @@
public CraterCommand withGameProfilesArgument(String key, CommandExecutorWithArgs<List<BridgedGameProfile>> executor) {
this.mojangCommand.then(Commands.argument(key, GameProfileArgument.gameProfile())
.executes(context -> executor.run(
@@ -17,7 +17,7 @@
GameProfileArgument.getGameProfiles(context, key).stream().map(BridgedGameProfile::of).toList(),
BridgedCommandSourceStack.of(context.getSource()))
));
@@ -63,7 +64,7 @@
@@ -64,7 +65,7 @@
public CraterCommand withBoolArgument(String key, CommandExecutorWithArgs<Boolean> executor) {
this.mojangCommand.then(Commands.argument(key, BoolArgumentType.bool())
.executes(context -> executor.run(
@@ -26,7 +26,7 @@
BoolArgumentType.getBool(context, key),
BridgedCommandSourceStack.of(context.getSource())
)));
@@ -73,7 +74,7 @@
@@ -74,7 +75,7 @@
public CraterCommand withWordArgument(String key, CommandExecutorWithArgs<String> executor) {
this.mojangCommand.then(Commands.argument(key, StringArgumentType.word())
.executes(context -> executor.run(
@@ -35,7 +35,7 @@
StringArgumentType.getString(context, key),
BridgedCommandSourceStack.of(context.getSource())
)));
@@ -83,7 +84,7 @@
@@ -84,7 +85,7 @@
public CraterCommand withStringArgument(String key, CommandExecutorWithArgs<String> executor) {
this.mojangCommand.then(Commands.argument(key, StringArgumentType.string())
.executes(context -> executor.run(
@@ -44,7 +44,7 @@
StringArgumentType.getString(context, key),
BridgedCommandSourceStack.of(context.getSource())
)));
@@ -93,7 +94,7 @@
@@ -94,7 +95,7 @@
public CraterCommand withPhraseArgument(String key, CommandExecutorWithArgs<String> executor) {
this.mojangCommand.then(Commands.argument(key, StringArgumentType.greedyString())
.executes(context -> executor.run(
@@ -53,7 +53,7 @@
StringArgumentType.getString(context, key),
BridgedCommandSourceStack.of(context.getSource())
)));
@@ -103,7 +104,7 @@
@@ -104,7 +105,7 @@
public CraterCommand withIntegerArgument(String key, CommandExecutorWithArgs<Integer> executor) {
this.mojangCommand.then(Commands.argument(key, IntegerArgumentType.integer())
.executes(context -> executor.run(
@@ -62,15 +62,19 @@
IntegerArgumentType.getInteger(context, key),
BridgedCommandSourceStack.of(context.getSource())
)));
@@ -137,10 +138,10 @@
}
@@ -139,14 +140,14 @@
private boolean checkPermission(CommandSourceStack stack) {
- if (!ModloaderEnvironment.INSTANCE.isModLoaded("luckperms") || !stack.isPlayer() || luckPermNode.isEmpty())
try {
- if (!ModloaderEnvironment.INSTANCE.isModLoaded("luckperms") || !stack.isPlayer() || luckPermNode.isEmpty())
+ if (!ModloaderEnvironment.INSTANCE.isModLoaded("luckperms") || !(stack.getEntity() instanceof Player) || luckPermNode.isEmpty())
return stack.hasPermission(this.permLevel);
return stack.hasPermission(this.permLevel);
- return LuckPermsCompat.INSTANCE.hasPermission(stack.getPlayer(), this.luckPermNode) || stack.hasPermission(this.permLevel);
- return LuckPermsCompat.INSTANCE.hasPermission(stack.getPlayer(), this.luckPermNode) || stack.hasPermission(this.permLevel);
} catch (Exception e) {
CraterConstants.LOG.error("Failed to check luckperms permissions", e);
return stack.hasPermission(this.permLevel);
}
+ return LuckPermsCompat.INSTANCE.hasPermission((ServerPlayer) stack.getEntity(), this.luckPermNode) || stack.hasPermission(this.permLevel);
}

View File

@@ -0,0 +1,120 @@
--- a/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/ClothConfigScreenBuilder.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/ClothConfigScreenBuilder.java
@@ -14,6 +14,8 @@
import net.minecraft.client.gui.components.toasts.SystemToast;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component;
+import net.minecraft.network.chat.TextComponent;
+import net.minecraft.network.chat.TranslatableComponent;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
@@ -89,7 +91,7 @@
.setParentScreen(parent)
.setTitle(getTranslationKey(config, invoker, field.getName()));
- ConfigCategory category = builder.getOrCreateCategory(Component.literal("Entries"));
+ ConfigCategory category = builder.getOrCreateCategory(new TextComponent("Entries"));
// Handle Existing items in the list
for (int i = 0; i < list.size(); i++) {
@@ -99,8 +101,8 @@
// Add a button to open the edit screen, as well as a delete button
category.addEntry(
new ClothConfigButtonEntry(
- Component.translatable("cl.buttons.entry", (i + 1)),
- Component.translatable("cl.buttons.edit"),
+ new TranslatableComponent("cl.buttons.entry", (i + 1)),
+ new TranslatableComponent("cl.buttons.edit"),
button -> Minecraft.getInstance().setScreen(
buildSubScreen(config, item, builder.build())
),
@@ -121,8 +123,8 @@
category.addEntry(
new ClothConfigButtonEntry(
- Component.literal(""),
- Component.translatable("cl.buttons.add_entry"),
+ new TextComponent(""),
+ new TranslatableComponent("cl.buttons.add_entry"),
button -> {
try {
Object newItem = elementType.getDeclaredConstructor().newInstance();
@@ -150,7 +152,7 @@
*/
private static void readConfigFields(AbstractConfig baseConfig, Object config, ConfigBuilder builder) {
ConfigEntryBuilder entryBuilder = builder.entryBuilder();
- ConfigCategory configCategory = builder.getOrCreateCategory(Component.literal("General"));
+ ConfigCategory configCategory = builder.getOrCreateCategory(new TextComponent("General"));
for (Field field : config.getClass().getDeclaredFields()) {
try {
@@ -168,8 +170,8 @@
if (val != null) {
configCategory.addEntry(
new ClothConfigButtonEntry(
- Component.translatable("cl.config." + baseConfig.getClass().getSimpleName().toLowerCase() + "." + field.getName().toLowerCase()),
- Component.translatable("cl.buttons.edit"),
+ new TranslatableComponent("cl.config." + baseConfig.getClass().getSimpleName().toLowerCase() + "." + field.getName().toLowerCase()),
+ new TranslatableComponent("cl.buttons.edit"),
button -> Minecraft.getInstance().setScreen(
buildSubScreen(baseConfig, val, builder.build())
)
@@ -285,7 +287,7 @@
configCategory.addEntry(
new ClothConfigButtonEntry(
getTranslationKey(baseConfig, config, field.getName()),
- Component.translatable("cl.buttons.edit"),
+ new TranslatableComponent("cl.buttons.edit"),
button -> Minecraft.getInstance().setScreen(
buildListScreen(baseConfig, list, field, config, builder.build(), false)
)
@@ -310,19 +312,19 @@
* @return A {@link Component} that can be used for the tooltip
*/
private static Component getToolTip(Field field) {
- Component component = Component.empty();
+ Component component = new TextComponent("");
if (field.isAnnotationPresent(SpecComment.class)) {
SpecComment comment = field.getAnnotation(SpecComment.class);
- component = Component.literal(comment.value());
+ component = new TextComponent(comment.value());
}
if (field.isAnnotationPresent(Tooltip.class)) {
Tooltip tooltip = field.getAnnotation(Tooltip.class);
- Component c = Component.empty();
+ Component c = new TextComponent("");
for (String comment : tooltip.value()) {
- c.getSiblings().add(Component.literal(comment));
+ c.getSiblings().add(new TextComponent(comment));
}
component = c;
@@ -350,7 +352,7 @@
baseKey += "." + fieldName.toLowerCase();
}
- return Component.translatable(baseKey);
+ return new TranslatableComponent(baseKey);
}
/**
@@ -390,11 +392,11 @@
config.saveConfig(config);
Files.deleteIfExists(backupPath);
} catch (Exception e) {
- Minecraft.getInstance().getToastManager().addToast(
+ Minecraft.getInstance().getToasts().addToast(
new SystemToast(
- SystemToast.SystemToastId.PACK_LOAD_FAILURE,
- Component.literal("Failed To Save Config"),
- Component.literal("Restoring Backup Copy. Check log for details"))
+ SystemToast.SystemToastIds.PACK_LOAD_FAILURE,
+ new TextComponent("Failed To Save Config"),
+ new TextComponent("Restoring Backup Copy. Check log for details"))
);
CraterConstants.LOG.error("Failed to save config, restoring backup", e);
try {

View File

@@ -23,7 +23,7 @@
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
@@ -49,7 +50,7 @@
@@ -50,7 +51,7 @@
private boolean dragging;
public CraterConfigScreen(AbstractConfig config, Screen parent, Object subConfig) {
@@ -32,7 +32,7 @@
this.parent = parent;
this.config = config;
if (subConfig != null) {
@@ -64,11 +65,11 @@
@@ -65,11 +66,11 @@
}
private static Component toText(Enum<?> val) {
@@ -46,7 +46,7 @@
}
private void setupScreenFromConfig(Object object, Class<?> clazz) {
@@ -94,7 +95,7 @@
@@ -95,7 +96,7 @@
tooltipLang = field.getAnnotation(Tooltip.class).value();
}
@@ -55,7 +55,7 @@
val,
() -> val,
(ret) -> {
@@ -158,7 +159,7 @@
@@ -159,7 +160,7 @@
return new TextConfigOption<>(Objects::toString, BigDecimal::new);
}
if (value instanceof ResourceLocation) {
@@ -64,7 +64,7 @@
}
if (isSubConfig) {
return new SubConfigWidget<>(config, this, value);
@@ -172,24 +173,24 @@
@@ -173,24 +174,24 @@
((List) children()).addAll(options);
int buttonWidths = Math.min(200, (width - 50 - 12) / 3);
@@ -101,7 +101,7 @@
int y = (int) (TOP + 4 - Math.round(scrollerAmount));
for (Option<?> option : options) {
@@ -216,23 +217,24 @@
@@ -217,23 +218,24 @@
int maxY = this.height - BOTTOM;
//RenderSystem.disableTexture();
Tesselator tesselator = Tesselator.getInstance();
@@ -143,7 +143,7 @@
RenderSystem.disableBlend();
//RenderSystem.enableTexture();
}
@@ -240,21 +242,22 @@
@@ -241,21 +243,22 @@
private void renderShadow(PoseStack matrices) {
Tesselator tesselator = Tesselator.getInstance();
@@ -177,7 +177,7 @@
//RenderSystem.enableTexture();
RenderSystem.disableBlend();
}
@@ -265,15 +268,16 @@
@@ -266,15 +269,16 @@
protected void overlayBackground(Matrix4f matrix, int minX, int minY, int maxX, int maxY, int red, int green, int blue, int startAlpha, int endAlpha) {
Tesselator tesselator = Tesselator.getInstance();
@@ -202,7 +202,7 @@
}
public int scrollHeight() {
@@ -321,22 +325,22 @@
@@ -322,22 +326,22 @@
@Override
public void onClose() {
if (isEdited()) {
@@ -231,7 +231,7 @@
}
@Override
@@ -375,15 +379,15 @@
@@ -376,15 +380,15 @@
}
}

View File

@@ -10,7 +10,7 @@
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.EditBox;
@@ -17,11 +17,11 @@
@@ -18,11 +18,11 @@
public W widget;
@Override

View File

@@ -16,7 +16,7 @@
/**
* Copied from Cloth Config Lite
@@ -16,7 +16,7 @@
@@ -17,7 +17,7 @@
public class BaseWidget<T> extends Option<T> {
public static final int resetButtonOffset = 48;
@@ -25,7 +25,7 @@
private boolean hideReset = false;
private boolean isSubConfig = false;
@@ -39,8 +39,8 @@
@@ -40,8 +40,8 @@
}
@Override
@@ -36,7 +36,7 @@
boolean edited = isEdited() || hasErrors;
if (edited) {
text.withStyle(ChatFormatting.ITALIC);
@@ -50,9 +50,9 @@
@@ -51,9 +51,9 @@
} else {
text.withStyle(ChatFormatting.GRAY);
}

View File

@@ -0,0 +1,67 @@
--- a/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/ClothConfigButtonEntry.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/ClothConfigButtonEntry.java
@@ -1,13 +1,14 @@
package com.hypherionmc.craterlib.client.gui.config.widgets;
import com.mojang.blaze3d.platform.Window;
+import com.mojang.blaze3d.vertex.PoseStack;
import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.network.chat.Component;
+import net.minecraft.network.chat.TextComponent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -53,36 +54,36 @@
this.wasEdited = wasEdited;
int mainButtonWidth = hasDeleteButton ? 75 : 100;
- this.button = Button.builder(fieldName, onPress).size(mainButtonWidth, 20).pos(0, 0).build();
- this.deleteButton = deletePress != null ? Button.builder(Component.literal("X"), deletePress).size(20, 20).pos(0, 0).build() : null;
+ this.button = new Button(0, 0, mainButtonWidth, 20, fieldName, onPress);
+ this.deleteButton = deletePress != null ? new Button(0, 0, 20, 20, new TextComponent("X"), deletePress) : null;
this.displayName = displayName;
}
@Override
- public void render(GuiGraphics matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
+ public void render(PoseStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isHovered, float delta) {
Window window = Minecraft.getInstance().getWindow();
Component displayedFieldName = displayName;
if (Minecraft.getInstance().font.isBidirectional()) {
- matrices.drawString(Minecraft.getInstance().font, displayedFieldName.getVisualOrderText(), window.getGuiScaledWidth() - x - Minecraft.getInstance().font.width(displayedFieldName), y + 6, 16777215);
- this.button.setX(x);
+ drawString(matrices, Minecraft.getInstance().font, displayedFieldName.getVisualOrderText(), window.getGuiScaledWidth() - x - Minecraft.getInstance().font.width(displayedFieldName), y + 6, 16777215);
+ this.button.x = x;
if (hasDeleteButton) {
- this.deleteButton.setX(x + this.button.getWidth() + 4);
+ this.deleteButton.x = x + this.button.getWidth() + 4;
}
} else {
- matrices.drawString(Minecraft.getInstance().font, displayedFieldName.getVisualOrderText(), x, y + 6, this.getPreferredTextColor());
+ drawString(matrices, Minecraft.getInstance().font, displayedFieldName.getVisualOrderText(), x, y + 6, this.getPreferredTextColor());
if (hasDeleteButton) {
- this.button.setX(x + entryWidth - this.button.getWidth() - 24);
- this.deleteButton.setX(x + entryWidth - 20);
+ this.button.x = x + entryWidth - this.button.getWidth() - 24;
+ this.deleteButton.x = x + entryWidth - 20;
} else {
- this.button.setX(x + entryWidth - this.button.getWidth());
+ this.button.x = x + entryWidth - this.button.getWidth();
}
}
- button.setY(y + (entryHeight - 20) / 2);
+ button.y = y + (entryHeight - 20) / 2;
button.render(matrices, mouseX, mouseY, delta);
if (hasDeleteButton) {
- deleteButton.setY(y + (entryHeight - 20) / 2);
+ deleteButton.y = y + (entryHeight - 20) / 2;
deleteButton.render(matrices, mouseX, mouseY, delta);
}
}

View File

@@ -15,7 +15,7 @@
/**
* @author HypherionSA
@@ -22,19 +24,19 @@
@@ -23,19 +25,19 @@
}
@Override

View File

@@ -12,7 +12,7 @@
import net.minecraft.client.gui.components.events.AbstractContainerEventHandler;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.network.chat.Component;
@@ -34,7 +34,7 @@
@@ -35,7 +35,7 @@
@Getter
private List<String> langKeys = new ArrayList<>();

View File

@@ -15,7 +15,7 @@
/**
* @author HypherionSA
@@ -23,12 +23,12 @@
@@ -24,12 +24,12 @@
this.subConfig = subConfig;
this.screen = screen;

View File

@@ -10,7 +10,7 @@
import java.util.function.Function;
@@ -29,7 +29,7 @@
@@ -30,7 +30,7 @@
}
@Override

View File

@@ -8,7 +8,7 @@
import java.util.List;
import java.util.function.Function;
@@ -18,7 +19,7 @@
@@ -19,7 +20,7 @@
public ToggleButton(List<T> options, Function<T, Component> toComponent) {
this.options = options;
this.toComponent = toComponent;