mirror of
https://github.com/PuzzleMC/Puzzle.git
synced 2025-12-18 04:45:09 +01:00
Puzzle 0.4.0 - 1.17.1, more mods supported, Text and Slider fields
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user