Testing done, should be ready for live. Fixed some issues with inventory scan timing, gotta love asynch.

This commit is contained in:
Daniel Boston 2016-04-21 01:36:26 -04:00
parent e2c9fcb406
commit 14962a2820
2 changed files with 49 additions and 47 deletions

View File

@ -1,7 +1,7 @@
name: Brewery name: Brewery
version: 1.4-SNAPSHOT version: 1.4.0
main: com.dre.brewery.P main: com.dre.brewery.P
authors: [Milan Albrecht, Frank Baumann] authors: [Milan Albrecht, Frank Baumann, ProgrammerDan]
softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault] softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault]
commands: commands:
brewery: brewery:

View File

@ -17,7 +17,6 @@ import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.inventory.InventoryPickupItemEvent;
import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.inventory.InventoryType.SlotType;
import org.bukkit.inventory.BrewerInventory; import org.bukkit.inventory.BrewerInventory;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.meta.PotionMeta;
@ -37,6 +36,13 @@ import com.dre.brewery.integration.LogBlockBarrel;
* So, I've added some event tracking and manual forcing of the brewing "animation" if the * So, I've added some event tracking and manual forcing of the brewing "animation" if the
* set of ingredients in the brewer can be distilled. * set of ingredients in the brewer can be distilled.
* Nothing here should interfere with vanilla brewing. * Nothing here should interfere with vanilla brewing.
*
* Note in testing I did discover a few ways to "hack" brewing to distill your brews alongside
* potions; put fuel and at least one "valid" water bottle w/ a brewing component. You can distill
* two brews this way, just remove them before the "final" distillation or you will actually
* brew the potion as well.
*
* @author ProgrammerDan (1.9 distillation update only)
*/ */
public class InventoryListener implements Listener { public class InventoryListener implements Listener {
@ -55,7 +61,7 @@ public class InventoryListener implements Listener {
Inventory inv = event.getInventory(); Inventory inv = event.getInventory();
if (player == null || inv == null || !(inv instanceof BrewerInventory)) return; if (player == null || inv == null || !(inv instanceof BrewerInventory)) return;
P.p.log("Starting brew inventory tracking"); P.p.debugLog("Starting brew inventory tracking");
trackedBrewmen.add(player.getUniqueId()); trackedBrewmen.add(player.getUniqueId());
} }
@ -70,7 +76,7 @@ public class InventoryListener implements Listener {
Inventory inv = event.getInventory(); Inventory inv = event.getInventory();
if (player == null || inv == null || !(inv instanceof BrewerInventory)) return; if (player == null || inv == null || !(inv instanceof BrewerInventory)) return;
P.p.log("Stopping brew inventory tracking"); P.p.debugLog("Stopping brew inventory tracking");
trackedBrewmen.remove(player.getUniqueId()); trackedBrewmen.remove(player.getUniqueId());
} }
@ -90,13 +96,8 @@ public class InventoryListener implements Listener {
UUID puid = player.getUniqueId(); UUID puid = player.getUniqueId();
if (!trackedBrewmen.contains(puid)) return; if (!trackedBrewmen.contains(puid)) return;
P.p.debugLog("This brewery was opened by a monitored agent");
if (InventoryType.BREWING != inv.getType()) return; if (InventoryType.BREWING != inv.getType()) return;
P.p.debugLog("Clicked inventory was a brewing inventory");
if (SlotType.FUEL != event.getSlotType() && SlotType.CRAFTING != event.getSlotType()) return;
P.p.debugLog("Tracking a new brew click event -- slots clicked in Brewer!");
BrewerInventory brewer = (BrewerInventory) inv; BrewerInventory brewer = (BrewerInventory) inv;
final Block brewery = brewer.getHolder().getBlock(); final Block brewery = brewer.getHolder().getBlock();
@ -105,12 +106,9 @@ public class InventoryListener implements Listener {
Integer curTask = trackedBrewers.get(brewery); Integer curTask = trackedBrewers.get(brewery);
if (curTask != null) { if (curTask != null) {
Bukkit.getScheduler().cancelTask(curTask); // cancel prior Bukkit.getScheduler().cancelTask(curTask); // cancel prior
P.p.debugLog("Cancelling prior brew countdown");
} }
// Now check if we should bother to track it. // Now check if we should bother to track it.
if (isCustomAndDistill(brewer)) {
P.p.debugLog("Starting a new brew countdown");
trackedBrewers.put(brewery, new BukkitRunnable() { trackedBrewers.put(brewery, new BukkitRunnable() {
private int brewTime = 401; private int brewTime = 401;
@Override @Override
@ -127,7 +125,6 @@ public class InventoryListener implements Listener {
stand.setBrewingTime(brewTime); // arbitrary for now stand.setBrewingTime(brewTime); // arbitrary for now
if (brewTime <= 1) { // Done! if (brewTime <= 1) { // Done!
P.p.debugLog("Complete brew distillation!");
BrewEvent doBrew = new BrewEvent(brewery, brewer); BrewEvent doBrew = new BrewEvent(brewery, brewer);
Bukkit.getServer().getPluginManager().callEvent(doBrew); Bukkit.getServer().getPluginManager().callEvent(doBrew);
if (!doBrew.isCancelled()) { // BrewEvent _wasn't_ cancelled. if (!doBrew.isCancelled()) { // BrewEvent _wasn't_ cancelled.
@ -140,15 +137,21 @@ public class InventoryListener implements Listener {
P.p.debugLog("Can distill more! Continuing."); P.p.debugLog("Can distill more! Continuing.");
} }
} }
} else {
this.cancel();
trackedBrewers.remove(brewery);
}
} else {
this.cancel();
trackedBrewers.remove(brewery);
P.p.debugLog("The block was replaced; not a brewing stand.");
} }
} }
} }.runTaskTimer(P.p, 2l, 1l).getTaskId());
}.runTaskTimer(P.p, 1l, 1l).getTaskId());
}
} }
private boolean isCustomAndDistill(BrewerInventory brewer) { private boolean isCustomAndDistill(BrewerInventory brewer) {
ItemStack item = brewer.getIngredient(); ItemStack item = brewer.getItem(3); // ingredient
if (item == null || Material.GLOWSTONE_DUST != item.getType()) return false; // need dust in the top slot. if (item == null || Material.GLOWSTONE_DUST != item.getType()) return false; // need dust in the top slot.
Boolean[] contents = new Boolean[3]; Boolean[] contents = new Boolean[3];
for (int slot = 0; slot < 3; slot++) { for (int slot = 0; slot < 3; slot++) {
@ -171,7 +174,6 @@ public class InventoryListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onBrew(BrewEvent event) { public void onBrew(BrewEvent event) {
P.p.debugLog("Got Brew Event");
int slot = 0; int slot = 0;
BrewerInventory inv = event.getContents(); BrewerInventory inv = event.getContents();
ItemStack item; ItemStack item;