Changes for Distilling and 1.9

This commit is contained in:
Sn0wStorm 2016-04-23 17:45:01 +02:00
parent 82964cfd8c
commit 468b90be43
5 changed files with 899 additions and 877 deletions

View File

@ -15,6 +15,7 @@ import org.bukkit.potion.PotionEffectType;
public class Brew { public class Brew {
// represents the liquid in the brewed Potions // represents the liquid in the brewed Potions
public static Map<Integer, Brew> potions = new HashMap<Integer, Brew>(); public static Map<Integer, Brew> potions = new HashMap<Integer, Brew>();
public static Boolean colorInBarrels; // color the Lore while in Barrels public static Boolean colorInBarrels; // color the Lore while in Barrels
public static Boolean colorInBrewer; // color the Lore while in Brewer public static Boolean colorInBrewer; // color the Lore while in Brewer
@ -307,6 +308,7 @@ public class Brew {
} }
// Distilling section --------------- // Distilling section ---------------
// distill all custom potions in the brewer // distill all custom potions in the brewer
public static void distillAll(BrewerInventory inv, Boolean[] contents) { public static void distillAll(BrewerInventory inv, Boolean[] contents) {
int slot = 0; int slot = 0;
@ -369,6 +371,7 @@ public class Brew {
} }
// Ageing Section ------------------ // Ageing Section ------------------
public void age(ItemStack item, float time, byte woodType) { public void age(ItemStack item, float time, byte woodType) {
if (stat) { if (stat) {
return; return;
@ -452,6 +455,7 @@ public class Brew {
} }
// Lore ----------- // Lore -----------
// Converts to/from qualitycolored Lore // Converts to/from qualitycolored Lore
public void convertLore(PotionMeta meta, Boolean toQuality) { public void convertLore(PotionMeta meta, Boolean toQuality) {
if (currentRecipe == null) { if (currentRecipe == null) {

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@ import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionType; import org.bukkit.potion.PotionType;
// Workaround to remove unwanted potion effects // Workaround to remove unwanted potion effects
public class Compat1_9 implements Listener { public class DrinkListener1_9 implements Listener {
@EventHandler @EventHandler
public void onPlayerDrink(PlayerItemConsumeEvent event) { public void onPlayerDrink(PlayerItemConsumeEvent event) {

View File

@ -12,6 +12,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.BrewEvent; import org.bukkit.event.inventory.BrewEvent;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryOpenEvent;
@ -33,23 +34,24 @@ import com.dre.brewery.integration.LogBlockBarrel;
/** /**
* Updated for 1.9 to replicate the "Brewing" process for distilling. * Updated for 1.9 to replicate the "Brewing" process for distilling.
* Because of how metadata has changed, the brewer no longer triggers as previously described. * Because of how metadata has changed, the brewer no longer triggers as previously described.
* 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 * 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 * 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 * two brews this way, just remove them before the "final" distillation or you will actually
* brew the potion as well. * brew the potion as well.
* *
* @author ProgrammerDan (1.9 distillation update only) * @author ProgrammerDan (1.9 distillation update only)
*/ */
public class InventoryListener implements Listener { public class InventoryListener implements Listener {
/* === Recreating manually the prior BrewEvent behavior. === */ /* === Recreating manually the prior BrewEvent behavior. === */
private HashSet<UUID> trackedBrewmen = new HashSet<UUID>(); private HashSet<UUID> trackedBrewmen = new HashSet<UUID>();
private HashMap<Block, Integer> trackedBrewers = new HashMap<Block, Integer>(); private HashMap<Block, Integer> trackedBrewers = new HashMap<Block, Integer>();
private static final int DISTILLTIME = 401;
/** /**
* Start tracking distillation for a person when they open the brewer window. * Start tracking distillation for a person when they open the brewer window.
* @param event * @param event
@ -60,11 +62,11 @@ public class InventoryListener implements Listener {
HumanEntity player = event.getPlayer(); HumanEntity player = event.getPlayer();
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.debugLog("Starting brew inventory tracking"); P.p.debugLog("Starting brew inventory tracking");
trackedBrewmen.add(player.getUniqueId()); trackedBrewmen.add(player.getUniqueId());
} }
/** /**
* Stop tracking distillation for a person when they close the brewer window. * Stop tracking distillation for a person when they close the brewer window.
* @param event * @param event
@ -75,7 +77,7 @@ public class InventoryListener implements Listener {
HumanEntity player = event.getPlayer(); HumanEntity player = event.getPlayer();
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.debugLog("Stopping brew inventory tracking"); P.p.debugLog("Stopping brew inventory tracking");
trackedBrewmen.remove(player.getUniqueId()); trackedBrewmen.remove(player.getUniqueId());
} }
@ -84,7 +86,7 @@ public class InventoryListener implements Listener {
* Clicking can either start or stop the new brew distillation tracking. * Clicking can either start or stop the new brew distillation tracking.
* Note that server restart will halt any ongoing brewing processes and * Note that server restart will halt any ongoing brewing processes and
* they will _not_ restart until a new click event. * they will _not_ restart until a new click event.
* *
* @param event the Click event. * @param event the Click event.
*/ */
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
@ -93,53 +95,56 @@ public class InventoryListener implements Listener {
HumanEntity player = event.getWhoClicked(); HumanEntity player = event.getWhoClicked();
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;
UUID puid = player.getUniqueId(); UUID puid = player.getUniqueId();
if (!trackedBrewmen.contains(puid)) return; if (!trackedBrewmen.contains(puid)) return;
if (InventoryType.BREWING != inv.getType()) return; if (InventoryType.BREWING != inv.getType()) return;
if (event.getAction() == InventoryAction.NOTHING) return; // Ignore clicks that do nothing
BrewerInventory brewer = (BrewerInventory) inv; BrewerInventory brewer = (BrewerInventory) inv;
final Block brewery = brewer.getHolder().getBlock(); final Block brewery = brewer.getHolder().getBlock();
// If we were already tracking the brewer, cancel any ongoing event due to the click. // If we were already tracking the brewer, cancel any ongoing event due to the click.
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
} }
// Now check if we should bother to track it. // Now check if we should bother to track it.
trackedBrewers.put(brewery, new BukkitRunnable() { trackedBrewers.put(brewery, new BukkitRunnable() {
private int brewTime = 401; private int brewTime = DISTILLTIME;
@Override @Override
public void run() { public void run() {
BlockState now = brewery.getState(); BlockState now = brewery.getState();
if (now instanceof BrewingStand) { if (now instanceof BrewingStand) {
BrewingStand stand = (BrewingStand) now; BrewingStand stand = (BrewingStand) now;
// check if still custom if (brewTime == DISTILLTIME) { // only check at the beginning (and end) for distillables
BrewerInventory brewer = stand.getInventory(); if (!isCustomAndDistill(stand.getInventory())) {
if (isCustomAndDistill(brewer) ) { this.cancel();
trackedBrewers.remove(brewery);
// Still a valid brew distillation P.p.debugLog("nothing to distill");
brewTime = brewTime - 1; // count down. return;
stand.setBrewingTime(brewTime); // arbitrary for now }
}
if (brewTime <= 1) { // Done!
BrewEvent doBrew = new BrewEvent(brewery, brewer); brewTime--; // count down.
Bukkit.getServer().getPluginManager().callEvent(doBrew); stand.setBrewingTime(brewTime); // arbitrary for now
if (!doBrew.isCancelled()) { // BrewEvent _wasn't_ cancelled.
this.cancel(); if (brewTime <= 1) { // Done!
trackedBrewers.remove(brewery); //BrewEvent doBrew = new BrewEvent(brewery, brewer);
stand.setBrewingTime(0); //Bukkit.getServer().getPluginManager().callEvent(doBrew);
P.p.debugLog("All done distilling");
} else { BrewerInventory brewer = stand.getInventory();
brewTime = 401; // go again. if (!runDistill(brewer)) {
P.p.debugLog("Can distill more! Continuing."); this.cancel();
} trackedBrewers.remove(brewery);
stand.setBrewingTime(0);
P.p.debugLog("All done distilling");
} else {
brewTime = DISTILLTIME; // go again.
P.p.debugLog("Can distill more! Continuing.");
} }
} else {
this.cancel();
trackedBrewers.remove(brewery);
} }
} else { } else {
this.cancel(); this.cancel();
@ -149,7 +154,7 @@ public class InventoryListener implements Listener {
} }
}.runTaskTimer(P.p, 2l, 1l).getTaskId()); }.runTaskTimer(P.p, 2l, 1l).getTaskId());
} }
private boolean isCustomAndDistill(BrewerInventory brewer) { private boolean isCustomAndDistill(BrewerInventory brewer) {
ItemStack item = brewer.getItem(3); // ingredient 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.
@ -171,11 +176,16 @@ public class InventoryListener implements Listener {
} }
return false; return false;
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onBrew(BrewEvent event) { public void onBrew(BrewEvent event) {
if (runDistill(event.getContents())) {
event.setCancelled(true);
}
}
private boolean runDistill(BrewerInventory inv) {
int slot = 0; int slot = 0;
BrewerInventory inv = event.getContents();
ItemStack item; ItemStack item;
boolean custom = false; boolean custom = false;
Boolean[] contents = new Boolean[3]; Boolean[] contents = new Boolean[3];
@ -200,10 +210,10 @@ public class InventoryListener implements Listener {
slot++; slot++;
} }
if (custom) { if (custom) {
event.setCancelled(true);
Brew.distillAll(inv, contents); Brew.distillAll(inv, contents);
return true;
} }
return false;
} }
// convert to non colored Lore when taking out of Barrel/Brewer // convert to non colored Lore when taking out of Barrel/Brewer
@ -233,7 +243,7 @@ public class InventoryListener implements Listener {
} }
} }
} }
// block the pickup of items where getPickupDelay is > 1000 (puke) // block the pickup of items where getPickupDelay is > 1000 (puke)
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onInventoryPickupItem(InventoryPickupItemEvent event){ public void onInventoryPickupItem(InventoryPickupItemEvent event){

View File

@ -70,6 +70,14 @@ public class PlayerListener implements Listener {
BCauldron.remove(clickedBlock); BCauldron.remove(clickedBlock);
} }
return; return;
// Its possible to empty a Cauldron with a Bucket in 1.9
} else if (P.use1_9 && materialInHand == Material.BUCKET) {
if (BCauldron.getFillLevel(clickedBlock) == 2) {
// will only remove when existing
BCauldron.remove(clickedBlock);
}
return;
} }
// Check if fire alive below cauldron when adding ingredients // Check if fire alive below cauldron when adding ingredients
@ -202,7 +210,7 @@ public class PlayerListener implements Listener {
public void onPlayerChat(AsyncPlayerChatEvent event) { public void onPlayerChat(AsyncPlayerChatEvent event) {
Words.playerChat(event); Words.playerChat(event);
} }
// player commands while drunk, distort chat commands // player commands while drunk, distort chat commands
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onCommandPreProcess(PlayerCommandPreprocessEvent event) { public void onCommandPreProcess(PlayerCommandPreprocessEvent event) {
@ -257,4 +265,4 @@ public class PlayerListener implements Listener {
bplayer.disconnecting(); bplayer.disconnecting();
} }
} }
} }