Skip to content
Merged

Dev #191

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
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [26.1.2.4-beta]

### Added
* Added an API abstraction for keybind registration
* Specifically to handle the differences in how key modifiers are handled via NeoForge (builtin) and Fabric (via AMECS mod, maybe others in future)

### Fixed
* Fixed an issue with `EditStringConfigOverlay` causing `accepted` to be `false` on callbacks when value unchanged, even if Accept is pressed

## [26.1.2.3-beta]

### Fixed
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.ftb.mods.ftblibrary;

import com.mojang.brigadier.CommandDispatcher;
import dev.ftb.mods.ftblibrary.config.FTBLibraryClientConfig;
import dev.ftb.mods.ftblibrary.config.FTBLibraryServerConfig;
import dev.ftb.mods.ftblibrary.config.FTBLibraryStartupConfig;
Expand All @@ -15,7 +16,6 @@
import dev.ftb.mods.ftblibrary.util.ModUtils;
import dev.ftb.mods.ftblibrary.util.text.ExtendableTextColor;
import dev.ftb.mods.ftblibrary.util.text.RainbowTextColor;
import com.mojang.brigadier.CommandDispatcher;
import net.minecraft.commands.CommandBuildContext;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package dev.ftb.mods.ftblibrary;

import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.serialization.JsonOps;
import dev.ftb.mods.ftblibrary.config.FTBLibraryClientConfig;
import dev.ftb.mods.ftblibrary.config.FTBLibraryServerConfig;
import dev.ftb.mods.ftblibrary.nbtedit.NBTEditResponseHandlers;
Expand All @@ -11,11 +16,6 @@
import dev.ftb.mods.ftblibrary.platform.network.Server2PlayNetworking;
import dev.ftb.mods.ftblibrary.util.ModUtils;
import dev.ftb.mods.ftblibrary.util.RegistryHelper;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.serialization.JsonOps;
import net.minecraft.ChatFormatting;
import net.minecraft.commands.CommandBuildContext;
import net.minecraft.commands.CommandSourceStack;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package dev.ftb.mods.ftblibrary.client.config.editable;

import dev.ftb.mods.ftblibrary.client.config.ConfigCallback;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import dev.ftb.mods.ftblibrary.client.gui.widget.ColorSelectorPanel;
import dev.ftb.mods.ftblibrary.client.gui.widget.Widget;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import dev.ftb.mods.ftblibrary.icon.Color4I;
import dev.ftb.mods.ftblibrary.icon.Icon;
import net.minecraft.network.chat.Component;
import org.jspecify.annotations.Nullable;

public class EditableColor extends EditableConfigValue<Color4I> {
private boolean allowAlphaEdit = false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import dev.ftb.mods.ftblibrary.client.config.gui.resource.EntityFaceResource;
import dev.ftb.mods.ftblibrary.client.config.gui.resource.SelectEntityFaceScreen;
import dev.ftb.mods.ftblibrary.client.config.gui.resource.SelectableResource;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import dev.ftb.mods.ftblibrary.client.gui.theme.Theme;
import dev.ftb.mods.ftblibrary.client.gui.widget.Widget;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import dev.ftb.mods.ftblibrary.util.TooltipList;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
import dev.ftb.mods.ftblibrary.client.config.gui.resource.ImageResource;
import dev.ftb.mods.ftblibrary.client.config.gui.resource.SelectImageResourceScreen;
import dev.ftb.mods.ftblibrary.client.config.gui.resource.SelectableResource;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import dev.ftb.mods.ftblibrary.client.gui.theme.Theme;
import dev.ftb.mods.ftblibrary.client.gui.widget.Widget;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import dev.ftb.mods.ftblibrary.icon.IResourceIcon;
import dev.ftb.mods.ftblibrary.icon.Icon;
import dev.ftb.mods.ftblibrary.util.TooltipList;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import dev.ftb.mods.ftblibrary.client.config.ConfigCallback;
import dev.ftb.mods.ftblibrary.client.config.gui.resource.SelectItemStackScreen;
import dev.ftb.mods.ftblibrary.client.config.gui.resource.SelectableResource;
import dev.ftb.mods.ftblibrary.client.gui.widget.Widget;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import dev.ftb.mods.ftblibrary.client.gui.widget.Widget;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.ItemStack;
import org.apache.commons.lang3.Validate;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import dev.ftb.mods.ftblibrary.icon.Color4I;
import dev.ftb.mods.ftblibrary.util.StringUtils;
import net.minecraft.network.chat.Component;
import org.jspecify.annotations.Nullable;

public abstract class EditableNumber<T extends Number> extends EditableStringifiedConfig<T> {
public static final Color4I COLOR = Color4I.rgb(0xAA5AE8);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import dev.ftb.mods.ftblibrary.client.config.ConfigCallback;
import dev.ftb.mods.ftblibrary.client.config.gui.EditStringConfigOverlay;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import dev.ftb.mods.ftblibrary.client.gui.widget.BaseScreen;
import dev.ftb.mods.ftblibrary.client.gui.widget.Widget;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import net.minecraft.network.chat.Component;
import org.jspecify.annotations.Nullable;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package dev.ftb.mods.ftblibrary.client.config.editable;

import dev.ftb.mods.ftblibrary.client.config.ConfigCallback;
import dev.ftb.mods.ftblibrary.client.gui.widget.Widget;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import dev.ftb.mods.ftblibrary.client.gui.widget.Widget;

/**
* A config value with some well-defined options, which can be cycled through.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.ftb.mods.ftblibrary.client.config.gui;

import com.mojang.blaze3d.platform.InputConstants;
import dev.ftb.mods.ftblibrary.client.config.ConfigCallback;
import dev.ftb.mods.ftblibrary.client.config.editable.EditableConfigValue;
import dev.ftb.mods.ftblibrary.client.config.editable.EditableList;
Expand All @@ -16,7 +17,6 @@
import dev.ftb.mods.ftblibrary.icon.Color4I;
import dev.ftb.mods.ftblibrary.icon.Icons;
import dev.ftb.mods.ftblibrary.util.TooltipList;
import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.network.chat.Component;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.ftb.mods.ftblibrary.client.config.gui;

import com.mojang.blaze3d.platform.InputConstants;
import dev.ftb.mods.ftblibrary.client.config.EditableConfigGroup;
import dev.ftb.mods.ftblibrary.client.config.editable.EditableConfigValue;
import dev.ftb.mods.ftblibrary.client.gui.input.Key;
Expand All @@ -12,7 +13,6 @@
import dev.ftb.mods.ftblibrary.icon.Color4I;
import dev.ftb.mods.ftblibrary.icon.Icons;
import dev.ftb.mods.ftblibrary.util.TooltipList;
import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.client.resources.language.I18n;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,8 @@ public void drawBackground(GuiGraphicsExtractor graphics, Theme theme, int x, in

protected void onAccepted(Button btn, MouseButton mb) {
if (textBox.isTextValid()) {
callback.save(config.updateValue(currentValue));
config.updateValue(currentValue);
callback.save(true);
getGui().popModalPanel();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import dev.ftb.mods.ftblibrary.client.util.TextureAtlasSpriteRef;
import dev.ftb.mods.ftblibrary.icon.Color4I;
import dev.ftb.mods.ftblibrary.icon.Icon;
import dev.ftb.mods.ftblibrary.icon.TextureAtlasSpriteIcon;
import dev.ftb.mods.ftblibrary.platform.fluid.FluidStack;
import net.minecraft.core.component.DataComponentMap;
import net.minecraft.core.component.DataComponentPatch;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.ftb.mods.ftblibrary.client.gui.input;

import dev.ftb.mods.ftblibrary.platform.Platform;
import com.mojang.blaze3d.platform.InputConstants;
import dev.ftb.mods.ftblibrary.platform.client.PlatformClient;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraft.client.input.KeyEvent;
Expand All @@ -23,7 +23,7 @@ public boolean esc() {
public boolean escOrInventory() {
// arch expect
//noinspection ConstantValue
return esc() || matchesWithoutConflicts(Minecraft.getInstance().options.keyInventory, getInputMapping());
return esc() || matches(Minecraft.getInstance().options.keyInventory);
}

public boolean enter() {
Expand Down Expand Up @@ -58,7 +58,7 @@ public KeyModifiers modifiers() {
return new KeyModifiers(event.modifiers());
}

private static boolean matchesWithoutConflicts(KeyMapping keyBinding, InputConstants.Key keyCode) {
return Platform.get().misc().matchesWithoutConflicts(keyBinding, keyCode);
public boolean matches(KeyMapping keyMapping) {
return PlatformClient.get().input().matches(keyMapping, event);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.ftb.mods.ftblibrary.client.gui.screens;

import com.mojang.blaze3d.platform.InputConstants;
import dev.ftb.mods.ftblibrary.client.gui.input.Key;
import dev.ftb.mods.ftblibrary.client.gui.input.MouseButton;
import dev.ftb.mods.ftblibrary.client.gui.theme.Theme;
Expand All @@ -11,7 +12,6 @@
import dev.ftb.mods.ftblibrary.icon.Color4I;
import dev.ftb.mods.ftblibrary.icon.Icons;
import dev.ftb.mods.ftblibrary.util.Lazy;
import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.network.chat.Component;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package dev.ftb.mods.ftblibrary.client.gui.screens;

import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.datafixers.util.Pair;
import dev.ftb.mods.ftblibrary.client.gui.input.Key;
import dev.ftb.mods.ftblibrary.client.gui.theme.Theme;
import dev.ftb.mods.ftblibrary.client.gui.theme.ThemeManager;
import dev.ftb.mods.ftblibrary.client.gui.widget.*;
import dev.ftb.mods.ftblibrary.client.icon.IconHelper;
import dev.ftb.mods.ftblibrary.icon.Color4I;
import dev.ftb.mods.ftblibrary.icon.Icons;
import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.network.chat.Component;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
import dev.ftb.mods.ftblibrary.client.gui.widget.*;
import dev.ftb.mods.ftblibrary.icon.Color4I;
import dev.ftb.mods.ftblibrary.icon.Icons;
import dev.ftb.mods.ftblibrary.platform.client.PlatformClient;
import net.minecraft.ChatFormatting;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.gui.GuiGraphicsExtractor;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.Component;
Expand All @@ -24,10 +26,16 @@ public class KeyReferenceScreen extends BaseScreen {
private final Panel textPanel;
private final PanelScrollBar scrollBar;
private final SimpleTextButton closeButton;
private final String[] translationKeys;
private final List<Pair<Component, Component>> lines;
private int widestLeft = 0;
private int widestOverall = 0;

public KeyReferenceScreen(String... translationKeys) {
this.translationKeys = translationKeys;
lines = buildText(translationKeys);
for (var line : lines) {
widestLeft = Math.max(widestLeft, getGui().getTheme().getStringWidth(line.getLeft()));
widestOverall = Math.max(widestOverall, widestLeft + getGui().getTheme().getStringWidth(line.getRight()));
}

textPanel = new TextPanel(this);

Expand All @@ -40,7 +48,7 @@ public void onClicked(MouseButton button) {
scrollBar = new PanelScrollBar(this, textPanel);
}

private static List<Pair<Component, Component>> buildText(String... translationKeys) {
private List<Pair<Component, Component>> buildText(String... translationKeys) {
List<Pair<Component, Component>> res = new ArrayList<>();
for (String translationKey : translationKeys) {
for (String line : I18n.get(translationKey).split("\\n")) {
Expand All @@ -50,17 +58,39 @@ private static List<Pair<Component, Component>> buildText(String... translationK
case 1 ->
res.add(Pair.of(Component.literal(parts[0]).withStyle(ChatFormatting.YELLOW, ChatFormatting.UNDERLINE), Component.empty()));
default ->
res.add(Pair.of(Component.literal(parts[0]), Component.literal(parts[1]).withStyle(ChatFormatting.GRAY)));
res.add(substituteKeyMapping(parts[0], parts[1]));
}
}
res.add(Pair.of(Component.empty(), Component.empty()));
}
return res;
}

private static Pair<Component,Component> substituteKeyMapping(String part0, String part1) {
int s = part0.indexOf('{');
int e = part0.indexOf('}');
if (s >= 0 && e >= 0 && e > s + 1) {
String key = part0.substring(s + 1, e);
var keyMapping = KeyMapping.get(key);
if (keyMapping != null) {
var c0 = Component.literal(part0.substring(0, s))
.append(PlatformClient.get().input().getKeyMappingDisplayName(keyMapping))
.append(part0.substring(e + 1));
Component c1 = part1.isEmpty() ? Component.translatable(keyMapping.getName()) : Component.literal(part1);
return Pair.of(c0, c1.copy().withStyle(ChatFormatting.GRAY));
}
}
return Pair.of(Component.literal(part0), Component.literal(part1).withStyle(ChatFormatting.GRAY));
}

@Override
public boolean onInit() {
return setSizeProportional(0.75f, 0.8f);
boolean ok = setSizeProportional(0.75f, 0.8f);

setWidth(Math.min(getWidth(), widestOverall + GUTTER_SIZE * 3 + 10));
setHeight(Math.min(getHeight(), (getGui().getTheme().getFontHeight() + 2) * lines.size() + 10));

return ok;
}

@Override
Expand Down Expand Up @@ -104,19 +134,14 @@ protected void drawTextBackground(GuiGraphicsExtractor graphics, Theme theme, in
theme.drawPanelBackground(graphics, x, y, w, h);
}

private static class TwoColumnList extends Widget {
private final int widestL;
private class TwoColumnList extends Widget {
private final List<Pair<Component, Component>> data;
private final List<Pair<Component, FormattedCharSequence>> reflowed = new ArrayList<>();

public TwoColumnList(Panel p, List<Pair<Component, Component>> data) {
super(p);

this.data = data;
this.widestL = data.stream()
.map(e -> getGui().getTheme().getStringWidth(e.getLeft()))
.max(Integer::compareTo)
.orElse(0);
}

@Override
Expand All @@ -137,7 +162,7 @@ private void reflowText() {
reflowed.add(Pair.of(entry.getLeft(), FormattedCharSequence.EMPTY));
h += theme.getFontHeight() + 3;
} else {
var l = theme.getFont().split(entry.getRight(), maxWidth - 10 - widestL);
var l = theme.getFont().split(entry.getRight(), maxWidth - 10 - widestLeft);
if (!l.isEmpty()) {
reflowed.add(Pair.of(entry.getLeft(), l.getFirst()));
for (int i = 1; i < l.size(); i++) {
Expand All @@ -158,10 +183,10 @@ public void draw(GuiGraphicsExtractor graphics, Theme theme, int x, int y, int w
for (var entry : reflowed) {
boolean header = entry.getRight() == FormattedCharSequence.EMPTY;
int leftWidth = theme.getStringWidth(entry.getLeft());
int xOff = header ? (width - leftWidth) / 2 : widestL - leftWidth - 2;
int xOff = header ? (width - leftWidth) / 2 : widestLeft - leftWidth - 2;
theme.drawString(graphics, entry.getLeft(), x + xOff, yPos);
if (!header) {
theme.drawString(graphics, entry.getRight(), x + widestL + 10, yPos);
theme.drawString(graphics, entry.getRight(), x + widestLeft + 10, yPos);
}
yPos += theme.getFontHeight() + (header ? 3 : 1);
}
Expand All @@ -174,7 +199,7 @@ private class TextPanel extends Panel {
public TextPanel(Panel panel) {
super(panel);

textWidget = new TwoColumnList(this, buildText(translationKeys));
textWidget = new TwoColumnList(this, lines);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package dev.ftb.mods.ftblibrary.client.gui.widget;

import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.platform.Window;
import dev.ftb.mods.ftblibrary.client.gui.CursorType;
import dev.ftb.mods.ftblibrary.client.gui.WidgetType;
import dev.ftb.mods.ftblibrary.client.gui.input.Key;
Expand All @@ -11,8 +13,6 @@
import dev.ftb.mods.ftblibrary.client.util.ClientUtils;
import dev.ftb.mods.ftblibrary.icon.Color4I;
import dev.ftb.mods.ftblibrary.util.TooltipList;
import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.platform.Window;
import it.unimi.dsi.fastutil.booleans.BooleanConsumer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphicsExtractor;
Expand Down
Loading
Loading