package openblocks.client.gui; import com.google.common.base.Joiner; import com.google.common.base.Strings; import java.awt.Desktop; import java.io.IOException; import java.net.URI; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiConfirmOpenLink; import net.minecraft.client.gui.GuiYesNoCallback; import openblocks.common.container.ContainerDonationStation; import openblocks.common.tileentity.TileEntityDonationStation; import openmods.Log; import openmods.gui.BaseGuiContainer; import openmods.gui.component.BaseComponent; import openmods.gui.component.GuiComponentLabel; import openmods.gui.component.GuiComponentTextButton; import openmods.gui.listener.IMouseDownListener; public class GuiDonationStation extends BaseGuiContainer<ContainerDonationStation> implements GuiYesNoCallback { private final int PROMPT_REPLY_ACTION = 0; private URI displayedURI = null; private GuiComponentLabel lblModName; private GuiComponentTextButton buttonDonate; private GuiComponentLabel lblAuthors; public GuiDonationStation(ContainerDonationStation container) { super(container, 176, 172, "openblocks.gui.donationstation"); root.addComponent((lblModName = new GuiComponentLabel(55, 31, 100, 10, ""))); root.addComponent((lblAuthors = new GuiComponentLabel(55, 42, 200, 18, "").setScale(0.5f))); root.addComponent((buttonDonate = new GuiComponentTextButton(31, 60, 115, 13, 0xFFFFFF)).setText("Donate to the author")); buttonDonate.setListener(new IMouseDownListener() { @Override public void componentMouseDown(BaseComponent component, int x, int y, int button) { if (!buttonDonate.isButtonEnabled()) return; String donationUrl = getContainer().getOwner().getDonationUrl(); if (Strings.isNullOrEmpty(donationUrl)) return; URI uri = URI.create(donationUrl); if (Minecraft.getMinecraft().gameSettings.chatLinksPrompt) { displayedURI = uri; mc.displayGuiScreen(new GuiConfirmOpenLink(GuiDonationStation.this, displayedURI.toString(), PROMPT_REPLY_ACTION, false)); } else { openURI(uri); } } }); } @Override public void preRender(float mouseX, float mouseY) { super.preRender(mouseX, mouseY); final TileEntityDonationStation owner = getContainer().getOwner(); if (owner.hasItem()) { String donateUrl = owner.getDonationUrl(); buttonDonate.setButtonEnabled(!Strings.isNullOrEmpty(donateUrl)); String name = owner.getModName(); lblModName.setText(Strings.isNullOrEmpty(name)? "Vanilla / Unknown" : name); List<String> authors = owner.getModAuthors(); lblAuthors.setText(authors == null? "" : Joiner.on(",").join(authors)); } else { buttonDonate.setButtonEnabled(false); lblModName.setText(""); lblAuthors.setText(""); } } @Override public void postRender(int mouseX, int mouseY) { super.postRender(mouseX, mouseY); if (lblAuthors.isOverflowing()) { lblAuthors.setTooltip(lblAuthors.getFormattedText(fontRendererObj)); } else { lblAuthors.clearTooltip(); } } private static void openURI(URI uri) { try { Desktop.getDesktop().browse(uri); } catch (IOException e) { Log.info(e, "Failed to open uri %s", uri); } } @Override public void confirmClicked(boolean result, int action) { if (action == PROMPT_REPLY_ACTION && result) { openURI(this.displayedURI); this.displayedURI = null; } this.mc.displayGuiScreen(this); } }