From 48a15a0e82210419e42e43852bb2836a21224efb Mon Sep 17 00:00:00 2001 From: Sn0wStorm Date: Tue, 12 Nov 2019 17:02:01 +0100 Subject: [PATCH] Convert on Chest Open, delete lost legacy brews --- src/com/dre/brewery/Brew.java | 4 ++ src/com/dre/brewery/filedata/BData.java | 23 +++++++++- .../integration/barrel/CitadelBarrel.java | 43 ------------------- .../brewery/listeners/InventoryListener.java | 21 +++++++++ 4 files changed, 46 insertions(+), 45 deletions(-) delete mode 100644 src/com/dre/brewery/integration/barrel/CitadelBarrel.java diff --git a/src/com/dre/brewery/Brew.java b/src/com/dre/brewery/Brew.java index 78c6691..68aca17 100644 --- a/src/com/dre/brewery/Brew.java +++ b/src/com/dre/brewery/Brew.java @@ -903,6 +903,10 @@ public class Brew { public static void loadLegacy(BIngredients ingredients, int uid, int quality, int alc, byte distillRuns, float ageTime, float wood, String recipe, boolean unlabeled, boolean persistent, boolean stat, int lastUpdate) { Brew brew = new Brew(ingredients, quality, alc, distillRuns, ageTime, wood, recipe, unlabeled, stat, lastUpdate); brew.persistent = persistent; + if (brew.lastUpdate <= 0) { + // We failed to save the lastUpdate, restart the countdown + brew.touch(); + } legacyPotions.put(uid, brew); } diff --git a/src/com/dre/brewery/filedata/BData.java b/src/com/dre/brewery/filedata/BData.java index 823d95a..6ac1cfc 100644 --- a/src/com/dre/brewery/filedata/BData.java +++ b/src/com/dre/brewery/filedata/BData.java @@ -93,12 +93,31 @@ public class BData { boolean unlabeled = section.getBoolean(uid + ".unlabeled", false); boolean persistent = section.getBoolean(uid + ".persist", false); boolean stat = section.getBoolean(uid + ".stat", false); - int lastUpdate = section.getInt("lastUpdate", 0); + int lastUpdate = section.getInt(uid + ".lastUpdate", 0); Brew.loadLegacy(ingredients, P.p.parseInt(uid), quality, alc, distillRuns, ageTime, wood, recipe, unlabeled, persistent, stat, lastUpdate); } } + // Remove Legacy Potions that haven't been touched in a long time, these may have been lost + if (!Brew.noLegacy()) { + int currentHoursAfterInstall = (int) ((double) (System.currentTimeMillis() - Brew.installTime) / 3600000D); + int purgeTime = currentHoursAfterInstall - (24 * 30 * 4); // Purge Time is 4 Months ago + if (purgeTime > 0) { + int removed = 0; + for (Iterator iterator = Brew.legacyPotions.values().iterator(); iterator.hasNext(); ) { + Brew brew = iterator.next(); + if (brew.getLastUpdate() < purgeTime) { + iterator.remove(); + removed++; + } + } + if (removed > 0) { + P.p.log("Removed " + removed + " Legacy Brews older than 3 months"); + } + } + } + // loading BPlayer section = data.getConfigurationSection("Player"); if (section != null) { @@ -133,7 +152,7 @@ public class BData { } } else { - P.p.errorLog("No data.yml found, will create new one!"); + P.p.log("No data.yml found, will create new one!"); } } diff --git a/src/com/dre/brewery/integration/barrel/CitadelBarrel.java b/src/com/dre/brewery/integration/barrel/CitadelBarrel.java deleted file mode 100644 index c519baf..0000000 --- a/src/com/dre/brewery/integration/barrel/CitadelBarrel.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.dre.brewery.integration.barrel; - -import org.bukkit.block.Block; -import org.bukkit.entity.Player; - -import com.dre.brewery.P; - -import vg.civcraft.mc.citadel.Citadel; -import vg.civcraft.mc.citadel.ReinforcementManager; -import vg.civcraft.mc.citadel.reinforcement.NullReinforcement; -import vg.civcraft.mc.citadel.reinforcement.PlayerReinforcement; -import vg.civcraft.mc.citadel.reinforcement.Reinforcement; - -/** - * Basic Citadel support to prevent randos from stealing your barrel aging brews - * - * @author ProgrammerDan - */ -public class CitadelBarrel { - static P brewery = P.p; - - public static boolean checkAccess(Player player, Block sign) { - ReinforcementManager manager = Citadel.getReinforcementManager(); - - Reinforcement rein = manager.getReinforcement(sign); - - if (rein == null) return true; // no protections in place. - - if (rein instanceof PlayerReinforcement) { - PlayerReinforcement prein = (PlayerReinforcement) rein; - if (prein.canAccessChests(player)) { - return true; - } - } else if (rein instanceof NullReinforcement) { - return true; - } - // no support for multiblock atm, would require namelayer support. - - // special locked, or no access. - brewery.msg(player, brewery.languageReader.get("Error_NoBarrelAccess")); - return false; - } -} diff --git a/src/com/dre/brewery/listeners/InventoryListener.java b/src/com/dre/brewery/listeners/InventoryListener.java index 6f62baa..5fd6622 100644 --- a/src/com/dre/brewery/listeners/InventoryListener.java +++ b/src/com/dre/brewery/listeners/InventoryListener.java @@ -249,6 +249,27 @@ public class InventoryListener implements Listener { //public static boolean opening = false; + @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); + } + } + } + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onInventoryOpen(InventoryOpenEvent event) { if (!P.use1_14) return;