WIP Continued modifier settings gui overhaul

This commit is contained in:
Christian
2023-01-28 18:19:57 +01:00
parent 98ebc61bb8
commit 2a84c7ca41
12 changed files with 269 additions and 60 deletions

View File

@@ -0,0 +1,64 @@
package nl.requios.effortlessbuilding;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.GuiComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper;
import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
public enum AllGuiTextures implements ScreenElement {
ARRAY_ENTRY("modifiers", 256, 60),
MIRROR_ENTRY("modifiers", 0, 60, 256, 60),
RADIAL_MIRROR_ENTRY("modifiers", 0, 120, 256, 60),
;
public final ResourceLocation location;
public int width, height;
public int startX, startY;
private AllGuiTextures(String location, int width, int height) {
this(location, 0, 0, width, height);
}
private AllGuiTextures(int startX, int startY) {
this("icons", startX * 16, startY * 16, 16, 16);
}
private AllGuiTextures(String location, int startX, int startY, int width, int height) {
this(EffortlessBuilding.MODID, location, startX, startY, width, height);
}
private AllGuiTextures(String namespace, String location, int startX, int startY, int width, int height) {
this.location = new ResourceLocation(namespace, "textures/gui/" + location + ".png");
this.width = width;
this.height = height;
this.startX = startX;
this.startY = startY;
}
@OnlyIn(Dist.CLIENT)
public void bind() {
RenderSystem.setShaderTexture(0, location);
}
@OnlyIn(Dist.CLIENT)
@Override
public void render(PoseStack ms, int x, int y) {
bind();
GuiComponent.blit(ms, x, y, 0, startX, startY, width, height, 256, 256);
}
@OnlyIn(Dist.CLIENT)
public void render(PoseStack ms, int x, int y, GuiComponent component) {
bind();
component.blit(ms, x, y, startX, startY, width, height);
}
@OnlyIn(Dist.CLIENT)
public void render(PoseStack ms, int x, int y, Color c) {
bind();
UIRenderHelper.drawColoredTexture(ms, c, x, y, startX, startY, width, height);
}
}

View File

@@ -6,7 +6,7 @@ import net.minecraft.world.entity.player.Player;
import nl.requios.effortlessbuilding.utilities.BlockSet; import nl.requios.effortlessbuilding.utilities.BlockSet;
public abstract class BaseModifier { public abstract class BaseModifier {
public boolean enabled = false; public boolean enabled = true;
public abstract void findCoordinates(BlockSet blocks, Player player); public abstract void findCoordinates(BlockSet blocks, Player player);

View File

@@ -106,6 +106,8 @@ public class ScrollInput extends AbstractSimiWidget {
@Override @Override
public boolean mouseScrolled(double mouseX, double mouseY, double delta) { public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
if (!this.visible || !this.isHovered) return false; //Added
if (inverted) if (inverted)
delta *= -1; delta *= -1;

View File

@@ -9,9 +9,11 @@ import net.minecraft.network.chat.Component;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.AllGuiTextures;
import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.EffortlessBuilding;
import nl.requios.effortlessbuilding.buildmodifier.Array; import nl.requios.effortlessbuilding.buildmodifier.Array;
import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier;
import nl.requios.effortlessbuilding.create.foundation.gui.AbstractSimiScreen;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.Label; import nl.requios.effortlessbuilding.create.foundation.gui.widget.Label;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.ScrollInput; import nl.requios.effortlessbuilding.create.foundation.gui.widget.ScrollInput;
import nl.requios.effortlessbuilding.create.foundation.utility.Components; import nl.requios.effortlessbuilding.create.foundation.utility.Components;
@@ -31,10 +33,11 @@ public class ArrayEntry extends BaseModifierEntry<Array> {
protected Vector<ScrollInput> offsetInputs = new Vector<>(3); protected Vector<ScrollInput> offsetInputs = new Vector<>(3);
protected Vector<Label> offsetLabels = new Vector<>(3); protected Vector<Label> offsetLabels = new Vector<>(3);
protected ScrollInput countInput; protected ScrollInput countInput;
protected Label countLabel;
protected Label reachLabel; protected Label reachLabel;
public ArrayEntry(BaseModifier array) { public ArrayEntry(ModifiersScreen screen, BaseModifier array) {
super((Array) array); super(screen, (Array) array, Component.literal("Array"), AllGuiTextures.ARRAY_ENTRY);
offsetInputs.clear(); offsetInputs.clear();
offsetLabels.clear(); offsetLabels.clear();
@@ -43,7 +46,7 @@ public class ArrayEntry extends BaseModifierEntry<Array> {
var label = new Label(0, 0, Components.immutableEmpty()).withShadow(); var label = new Label(0, 0, Components.immutableEmpty()).withShadow();
final int index = i; final int index = i;
var scrollInput = new ScrollInput(0, 0, 20, 20) var scrollInput = new ScrollInput(0, 0, 18, 18)
.withRange(0, 100) .withRange(0, 100)
.writingTo(label) .writingTo(label)
.titled(Component.literal("Offset")) .titled(Component.literal("Offset"))
@@ -53,7 +56,6 @@ public class ArrayEntry extends BaseModifierEntry<Array> {
onValueChanged(); onValueChanged();
}); });
scrollInput.setState(MathHelper.get(modifier.offset, index)); scrollInput.setState(MathHelper.get(modifier.offset, index));
scrollInput.onChanged();
offsetInputs.add(scrollInput); offsetInputs.add(scrollInput);
offsetLabels.add(label); offsetLabels.add(label);
@@ -62,22 +64,26 @@ public class ArrayEntry extends BaseModifierEntry<Array> {
listeners.addAll(offsetInputs); listeners.addAll(offsetInputs);
listeners.addAll(offsetLabels); listeners.addAll(offsetLabels);
countInput = new ScrollInput(0, 0, 20, 20) countLabel = new Label(0, 0, Components.immutableEmpty()).withShadow();
countInput = new ScrollInput(0, 0, 18, 18)
.withRange(1, 100) .withRange(1, 100)
.writingTo(countLabel)
.titled(Component.literal("Count")) .titled(Component.literal("Count"))
.calling(value -> { .calling(value -> {
modifier.count = value; modifier.count = value;
onValueChanged(); onValueChanged();
}); });
countInput.setState(modifier.count); countInput.setState(modifier.count);
countInput.onChanged();
listeners.add(countInput); listeners.add(countInput);
listeners.add(countLabel);
reachLabel = new Label(100, 100, Components.immutableEmpty()).withShadow(); reachLabel = new Label(0, 0, Components.immutableEmpty()).withShadow();
listeners.add(reachLabel);
onValueChanged(); for (int i = 0; i < 3; i++) {
offsetInputs.get(i).onChanged();
}
countInput.onChanged();
} }
@Override @Override
@@ -86,24 +92,51 @@ public class ArrayEntry extends BaseModifierEntry<Array> {
offsetInputs.forEach(ScrollInput::tick); offsetInputs.forEach(ScrollInput::tick);
offsetLabels.forEach(Label::tick); offsetLabels.forEach(Label::tick);
countInput.tick(); countInput.tick();
int currentReach = Math.max(-1, getArrayReach());
int maxReach = ReachHelper.getMaxReach(Minecraft.getInstance().player);
ChatFormatting reachColor = isCurrentReachValid(currentReach, maxReach) ? ChatFormatting.GRAY : ChatFormatting.RED;
var reachText = "Reach: " + reachColor + currentReach + ChatFormatting.GRAY + "/" + ChatFormatting.GRAY + maxReach;
reachLabel.text = Component.literal(reachText);
} }
@Override @Override
public void render(PoseStack ms, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { public void render(PoseStack 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); super.render(ms, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks);
//draw offset labels
for (int i = 0; i < 3; i++) {
offsetLabels.get(i).x = x + 75 + 20 * i;
offsetLabels.get(i).y = y + 24;
offsetLabels.get(i).render(ms, mouseX, mouseY, partialTicks);
}
//draw offset inputs
for (int i = 0; i < 3; i++) {
offsetInputs.get(i).x = x + 75 + 20 * i;
offsetInputs.get(i).y = y + 24;
offsetInputs.get(i).render(ms, mouseX, mouseY, partialTicks);
}
//draw count label
countLabel.x = x + 140;
countLabel.y = y + 24;
countLabel.render(ms, mouseX, mouseY, partialTicks);
//draw count input
countInput.x = x + 140;
countInput.y = y + 24;
countInput.render(ms, mouseX, mouseY, partialTicks);
//draw reach label
reachLabel.x = x + width - 125;
reachLabel.y = y + 40;
reachLabel.render(ms, mouseX, mouseY, partialTicks);
} }
@Override @Override
public void onValueChanged() { public void onValueChanged() {
super.onValueChanged(); super.onValueChanged();
int currentReach = Math.max(-1, getArrayReach());
int maxReach = ReachHelper.getMaxReach(Minecraft.getInstance().player);
ChatFormatting reachColor = isCurrentReachValid(currentReach, maxReach) ? ChatFormatting.GRAY : ChatFormatting.RED;
var reachText = "Reach: " + reachColor + currentReach + ChatFormatting.GRAY + "/" + ChatFormatting.GRAY + maxReach;
reachLabel.text = Component.literal(reachText);
} }
private int getArrayReach() { private int getArrayReach() {

View File

@@ -1,48 +1,75 @@
package nl.requios.effortlessbuilding.gui.buildmodifier; package nl.requios.effortlessbuilding.gui.buildmodifier;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.network.chat.Component;
import nl.requios.effortlessbuilding.AllGuiTextures;
import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier;
import nl.requios.effortlessbuilding.create.foundation.gui.AbstractSimiScreen;
import nl.requios.effortlessbuilding.create.foundation.gui.AllIcons; import nl.requios.effortlessbuilding.create.foundation.gui.AllIcons;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.BoxWidget; import nl.requios.effortlessbuilding.create.foundation.gui.widget.BoxWidget;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.IconButton;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.Label;
import nl.requios.effortlessbuilding.gui.elements.GuiCollapsibleScrollEntry; import nl.requios.effortlessbuilding.gui.elements.GuiCollapsibleScrollEntry;
import nl.requios.effortlessbuilding.gui.elements.GuiScrollPane; import nl.requios.effortlessbuilding.gui.elements.GuiScrollPane;
public abstract class BaseModifierEntry<T extends BaseModifier> extends ModifiersScreenList.Entry { public abstract class BaseModifierEntry<T extends BaseModifier> extends ModifiersScreenList.Entry {
public T modifier; public T modifier;
BoxWidget enableButton; protected AllGuiTextures background;
protected IconButton enableButton;
protected Label nameLabel;
protected IconButton removeButton;
public BaseModifierEntry(T modifier) { public BaseModifierEntry(ModifiersScreen screen, T modifier, Component name, AllGuiTextures background) {
super(); super(screen);
this.modifier = modifier; this.modifier = modifier;
this.background = background;
enableButton = new BoxWidget() enableButton = new IconButton(35, 8, AllIcons.I_PLACE)
.showingElement(AllIcons.I_CONFIRM.asStencil())
.withCallback(() -> { .withCallback(() -> {
modifier.enabled = !modifier.enabled; modifier.enabled = !modifier.enabled;
onValueChanged(); onValueChanged();
}); });
listeners.add(enableButton);
nameLabel = new Label(65, 8, name);
nameLabel.text = name;
removeButton = new IconButton(0, 0, AllIcons.I_TRASH)
.withCallback(() -> {
screen.removeModifier(this);
});
listeners.add(removeButton);
} }
@Override @Override
public void tick() { public void tick() {
super.tick(); super.tick();
enableButton.tick(); // enableButton.tick();
} }
@Override @Override
public void render(PoseStack ms, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { public void render(PoseStack 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);
enableButton.x = x + width - 80; background.render(ms, x + 22, y, screen);
enableButton.y = y + 10;
enableButton.setWidth(35); enableButton.x = x + width - 60;
enableButton.setHeight(height - 20); enableButton.y = y + 18;
enableButton.render(ms, mouseX, mouseY, partialTicks); enableButton.render(ms, mouseX, mouseY, partialTicks);
nameLabel.x = x + 65;
nameLabel.y = y + 4;
nameLabel.render(ms, mouseX, mouseY, partialTicks);
removeButton.x = x + width - 60;
removeButton.y = y + 38;
removeButton.render(ms, mouseX, mouseY, partialTicks);
super.render(ms, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks);
} }
public void onValueChanged() { public void onValueChanged() {
enableButton.showingElement(modifier.enabled ? AllIcons.I_CONFIRM.asStencil() : AllIcons.I_DISABLE.asStencil()); enableButton.setIcon(modifier.enabled ? AllIcons.I_PLACE : AllIcons.I_CLEAR);
} }
} }

View File

@@ -10,9 +10,11 @@ import net.minecraft.world.phys.Vec3;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.AllGuiTextures;
import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.EffortlessBuilding;
import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier;
import nl.requios.effortlessbuilding.buildmodifier.Mirror; import nl.requios.effortlessbuilding.buildmodifier.Mirror;
import nl.requios.effortlessbuilding.create.foundation.gui.AbstractSimiScreen;
import nl.requios.effortlessbuilding.gui.elements.*; import nl.requios.effortlessbuilding.gui.elements.*;
import nl.requios.effortlessbuilding.utilities.ReachHelper; import nl.requios.effortlessbuilding.utilities.ReachHelper;
@@ -24,8 +26,8 @@ import java.util.List;
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public class MirrorEntry extends BaseModifierEntry<Mirror> { public class MirrorEntry extends BaseModifierEntry<Mirror> {
public MirrorEntry(BaseModifier modifier) { public MirrorEntry(ModifiersScreen screen, BaseModifier modifier) {
super((Mirror) modifier); super(screen, (Mirror) modifier, Component.literal("Mirror"), AllGuiTextures.MIRROR_ENTRY);
} }

View File

@@ -14,6 +14,9 @@ import nl.requios.effortlessbuilding.buildmodifier.BaseModifier;
import nl.requios.effortlessbuilding.buildmodifier.Mirror; import nl.requios.effortlessbuilding.buildmodifier.Mirror;
import nl.requios.effortlessbuilding.buildmodifier.RadialMirror; import nl.requios.effortlessbuilding.buildmodifier.RadialMirror;
import nl.requios.effortlessbuilding.create.foundation.gui.AbstractSimiScreen; import nl.requios.effortlessbuilding.create.foundation.gui.AbstractSimiScreen;
import nl.requios.effortlessbuilding.create.foundation.gui.AllIcons;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.BoxWidget;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import nl.requios.effortlessbuilding.gui.elements.GuiScrollPane; import nl.requios.effortlessbuilding.gui.elements.GuiScrollPane;
import nl.requios.effortlessbuilding.network.PacketHandler; import nl.requios.effortlessbuilding.network.PacketHandler;
@@ -25,7 +28,10 @@ import java.util.Map;
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public class ModifiersScreen extends AbstractSimiScreen { public class ModifiersScreen extends AbstractSimiScreen {
protected ModifiersScreenList list; protected ModifiersScreenList list;
private Button buttonClose; protected BoxWidget addArrayButton;
protected BoxWidget addMirrorButton;
protected BoxWidget addRadialMirrorButton;
protected BoxWidget closeButton;
public ModifiersScreen() { public ModifiersScreen() {
super(Component.translatable("effortlessbuilding.screen.modifier_settings")); super(Component.translatable("effortlessbuilding.screen.modifier_settings"));
@@ -41,23 +47,46 @@ public class ModifiersScreen extends AbstractSimiScreen {
int listL = this.width / 2 - listWidth / 2; int listL = this.width / 2 - listWidth / 2;
int listR = this.width / 2 + listWidth / 2; int listR = this.width / 2 + listWidth / 2;
list = new ModifiersScreenList(minecraft, listWidth, height - 80, 35, height - 45, 40); list = new ModifiersScreenList(minecraft, listWidth, height - 80, 45, height - 45, 60);
list.setLeftPos(this.width / 2 - list.getWidth() / 2); list.setLeftPos(this.width / 2 - list.getWidth() / 2);
addRenderableWidget(list); addRenderableWidget(list);
initScrollEntries(); initScrollEntries();
//Close button addArrayButton = new BoxWidget(listR - 90, 10, 20, 20)
int y = height - 26; .withPadding(2, 2)
buttonClose = new Button(width / 2 - 100, y, 200, 20, Component.literal("Close"), (button) -> { .withCallback(() -> addModifier(new Array()));
Minecraft.getInstance().player.closeContainer(); addArrayButton.showingElement(AllIcons.I_ADD.asStencil().withElementRenderer(BoxWidget.gradientFactory.apply(addArrayButton)));
}); addArrayButton.getToolTip().add(Components.literal("Add Array"));
addRenderableOnly(buttonClose);
addMirrorButton = new BoxWidget(listR - 60, 10, 20, 20)
.withPadding(2, 2)
.withCallback(() -> addModifier(new Mirror()));
addMirrorButton.showingElement(AllIcons.I_ADD.asStencil().withElementRenderer(BoxWidget.gradientFactory.apply(addMirrorButton)));
addMirrorButton.getToolTip().add(Components.literal("Add Mirror"));
addRadialMirrorButton = new BoxWidget(listR - 30, 10, 20, 20)
.withPadding(2, 2)
.withCallback(() -> addModifier(new RadialMirror()));
addRadialMirrorButton.showingElement(AllIcons.I_ADD.asStencil().withElementRenderer(BoxWidget.gradientFactory.apply(addRadialMirrorButton)));
addRadialMirrorButton.getToolTip().add(Components.literal("Add Radial Mirror"));
closeButton = new BoxWidget(listL - 30, yCenter - 10, 20, 20)
.withPadding(2, 2)
.withCallback(this::onClose);
closeButton.showingElement(AllIcons.I_CONFIG_BACK.asStencil().withElementRenderer(BoxWidget.gradientFactory.apply(closeButton)));
closeButton.getToolTip().add(Components.literal("Close"));
addRenderableWidget(addArrayButton);
addRenderableWidget(addMirrorButton);
addRenderableWidget(addRadialMirrorButton);
addRenderableWidget(closeButton);
} }
private void initScrollEntries() { private void initScrollEntries() {
list.children().clear();
var modifierSettingsList = EffortlessBuildingClient.BUILD_MODIFIERS.getModifierSettingsList(); var modifierSettingsList = EffortlessBuildingClient.BUILD_MODIFIERS.getModifierSettingsList();
for (BaseModifier modifier : modifierSettingsList) { for (BaseModifier modifier : modifierSettingsList) {
var entry = createModifierPanel(modifier); var entry = createModifierPanel(modifier);
@@ -67,11 +96,11 @@ public class ModifiersScreen extends AbstractSimiScreen {
private BaseModifierEntry createModifierPanel(BaseModifier modifier) { private BaseModifierEntry createModifierPanel(BaseModifier modifier) {
if (modifier instanceof Mirror) { if (modifier instanceof Mirror) {
return new MirrorEntry(modifier); return new MirrorEntry(this, modifier);
} else if (modifier instanceof Array) { } else if (modifier instanceof Array) {
return new ArrayEntry(modifier); return new ArrayEntry(this, modifier);
} else if (modifier instanceof RadialMirror) { } else if (modifier instanceof RadialMirror) {
return new RadialMirrorEntry(modifier); return new RadialMirrorEntry(this, modifier);
} else { } else {
return null; return null;
} }
@@ -83,7 +112,7 @@ public class ModifiersScreen extends AbstractSimiScreen {
EffortlessBuildingClient.BUILD_MODIFIERS.addModifierSettings(modifier); EffortlessBuildingClient.BUILD_MODIFIERS.addModifierSettings(modifier);
} }
private void removeModifier(BaseModifierEntry entry) { public void removeModifier(BaseModifierEntry entry) {
list.children().remove(entry); list.children().remove(entry);
EffortlessBuildingClient.BUILD_MODIFIERS.removeModifierSettings(entry.modifier); EffortlessBuildingClient.BUILD_MODIFIERS.removeModifierSettings(entry.modifier);
} }
@@ -109,7 +138,7 @@ public class ModifiersScreen extends AbstractSimiScreen {
@Override @Override
public boolean keyPressed(int keyCode, int p_96553_, int p_96554_) { public boolean keyPressed(int keyCode, int p_96553_, int p_96554_) {
if (keyCode == ClientEvents.keyBindings[1].getKey().getValue()) { if (keyCode == ClientEvents.keyBindings[1].getKey().getValue()) {
minecraft.player.closeContainer(); onClose();
return true; return true;
} }

View File

@@ -7,21 +7,21 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.components.ObjectSelectionList; import net.minecraft.client.gui.components.ObjectSelectionList;
import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import nl.requios.effortlessbuilding.create.foundation.gui.AbstractSimiScreen;
import nl.requios.effortlessbuilding.create.foundation.gui.TickableGuiEventListener; import nl.requios.effortlessbuilding.create.foundation.gui.TickableGuiEventListener;
import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper; import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.AbstractSimiWidget;
import nl.requios.effortlessbuilding.create.foundation.utility.Color; import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import nl.requios.effortlessbuilding.create.foundation.utility.Components; import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
//Based on Create's ConfigScreenList //Based on Create's ConfigScreenList
public class ModifiersScreenList extends ObjectSelectionList<ModifiersScreenList.Entry> implements TickableGuiEventListener { public class ModifiersScreenList extends ObjectSelectionList<ModifiersScreenList.Entry> implements TickableGuiEventListener {
public ModifiersScreenList(Minecraft pMinecraft, int pWidth, int pHeight, int pY0, int pY1, int pItemHeight) { public ModifiersScreenList(Minecraft mc, int width, int height, int y0, int y1, int itemHeight) {
super(pMinecraft, pWidth, pHeight, pY0, pY1, pItemHeight); super(mc, width, height, y0, y1, itemHeight);
setRenderBackground(false); setRenderBackground(false);
setRenderTopAndBottom(false); setRenderTopAndBottom(false);
setRenderSelection(false); setRenderSelection(false);
@@ -50,11 +50,32 @@ public class ModifiersScreenList extends ObjectSelectionList<ModifiersScreenList
@Override @Override
public boolean mouseClicked(double x, double y, int button) { public boolean mouseClicked(double x, double y, int button) {
children().stream().forEach(e -> e.mouseClicked(x, y, button)); if (children().stream().anyMatch(e -> e.mouseClicked(x, y, button)))
return true;
return super.mouseClicked(x, y, button); return super.mouseClicked(x, y, button);
} }
@Override
public boolean keyPressed(int pKeyCode, int pScanCode, int pModifiers) {
if (children().stream().anyMatch(e -> e.keyPressed(pKeyCode, pScanCode, pModifiers)))
return true;
return super.keyPressed(pKeyCode, pScanCode, pModifiers);
}
@Override
public boolean charTyped(char pCodePoint, int pModifiers) {
if (children().stream().anyMatch(e -> e.charTyped(pCodePoint, pModifiers)))
return true;
return super.charTyped(pCodePoint, pModifiers);
}
@Override
public boolean mouseScrolled(double pMouseX, double pMouseY, double pDelta) {
if (children().stream().anyMatch(e -> e.mouseScrolled(pMouseX, pMouseY, pDelta)))
return true;
return super.mouseScrolled(pMouseX, pMouseY, pDelta);
}
@Override @Override
public int getRowWidth() { public int getRowWidth() {
return width - 16; return width - 16;
@@ -71,9 +92,11 @@ public class ModifiersScreenList extends ObjectSelectionList<ModifiersScreenList
} }
public static abstract class Entry extends ObjectSelectionList.Entry<Entry> implements TickableGuiEventListener { public static abstract class Entry extends ObjectSelectionList.Entry<Entry> implements TickableGuiEventListener {
protected final ModifiersScreen screen;
protected List<GuiEventListener> listeners; protected List<GuiEventListener> listeners;
protected Entry() { protected Entry(ModifiersScreen screen) {
this.screen = screen;
listeners = new ArrayList<>(); listeners = new ArrayList<>();
} }
@@ -93,7 +116,28 @@ public class ModifiersScreenList extends ObjectSelectionList<ModifiersScreenList
} }
@Override @Override
public void render(PoseStack ms, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) {} public boolean mouseScrolled(double x, double y, double delta) {
return getGuiListeners().stream().anyMatch(l -> l.mouseScrolled(x, y, delta));
}
@Override
public void render(PoseStack 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 - 10, y + height / 2, height - 6, width, 0xdd_000000);
// UIRenderHelper.streak(ms, 180, x + (int) (width * 1.35f) + 10, y + height / 2, height - 6, width / 8 * 7, 0xdd_000000);
for (var listener : listeners) {
if (listener instanceof AbstractSimiWidget simiWidget && simiWidget.isHoveredOrFocused()
&& simiWidget.visible) {
List<Component> tooltip = simiWidget.getToolTip();
if (tooltip.isEmpty())
continue;
int ttx = simiWidget.lockedTooltipX == -1 ? mouseX : simiWidget.lockedTooltipX + simiWidget.x;
int tty = simiWidget.lockedTooltipY == -1 ? mouseY : simiWidget.lockedTooltipY + simiWidget.y;
screen.renderComponentTooltip(ms, tooltip, ttx, tty);
}
}
}
@Override @Override
public void tick() {} public void tick() {}

View File

@@ -10,9 +10,11 @@ import net.minecraft.world.phys.Vec3;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.AllGuiTextures;
import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.EffortlessBuilding;
import nl.requios.effortlessbuilding.buildmodifier.BaseModifier; import nl.requios.effortlessbuilding.buildmodifier.BaseModifier;
import nl.requios.effortlessbuilding.buildmodifier.RadialMirror; import nl.requios.effortlessbuilding.buildmodifier.RadialMirror;
import nl.requios.effortlessbuilding.create.foundation.gui.AbstractSimiScreen;
import nl.requios.effortlessbuilding.gui.elements.*; import nl.requios.effortlessbuilding.gui.elements.*;
import nl.requios.effortlessbuilding.utilities.ReachHelper; import nl.requios.effortlessbuilding.utilities.ReachHelper;
@@ -24,8 +26,8 @@ import java.util.List;
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public class RadialMirrorEntry extends BaseModifierEntry<RadialMirror> { public class RadialMirrorEntry extends BaseModifierEntry<RadialMirror> {
public RadialMirrorEntry(BaseModifier modifier) { public RadialMirrorEntry(ModifiersScreen screen, BaseModifier modifier) {
super((RadialMirror) modifier); super(screen, (RadialMirror) modifier, Component.literal("Radial Mirror"), AllGuiTextures.RADIAL_MIRROR_ENTRY);
} }
// protected static final ResourceLocation BUILDING_ICONS = new ResourceLocation(EffortlessBuilding.MODID, "textures/gui/building_icons.png"); // protected static final ResourceLocation BUILDING_ICONS = new ResourceLocation(EffortlessBuilding.MODID, "textures/gui/building_icons.png");

View File

@@ -83,5 +83,11 @@
"effortlessbuilding.action.thickness_3": "3 Blocks Thick", "effortlessbuilding.action.thickness_3": "3 Blocks Thick",
"effortlessbuilding.action.thickness_5": "5 Blocks Thick", "effortlessbuilding.action.thickness_5": "5 Blocks Thick",
"effortlessbuilding.action.start_center": "Middle", "effortlessbuilding.action.start_center": "Middle",
"effortlessbuilding.action.start_corner": "Corner" "effortlessbuilding.action.start_corner": "Corner",
"effortlessbuilding.gui.scrollInput.defaultTitle": "Choose an Option:",
"effortlessbuilding.gui.scrollInput.scrollToModify": "Scroll to Modify",
"effortlessbuilding.gui.scrollInput.scrollToAdjustAmount": "Scroll to Adjust Amount",
"effortlessbuilding.gui.scrollInput.scrollToSelect": "Scroll to Select",
"effortlessbuilding.gui.scrollInput.shiftScrollsFaster": "Shift to Scroll Faster"
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB