Merge branch 'architectury-1.21.4' into architectury-1.21.4

This commit is contained in:
Martin Prokoph
2025-05-12 22:46:51 +02:00
committed by GitHub
4 changed files with 136 additions and 16 deletions

View File

@@ -0,0 +1,96 @@
package eu.midnightdust.fabric.example;
import com.google.common.collect.Lists;
import eu.midnightdust.lib.config.MidnightConfig;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.tooltip.Tooltip;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.gui.widget.TextIconButtonWidget;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.glfw.GLFW;
/*
Pre-made additional (niche) functionality that is not included in MidnightLib to keep the file size small.
Feel free to copy the parts you need :)
*/
public class MidnightLibExtras {
public static class KeybindButton extends ButtonWidget {
public static ButtonWidget focusedButton;
public static void add(KeyBinding binding, MidnightConfig.MidnightConfigListWidget list, MidnightConfig.MidnightConfigScreen screen) {
KeybindButton editButton = new KeybindButton(screen.width - 185, 0, 150, 20, binding);
TextIconButtonWidget resetButton = TextIconButtonWidget.builder(Text.translatable("controls.reset"), (button -> {
binding.setBoundKey(binding.getDefaultKey());
screen.updateList();
}), true).texture(Identifier.of("midnightlib","icon/reset"), 12, 12).dimension(20, 20).build();
resetButton.setPosition(screen.width - 205 + 150 + 25, 0);
editButton.resetButton = resetButton;
editButton.updateMessage(false);
MidnightConfig.EntryInfo info = new MidnightConfig.EntryInfo(null, screen.modid);
list.addButton(Lists.newArrayList(editButton, resetButton), Text.translatable(binding.getTranslationKey()), info);
}
private final KeyBinding binding;
private @Nullable ClickableWidget resetButton;
public KeybindButton(int x, int y, int width, int height, KeyBinding binding) {
super(x, y, width, height, binding.getBoundKeyLocalizedText(), (button) -> {
((KeybindButton) button).updateMessage(true);
focusedButton = button;
}, (textSupplier) -> binding.isUnbound() ? Text.translatable("narrator.controls.unbound", binding.getTranslationKey()) : Text.translatable("narrator.controls.bound", binding.getTranslationKey(), textSupplier.get()));
this.binding = binding;
updateMessage(false);
}
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
if (focusedButton == this) {
if (keyCode == GLFW.GLFW_KEY_ESCAPE) {
this.binding.setBoundKey(InputUtil.UNKNOWN_KEY);
} else {
this.binding.setBoundKey(InputUtil.fromKeyCode(keyCode, scanCode));
}
updateMessage(false);
focusedButton = null;
return true;
}
return super.keyPressed(keyCode, scanCode, modifiers);
}
public void updateMessage(boolean focused) {
boolean hasConflicts = false;
MutableText conflictingBindings = Text.empty();
if (focused) this.setMessage(Text.literal("> ").append(this.binding.getBoundKeyLocalizedText().copy().formatted(Formatting.WHITE, Formatting.UNDERLINE)).append(" <").formatted(Formatting.YELLOW));
else {
this.setMessage(this.binding.getBoundKeyLocalizedText());
if (!this.binding.isUnbound()) {
for(KeyBinding keyBinding : MinecraftClient.getInstance().options.allKeys) {
if (keyBinding != this.binding && this.binding.equals(keyBinding)) {
if (hasConflicts) conflictingBindings.append(", ");
hasConflicts = true;
conflictingBindings.append(Text.translatable(keyBinding.getTranslationKey()));
}
}
}
}
if (this.resetButton != null) this.resetButton.active = !this.binding.isDefault();
if (hasConflicts) {
this.setMessage(Text.literal("[ ").append(this.getMessage().copy().formatted(Formatting.WHITE)).append(" ]").formatted(Formatting.RED));
this.setTooltip(Tooltip.of(Text.translatable("controls.keybinds.duplicateKeybinds", conflictingBindings)));
} else {
this.setTooltip(null);
}
}
}
}

View File

@@ -1,16 +1,19 @@
package eu.midnightdust.fabric.example.config;
import com.google.common.collect.Lists;
import eu.midnightdust.fabric.example.MidnightLibExtras;
import eu.midnightdust.lib.config.MidnightConfig;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.Identifier;
import net.minecraft.util.TranslatableOption;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/** Every option in a MidnightConfig class has to be public and static, so we can access it from other classes.
* The config class also has to extend MidnightConfig*/
@@ -22,6 +25,7 @@ public class MidnightConfigExample extends MidnightConfig {
public static final String LISTS = "lists";
public static final String FILES = "files";
public static final String CONDITIONS = "conditions";
public static final String EXTRAS = "extras";
@Comment(category = TEXT) public static Comment text1; // Comments are rendered like an option without a button and are excluded from the config file
@Comment(category = TEXT, centered = true) public static Comment text2; // Centered comments are the same as normal ones - just centered!
@@ -150,4 +154,16 @@ public class MidnightConfigExample extends MidnightConfig {
@Comment(category = CONDITIONS, name="You disabled MidnightLib's config screen list. Why? :(", centered = true) public static Comment why;
public static int imposter = 16777215; // - Entries without an @Entry or @Comment annotation are ignored
@Condition(requiredModId = "thismoddoesnotexist")
@Comment(category = EXTRAS) public static Comment iAmJustADummy; // We only have this to initialize an empty tab for the keybinds below
@Override
public void onTabInit(String tabName, MidnightConfigListWidget list, MidnightConfigScreen screen) {
if (Objects.equals(tabName, EXTRAS)) {
MidnightLibExtras.KeybindButton.add(MinecraftClient.getInstance().options.advancementsKey, list, screen);
MidnightLibExtras.KeybindButton.add(MinecraftClient.getInstance().options.dropKey, list, screen);
}
}
}

View File

@@ -25,5 +25,6 @@
"modid.midnightconfig.category.lists": "Lists",
"modid.midnightconfig.category.files": "Files",
"modid.midnightconfig.category.conditions": "Quiz",
"modid.midnightconfig.category.extras": "Extras",
"modid.midnightconfig.category.multiConditions": "Multi-Conditions"
}