Notify ShopKeepers users of unsealed brews

This commit is contained in:
Sn0wStorm
2020-11-19 19:23:59 +01:00
parent 7319bca59d
commit 2ee7dd825d
9 changed files with 89 additions and 6 deletions
+4
View File
@@ -7,6 +7,7 @@ import com.dre.brewery.filedata.LanguageReader;
import com.dre.brewery.filedata.UpdateChecker;
import com.dre.brewery.integration.ChestShopListener;
import com.dre.brewery.integration.IntegrationListener;
import com.dre.brewery.integration.ShopKeepersListener;
import com.dre.brewery.integration.barrel.LogBlockBarrel;
import com.dre.brewery.listeners.*;
import com.dre.brewery.recipe.*;
@@ -135,6 +136,9 @@ public class P extends JavaPlugin {
if (BConfig.hasChestShop && use1_13) {
p.getServer().getPluginManager().registerEvents(new ChestShopListener(), p);
}
if (BConfig.hasShopKeepers) {
p.getServer().getPluginManager().registerEvents(new ShopKeepersListener(), p);
}
// Heartbeat
p.getServer().getScheduler().runTaskTimer(p, new BreweryRunnable(), 650, 1200);
@@ -56,6 +56,7 @@ public class BConfig {
public static Boolean hasSlimefun = null; // Slimefun ; Null if not checked
public static Boolean hasMMOItems = null; // MMOItems ; Null if not checked
public static boolean hasChestShop;
public static boolean hasShopKeepers;
// Barrel
public static boolean openEverywhere;
@@ -228,6 +229,7 @@ public class BConfig {
hasVault = plMan.isPluginEnabled("Vault")
&& Integer.parseInt(plMan.getPlugin("Vault").getDescription().getVersion().split("\\.")[1]) <= 6;
hasChestShop = plMan.isPluginEnabled("ChestShop");
hasShopKeepers = plMan.isPluginEnabled("Shopkeepers");
// various Settings
DataSave.autosave = config.getInt("autosave", 3);
@@ -0,0 +1,67 @@
package com.dre.brewery.integration;
import com.dre.brewery.Brew;
import com.dre.brewery.P;
import com.dre.brewery.filedata.BConfig;
import com.nisovin.shopkeepers.api.events.PlayerOpenUIEvent;
import com.nisovin.shopkeepers.api.ui.DefaultUITypes;
import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.ItemStack;
import java.util.HashSet;
import java.util.Set;
public class ShopKeepersListener implements Listener {
Set<HumanEntity> openedEditors = new HashSet<>();
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onShopCreated(PlayerOpenUIEvent event) {
try {
if (event.getUIType() == DefaultUITypes.EDITOR() || event.getUIType() == DefaultUITypes.TRADING()) {
openedEditors.add(event.getPlayer());
}
} catch (Throwable e) {
failed(e);
}
}
@EventHandler(ignoreCancelled = true)
public void onInventoryClickShopKeeper(InventoryClickEvent event) {
if (openedEditors.isEmpty() || !openedEditors.contains(event.getWhoClicked())) {
return;
}
if (!(event.getWhoClicked() instanceof Player)) {
return;
}
ItemStack item = event.getCursor();
if (item != null && item.getType() == Material.POTION && event.getClickedInventory() == event.getView().getTopInventory()) {
Brew brew = Brew.get(item);
if (brew != null && !brew.isSealed()) {
P.p.msg(event.getWhoClicked(), P.p.languageReader.get("Player_ShopSealBrew"));
}
}
}
@EventHandler
public void onCloseInventoryShopKeeper(InventoryCloseEvent event) {
openedEditors.remove(event.getPlayer());
}
private void failed(Throwable e) {
HandlerList.unregisterAll(this);
BConfig.hasShopKeepers = false;
e.printStackTrace();
P.p.errorLog("Failed to notify Player using 'ShopKeepers'. Disabling 'ShopKeepers' support");
openedEditors.clear();
}
}