From a7961c22a6a3554b5be595a69f043bf2dfedcd25 Mon Sep 17 00:00:00 2001 From: Christian Knaapen Date: Thu, 27 Aug 2020 02:24:04 +0200 Subject: [PATCH] Started on GUI for player settings. --- .../buildmode/ModeOptions.java | 11 +- .../gui/buildmode/PlayerSettingsGui.java | 304 ++++++++++++++++++ .../gui/buildmode/RadialMenu.java | 24 +- .../buildmodifier/ModifierSettingsGui.java | 1 - .../effortlessbuilding/proxy/ClientProxy.java | 18 +- .../render/RenderHandler.java | 4 +- .../assets/effortlessbuilding/lang/en_us.json | 2 + .../textures/icons/open_player_settings.png | Bin 0 -> 1290 bytes 8 files changed, 347 insertions(+), 17 deletions(-) create mode 100644 src/main/java/nl/requios/effortlessbuilding/gui/buildmode/PlayerSettingsGui.java create mode 100644 src/main/resources/assets/effortlessbuilding/textures/icons/open_player_settings.png diff --git a/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java b/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java index bac4463..de309d1 100644 --- a/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java +++ b/src/main/java/nl/requios/effortlessbuilding/buildmode/ModeOptions.java @@ -14,6 +14,7 @@ public class ModeOptions { REDO("effortlessbuilding.action.redo"), REPLACE("effortlessbuilding.action.replace"), OPEN_MODIFIER_SETTINGS("effortlessbuilding.action.open_modifier_settings"), + OPEN_PLAYER_SETTINGS("effortlessbuilding.action.open_player_settings"), NORMAL_SPEED("effortlessbuilding.action.normal_speed"), FAST_SPEED("effortlessbuilding.action.fast_speed"), @@ -130,6 +131,10 @@ public class ModeOptions { if (player.world.isRemote) ClientProxy.openModifierSettings(); break; + case OPEN_PLAYER_SETTINGS: + if (player.world.isRemote) + ClientProxy.openPlayerSettings(); + break; case NORMAL_SPEED: buildSpeed = ActionEnum.NORMAL_SPEED; @@ -175,7 +180,11 @@ public class ModeOptions { break; } - if (player.world.isRemote && action != ActionEnum.REPLACE && action != ActionEnum.OPEN_MODIFIER_SETTINGS) { + if (player.world.isRemote && + action != ActionEnum.REPLACE && + action != ActionEnum.OPEN_MODIFIER_SETTINGS && + action != ActionEnum.OPEN_PLAYER_SETTINGS) { + EffortlessBuilding.logTranslate(player, "", action.name, "", true); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/PlayerSettingsGui.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/PlayerSettingsGui.java new file mode 100644 index 0000000..ba94f1d --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/PlayerSettingsGui.java @@ -0,0 +1,304 @@ +package nl.requios.effortlessbuilding.gui.buildmode; + +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.SimpleSound; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.client.gui.IGuiEventListener; +import net.minecraft.client.gui.screen.LanguageScreen; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.gui.widget.list.ExtendedList; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.client.gui.widget.ExtendedButton; +import net.minecraftforge.fml.client.gui.widget.Slider; +import nl.requios.effortlessbuilding.EffortlessBuilding; + +public class PlayerSettingsGui extends Screen { + + protected int left, right, top, bottom; + + private Button shaderTypeButton; + private ShaderTypeList shaderTypeList; + private Button closeButton; + + protected boolean showShaderList = false; + + public enum ShaderType { + DISSOLVE_BLUE("Dissolve Blue"), + DISSOLVE_ORANGE("Dissolve Orange"); + + public String name; + ShaderType(String name) { + this.name = name; + } + } + + public PlayerSettingsGui() { + super(new TranslationTextComponent("effortlessbuilding.screen.player_settings")); + } + + @Override + protected void init() { + left = this.width / 2 - 140; + right = this.width / 2 + 140; + top = this.height / 2 - 100; + bottom = this.height / 2 + 100; + + int yy = top; + shaderTypeList = new ShaderTypeList(this.minecraft); + this.children.add(shaderTypeList); + //TODO set selected name + String currentShaderName = ShaderType.DISSOLVE_BLUE.name; + shaderTypeButton = new ExtendedButton(right - 180, yy, 180, 20, currentShaderName, (button) -> { + showShaderList = !showShaderList; + }); + addButton(shaderTypeButton); + + yy += 50; + Slider slider = new Slider(right - 200, yy, 200, 20, "", "", 0.5, 2.0, 1.0, true, true, (button) -> { + + }); + addButton(slider); + + closeButton = new ExtendedButton(left + 50, bottom - 20, 180, 20, "Done", (button) -> { + this.minecraft.player.closeScreen(); + }); + addButton(closeButton); + } + + @Override + public void tick() { + super.tick(); + } + + @Override + public void render(int mouseX, int mouseY, float partialTicks) { + this.renderBackground(); + + int yy = top; + font.drawString("Shader type", left, yy + 5, 0xFFFFFF); + + yy += 50; + font.drawString("Shader speed", left, yy + 5, 0xFFFFFF); + + super.render(mouseX, mouseY, partialTicks); + + if (showShaderList) + this.shaderTypeList.render(mouseX, mouseY, partialTicks); + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { + super.mouseClicked(mouseX, mouseY, mouseButton); + if (showShaderList) { + if (!shaderTypeList.isMouseOver(mouseX, mouseY) && !shaderTypeButton.isMouseOver(mouseX, mouseY)) + showShaderList = false; + } + return true; + } + + @Override + public void removed() { + ShaderTypeList.ShaderTypeEntry selectedShader = shaderTypeList.getSelected(); + //TODO save + } + + //Inspired by LanguageScreen + @OnlyIn(Dist.CLIENT) + class ShaderTypeList extends ExtendedList { + + public ShaderTypeList(Minecraft mcIn) { + super(mcIn, 180, 140, top + 20, top + 100, 18); + this.setLeftPos(right - width); + + for (int i = 0; i < 40; i++) { + + for (ShaderType shaderType : ShaderType.values()) { + ShaderTypeEntry shaderTypeEntry = new ShaderTypeEntry(shaderType); + addEntry(shaderTypeEntry); + //TODO setSelected to this if appropriate + } + + } + + if (this.getSelected() != null) { + this.centerScrollOn(this.getSelected()); + } + } + + @Override + public int getRowWidth() { + return width; + } + + @Override + public void setSelected(PlayerSettingsGui.ShaderTypeList.ShaderTypeEntry selected) { + super.setSelected(selected); + Minecraft.getInstance().getSoundHandler().play(SimpleSound.master(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + EffortlessBuilding.log("Selected shader " + selected.shaderType.name); + shaderTypeButton.setMessage(selected.shaderType.name); +// showShaderList = false; + } + + @Override + public boolean mouseClicked(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_) { + if (!showShaderList) return false; + return super.mouseClicked(p_mouseClicked_1_, p_mouseClicked_3_, p_mouseClicked_5_); + } + + @Override + public boolean mouseReleased(double p_mouseReleased_1_, double p_mouseReleased_3_, int p_mouseReleased_5_) { + if (!showShaderList) return false; + return super.mouseReleased(p_mouseReleased_1_, p_mouseReleased_3_, p_mouseReleased_5_); + } + + @Override + public boolean mouseDragged(double p_mouseDragged_1_, double p_mouseDragged_3_, int p_mouseDragged_5_, double p_mouseDragged_6_, double p_mouseDragged_8_) { + if (!showShaderList) return false; + return super.mouseDragged(p_mouseDragged_1_, p_mouseDragged_3_, p_mouseDragged_5_, p_mouseDragged_6_, p_mouseDragged_8_); + } + + @Override + public boolean mouseScrolled(double p_mouseScrolled_1_, double p_mouseScrolled_3_, double p_mouseScrolled_5_) { + if (!showShaderList) return false; + return super.mouseScrolled(p_mouseScrolled_1_, p_mouseScrolled_3_, p_mouseScrolled_5_); + } + + @Override + public boolean isMouseOver(double p_isMouseOver_1_, double p_isMouseOver_3_) { + if (!showShaderList) return false; + return super.isMouseOver(p_isMouseOver_1_, p_isMouseOver_3_); + } + + protected boolean isFocused() { + return PlayerSettingsGui.this.getFocused() == this; + } + + @Override + protected int getScrollbarPosition() { + return right - 6; + } + + @OnlyIn(Dist.CLIENT) + public class ShaderTypeEntry extends ExtendedList.AbstractListEntry { + private final ShaderType shaderType; + + public ShaderTypeEntry(ShaderType shaderType) { + this.shaderType = shaderType; + } + + public void render(int itemIndex, int rowTop, int rowLeft, int rowWidth, int rowHeight, int mouseX, int mouseY, boolean hovered, float partialTicks) { + if (rowTop + 10 > ShaderTypeList.this.y0 && rowTop + rowHeight - 5 < ShaderTypeList.this.y1) + drawString(font, shaderType.name, ShaderTypeList.this.x0 + 8, rowTop + 4, 0xFFFFFF); + } + + @Override + public boolean mouseClicked(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_) { + if (p_mouseClicked_5_ == 0) { + setSelected(this); + return true; + } else { + return false; + } + } + } + + //From AbstractList, disabled parts + public void render(int p_render_1_, int p_render_2_, float p_render_3_) { + this.renderBackground(); + int i = this.getScrollbarPosition(); + int j = i + 6; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); +// this.minecraft.getTextureManager().bindTexture(AbstractGui.BACKGROUND_LOCATION); + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); + RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + float f = 32.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos((double)this.x0, (double)this.y1, 0.0D).color(20, 20, 20, 180).endVertex(); + bufferbuilder.pos((double)this.x1, (double)this.y1, 0.0D).color(20, 20, 20, 180).endVertex(); + bufferbuilder.pos((double)this.x1, (double)this.y0, 0.0D).color(20, 20, 20, 180).endVertex(); + bufferbuilder.pos((double)this.x0, (double)this.y0, 0.0D).color(20, 20, 20, 180).endVertex(); + tessellator.draw(); + int k = this.getRowLeft(); + int l = this.y0 + 4 - (int)this.getScrollAmount(); + if (this.renderHeader) { + this.renderHeader(k, l, tessellator); + } + + this.renderList(k, l, p_render_1_, p_render_2_, p_render_3_); + RenderSystem.disableDepthTest(); +// this.renderHoleBackground(0, this.y0, 255, 255); +// this.renderHoleBackground(this.y1, this.height, 255, 255); + RenderSystem.enableBlend(); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); + RenderSystem.disableAlphaTest(); + RenderSystem.shadeModel(7425); + RenderSystem.disableTexture(); +// int i1 = 4; +// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); +// bufferbuilder.pos((double)this.x0, (double)(this.y0 + 4), 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 0).endVertex(); +// bufferbuilder.pos((double)this.x1, (double)(this.y0 + 4), 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 0).endVertex(); +// bufferbuilder.pos((double)this.x1, (double)this.y0, 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); +// bufferbuilder.pos((double)this.x0, (double)this.y0, 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); +// tessellator.draw(); +// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); +// bufferbuilder.pos((double)this.x0, (double)this.y1, 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 255).endVertex(); +// bufferbuilder.pos((double)this.x1, (double)this.y1, 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 255).endVertex(); +// bufferbuilder.pos((double)this.x1, (double)(this.y1 - 4), 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 0).endVertex(); +// bufferbuilder.pos((double)this.x0, (double)(this.y1 - 4), 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 0).endVertex(); +// tessellator.draw(); + + //SCROLLBAR + int j1 = this.getMaxScroll(); + if (j1 > 0) { + int k1 = (int)((float)((this.y1 - this.y0) * (this.y1 - this.y0)) / (float)this.getMaxPosition()); + k1 = MathHelper.clamp(k1, 32, this.y1 - this.y0 - 8); + int l1 = (int)this.getScrollAmount() * (this.y1 - this.y0 - k1) / j1 + this.y0; + if (l1 < this.y0) { + l1 = this.y0; + } + + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)i, (double)this.y1, 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)j, (double)this.y1, 0.0D).tex(1.0F, 1.0F).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)j, (double)this.y0, 0.0D).tex(1.0F, 0.0F).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)i, (double)this.y0, 0.0D).tex(0.0F, 0.0F).color(0, 0, 0, 255).endVertex(); + tessellator.draw(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)i, (double)(l1 + k1), 0.0D).tex(0.0F, 1.0F).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)j, (double)(l1 + k1), 0.0D).tex(1.0F, 1.0F).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)j, (double)l1, 0.0D).tex(1.0F, 0.0F).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)i, (double)l1, 0.0D).tex(0.0F, 0.0F).color(128, 128, 128, 255).endVertex(); + tessellator.draw(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)i, (double)(l1 + k1 - 1), 0.0D).tex(0.0F, 1.0F).color(192, 192, 192, 255).endVertex(); + bufferbuilder.pos((double)(j - 1), (double)(l1 + k1 - 1), 0.0D).tex(1.0F, 1.0F).color(192, 192, 192, 255).endVertex(); + bufferbuilder.pos((double)(j - 1), (double)l1, 0.0D).tex(1.0F, 0.0F).color(192, 192, 192, 255).endVertex(); + bufferbuilder.pos((double)i, (double)l1, 0.0D).tex(0.0F, 0.0F).color(192, 192, 192, 255).endVertex(); + tessellator.draw(); + } + +// this.renderDecorations(p_render_1_, p_render_2_); + RenderSystem.enableTexture(); + RenderSystem.shadeModel(7424); + RenderSystem.enableAlphaTest(); + RenderSystem.disableBlend(); + } + + private int getMaxScroll() { + return Math.max(0, this.getMaxPosition() - (this.y1 - this.y0 - 4)); + } + } +} diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java index f4d81e2..345f1c6 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmode/RadialMenu.java @@ -6,6 +6,7 @@ import java.util.concurrent.TimeUnit; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.KeyBinding; import net.minecraft.util.Direction; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextFormatting; @@ -171,8 +172,9 @@ public class RadialMenu extends Screen { //Add actions buttons.add(new MenuButton(ActionEnum.UNDO.name, ActionEnum.UNDO, -buttonDistance - 26, -13, Direction.UP)); buttons.add(new MenuButton(ActionEnum.REDO.name, ActionEnum.REDO, -buttonDistance, -13, Direction.UP)); - buttons.add(new MenuButton(ActionEnum.OPEN_MODIFIER_SETTINGS.name, ActionEnum.OPEN_MODIFIER_SETTINGS, -buttonDistance - 26, 13, Direction.DOWN)); - buttons.add(new MenuButton(ActionEnum.REPLACE.name, ActionEnum.REPLACE, -buttonDistance, 13, Direction.DOWN)); + buttons.add(new MenuButton(ActionEnum.OPEN_PLAYER_SETTINGS.name, ActionEnum.OPEN_PLAYER_SETTINGS, -buttonDistance - 26 - 13, 13, Direction.DOWN)); + buttons.add(new MenuButton(ActionEnum.OPEN_MODIFIER_SETTINGS.name, ActionEnum.OPEN_MODIFIER_SETTINGS, -buttonDistance - 13, 13, Direction.DOWN)); + buttons.add(new MenuButton(ActionEnum.REPLACE.name, ActionEnum.REPLACE, -buttonDistance + 13, 13, Direction.DOWN)); //Add buildmode dependent options OptionEnum[] options = currentBuildMode.options; @@ -473,16 +475,16 @@ public class RadialMenu extends Screen { public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { EffortlessBuilding.log("mouse clicked"); -// KeyBinding.updateKeyBindState(); -// KeyBinding.setKeyBindState(ClientProxy.keyBindings[3].getKeyCode(), true); + KeyBinding.updateKeyBindState(); + KeyBinding.setKeyBindState(ClientProxy.keyBindings[3].getKey(), true); -// if (mouseButton == 0) { -// this.mc.displayGuiScreen(null); -// -// if (this.mc.currentScreen == null) { -// this.mc.setIngameFocus(); -// } -// } + if (mouseButton == 0) { + this.minecraft.displayGuiScreen(null); + + if (this.minecraft.currentScreen == null) { + this.minecraft.setGameFocused(true); + } + } return super.mouseClicked(mouseX, mouseY, mouseButton); } diff --git a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifierSettingsGui.java b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifierSettingsGui.java index 78f23ce..318785b 100644 --- a/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifierSettingsGui.java +++ b/src/main/java/nl/requios/effortlessbuilding/gui/buildmodifier/ModifierSettingsGui.java @@ -137,7 +137,6 @@ public class ModifierSettingsGui extends Screen { //Send to server PacketHandler.INSTANCE.sendToServer(new ModifierSettingsMessage(modifierSettings)); - //TODO fix not being able to scroll after this gui has opened Minecraft.getInstance().mouseHelper.grabMouse(); } diff --git a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java index e37a842..76f2ff2 100644 --- a/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java +++ b/src/main/java/nl/requios/effortlessbuilding/proxy/ClientProxy.java @@ -41,6 +41,7 @@ import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.compatibility.CompatHelper; import nl.requios.effortlessbuilding.gui.RandomizerBagScreen; +import nl.requios.effortlessbuilding.gui.buildmode.PlayerSettingsGui; import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu; import nl.requios.effortlessbuilding.gui.buildmodifier.ModifierSettingsGui; import nl.requios.effortlessbuilding.helper.ReachHelper; @@ -68,9 +69,6 @@ public class ClientProxy implements IProxy { @Override public void clientSetup(FMLClientSetupEvent event) { - //Crashes in 1.13, do it elsewhere -// ShaderHandler.init(); - // register key bindings keyBindings = new KeyBinding[7]; @@ -337,6 +335,20 @@ public class ClientProxy implements IProxy { } } + public static void openPlayerSettings() { + Minecraft mc = Minecraft.getInstance(); + ClientPlayerEntity player = mc.player; + + RadialMenu.instance.setVisibility(0f); + + //Disabled if max reach is 0, might be set in the config that way. + if (mc.currentScreen == null) { + mc.displayGuiScreen(new PlayerSettingsGui()); + } else { + player.closeScreen(); + } + } + @SubscribeEvent public static void onGuiOpen(GuiOpenEvent event) { PlayerEntity player = Minecraft.getInstance().player; diff --git a/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java b/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java index 69d039e..752b688 100644 --- a/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/render/RenderHandler.java @@ -143,7 +143,9 @@ public class RenderHandler { net.minecraftforge.client.ForgeHooksClient.drawScreen(RadialMenu.instance, mouseX, mouseY, event.getPartialTicks()); } else { - if (wasVisible && RadialMenu.instance.doAction != ModeOptions.ActionEnum.OPEN_MODIFIER_SETTINGS) { + if (wasVisible && + RadialMenu.instance.doAction != ModeOptions.ActionEnum.OPEN_MODIFIER_SETTINGS && + RadialMenu.instance.doAction != ModeOptions.ActionEnum.OPEN_PLAYER_SETTINGS) { mc.mouseHelper.grabMouse(); } } diff --git a/src/main/resources/assets/effortlessbuilding/lang/en_us.json b/src/main/resources/assets/effortlessbuilding/lang/en_us.json index bc6d7cb..3a74bbc 100644 --- a/src/main/resources/assets/effortlessbuilding/lang/en_us.json +++ b/src/main/resources/assets/effortlessbuilding/lang/en_us.json @@ -2,6 +2,7 @@ "effortlessbuilding.screen.modifier_settings": "Modifier Settings", "effortlessbuilding.screen.radial_menu": "Build Modes", "effortlessbuilding.screen.randomizer_bag": "Randomizer Bag", + "effortlessbuilding.screen.player_settings": "Player Settings", "key.effortlessbuilding.category": "Effortless Building", "key.effortlessbuilding.hud.desc": "Modifier Menu", @@ -34,6 +35,7 @@ "effortlessbuilding.action.redo": "Redo", "effortlessbuilding.action.replace": "Replace", "effortlessbuilding.action.open_modifier_settings": "Open Modifier Settings", + "effortlessbuilding.action.open_player_settings": "Open Settings", "effortlessbuilding.action.build_speed": "Build Speed", "effortlessbuilding.action.filling": "Filling", diff --git a/src/main/resources/assets/effortlessbuilding/textures/icons/open_player_settings.png b/src/main/resources/assets/effortlessbuilding/textures/icons/open_player_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..2bdf91eb7c52028a83161b8dcf906b9e81dea511 GIT binary patch literal 1290 zcmV+l1@-!gP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O?N$w(}?mfd8|KS%QH0u^f$h&bxzI{-7~wliud0 z_r6n4qag^$gQkW0@1F+$=!cB6V8sU)oiqBe(MC!-2xk4PJsLZ%^Tuq0gB72GLD zQ;za=?nZ`A)HctD2QBU{UUJu339Z$2b;&x-l!LjbZ7E}IHgft;x*mI?EQLkwYqm%1b)lwkXW=>_~ zcQkma8}kH~m7t6?2VGz?c{Py*AGO7UGpn8$3$xtOmuWy#q`pOiK~@6BAqzS*p2#C= z9)t2p8ac70tOQVm3PMvh%ueA1>b`Z3$DvC?t5}Z~1tIL%D;nJ>3d>s2`tdes4JBc* zARQngj8tGqx&1=prf1QUb%fi zt)%fr;Q^@c!k$yZ4fwPi*M=TZw7j`BE$q@g zmURaFB9{7W6y828F%6;Nn#(@4v<)#GLW8$1Ziln39L`JM6kAH^<`P>Jr#U*x?&S3t zj~@eFn&IMK^lbgg>zjZ^?8kzv`9+Ix%kF~pB0@Nas5A0L#_X^}wxOOa$A_~A!|B0U zgFKlC^IOu=>0-Zur`)&E^n@cmZ0XA16}Lzksq zC4IEC*Ybbfj&QXf^UK4h9doLGIBWp(vNx`3{jk~LCr8F%!|cia^aMMJHrw#+ZlrsM zG5q4ZKX`x-&il(Ae*Q}QUw=g0_>u7WyT9p=DgEmW{{h2%@}MO5!`uJ>00v@9M??Uy z0Q>;N$x}ae00009a7bBm000iZ000iZ0XPLyBme*a2XskIMF-;q9Tgo2;H_`F0002F zNkla=ZJn<}OBTZ^PhDRQf|s@5u! z&Hc}