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