Files
EaglercraftX-1.8-workspace/src/main/java/net/minecraft/client/gui/GuiButton.java

169 lines
5.9 KiB
Java
Raw Normal View History

2024-02-14 20:52:11 -08:00
package net.minecraft.client.gui;
import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*;
import net.lax1dude.eaglercraft.v1_8.Mouse;
import net.lax1dude.eaglercraft.v1_8.internal.EnumCursorType;
import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.audio.SoundHandler;
import net.minecraft.util.ResourceLocation;
/**+
* This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source code.
*
* Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!"
* Mod Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team
*
* EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, ayunami2000. All Rights Reserved.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
public class GuiButton extends Gui {
protected static final ResourceLocation buttonTextures = new ResourceLocation("textures/gui/widgets.png");
2024-04-20 19:58:35 -07:00
public int width;
public int height;
2024-02-14 20:52:11 -08:00
public int xPosition;
public int yPosition;
public String displayString;
public int id;
public boolean enabled;
public boolean visible;
protected boolean hovered;
public float fontScale = 1.0f;
public GuiButton(int buttonId, int x, int y, String buttonText) {
this(buttonId, x, y, 200, 20, buttonText);
}
public GuiButton(int buttonId, int x, int y, int widthIn, int heightIn, String buttonText) {
this.width = 200;
this.height = 20;
this.enabled = true;
this.visible = true;
this.id = buttonId;
this.xPosition = x;
this.yPosition = y;
this.width = widthIn;
this.height = heightIn;
this.displayString = buttonText;
}
/**+
* Returns 0 if the button is disabled, 1 if the mouse is NOT
* hovering over this button and 2 if it IS hovering over this
* button.
*/
protected int getHoverState(boolean mouseOver) {
byte b0 = 1;
if (!this.enabled) {
b0 = 0;
} else if (mouseOver) {
b0 = 2;
}
return b0;
}
/**+
* Draws this button to the screen.
*/
public void drawButton(Minecraft mc, int mouseX, int mouseY) {
if (this.visible) {
FontRenderer fontrenderer = mc.fontRendererObj;
mc.getTextureManager().bindTexture(buttonTextures);
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
this.hovered = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width
&& mouseY < this.yPosition + this.height;
if (this.enabled && this.hovered) {
Mouse.showCursor(EnumCursorType.HAND);
}
int i = this.getHoverState(this.hovered);
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, 1, 0);
GlStateManager.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 46 + i * 20, this.width / 2, this.height);
this.drawTexturedModalRect(this.xPosition + this.width / 2, this.yPosition, 200 - this.width / 2,
46 + i * 20, this.width / 2, this.height);
this.mouseDragged(mc, mouseX, mouseY);
int j = 14737632;
if (!this.enabled) {
j = 10526880;
} else if (this.hovered) {
j = 16777120;
}
if (fontScale == 1.0f) {
this.drawCenteredString(fontrenderer, this.displayString, this.xPosition + this.width / 2,
this.yPosition + (this.height - 8) / 2, j);
} else {
float xScale = fontScale;
float yScale = 1.0f + (fontScale - 1.0f) * 0.7f;
float strWidth = fontrenderer.getStringWidth(displayString) / xScale;
GlStateManager.pushMatrix();
GlStateManager.translate(this.xPosition + this.width / 2,
this.yPosition + (this.height - 8 * yScale) / 2, 1.0f);
GlStateManager.scale(xScale, yScale, 1.0f);
GlStateManager.translate(-strWidth * 0.5f * xScale, 0.0f, 0.0f);
fontrenderer.drawStringWithShadow(displayString, 0, 0, j);
GlStateManager.popMatrix();
}
}
}
/**+
* Fired when the mouse button is dragged. Equivalent of
* MouseListener.mouseDragged(MouseEvent e).
*/
protected void mouseDragged(Minecraft mc, int mouseX, int mouseY) {
}
/**+
* Fired when the mouse button is released. Equivalent of
* MouseListener.mouseReleased(MouseEvent e).
*/
public void mouseReleased(int mouseX, int mouseY) {
}
/**+
* Returns true if the mouse has been pressed on this control.
* Equivalent of MouseListener.mousePressed(MouseEvent e).
*/
public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) {
return this.enabled && this.visible && mouseX >= this.xPosition && mouseY >= this.yPosition
&& mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height;
}
/**+
* Whether the mouse cursor is currently over the button.
*/
public boolean isMouseOver() {
return this.hovered;
}
public void drawButtonForegroundLayer(int mouseX, int mouseY) {
}
public void playPressSound(SoundHandler soundHandlerIn) {
soundHandlerIn.playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F));
}
public int getButtonWidth() {
return this.width;
}
public void setWidth(int width) {
this.width = width;
}
}