2013-05-09 21:47:58 +02:00
|
|
|
package com.dre.brewery.listeners;
|
|
|
|
|
2019-10-12 13:52:55 +02:00
|
|
|
import com.dre.brewery.*;
|
2019-10-16 17:21:04 +02:00
|
|
|
import com.dre.brewery.filedata.BConfig;
|
2016-07-01 22:01:35 +02:00
|
|
|
import com.dre.brewery.lore.BrewLore;
|
2016-05-18 20:28:28 +02:00
|
|
|
import org.bukkit.Material;
|
2016-04-20 06:13:21 +02:00
|
|
|
import org.bukkit.entity.HumanEntity;
|
2019-10-22 10:32:48 +02:00
|
|
|
import org.bukkit.entity.Player;
|
2013-05-09 21:47:58 +02:00
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.EventPriority;
|
|
|
|
import org.bukkit.event.Listener;
|
2019-10-12 13:52:55 +02:00
|
|
|
import org.bukkit.event.inventory.*;
|
2013-05-09 21:47:58 +02:00
|
|
|
import org.bukkit.inventory.BrewerInventory;
|
2016-04-20 06:13:21 +02:00
|
|
|
import org.bukkit.inventory.Inventory;
|
2016-05-18 20:28:28 +02:00
|
|
|
import org.bukkit.inventory.ItemFlag;
|
2013-05-09 21:47:58 +02:00
|
|
|
import org.bukkit.inventory.ItemStack;
|
2016-05-18 20:28:28 +02:00
|
|
|
import org.bukkit.inventory.meta.PotionMeta;
|
2013-05-09 21:47:58 +02:00
|
|
|
|
2016-05-18 20:28:28 +02:00
|
|
|
import java.util.HashSet;
|
2019-08-17 18:53:06 +02:00
|
|
|
import java.util.Iterator;
|
2016-05-18 20:28:28 +02:00
|
|
|
import java.util.UUID;
|
2013-05-09 21:47:58 +02:00
|
|
|
|
|
|
|
public class InventoryListener implements Listener {
|
2016-04-23 17:45:01 +02:00
|
|
|
|
2016-04-20 06:13:21 +02:00
|
|
|
/* === Recreating manually the prior BrewEvent behavior. === */
|
2016-05-27 19:31:05 +02:00
|
|
|
private HashSet<UUID> trackedBrewmen = new HashSet<>();
|
2016-04-23 17:45:01 +02:00
|
|
|
|
2016-04-21 05:55:15 +02:00
|
|
|
/**
|
|
|
|
* Start tracking distillation for a person when they open the brewer window.
|
|
|
|
* @param event
|
|
|
|
*/
|
2016-04-20 06:13:21 +02:00
|
|
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
|
|
|
public void onBrewerOpen(InventoryOpenEvent event) {
|
2016-04-21 05:55:15 +02:00
|
|
|
if (!P.use1_9) return;
|
2016-04-20 06:13:21 +02:00
|
|
|
HumanEntity player = event.getPlayer();
|
|
|
|
Inventory inv = event.getInventory();
|
2018-10-30 15:16:17 +01:00
|
|
|
if (player == null || !(inv instanceof BrewerInventory)) return;
|
2016-04-23 17:45:01 +02:00
|
|
|
|
2016-04-21 07:36:26 +02:00
|
|
|
P.p.debugLog("Starting brew inventory tracking");
|
2016-04-20 06:13:21 +02:00
|
|
|
trackedBrewmen.add(player.getUniqueId());
|
|
|
|
}
|
2016-04-23 17:45:01 +02:00
|
|
|
|
2016-04-21 05:55:15 +02:00
|
|
|
/**
|
|
|
|
* Stop tracking distillation for a person when they close the brewer window.
|
|
|
|
* @param event
|
|
|
|
*/
|
2016-04-20 06:13:21 +02:00
|
|
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
|
|
|
public void onBrewerClose(InventoryCloseEvent event) {
|
2016-04-21 05:55:15 +02:00
|
|
|
if (!P.use1_9) return;
|
2016-04-20 06:13:21 +02:00
|
|
|
HumanEntity player = event.getPlayer();
|
|
|
|
Inventory inv = event.getInventory();
|
2018-10-30 15:16:17 +01:00
|
|
|
if (player == null || !(inv instanceof BrewerInventory)) return;
|
2016-04-23 17:45:01 +02:00
|
|
|
|
2016-04-21 07:36:26 +02:00
|
|
|
P.p.debugLog("Stopping brew inventory tracking");
|
2016-04-20 06:13:21 +02:00
|
|
|
trackedBrewmen.remove(player.getUniqueId());
|
|
|
|
}
|
2016-04-21 05:55:15 +02:00
|
|
|
|
2016-06-28 21:01:47 +02:00
|
|
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
|
|
|
public void onBrewerDrag(InventoryDragEvent event) {
|
|
|
|
if (!P.use1_9) return;
|
|
|
|
// Workaround the Drag event when only clicking a slot
|
|
|
|
if (event.getInventory() instanceof BrewerInventory) {
|
|
|
|
onBrewerClick(new InventoryClickEvent(event.getView(), InventoryType.SlotType.CONTAINER, 0, ClickType.LEFT, InventoryAction.PLACE_ALL));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-04-21 05:55:15 +02:00
|
|
|
/**
|
|
|
|
* Clicking can either start or stop the new brew distillation tracking.
|
|
|
|
* Note that server restart will halt any ongoing brewing processes and
|
|
|
|
* they will _not_ restart until a new click event.
|
2016-04-23 17:45:01 +02:00
|
|
|
*
|
2016-04-21 05:55:15 +02:00
|
|
|
* @param event the Click event.
|
|
|
|
*/
|
2016-04-20 06:13:21 +02:00
|
|
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
|
|
|
public void onBrewerClick(InventoryClickEvent event) {
|
2016-04-21 05:55:15 +02:00
|
|
|
if (!P.use1_9) return;
|
2019-10-16 17:21:04 +02:00
|
|
|
|
2016-04-20 06:13:21 +02:00
|
|
|
HumanEntity player = event.getWhoClicked();
|
|
|
|
Inventory inv = event.getInventory();
|
2018-10-30 15:16:17 +01:00
|
|
|
if (player == null || !(inv instanceof BrewerInventory)) return;
|
2016-04-23 17:45:01 +02:00
|
|
|
|
2016-04-20 06:13:21 +02:00
|
|
|
UUID puid = player.getUniqueId();
|
|
|
|
if (!trackedBrewmen.contains(puid)) return;
|
2016-04-23 17:45:01 +02:00
|
|
|
|
2016-04-21 05:55:15 +02:00
|
|
|
if (InventoryType.BREWING != inv.getType()) return;
|
2016-04-23 17:45:01 +02:00
|
|
|
if (event.getAction() == InventoryAction.NOTHING) return; // Ignore clicks that do nothing
|
|
|
|
|
2019-10-16 17:21:04 +02:00
|
|
|
BDistiller.distillerClick(event);
|
2016-04-20 06:13:21 +02:00
|
|
|
}
|
2016-04-23 17:45:01 +02:00
|
|
|
|
2016-06-28 21:01:47 +02:00
|
|
|
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
2013-05-09 21:47:58 +02:00
|
|
|
public void onBrew(BrewEvent event) {
|
2016-05-19 01:05:48 +02:00
|
|
|
if (P.use1_9) {
|
2019-10-16 17:21:04 +02:00
|
|
|
if (BDistiller.hasBrew(event.getContents()) != 0) {
|
2016-05-19 01:05:48 +02:00
|
|
|
event.setCancelled(true);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
2019-10-16 17:21:04 +02:00
|
|
|
if (BDistiller.runDistill(event.getContents())) {
|
2016-04-23 17:45:01 +02:00
|
|
|
event.setCancelled(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-18 22:31:32 +02:00
|
|
|
// Clicked a Brew somewhere, do some updating
|
2016-05-18 20:28:28 +02:00
|
|
|
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = false)
|
|
|
|
public void onInventoryClickLow(InventoryClickEvent event) {
|
|
|
|
if (event.getCurrentItem() != null && event.getCurrentItem().getType().equals(Material.POTION)) {
|
|
|
|
ItemStack item = event.getCurrentItem();
|
|
|
|
if (item.hasItemMeta()) {
|
|
|
|
PotionMeta potion = ((PotionMeta) item.getItemMeta());
|
2016-07-01 22:01:35 +02:00
|
|
|
// convert potions from 1.8 to 1.9 for color and to remove effect descriptions
|
|
|
|
if (P.use1_9 && !potion.hasItemFlag(ItemFlag.HIDE_POTION_EFFECTS)) {
|
|
|
|
Brew brew = Brew.get(potion);
|
|
|
|
if (brew != null) {
|
2019-10-18 16:30:03 +02:00
|
|
|
brew.convertPre19(item);
|
2016-05-18 20:28:28 +02:00
|
|
|
}
|
2016-07-01 22:01:35 +02:00
|
|
|
}
|
|
|
|
Brew brew = Brew.get(item);
|
|
|
|
if (brew != null) {
|
2016-06-16 22:13:21 +02:00
|
|
|
P.p.log(brew.toString());
|
2019-10-21 12:44:26 +02:00
|
|
|
//P.p.log(potion.getLore().get(0).replaceAll("§", ""));
|
2019-10-18 16:30:03 +02:00
|
|
|
//P.p.log("similar to beispiel? " + BRecipe.get("Beispiel").createBrew(10).isSimilar(brew));
|
2016-06-30 14:34:16 +02:00
|
|
|
|
2019-10-12 13:52:55 +02:00
|
|
|
brew.touch();
|
2016-05-28 18:47:51 +02:00
|
|
|
|
2016-06-16 22:13:21 +02:00
|
|
|
/*try {
|
2016-06-13 23:26:10 +02:00
|
|
|
DataInputStream in = new DataInputStream(new Base91DecoderStream(new LoreLoadStream(potion)));
|
2016-05-28 22:18:03 +02:00
|
|
|
|
2016-05-30 22:12:34 +02:00
|
|
|
brew.testLoad(in);
|
|
|
|
|
2016-06-16 22:13:21 +02:00
|
|
|
*//*if (in.readByte() == 27 && in.skip(48) > 0) {
|
2016-05-28 22:18:03 +02:00
|
|
|
in.mark(100);
|
|
|
|
if (in.readUTF().equals("TESTHalloª∆Ω") && in.readInt() == 34834 && in.skip(4) > 0 && in.readLong() == Long.MAX_VALUE) {
|
|
|
|
in.reset();
|
|
|
|
if (in.readUTF().equals("TESTHalloª∆Ω")) {
|
|
|
|
P.p.log("true");
|
|
|
|
} else {
|
|
|
|
P.p.log("false3");
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
P.p.log("false2");
|
|
|
|
}
|
2016-05-28 18:47:51 +02:00
|
|
|
} else {
|
2016-05-28 22:18:03 +02:00
|
|
|
P.p.log("false1");
|
2016-06-16 22:13:21 +02:00
|
|
|
}*//*
|
2016-05-28 22:18:03 +02:00
|
|
|
|
2016-05-28 18:47:51 +02:00
|
|
|
in.close();
|
2016-06-13 23:26:10 +02:00
|
|
|
} catch (IllegalArgumentException argExc) {
|
|
|
|
P.p.log("No Data in Lore");
|
2016-05-28 18:47:51 +02:00
|
|
|
|
2016-05-28 22:18:03 +02:00
|
|
|
try {
|
2016-05-28 18:47:51 +02:00
|
|
|
|
2016-06-13 23:26:10 +02:00
|
|
|
DataOutputStream out = new DataOutputStream(new Base91EncoderStream(new LoreSaveStream(potion, 2)));
|
2016-05-30 22:12:34 +02:00
|
|
|
|
|
|
|
brew.testStore(out);
|
|
|
|
|
2016-05-28 18:47:51 +02:00
|
|
|
|
2016-06-16 22:13:21 +02:00
|
|
|
*//*out.writeByte(27);
|
2016-05-28 22:18:03 +02:00
|
|
|
out.writeLong(1111); //skip
|
|
|
|
out.writeLong(1111); //skip
|
|
|
|
out.writeLong(1111); //skip
|
|
|
|
out.writeLong(1111); //skip
|
|
|
|
out.writeLong(1111); //skip
|
|
|
|
out.writeLong(1111); //skip
|
|
|
|
out.writeUTF("TESTHalloª∆Ω");
|
|
|
|
out.writeInt(34834);
|
|
|
|
out.writeInt(6436); //skip
|
2016-06-16 22:13:21 +02:00
|
|
|
out.writeLong(Long.MAX_VALUE);*//*
|
2016-05-28 18:47:51 +02:00
|
|
|
|
2016-05-28 22:18:03 +02:00
|
|
|
out.close();
|
2016-06-16 22:13:21 +02:00
|
|
|
*//*StringBuilder b = new StringBuilder();
|
2016-05-30 23:13:31 +02:00
|
|
|
for (char c : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!$%&()*+,-./:;<=>?@[]^_`{|}~\"".toCharArray()) {
|
|
|
|
b.append('§').append(c);
|
|
|
|
}
|
|
|
|
List<String> lore = potion.getLore();
|
|
|
|
lore.add(b.toString());
|
2016-06-16 22:13:21 +02:00
|
|
|
potion.setLore(lore);*//*
|
2016-05-28 22:18:03 +02:00
|
|
|
item.setItemMeta(potion);
|
|
|
|
|
|
|
|
} catch (IOException h) {
|
|
|
|
h.printStackTrace();
|
|
|
|
}
|
2016-05-28 18:47:51 +02:00
|
|
|
|
2016-06-13 23:26:10 +02:00
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
2016-06-16 22:13:21 +02:00
|
|
|
}*/
|
2016-05-18 20:28:28 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-08-19 16:23:12 +02:00
|
|
|
// convert to non colored Lore when taking out of Barrel/Brewer
|
2014-04-09 00:35:08 +02:00
|
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
2013-08-19 16:23:12 +02:00
|
|
|
public void onInventoryClick(InventoryClickEvent event) {
|
|
|
|
if (event.getInventory().getType() == InventoryType.BREWING) {
|
|
|
|
if (event.getSlot() > 2) {
|
|
|
|
return;
|
|
|
|
}
|
2019-08-18 22:45:12 +02:00
|
|
|
} else if (!(event.getInventory().getHolder() instanceof Barrel) && !(P.use1_14 && event.getInventory().getHolder() instanceof org.bukkit.block.Barrel)) {
|
2013-08-30 21:19:49 +02:00
|
|
|
return;
|
2013-08-19 16:23:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ItemStack item = event.getCurrentItem();
|
2019-10-16 17:21:04 +02:00
|
|
|
if (item != null && item.getType() == Material.POTION && item.hasItemMeta()) {
|
|
|
|
PotionMeta meta = (PotionMeta) item.getItemMeta();
|
|
|
|
Brew brew = Brew.get(meta);
|
|
|
|
if (brew != null) {
|
2019-10-22 10:32:48 +02:00
|
|
|
BrewLore lore = null;
|
2019-10-16 17:21:04 +02:00
|
|
|
if (BrewLore.hasColorLore(meta)) {
|
2019-10-22 10:32:48 +02:00
|
|
|
lore = new BrewLore(brew, meta);
|
2019-10-16 17:21:04 +02:00
|
|
|
lore.convertLore(false);
|
2019-10-22 10:32:48 +02:00
|
|
|
} else if (!BConfig.alwaysShowAlc && event.getInventory().getType() == InventoryType.BREWING) {
|
|
|
|
lore = new BrewLore(brew, meta);
|
|
|
|
lore.updateAlc(false);
|
|
|
|
}
|
|
|
|
if (lore != null) {
|
2019-10-16 17:21:04 +02:00
|
|
|
lore.write();
|
|
|
|
item.setItemMeta(meta);
|
2019-10-22 10:32:48 +02:00
|
|
|
if (event.getWhoClicked() instanceof Player) {
|
|
|
|
switch (event.getAction()) {
|
|
|
|
case MOVE_TO_OTHER_INVENTORY:
|
|
|
|
case HOTBAR_SWAP:
|
|
|
|
// Fix a Graphical glitch of item still showing colors until clicking it
|
|
|
|
P.p.getServer().getScheduler().runTask(P.p, () -> ((Player) event.getWhoClicked()).updateInventory());
|
|
|
|
}
|
|
|
|
}
|
2013-08-19 16:23:12 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-04-23 17:45:01 +02:00
|
|
|
|
2019-08-17 18:53:06 +02:00
|
|
|
// Check if the player tries to add more than the allowed amount of brews into an mc-barrel
|
2019-10-22 10:32:48 +02:00
|
|
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
2019-08-17 18:53:06 +02:00
|
|
|
public void onInventoryClickMCBarrel(InventoryClickEvent event) {
|
|
|
|
if (!P.use1_14) return;
|
|
|
|
if (event.getInventory().getType() != InventoryType.BARREL) return;
|
|
|
|
|
|
|
|
Inventory inv = event.getInventory();
|
|
|
|
for (MCBarrel barrel : MCBarrel.openBarrels) {
|
|
|
|
if (barrel.getInventory().equals(inv)) {
|
|
|
|
barrel.clickInv(event);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
MCBarrel barrel = new MCBarrel(inv);
|
|
|
|
MCBarrel.openBarrels.add(barrel);
|
|
|
|
barrel.clickInv(event);
|
|
|
|
}
|
|
|
|
|
2019-09-12 11:01:13 +02:00
|
|
|
//public static boolean opening = false;
|
|
|
|
|
2019-11-12 17:02:01 +01:00
|
|
|
@SuppressWarnings("deprecation")
|
|
|
|
@EventHandler(ignoreCancelled = false)
|
|
|
|
public void onInventoryOpenLegacyConvert(InventoryOpenEvent event) {
|
|
|
|
if (Brew.noLegacy()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (event.getInventory().getType() == InventoryType.PLAYER) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
for (ItemStack item : event.getInventory().getContents()) {
|
|
|
|
if (item != null && item.getType() == Material.POTION) {
|
|
|
|
int uid = Brew.getUID(item);
|
|
|
|
// Check if the uid exists first, otherwise it will log that it can't find the id
|
|
|
|
if (uid < 0 && Brew.legacyPotions.containsKey(uid)) {
|
|
|
|
// This will convert the Brew
|
|
|
|
Brew.get(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:53:06 +02:00
|
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
2019-08-17 12:07:57 +02:00
|
|
|
public void onInventoryOpen(InventoryOpenEvent event) {
|
|
|
|
if (!P.use1_14) return;
|
|
|
|
|
2019-09-12 11:01:13 +02:00
|
|
|
/*Barrel x = null;
|
|
|
|
if (event.getInventory().getHolder() instanceof Barrel) {
|
|
|
|
x = ((Barrel) event.getInventory().getHolder());
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!opening) {
|
|
|
|
opening = true;
|
|
|
|
Barrel finalBarrel = x;
|
|
|
|
P.p.getServer().getScheduler().scheduleSyncDelayedTask(P.p, () -> {finalBarrel.remove(null, null); opening = false;}, 100);
|
|
|
|
}*/
|
|
|
|
|
2019-08-17 18:53:06 +02:00
|
|
|
// Check for MC Barrel
|
2019-08-17 12:07:57 +02:00
|
|
|
if (event.getInventory().getType() == InventoryType.BARREL) {
|
|
|
|
Inventory inv = event.getInventory();
|
2019-08-17 18:53:06 +02:00
|
|
|
for (MCBarrel barrel : MCBarrel.openBarrels) {
|
|
|
|
if (barrel.getInventory().equals(inv)) {
|
|
|
|
barrel.open();
|
|
|
|
return;
|
2019-08-17 12:07:57 +02:00
|
|
|
}
|
|
|
|
}
|
2019-08-17 18:53:06 +02:00
|
|
|
MCBarrel barrel = new MCBarrel(inv);
|
|
|
|
MCBarrel.openBarrels.add(barrel);
|
|
|
|
barrel.open();
|
2019-08-17 12:07:57 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-01-07 09:44:54 +01:00
|
|
|
// block the pickup of items where getPickupDelay is > 1000 (puke)
|
2014-02-16 17:11:02 +01:00
|
|
|
@EventHandler(ignoreCancelled = true)
|
2014-01-07 09:44:54 +01:00
|
|
|
public void onInventoryPickupItem(InventoryPickupItemEvent event){
|
2019-10-16 17:21:04 +02:00
|
|
|
if (event.getItem().getPickupDelay() > 1000 && event.getItem().getItemStack().getType() == BConfig.pukeItem) {
|
2014-01-07 09:44:54 +01:00
|
|
|
event.setCancelled(true);
|
|
|
|
}
|
|
|
|
}
|
2014-04-09 00:35:08 +02:00
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void onInventoryClose(InventoryCloseEvent event) {
|
2019-08-17 18:53:06 +02:00
|
|
|
if (!P.use1_14) return;
|
|
|
|
|
2019-08-17 21:00:15 +02:00
|
|
|
// Barrel Closing Sound
|
|
|
|
if (event.getInventory().getHolder() instanceof Barrel) {
|
|
|
|
Barrel barrel = ((Barrel) event.getInventory().getHolder());
|
2019-10-16 17:21:04 +02:00
|
|
|
barrel.playClosingSound();
|
2019-08-17 21:00:15 +02:00
|
|
|
}
|
|
|
|
|
2019-08-17 18:53:06 +02:00
|
|
|
// Check for MC Barrel
|
|
|
|
if (event.getInventory().getType() == InventoryType.BARREL) {
|
|
|
|
Inventory inv = event.getInventory();
|
|
|
|
for (Iterator<MCBarrel> iter = MCBarrel.openBarrels.iterator(); iter.hasNext(); ) {
|
|
|
|
MCBarrel barrel = iter.next();
|
|
|
|
if (barrel.getInventory().equals(inv)) {
|
|
|
|
barrel.close();
|
|
|
|
if (inv.getViewers().size() == 1) {
|
|
|
|
// Last viewer, remove Barrel from List of open Barrels
|
|
|
|
iter.remove();
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
new MCBarrel(inv).close();
|
|
|
|
}
|
2014-04-09 00:35:08 +02:00
|
|
|
}
|
2013-05-09 21:47:58 +02:00
|
|
|
}
|