diff --git a/pom.xml b/pom.xml index a6242b4..5dc552e 100644 --- a/pom.xml +++ b/pom.xml @@ -111,6 +111,10 @@ MMOPlugins https://mvn.lumine.io/repository/maven-releases/ + + Lichtspiele + https://nexus.lichtspiele.org/repository/releases/ + @@ -199,7 +203,7 @@ de.diddiz logblock - 1.15.2 + 1.16.1.1 provided @@ -239,6 +243,12 @@ 0.96.3.0 provided + + com.nisovin.shopkeepers + ShopkeepersAPI + 2.12.0 + provided + org.bstats bstats-bukkit diff --git a/resources/languages/en.yml b/resources/languages/en.yml index e1724aa..da6c41c 100644 --- a/resources/languages/en.yml +++ b/resources/languages/en.yml @@ -108,6 +108,6 @@ Player_WakeNoCheck: '&cNo Wakeup Point Check is currently active' Player_WakeNoPoints: '&cThere are no Wakeup Points!' Player_WakeNotExist: '&cThe Wakeup Point with the id: &6&v1 &cdoesn''t exist!' Player_WakeTeleport: 'Teleport to Wakeup Point with the id: &6&v1&f At position: &6&v2 &v3, &v4, &v5' -Player_ShopSealBrew: '&eBrews should be sealed before selling them' +Player_ShopSealBrew: '&eIt''s recommended to trade/sell &6sealed &eBrews' Player_Drunkeness: 'Drunkeness' Player_Hangover: 'Your Hangover' diff --git a/resources/languages/it.yml b/resources/languages/it.yml index e7d9b28..cc15611 100755 --- a/resources/languages/it.yml +++ b/resources/languages/it.yml @@ -108,6 +108,6 @@ Player_WakeNoCheck: '&cNessun punto di risveglio attivo al momento.' Player_WakeNoPoints: '&cNon ci sono punti di risveglio!' Player_WakeNotExist: '&cIl punto di risveglio con id &6&v1 &cnon esiste!' Player_WakeTeleport: 'Teletrasportato al punto di risveglio di id &6&v1&f alla posizione &6&v2 &v3, &v4, &v5' -Player_ShopSealBrew: '&eBrews should be sealed before selling them' +Player_ShopSealBrew: '&eIt''s recommended to trade/sell &6sealed &eBrews' Player_Drunkeness: 'Ubriacatura' Player_Hangover: 'Hangover' diff --git a/resources/languages/tw.yml b/resources/languages/tw.yml index 8898846..4e91c3c 100644 --- a/resources/languages/tw.yml +++ b/resources/languages/tw.yml @@ -108,6 +108,6 @@ Player_WakeNoCheck: '&c目前沒有喚醒點是處於活動狀態' Player_WakeNoPoints: '&c沒有喚醒點!' Player_WakeNotExist: '&c這個喚醒點 id: &6&v1 &c不存在!' Player_WakeTeleport: '傳送到這個喚醒點 id: &6&v1&f 在位置: &6&v2 &v3, &v4, &v5' -Player_ShopSealBrew: '&eBrews should be sealed before selling them' +Player_ShopSealBrew: '&eIt''s recommended to trade/sell &6sealed &eBrews' Player_Drunkeness: '醉酒' Player_Hangover: '你的宿醉' diff --git a/resources/languages/zh.yml b/resources/languages/zh.yml index 8bd0c37..4fd4a54 100644 --- a/resources/languages/zh.yml +++ b/resources/languages/zh.yml @@ -108,6 +108,6 @@ Player_WakeNoCheck: '&c目前没有执行苏醒处检查.' Player_WakeNoPoints: '&c目前没有设定任何一个苏醒处!' Player_WakeNotExist: '&cid为: &6&v1 &c的苏醒处并不存在!' Player_WakeTeleport: '前往id为: &6&v1 &f坐标为: &6&v2 &v3, &v4, &v5 &r的苏醒处.' -Player_ShopSealBrew: '&eBrews should be sealed before selling them' +Player_ShopSealBrew: '&eIt''s recommended to trade/sell &6sealed &eBrews' Player_Drunkeness: '醉酒' Player_Hangover: '你的宿醉' diff --git a/resources/plugin.yml b/resources/plugin.yml index 9087140..3dc016a 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,7 +1,7 @@ name: Brewery version: 2.1.2 main: com.dre.brewery.P -softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault, ChestShop, Towny] +softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault, ChestShop, Shopkeepers, Towny] authors: [Milan Albrecht, Frank Baumann, ProgrammerDan, Daniel Saukel] api-version: 1.13 commands: diff --git a/src/com/dre/brewery/P.java b/src/com/dre/brewery/P.java index a0876b4..432791e 100644 --- a/src/com/dre/brewery/P.java +++ b/src/com/dre/brewery/P.java @@ -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); diff --git a/src/com/dre/brewery/filedata/BConfig.java b/src/com/dre/brewery/filedata/BConfig.java index 6c0a986..14977fd 100644 --- a/src/com/dre/brewery/filedata/BConfig.java +++ b/src/com/dre/brewery/filedata/BConfig.java @@ -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); diff --git a/src/com/dre/brewery/integration/ShopKeepersListener.java b/src/com/dre/brewery/integration/ShopKeepersListener.java new file mode 100644 index 0000000..176610d --- /dev/null +++ b/src/com/dre/brewery/integration/ShopKeepersListener.java @@ -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 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(); + } + +}