/**
* This file is part of JukeIt
*
* Copyright (C) 2011-2013 Chris Churchwell
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.chrischurchwell.jukeit.gui.machine;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import org.getspout.spoutapi.block.SpoutBlock;
import org.getspout.spoutapi.event.screen.ScreenCloseEvent;
import org.getspout.spoutapi.gui.ContainerType;
import org.getspout.spoutapi.gui.GenericContainer;
import org.getspout.spoutapi.gui.GenericPopup;
import org.getspout.spoutapi.gui.GenericSlot;
import org.getspout.spoutapi.gui.GenericTextField;
import org.getspout.spoutapi.gui.GenericTexture;
import org.getspout.spoutapi.gui.RenderPriority;
import org.getspout.spoutapi.gui.WidgetAnchor;
import org.getspout.spoutapi.inventory.SpoutItemStack;
import org.getspout.spoutapi.player.SpoutPlayer;
import com.chrischurchwell.jukeit.JukeIt;
import com.chrischurchwell.jukeit.gui.DiscSlot;
import com.chrischurchwell.jukeit.gui.PlayerInventorySlot;
import com.chrischurchwell.jukeit.material.items.BurnedDisc;
import com.chrischurchwell.jukeit.util.Debug;
public class MachineGUI extends GenericPopup {
protected GenericContainer labelContainer;
private GenericTexture paperTexture;
private MachineStartButton startButton;
private Player player;
private Block block;
private DiscSlot discSlot;
private GenericSlot discAddSlot;
public MachineGUI(Player player, Block block) {
this.player = player;
this.block = block;
GenericTexture border = new GenericTexture("machinegui.png");
border.setX(-88).setY(-83);
border.setPriority(RenderPriority.Highest);
border.setWidth(176).setHeight(166);
border.setFixed(true);
border.setAnchor(WidgetAnchor.CENTER_CENTER);
paperTexture = new GenericTexture("paper.png");
paperTexture.setPriority(RenderPriority.Low);
paperTexture.setWidth(256).setHeight(128);
paperTexture.setFixed(true);
paperTexture.setAnchor(WidgetAnchor.CENTER_CENTER);
paperTexture.setX(-126).setY(-64);
paperTexture.setVisible(false);
discSlot = new DiscSlot();
discSlot.setX(19).setY(-34);
discSlot.setWidth(16).setHeight(16);
discSlot.setPriority(RenderPriority.Normal);
discSlot.setFixed(true);
discSlot.setAnchor(WidgetAnchor.CENTER_CENTER);
discAddSlot = new GenericSlot();
discAddSlot.setX(-35).setY(-63);
discAddSlot.setWidth(16).setHeight(16);
discAddSlot.setPriority(RenderPriority.Normal);
discAddSlot.setFixed(true);
discAddSlot.setAnchor(WidgetAnchor.CENTER_CENTER);
// Select button
startButton = new MachineStartButton((SpoutPlayer)player, (SpoutBlock) block, discSlot, discAddSlot);
startButton.setX(-60).setY(-35);
startButton.setWidth(60).setHeight(20);
startButton.setPriority(RenderPriority.Normal);
startButton.setFixed(true);
startButton.setAnchor(WidgetAnchor.CENTER_CENTER);
createLabelWriter();
hideLabelWriter();
hideStartButton();
this.setTransparent(true);
this.attachWidgets(JukeIt.getInstance(), border, paperTexture, discAddSlot, discSlot, startButton);
Inventory inventory = player.getInventory();
int xposition = 0;
int yposition = 58;
//i know theres some kind of cool math equation to do this, but i cant remember how to figure it out. doin it the cheap way
for (int i = 0; i < 36; i++) {
PlayerInventorySlot slot = new PlayerInventorySlot(player, i);
if (xposition == 9) xposition = 0;
if (i > 8) yposition = 0;
if (i > 17) yposition = 18;
if (i > 26) yposition = 36;
slot.setY(1 + yposition);
slot.setX(-80 + (xposition*18));
slot.setWidth(16).setHeight(16);
slot.setPriority(RenderPriority.Normal);
slot.setFixed(true);
slot.setAnchor(WidgetAnchor.CENTER_CENTER);
slot.setItem(inventory.getItem(i));
this.attachWidget(JukeIt.getInstance(), slot);
xposition++;
}
}
protected void createLabelWriter() {
if (this.labelContainer != null) {
return;
}
labelContainer = new GenericContainer();
labelContainer.setAnchor(WidgetAnchor.CENTER_CENTER);
labelContainer.setPriority(RenderPriority.Lowest);
labelContainer.setAlign(WidgetAnchor.CENTER_CENTER);
labelContainer.setWidth(256);
labelContainer.setHeight(64);
labelContainer.setX(-128);
labelContainer.setY(-64);
GenericContainer bContainer = new GenericContainer();
bContainer.setLayout(ContainerType.HORIZONTAL);
bContainer.setAlign(WidgetAnchor.CENTER_CENTER);
bContainer.setWidth(256);
bContainer.setHeight(30);
GenericTextField labelInput = new GenericTextField();
labelInput.setMaximumCharacters(500);
labelInput.setHeight(15).setWidth(200);
//labelInput.setY(25);
//labelInput.setX(5);
labelInput.setMaximumLines(1);
labelInput.setFocus(true);
labelInput.setPriority(RenderPriority.Lowest);
labelInput.setFixed(true);
labelInput.setMarginTop(20);
labelContainer.addChild(labelInput);
MachineLabelButton button = new MachineLabelButton((SpoutPlayer)player, (SpoutBlock) block, discSlot, discAddSlot, labelInput);
//button.setY(45).setX(5);
button.setWidth(75).setHeight(20);
//button.setAnchor(WidgetAnchor.BOTTOM_CENTER);
button.setPriority(RenderPriority.Lowest);
button.setFixed(true);
bContainer.addChild(button);
LabelCloseButton cancel = new LabelCloseButton(this);
//button.setY(45).setX(5);
cancel.setWidth(75).setHeight(20);
//button.setAnchor(WidgetAnchor.BOTTOM_CENTER);
cancel.setPriority(RenderPriority.Lowest);
cancel.setFixed(true);
bContainer.addChild(cancel);
labelContainer.addChild(bContainer);
labelContainer.setVisible(false);
this.attachWidget(JukeIt.getInstance(), labelContainer);
}
public void showStartButton() {
startButton.setVisible(true);
}
public void hideStartButton() {
startButton.setVisible(false);
}
public void showLabelWriter() {
if (player.getItemOnCursor() != null && !player.getItemOnCursor().getType().equals(Material.AIR) ) {
tossItem((SpoutPlayer) player, player.getItemOnCursor());
player.setItemOnCursor(new ItemStack(Material.AIR));
}
paperTexture.setVisible(true);
labelContainer.setVisible(true);
}
public void cancelLabelWriter() {
player.setItemOnCursor(this.discAddSlot.getItem());
this.discAddSlot.setItem(new ItemStack(Material.AIR));
hideLabelWriter();
}
public void hideLabelWriter() {
paperTexture.setVisible(false);
labelContainer.setVisible(false);
}
@Override
public void onScreenClose(ScreenCloseEvent event) {
Debug.debug("MachineGUI:onScreenClose");
//if any items are in the slots we should give them back to the player.
if (
this.discSlot.getItem() != null &&
!this.discSlot.getItem().getType().equals(Material.AIR)
) {
tossItem(event.getPlayer(), discSlot.getItem());
}
if (
this.discAddSlot.getItem() != null &&
!this.discAddSlot.getItem().getType().equals(Material.AIR)
) {
tossItem(event.getPlayer(), discAddSlot.getItem());
}
}
@Override
public void handleItemOnCursor(org.bukkit.inventory.ItemStack itemOnCursor) {
if (
itemOnCursor != null &&
!itemOnCursor.getType().equals(Material.AIR)
) {
tossItem((SpoutPlayer) player, itemOnCursor);
}
}
@Override
public void onTick() {
SpoutItemStack sItem = new SpoutItemStack(this.discSlot.getItem());
if (
this.discAddSlot.getItem().getType().equals(Material.PAPER) &&
(sItem.isCustomItem() && sItem.getMaterial() instanceof BurnedDisc)
) {
showLabelWriter();
hideStartButton();
} else if (
!this.discSlot.getItem().getType().equals(Material.AIR) &&
!this.discAddSlot.getItem().getType().equals(Material.AIR)
){
hideLabelWriter();
showStartButton();
} else {
hideLabelWriter();
hideStartButton();
}
super.onTick();
}
private void tossItem(SpoutPlayer player, ItemStack dropItem) {
Location loc = player.getLocation();
loc.setY(loc.getY() + 1);
Item item = loc.getWorld().dropItem(loc, dropItem);
Vector v = loc.getDirection().multiply(0.2);
v.setY(0.2);
item.setVelocity(v);
}
}