mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-10 20:11:35 +01:00
completing the set
This commit is contained in:
parent
bb8153f140
commit
fdbdf0ec8d
9 changed files with 125 additions and 14 deletions
|
@ -6,6 +6,7 @@ import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||||
import com.simibubi.create.foundation.gui.StencilElement;
|
import com.simibubi.create.foundation.gui.StencilElement;
|
||||||
import com.simibubi.create.foundation.gui.TextStencilElement;
|
import com.simibubi.create.foundation.gui.TextStencilElement;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.util.text.StringTextComponent;
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
@ -42,9 +43,8 @@ public class BaseConfigScreen extends ConfigScreen {
|
||||||
text2
|
text2
|
||||||
)
|
)
|
||||||
.withBounds(200, 30)
|
.withBounds(200, 30)
|
||||||
|
.withCallback(() -> ScreenOpener.transitionTo(new SubMenuConfigScreen(this, AllConfigs.COMMON.specification)))
|
||||||
);
|
);
|
||||||
commonConfigWidget.active = false;
|
|
||||||
commonConfigWidget.updateColorsFromState();
|
|
||||||
|
|
||||||
StencilElement text3 = new TextStencilElement(client.fontRenderer, new StringTextComponent("SERVER CONFIG").formatted(TextFormatting.BOLD)).centered(true, true);
|
StencilElement text3 = new TextStencilElement(client.fontRenderer, new StringTextComponent("SERVER CONFIG").formatted(TextFormatting.BOLD)).centered(true, true);
|
||||||
widgets.add(serverConfigWidget = ConfigButton.createFromStencilElement(
|
widgets.add(serverConfigWidget = ConfigButton.createFromStencilElement(
|
||||||
|
@ -54,15 +54,20 @@ public class BaseConfigScreen extends ConfigScreen {
|
||||||
)
|
)
|
||||||
.withBounds(200, 30)
|
.withBounds(200, 30)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (Minecraft.getInstance().world != null) {
|
||||||
|
serverConfigWidget.withCallback(() -> ScreenOpener.transitionTo(new SubMenuConfigScreen(this, AllConfigs.SERVER.specification)));
|
||||||
|
} else {
|
||||||
serverConfigWidget.active = false;
|
serverConfigWidget.active = false;
|
||||||
serverConfigWidget.updateColorsFromState();
|
serverConfigWidget.updateColorsFromState();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) {
|
protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) {
|
||||||
super.renderWindow(ms, mouseX, mouseY, partialTicks);
|
super.renderWindow(ms, mouseX, mouseY, partialTicks);
|
||||||
|
|
||||||
|
|
||||||
testStencil.at(200, 200, 0).render(ms);
|
//<testStencil.at(200, 200, 0).render(ms);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.simibubi.create.foundation.gui.CombinedStencilElement;
|
import com.simibubi.create.foundation.gui.CombinedStencilElement;
|
||||||
|
import com.simibubi.create.foundation.gui.DelegatedStencilElement;
|
||||||
import com.simibubi.create.foundation.gui.StencilElement;
|
import com.simibubi.create.foundation.gui.StencilElement;
|
||||||
import com.simibubi.create.foundation.gui.UIRenderHelper;
|
import com.simibubi.create.foundation.gui.UIRenderHelper;
|
||||||
import com.simibubi.create.foundation.gui.widgets.StencilWidget;
|
import com.simibubi.create.foundation.gui.widgets.StencilWidget;
|
||||||
|
@ -41,6 +42,12 @@ public class ConfigButton extends StencilWidget {
|
||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ConfigButton createAndInjectElementRenderer(int x, int y, DelegatedStencilElement stencil) {
|
||||||
|
ConfigButton button = new ConfigButton(x, y);
|
||||||
|
button.stencilElement = stencil.withElementRenderer((ms, $width, $height) -> UIRenderHelper.angledGradient(ms, 0, 0, $height/2, $height+2, $width+2, button.gradientColor1, button.gradientColor2));
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
protected ConfigButton(int x, int y) {
|
protected ConfigButton(int x, int y) {
|
||||||
super(x, y);
|
super(x, y);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@ import net.minecraft.util.text.IFormattableTextComponent;
|
||||||
|
|
||||||
public class ConfigScreenList extends ExtendedList<ConfigScreenList.Entry> {
|
public class ConfigScreenList extends ExtendedList<ConfigScreenList.Entry> {
|
||||||
|
|
||||||
|
|
||||||
public ConfigScreenList(Minecraft client, int width, int height, int top, int bottom, int elementHeight) {
|
public ConfigScreenList(Minecraft client, int width, int height, int top, int bottom, int elementHeight) {
|
||||||
super(client, width, height, top, bottom, elementHeight);
|
super(client, width, height, top, bottom, elementHeight);
|
||||||
func_244605_b(false);
|
func_244605_b(false);
|
||||||
|
@ -57,6 +56,10 @@ public class ConfigScreenList extends ExtendedList<ConfigScreenList.Entry> {
|
||||||
children().forEach(Entry::tick);
|
children().forEach(Entry::tick);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void bumpCog(float force) {
|
||||||
|
ConfigScreen.cogSpin.bump(3, force);
|
||||||
|
}
|
||||||
|
|
||||||
public static abstract class Entry extends ExtendedList.AbstractListEntry<Entry> {
|
public static abstract class Entry extends ExtendedList.AbstractListEntry<Entry> {
|
||||||
protected List<IGuiEventListener> listeners;
|
protected List<IGuiEventListener> listeners;
|
||||||
|
|
||||||
|
@ -98,7 +101,7 @@ public class ConfigScreenList extends ExtendedList<ConfigScreenList.Entry> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(MatrixStack ms, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) {
|
public void render(MatrixStack ms, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) {
|
||||||
UIRenderHelper.streak(ms, 0, x, y+height/2, height - 10, width/2, 0x0);
|
UIRenderHelper.streak(ms, 0, x, y+height/2, height - 10, getLabelWidth(width), 0x0);
|
||||||
IFormattableTextComponent component = label.getComponent();
|
IFormattableTextComponent component = label.getComponent();
|
||||||
if (Minecraft.getInstance().fontRenderer.getWidth(component) > getLabelWidth(width) - 10) {
|
if (Minecraft.getInstance().fontRenderer.getWidth(component) > getLabelWidth(width) - 10) {
|
||||||
label.withText(Minecraft.getInstance().fontRenderer.trimToWidth(component, getLabelWidth(width) - 15).getString() + "...");
|
label.withText(Minecraft.getInstance().fontRenderer.trimToWidth(component, getLabelWidth(width) - 15).getString() + "...");
|
||||||
|
@ -106,8 +109,8 @@ public class ConfigScreenList extends ExtendedList<ConfigScreenList.Entry> {
|
||||||
label.at(x + 5, y + height/2 - 4, 0).render(ms);
|
label.at(x + 5, y + height/2 - 4, 0).render(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static int getLabelWidth(int totalWidth) {
|
protected int getLabelWidth(int totalWidth) {
|
||||||
return (int) (totalWidth * labelWidthMult);
|
return totalWidth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import com.electronwill.nightconfig.core.AbstractConfig;
|
||||||
import com.electronwill.nightconfig.core.UnmodifiableConfig;
|
import com.electronwill.nightconfig.core.UnmodifiableConfig;
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.foundation.config.ui.entries.BooleanEntry;
|
import com.simibubi.create.foundation.config.ui.entries.BooleanEntry;
|
||||||
|
import com.simibubi.create.foundation.config.ui.entries.EnumEntry;
|
||||||
import com.simibubi.create.foundation.config.ui.entries.NumberEntry;
|
import com.simibubi.create.foundation.config.ui.entries.NumberEntry;
|
||||||
import com.simibubi.create.foundation.config.ui.entries.SubMenuEntry;
|
import com.simibubi.create.foundation.config.ui.entries.SubMenuEntry;
|
||||||
import com.simibubi.create.foundation.gui.ScreenOpener;
|
import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||||
|
@ -47,7 +48,7 @@ public class SubMenuConfigScreen extends ConfigScreen {
|
||||||
widgets.clear();
|
widgets.clear();
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
int lWidth = width - 66;
|
int lWidth = Math.min(width - 66, 500);
|
||||||
list = new ConfigScreenList(client, lWidth, height - 30, 15, height - 15, 50);
|
list = new ConfigScreenList(client, lWidth, height - 30, 15, height - 15, 50);
|
||||||
list.setLeftPos(this.width /2 - list.getWidth()/2);
|
list.setLeftPos(this.width /2 - list.getWidth()/2);
|
||||||
|
|
||||||
|
@ -70,6 +71,9 @@ public class SubMenuConfigScreen extends ConfigScreen {
|
||||||
if (value instanceof Boolean) {
|
if (value instanceof Boolean) {
|
||||||
BooleanEntry entry = new BooleanEntry(humanKey, (ForgeConfigSpec.ConfigValue<Boolean>) configValue, valueSpec);
|
BooleanEntry entry = new BooleanEntry(humanKey, (ForgeConfigSpec.ConfigValue<Boolean>) configValue, valueSpec);
|
||||||
list.children().add(entry);
|
list.children().add(entry);
|
||||||
|
} else if (value instanceof Enum) {
|
||||||
|
EnumEntry entry = new EnumEntry(humanKey, (ForgeConfigSpec.ConfigValue<Enum<?>>) configValue, valueSpec);
|
||||||
|
list.children().add(entry);
|
||||||
} else if (value instanceof Number) {
|
} else if (value instanceof Number) {
|
||||||
NumberEntry<? extends Number> entry = NumberEntry.create(value, humanKey, configValue, valueSpec);
|
NumberEntry<? extends Number> entry = NumberEntry.create(value, humanKey, configValue, valueSpec);
|
||||||
if (entry != null) {
|
if (entry != null) {
|
||||||
|
|
|
@ -58,9 +58,10 @@ public class BooleanEntry extends ValueEntry<Boolean> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onReset() {
|
protected void onValueChange() {
|
||||||
super.onReset();
|
super.onValueChange();
|
||||||
buttonStencil.withSecond(value.get() ? enabled : disabled);
|
buttonStencil.withSecond(value.get() ? enabled : disabled);
|
||||||
|
bumpCog(value.get() ? 15f : -16f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@Override
|
/*@Override
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
package com.simibubi.create.foundation.config.ui.entries;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.foundation.config.ui.ConfigButton;
|
||||||
|
import com.simibubi.create.foundation.gui.TextStencilElement;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraftforge.common.ForgeConfigSpec;
|
||||||
|
|
||||||
|
public class EnumEntry extends ValueEntry<Enum<?>> {
|
||||||
|
|
||||||
|
protected static final int cycleWidth = 34;//including 2px offset on either side
|
||||||
|
|
||||||
|
protected TextStencilElement valueText;
|
||||||
|
protected ConfigButton cycleLeft;
|
||||||
|
protected ConfigButton cycleRight;
|
||||||
|
|
||||||
|
public EnumEntry(String label, ForgeConfigSpec.ConfigValue<Enum<?>> value, ForgeConfigSpec.ValueSpec spec) {
|
||||||
|
super(label, value, spec);
|
||||||
|
|
||||||
|
valueText = new TextStencilElement(Minecraft.getInstance().fontRenderer, "YEP").centered(true, true);
|
||||||
|
|
||||||
|
TextStencilElement l = new TextStencilElement(Minecraft.getInstance().fontRenderer, "<").centered(true, true);
|
||||||
|
cycleLeft = ConfigButton.createAndInjectElementRenderer(0, 0, l).withBounds(30, 30).withCallback(() -> cycleValue(-1));
|
||||||
|
|
||||||
|
TextStencilElement r = new TextStencilElement(Minecraft.getInstance().fontRenderer, ">").centered(true, true);
|
||||||
|
cycleRight = ConfigButton.createAndInjectElementRenderer(0, 0, r).withBounds(30, 30).withCallback(() -> cycleValue(1));
|
||||||
|
|
||||||
|
listeners.add(cycleLeft);
|
||||||
|
listeners.add(cycleRight);
|
||||||
|
|
||||||
|
onReset();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void cycleValue(int direction) {
|
||||||
|
Enum<?> e = value.get();
|
||||||
|
Enum<?>[] options = e.getDeclaringClass().getEnumConstants();
|
||||||
|
e = options[Math.floorMod(e.ordinal() + direction, options.length)];
|
||||||
|
value.set(e);
|
||||||
|
bumpCog(direction * 15f);
|
||||||
|
onValueChange();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
super.tick();
|
||||||
|
cycleLeft.tick();
|
||||||
|
cycleRight.tick();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(MatrixStack ms, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) {
|
||||||
|
super.render(ms, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks);
|
||||||
|
|
||||||
|
cycleLeft.x = x + getLabelWidth(width) + 2;
|
||||||
|
cycleLeft.y = y + 10;
|
||||||
|
cycleLeft.render(ms, mouseX, mouseY, partialTicks);
|
||||||
|
|
||||||
|
valueText
|
||||||
|
.at(cycleLeft.x - 2 + cycleWidth, y + 10, 0)
|
||||||
|
.withBounds(width - getLabelWidth(width) - 2 * cycleWidth - resetWidth, 30)
|
||||||
|
.render(ms);
|
||||||
|
|
||||||
|
cycleRight.x = x + width - cycleWidth - resetWidth + 2;
|
||||||
|
cycleRight.y = y + 10;
|
||||||
|
cycleRight.render(ms, mouseX, mouseY, partialTicks);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onValueChange() {
|
||||||
|
super.onValueChange();
|
||||||
|
valueText.withText(value.get().name());
|
||||||
|
}
|
||||||
|
}
|
|
@ -83,7 +83,7 @@ public abstract class NumberEntry<T extends Number> extends ValueEntry<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String formatBound(T bound) {
|
protected String formatBound(T bound) {
|
||||||
String sci = String.format("%.2E", bound);
|
String sci = String.format("%.2E", bound.doubleValue());
|
||||||
String str = String.valueOf(bound);
|
String str = String.valueOf(bound);
|
||||||
return sci.length() < str.length() ? sci : str;
|
return sci.length() < str.length() ? sci : str;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,11 @@ public class SubMenuEntry extends ConfigScreenList.LabeledEntry {
|
||||||
button.render(ms, mouseX, mouseY, partialTicks);
|
button.render(ms, mouseX, mouseY, partialTicks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLabelWidth(int totalWidth) {
|
||||||
|
return (int) (totalWidth * labelWidthMult);
|
||||||
|
}
|
||||||
|
|
||||||
/*@Override
|
/*@Override
|
||||||
public boolean mouseClicked(double p_231044_1_, double p_231044_3_, int p_231044_5_) {
|
public boolean mouseClicked(double p_231044_1_, double p_231044_3_, int p_231044_5_) {
|
||||||
return button.mouseClicked(p_231044_1_, p_231044_3_, p_231044_5_);
|
return button.mouseClicked(p_231044_1_, p_231044_3_, p_231044_5_);
|
||||||
|
|
|
@ -10,7 +10,7 @@ import net.minecraftforge.common.ForgeConfigSpec;
|
||||||
|
|
||||||
public class ValueEntry<T> extends ConfigScreenList.LabeledEntry {
|
public class ValueEntry<T> extends ConfigScreenList.LabeledEntry {
|
||||||
|
|
||||||
protected static final int resetWidth = 24;//including 2px offset on each side
|
protected static final int resetWidth = 24;//including 2px offset on either side
|
||||||
|
|
||||||
protected ForgeConfigSpec.ConfigValue<T> value;
|
protected ForgeConfigSpec.ConfigValue<T> value;
|
||||||
protected ForgeConfigSpec.ValueSpec spec;
|
protected ForgeConfigSpec.ValueSpec spec;
|
||||||
|
@ -46,6 +46,11 @@ public class ValueEntry<T> extends ConfigScreenList.LabeledEntry {
|
||||||
reset.render(ms, mouseX, mouseY, partialTicks);
|
reset.render(ms, mouseX, mouseY, partialTicks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLabelWidth(int totalWidth) {
|
||||||
|
return (int) (totalWidth * labelWidthMult);
|
||||||
|
}
|
||||||
|
|
||||||
/*@Override
|
/*@Override
|
||||||
public boolean mouseClicked(double mX, double mY, int button) {
|
public boolean mouseClicked(double mX, double mY, int button) {
|
||||||
return reset.mouseClicked(mX, mY, button);
|
return reset.mouseClicked(mX, mY, button);
|
||||||
|
@ -59,4 +64,10 @@ public class ValueEntry<T> extends ConfigScreenList.LabeledEntry {
|
||||||
reset.active = !value.get().equals(spec.getDefault());
|
reset.active = !value.get().equals(spec.getDefault());
|
||||||
reset.animateGradientFromState();
|
reset.animateGradientFromState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void bumpCog() {bumpCog(10f);}
|
||||||
|
protected void bumpCog(float force) {
|
||||||
|
if (list != null && list instanceof ConfigScreenList)
|
||||||
|
((ConfigScreenList) list).bumpCog(force);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue