Skip to content

Instantly share code, notes, and snippets.

@aikar
Created July 14, 2014 04:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aikar/b3c7c5556f1d8a5d52e9 to your computer and use it in GitHub Desktop.
Save aikar/b3c7c5556f1d8a5d52e9 to your computer and use it in GitHub Desktop.
diff --git a/Empire/src/main/java/com/empireminecraft/data/items/PromoItems.java b/Empire/src/main/java/com/empireminecraft/data/items/PromoItems.java
index 9e1522c..f1d19f3 100644
--- a/Empire/src/main/java/com/empireminecraft/data/items/PromoItems.java
+++ b/Empire/src/main/java/com/empireminecraft/data/items/PromoItems.java
@@ -2,7 +2,12 @@ package com.empireminecraft.data.items;
import com.empireminecraft.features.EmpireVault;
import com.empireminecraft.features.horses.Stable;
-import com.empireminecraft.features.items.*;
+import com.empireminecraft.features.items.ConfirmableUsableItem;
+import com.empireminecraft.features.items.CustomItem;
+import com.empireminecraft.features.items.EmpireFirework;
+import com.empireminecraft.features.items.SpecialProjectile;
+import com.empireminecraft.features.items.UsableBowItem;
+import com.empireminecraft.features.items.UsableItem;
import com.empireminecraft.util.ItemUtil;
import com.empireminecraft.util.Util;
import org.bukkit.Color;
@@ -16,7 +21,8 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffectType;
public class PromoItems {
- public static final UsableItem VAULT_VOUCHER = new UsableItem("VaultVoucher", Material.EMPTY_MAP) {
+ public static final UsableItem VAULT_VOUCHER = new ConfirmableUsableItem("VaultVoucher", Material.EMPTY_MAP,
+ "&3Gives 1 free vault page increase.") {
{
this.consumeOnUse = true;
ItemUtil.buildLore(this).setName("&aVault Voucher").makeSoulbound()
@@ -31,13 +37,15 @@ public class PromoItems {
}
@Override
- public ItemStack onUse(Player player, ItemStack item) {
+ public ItemStack onConfirm(Player player, ItemStack item) {
EmpireVault.expandVault(player, player.getName(), true, true);
return item;
}
};
+
public static final UsableItem
- STABLE_VOUCHER = new UsableItem("StableVoucher", Material.EMPTY_MAP) {
+ STABLE_VOUCHER = new ConfirmableUsableItem("StableVoucher", Material.EMPTY_MAP,
+ "&3Permanently raises stables size by 1.") {
{
this.consumeOnUse = true;
ItemUtil.buildLore(this).setName("&aStable Voucher").makeSoulbound()
@@ -49,7 +57,7 @@ public class PromoItems {
}
@Override
- public ItemStack onUse(Player player, ItemStack item) {
+ public ItemStack onConfirm(Player player, ItemStack item) {
if (!Stable.getStable(player).increaseMaxStables()) {
return null;
}
diff --git a/Empire/src/main/java/com/empireminecraft/features/items/ConfirmableUsableItem.java b/Empire/src/main/java/com/empireminecraft/features/items/ConfirmableUsableItem.java
new file mode 100644
index 0000000..8f38daf
--- /dev/null
+++ b/Empire/src/main/java/com/empireminecraft/features/items/ConfirmableUsableItem.java
@@ -0,0 +1,49 @@
+package com.empireminecraft.features.items;
+
+import com.empireminecraft.systems.chestui.ChestUI;
+import com.empireminecraft.systems.chestui.ConfirmChestInterface;
+import com.google.common.base.Predicate;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import javax.annotation.Nullable;
+
+public abstract class ConfirmableUsableItem extends UsableItem {
+ public String[] loreLines = null;
+ public ConfirmableUsableItem(String name, Material type, String... loreLines) {
+ super(name, type);
+ this.loreLines = loreLines;
+ }
+
+ public ConfirmableUsableItem(String name, Material type, short durability, String... loreLines) {
+ super(name, type, durability);
+ this.loreLines = loreLines;
+ }
+
+ public ConfirmableUsableItem(String name, ItemStack stack, String... loreLines) throws IllegalArgumentException {
+ super(name, stack);
+ this.loreLines = loreLines;
+ }
+
+ @Override
+ public ItemStack onUse(final Player player, final ItemStack item) {
+ final int slot = player.getInventory().getHeldItemSlot();
+ ChestUI.open(player, new ConfirmChestInterface("Confirm Item Use",
+ new Predicate<Player>() {
+ @Override
+ public boolean apply(@Nullable Player input) {
+ final ItemStack nowInHand = player.getInventory().getItem(slot);
+ if (nowInHand.isSimilar(item) && nowInHand.getAmount() > 0) {
+ ItemStack res = onConfirm(player, nowInHand);
+ res = UsableItem.postConsumableUse(player, res);
+ player.getInventory().setItem(slot, res);
+ }
+ return true;
+ }
+ }, loreLines));
+ return null;
+ }
+
+ public abstract ItemStack onConfirm(Player player, ItemStack item);
+}
diff --git a/Empire/src/main/java/com/empireminecraft/features/items/UsableItem.java b/Empire/src/main/java/com/empireminecraft/features/items/UsableItem.java
index bf4b957..a1a61a9 100644
--- a/Empire/src/main/java/com/empireminecraft/features/items/UsableItem.java
+++ b/Empire/src/main/java/com/empireminecraft/features/items/UsableItem.java
@@ -101,17 +101,21 @@ public abstract class UsableItem extends CustomItem {
player.updateInventory();
} else {
if (consumeOnUse) {
- item.setAmount(item.getAmount() - 1);
- player.setItemInHand(item);
event.setCancelled(true);
- player.updateInventory();
-
- return;
+ res = postConsumableUse(player, res);
+ player.setItemInHand(res);
}
+
event.setItem(res);
}
}
+ public static ItemStack postConsumableUse(Player player, ItemStack item) {
+ item.setAmount(item.getAmount() - 1);
+ player.updateInventory();
+ return item;
+ }
+
public void onDispense(BlockDispenseEvent event) {
ItemStack item = event.getItem();
if (infinite) {
diff --git a/Empire/src/main/java/com/empireminecraft/systems/chestui/ChestUI.java b/Empire/src/main/java/com/empireminecraft/systems/chestui/ChestUI.java
index 6583e91..fa51752 100644
--- a/Empire/src/main/java/com/empireminecraft/systems/chestui/ChestUI.java
+++ b/Empire/src/main/java/com/empireminecraft/systems/chestui/ChestUI.java
@@ -32,9 +32,16 @@ public class ChestUI extends BukkitUtil.Listener {
((ChestInterfaceItem) o).processClick();
}
}
- public static void open (Player player, Class <? extends ChestUIInterface> ui) {
+ public static void open(Player player, Class <? extends ChestUIInterface> ui) {
try {
- final Inventory inventory = ui.newInstance().initialize(player);
+ open(player, ui.newInstance());
+ } catch (Exception e) {
+ Util.printException(e);
+ }
+ }
+ public static void open(Player player, ChestUIInterface ui) {
+ try {
+ final Inventory inventory = ui.initialize(player);
inventory.getMeta().put("ChestUI", 1);
player.openInventory(inventory);
} catch (Exception e) {
diff --git a/Empire/src/main/java/com/empireminecraft/systems/chestui/ChestUIInterface.java b/Empire/src/main/java/com/empireminecraft/systems/chestui/ChestUIInterface.java
index 85b0a2c..a3b1072 100644
--- a/Empire/src/main/java/com/empireminecraft/systems/chestui/ChestUIInterface.java
+++ b/Empire/src/main/java/com/empireminecraft/systems/chestui/ChestUIInterface.java
@@ -17,9 +17,9 @@ public abstract class ChestUIInterface {
return "ChestUI_Slot_" + slot;
}
- abstract int getSize();
- abstract String getTitle();
- abstract void init(Player player, Inventory inventory);
+ public abstract int getSize();
+ public abstract String getTitle();
+ public abstract void init(Player player, Inventory inventory);
protected int slot = 0;
protected final Inventory initialize(Player player) {
@@ -37,6 +37,9 @@ public abstract class ChestUIInterface {
return player;
}
+ public ChestInterfaceItem add(int slot, Material material, short data) {
+ return add(slot, new ItemStack(material, 1, data));
+ }
public ChestInterfaceItem add(Material material, short data) {
return add(slot, new ItemStack(material, 1, data));
}
diff --git a/Empire/src/main/java/com/empireminecraft/systems/chestui/ConfirmChestInterface.java b/Empire/src/main/java/com/empireminecraft/systems/chestui/ConfirmChestInterface.java
new file mode 100644
index 0000000..0e00edf
--- /dev/null
+++ b/Empire/src/main/java/com/empireminecraft/systems/chestui/ConfirmChestInterface.java
@@ -0,0 +1,83 @@
+package com.empireminecraft.systems.chestui;
+
+import com.empireminecraft.util.ItemUtil;
+import com.google.common.base.Predicate;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+
+import javax.annotation.Nullable;
+
+public class ConfirmChestInterface extends ChestUIInterface {
+
+ private final String confirmTitle;
+ private final Predicate<Player> onConfirm;
+ private final Predicate<Player> onCancel;
+ private final String[] lines;
+
+
+ public ConfirmChestInterface(String confirmTitle, Predicate<Player> onConfirm, String... lines) {
+ this(confirmTitle, onConfirm, null, lines);
+ }
+
+ public ConfirmChestInterface(
+ String confirmTitle, Predicate<Player> onConfirm, Predicate<Player> onCancel, String... lines) {
+ this.confirmTitle = confirmTitle;
+ this.onConfirm = onConfirm;
+ this.onCancel = onCancel;
+ this.lines = lines;
+ }
+
+ @Override
+ public int getSize() {
+ return 9;
+ }
+
+ @Override
+ public String getTitle() {
+ return confirmTitle;
+ }
+
+ @Override
+ public void init(final Player player, Inventory inventory) {
+ final ItemUtil.LoreBuilder builder = add(Material.PAPER)
+ .setName(confirmTitle);
+
+ if (lines != null) {
+ for (String line : lines) {
+ builder.add(line);
+ }
+ }
+
+ builder
+ .empty()
+ .add("&eClick on the &2Green Wool&e to confirm.")
+ .add("&eClick on the &4Red Wool&e to cancel.")
+ .save();
+
+ add(3, Material.WOOL, (short) 13)
+ .onClick(new Predicate<Player>() {
+ @Override
+ public boolean apply(@Nullable Player input) {
+ player.closeInventory();
+ return onConfirm.apply(input);
+ }
+ })
+ .setName("&2Confirm")
+ .add("&2Click to Confirm")
+ .save();
+
+ add(5, Material.WOOL, (short) 14)
+ .onClick(new Predicate<Player>() {
+ @Override
+ public boolean apply(@Nullable Player input) {
+ player.closeInventory();
+ return onCancel == null || onCancel.apply(input);
+ }
+ })
+ .setName("&4Cancel")
+ .add("&4Click to Cancel")
+ .save();
+
+ }
+}
diff --git a/Empire/src/main/java/com/empireminecraft/systems/chestui/EmpireAssistantUI.java b/Empire/src/main/java/com/empireminecraft/systems/chestui/EmpireAssistantUI.java
index 9576e84..9ba73a9 100644
--- a/Empire/src/main/java/com/empireminecraft/systems/chestui/EmpireAssistantUI.java
+++ b/Empire/src/main/java/com/empireminecraft/systems/chestui/EmpireAssistantUI.java
@@ -14,17 +14,17 @@ import javax.annotation.Nullable;
public class EmpireAssistantUI extends ChestUIInterface {
@Override
- int getSize() {
+ public int getSize() {
return 27;
}
@Override
- String getTitle() {
+ public String getTitle() {
return "Empire Assistant";
}
@Override
- void init(final Player player, Inventory inventory) {
+ public void init(final Player player, Inventory inventory) {
if (Util.isTeleportableLocation(player)) {
add(Material.DIAMOND_SWORD)
.onClick("frontier")
diff --git a/Empire/src/main/java/com/empireminecraft/systems/chestui/ServerSwitcher.java b/Empire/src/main/java/com/empireminecraft/systems/chestui/ServerSwitcher.java
index 743f51f..c564d6f 100644
--- a/Empire/src/main/java/com/empireminecraft/systems/chestui/ServerSwitcher.java
+++ b/Empire/src/main/java/com/empireminecraft/systems/chestui/ServerSwitcher.java
@@ -13,17 +13,17 @@ import javax.annotation.Nullable;
public class ServerSwitcher extends ChestUIInterface {
@Override
- int getSize() {
+ public int getSize() {
return 27;
}
@Override
- String getTitle() {
+ public String getTitle() {
return "Server Switcher";
}
@Override
- void init(Player player, Inventory inventory) {
+ public void init(Player player, Inventory inventory) {
addServer(Material.WOOL, 0, EmpireServer.SMP1, "This is a Survival Server");
addServer(Material.WOOL, 1, EmpireServer.SMP2, "This is a Survival Server");
addServer(Material.WOOL, 2, EmpireServer.SMP3, "This is a Survival Server");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment