mirror of
https://github.com/TeamMidnightDust/MidnightLib.git
synced 2025-12-16 09:15:10 +01:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eaa2b1543e | ||
|
|
c751859f90 | ||
|
|
0cb16cbf3f |
63
MidnightConfigExample.java
Normal file
63
MidnightConfigExample.java
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
package eu.midnightdust.core.config;
|
||||||
|
|
||||||
|
import eu.midnightdust.lib.config.MidnightConfig;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/** MidnightConfig documentation & examples:
|
||||||
|
* Thanks for choosing MidnightConfig - the fancy, tiny and lightweight config library.
|
||||||
|
* If you want to use the lib in your mod, here are some examples and hints:
|
||||||
|
* 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*/
|
||||||
|
|
||||||
|
public class MidnightConfigExample extends MidnightConfig {
|
||||||
|
|
||||||
|
@Comment public static Comment text1; // Comments are rendered like an option without a button and are excluded from the config file
|
||||||
|
@Comment(centered = true) public static Comment text2; // Centered comments are the same as normal ones - just centered!
|
||||||
|
@Entry public static int fabric = 16777215; // Example for an int option
|
||||||
|
@Entry public static double world = 1.4D; // Example for a double option
|
||||||
|
@Entry public static boolean showInfo = true; // Example for a boolean option
|
||||||
|
@Entry public static String name = "Hello World!"; // Example for a string option
|
||||||
|
@Entry public static TestEnum testEnum = TestEnum.FABRIC; // Example for an enum option
|
||||||
|
public enum TestEnum { // Enums allow the user to cycle through predefined options
|
||||||
|
QUILT, FABRIC, FORGE
|
||||||
|
}
|
||||||
|
@Entry(min=69,max=420) public static int hello = 420; // - The entered number has to be larger than 69 and smaller than 420
|
||||||
|
@Entry(width = 7, min = 7, isColor = true, name = "I am a color!") public static String titleColor = "#ffffff"; // The isColor property adds a preview box for a hexadecimal color
|
||||||
|
@Entry(name = "I am an array list!") public static List<String> arrayList = List.of("String1", "String2"); // Array String Lists are also supported
|
||||||
|
@Entry(name = "I am an int slider.",isSlider = true, min = 0, max = 100) public static int intSlider = 35; // Int fields can also be displayed as a Slider
|
||||||
|
@Entry(name = "I am a float slider!", isSlider = true, min = 0f, max = 1f, precision = 1000) public static float floatSlider = 0.24f; // And so can floats! Precision defines the amount of decimal places
|
||||||
|
// The name field can be used to specify a custom translation string or plain text
|
||||||
|
|
||||||
|
public static int imposter = 16777215; // - Entries without an @Entry or @Comment annotation are ignored
|
||||||
|
|
||||||
|
/*
|
||||||
|
The .json language file for your config class could look similar to this:
|
||||||
|
{
|
||||||
|
"modid.midnightconfig.title":"I am a title", // "*.midnightconfig.title" defines the title of the screen
|
||||||
|
"modid.midnightconfig.text1":"I am a comment *u*", // Translation for the comment "text1" defined in the example config
|
||||||
|
"modid.midnightconfig.text2":"I am a centered comment (╯°□°)╯︵ ┻━┻",
|
||||||
|
"modid.midnightconfig.name":"I am a string!", // Translation for the field "name" defined in the example config
|
||||||
|
"modid.midnightconfig.name.tooltip":"I am a tooltip uwu \nI am a new line",
|
||||||
|
// When hovering over the option "showInfo",
|
||||||
|
// this text will appear as a tooltip.
|
||||||
|
// "\n" inserts a line break.
|
||||||
|
"modid.midnightconfig.fabric":"I am an int",
|
||||||
|
"modid.midnightconfig.world":"I am a double",
|
||||||
|
"modid.midnightconfig.showInfo":"I am a boolean",
|
||||||
|
"modid.midnightconfig.hello":"I am a limited int!",
|
||||||
|
"modid.midnightconfig.testEnum":"I am an enum!",
|
||||||
|
"modid.midnightconfig.enum.TestEnum.FORGE":"Slow",
|
||||||
|
"modid.midnightconfig.enum.TestEnum.FABRIC":"Fancy",
|
||||||
|
"modid.midnightconfig.enum.TestEnum.QUILT":"Fabulous"
|
||||||
|
}
|
||||||
|
To initialize the config you have to call "MidnightConfig.init("modid", MidnightConfigExample.class)" in your ModInitializer
|
||||||
|
To get an instance of the config screen you have to call "MidnightConfig.getScreen(parent, "modid");"
|
||||||
|
|
||||||
|
If you don't use the whole library and therefore not the automatic ModMenu integration, the code in your ModMenu integration class would look something like this:
|
||||||
|
@Override
|
||||||
|
public ConfigScreenFactory<?> getModConfigScreenFactory() {
|
||||||
|
return parent -> MidnightConfig.getScreen(parent, "modid");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
@@ -15,7 +15,7 @@ subprojects {
|
|||||||
// The following line declares the mojmap mappings, you may use other mappings as well
|
// The following line declares the mojmap mappings, you may use other mappings as well
|
||||||
//mappings loom.officialMojangMappings()
|
//mappings loom.officialMojangMappings()
|
||||||
// The following line declares the yarn mappings you may select this one as well.
|
// The following line declares the yarn mappings you may select this one as well.
|
||||||
mappings "net.fabricmc:yarn:1.19.2+build.3:v2"
|
mappings "net.fabricmc:yarn:1.19.3-rc1+build.2:v2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package eu.midnightdust.core.screen;
|
package eu.midnightdust.core.screen;
|
||||||
|
|
||||||
import eu.midnightdust.core.MidnightLibClient;
|
import eu.midnightdust.core.MidnightLibClient;
|
||||||
import eu.midnightdust.core.config.MidnightLibConfig;
|
|
||||||
import eu.midnightdust.lib.config.MidnightConfig;
|
import eu.midnightdust.lib.config.MidnightConfig;
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
@@ -28,7 +27,7 @@ public class MidnightConfigOverviewScreen extends Screen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
this.addDrawableChild(new ButtonWidget(this.width / 2 - 100, this.height - 28, 200, 20, ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).setScreen(parent)));
|
this.addDrawableChild(ButtonWidget.builder(ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).setScreen(parent)).dimensions(this.width / 2 - 100, this.height - 28, 200, 20).build());
|
||||||
|
|
||||||
this.list = new MidnightOverviewListWidget(this.client, this.width, this.height, 32, this.height - 32, 25);
|
this.list = new MidnightOverviewListWidget(this.client, this.width, this.height, 32, this.height - 32, 25);
|
||||||
if (this.client != null && this.client.world != null) this.list.setRenderBackground(false);
|
if (this.client != null && this.client.world != null) this.list.setRenderBackground(false);
|
||||||
@@ -37,8 +36,8 @@ public class MidnightConfigOverviewScreen extends Screen {
|
|||||||
Collections.sort(sortedMods);
|
Collections.sort(sortedMods);
|
||||||
sortedMods.forEach((modid) -> {
|
sortedMods.forEach((modid) -> {
|
||||||
if (!MidnightLibClient.hiddenMods.contains(modid)) {
|
if (!MidnightLibClient.hiddenMods.contains(modid)) {
|
||||||
list.addButton(new ButtonWidget(this.width / 2 - 100, this.height - 28, 200, 20, Text.translatable(modid +".midnightconfig.title"), (button) ->
|
list.addButton(ButtonWidget.builder(Text.translatable(modid +".midnightconfig.title"), (button) ->
|
||||||
Objects.requireNonNull(client).setScreen(MidnightConfig.getScreen(this,modid))));
|
Objects.requireNonNull(client).setScreen(MidnightConfig.getScreen(this,modid))).dimensions(this.width / 2 - 100, this.height - 28, 200, 20).build());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
super.init();
|
super.init();
|
||||||
@@ -78,7 +77,7 @@ public class MidnightConfigOverviewScreen extends Screen {
|
|||||||
}
|
}
|
||||||
public static OverviewButtonEntry create(ClickableWidget button) {return new OverviewButtonEntry(button);}
|
public static OverviewButtonEntry create(ClickableWidget button) {return new OverviewButtonEntry(button);}
|
||||||
public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
|
public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
|
||||||
button.y = y;
|
button.setY(y);
|
||||||
button.render(matrices, mouseX, mouseY, tickDelta);
|
button.render(matrices, mouseX, mouseY, tickDelta);
|
||||||
}
|
}
|
||||||
public List<? extends Element> children() {return buttonList;}
|
public List<? extends Element> children() {return buttonList;}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import net.minecraft.client.gui.DrawableHelper;
|
|||||||
import net.minecraft.client.gui.Element;
|
import net.minecraft.client.gui.Element;
|
||||||
import net.minecraft.client.gui.Selectable;
|
import net.minecraft.client.gui.Selectable;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.client.gui.tooltip.Tooltip;
|
||||||
import net.minecraft.client.gui.widget.*;
|
import net.minecraft.client.gui.widget.*;
|
||||||
import net.minecraft.client.resource.language.I18n;
|
import net.minecraft.client.resource.language.I18n;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
@@ -37,7 +38,7 @@ import java.util.function.Function;
|
|||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/** MidnightConfig v2.3.0 by TeamMidnightDust & Motschen
|
/** MidnightConfig v2.4.0 by TeamMidnightDust & Motschen
|
||||||
* Single class config library - feel free to copy!
|
* Single class config library - feel free to copy!
|
||||||
|
|
||||||
* Based on https://github.com/Minenash/TinyConfig
|
* Based on https://github.com/Minenash/TinyConfig
|
||||||
@@ -230,17 +231,20 @@ public abstract class MidnightConfig {
|
|||||||
} catch (IllegalAccessException ignored) {}
|
} catch (IllegalAccessException ignored) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public Tooltip getTooltip(EntryInfo info) {
|
||||||
|
return Tooltip.of(I18n.hasTranslation(translationPrefix+info.field.getName()+".tooltip") ? Text.translatable(translationPrefix+info.field.getName()+".tooltip") : Text.empty());
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
super.init();
|
super.init();
|
||||||
if (!reload) loadValues();
|
if (!reload) loadValues();
|
||||||
|
|
||||||
this.addDrawableChild(new ButtonWidget(this.width / 2 - 154, this.height - 28, 150, 20, ScreenTexts.CANCEL, button -> {
|
this.addDrawableChild(ButtonWidget.builder(ScreenTexts.CANCEL, button -> {
|
||||||
loadValues();
|
loadValues();
|
||||||
Objects.requireNonNull(client).setScreen(parent);
|
Objects.requireNonNull(client).setScreen(parent);
|
||||||
}));
|
}).dimensions(this.width / 2 - 154, this.height - 28, 150, 20).build());
|
||||||
|
|
||||||
ButtonWidget done = this.addDrawableChild(new ButtonWidget(this.width / 2 + 4, this.height - 28, 150, 20, ScreenTexts.DONE, (button) -> {
|
ButtonWidget done = this.addDrawableChild(ButtonWidget.builder(ScreenTexts.DONE, (button) -> {
|
||||||
for (EntryInfo info : entries)
|
for (EntryInfo info : entries)
|
||||||
if (info.id.equals(modid)) {
|
if (info.id.equals(modid)) {
|
||||||
try {
|
try {
|
||||||
@@ -249,7 +253,7 @@ public abstract class MidnightConfig {
|
|||||||
}
|
}
|
||||||
write(modid);
|
write(modid);
|
||||||
Objects.requireNonNull(client).setScreen(parent);
|
Objects.requireNonNull(client).setScreen(parent);
|
||||||
}));
|
}).dimensions(this.width / 2 + 4, this.height - 28, 150, 20).build());
|
||||||
|
|
||||||
this.list = new MidnightConfigListWidget(this.client, this.width, this.height, 32, this.height - 32, 25);
|
this.list = new MidnightConfigListWidget(this.client, this.width, this.height, 32, this.height - 32, 25);
|
||||||
if (this.client != null && this.client.world != null) this.list.setRenderBackground(false);
|
if (this.client != null && this.client.world != null) this.list.setRenderBackground(false);
|
||||||
@@ -257,7 +261,7 @@ public abstract class MidnightConfig {
|
|||||||
for (EntryInfo info : entries) {
|
for (EntryInfo info : entries) {
|
||||||
if (info.id.equals(modid)) {
|
if (info.id.equals(modid)) {
|
||||||
Text name = Objects.requireNonNullElseGet(info.name, () -> Text.translatable(translationPrefix + info.field.getName()));
|
Text name = Objects.requireNonNullElseGet(info.name, () -> Text.translatable(translationPrefix + info.field.getName()));
|
||||||
ButtonWidget resetButton = new ButtonWidget(width - 205, 0, 40, 20, Text.literal("Reset").formatted(Formatting.RED), (button -> {
|
ButtonWidget resetButton = ButtonWidget.builder(Text.literal("Reset").formatted(Formatting.RED), (button -> {
|
||||||
info.value = info.defaultValue;
|
info.value = info.defaultValue;
|
||||||
info.tempValue = info.defaultValue.toString();
|
info.tempValue = info.defaultValue.toString();
|
||||||
info.index = 0;
|
info.index = 0;
|
||||||
@@ -265,12 +269,12 @@ public abstract class MidnightConfig {
|
|||||||
this.reload = true;
|
this.reload = true;
|
||||||
Objects.requireNonNull(client).setScreen(this);
|
Objects.requireNonNull(client).setScreen(this);
|
||||||
list.setScrollAmount(scrollAmount);
|
list.setScrollAmount(scrollAmount);
|
||||||
}));
|
})).dimensions(width - 205, 0, 40, 20).build();
|
||||||
|
|
||||||
if (info.widget instanceof Map.Entry) {
|
if (info.widget instanceof Map.Entry) {
|
||||||
Map.Entry<ButtonWidget.PressAction, Function<Object, Text>> widget = (Map.Entry<ButtonWidget.PressAction, Function<Object, Text>>) info.widget;
|
Map.Entry<ButtonWidget.PressAction, Function<Object, Text>> widget = (Map.Entry<ButtonWidget.PressAction, Function<Object, Text>>) info.widget;
|
||||||
if (info.field.getType().isEnum()) widget.setValue(value -> Text.translatable(translationPrefix + "enum." + info.field.getType().getSimpleName() + "." + info.value.toString()));
|
if (info.field.getType().isEnum()) widget.setValue(value -> Text.translatable(translationPrefix + "enum." + info.field.getType().getSimpleName() + "." + info.value.toString()));
|
||||||
this.list.addButton(List.of(new ButtonWidget(width - 160, 0,150, 20, widget.getValue().apply(info.value), widget.getKey()),resetButton), name, info);
|
this.list.addButton(List.of(ButtonWidget.builder(widget.getValue().apply(info.value), widget.getKey()).dimensions(width - 160, 0,150, 20).tooltip(getTooltip(info)).build(),resetButton), name, info);
|
||||||
} else if (info.field.getType() == List.class) {
|
} else if (info.field.getType() == List.class) {
|
||||||
if (!reload) info.index = 0;
|
if (!reload) info.index = 0;
|
||||||
TextFieldWidget widget = new TextFieldWidget(textRenderer, width - 160, 0, 150, 20, Text.empty());
|
TextFieldWidget widget = new TextFieldWidget(textRenderer, width - 160, 0, 150, 20, Text.empty());
|
||||||
@@ -280,7 +284,7 @@ public abstract class MidnightConfig {
|
|||||||
widget.setTextPredicate(processor);
|
widget.setTextPredicate(processor);
|
||||||
resetButton.setWidth(20);
|
resetButton.setWidth(20);
|
||||||
resetButton.setMessage(Text.literal("R").formatted(Formatting.RED));
|
resetButton.setMessage(Text.literal("R").formatted(Formatting.RED));
|
||||||
ButtonWidget cycleButton = new ButtonWidget(width - 185, 0, 20, 20, Text.literal(String.valueOf(info.index)).formatted(Formatting.GOLD), (button -> {
|
ButtonWidget cycleButton = ButtonWidget.builder(Text.literal(String.valueOf(info.index)).formatted(Formatting.GOLD), (button -> {
|
||||||
((List<String>)info.value).remove("");
|
((List<String>)info.value).remove("");
|
||||||
double scrollAmount = list.getScrollAmount();
|
double scrollAmount = list.getScrollAmount();
|
||||||
this.reload = true;
|
this.reload = true;
|
||||||
@@ -288,7 +292,8 @@ public abstract class MidnightConfig {
|
|||||||
if (info.index > ((List<String>)info.value).size()) info.index = 0;
|
if (info.index > ((List<String>)info.value).size()) info.index = 0;
|
||||||
Objects.requireNonNull(client).setScreen(this);
|
Objects.requireNonNull(client).setScreen(this);
|
||||||
list.setScrollAmount(scrollAmount);
|
list.setScrollAmount(scrollAmount);
|
||||||
}));
|
})).dimensions(width - 185, 0, 20, 20).build();
|
||||||
|
widget.setTooltip(getTooltip(info));
|
||||||
this.list.addButton(List.of(widget, resetButton, cycleButton), name, info);
|
this.list.addButton(List.of(widget, resetButton, cycleButton), name, info);
|
||||||
} else if (info.widget != null) {
|
} else if (info.widget != null) {
|
||||||
ClickableWidget widget;
|
ClickableWidget widget;
|
||||||
@@ -301,10 +306,11 @@ public abstract class MidnightConfig {
|
|||||||
Predicate<String> processor = ((BiFunction<TextFieldWidget, ButtonWidget, Predicate<String>>) info.widget).apply(textField, done);
|
Predicate<String> processor = ((BiFunction<TextFieldWidget, ButtonWidget, Predicate<String>>) info.widget).apply(textField, done);
|
||||||
textField.setTextPredicate(processor);
|
textField.setTextPredicate(processor);
|
||||||
}
|
}
|
||||||
|
widget.setTooltip(getTooltip(info));
|
||||||
if (e.isColor()) {
|
if (e.isColor()) {
|
||||||
resetButton.setWidth(20);
|
resetButton.setWidth(20);
|
||||||
resetButton.setMessage(Text.literal("R").formatted(Formatting.RED));
|
resetButton.setMessage(Text.literal("R").formatted(Formatting.RED));
|
||||||
ButtonWidget colorButton = new ButtonWidget(width - 185, 0, 20, 20, Text.literal("⬛"), (button -> {}));
|
ButtonWidget colorButton = ButtonWidget.builder(Text.literal("⬛"), (button -> {})).dimensions(width - 185, 0, 20, 20).build();
|
||||||
try {colorButton.setMessage(Text.literal("⬛").setStyle(Style.EMPTY.withColor(Color.decode(info.tempValue).getRGB())));} catch (Exception ignored) {}
|
try {colorButton.setMessage(Text.literal("⬛").setStyle(Style.EMPTY.withColor(Color.decode(info.tempValue).getRGB())));} catch (Exception ignored) {}
|
||||||
info.colorButton = colorButton;
|
info.colorButton = colorButton;
|
||||||
colorButton.active = false;
|
colorButton.active = false;
|
||||||
@@ -324,25 +330,6 @@ public abstract class MidnightConfig {
|
|||||||
this.renderBackground(matrices);
|
this.renderBackground(matrices);
|
||||||
this.list.render(matrices, mouseX, mouseY, delta);
|
this.list.render(matrices, mouseX, mouseY, delta);
|
||||||
drawCenteredText(matrices, textRenderer, title, width / 2, 15, 0xFFFFFF);
|
drawCenteredText(matrices, textRenderer, title, width / 2, 15, 0xFFFFFF);
|
||||||
|
|
||||||
for (EntryInfo info : entries) {
|
|
||||||
if (info.id.equals(modid)) {
|
|
||||||
if (list.getHoveredButton(mouseX,mouseY).isPresent()) {
|
|
||||||
ClickableWidget buttonWidget = list.getHoveredButton(mouseX,mouseY).get();
|
|
||||||
Text text = ButtonEntry.buttonsWithText.get(buttonWidget);
|
|
||||||
Text name = Text.translatable(this.translationPrefix + info.field.getName());
|
|
||||||
String key = translationPrefix + info.field.getName() + ".tooltip";
|
|
||||||
|
|
||||||
if (info.error != null && text.equals(name)) renderTooltip(matrices, info.error.getValue(), mouseX, mouseY);
|
|
||||||
else if (I18n.hasTranslation(key) && text.equals(name)) {
|
|
||||||
List<Text> list = new ArrayList<>();
|
|
||||||
for (String str : I18n.translate(key).split("\n"))
|
|
||||||
list.add(Text.literal(str));
|
|
||||||
renderTooltip(matrices, list, mouseX, mouseY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
super.render(matrices,mouseX,mouseY,delta);
|
super.render(matrices,mouseX,mouseY,delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -388,7 +375,7 @@ public abstract class MidnightConfig {
|
|||||||
children.addAll(buttons);
|
children.addAll(buttons);
|
||||||
}
|
}
|
||||||
public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
|
public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
|
||||||
buttons.forEach(b -> { b.y = y; b.render(matrices, mouseX, mouseY, tickDelta); });
|
buttons.forEach(b -> { b.setY(y); b.render(matrices, mouseX, mouseY, tickDelta); });
|
||||||
if (text != null && (!text.getString().contains("spacer") || !buttons.isEmpty())) {
|
if (text != null && (!text.getString().contains("spacer") || !buttons.isEmpty())) {
|
||||||
if (info.centered) textRenderer.drawWithShadow(matrices, text, MinecraftClient.getInstance().getWindow().getScaledWidth() / 2f - (textRenderer.getWidth(text) / 2f), y + 5, 0xFFFFFF);
|
if (info.centered) textRenderer.drawWithShadow(matrices, text, MinecraftClient.getInstance().getWindow().getScaledWidth() / 2f - (textRenderer.getWidth(text) / 2f), y + 5, 0xFFFFFF);
|
||||||
else DrawableHelper.drawTextWithShadow(matrices, textRenderer, text, 12, y + 5, 0xFFFFFF);
|
else DrawableHelper.drawTextWithShadow(matrices, textRenderer, text, 12, y + 5, 0xFFFFFF);
|
||||||
|
|||||||
@@ -8,9 +8,15 @@ import net.minecraft.text.Text;
|
|||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
public class TexturedOverlayButtonWidget extends TexturedButtonWidget {
|
public class TexturedOverlayButtonWidget extends TexturedButtonWidget {
|
||||||
|
|
||||||
public TexturedOverlayButtonWidget(int x, int y, int width, int height, int u, int v, Identifier texture, PressAction pressAction) {
|
public TexturedOverlayButtonWidget(int x, int y, int width, int height, int u, int v, Identifier texture, PressAction pressAction) {
|
||||||
super(x, y, width, height, u, v, texture, pressAction);
|
super(x, y, width, height, u, v, texture, pressAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TexturedOverlayButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, PressAction pressAction) {
|
||||||
|
super(x, y, width, height, u, v, hoveredVOffset, texture, pressAction);
|
||||||
|
}
|
||||||
|
|
||||||
public TexturedOverlayButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, PressAction pressAction) {
|
public TexturedOverlayButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, PressAction pressAction) {
|
||||||
super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction);
|
super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction);
|
||||||
}
|
}
|
||||||
@@ -19,21 +25,17 @@ public class TexturedOverlayButtonWidget extends TexturedButtonWidget {
|
|||||||
super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text);
|
super(x, y, width, height, u, v, hoveredVOffset, texture, textureWidth, textureHeight, pressAction, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TexturedOverlayButtonWidget(int x, int y, int width, int height, int u, int v, int hoveredVOffset, Identifier texture, int textureWidth, int textureHeight, PressAction pressAction, TooltipSupplier tooltipSupplier, Text text) {
|
|
||||||
super(x,y,width,height, u,v,hoveredVOffset,texture,textureWidth,textureHeight,pressAction,tooltipSupplier,text);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) {
|
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) {
|
||||||
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
RenderSystem.setShader(GameRenderer::getPositionTexProgram);
|
||||||
RenderSystem.setShaderTexture(0, WIDGETS_TEXTURE);
|
RenderSystem.setShaderTexture(0, WIDGETS_TEXTURE);
|
||||||
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, this.alpha);
|
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, this.alpha);
|
||||||
int i = this.getYImage(this.isHovered());
|
int i = this.getYImage(this.isHovered());
|
||||||
RenderSystem.enableBlend();
|
RenderSystem.enableBlend();
|
||||||
RenderSystem.defaultBlendFunc();
|
RenderSystem.defaultBlendFunc();
|
||||||
RenderSystem.enableDepthTest();
|
RenderSystem.enableDepthTest();
|
||||||
this.drawTexture(matrices, this.x, this.y, 0, 46 + i * 20, this.width / 2, this.height);
|
this.drawTexture(matrices, this.getX(), this.getY(), 0, 46 + i * 20, this.width / 2, this.height);
|
||||||
this.drawTexture(matrices, this.x + this.width / 2, this.y, 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height);
|
this.drawTexture(matrices, this.getX() + this.width / 2, this.getY(), 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height);
|
||||||
|
|
||||||
super.renderButton(matrices, mouseX, mouseY, delta);
|
super.renderButton(matrices, mouseX, mouseY, delta);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ configurations {
|
|||||||
compileClasspath.extendsFrom common
|
compileClasspath.extendsFrom common
|
||||||
runtimeClasspath.extendsFrom common
|
runtimeClasspath.extendsFrom common
|
||||||
developmentFabric.extendsFrom common
|
developmentFabric.extendsFrom common
|
||||||
|
archivesBaseName = rootProject.archives_base_name + "-fabric"
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
@@ -44,7 +45,6 @@ shadowJar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
remapJar {
|
remapJar {
|
||||||
injectAccessWidener = true
|
|
||||||
input.set shadowJar.archiveFile
|
input.set shadowJar.archiveFile
|
||||||
dependsOn shadowJar
|
dependsOn shadowJar
|
||||||
classifier null
|
classifier null
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ configurations {
|
|||||||
compileClasspath.extendsFrom common
|
compileClasspath.extendsFrom common
|
||||||
runtimeClasspath.extendsFrom common
|
runtimeClasspath.extendsFrom common
|
||||||
developmentForge.extendsFrom common
|
developmentForge.extendsFrom common
|
||||||
|
archivesBaseName = rootProject.archives_base_name + "-forge"
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
package eu.midnightdust.forge;
|
package eu.midnightdust.forge;
|
||||||
|
|
||||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
|
||||||
import eu.midnightdust.hats.witch.WitchHatFeatureRenderer;
|
import eu.midnightdust.hats.witch.WitchHatFeatureRenderer;
|
||||||
import eu.midnightdust.lib.config.AutoCommand;
|
import eu.midnightdust.lib.config.MidnightConfig;
|
||||||
import eu.midnightdust.lib.util.MidnightColorUtil;
|
import eu.midnightdust.lib.util.MidnightColorUtil;
|
||||||
import net.minecraft.server.command.ServerCommandSource;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.client.ConfigScreenHandler;
|
||||||
import net.minecraftforge.client.event.EntityRenderersEvent;
|
import net.minecraftforge.client.event.EntityRenderersEvent;
|
||||||
import net.minecraftforge.event.RegisterCommandsEvent;
|
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.ModList;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(modid = "midnightlib", bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
|
@Mod.EventBusSubscriber(modid = "midnightlib", bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
|
||||||
public class MidnightLibClientEvents {
|
public class MidnightLibClientEvents {
|
||||||
@@ -22,4 +22,16 @@ public class MidnightLibClientEvents {
|
|||||||
public void registerClientTick(TickEvent.ClientTickEvent event) {
|
public void registerClientTick(TickEvent.ClientTickEvent event) {
|
||||||
MidnightColorUtil.tick();
|
MidnightColorUtil.tick();
|
||||||
}
|
}
|
||||||
|
@SubscribeEvent
|
||||||
|
public void onPostInit(FMLLoadCompleteEvent event) {
|
||||||
|
ModList.get().applyForEachModContainer(modContainer -> {
|
||||||
|
System.out.println(modContainer.getModId() + " yes");
|
||||||
|
if (MidnightConfig.configClass.containsKey(modContainer.getModId())) {
|
||||||
|
|
||||||
|
modContainer.registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () ->
|
||||||
|
new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> MidnightConfig.getScreen(parent, modContainer.getModId())));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,10 @@ package eu.midnightdust.forge;
|
|||||||
|
|
||||||
import eu.midnightdust.core.MidnightLibClient;
|
import eu.midnightdust.core.MidnightLibClient;
|
||||||
import eu.midnightdust.core.MidnightLibServer;
|
import eu.midnightdust.core.MidnightLibServer;
|
||||||
import eu.midnightdust.lib.config.MidnightConfig;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.client.ConfigScreenHandler;
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
import net.minecraftforge.fml.IExtensionPoint;
|
import net.minecraftforge.fml.IExtensionPoint;
|
||||||
import net.minecraftforge.fml.ModList;
|
|
||||||
import net.minecraftforge.fml.ModLoadingContext;
|
import net.minecraftforge.fml.ModLoadingContext;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
import net.minecraftforge.network.NetworkConstants;
|
import net.minecraftforge.network.NetworkConstants;
|
||||||
@@ -16,23 +13,11 @@ import net.minecraftforge.network.NetworkConstants;
|
|||||||
@Mod("midnightlib")
|
@Mod("midnightlib")
|
||||||
public class MidnightLibForge {
|
public class MidnightLibForge {
|
||||||
public MidnightLibForge() {
|
public MidnightLibForge() {
|
||||||
// Submit our event bus to let architectury register our content on the right time
|
|
||||||
//EventBuses.registerModEventBus("midnightlib", FMLJavaModLoadingContext.get().getModEventBus());
|
|
||||||
ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (remote, server) -> true));
|
ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (remote, server) -> true));
|
||||||
DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> MidnightLibClient::onInitializeClient);
|
DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> MidnightLibClient::onInitializeClient);
|
||||||
DistExecutor.safeRunWhenOn(Dist.DEDICATED_SERVER, () -> MidnightLibServer::onInitializeServer);
|
DistExecutor.safeRunWhenOn(Dist.DEDICATED_SERVER, () -> MidnightLibServer::onInitializeServer);
|
||||||
ModList.get().applyForEachModContainer(modContainer -> {
|
//ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () ->
|
||||||
if (MidnightConfig.configClass.containsKey(modContainer.getModId())) {
|
// new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> MidnightConfig.getScreen(parent, "midnightlib")));
|
||||||
ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () ->
|
|
||||||
new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> MidnightConfig.getScreen(parent, modContainer.getModId())));
|
|
||||||
}
|
|
||||||
System.out.println(modContainer.getModId());
|
|
||||||
System.out.println("motschen");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () ->
|
|
||||||
new ConfigScreenHandler.ConfigScreenFactory((client, parent) -> MidnightConfig.getScreen(parent, "midnightlib")));
|
|
||||||
MinecraftForge.EVENT_BUS.register(new MidnightLibClientEvents());
|
MinecraftForge.EVENT_BUS.register(new MidnightLibClientEvents());
|
||||||
MinecraftForge.EVENT_BUS.register(new MidnightLibServerEvents());
|
MinecraftForge.EVENT_BUS.register(new MidnightLibServerEvents());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,10 @@
|
|||||||
package eu.midnightdust.forge;
|
package eu.midnightdust.forge;
|
||||||
|
|
||||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||||
import eu.midnightdust.hats.witch.WitchHatFeatureRenderer;
|
|
||||||
import eu.midnightdust.lib.config.AutoCommand;
|
import eu.midnightdust.lib.config.AutoCommand;
|
||||||
import eu.midnightdust.lib.util.MidnightColorUtil;
|
|
||||||
import net.minecraft.server.command.ServerCommandSource;
|
import net.minecraft.server.command.ServerCommandSource;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.client.event.EntityRenderersEvent;
|
|
||||||
import net.minecraftforge.event.RegisterCommandsEvent;
|
import net.minecraftforge.event.RegisterCommandsEvent;
|
||||||
import net.minecraftforge.event.TickEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
org.gradle.jvmargs=-Xmx4096M
|
org.gradle.jvmargs=-Xmx4096M
|
||||||
|
|
||||||
minecraft_version=1.19.2
|
minecraft_version=1.19.3-rc1
|
||||||
enabled_platforms=quilt,fabric,forge
|
enabled_platforms=fabric
|
||||||
|
|
||||||
archives_base_name=midnightlib
|
archives_base_name=midnightlib
|
||||||
mod_version=1.0.0
|
mod_version=1.1.0
|
||||||
maven_group=eu.midnightdust
|
maven_group=eu.midnightdust
|
||||||
|
|
||||||
architectury_version=6.2.43
|
architectury_version=6.2.43
|
||||||
|
|
||||||
fabric_loader_version=0.14.9
|
fabric_loader_version=0.14.11
|
||||||
fabric_api_version=0.59.0+1.19.2
|
fabric_api_version=0.68.1+1.19.3
|
||||||
|
|
||||||
forge_version=1.19.2-43.0.8
|
forge_version=1.19.2-43.0.8
|
||||||
|
|
||||||
quilt_loader_version=0.17.2-beta.3
|
quilt_loader_version=0.18.1-beta.9
|
||||||
quilt_fabric_api_version=4.0.0-beta.7+0.59.0-1.19.2
|
quilt_fabric_api_version=4.0.0-beta.7+0.59.0-1.19.2
|
||||||
mod_menu_version = 4.0.6
|
mod_menu_version = 5.0.0-alpha.4
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ configurations {
|
|||||||
compileClasspath.extendsFrom common
|
compileClasspath.extendsFrom common
|
||||||
runtimeClasspath.extendsFrom common
|
runtimeClasspath.extendsFrom common
|
||||||
developmentQuilt.extendsFrom common
|
developmentQuilt.extendsFrom common
|
||||||
|
archivesBaseName = rootProject.archives_base_name + "-quilt"
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
@@ -51,7 +52,6 @@ shadowJar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
remapJar {
|
remapJar {
|
||||||
injectAccessWidener = true
|
|
||||||
input.set shadowJar.archiveFile
|
input.set shadowJar.archiveFile
|
||||||
dependsOn shadowJar
|
dependsOn shadowJar
|
||||||
classifier null
|
classifier null
|
||||||
|
|||||||
@@ -6,13 +6,16 @@
|
|||||||
"version": "${version}",
|
"version": "${version}",
|
||||||
"name": "MidnightLib",
|
"name": "MidnightLib",
|
||||||
"description": "Common Library for Team MidnightDust's mods.",
|
"description": "Common Library for Team MidnightDust's mods.",
|
||||||
"authors": ["TeamMidnightDust","Motschen"],
|
"authors": [
|
||||||
|
"TeamMidnightDust",
|
||||||
|
"Motschen"
|
||||||
|
],
|
||||||
"contact": {
|
"contact": {
|
||||||
"homepage": "https://www.midnightdust.eu/",
|
"homepage": "https://www.midnightdust.eu/",
|
||||||
"sources": "https://github.com/TeamMidnightDust/MidnightLib",
|
"sources": "https://github.com/TeamMidnightDust/MidnightLib",
|
||||||
"issues": "https://github.com/TeamMidnightDust/MidnightLib/issues"
|
"issues": "https://github.com/TeamMidnightDust/MidnightLib/issues"
|
||||||
},
|
},
|
||||||
"license": "MIT License",
|
"license": "MIT",
|
||||||
"icon": "assets/midnightlib/icon.png",
|
"icon": "assets/midnightlib/icon.png",
|
||||||
"intermediate_mappings": "net.fabricmc:intermediary",
|
"intermediate_mappings": "net.fabricmc:intermediary",
|
||||||
"environment": "*",
|
"environment": "*",
|
||||||
@@ -27,9 +30,6 @@
|
|||||||
"eu.midnightdust.lib.config.AutoModMenu"
|
"eu.midnightdust.lib.config.AutoModMenu"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"mixin": [
|
|
||||||
"midnightlib.mixins.json"
|
|
||||||
],
|
|
||||||
"depends": [
|
"depends": [
|
||||||
{
|
{
|
||||||
"id": "quilt_loader",
|
"id": "quilt_loader",
|
||||||
@@ -40,17 +40,33 @@
|
|||||||
"version": "*"
|
"version": "*"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"custom": {
|
"metadata": {
|
||||||
"modmenu": {
|
"name": "MidnightLib (Quilt)",
|
||||||
"links": {
|
"description": "Common Library for Team MidnightDust's mods.\nProvides a config api, automatic integration with other mods, common utils, and cosmetics.",
|
||||||
"modmenu.discord": "https://discord.midnightdust.eu/",
|
"contributors": {
|
||||||
"modmenu.website": "https://www.midnightdust.eu/",
|
"Motschen": "Author",
|
||||||
"midnightlib.curseforge": "https://www.curseforge.com/minecraft/mc-mods/midnightlib",
|
"TeamMidnightDust": "Mascot"
|
||||||
"midnightlib.modrinth": "https://modrinth.com/mod/midnightlib",
|
},
|
||||||
"midnightlib.wiki": "https://github.com/TeamMidnightDust/MidnightLib/wiki"
|
"contact": {
|
||||||
},
|
"email": "mail@midnightdust.eu",
|
||||||
"badges": [ "library" ]
|
"homepage": "https://modrinth.com/mod/midnightlib",
|
||||||
}
|
"issues": "https://github.com/TeamMidnightDust/MidnightLib/issues",
|
||||||
|
"sources": "https://github.com/TeamMidnightDust/MidnightLib"
|
||||||
|
},
|
||||||
|
"icon": "assets/midnightlib/icon.png"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"mixin": [
|
||||||
|
"midnightlib.mixins.json"
|
||||||
|
],
|
||||||
|
"modmenu": {
|
||||||
|
"links": {
|
||||||
|
"modmenu.discord": "https://discord.midnightdust.eu/",
|
||||||
|
"modmenu.website": "https://www.midnightdust.eu/",
|
||||||
|
"midnightlib.curseforge": "https://www.curseforge.com/minecraft/mc-mods/midnightlib",
|
||||||
|
"midnightlib.modrinth": "https://modrinth.com/mod/midnightlib",
|
||||||
|
"midnightlib.wiki": "https://github.com/TeamMidnightDust/MidnightLib/wiki"
|
||||||
|
},
|
||||||
|
"badges": [ "library" ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,7 +10,7 @@ pluginManagement {
|
|||||||
include("common")
|
include("common")
|
||||||
include("fabric-like")
|
include("fabric-like")
|
||||||
include("fabric")
|
include("fabric")
|
||||||
include("quilt")
|
//include("quilt")
|
||||||
include("forge")
|
//include("forge")
|
||||||
|
|
||||||
rootProject.name = "midnightlib"
|
rootProject.name = "midnightlib"
|
||||||
|
|||||||
Reference in New Issue
Block a user