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();
+ }
+
+}