package choonster.testmod3.client.gui;
import choonster.testmod3.TestMod3;
import choonster.testmod3.api.capability.lock.ILock;
import choonster.testmod3.network.MessageLockSetLockCode;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.client.resources.I18n;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import org.lwjgl.input.Keyboard;
import javax.annotation.Nullable;
import java.io.IOException;
/**
* Allows a player to lock an {@link ILock}.
*
* @author Choonster
*/
public class GuiLock extends GuiScreen {
/**
* The lock.
*/
private final ILock lock;
/**
* The position.
*/
private final BlockPos pos;
/**
* The facing.
*/
private final EnumFacing facing;
/**
* The lock code text field.
*/
private GuiTextField lockCodeTextField;
private GuiButton doneButton;
private GuiButton cancelButton;
public GuiLock(ILock lock, BlockPos pos, @Nullable EnumFacing facing) {
this.lock = lock;
this.pos = pos;
this.facing = facing;
}
@Override
public void updateScreen() {
lockCodeTextField.updateCursorCounter();
}
@Override
public void initGui() {
Keyboard.enableRepeatEvents(true);
buttonList.clear();
doneButton = addButton(new GuiButton(0, width / 2 - 4 - 150, height / 4 + 120 + 12, 150, 20, I18n.format("gui.done")));
cancelButton = addButton(new GuiButton(1, width / 2 + 4, height / 4 + 120 + 12, 150, 20, I18n.format("gui.cancel")));
lockCodeTextField = new GuiTextField(2, fontRenderer, width / 2 - 150, 50, 300, 20);
lockCodeTextField.setMaxStringLength(32500);
lockCodeTextField.setFocused(true);
}
@Override
public void onGuiClosed() {
Keyboard.enableRepeatEvents(false);
}
@Override
protected void actionPerformed(GuiButton button) throws IOException {
if (button.enabled) {
if (button.id == 0) {
TestMod3.network.sendToServer(new MessageLockSetLockCode(pos, facing, lockCodeTextField.getText()));
mc.displayGuiScreen(null);
} else if (button.id == 1) {
mc.displayGuiScreen(null);
}
}
}
@Override
protected void keyTyped(char typedChar, int keyCode) throws IOException {
lockCodeTextField.textboxKeyTyped(typedChar, keyCode);
if (keyCode == Keyboard.KEY_ESCAPE) {
actionPerformed(cancelButton);
} else if (keyCode == Keyboard.KEY_RETURN || keyCode == Keyboard.KEY_NUMPADENTER) {
actionPerformed(doneButton);
}
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
super.mouseClicked(mouseX, mouseY, mouseButton);
lockCodeTextField.mouseClicked(mouseX, mouseY, mouseButton);
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
drawDefaultBackground();
drawCenteredString(fontRenderer, I18n.format("testmod3:lock.set_lock_code"), width / 2, 20, 0xffffff);
drawString(fontRenderer, I18n.format("testmod3:lock.lock_code"), width / 2 - 150, 37, 0xa0a0a0);
lockCodeTextField.drawTextBox();
drawString(fontRenderer, "", width / 2 - 150, 75 * fontRenderer.FONT_HEIGHT, 0xa0a0a0);
super.drawScreen(mouseX, mouseY, partialTicks);
}
}