Puzzle 0.4.0 - 1.17.1, more mods supported, Text and Slider fields

This commit is contained in:
Motschen
2021-09-26 14:19:13 +02:00
parent f28f2cd38b
commit 14f63e2758
20 changed files with 239 additions and 460 deletions

View File

@@ -11,8 +11,7 @@ import java.util.Objects;
public class IrisButton extends DrawableHelper {
public static ButtonWidget getButton(int x, int y, int width, int height, Screen parent, MinecraftClient client) {
ShaderPackScreen shaderPackPage = new ShaderPackScreen(parent);
return new ButtonWidget(x, y, width, height, shaderPackPage.getTitle().copy().append("..."), (button) -> {
Objects.requireNonNull(client).openScreen(shaderPackPage);
});
return new ButtonWidget(x, y, width, height, shaderPackPage.getTitle().copy().append("..."), (button) ->
Objects.requireNonNull(client).setScreen(shaderPackPage));
}
}

View File

@@ -1,6 +1,8 @@
package net.puzzlemc.gui.screen;
import net.fabricmc.loader.api.FabricLoader;
import net.puzzlemc.gui.PuzzleApi;
import net.puzzlemc.gui.PuzzleClient;
import net.puzzlemc.gui.screen.page.GraphicsPage;
import net.puzzlemc.gui.screen.page.MiscPage;
import net.puzzlemc.gui.screen.page.PerformancePage;
@@ -24,19 +26,20 @@ public class PuzzleOptionsScreen extends Screen {
@Override
protected void init() {
super.init();
PuzzleClient.initCITResewn();
GraphicsPage graphicsPage = new GraphicsPage(this);
MiscPage miscPage = new MiscPage(this);
PerformancePage performancePage = new PerformancePage(this);
ResourcesPage resourcesPage = new ResourcesPage(this);
this.addDrawableChild(new ButtonWidget(this.width / 2 - 155, this.height / 6 + 48 - 6, 150, 20, graphicsPage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).openScreen(graphicsPage)));
this.addDrawableChild(new ButtonWidget(this.width / 2 + 5, this.height / 6 + 48 - 6, 150, 20, resourcesPage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).openScreen(resourcesPage)));
this.addDrawableChild(new ButtonWidget(this.width / 2 - 155, this.height / 6 + 72 - 6, 150, 20, performancePage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).openScreen(performancePage)));
this.addDrawableChild(new ButtonWidget(this.width / 2 + 5, this.height / 6 + 72 - 6, 150, 20, miscPage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).openScreen(miscPage)));
this.addDrawableChild(new ButtonWidget(this.width / 2 - 155, this.height / 6 + 48 - 6, 150, 20, graphicsPage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).setScreen(graphicsPage)));
this.addDrawableChild(new ButtonWidget(this.width / 2 + 5, this.height / 6 + 48 - 6, 150, 20, resourcesPage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).setScreen(resourcesPage)));
this.addDrawableChild(new ButtonWidget(this.width / 2 - 155, this.height / 6 + 72 - 6, 150, 20, performancePage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).setScreen(performancePage)));
this.addDrawableChild(new ButtonWidget(this.width / 2 + 5, this.height / 6 + 72 - 6, 150, 20, miscPage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).setScreen(miscPage)));
if (FabricLoader.getInstance().isModLoaded("iris")) {
this.addDrawableChild(IrisButton.getButton(this.width / 2 - 155, this.height / 6 + 96 - 6, 150, 20, this, client));
}
this.addDrawableChild(new ButtonWidget(this.width / 2 - 100, this.height / 6 + 168, 200, 20, ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).openScreen(parent)));
this.addDrawableChild(new ButtonWidget(this.width / 2 - 100, this.height / 6 + 168, 200, 20, ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).setScreen(parent)));
}
@Override

View File

@@ -30,12 +30,13 @@ public abstract class AbstractPuzzleOptionsPage extends Screen {
super.init();
this.addDrawableChild(new ButtonWidget(this.width / 2 - 100, this.height - 28, 200, 20, ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).openScreen(parent)));
this.addDrawableChild(new ButtonWidget(this.width / 2 - 100, this.height - 28, 200, 20, ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).setScreen(parent)));
}
@Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
this.renderBackground(matrices);
if (client != null && client.world != null) this.list.setRenderBackground(false);
this.list.render(matrices, mouseX, mouseY, delta);
drawCenteredText(matrices, textRenderer, title, width/2, 15, 0xFFFFFF);

View File

@@ -37,9 +37,9 @@ public class PuzzleOptionListWidget extends ElementListWidget<PuzzleOptionListWi
} else if (button.buttonType == ButtonType.BUTTON) {
this.addButton(new PuzzleButtonWidget(this.width / 2 - 155 + 160, 0, 150, 20, button.buttonTextAction, button.onPress), button.descriptionText);
} else if (button.buttonType == ButtonType.SLIDER) {
this.addButton(new PuzzleSliderWidget(button.min, button.max, this.width / 2 - 155 + 160, 0, 150, 20, ((TranslatableText) button.buttonText), 1), button.descriptionText);
this.addButton(new PuzzleSliderWidget(button.min, button.max, this.width / 2 - 155 + 160, 0, 150, 20, button.setSliderValue, button.buttonTextAction, button.changeSliderValue), button.descriptionText);
} else if (button.buttonType == ButtonType.TEXT_FIELD) {
this.addButton(new PuzzleTextFieldWidget(textRenderer, this.width / 2 - 155 + 160, 0, 150, 20, null, button.buttonText), button.descriptionText);
this.addButton(new PuzzleTextFieldWidget(textRenderer, this.width / 2 - 155 + 160, 0, 150, 20, button.setTextValue, button.changeTextValue), button.descriptionText);
} else
LogManager.getLogger("Puzzle").warn("Button " + button + " is missing the buttonType variable. This shouldn't happen!");
}
@@ -50,7 +50,7 @@ public class PuzzleOptionListWidget extends ElementListWidget<PuzzleOptionListWi
}
protected int getScrollbarPositionX() {
return super.getScrollbarPositionX() + 32;
return super.getScrollbarPositionX() + 60;
}
public Optional<ClickableWidget> getHoveredButton(double mouseX, double mouseY) {
@@ -92,8 +92,8 @@ public class PuzzleOptionListWidget extends ElementListWidget<PuzzleOptionListWi
}
@Override
public List<? extends Selectable> method_37025() {
return null;
public List<? extends Selectable> selectableChildren() {
return buttons;
}
}
}

View File

@@ -1,29 +1,41 @@
package net.puzzlemc.gui.screen.widget;
import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
public class PuzzleSliderWidget extends SliderWidget {
private final int min;
private final double difference;
private final int max;
private final PuzzleWidget.TextAction setTextAction;
private final PuzzleWidget.ChangeSliderValueAction changeAction;
public PuzzleSliderWidget(int min, int max, int x, int y, int width, int height, PuzzleWidget.SetSliderValueAction setValueAction, PuzzleWidget.TextAction setTextAction, PuzzleWidget.ChangeSliderValueAction changeAction) {
super(x,y,width,height,Text.of(""),0);
public PuzzleSliderWidget(int min, int max, int x, int y, int width, int height, TranslatableText label, double value) {
super(x,y,width,height,label,value);
this.updateMessage();
this.min = min;
this.difference = max - min;
this.max = max;
setValueAction.setSliderValue(this);
this.setTextAction = setTextAction;
this.changeAction = changeAction;
this.updateMessage();
}
public int getInt() {
int difference = max - min;
int r = (int) (value * difference);
return r + min;
}
public void setInt(int v) {
value = value / v - value * min;
}
@Override
protected void updateMessage() {
Text text = new LiteralText((int) (min + this.value * difference) + "");
this.setMessage(new TranslatableText("label").append(": ").append(text));
this.setTextAction.setTitle(this);
}
@Override
protected void applyValue() {
this.changeAction.onChange(this);
}
}

View File

@@ -3,13 +3,21 @@ package net.puzzlemc.gui.screen.widget;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
import org.jetbrains.annotations.Nullable;
public class PuzzleTextFieldWidget extends TextFieldWidget {
private TranslatableText label;
private final PuzzleWidget.SetTextValueAction setValueAction;
private final PuzzleWidget.ChangeTextValueAction change;
public PuzzleTextFieldWidget(TextRenderer textRenderer, int x, int y, int width, int height, @Nullable TextFieldWidget copyFrom, Text text) {
super(textRenderer, x, y, width, height, text);
public PuzzleTextFieldWidget(TextRenderer textRenderer, int x, int y, int width, int height, PuzzleWidget.SetTextValueAction setValue, PuzzleWidget.ChangeTextValueAction change) {
super(textRenderer, x, y, width, height, Text.of(""));
this.setValueAction = setValue;
this.change = change;
setValueAction.setTextValue(this);
}
@Override
public void write(String text) {
super.write(text);
this.change.onChange(this);
setValueAction.setTextValue(this);
}
}

View File

@@ -4,6 +4,8 @@ import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.gui.widget.SliderWidget;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
@@ -15,7 +17,10 @@ public class PuzzleWidget {
public Text buttonText;
public TextAction buttonTextAction;
public ButtonWidget.PressAction onPress;
public PuzzleWidget.SaveAction onSave;
public PuzzleWidget.SetTextValueAction setTextValue;
public PuzzleWidget.SetSliderValueAction setSliderValue;
public PuzzleWidget.ChangeTextValueAction changeTextValue;
public PuzzleWidget.ChangeSliderValueAction changeSliderValue;
/**
* Puzzle Text Widget Container
@@ -41,24 +46,39 @@ public class PuzzleWidget {
/**
* Puzzle Slider Widget Container (WIP - Doesn't work)
*/
public PuzzleWidget(int min, int max, Text descriptionText, TranslatableText buttonText) {
public PuzzleWidget(int min, int max, Text descriptionText, PuzzleWidget.SetSliderValueAction setValueAction, PuzzleWidget.TextAction setTextAction, PuzzleWidget.ChangeSliderValueAction changeAction) {
this.buttonType = ButtonType.SLIDER;
this.min = min;
this.max = max;
this.descriptionText = descriptionText;
this.buttonText = buttonText;
this.setSliderValue = setValueAction;
this.buttonTextAction = setTextAction;
this.changeSliderValue = changeAction;
}
/**
* Puzzle Text Field Widget Container (WIP - Doesn't work)
*/
public PuzzleWidget(Text descriptionText, Text buttonText) {
public PuzzleWidget(Text descriptionText, PuzzleWidget.SetTextValueAction setValue, ChangeTextValueAction changeAction, int a) {
this.buttonType = ButtonType.TEXT_FIELD;
this.descriptionText = descriptionText;
this.buttonText = buttonText;
this.setTextValue = setValue;
this.changeTextValue = changeAction;
}
@Environment(EnvType.CLIENT)
public interface SaveAction {
void onSave(ClickableWidget button);
public interface ChangeTextValueAction {
void onChange(TextFieldWidget textField);
}
@Environment(EnvType.CLIENT)
public interface ChangeSliderValueAction {
void onChange(PuzzleSliderWidget slider);
}
@Environment(EnvType.CLIENT)
public interface SetTextValueAction {
void setTextValue(TextFieldWidget textField);
}
@Environment(EnvType.CLIENT)
public interface SetSliderValueAction {
void setSliderValue(PuzzleSliderWidget slider);
}
@Environment(EnvType.CLIENT)
public interface TextAction {