From 3d18e837ec0ae99966eb40c4e82da99257cca265 Mon Sep 17 00:00:00 2001 From: Irtimaled Date: Sun, 17 Mar 2019 15:27:00 -0700 Subject: [PATCH] Isolate MC classes to fewer Gui classes --- .../bbor/client/gui/AbstractButton.java | 45 +++++++++++++ .../bbor/client/gui/AbstractSlider.java | 64 +++++++++++++++++++ .../bbor/client/gui/BoolSettingButton.java | 6 +- .../client/gui/BoundingBoxTypeButton.java | 3 +- .../com/irtimaled/bbor/client/gui/Button.java | 19 ------ .../bbor/client/gui/IntSettingSlider.java | 52 ++++----------- .../bbor/client/gui/MaxYSettingSlider.java | 5 +- .../bbor/client/gui/SettingsScreen.java | 55 ++++++++-------- .../bbor/client/gui/SettingsScreenButton.java | 9 ++- .../mixin/client/gui/MixinGuiOptions.java | 2 +- 10 files changed, 161 insertions(+), 99 deletions(-) create mode 100644 src/main/java/com/irtimaled/bbor/client/gui/AbstractButton.java create mode 100644 src/main/java/com/irtimaled/bbor/client/gui/AbstractSlider.java delete mode 100644 src/main/java/com/irtimaled/bbor/client/gui/Button.java diff --git a/src/main/java/com/irtimaled/bbor/client/gui/AbstractButton.java b/src/main/java/com/irtimaled/bbor/client/gui/AbstractButton.java new file mode 100644 index 0000000..2341991 --- /dev/null +++ b/src/main/java/com/irtimaled/bbor/client/gui/AbstractButton.java @@ -0,0 +1,45 @@ +package com.irtimaled.bbor.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; + +abstract class AbstractButton extends GuiButton implements IRenderableControl { + AbstractButton(int id, int x, int y, int width, String name) { + super(id, x, y, width, 20, name); + } + + AbstractButton(int id, int x, int y, int width, String name, boolean enabled) { + this(id, x, y, width, name); + this.enabled = enabled; + } + + @Override + public void render(int mouseX, int mouseY) { + super.render(mouseX, mouseY, 0f); + } + + @Override + protected void renderBg(Minecraft p_renderBg_1_, int p_renderBg_2_, int p_renderBg_3_) { + renderBackground(); + } + + protected void renderBackground() { + } + + @Override + protected int getHoverState(boolean p_getHoverState_1_) { + return getState(); + } + + protected int getState() { + return this.enabled ? this.hovered ? 2 : 1 : 0; + } + + @Override + public void onClick(double mouseX, double mouseY) { + super.onClick(mouseX, mouseY); + onPressed(); + } + + protected abstract void onPressed(); +} diff --git a/src/main/java/com/irtimaled/bbor/client/gui/AbstractSlider.java b/src/main/java/com/irtimaled/bbor/client/gui/AbstractSlider.java new file mode 100644 index 0000000..059ce94 --- /dev/null +++ b/src/main/java/com/irtimaled/bbor/client/gui/AbstractSlider.java @@ -0,0 +1,64 @@ +package com.irtimaled.bbor.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.util.math.MathHelper; +import org.lwjgl.opengl.GL11; + +abstract class AbstractSlider extends GuiButton implements IRenderableControl { + double progress; + + AbstractSlider(int id, int x, int y, int width) { + super(id, x, y, width, 20, ""); + } + + @Override + public void render(int mouseX, int mouseY) { + super.render(mouseX, mouseY, 0f); + } + + @Override + protected void renderBg(Minecraft minecraft, int mouseX, int mouseY) { + minecraft.getTextureManager().bindTexture(BUTTON_TEXTURES); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(this.x + (int) (this.progress * (double) (this.width - 8)), this.y, 0, 66, 4, 20); + this.drawTexturedModalRect(this.x + (int) (this.progress * (double) (this.width - 8)) + 4, this.y, 196, 66, 4, 20); + } + + boolean setProgress(double progress) { + progress = MathHelper.clamp(progress, 0d, 1d); + if (this.progress == progress) return false; + + this.progress = progress; + return true; + } + + private void changeProgress(double mouseX) { + double progress = (mouseX - (double) (this.x + 4)) / (double) (this.width - 8); + if (setProgress(progress)) { + onProgressChanged(); + } + updateText(); + } + + @Override + protected int getHoverState(boolean hovered) { + return 0; + } + + @Override + protected void onDrag(double mouseX, double mouseY, double deltaX, double deltaY) { + changeProgress(mouseX); + super.onDrag(mouseX, mouseY, deltaX, deltaY); + } + + @Override + public void onClick(double mouseX, double mouseY) { + changeProgress(mouseX); + super.onClick(mouseX, mouseY); + } + + protected abstract void updateText(); + + protected abstract void onProgressChanged(); +} diff --git a/src/main/java/com/irtimaled/bbor/client/gui/BoolSettingButton.java b/src/main/java/com/irtimaled/bbor/client/gui/BoolSettingButton.java index d0850ef..2a97868 100644 --- a/src/main/java/com/irtimaled/bbor/client/gui/BoolSettingButton.java +++ b/src/main/java/com/irtimaled/bbor/client/gui/BoolSettingButton.java @@ -2,7 +2,7 @@ package com.irtimaled.bbor.client.gui; import com.irtimaled.bbor.config.Setting; -public class BoolSettingButton extends Button { +public class BoolSettingButton extends AbstractButton { private final Setting setting; BoolSettingButton(int id, int x, int y, int width, String label, Setting setting) { @@ -11,12 +11,12 @@ public class BoolSettingButton extends Button { } @Override - protected int getHoverState(boolean p_getHoverState_1_) { + protected int getState() { return setting.get() ? 2 : 1; } @Override - public void onClick(double p_onClick_1_, double p_onClick_3_) { + public void onPressed() { setting.set(!setting.get()); } } diff --git a/src/main/java/com/irtimaled/bbor/client/gui/BoundingBoxTypeButton.java b/src/main/java/com/irtimaled/bbor/client/gui/BoundingBoxTypeButton.java index 496629d..8147016 100644 --- a/src/main/java/com/irtimaled/bbor/client/gui/BoundingBoxTypeButton.java +++ b/src/main/java/com/irtimaled/bbor/client/gui/BoundingBoxTypeButton.java @@ -1,7 +1,6 @@ package com.irtimaled.bbor.client.gui; import com.irtimaled.bbor.common.BoundingBoxType; -import net.minecraft.client.Minecraft; import java.awt.*; @@ -14,7 +13,7 @@ public class BoundingBoxTypeButton extends BoolSettingButton { } @Override - protected void renderBg(Minecraft p_renderBg_1_, int p_renderBg_2_, int p_renderBg_3_) { + protected void renderBackground() { int left = x + 1; int top = y + 1; int right = left + width - 2; diff --git a/src/main/java/com/irtimaled/bbor/client/gui/Button.java b/src/main/java/com/irtimaled/bbor/client/gui/Button.java deleted file mode 100644 index 2e76b65..0000000 --- a/src/main/java/com/irtimaled/bbor/client/gui/Button.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.irtimaled.bbor.client.gui; - -import net.minecraft.client.gui.GuiButton; - -class Button extends GuiButton implements IRenderableControl { - Button(int id, int x, int y, int width, String name) { - super(id, x, y, width, 20, name); - } - - Button(int id, int x, int y, int width, String name, boolean enabled) { - this(id, x,y,width,name); - this.enabled = enabled; - } - - @Override - public void render(int mouseX, int mouseY) { - super.render(mouseX, mouseY, 0f); - } -} diff --git a/src/main/java/com/irtimaled/bbor/client/gui/IntSettingSlider.java b/src/main/java/com/irtimaled/bbor/client/gui/IntSettingSlider.java index 2c60488..edc724f 100644 --- a/src/main/java/com/irtimaled/bbor/client/gui/IntSettingSlider.java +++ b/src/main/java/com/irtimaled/bbor/client/gui/IntSettingSlider.java @@ -1,39 +1,32 @@ package com.irtimaled.bbor.client.gui; import com.irtimaled.bbor.config.Setting; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.math.MathHelper; import java.util.HashMap; import java.util.Map; -class IntSettingSlider extends Button implements IRenderableControl { - private final int maxValue; +class IntSettingSlider extends AbstractSlider implements IRenderableControl { private final String prefix; - private boolean dragging; private Map displayValues = new HashMap<>(); final Setting setting; final int minValue; final int range; - double sliderValue; IntSettingSlider(int id, int x, int y, int width, int minValue, int maxValue, String prefix, Setting setting) { - super(id, x, y, width, ""); + super(id, x, y, width); this.setting = setting; this.minValue = minValue; - this.maxValue = maxValue; this.prefix = prefix; this.range = maxValue - minValue; - this.sliderValue = getSliderValue(); - this.displayString = getDisplayValue(); + this.setProgress(getSliderValue()); + this.updateText(); } IntSettingSlider addDisplayValue(int value, String displayValue) { displayValues.put(value, displayValue); - if(setting.get() == value) { - this.displayString = getDisplayValue(); + if (setting.get() == value) { + this.updateText(); } return this; } @@ -44,43 +37,20 @@ class IntSettingSlider extends Button implements IRenderableControl { } protected Integer getSettingValue() { - return MathHelper.clamp(minValue + (int) (range * sliderValue), minValue, maxValue); + return minValue + (int) (range * progress); } protected double getSliderValue() { - return MathHelper.clamp((setting.get() - minValue) / (double) range, 0d, 1d); + return (setting.get() - minValue) / (double) range; } @Override - protected int getHoverState(boolean p_getHoverState_1_) { - return 0; + protected void updateText() { + this.displayString = this.getDisplayValue(); } @Override - protected void renderBg(Minecraft minecraft, int mouseX, int mouseY) { - if (this.dragging) { - changeSlider(mouseX); - } - - minecraft.getTextureManager().bindTexture(BUTTON_TEXTURES); - GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); - this.drawTexturedModalRect(this.x + (int) (this.sliderValue * (double) (this.width - 8)), this.y, 0, 66, 4, 20); - this.drawTexturedModalRect(this.x + (int) (this.sliderValue * (double) (this.width - 8)) + 4, this.y, 196, 66, 4, 20); - } - - public final void onClick(double mouseX, double mouseY) { - changeSlider(mouseX); - this.dragging = true; - } - - private void changeSlider(double mouseX) { - double proportion = (mouseX - (double) (this.x + 4)) / (double) (this.width - 8); - this.sliderValue = MathHelper.clamp(proportion, 0d, 1d); + protected void onProgressChanged() { this.setting.set(this.getSettingValue()); - this.displayString = this.getDisplayValue(); - } - - public void onRelease(double p_onRelease_1_, double p_onRelease_3_) { - this.dragging = false; } } diff --git a/src/main/java/com/irtimaled/bbor/client/gui/MaxYSettingSlider.java b/src/main/java/com/irtimaled/bbor/client/gui/MaxYSettingSlider.java index c727991..e76b98e 100644 --- a/src/main/java/com/irtimaled/bbor/client/gui/MaxYSettingSlider.java +++ b/src/main/java/com/irtimaled/bbor/client/gui/MaxYSettingSlider.java @@ -1,7 +1,6 @@ package com.irtimaled.bbor.client.gui; import com.irtimaled.bbor.config.Setting; -import net.minecraft.util.math.MathHelper; class MaxYSettingSlider extends IntSettingSlider { private final int actualMinValue; @@ -9,7 +8,7 @@ class MaxYSettingSlider extends IntSettingSlider { MaxYSettingSlider(int id, int x, int y, int width, int minValue, Setting setting) { super(id, x, y, width, minValue - 2, 127, "Max Y", setting); this.actualMinValue = minValue; - this.sliderValue = getSliderValue(); + this.setProgress(getSliderValue()); this.addDisplayValue(-1, "Activated"); this.addDisplayValue(0, "Player"); this.addDisplayValue(63, "Sea Level"); @@ -29,6 +28,6 @@ class MaxYSettingSlider extends IntSettingSlider { if (value < actualMinValue) value = (value - 1) + actualMinValue; - return MathHelper.clamp((value - minValue) / (double) range, 0d, 1d); + return (value - minValue) / (double) range; } } diff --git a/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java b/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java index 7163f03..cbb0b82 100644 --- a/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java +++ b/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java @@ -8,9 +8,10 @@ import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.IGuiEventListener; import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import org.lwjgl.opengl.GL11; import java.util.HashSet; import java.util.Set; @@ -27,7 +28,6 @@ public class SettingsScreen extends GuiScreen { SettingsScreen(GuiScreen lastScreen, int tabIndex) { this.lastScreen = lastScreen; this.tabIndex = tabIndex; - } public static void show() { @@ -52,8 +52,9 @@ public class SettingsScreen extends GuiScreen { for (String label : labels) { final int index = column; addControl(0, column, y, CONTROLS_WIDTH / columns, - (id, x, y1, width) -> new Button(id, x, y, width, label, index != tabIndex) { - public void onClick(double p_onClick_1_, double p_onClick_3_) { + (id, x, y1, width) -> new AbstractButton(id, x, y, width, label, index != tabIndex) { + @Override + public void onPressed() { Minecraft.getInstance().displayGuiScreen(new SettingsScreen(lastScreen, index)); } }); @@ -61,8 +62,9 @@ public class SettingsScreen extends GuiScreen { } //done button - addControl(new Button(200, this.width / 2 - 100, getY(5.5), 200, "Done") { - public void onClick(double p_onClick_1_, double p_onClick_3_) { + addControl(new AbstractButton(200, this.width / 2 - 100, getY(5.5), 200, "Done") { + @Override + public void onPressed() { ConfigManager.saveConfig(); mc.displayGuiScreen(lastScreen); } @@ -83,7 +85,7 @@ public class SettingsScreen extends GuiScreen { } private void buildTab(int tabIndex, CreateControl... createControls) { - if(tabIndex != this.tabIndex) return; + if (tabIndex != this.tabIndex) return; int offset = 4; int width = (CONTROLS_WIDTH - (2 * offset)) / 3; @@ -116,12 +118,14 @@ public class SettingsScreen extends GuiScreen { this.addTabs("General", "Structures", "Villages"); buildTab(0, - (id, x, y, width) -> new Button(id, x, y, width, "Active", this.mc.world != null) { - public void onClick(double p_onClick_1_, double p_onClick_3_) { + (id, x, y, width) -> new AbstractButton(id, x, y, width, "Active", this.mc.world != null) { + @Override + public void onPressed() { ClientProxy.toggleActive(); } - protected int getHoverState(boolean p_getHoverState_1_) { + @Override + protected int getState() { return enabled ? ClientProxy.active ? 2 : 1 : 0; } }, @@ -180,11 +184,11 @@ public class SettingsScreen extends GuiScreen { BufferBuilder bufferBuilder = tessellator.getBuffer(); this.mc.getTextureManager().bindTexture(Gui.OPTIONS_BACKGROUND); - GlStateManager.disableLighting(); - GlStateManager.disableFog(); - GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_FOG); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - bufferBuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR); bufferBuilder.pos((double) 0, (double) bottom, 0.0D) .tex((double) ((float) 0 / 32.0F), (double) ((float) bottom / 32.0F)) .color(32, 32, 32, 255) @@ -203,12 +207,13 @@ public class SettingsScreen extends GuiScreen { .endVertex(); tessellator.draw(); - GlStateManager.disableDepthTest(); - GlStateManager.enableBlend(); - GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); - GlStateManager.disableAlphaTest(); - GlStateManager.shadeModel(7425); - GlStateManager.disableTexture2D(); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ZERO, GL11.GL_ONE); + + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glShadeModel(7425); + GL11.glDisable(GL11.GL_TEXTURE_2D); bufferBuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); bufferBuilder.pos((double) 0, (double) (top + 4), 0.0D) @@ -248,15 +253,15 @@ public class SettingsScreen extends GuiScreen { .endVertex(); tessellator.draw(); - GlStateManager.enableTexture2D(); - GlStateManager.shadeModel(7424); - GlStateManager.enableAlphaTest(); - GlStateManager.disableBlend(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(7424); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); } @Override public void render(int mouseX, int mouseY, float unknown) { - if(this.mc.world == null) { + if (this.mc.world == null) { this.drawDefaultBackground(); this.drawScreen(getY(-1), getY(5.5) - 4); } diff --git a/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreenButton.java b/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreenButton.java index ef8f8fd..d9dd003 100644 --- a/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreenButton.java +++ b/src/main/java/com/irtimaled/bbor/client/gui/SettingsScreenButton.java @@ -1,19 +1,18 @@ package com.irtimaled.bbor.client.gui; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; -public class SettingsScreenButton extends GuiButton { +public class SettingsScreenButton extends AbstractButton { private final SettingsScreen screen; - public SettingsScreenButton(int id, int x, int y, int height, int width, String label, GuiScreen lastScreen) { - super(id, x, y, height, width, label); + public SettingsScreenButton(int id, int x, int y, int width, String label, GuiScreen lastScreen) { + super(id, x, y, width, label); screen = new SettingsScreen(lastScreen, 0); } @Override - public void onClick(double p_onClick_1_, double p_onClick_3_) { + public void onPressed() { Minecraft.getInstance().displayGuiScreen(screen); } } diff --git a/src/main/java/com/irtimaled/bbor/mixin/client/gui/MixinGuiOptions.java b/src/main/java/com/irtimaled/bbor/mixin/client/gui/MixinGuiOptions.java index dac769c..b9e31f2 100644 --- a/src/main/java/com/irtimaled/bbor/mixin/client/gui/MixinGuiOptions.java +++ b/src/main/java/com/irtimaled/bbor/mixin/client/gui/MixinGuiOptions.java @@ -19,6 +19,6 @@ public class MixinGuiOptions extends GuiScreen { if (button.id != 200 && button.y >= top) button.y -= 12; } - this.addButton(new SettingsScreenButton(200, this.width / 2 - 155, top + 84, 150, 20, "BBOR", this)); + this.addButton(new SettingsScreenButton(200, this.width / 2 - 155, top + 84, 150, "BBOR", this)); } } -- 2.44.0