diff --git a/Docs/BukkitPlugins.md b/Docs/BukkitPlugins.md
index e659276ae..db8cb4eb5 100644
--- a/Docs/BukkitPlugins.md
+++ b/Docs/BukkitPlugins.md
@@ -7,6 +7,7 @@ Supported Plugins: (And the sources we acquired Jar files from.)
- BetonQuest (https://www.spigotmc.org/resources/betonquest.2117/)
- BigDoors (https://www.spigotmc.org/resources/big-doors.58669)
- BossShopPro (https://www.spigotmc.org/resources/bossshop.222/)
+- BreweryX (https://www.spigotmc.org/resources/breweryx.114777/)
- CoreProtect (https://www.spigotmc.org/resources/coreprotect.8631/)
- CrackShot (https://www.spigotmc.org/resources/crackshot-guns.48301/)
- EffectLib (https://dev.bukkit.org/projects/effectlib)
diff --git a/pom.xml b/pom.xml
index 5169e3471..3e3a86b5d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -389,6 +389,14 @@
system
${basedir}/lib/BigDoors.jar
+
+ com.dre.brewery
+ BreweryX
+ 3.4.8
+ jar
+ system
+ ${basedir}/lib/BreweryX.jar
+
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java b/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java
index 37ae8caea..580db9b83 100644
--- a/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java
+++ b/src/main/java/com/denizenscript/depenizen/bukkit/Depenizen.java
@@ -110,6 +110,7 @@ public void registerCoreBridges() {
registerBridge("BetonQuest", () -> new BetonQuestBridge());
registerBridge("BigDoors", () -> new BigDoorsBridge());
registerBridge("BossShopPro", () -> new BossShopBridge());
+ registerBridge("BreweryX", () -> new BreweryXBridge());
registerBridge("CoreProtect", () -> new CoreProtectBridge());
registerBridge("CrackShot", () -> new CrackShotBridge());
registerBridge("EffectLib", () -> new EffectLibBridge());
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/bridges/BreweryXBridge.java b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/BreweryXBridge.java
new file mode 100644
index 000000000..f8da835ab
--- /dev/null
+++ b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/BreweryXBridge.java
@@ -0,0 +1,23 @@
+package com.denizenscript.depenizen.bukkit.bridges;
+
+import com.denizenscript.denizencore.events.ScriptEvent;
+import com.denizenscript.denizencore.objects.ObjectFetcher;
+import com.denizenscript.depenizen.bukkit.Bridge;
+import com.denizenscript.depenizen.bukkit.events.breweryx.BreweryChatDistortScriptEvent;
+import com.denizenscript.depenizen.bukkit.events.breweryx.BreweryDrinkScriptEvent;
+import com.denizenscript.depenizen.bukkit.events.breweryx.BreweryIngredientAddScriptEvent;
+import com.denizenscript.depenizen.bukkit.events.breweryx.BreweryModifyBrewScriptEvent;
+import com.denizenscript.depenizen.bukkit.objects.breweryx.BreweryRecipeTag;
+import com.denizenscript.depenizen.bukkit.properties.breweryx.BreweryPlayerExtensions;
+
+public class BreweryXBridge extends Bridge {
+ @Override
+ public void init() {
+ ScriptEvent.registerScriptEvent(BreweryDrinkScriptEvent.class);
+ ScriptEvent.registerScriptEvent(BreweryModifyBrewScriptEvent.class);
+ ScriptEvent.registerScriptEvent(BreweryIngredientAddScriptEvent.class);
+ ScriptEvent.registerScriptEvent(BreweryChatDistortScriptEvent.class);
+ ObjectFetcher.registerWithObjectFetcher(BreweryRecipeTag.class, BreweryRecipeTag.tagProcessor);
+ BreweryPlayerExtensions.register();
+ }
+}
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryChatDistortScriptEvent.java b/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryChatDistortScriptEvent.java
new file mode 100644
index 000000000..aac30dacc
--- /dev/null
+++ b/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryChatDistortScriptEvent.java
@@ -0,0 +1,72 @@
+package com.denizenscript.depenizen.bukkit.events.breweryx;
+
+import com.denizenscript.denizen.events.BukkitScriptEvent;
+import com.denizenscript.denizen.objects.PlayerTag;
+import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
+import com.denizenscript.denizencore.objects.ObjectTag;
+import com.denizenscript.denizencore.objects.core.ElementTag;
+import com.denizenscript.denizencore.scripts.ScriptEntryData;
+import com.dre.brewery.api.events.PlayerChatDistortEvent;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+
+public class BreweryChatDistortScriptEvent extends BukkitScriptEvent implements Listener {
+
+ // <--[event]
+ // @Events
+ // brewery chat distort
+ //
+ // @Cancellable true
+ //
+ // @Triggers when a drunk brewery player's chat is distorted.
+ //
+ // @Context
+ // Returns the message to be sent after being distorted.
+ // Returns the original message before being distorted.
+ // Returns a PlayerTag of the player that had their chat distorted.
+ //
+ // @Determine
+ // ElementTag to set the message to be sent after being distorted.
+ //
+ // @Plugin Depenizen, BreweryX
+ //
+ // @Player Always.
+ //
+ // @Group Depenizen
+ //
+ // -->
+ public BreweryChatDistortScriptEvent() {
+ registerCouldMatcher("brewery chat distort");
+ }
+
+ public PlayerChatDistortEvent event;
+
+ @Override
+ public ScriptEntryData getScriptEntryData() {
+ return new BukkitScriptEntryData(event.getPlayer());
+ }
+
+ @Override
+ public ObjectTag getContext(String name) {
+ return switch (name) {
+ case "message" -> new ElementTag(event.getDistortedMessage());
+ case "original_message" -> new ElementTag(event.getWrittenMessage());
+ default -> super.getContext(name);
+ };
+ }
+
+ @Override
+ public boolean handleDetermination(ScriptPath path, String prefix, ObjectTag value) {
+ if (prefix.equals("message")) {
+ event.setDistortedMessage(value.asElement().asString());
+ return true;
+ }
+ return super.handleDetermination(path, prefix, value);
+ }
+
+ @EventHandler
+ public void onChatDistort(PlayerChatDistortEvent event) {
+ this.event = event;
+ fire(event);
+ }
+}
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryDrinkScriptEvent.java b/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryDrinkScriptEvent.java
new file mode 100644
index 000000000..4784dba9c
--- /dev/null
+++ b/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryDrinkScriptEvent.java
@@ -0,0 +1,62 @@
+package com.denizenscript.depenizen.bukkit.events.breweryx;
+
+
+import com.denizenscript.denizen.events.BukkitScriptEvent;
+import com.denizenscript.denizen.objects.ItemTag;
+import com.denizenscript.denizen.objects.PlayerTag;
+import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
+import com.denizenscript.denizencore.objects.ObjectTag;
+import com.denizenscript.denizencore.scripts.ScriptEntryData;
+import com.denizenscript.depenizen.bukkit.objects.breweryx.BreweryRecipeTag;
+import com.dre.brewery.api.events.brew.BrewDrinkEvent;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+
+public class BreweryDrinkScriptEvent extends BukkitScriptEvent implements Listener {
+
+ // <--[event]
+ // @Events
+ // brewery drink
+ //
+ // @Cancellable true
+ //
+ // @Triggers when a player drinks a potion that is considered a BreweryX potion.
+ //
+ // @Context
+ // Returns an ItemTag of the potion that was drunk.
+ // Returns an BreweryRecipeTag of the recipe that the brew is based off of.
+ // Returns a PlayerTag of the player that drank the brew.
+ //
+ // @Plugin Depenizen, BreweryX
+ //
+ // @Player Always.
+ //
+ // @Group Depenizen
+ //
+ // -->
+ public BreweryDrinkScriptEvent() {
+ registerCouldMatcher("brewery drink");
+ }
+
+ public BrewDrinkEvent event;
+
+ @Override
+ public ScriptEntryData getScriptEntryData() {
+ return new BukkitScriptEntryData(event.getPlayer());
+ }
+
+ @Override
+ public ObjectTag getContext(String name) {
+ return switch (name) {
+ case "recipe" -> new BreweryRecipeTag(event.getBrew().getCurrentRecipe());
+ case "item" -> new ItemTag(event.getBrew().createItem(event.getBrew().getCurrentRecipe(), false));
+ default -> super.getContext(name);
+ };
+ }
+
+ @EventHandler
+ public void onBrewDrinkEvent(BrewDrinkEvent event) {
+ this.event = event;
+ fire(event);
+ }
+}
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryIngredientAddScriptEvent.java b/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryIngredientAddScriptEvent.java
new file mode 100644
index 000000000..a77676c98
--- /dev/null
+++ b/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryIngredientAddScriptEvent.java
@@ -0,0 +1,83 @@
+package com.denizenscript.depenizen.bukkit.events.breweryx;
+
+import com.denizenscript.denizen.events.BukkitScriptEvent;
+import com.denizenscript.denizen.objects.ItemTag;
+import com.denizenscript.denizen.objects.LocationTag;
+import com.denizenscript.denizen.objects.PlayerTag;
+import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
+import com.denizenscript.denizencore.objects.ObjectTag;
+import com.denizenscript.denizencore.objects.core.ElementTag;
+import com.denizenscript.denizencore.scripts.ScriptEntryData;
+import com.dre.brewery.api.events.IngedientAddEvent;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+
+public class BreweryIngredientAddScriptEvent extends BukkitScriptEvent implements Listener {
+
+ // <--[event]
+ // @Events
+ // brewery ingredient add
+ //
+ // @Cancellable true
+ //
+ // @Triggers when a player adds an ingredient to a cauldron.
+ //
+ // @Context
+ // Returns an ItemTag of the ingredient that was added.
+ // Returns a LocationTag of the cauldron.
+ // Returns a PlayerTag of the player that added the ingredient.
+ // Returns an ElementTag of whether the item should be taken from the player.
+ //
+ // @Determine
+ // ItemTag to set the ingredient that was added.
+ // ElementTag(Boolean) to set whether the item should be taken from the player.
+ //
+ // @Plugin Depenizen, BreweryX
+ //
+ // @Player Always.
+ //
+ // @Group Depenizen
+ //
+ // -->
+ public BreweryIngredientAddScriptEvent() {
+ registerCouldMatcher("brewery ingredient add");
+ }
+
+ public IngedientAddEvent event;
+
+ @Override
+ public ScriptEntryData getScriptEntryData() {
+ return new BukkitScriptEntryData(event.getPlayer());
+ }
+
+ @Override
+ public ObjectTag getContext(String name) {
+ return switch (name) {
+ case "location" -> new LocationTag(event.getBlock().getLocation());
+ case "item" -> new ItemTag(event.getIngredient());
+ case "take_item" -> new ElementTag(event.willTakeItem());
+ default -> super.getContext(name);
+ };
+ }
+
+ @Override
+ public boolean handleDetermination(ScriptPath path, String prefix, ObjectTag value) {
+ switch (prefix) {
+ case "item" -> {
+ event.setIngredient(((ItemTag) value).getItemStack());
+ return true;
+ }
+ case "take_item" -> {
+ event.setTakeItem(((ElementTag) value).asBoolean());
+ return true;
+ }
+ }
+ return super.handleDetermination(path, prefix, value);
+ }
+
+ @EventHandler
+ public void onIngredientAddEvent(IngedientAddEvent event) {
+ this.event = event;
+ fire(event);
+ }
+}
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryModifyBrewScriptEvent.java b/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryModifyBrewScriptEvent.java
new file mode 100644
index 000000000..2aee5b8f5
--- /dev/null
+++ b/src/main/java/com/denizenscript/depenizen/bukkit/events/breweryx/BreweryModifyBrewScriptEvent.java
@@ -0,0 +1,66 @@
+package com.denizenscript.depenizen.bukkit.events.breweryx;
+
+import com.denizenscript.denizen.events.BukkitScriptEvent;
+import com.denizenscript.denizen.objects.ItemTag;
+import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
+import com.denizenscript.denizencore.objects.ObjectTag;
+import com.denizenscript.denizencore.objects.core.ElementTag;
+import com.denizenscript.denizencore.scripts.ScriptEntryData;
+import com.denizenscript.depenizen.bukkit.objects.breweryx.BreweryRecipeTag;
+import com.dre.brewery.api.events.brew.BrewModifyEvent;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+
+public class BreweryModifyBrewScriptEvent extends BukkitScriptEvent implements Listener {
+
+ // <--[event]
+ // @Events
+ // brewery brew modify
+ //
+ // @Cancellable true
+ //
+ // @Triggers When a Brew has been created or modified.
+ // Usually happens on filling from cauldron, distilling and aging.
+ // Modifications to the Brew or the PotionMeta can be done now
+ // Cancelling reverts the Brew to the state it was before the modification
+ //
+ // @Context
+ // Returns a PlayerTag of the player that modified the brew.
+ // Returns an BreweryRecipeTag of the recipe that the brew is based off of.
+ // Returns an ItemTag of the potion.
+ // Returns an ElementTag of the type of modification.
+ //
+ // @Plugin Depenizen, BreweryX
+ //
+ // @Player Always.
+ //
+ // @Group Depenizen
+ //
+ // -->
+ public BreweryModifyBrewScriptEvent() {
+ registerCouldMatcher("brewery brew modify");
+ }
+
+ public BrewModifyEvent event;
+
+ @Override
+ public ScriptEntryData getScriptEntryData() {
+ return new BukkitScriptEntryData(event.getPlayer());
+ }
+
+ @Override
+ public ObjectTag getContext(String name) {
+ return switch (name) {
+ case "recipe" -> new BreweryRecipeTag(event.getBrew().getCurrentRecipe());
+ case "item" -> new ItemTag(event.getBrew().createItem(event.getBrew().getCurrentRecipe(), false));
+ case "type" -> new ElementTag(event.getType());
+ default -> super.getContext(name);
+ };
+ }
+
+ @EventHandler
+ public void onBrewModifyEvent(BrewModifyEvent event) {
+ this.event = event;
+ fire(event);
+ }
+}
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/objects/breweryx/BreweryRecipeTag.java b/src/main/java/com/denizenscript/depenizen/bukkit/objects/breweryx/BreweryRecipeTag.java
new file mode 100644
index 000000000..f677aa812
--- /dev/null
+++ b/src/main/java/com/denizenscript/depenizen/bukkit/objects/breweryx/BreweryRecipeTag.java
@@ -0,0 +1,367 @@
+package com.denizenscript.depenizen.bukkit.objects.breweryx;
+
+import com.denizenscript.denizencore.objects.Fetchable;
+import com.denizenscript.denizencore.objects.ObjectTag;
+import com.denizenscript.denizencore.objects.core.ColorTag;
+import com.denizenscript.denizencore.objects.core.DurationTag;
+import com.denizenscript.denizencore.objects.core.ElementTag;
+import com.denizenscript.denizencore.objects.core.ListTag;
+import com.denizenscript.denizencore.tags.Attribute;
+import com.denizenscript.denizencore.tags.ObjectTagProcessor;
+import com.denizenscript.denizencore.tags.TagContext;
+import com.dre.brewery.recipe.BEffect;
+import com.dre.brewery.recipe.BRecipe;
+import com.dre.brewery.recipe.RecipeItem;
+import com.dre.brewery.utility.Tuple;
+import org.bukkit.Color;
+
+public class BreweryRecipeTag implements ObjectTag {
+
+ // <--[ObjectType]
+ // @name BreweryRecipeTag
+ // @prefix breweryrecipe
+ // @base ElementTag
+ // @format
+ // The identity format for brewery is
+ // For example, 'breweryrecipe@example_recipe'.
+ //
+ // @plugin Depenizen, BreweryX
+ // @description
+ // A BreweryRecipeTag represents a Brewery recipe.
+ //
+ // -->
+
+ @Fetchable("breweryrecipe")
+ public static BreweryRecipeTag valueOf(String string, TagContext context) {
+ if (string.startsWith("breweryrecipe@")) {
+ string = string.substring("breweryrecipe@".length());
+ }
+
+ BRecipe recipe = BRecipe.get(string);
+ if (recipe == null) {
+ return null;
+ }
+ return new BreweryRecipeTag(recipe);
+ }
+
+ public static boolean matches(String arg) {
+ arg = arg.replace("breweryrecipe@", "");
+ return BRecipe.get(arg) != null;
+ }
+
+ BRecipe bRecipe;
+
+ public BreweryRecipeTag(BRecipe bRecipe) {
+ this.bRecipe = bRecipe;
+ }
+
+ String prefix = "breweryrecipe";
+
+ @Override
+ public String getPrefix() {
+ return prefix;
+ }
+
+ @Override
+ public boolean isUnique() {
+ return true;
+ }
+
+ @Override
+ public String identify() {
+ return "breweryrecipe@" + bRecipe.getId();
+ }
+
+ @Override
+ public String identifySimple() {
+ return identify();
+ }
+
+ @Override
+ public ObjectTag setPrefix(String aString) {
+ prefix = aString;
+ return this;
+ }
+
+ public static void register() {
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the ID of the recipe.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "id", (attribute, object) -> {
+ String id = object.bRecipe.getId();
+ return new ElementTag(id, true);
+ });
+
+ // <--[tag]
+ // @attribute []
+ // @returns ElementTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the name of the recipe based on the provided quality number.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, ElementTag.class, "name", (attribute, object, quality) -> {
+ return new ElementTag(object.bRecipe.getName(quality.asInt()), true);
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the full name of the recipe as declared in the recipes file.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "full_name", (attribute, object) -> {
+ return new ElementTag(String.join("/", object.bRecipe.getName()), true);
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ListTag(ItemTag)
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns a ListTag of ItemTags that are the ingredients of the recipe.
+ // -->
+ tagProcessor.registerTag(ListTag.class, "ingredients", (attribute, object) -> {
+ ListTag ingredients = new ListTag();
+ for (RecipeItem recipeItem : object.bRecipe.getIngredients()) {
+ ingredients.add(recipeItem.toConfigString());
+ }
+ return ingredients;
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the difficulty of the recipe.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "difficulty", (attribute, object) -> {
+ return new ElementTag(object.bRecipe.getDifficulty());
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns DurationTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the cooking time of the recipe.
+ // -->
+ tagProcessor.registerTag(DurationTag.class, "cooking_time", (attribute, object) -> {
+ return new DurationTag(object.bRecipe.getCookingTime() * 60); // Brewery returns value in minutes
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the distill runs of the recipe.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "distill_runs", (attribute, object) -> {
+ return new ElementTag(object.bRecipe.getDistillruns());
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the amount of time each distill run takes.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "distill_time", (attribute, object) -> {
+ return new ElementTag(object.bRecipe.getDistillTime());
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the enum of the wood type to be used in the Recipe (ANY, BIRCH, OAK...).
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "wood", (attribute, object) -> {
+ return new ElementTag(object.bRecipe.getWood());
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the amount of minecraft days the potion must age in a Brewery barrel.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "age", (attribute, object) -> {
+ return new ElementTag(object.bRecipe.getAge());
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ColorTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the color of the distilled/finished potion.
+ // -->
+ tagProcessor.registerTag(ColorTag.class, "color", (attribute, object) -> {
+ Color color = object.bRecipe.getColor().getColor();
+ return new ColorTag(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha());
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the absolute amount of alcohol 0-100 in a perfect potion (will be added directly to the player, where 100 means fainting).
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "alcohol", (attribute, object) -> {
+ return new ElementTag(object.bRecipe.getAlcohol());
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ListTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns a ListTag of the lore of the recipe (displayed on potion).
+ // -->
+ tagProcessor.registerTag(ListTag.class, "lore", (attribute, object) -> {
+ if (object.bRecipe.getLore() == null) {
+ return null;
+ }
+ ListTag lore = new ListTag();
+ for (Tuple tuple : object.bRecipe.getLore()) {
+ lore.addObject(new ElementTag(tuple.second(), true));
+ }
+ return lore;
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ListTag(ElementTag(Number))
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns a ListTag of the 3 possible custom model data's for each varied quality of the recipe/potion.
+ // -->
+ tagProcessor.registerTag(ListTag.class, "custom_model_data", (attribute, object) -> {
+ ListTag cmDatas = new ListTag();
+ for (int cmData : object.bRecipe.getCmData()) {
+ cmDatas.addObject(new ElementTag(cmData));
+ }
+ return cmDatas;
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ListTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns a ListTag of potion effects of as their names (Example: SLOW_FALLING).
+ // -->
+ tagProcessor.registerTag(ListTag.class, "effects", (attribute, object) -> {
+ ListTag effects = new ListTag();
+ for (BEffect bEffect : object.bRecipe.getEffects()) {
+ effects.addObject(new ElementTag(bEffect.getType().toString(), true));
+ }
+ return effects;
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ListTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns a ListTag of commands that are run by the player when the potion is drunk.
+ // -->
+ tagProcessor.registerTag(ListTag.class, "player_commands", (attribute, object) -> {
+ if (object.bRecipe.getPlayercmds() == null) {
+ return null;
+ }
+ ListTag cmds = new ListTag();
+ for (Tuple tuple : object.bRecipe.getPlayercmds()) {
+ cmds.addObject(new ElementTag(tuple.second(), true));
+ }
+ return cmds;
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ListTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns a ListTag of commands that are run by the server when the potion is drunk.
+ // -->
+ tagProcessor.registerTag(ListTag.class, "server_commands", (attribute, object) -> {
+ if (object.bRecipe.getServercmds() == null) {
+ return null;
+ }
+ ListTag cmds = new ListTag();
+ for (Tuple tuple : object.bRecipe.getServercmds()) {
+ cmds.addObject(new ElementTag(tuple.second(), true));
+ }
+ return cmds;
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the message sent to the player when the potion is drunk.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "message", (attribute, object) -> {
+ if (object.bRecipe.getDrinkMsg() == null) {
+ return null;
+ }
+ return new ElementTag(object.bRecipe.getDrinkMsg(), true);
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the title message sent to the player when the potion is drunk.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "title", (attribute, object) -> {
+ if (object.bRecipe.getDrinkTitle() == null) {
+ return null;
+ }
+ return new ElementTag(object.bRecipe.getDrinkTitle(), true);
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns if the recipe, once created into a brew, has a glint effect.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "has_glint", (attribute, object) -> {
+ return new ElementTag(object.bRecipe.isGlint());
+ });
+
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns if the recipe is valid and can be created.
+ // -->
+ tagProcessor.registerTag(ElementTag.class, "is_valid", (attribute, object) -> {
+ return new ElementTag(object.bRecipe.isValid());
+ });
+ }
+
+ public static ObjectTagProcessor tagProcessor = new ObjectTagProcessor<>();
+
+ @Override
+ public ObjectTag getObjectAttribute(Attribute attribute) {
+ return tagProcessor.getObjectAttribute(this, attribute);
+ }
+}
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/properties/breweryx/BreweryPlayerExtensions.java b/src/main/java/com/denizenscript/depenizen/bukkit/properties/breweryx/BreweryPlayerExtensions.java
new file mode 100644
index 000000000..9b49e1c1a
--- /dev/null
+++ b/src/main/java/com/denizenscript/depenizen/bukkit/properties/breweryx/BreweryPlayerExtensions.java
@@ -0,0 +1,55 @@
+package com.denizenscript.depenizen.bukkit.properties.breweryx;
+
+import com.denizenscript.denizen.objects.PlayerTag;
+import com.denizenscript.denizencore.objects.core.ElementTag;
+import com.dre.brewery.BPlayer;
+
+public class BreweryPlayerExtensions {
+
+ public static void register() {
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the drunkenness of the brewery player or null if Brewery has no data on the player.
+ // -->
+ PlayerTag.tagProcessor.registerTag(ElementTag.class, "brewery_drunkenness", (attribute, object) -> {
+ BPlayer bPlayer = BPlayer.hasPlayer(object.getOfflinePlayer()) ? BPlayer.get(object.getOfflinePlayer()) : null;
+ if (bPlayer != null) {
+ return new ElementTag(bPlayer.getDrunkeness());
+ }
+ return null;
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the quality of the brewery player's drunkenness (drunkeness * drunkeness) or null if Brewery has no data on the player.
+ // -->
+ PlayerTag.tagProcessor.registerTag(ElementTag.class, "brewery_quality", (attribute, object) -> {
+ BPlayer bPlayer = BPlayer.hasPlayer(object.getOfflinePlayer()) ? BPlayer.get(object.getOfflinePlayer()) : null;
+ if (bPlayer != null) {
+ return new ElementTag(bPlayer.getQuality());
+ }
+ return null;
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, BreweryX
+ // @description
+ // Returns the drunkenness reduction per minute or null if Brewery has no data on the player.
+ // -->
+ PlayerTag.tagProcessor.registerTag(ElementTag.class, "brewery_alcoholrecovery", (attribute, object) -> {
+ BPlayer bPlayer = BPlayer.hasPlayer(object.getOfflinePlayer()) ? BPlayer.get(object.getOfflinePlayer()) : null;
+ if (bPlayer != null) {
+ return new ElementTag(bPlayer.getAlcRecovery());
+ }
+ return null;
+ });
+ }
+}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 4d231cdae..501a2567a 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -13,6 +13,7 @@ softdepend:
- BetonQuest
- BigDoors
- BossShopPro
+ - BreweryX
- CoreProtect
- CrackShot
- EffectLib