# Default Recipes (/docs/breweryx/default-recipes)
Note that server administrators can add, change, and remove recipes, so those recipes might not be present on every
server.
```yaml title="recipes.yml"
# !!! IMPORTANT: BreweryX configuration files do NOT support external comments! If you add any comments, they will be overwritten !!!
# -- Recipes for Potions --
# enabled: true if the recipe should be enabled, false if it should be disabled
# name: Different names for bad/normal/good (Formatting codes possible: such as &6 or hex as )
# name: "Worst drink/Good Drink/Best drink i had in my entire life!"
# ingredients: List of 'material/amount'
# With an item in your hand, use /brew ItemName to get its material for use in a recipe
# A list of materials can be found here: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html
# Plugin items with 'plugin:id' (Currently supporting Brewery, Garden (BreweryX Garden Addon), Oraxen, ItemsAdder, Nexo, Slimefun)
# Example: '- itemsadder:grape/5'
# Custom items from 'custom-items.yml' do not require any prefixes ('- example_custom_item/10')
# You can also use drinks as ingredients for other drinks. Correct format for this would be: 'brewery:ID/amount'
# Example: '- brewery:wheatbeer/1'
# cookingtime: Time in real minutes ingredients have to boil
# distillruns: How often it has to be distilled for full alcohol (0=without distilling)
# distilltime: How long (in seconds) one distill-run takes (0=Default time of 40 sec) MC Default would be 20 sec
# wood: Wood of the barrel:
# Can be a string, a number (see conversion below), or a list of wood types.
# 0=any 1=Birch 2=Oak 3=Jungle 4=Spruce
# 5=Acacia 6=Dark Oak 7=Crimson 8=Warped
# 9=Mangrove 10=Cherry 11=Bamboo 12=Cut Copper 13=Pale Oak
# you can also use id or name, instead of number:
# wood: 13
# wood: pale_oak
# wood: Pale Oak
# Vanilla Minecraft barrel is considered oak
# age: Time, in "years", the potion has to age in a barrel 0=no aging
# color: Color of the potion after distilling/aging.
# Usable Colors: DARK_RED, RED, BRIGHT_RED, ORANGE, YELLOW, PINK, PURPLE, BLUE, CYAN, WATER, TEAL, OLIVE, GREEN, LIME, BLACK, GREY, BRIGHT_GREY, WHITE
# Or RGB colors (color: 99FF33) (search for "HTML color" on the internet)
# difficulty: 1-10 accuracy needed to get good quality (1 = unaccurate/easy, 10 = very precise/hard)
# alcohol: Absolute amount of alcohol 0-100 in a perfect potion (will be added directly to the player, where 100 means fainting)
# lore: List of additional text on the finished brew. (Formatting codes possible: such as &6)
# Specific lore for quality possible, using + bad, ++ normal, +++ good, added to the front of the line.
# - +++ This is the best drink!
# - ++ This is decent drink.
# - + This is the worst drink
# servercommands: List of Commands executed by the -Server- when drinking the brew (Can use %player_name% %quality%)
# Specific Commands for quality possible, using + bad, ++ normal, +++ good, added to the front of the line.
# - +++ op %player_name%
# - ++ money give %player_name% 10
# - + kill %player_name%
# Command execution can be delayed by adding "/ s" to the end, like this:
# - op Jsinco / 3s
# playercommands: List of Commands executed by the -Player- when drinking the brew (Can use %player_name% %quality%)
# Specific Commands for quality possible, using + bad, ++ normal, +++ good, added to the front of the line.
# - +++ spawn
# - ++ home
# - + suicide
# Command execution can be delayed by adding "/ s" to the end, like this:
# - op Jsinco / 3s
# drinkmessage: Chat-message to the Player when drinking the Brew
# drinktitle: Title on Screen to the Player when drinking the Brew
# glint: Boolean if the item should have a glint (enchant glint)
# customModelData: Custom Model Data Tag. This is a number that can be used to add custom textures to the item.
# Can specify one for all, or one for each quality, separated by /
# customModelData: 1
# customModelData: 1/2/3
# effects: List of effect/level/duration Special potion-effect when drinking, duration in seconds.
# Possible Effects: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html
# Level or Duration ranges may be specified with a "-", ex. 'SPEED/1-2/30-40' = lvl 1 and 30 sec at worst and lvl 2 and 40 sec at best
# Ranges also work high-low, ex. 'POISON/3-1/20-5' for weaker effects at good quality.
# Highest possible Duration: 1638 sec. Instant Effects dont need any duration specified.
# 'ex' showcases every available option for a recipe:
recipes:
ex:
enabled: true
name: Bad Example/Example/Good Example
ingredients:
- Bedrock/2
- Spruce_Planks/8
- Bedrock/1
- Brewery:Wheatbeer/2
- ExoticGarden:Grape/3
- ex-item/4
cookingtime: 3
distillruns: 2
distilltime: 60
wood: 4
age: 11
color: DARK_RED
difficulty: 3
alcohol: 14
lore:
- This is an example brew
- ++Just a normal Example
- This text would be on the brew
- + Smells disgusting
- ++ Smells alright
- +++ Smells really good
servercommands:
- +++ weather clear
- + weather rain
playercommands:
- homes
drinkmessage: Tastes good
drinktitle: Warms you from inside
glint: true
customModelData: 556/557/557
effects:
- FIRE_RESISTANCE/20
- HEAL/1
- WEAKNESS/2-3/50-60
- POISON/1-0/20-0
wheatbeer:
name: Skunky Wheatbeer/Wheatbeer/Fine Wheatbeer
ingredients:
- Wheat/3
cookingtime: 8
distillruns: 0
wood: 1
age: 2
color: ffb84d
difficulty: 1
alcohol: 5
lore:
- +++ &8Refreshing
beer:
name: Skunky Beer/Beer/Fine Beer
ingredients:
- Wheat/6
cookingtime: 8
distillruns: 0
wood: 0
age: 3
color: ffd333
difficulty: 1
alcohol: 6
lore:
- +++ &8Crisp taste
darkbeer:
name: Skunky Darkbeer/Darkbeer/Fine Darkbeer
ingredients:
- Wheat/6
cookingtime: 8
distillruns: 0
wood: 6
age: 8
color: "650013"
difficulty: 2
alcohol: 7
lore:
- +++ &8Roasted taste
wine:
name: Red Wine
ingredients:
- Sweet_Berries/5
cookingtime: 5
distillruns: 0
wood: 0
age: 20
color: RED
difficulty: 4
alcohol: 8
lore:
- + &8Harsh
- + &8Corked
- ++ &8Mellow
- +++ &8Full-Bodied
mead:
name: Awkward Mead/Mead/&6Golden Mead
ingredients:
- Sugar_Cane/6
cookingtime: 3
distillruns: 0
wood: 2
age: 4
color: ORANGE
difficulty: 2
alcohol: 9
lore:
- +++ Has a golden shine
ap_mead:
name: Apple Mead/Sweet Apple Mead/&6Sweet Golden Apple Mead
ingredients:
- Sugar_Cane/6
- Apple/2
cookingtime: 4
distillruns: 0
wood: 2
age: 4
color: ORANGE
difficulty: 4
alcohol: 11
lore:
- Is there any Apple in this?
- Refreshing taste of Apple
- Sweetest hint of Apple
effects:
- WATER_BREATHING/1-2/150
cidre:
name: Poor Cidre/Apple Cider/Great Apple Cider
ingredients:
- Apple/14
cookingtime: 7
distillruns: 0
wood: 0
age: 3
color: f86820
difficulty: 4
alcohol: 7
apple_liquor:
name: Sour Apple Liquor/Apple Liquor/Calvados
ingredients:
- Apple/12
cookingtime: 16
distillruns: 3
wood: 5
age: 6
color: BRIGHT_RED
difficulty: 5
alcohol: 14
lore:
- +Sour like Acid
- +++ Good Apple Liquor
whiskey:
name: Unsightly Whiskey/Whiskey/Scotch Whiskey
ingredients:
- Wheat/10
cookingtime: 10
distillruns: 2
distilltime: 50
wood: 4
age: 18
color: ORANGE
difficulty: 7
alcohol: 26
lore:
- "&7Single Malt"
rum:
name: Bitter Rum/Spicy Rum/&6Golden Rum
ingredients:
- Sugar_Cane/18
cookingtime: 6
distillruns: 2
distilltime: 30
wood: 2
age: 14
color: DARK_RED
difficulty: 6
alcohol: 30
lore:
- + &8Too bitter to drink
- ++ &8Spiced by the barrel
- +++ &eSpiced Gold
effects:
- FIRE_RESISTANCE/1/20-100
- POISON/1-0/30-0
vodka:
name: Lousy Vodka/Vodka/Russian Vodka
ingredients:
- Potato/10
cookingtime: 15
distillruns: 3
age: 0
color: WHITE
difficulty: 4
alcohol: 20
lore:
- + &8Almost undrinkable
effects:
- WEAKNESS/15
- POISON/10
shroom_vodka:
name: Mushroom Vodka/Mushroom Vodka/Glowing Mushroom Vodka
ingredients:
- Potato/10
- Red_Mushroom/3
- Brown_Mushroom/3
cookingtime: 18
distillruns: 5
age: 0
color: ff9999
difficulty: 7
alcohol: 18
lore:
- +++&aGlows in the dark
effects:
- WEAKNESS/80
- CONFUSION/27
- NIGHT_VISION/50-80
- BLINDNESS/12-2
- SLOW/10-3
gin:
name: Pale Gin/Gin/Old Tom Gin
ingredients:
- Wheat/9
- blue-flowers/6
- Apple/1
cookingtime: 6
distillruns: 2
color: 99ddff
difficulty: 6
alcohol: 20
lore:
- ++ With the
- ++ taste of juniper
- +++ Perfectly finished off
- +++ with juniper
tequila:
name: Mezcal/Tequila/Tequila anejo
ingredients:
- cactus/8
cookingtime: 15
distillruns: 2
wood: 1
age: 12
color: f5f07e
difficulty: 5
alcohol: 20
lore:
- Desert spirit
absinthe:
name: Poor Absinthe/Absinthe/Strong Absinthe
ingredients:
- Grass/15
cookingtime: 3
distillruns: 6
distilltime: 80
color: GREEN
difficulty: 8
alcohol: 42
lore:
- +++&8High proof liquor
effects:
- POISON/15-25
gr_absinthe:
name: Poor Absinthe/Green Absinthe/Bright Green Absinthe
ingredients:
- Grass/17
- Poisonous_Potato/2
cookingtime: 5
distillruns: 6
distilltime: 85
color: LIME
difficulty: 9
alcohol: 46
lore:
- "&aLooks poisonous"
effects:
- POISON/25-40
- HARM/2
- NIGHT_VISION/40-60
potato_soup:
name: Potato soup
ingredients:
- Potato/5
- Grass/3
cookingtime: 3
color: ORANGE
difficulty: 1
effects:
- HEAL/0-1
coffee:
name: Stale Coffee/Coffee/Strong Coffee
ingredients:
- Cocoa_Beans/12
- Milk_Bucket/2
cookingtime: 2
color: BLACK
difficulty: 3
alcohol: -6
lore:
- + &8Probably a week old
effects:
- REGENERATION/1/2-5
- SPEED/1/30-140
eggnog:
name: Egg Liquor/Eggnog/Advocaat
ingredients:
- Egg/5
- Sugar/2
- Milk_Bucket/1
cookingtime: 2
age: 3
color: ffe680
difficulty: 4
alcohol: 10
lore:
- Made with raw egg
g_vodka:
name: Rancid Vodka/&6Golden Vodka/&6Shimmering Golden Vodka
ingredients:
- Potato/10
- Gold_Nugget/2
cookingtime: 18
distillruns: 3
age: 0
color: ORANGE
difficulty: 6
alcohol: 20
effects:
- WEAKNESS/28
- POISON/4
fire_whiskey:
name: Powdery Whiskey/Burning Whiskey/Blazing Whiskey
ingredients:
- Wheat/10
- Blaze_Powder/2
cookingtime: 12
distillruns: 3
distilltime: 55
wood: 4
age: 18
color: ORANGE
difficulty: 7
alcohol: 28
drinkmessage: You get a burning feeling in your mouth
hot_choc:
name: Hot Chocolate
ingredients:
- cookie/3
cookingtime: 2
color: DARK_RED
difficulty: 2
effects:
- FAST_DIGGING/40
iced_coffee:
name: Watery Coffee/Iced Coffee/Strong Iced Coffee
ingredients:
- cookie/8
- snowball/4
- milk_bucket/1
cookingtime: 1
color: BLACK
difficulty: 4
alcohol: -8
effects:
- REGENERATION/30
- SPEED/10
# More recipe ideas:
# Dandelion Liquor
# Beetroot Spirit
# Poppy Liquor: Macum/Grand Poppy
# Bamboo Liquor: Chu Yeh Ching
# Cachaca
# Cognac
# Sake
# Buorbon
# Moonshine
# Different Wines
# Brandy
# Amaretto
# etc. as well as variations like,
# Pumpkin Spice Beer
# Melon Vodka
# There are a lot of items in Minecraft like Vines, Milk and items added by plugins that would make great ingredients.
```
# Welcome (/docs/breweryx)
Welcome to the BreweryX documentation!
Here you can find all the information you need to get started with BreweryX, including installation instructions, configuration options, and API references.
# Home (/docs)
Don't know what to write here in this category yet, maybe some FaQs?, idk
Use the sidebar to navigate to the different sections of the documentation.\
Click on Home (the top one on the left) to see other sections.
# Welcome (/docs/garden)
Welcome to the documentation for Garden.
Garden is a plugin for Paper-based servers that implements an in-depth growth system for plants and crops using schematics.
# BreweryX vs TBP (/docs/tbp/breweryx-vs-tbp)
### At a glance [#at-a-glance]
BreweryX is more tested, as it's a 10-year-old project, but its rewrite, TBP, has much cleaner code, more advanced features and maintenance priority
There's a good chance that this page is already outdated, as TBP is in very active development, so if you want to
know the current state of things, check out [the
changelog](https://modrinth.com/plugin/thebrewingproject/changelog).
### Differences [#differences]
* TBP supports custom multiblock structures as distilleries where BreweryX only allowed regular brewing stands to be used.
* TBP doesn't copy every small feature from BreweryX to reduce the feature bloat, but if you need a specific thing, reach out to us, and we will consider it
* TBP's brew creation is a bit less forgiving (customizable) so, on default settings, you can no longer make a beer with an entire stack of wheat if all other steps are ok
* While the time it takes to distill something is specified per recipe in BreweryX, in TBP, this is specified per distillery, so you can have faster and slower distilleries
* BreweryX encrypts its data the will-deter-average-people way, while TBP encrypts its data the don't-even-try-to-decrypt-that way and supports easy encryption-key rotation
### New features in TBP [#new-features-in-tbp]
* The distillery is now its own multiblock structure, made up of three decorated pots and three bamboo fences
* You may define your own custom multiblock structures to be used as barrels or distilleries, by using schematics
* An event system allows fine-tuning what drinks cause what after effects + you may create your own custom events
* You can introduce your own modifiers instead of- or in addition to alcohol, toxins and alcohol-addiction/tolerance
* The order of steps in a recipe is not pre-defined, so you could do `distill➜age➜cook➜cook➜age➜distill` for example
* You can freely choose the output material of a potion, so a haste potion can look like a diamond pickaxe if you wish
* Group ingredients together to, for example, allow any kind of grass, with dried grass leading to lower drink quality
* A new `mix` step that is basically the same as `cook`, but without a heat source underneath the cauldron
* The `cook` and `mix` steps can require a specific substance in the cauldron (water/lava/snow)
[](https://canary.discord.com/channels/1108854517048549396/1272805304601415711/1396831593892548680)
# Welcome (/docs/tbp)
Hi!\
Welcome to TheBrewingProject's Documentation!
# Plugin API (/docs/breweryx/for-developers/plugin-api)
If you're a developer looking to extend your plugin's functionality with BreweryX, you've come to the right place.\
On this page, we'll walk through how to set up BreweryX's API and start writing your own custom features.
## Repository and Dependency [#repository-and-dependency]
```kotlin title="build.gradle.kts"
repositories {
maven("https://repo.jsinco.dev/releases")
}
dependencies {
compileOnly("com.dre.brewery:BreweryX:%VERSION%")
}
```
```groovy title="build.gradle"
repositories {
maven {
url "https://repo.jsinco.dev/releases"
}
}
dependencies {
compileOnly "com.dre.brewery:BreweryX:%VERSION%"
}
```
```xml title="pom.xml"
jsinco-repohttps://repo.jsinco.dev/releasescom.dre.breweryBreweryX%VERSION%provided
```
## Usage [#usage]
We offer a variety of utilities and events within BreweryX's [`api`](https://github.com/BreweryTeam/BreweryX/tree/master/src/main/java/com/dre/brewery/api) package.
### Example [#example]
```java
// Checking if an item is a BreweryX potion
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
ItemStack item = event.getItem();
if (BreweryApi.isBrew(item)) {
event.getPlayer().sendMessage("This is a BreweryX potion!");
}
}
```
```kotlin
// Checking if an item is a BreweryX potion
@EventHandler
fun onPlayerInteract(event: PlayerInteractEvent) {
val item = event.item
if (BreweryApi.isBrew(item)) {
event.player.sendMessage("This is a BreweryX potion!")
}
}
```
# Install (/docs/breweryx/for-server-owners/install)
## Requirements [#requirements]
* **Java 21+**
* Spigot/Paper 1.20.2+
BreweryX requires Java 21. Because Minecraft versions before 1.20.5 use older versions of Java, BreweryX will **not** work on them unless you update Java.
Additionally, we no longer officially support older Minecraft versions, so you may still experience bugs even with Java 21. If you must use an older Minecraft version, please use an older release of BreweryX or contact us on our Discord Server for support.
## First Install [#first-install]
Download the plugin from one of the following sources:
* [Modrinth](https://modrinth.com/plugin/breweryx) (recommended)
* [Hangar](https://hangar.papermc.io/Jsinco/BreweryX)
* [GitHub Releases](https://github.com/BreweryTeam/BreweryX/releases)
* [Our Jenkins](https://ci.nadwey.pl/) (dev builds, not recommended)
Add the plugin
* Stop the Server
* Put the JAR into the `/plugins` directory
* Start the Server
Congratulations, BreweryX is now installed
## Migrating from Brewery [#migrating-from-brewery]
Migrating from the original Brewery plugin to Brewery**X** is usually a smooth process. However, the significant changes in Brewery**X** may lead to some minor complications during the upgrade.
So, if you encounter any issues, please don't hesitate to reach out to us for support on our Discord Server
Delete the original Brewery
* Stop the Server
* **Delete the original Brewery JAR**
* **DO NOT** delete Brewery's data directory
Add Brewery**X** to the Server
* Put the Brewery**X** JAR into the `/plugins` directory
* Start the Server
Brewery
**X**
should automatically migrate the data into its own directory.
# Global Configuration (/docs/garden/config/global)
The Garden configuration (`config.yml`), contains various miscellaneous settings that affect the behavior of Garden as a whole.
These settings do not apply to any specific plant.
```yaml
# https://docs.breweryteam.dev/docs/garden
# Customizes the default language used for messages.
language: en-US
# Whether to use client-sided translations for messages. If false, messages will be sent in the language specified above.
client-sided-translations: false
# The chance for a seed to spawn when breaking valid seed drop blocks. (0-100)
seed-spawn-chance: 15
# Block types that seeds can drop from when broken.
valid-seed-drop-blocks:
- SHORT_GRASS
- TALL_GRASS
# Block types that seeds can be planted on.
plantable-blocks:
- GRASS_BLOCK
- DIRT
- COARSE_DIRT
- PODZOL
- MYCELIUM
- ROOTED_DIRT
# Worlds where seeds will not drop and cannot be planted. This does not affect the growth of plants.
blacklisted-worlds:
- resource
- resource_nether
# A list of tags of materials generated through Garden that will drop when broken.
drops-default-items:
- '#minecraft:logs'
# A map of tags of materials generated through Garden with custom drops.
drop-override:
'#minecraft:wooden_stairs': STICK
'#minecraft:wooden_trapdoors': STICK
# Let fruits fall to the ground as items after a while.
fall-fruit: true
# Whether players can use bone meal to advance a garden plants growth.
bonemeal-growth: true
# The percent chance that using bone meal on a garden plant advances its growth by one stage (0-100).
bonemeal-chance: 25
```
# Plant Configuration (/docs/garden/config/plant)
Plant configurations are specific to each plant and exist in the base directory for each plant as `plant.yml`.
These configurations contain settings that affect the behavior of the specific plant they belong to, such as growth stages, display names, etc.
## What are "tracks"? [#what-are-tracks]
Tracks are a way to specify different growth paths for a plant.
Each track corresponds to a folder in the same directory as the plant's `plant.yml` and contains schematic files that represent the different growth stages of the plant.
When a plant grows, it will randomly select a track (or use the specified track) and use the schematic files in that track to determine how the plant grows and what it looks like at each growth stage.
## Folder structure [#folder-structure]
Each plant lives in its own folder inside the `plants` directory. That folder holds the plant's `plant.yml` and one subfolder per track, with each track containing the schematic files for its growth stages.
* In the example provided below, `apple` has a track called `fLip` with 5 growth stages, while `blueberry` has a track called `default` with 2 growth stages.
Both plants have their own `plant.yml` configuration file and more tracks can be added by simply creating new folders with schematic files in them.
## Configuration Settings [#configuration-settings]
```yaml
# https://docs.breweryteam.dev/docs/garden/config/plant
# Approximate growth time in minutes or days (e.g. "30m" or "1d").
approximate-growth-time: "1d"
# How fruits are placed when a plant grows. Options are: ADJACENT, ABOVE and UNDER.
fruit-placement: UNDER
# The track that should be used for this plant (optional)
# This should correspond to a folder or "track" defined in the same directory as this plant's `plant.yml`.
tracks:
- fLip # fLip is the player name of our plant builder
# Whether this plant may bear fruit.
# If false, the plant will not produce any fruit even if it grows successfully. If unspecified, this will default to true.
bear-fruit: true
# See items definition section for more information
seeds:
# The item's display name
display-name: "Apple Seeds"
# The item material
material: sweet_berries
# See items definition section for more information
fruit:
# The item's display name
display-name: "Apple"
# The item material
material: apple
```
## Items Definition [#items-definition]
### Player head items [#player-head-items]
```yaml
# The item's display name
display-name: "<#4f86f7>Blueberry"
# The head texture in base64
head-texture-base64: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDI2OTdmM2VmOGY0NjI5YjY0NWZkMmU2NDQ2NDEzMjRhMWMxMTgzNTQ5OGU2MzhmNzU3ZjI3OGFmYmNlNWRiMSJ9fX0="
# The lore of the item
lore:
- Line 1
- Line 2
# How the items color should be shown (used by TheBrewingProject)
color: dark_red # Also supports hex codes like this "#4f86f7"
# Specify more precisely how you want the fruit to be placed (optional)
fruit-placement: ... # See fruit placement definition
# Extra data for the item
data: ... # See extra item data definition
```
### Material items [#material-items]
```yaml
# The item's display name
display-name: "Apple"
# The items material
material: apple
# The scale of the item display when placed to a tree (optional + legacy value)
placed-scale: 0.7
# How the items color should be shown (used by TheBrewingProject)
color: dark_red # Also supports hex codes like this "#4f86f7"
# The lore of the item (optional)
lore:
- Line 1
- Line 2
# Specify more precisely how you want the fruit to be placed (optional)
fruit-placement: ... # See fruit placement definition
# Extra data for the item
data: ... # See extra item data definition
```
## Fruit placement definition [#fruit-placement-definition]
### Player head placement [#player-head-placement]
```yml
# The head texture in base64
head-texture-base64: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDI2OTdmM2VmOGY0NjI5YjY0NWZkMmU2NDQ2NDEzMjRhMWMxMTgzNTQ5OGU2MzhmNzU3ZjI3OGFmYmNlNWRiMSJ9fX0="
```
### Material placement [#material-placement]
```yml
# Extra data for the item shown by the item display, note that only texture changes will be noted by users
data: ... # See extra item data definition
# The scale of the item display when placed to a tree (optional)
placed-scale: 0.7
# The amount of item displays to render, for example a block type item should be 1, and a normal item 2
item-displays: 2
# The items material
material: apple
```
### Extra item data [#extra-item-data]
```yml
# All extra data is optional
data:
# Define custom model data for the item
customModelData:
floats:
- 0
- 1
- 2
colors:
- red
- "#000000" # Black in hex code
flags:
- true
- false
# Define custom persistent data container data, usually used by plugins, use with caution
pdc:
# Supports boolean, byte, short, int, long, float, double, string. Array types are not supported!
my_plugin:key_value:
type: string
value: "My value"
my_plugin:other_key:
type: boolean
value: true
# Define custom consume properties for this item
# Hint: If you don't want the item to be consumable, specify it as such:
# consumption: {}
consumption:
consumeEffects:
# Randomly teleport once consumed, like when eating chorus fruit
- type: teleport
diameter: 1.0
# Play sound once consumed
- type: playSound
soundKey: minecraft:ambient_cave
# Apply potion effects once consumed
- type: potionEffects
# effect[;duration[;amplifier]]
# Note that amplifier level one has the data value 0 and duration is in ticks
effects:
- poison;10;2
- regeneration;10
- speed # Default to speed;20;0
# Remove potion effect once consumed
- removeEffects:
- lucky
# The animation to show when consuming the item
# Any of [none, eat, drink, block, bow, spear, crossbow, spyglass, toot_horn, brush, bundle]
animation: eat
# The time it takes to consume the item in seconds
consumeSeconds: 1.0
# Whether to show consume particles when consuming the item
consumeParticles: true
# Whether to play a sound during consumption
sound: minecraft:ambient_cave
# Whether the item can always be eaten regardless of hunger
canAlwaysEat: false
# The nutrition gained when consuming the item
nutrition: 10
# The amount of saturation gained per nutrition level when consuming this item
saturation: 0.5 # 50 percent
# Define the item model to use
itemModel: minecraft:dirt
```
# Install (/docs/tbp/for-server-owners/install)
## Requirements [#requirements]
* `Java 25+`
* `PaperMC 1.21.8+` (or any compatible fork like Folia, Purpur), **SpigotMC will not work**
Performance focused PaperMC forks like [Canvas](https://github.com/CraftCanvasMC/Canvas), [Leaf](https://github.com/Winds-Studio/Leaf), and [LightingLuminol](https://github.com/LuminolMC/LightingLuminol) often cause compatibility issues with plugins.
Our team has already received reports of BreweryX breaking with them (see [issue #138](https://github.com/BreweryTeam/BreweryX/issues/138), [issue #85](https://github.com/BreweryTeam/BreweryX/issues/85)).
While we can't guarantee that TheBrewingProject will work perfectly with these forks, its compatibility should be better than BreweryX's.
## Installation [#installation]
Download the plugin from one of the following sources: Modrinth,{" "}
Hangar, or Jenkins (dev builds)
Add the plugin
* Stop the Server
* Put the JAR into the `/plugins` directory
* Start the Server
Congratulations, **TheBrewingProject** is now installed!
If you run into any issues during installation, please check your logs for errors. They often contain valuable information for troubleshooting.
If you need more help, feel free to reach out to us on our Discord Server!
# Migrating from BreweryX (/docs/tbp/for-server-owners/migrate-from-breweryx)
You can now migrate from BreweryX, this is how it's done:
Obtain
[this](https://ci.breweryteam.dev/job/BreweryTeam/job/TheBrewingProject/job/master/lastBuild/artifact/migration/build/libs/TheBrewingProjectMigration-master.jar)
migration plugin file
Add the migration plugin you downloaded and TheBrewingProject into your
`/plugins`
folder
You can now run your server
After the server has started, stop the server and remove both BreweryX and the migration plugin
### What will be migrated? [#what-will-be-migrated]
* Barrels (any non brews will be erased)
* Brews inside containers - everytime a player opens a container, TheBrewingProject will check if it contains a BreweryX brew and migrate it if needed. (and no, you don't need the migration plugin for this)
* Cauldrons with their brew progress and ingredients
* Everything in the `recipes.yml` file, except for:
* Most ingredient defined in `custom-items.yml`
* Other brews as ingredients might also break, as the brew display name can no longer be used as a key.
Direct command definitions for recipes are no longer possible in TheBrewingProject, these will automatically be migrated over to event definitions, see `events.yml`
### What will **not** be migrated? [#what-will-not-be-migrated]
Everything not listed in the above section will not be migrated, this includes:
* `config.yml`
* `custom-items.yml`
* `cauldron.yml`
# Getting drunk (/docs/tbp/gameplay/getting-drunk)
## How to get drunk [#how-to-get-drunk]
Just drink the booze, silly you. Note that improperly made beverages can make you sick. Quality matters!
## What will happen when I'm drunk? [#what-will-happen-when-im-drunk]
Lookie here, kiddo. If you're asking what will happen when you get drunk, then you have never been drunk before. I will list the effects anyhow
### You become fluent in a new language, only gods will truly understand you now [#you-become-fluent-in-a-new-language-only-gods-will-truly-understand-you-now]
### Your walk becomes divine. Destination unknown [#your-walk-becomes-divine-destination-unknown]
TODO
### Momentary ascension, you might forget a bit about it though [#momentary-ascension-you-might-forget-a-bit-about-it-though]
TODO
## How to get sober [#how-to-get-sober]
The simplest way to get sober is to eat a lot of **bread** and drink **milk**. This is configurable by your server though.
# Addon Commands & Events (/docs/breweryx/for-developers/addons/addon-commands-and-events)
### Addon Commands [#addon-commands]
Addon commands should be registered through the `registerCommand` method in the `onAddonEnable` method.
Addon commands will appear as subcommands for the `/breweryx` command in-game.
```java title="MyCommand.java"
public class MyCommand implements AddonCommand {
@Override
public void execute(BreweryPlugin breweryPlugin, Lang lang, CommandSender sender, String label, String[] args) {
sender.sendMessage("Hello, from MyCommand!");
}
@Override
public List tabComplete(BreweryPlugin breweryPlugin, CommandSender sender, String label, String[] args) {
return null;
}
@Override
public String getPermission() {
return "brewery.myaddon.command";
}
@Override
public boolean playerOnly() {
return false;
}
}
@Override
public void onAddonEnable() {
registerCommand("mycommand", new MyCommand());
}
```
```kotlin title="MyCommand.kt"
class MyCommand : AddonCommand {
override fun execute(breweryPlugin: BreweryPlugin, lang: Lang, sender: CommandSender, label: String, args: Array) {
sender.sendMessage("Hello, from MyCommand!")
}
override fun tabComplete(breweryPlugin: BreweryPlugin, sender: CommandSender, label: String, args: Array): List? {
return null
}
override fun getPermission(): String {
return "brewery.myaddon.command"
}
override fun playerOnly(): Boolean {
return false
}
}
override fun onAddonEnable() {
registerCommand("mycommand", MyCommand())
}
```
### Events in addons [#events-in-addons]
Events in addons should be declared the same way as they are in normal Bukkit plugins.
The only difference being, is that you must register them through your addons `registerListener`
method in the `onAddonEnable` method.
```java title="MyListener.java"
public class MyListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
event.getPlayer().sendMessage("Hello, from MyListener!");
}
}
@Override
public void onAddonEnable() {
registerListener(new MyListener());
}
```
```kotlin title="MyListener.kt"
class MyListener : Listener {
@EventHandler
fun onPlayerJoin(event: PlayerJoinEvent) {
event.player.sendMessage("Hello, from MyListener!")
}
}
override fun onAddonEnable() {
registerListener(MyListener())
}
```
# Addon Configurations (/docs/breweryx/for-developers/addons/addon-configurations)
### Configuration files in addons [#configuration-files-in-addons]
Addons support configuration files using Okaeri config,
which is a powerful and easy-to-use configuration library.
Lombok is recommended for Java developers to reduce boilerplate code.
```java title="MyConfig.java"
@OkaeriConfigFile(fileName = "addon-config.yml")
@Getter @Setter
public class MyConfig extends AddonConfigFile {
private String message = "Hello, from MyConfig!";
}
@Override
public void onAddonEnable() {
MyConfig config = getAddonConfigManager().getConfig(MyConfig.class);
getLogger().info(config.getMessage());
}
```
```kotlin title="MyConfig.kt"
@OkaeriConfigFile(fileName = "addon-config.yml")
class MyConfig : AddonConfigFile() {
// Do not use 'val' for config keys!
var message = "Hello, from MyConfig!"
}
override fun onAddonEnable() {
val config = addonConfigManager.getConfig(MyConfig::class.java)
logger.info(config.message)
}
```
# Creating a project (/docs/breweryx/for-developers/addons/creating-a-project)
BreweryX supports addons that can add new features to the plugin.
This can be new brewing recipes, custom items, or other features.
This section documents how to create an addon for BreweryX.
### Choosing a language [#choosing-a-language]
BreweryX supports addons compiled down to Java >=17. We also support Kotlin natively.
If you're using Kotlin in your project, please **don't** shade in its standard libraries!
### Creating an addon [#creating-an-addon]
See our [template repository](https://github.com/BreweryTeam/ExampleBreweryAddon) addons for project setup and what dependencies to include.
After setting up your project, you'll need a main class that extends BreweryAddon and implements the `onAddonEnable` method.
```java title="MyAddon.java"
import com.dre.brewery.api.addons.BreweryAddon;
import com.dre.brewery.api.addons.AddonInfo;
@AddonInfo(name = "MyAddon", version = "1.0", author = "Jsinco")
public class MyAddon extends BreweryAddon {
@Override
public void onAddonEnable() {
// Code which is executed when MyAddon is enabled
}
@Override
public void onAddonDisable() {
// Code which is executed when BreweryX is disabled
}
@Override
public void onBreweryReload() {
// Code which is executed when `/breweryx reload` is executed
}
}
```
```kotlin title="MyAddon.kt"
import com.dre.brewery.api.addons.BreweryAddon
import com.dre.brewery.api.addons.AddonInfo
@AddonInfo(name = "MyAddon", version = "1.0", author = "Jsinco")
class MyAddon : BreweryAddon() {
override fun onAddonEnable() {
// Code which is executed when MyAddon is enabled
}
override fun onAddonDisable() {
// Code which is executed when BreweryX is disabled
}
override fun onBreweryReload() {
// Code which is executed when `/breweryx reload` is executed
}
}
```
# Cauldron Items (/docs/breweryx/for-server-owners/config/cauldron)
# The cauldron.yml file [#the-cauldronyml-file]
The `cauldron.yml` file is used to configure effects and outputs of Brewery cauldrons based on the ingredients used.
## How is it used? [#how-is-it-used]
Cauldron.yml entries are used to make cauldrons more intuitive, by giving varying cauldron particles, and specific
`cauldron brews`. These `cauldron brews` do not have any special effects and cannot be aged or distilled.
`cauldron brews` will be outputted by cauldrons when there is no matching recipe or when a recipe requires aging or
distilling to be completed. You can think of these brews as 'intermediate' or 'failed' brews. Lastly, cook particles
will always appear as long as matching ingredients have been found.
## Definining a cauldron.yml entry [#definining-a-cauldronyml-entry]
Let's declare a `cauldron.yml` entry!
```yaml title="cauldron.yml"
cauldron:
# The key of the cauldron entry. This doesn't really matter, but it must be unique.
exampleKey:
# Note: Brews declared here only come out of cauldrons when the cauldron CANNOT find a matching recipe!
# These entries will not override any declared recipes in your `recipes.yml` file.
name: Unknown Brew # The name of the brew.
color: BLACK # The color of the brew.
customModelData: 545 # The custom model data of the brew.
# The lore of the brew.
lore:
- You just created a completely useless brew!
# The ingriends that must be used to make this cauldron brew. One or more ingredients must match.
ingredients:
- Bedrock/2
- Diamond
# The cooking particles that will be used when brewing. Only ingredients have to match!
cookParticles:
- RED/5
- WHITE/10
- 800000/25
```
# Standard Configuration (/docs/breweryx/for-server-owners/config/config)
The BreweryX configuration (config.yml), is pretty straightforward. This documentation may not always be
up to date, and we advise you to check your config.yml along with each config key's comments.
## General Configuration [#general-configuration]
```yaml
# !!! IMPORTANT: BreweryX configuration files do NOT support external comments! If you add any comments, they will be overwritten !!!
# Still have questions? Join our Discord: https://discord.gg/ZTGCzeKg45
# The translation to be used [en]
# Available types: en (English), de (German), es (Spanish), fr (French), it (Italian), ru (Russian), zh (Chinese), uk (Ukrainian)
language: en
# Should BreweryX check for updates? Specify which service you'd like to use for update checking or disable it.
# Options available: GitHub, Snapshots, Spigot, None [GitHub]
resolveUpdatesFrom: GITHUB
# Autosave interval in minutes [10]
autosave: 10
# Prefix used on messages
pluginPrefix: "&2[BreweryX]&f "
# Show debug messages in logs [false]
debug: false
# -- Storage Settings --
storage:
# What type of storage to use [FLATFILE]
# Available types: FlatFile, MySQL, SQLite, MongoDB
type: SQLITE
# The name of the database. When the database is a file, this will be the name of the file. [brewery-data]
database: brewery-data
tablePrefix: brewery_
address: localhost
username: root
password: password
# If the player wakes up at /home when logging in after excessive drinking (/home plugin must be installed!) [true]
enableHome: true
# Type of the home-teleport: ['cmd: home']
# bed = Player will be teleported to his spawn bed
# 'cmd: home' = /home will be executed by the player. He has to have permissions for it without any delay!
# 'cmd: spawn' = /spawn will be executed by the player.
# 'cmd: whatever' = /whatever will be executed by the player.
homeType: "cmd: home"
# If the player "wakes up" at a random place when offline for some time while drinking (the places have to be defined with '/brew Wakeup add' through an admin)
# The Player wakes at the nearest of two random places of his world [true]
enableWake: true
# If the Player may have to try multiple times when logging in while extremely drunk [true]
enableLoginDisallow: true
# If the Player faints shortly (gets kicked from the server) if he drinks the max amount of alcohol possible [false]
enableKickOnOverdrink: false
# If the Player vomits on high drunkenness (drops item defined below) [true]
# The item can not be collected and stays on the ground until it despawns.
enablePuke: true
# Items that is dropped multiple times uncollectable when puking [Soul_Sand]
# Can be list of items such as [Soul_sand, Slime_block, Dirt]
pukeItem:
- SOUL_SAND
# Time in seconds until the pukeitems despawn, (mc default is 300 = 5 min) [60]
# If the item despawn time was changed in the spigot.yml, the pukeDespawntime changes as well.
pukeDespawntime: 60
# How much the Player stumbles depending on the amount of alcohol he drank. Can be set to 0 and higher than 100 [100]
stumblePercent: 100
# Display his drunkenness to the player when he drinks a brew or eats a drainItem [true]
showStatusOnDrink: true
# Consumable Item/strength. Decreases the alcohol level by when consumed. (list)
drainItems:
- Bread/4
- Milk_Bucket/2
# Show Particles over Cauldrons when they have ingredients and a heat source. [true]
# The changing color of the particles can help with timing some recipes
enableCauldronParticles: true
# If Cauldron Particles should be reduced to the bare minimum [false]
minimalParticles: false
# If crafting and using of the Brew Sealing Table is enabled (2 Bottles over 4 Planks) [true, true]
craftSealingTable: true
enableSealingTable: true
# By default, Brewery uses Smoker as a Sealing Table, this option allows you to change it
# IMPORTANT: It needs to be a container - meaning a block that can store items (e.g., SMOKER, CHEST, BLAST_FURNACE).
sealingTableBlock: SMOKER
# Always show the 1-5 stars on the item depending on the quality. If false, they will only appear when brewing [true]
alwaysShowQuality: true
# Always show the alcohol content on the item. If false, it will only show in the brewing stand [false]
# Sealed brews will not show the alcohol content regardless of this setting
alwaysShowAlc: false
# Always show that a brew is alcoholic by putting "Alcoholic" in the item's lore
# Sealed brews will show that a brew is alcoholic, but not its alcohol content
alwaysShowAlcIndicator: true
# If ruined brews show hints about why they were ruined [false].
# Examples:
# - "Too much time in the oven..."
# - "One of the ingredients doesn't taste good..."
# Note that the hints are for the closest recipe based on the ingredients and may not be 100% accurate.
showRuinedBrewHints: false
# If we should show who brewed the drink [false]
showBrewer: false
# If barrels are only created when the sign placed contains the word "barrel" (or a translation when using another language) [true]
requireKeywordOnSigns: true
# If aging in -Minecraft- Barrels in enabled [true] and how many Brewery drinks can be put into them [6]
ageInMCBarrels: true
maxBrewsInMCBarrels: 6
# Duration (in minutes) of a 'year' when aging drinks [20]
agingYearDuration: 20
# Whether to use the new algorithm for calculating wood type quality and shifting wood type when a brew is aged in different barrels.
# False is the behavior of the original Brewery plugin.
# True groups similar barrel types (such as oak and pale oak) together in a more intuitive way. [false]
newBarrelTypeAlgorithm: false
# Aliases for the '/breweryx' command. Requires a server restart to take effect. (list) [brewery, brew]
commandAliases:
- brewery
- brew
# The used Ingredients and other brewing-data is saved to all Brewery Items. To prevent
# hacked clients from reading what exactly was used to brew an item, the data can be encoded/scrambled.
# This is a fast process to stop players from hacking out recipes, once they get hold of a brew.
# Only drawback: brew items can only be used on another server with the same encodeKey.
# When using Brews on multiple (BungeeCord) Servers, define a MYSQL database in the 'storage' settings.
# So enable this if you want to make recipe cheating harder, but don't share any brews by world download, schematics, or other means. [false]
enableEncode: false
encodeKey: 1000000000000000000
# -- Plugin Compatibility --
# Enable checking of other Plugins (if installed) for Barrel Permissions [true]
# Plugins 'Landlord' and 'Protection Stones' use the WorldGuard Flag. 'ClaimChunk' is natively supported.
useWorldGuard: true
useLWC: true
useGriefPrevention: true
useTowny: true
useLands: true
useBlockLocker: true
useGMInventories: true
# Use a virtual chest when opening a Barrel to check with all other protection plugins
# This could confuse Anti-Cheat plugins, but is otherwise good to use
# use this for 'Residence' Plugin and any others that don't check all cases in the PlayerInteractEvent
useVirtualChestPerms: false
# Enable the Logging of Barrel Inventories to LogBlock [true]
useLogBlock: true
# If items in Offhand should be added to the cauldron as well [false]
useOffhandForCauldron: false
# This option no longer does anything anymore, and will be removed in future releases of BreweryX.
# BreweryX will load data asynchronously always, with the exception of server startup and shutdown.
loadDataAsync: true
# Time (in days) that drunkenness-data stays in memory after a player goes offline, to apply hangover etc. [7]
hangoverDays: 7
# If only Brewery drinks can be put into barrels [false]
onlyAllowBrewsInBarrels: false
# Color the Item information (lore) depending on quality while it is 1. in a barrel and/or 2. in a brewing stand [true, true]
colorInBarrels: true
colorInBrewer: true
# If a Large Barrel can be opened by clicking on any of its blocks, not just Spigot or Sign. This is always true for Small Barrels. [true]
openLargeBarrelEverywhere: true
# How many rows the inventory of each barrel type should have [3,1]
# Must be an integer between 1 and 6 (a Minecraft / GUI limitation)
# (A server restart is required for changes here to take effect)
barrelInvSizeLarge: 3
barrelInvSizeSmall: 1
# Allow emptying brews into hoppers to discard brews while keeping the glass bottle [true]
brewHopperDump: true
# If written Chat is distorted when the Player is Drunk, so that it looks like drunk writing
# How much the chat is distorted depends on how drunk the Player is
# Below are settings for what and how changes in chat occur
enableChatDistortion: true
# Log to the Serverlog what the player actually wrote, before his words were altered [false]
logRealChat: false
# Text after specified commands will be distored when drunk (list) [- /gl]
distortCommands:
- /gl
- /global
- /fl
- /s
- /letter
- /g
- /l
- /lokal
- /local
- /mail send
- /m
- /msg
- /w
- /whisper
- /reply
- /r
- /t
- /tell
# Distort the Text written on a Sign while drunk [false]
distortSignText: false
# Enclose a Chat text with these Letters to bypass Chat Distortion (Use "," as Separator) (list) [- '[,]']
# Chat Example: Hello i am drunk *I am testing Brewery*
distortBypass:
- "*,*"
- "[,]"
# Words and letters that will be altered when chatting while being drunk.
# Will be processed from first to last and a written sentence is altered in that order.
# replace: Word or letter to be replaced. (Special: "-space": replaces space, "-random": insert into random position, "-all": everything, "-start": At Beginning, "-end": At the End.)
# to: What to replace it with.
# pre: Words and Letters before the wanted word (split with ",")
# match: true = one of the "pre"-Words has to be before the wanted Word, false = none of the "pre" Words is allowed before the wanted Word
# alcohol: 1-100 minimum drunkenness after which this word is replaced
# percentage: Probability of replacing a Word in percent
words:
- replace: s
to: sh
alcohol: 30
percentage: 90
- replace: ch
to: sh
pre: u,s,o,a
match: false
alcohol: 10
percentage: 70
- replace: h
to: hh
pre: sch,h,t
match: false
alcohol: 20
percentage: 60
- replace: th
to: thl
alcohol: 30
percentage: 40
- replace: sch
to: shk
alcohol: 40
percentage: 60
- replace: u
to: uuh
percentage: 20
- replace: y
to: yy
alcohol: 15
percentage: 60
- replace: e
to: ee
alcohol: 15
percentage: 40
- replace: you
to: u
percentage: 40
- replace: u
to: uo
pre: u
match: false
percentage: 60
- replace: that
to: taht
alcohol: 40
percentage: 20
- replace: p
to: b
percentage: 30
- replace: p
to: b
alcohol: 60
percentage: 70
- replace: up
to: ubb
alcohol: 25
percentage: 80
- replace: o
to: oh
percentage: 20
- replace: ei
to: i
alcohol: 15
percentage: 30
- replace: b
to: bb
alcohol: 40
percentage: 80
- replace: "!!!"
to: "!!!111!!!eleven!1!"
pre: "!"
match: false
alcohol: 70
percentage: 20
- replace: "!"
to: "!!"
pre: "!"
match: false
percentage: 90
- replace: drunk
to: dhrkunn
pre: are
match: false
alcohol: 65
percentage: 70
- replace: walk
to: whhealhk
pre: you can, you can still, you can not
match: false
alcohol: 30
percentage: 80
- replace: wtf
to: wft
alcohol: 40
percentage: 20
- replace: lol
to: loool
alcohol: 10
percentage: 80
- replace: afk
to: aafkayyy
alcohol: 30
percentage: 30
- replace: write
to: wreitt
pre: you can,you can still,you can not
match: false
alcohol: 50
percentage: 80
- replace: drink
to: booze
alcohol: 70
percentage: 80
- replace: "?"
to: ????
pre: "?"
match: false
alcohol: 40
percentage: 80
- replace: -space
to: ""
pre: h,g,w
match: true
alcohol: 10
- replace: -space
to: ""
alcohol: 35
percentage: 30
- replace: -space
to: ""
percentage: 10
- replace: -start
to: dho
alcohol: 50
percentage: 15
- replace: -start
to: hhn
alcohol: 50
percentage: 10
- replace: -random
to: lu
percentage: 10
- replace: -random
to: lug
alcohol: 50
percentage: 10
- replace: -random
to: blub
alcohol: 80
percentage: 20
- replace: -random
to: lerg
alcohol: 85
percentage: 40
- replace: -random
to: gul
alcohol: 80
percentage: 40
- replace: -random
to: " "
alcohol: 70
percentage: 100
- replace: -random
to: " "
alcohol: 40
percentage: 60
- replace: -random
to: " "
alcohol: 30
percentage: 50
- replace: -end
to: "!"
alcohol: 30
percentage: 40
- replace: -random
to: " *hic* "
alcohol: 70
percentage: 80
- replace: -random
to: " *hic* "
alcohol: 40
percentage: 15
- replace: -space
to: " *hic* "
alcohol: 20
percentage: 5
- replace: -end
to: " *hic*"
alcohol: 50
percentage: 70
- replace: -all
to: "*burp*"
alcohol: 60
percentage: 3
- replace: -all
to: "*burp*"
alcohol: 80
percentage: 6
# Yep, that's it! The end of config.yml! I had so much fun! And you?...
```
# Custom Items (/docs/breweryx/for-server-owners/config/custom-items)
### #needtodoc [#needtodoc]
# Recipes (/docs/breweryx/for-server-owners/config/recipes)
# Creating new recipe [#creating-new-recipe]
Creating new recipe is somewhat easy with BreweryX. All you need is to follow this guide!
***
## Name*s* of a drink: `name` [#names-of-a-drink-name]
| Required? | Value | Default Value |
| --------- | ------------------------- | ------------- |
| Yes | `Bad Name/Name/Good Name` | None |
The name of the drink. Can contain three variations, each for different quality of a drink. It'll look like that:
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
```
Name supports ampersand and HEX color codes:
```yaml
ColorfulBrew:
name: "&8Bad brew/Brew/ffb424Good brew"
```
If you don't want to do names based on brew's quality - just put one name
```yaml
TestBrew:
name: Brew
```
***
## Ingredients: `ingredients` [#ingredients-ingredients]
| Required? | Value | Default Value |
| --------- | ------------------- | ------------- |
| Yes | `- ItemName/Amount` | None |
!!! warning ""
Required at all time
Ingredients needed for the brew. Possible values:
* Minecraft item name
* BreweryX brew name
* BreweryX custom item name
* ItemsAdder id of item (without namespace)
* Oraxen id of item
Format of item is `Item/Amount`
With Minecraft items this'll look like this:
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
ingredients:
- Apple/10 # You need 10 apples
- Brewery:ColorfulBrew/2 # You'll need 2 ColorfulBrew brews from BreweryX
- ItemsAdder:SomeItem/1
- Oraxen:SomeItem/1
- blue_flowers/2 # You'll need 2 items defined in brewery's CustomItems
```
***
## Time to brew: `cookingtime` [#time-to-brew-cookingtime]
| Required? | Value | Default Value |
| --------- | ----------------- | ------------- |
| Yes | Number in minutes | None |
How much in minutes player need to brew. Can be checked with right clicking Clock on Cauldron.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
cookingtime: 12 # 12 minutes
```
***
## How much distilling: `distillruns` [#how-much-distilling-distillruns]
| Required? | Value | Default Value |
| -------------------------------- | ------ | ------------- |
| No, unless `distilltime` present | Number | 0 |
How much times player need to distill brew
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
distillruns: 4
```
***
## Distill time: `distilltime` [#distill-time-distilltime]
| Required? | Value | Default Value |
| --------- | ----------------- | ------------- |
| No | Number in seconds | 0 |
How much it will take to distill brew one time
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
distilltime: 10
```
***
## Type of barrel wood: `wood` [#type-of-barrel-wood-wood]
| Required? | Value | Default Value |
| --------- | ------------------ | ------------- |
| No | Wood type's number | 0 |
Type of barrel wood needed to age brew properly. Posible values:
* 0 - any wood
* 1 - Birch
* 2 - Oak
* 3 - Jungle
* 4 - Spruce
* 5 - Acacia
* 6 - Dark Oak
* 7 - Crimson
* 8 - Warped
* 9 - Mangrove
* 10 - Cherry
* 11 - Bamboo
* 12 - Cut copper
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
wood: 4 # Spruce barrel
```
***
## Aging time: `age` [#aging-time-age]
| Required? | Value | Default Value |
| --------- | ----------------- | ------------- |
| No | Number in MC days | 0 |
How many MC days brew have to be in barrel for best quality.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
age: 12 # 12 minecraft days
```
***
## Color of a drink: `color` [#color-of-a-drink-color]
| Required? | Value | Default Value |
| --------- | ------------------------------- | ------------- |
| No | HEX without `#` or color's name | `WHITE` |
Color of a potion. Can be HEX color or `DARK_RED`, `RED`, `BRIGHT_RED`, `ORANGE`, `YELLOW`, `PINK`, `PURPLE`, `BLUE`, `CYAN`, `WATER`, `TEAL`, `OLIVE`, `GREEN`, `LIME`, `BLACK`, `GREY`, `BRIGHT_GREY`, `WHITE`
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
color: RED
# Or...
color: '99FF33'
```
***
## Difficulty of brewing: `difficulty` [#difficulty-of-brewing-difficulty]
| Required? | Value | Default Value |
| --------- | ------------- | ------------- |
| Yes | Number 1 - 10 | None |
Accuracy needed to get good quality, from `1` to `10`, where `1` is very inaccurate and `10` is very precise.
Lower number - easier drink and vica versa.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
difficulty: 5
```
***
## Alcohol level: `alcohol` [#alcohol-level-alcohol]
| Required? | Value | Default Value |
| --------- | -------------- | ------------- |
| No | Number 0 - 100 | 0 |
How much alcohol "points" player will get after drinking, from `0` to `100`, where `0` is no alcohol and `100` player will most likely faint
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
alcohol: 45
```
***
## Lore of brew: `lore` [#lore-of-brew-lore]
| Required? | Value | Default Value |
| --------- | ----- | ------------- |
| No | List | None |
Lore of a potion. It may vary depending on the quality of the drink.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
lore:
- "This text will always be present"
- + "This text will be present if brew has bad quality"
- ++ "This text will be present if brew has normal quality"
- +++ "This text will be present if brew has good quality"
```
***
## Executing server commands on drink: `servercommands` [#executing-server-commands-on-drink-servercommands]
| Required? | Value | Default Value |
| --------- | ----- | ------------- |
| No | List | None |
Commands that will execute as server. They can be executed depending on the quality of the drink.
Adding `\s` at the end of a command will add delay to execution.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
servercommands:
- say This will execute no matter what!
- say This message will be delayed by 5 seconds! \5s
- + kill %player_name% # This will execute if brew quality is bad
- ++ heal %player_name% # This will execute if brew quality is normal
- +++ op %player_name% # This will execute if brew quality is good. Also don't give OP to players =)
```
***
## Executing commands as player: `playercommands` [#executing-commands-as-player-playercommands]
| Required? | Value | Default Value |
| --------- | ----- | ------------- |
| No | List | None |
Commands that will execute as player. They can be executed depending on the quality of the drink.
Adding `\s` at the end of a command will add delay to execution.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
playercommands:
- me This will execute no matter what!
- me This message will be delayed by 5 seconds! \5s
- + suicide # This will execute if brew quality is bad
- ++ home # This will execute if brew quality is normal
- +++ give %player_name% diamond 9999 # This will execute if brew quality is good.
```
***
## Message after drinking: `drinkmessage` [#message-after-drinking-drinkmessage]
| Required? | Value | Default Value |
| --------- | ------ | ------------- |
| No | String | None |
Message that will be sent to a player after drinking brew.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
drinkmessage: "UR DRUNK!"
```
***
## Title after drinking: `drinktitle` [#title-after-drinking-drinktitle]
| Required? | Value | Default Value |
| --------- | ------ | ------------- |
| No | String | None |
Title message that will be sent to a player after drinking brew.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
drinktitle: "UR DRUNK AND THIS IS TITLE!"
```
***
## Glint effect: `glint` [#glint-effect-glint]
| Required? | Value | Default Value |
| --------- | ---------------------- | ------------- |
| No | bool `true` or `false` | `false` |
Whether brew will have glint effect (as it were enchanted)
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
glint: true
```
***
## CMD of item: `customModelData` [#cmd-of-item-custommodeldata]
| Required? | Value | Default Value |
| --------- | ---------------------- | ------------- |
| No | `Bad CMD/CMD/Good CMD` | None |
Custom model data of a brew, can vary based on quality of a brew.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
customModelData: 1337/1338/1339
```
***
## Potion effects: `effects` [#potion-effects-effects]
| Required? | Value | Default Value |
| --------- | --------------------------- | ------------- |
| No | `EffectName/level/duration` | None |
Effects that will be given to a player after drinking.
Possible Effects: [https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html)
Level or Duration ranges may be specified with a "-", ex. 'SPEED/1-2/30-40' = lvl 1 and 30 sec at worst and lvl 2 and 40 sec at best
Ranges also work high-low, ex. 'POISON/3-1/20-5' for weaker effects at good quality.
Highest possible Duration: 1638 sec. Instant Effects don't need any duration specified.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
effects:
- FIRE_RESISTANCE/20 # Will be given no matter what
- WEAKNESS/3-1/50-10 # Better the brew - less Weakness player will have
- REGENERATION/1-3/10-50 # Vica versa
```
***
## Examples [#examples]
```yaml
g_vodka:
name: "Rancid Vodka/&6Golden Vodka/&6Shimmering Golden Vodka"
ingredients:
- Potato/10
- Gold_Nugget/2
cookingtime: 18
distillruns: 3
age: 0
color: ORANGE
difficulty: 6
alcohol: 20
effects:
- WEAKNESS/28
- POISON/4
fire_whiskey:
name: Powdery Whiskey/Burning Whiskey/Blazing Whiskey
ingredients:
- Wheat/10
- Blaze_Powder/2
cookingtime: 12
distillruns: 3
distilltime: 55
wood: 4
age: 18
color: ORANGE
difficulty: 7
alcohol: 28
drinkmessage: "You get a burning feeling in your mouth"
hot_choc:
name: Hot Chocolate
ingredients:
- cookie/3
cookingtime: 2
color: DARK_RED
difficulty: 2
effects:
- FAST_DIGGING/40
```
# /breweryx age (/docs/breweryx/for-server-owners/commands/age)
Instantly ages the brew currently held in your main hand as if it had been sitting inside a barrel.
## Arguments [#arguments]
* `barrel_type`: The type of barrel to age the brew in.
* `time`: A number of in-game years to age the brew for.
# /breweryx copy (/docs/breweryx/for-server-owners/commands/copy)
Copies the brew in your hand.
## Arguments [#arguments]
* `[quantity]`: The number of copies to make. If not specified, defaults to 1.
# /breweryx create (/docs/breweryx/for-server-owners/commands/create)
Creates a new brew based on the specified recipe.
## Arguments [#arguments]
* `recipe_name`: The name of the recipe. (can also be the recipe's ID)
* `[quality]`: The quality of the brew. Defaults to excellent.
* `[player]`: The player to give the brew to. Required if the command is executed by the console. Defaults to the player executing the command.
# /breweryx data (/docs/breweryx/for-server-owners/commands/data)
Allows to reload or save BreweryX's data without restarting the server.
## Subcommands [#subcommands]
### `/breweryx data save` [#breweryx-data-save]
Saves all BreweryX data to disk.
### `/breweryx data reload` [#breweryx-data-reload]
Reloads the configs, then reloads all data from disk.
## Remarks [#remarks]
Most server owners won't need this command, but it can be useful for debugging purposes.
Also allows to change data manager backends.
### Migrating data manager backends [#migrating-data-manager-backends]
Let's say you're on the legacy `FlatFile` backend and want to migrate to the new fancy `SQLite` backend.
You would first change the `storage.type` setting in `config.yml` from `FLATFILE` to `SQLITE`, then run `/breweryx data reload`.
BreweryX would read the config, update the data manager backend, then save all data using the new backend, effectively migrating all your data.
# /breweryx debuginfo (/docs/breweryx/for-server-owners/commands/debuginfo)
Displays debug information in the console about the brew in your main hand:
* Current brew info
* Ingredients
* Cook time, distill runs, aging time, etc.
* Detected recipe
* Recipe tests
* Tests the brew against all (or a specified) recipe and shows evaluation results for each test, such as which ingredients matched, whether the cook time was good, etc.
## Arguments [#arguments]
* `[recipe_name]`: If specified, only tests the brew against the specified recipe instead of all recipes.
# /breweryx delete (/docs/breweryx/for-server-owners/commands/delete)
Replaces the brew in your hand with air, effectively deleting it. This command will only delete brews in your main hand.
# /breweryx distill (/docs/breweryx/for-server-owners/commands/distill)
Distills the brew in your hand a specified number of times.
## Arguments [#arguments]
* `[times]`: The number of times to distill the brew. Defaults to 1.
# /breweryx drink (/docs/breweryx/for-server-owners/commands/drink)
Simulates drinking a specified brew.
## Arguments [#arguments]
* `recipe_name`: The name of the recipe.
* `[quality]`: The quality of the brew. Defaults to excellent.
* `[player]`: The player to give the brew to. Required if the command is executed by the console.
# /breweryx help (/docs/breweryx/for-server-owners/commands/help)
Shows a list of BreweryX commands and what they do.
## Arguments [#arguments]
* `[page]`: The page number to display. Defaults to 1.
# Commands (/docs/breweryx/for-server-owners/commands)
This section contains documentation for all BreweryX commands.
In the documentation, required arguments are denoted with `arg_name`, while optional arguments are denoted with
`[arg_name]`.
# /breweryx info (/docs/breweryx/for-server-owners/commands/info)
Shows information about a player's intoxication level.
## Subcommands [#subcommands]
### `/breweryx info` [#breweryx-info]
Shows your own intoxication level.
### `/breweryx info player_name` [#breweryx-info-player_name]
Shows the intoxication level of the specified player. This command can be executed by both players and the console. **Requires a different permission.**
#### Arguments [#arguments]
* `player_name`: The name of the player to check the intoxication level of.
# /breweryx itemName (/docs/breweryx/for-server-owners/commands/itemname)
Shows the exact material name of the item you are holding. (e.g. a Grass Block would show `grass_block`)
# /breweryx puke (/docs/breweryx/for-server-owners/commands/puke)
Forces you, or another player to puke as if they had reached a high level of drunkenness.
### Arguments [#arguments]
* `[player_name]`: The name of the player to force to puke. If not specified, forces the executing player to puke.
* If the specified player isn't the executing player, the command will check for both the `brewery.cmd.puke` and `brewery.cmd.pukeOther` permissions, and will only execute if the executor has both.
* `[items]`: The number of items to puke. If not specified, chooses a random number between 20 and 60.
# The 'Reload' Command (/docs/breweryx/for-server-owners/commands/reload-command)
#### Syntax: `/breweryx reload` [#syntax-breweryx-reload]
##### Permission: brewery.cmd.reload [#permission-brewerycmdreload]
This command instructs BreweryX and it's addons to reload their data from configuration files.
When using this command, BreweryX will:
* config.yml
* recipes.yml
* cauldron.yml
* custom-items.yml
* All locale files located in BreweryX/langs/.
* Tell all loaded addons to reload their data from their respective configuration files.
This command will **NOT**:
* Save BreweryX data
* Reload BreweryX DataManager (configurated in `config.yml#storage`)
For the actions above, `/breweryx data save` or `/breweryx data reload` should be used.
# The 'ReloadAddons' Command (/docs/breweryx/for-server-owners/commands/reloadaddons-command)
:::caution\[Usage discouraged]
Using this command is **highly** discouraged and it should **never** be used in production environments.
This command reloads addons *COMPLETELY* and effectively works the same way as [Bukkit's `/reload`](https://madelinemiller.dev/blog/problem-with-reload/) command!
If you are trying to reload addon configuration files, please use `/breweryx reload`.
:::
#### Syntax: `/breweryx reloadaddons` [#syntax-breweryx-reloadaddons]
##### Permission: brewery.cmd.reloadaddons [#permission-brewerycmdreloadaddons]
Unloads and reloads all of BreweryX's addons. This command will directly pull addons from BreweryX's addon folder and load them into memory.
Addon classes loaded by BreweryX use the `PluginLoader` ClassLoader, which means this command will slowly consume more and more memory as it's used because old addon classes won't get garbage collected.
Usage of this command is discouraged and addon authors may not provide proper support for disabling their addons and this can cause a variety of issues.
If you are trying to reload addon configuration files, please use `/breweryx reload`.
# The 'Seal' Command (/docs/breweryx/for-server-owners/commands/seal-command)
#### Syntax: `/breweryx seal` [#syntax-breweryx-seal]
##### Permission: brewery.cmd.seal [#permission-brewerycmdseal]
Opens the Brewery sealer inventory for the player that ran the command.
# The 'Set' Command (/docs/breweryx/for-server-owners/commands/set-command)
#### Syntax: `/breweryx set ` [#syntax-breweryx-set-player-drunkenness-quality]
##### Permission: brewery.cmd.set [#permission-brewerycmdset]
Sets a player's drunkenness. Drunkenness may be a number from 0-100, quality may be a number from 0-10.
# The 'ShowStats' Command (/docs/breweryx/for-server-owners/commands/showstats-command)
### Syntax: `/breweryx showstats` [#syntax-breweryx-showstats]
##### Permission: brewery.cmd.showstats [#permission-brewerycmdshowstats]
Shows basic info about your BreweryX instance.
* The amount of players current drunk on your server.
* The total amout of brews created on your server.
* The amount of barrels created on your server.
* The amount of cauldrons actively boiling on your server.
* The number of recipes you have in your `recipes.yml`.
* The amount of wake up locations defined in your `config.yml`.
# The 'Simulate' Command (/docs/breweryx/for-server-owners/commands/simulate-command)
### #needtodoc [#needtodoc]
##### Permission: brewery.cmd.create [#permission-brewerycmdcreate]
# The 'Static' Command (/docs/breweryx/for-server-owners/commands/static-command)
#### Syntax: `/breweryx static` [#syntax-breweryx-static]
##### Permission: brewery.cmd.static [#permission-brewerycmdstatic]
Makes the brew in held in your hand a static brew as if it had been used in a sealing table.
# The 'Unlabel' Command (/docs/breweryx/for-server-owners/commands/unlabel-command)
#### Syntax: `/breweryx unlabel` [#syntax-breweryx-unlabel]
##### Permission: brewery.cmd.create [#permission-brewerycmdcreate]
Unlabels the brew held in your hand as if it had been used in a sealing table.
# The 'Version' Command (/docs/breweryx/for-server-owners/commands/version-command)
#### Syntax: `/breweryx version` [#syntax-breweryx-version]
##### Permission: brewery.cmd.version [#permission-brewerycmdversion]
Shows useful standard information about the BreweryX plugin running on your server.
* The version of BreweryX you're currently running.
* The authors of Brewery and BreweryX.
* All loaded BreweryX addons.
# The 'Wakeup' Command (/docs/breweryx/for-server-owners/commands/wakeup-command)
### #needtodoc [#needtodoc]
##### Permission: brewery.cmd.wakeup [#permission-brewerycmdwakeup]
# Aging (/docs/breweryx/gameplay/creating-brews/aging)
Aging is a feature in BreweryX that allows you to age your brews in barrels. When a brew is aged, it will gain additional effects and values based on the brew's recipe.\
The aging process is optional on a per-brew basis and can be configured for each brew in the `recipes.yml` file.\
You age a brew by placing it into a barrel.
## Creating a Barrel [#creating-a-barrel]
To create a barrel, you need:
* 20 planks, 16 stairs, 1 fence and a sign of the same wood type for the big barrel.
* 8 stairs and a sign of the same wood type for the small barrel.
Place the blocks in the exact pattern shown below placing the sign last with the text "barrel" on the first line.
Despite what many players think, you don't actually need those four fences under the big barrel. Don't buy Big
Fence's lies!
After you put your drinks in barrels, you just need to wait! 1 "year" is equals 1 in-game day.
If you overdo the drink or use the wrong type of wood, the drink is likely to spoil.
# Brewing (/docs/breweryx/gameplay/creating-brews/brewing)
### Getting Started [#getting-started]
After installing and configuring, it's time to brew some potions! Unlike in vanilla Minecraft, it's not as easy as adding an ingredient to a brewing stand and waiting for it to finish.\
Depending on the recipe the whole process can be difficult and time consuming. Some recipes may need a high precision when it comes to ingredients or any other step in the process.\
If a particular step was done incorrectly or at the wrong time, the quality of the potion may suffer or you'll end up with an entirely different brew!
Depending on the Recipe, some steps may not be needed, the following instructions describes the most common procedure of brewing.
### Brewing [#brewing]
Obtain a cauldron and fill it with water.
Add a heat source under your cauldron. This can be one of many: Fire or soul fire, Lava, Magma Block, Campfire or
Soul Campfire, or whatever your server owner has configured as a heat source.
Add the ingredients for your recipe by right clicking the cauldron with each one.
{/* Formatter breaks the layout D: */}
Use a
**clock**
on the cauldron to see how long the drink has been brewing for.
When the cauldron has brewed for the instructed amount of time, use **3** glass bottles to fully extract the
contents of the cauldron.
At this point, for some recipes, you may be done! Other recipes may require aging and/or distilling. Please proceed
to the next page for documentation of this process.
# Distilling (/docs/breweryx/gameplay/creating-brews/distilling)
Some recipes may require you to distill your brew one or more times.\
In BreweryX distilling happens in a Brewing Stand with glowstone dust as the ingredient (you only need to put it once, it won't run out no matter how many times you distill).
The process itself is pretty simple, just put what you want to distill in the slots at the bottom, make sure glowstone dust is in the ingredient slot, and wait for the process to finish.
In the video above, I'm making vodka, which requires three distillations. Although I got the perfect quality
"Russian Vodka" just after the first run, the second and third distillations continued to increase the alcohol
content until it reached its maximum (value specified in the recipe).
The distilling process should stop itself when your brews reach the required number of distillations, but you can always take them out early if you want to ¯\\*(ツ)*/¯
# Sealing (/docs/breweryx/gameplay/creating-brews/sealing)
Sealing your brews hides the brewing steps from the lore, making it harder other players to replicate your recipes. Which allows you to establish a brewing monopoly, letting you charge a fortune for your brews.
It can also fix issues some shop plugins.
## How to Seal [#how-to-seal]
To seal a brew, you first need to have a sealing table, it is made with 4 planks and 2 empty bottles.
After you have your sealing table, just place it and right click it to open the sealing interface. It is pretty straightforward, just put the brew you want to seal in, wait like half a second (it should make a sound when a brew is sealed) and take your sealed brew out!
# The main config (/docs/tbp/for-server-owners/config/config)
The `config.yml` file is where you define the core behavior of the plugin. It has a comment on every setting, and should therefore not need any more documentation
# Events (/docs/tbp/for-server-owners/config/events)
This is a system for executing commands, applying potion effects, sending messages, and applying other events. All events configuration can be found in `events.yml`
## Random drunken events [#random-drunken-events]
Which events should happen randomly whenever a player gets drunk enough, or has enough toxins.
```yml
enabled-random-events:
- puke
- memory_loss
- stumble
- chicken
- drunk_message
- nausea
```
## Pass out time [#pass-out-time]
How many minutes the player should be passed out whenever the `pass_out` event gets triggered.
```yml
pass-out-time: 5
```
## Teleport destinations [#teleport-destinations]
Where should the player teleport to to (chosen randomly) whenever the teleport event gets triggered.
```yml
teleport-destinations:
- world, x, y, z
```
## Drunken messages [#drunken-messages]
What messages should be sent from the player whenever the drunk\_message event triggers.
```yml
messages:
- I love you , you're my best friend.
- I could do one more.
- Who is she?
- Watch this!
- I'm not drunk. You're drunk.
```
It can get very annoying to have repeating messages sent out to chat like this, keep this away from random drunken
events
## Custom events [#custom-events]
This is how you define your own custom event
```yml
custom-events:
memory_loss:
steps:
- named-event: pass_out
wait-condition: join
- named-event: teleport
consume:
alcohol: -30
toxins: -15
```
TBP's custom event system is meant to allow more flexible definitions of events. You can with custom events define commands to execute, effects to play, and more. It's almost as if it's a programming language of itself!
The most rudimentary concept for custom events is that the order which the event step is going to play defined as such:
```yml
- This runs first
- This runs after
- This runs last
```
We will now go through all the properties you can define in each step.
### `named-event` [#named-event]
Run a predefined event.
Can have the values `puke`, `pass_out`, `stumble`, `chicken`, `teleport`, `drunk_message`, `nausea`, `fever`, `hallucination`, `kaboom`. List might expand.
### `wait-duration` [#wait-duration]
Wait the specified duration until continuing to the next step, example duration is `10s 10t`, wait 10 seconds and 10 ticks.
### `wait-condition` [#wait-condition]
Wait for condition until this step triggers. Here's how you define each condition:
```yml
steps:
- wait-condition: died
- wait-condition: joined-server
- wait-condition:
joined-world: my-world-name
- wait-condition: took-damage
```
### `if-condition` [#if-condition]
Continue if condition is met, otherwise stop event. Here's how you define each if condition:
```yml
steps:
- if-condition:
modifier-above:
modifier: alcohol
value: 70
- if-condition:
has-permission: my-permission
- if-condition:
joined-world: my-world-name
```
You can also invert a condition with the `not` keyword, like this:
```yml
steps:
- if-condition:
not:
has-permission: my-permission
```
### `consume` [#consume]
Consume the specified modifiers, an example is
```yml
steps:
- consume:
alcohol: 10
my_modifier: -20
```
### `event` [#event]
Define another event with an event property (can be custom or predefined)
### `effect` [#effect]
Apply an effect to the player. Requires effect, amplifier, and duration property. An example is:
```yml
steps:
- effect: poison
amplifier: 1;2
duration: 20;100
```
Apply a poison effect on a player with a random amplifier within the range 1-2 and duration within the range 20-100
### `command` [#command]
Execute a command. Requires the command property, command executor can be defined with the `as` property
```yml
steps:
- command: ping
as: player # Execute with the players permissions
- command: pong
as: server # Execute with console permissions
```
### `location` [#location]
Set the location for the player (teleport). An example:
```yml
steps:
- location: worldname 1 2 3
```
Teleport the player to the world `worldname` to position x=1, y=2, z=3
### `integration-event` [#integration-event]
Trigger an event from an integration
```yml
steps:
- integration-event: gsit:sit
```
## An example [#an-example]
The following custom event definition defines an event with a probability and ranges. This makes it usable in [enabled-random-events](./#random-drunken-events) section.
```yml
repeating_drunken_walk:
probability:
probability-expression: 4*probabilityWeight(alcohol)
allowed-ranges:
alcohol:
min: 60.0
max: 100.0
display-name: walk unsteadily
steps:
- named-event: drunken_walk
- wait-duration: 20s 1t
- if-condition:
modifier-above:
modifier: alcohol
value: 60.0
- event: repeating_drunken_walk
```
The steps are as follows:
1. Run the drunken walk predefined event
2. Wait for 20 seconds and one tick
3. Continue to the next step if alcohol level is above 60, otherwise exit
4. Go back to step 1, run this event again
This would give you infinite drunken walk, as long as your alcohol level is above 60
# Ingredient Groups (/docs/tbp/for-server-owners/config/ingredient-groups)
Ingredient groups are for when you want one brew to have multiple ingredient alternatives. This can be accessed in the `ingredients.yml` file. You might for example want to have multiple different types of grain to make whiskey. The format is a Quality Factored List and supports all ingredient types.
```yml
- key: meat
display-name: Meat
materials:
- +pork # Will have a worsening effect on result brew
- ++chicken # Will have a slightly worsening effect on result brew
- +++beef # Will have an improving effect on the result brew
- key: horse_food
display-name: Horse Food
materials:
- "#minecraft:horse_food" # Item tags are allowed :3
```
Referencing ingredient groups inside an ingredient group is disallowed
## Referencing an ingredient group [#referencing-an-ingredient-group]
An ingredient group can then be referenced by adding the prefix `#brewery:` to the key. You can reference both of the examples above like this `#brewery:meat` and `#brewery:horse_food`.
If you defined a key with its own namespace, something will fail
# Modifiers (/docs/tbp/for-server-owners/config/modifiers)
`modifiers.yml` is where you define what statuses a player can have. A modifier can depend on other modifiers, and can also change when the player consumes something. it usually has a decrement time.
### Drunken modifiers [#drunken-modifiers]
Here's a short description on each modifier property
#### `name` [#name]
is the unique name to identify this modifier everywhere else, note that there are possibilities of name conflicts with other configuration keys and you should keep the name alphanumeric including underscores. For example `hello_my_modifier` is valid, but `jag+känner+en+bot` would be invalid as `ä` and `+` is not alhpanumeric
#### `min-value, max-value` [#min-value-max-value]
This is how you define the range wherein the modifier is allowed to be, a normal min value would be 0, and a normal max value would be 100
#### `decrement-time` [#decrement-time]
You can define the decrement time for this modifier, a decrement time of 400 means that the modifier decreases 1 value every 400 ticks (20 seconds). An more complicated example would be:
```yml
decrement-time: "0.2 * sin(my_other_modifier)"
```
See the [exp4j library](https://www.objecthunter.net/exp4j/#Built-in_functions) for more information about what functions are available for any expression
#### `increment-dependency` [#increment-dependency]
Define how the modifier should change when a modifier is consumed for the player. An example:
```yml
increment-dependency: consumed_other_modifier * (110 - different_modifier) / 110
```
A modifier prefixed with `consumed_`, is going to be the modifier change specified in the event. See the [exp4j library](https://www.objecthunter.net/exp4j/#Built-in_functions) for more information about what functions are available for any expression
#### `display-name` [#display-name]
Define the name of the modifier, it will be shown in commands
### Drunken displays [#drunken-displays]
A drunken display will show for the player whenever a modifier changes, if no drunken display has been defined for the modifier, none will show.
#### `message` [#message]
Define the message to show whenever this modifier changes, it includes 3 custom tags, skull, bars, stars that you can use to display amount.
#### `filter` [#filter]
Define an expression to filter out when to display the message, the display will only show when the expression is larger than 0. See the [exp4j library](https://www.objecthunter.net/exp4j/#Built-in_functions) for more information about what functions are available for any expression
#### `display-value` [#display-value]
The value that should be displayed to the user, this has to be normalized betwen 0 and 100 for the 3 different tags that can show the value. See the [exp4j library](https://www.objecthunter.net/exp4j/#Built-in_functions) for more information about what functions are available for any expression
#### `display-window` [#display-window]
Define where to display this message, can be chat, action\_bar, title
### Drunken tooltips [#drunken-tooltips]
Define how a modifier should be shown in a tooltip for all brew items
#### `filter` [#filter-1]
Define an expression to filter out when add the tooltip to the brew, the tooltip will be added when the expression is larger than 0. See the [exp4j library](https://www.objecthunter.net/exp4j/#Built-in_functions) for more information about what functions are available for any expression
#### `brewing-tooltip` [#brewing-tooltip]
Define what should be displayed when the brew is in a brewing process, i.e barrel or distillery. Eevery modifier has a custom tag here
#### `default-tooltip` [#default-tooltip]
Define what should be displayed when the brew is not in a brewing process, i.e barrel or distillery. Every modifier has a custom tag here
#### `sealed-tooltip` [#sealed-tooltip]
Define what should be displayed when the brew is sealed. Every modifier has a custom tag here
### Consumables [#consumables]
You can define items made outside TheBrewingProject to apply modifiers to a player, for example bread
# Effects (/docs/tbp/for-server-owners/recipe-how-to/effects)
## Introduction [#introduction]
TBP allows you to define custom effects that are applied to players when they consume brews.\
To add effects to your brews, you need to configure them in the `effects` section of a brew's recipe (in the `recipes.yml` file).
## Effect Configuration [#effect-configuration]
Each effect is defined by its type, duration, amplifier. They can also be configured to apply conditionally based on the brew's quality.
### Format [#format]
Effects are defined using the following format:
```yaml
effects:
- //
```
* `EFFECT_TYPE`: The type of effect to apply (e.g., `SPEED`, `POISON`, `REGENERATION`). You can find a list of all available effect types in the [PaperMC's Javadocs](https://jd.papermc.io/paper/1.21.10/org/bukkit/potion/PotionEffectType.html).
* `AMPLIFIER`: The strength of the effect (0 for level I, 1 for level II, etc.).
* `DURATION`: The duration of the effect in seconds.
#### Ranges [#ranges]
You can also specify ranges for the amplifier and duration to introduce variability in the effects. Use the following format:
```yaml
effects:
- /-/-
```
A random value within the specified range will be chosen each time the effect is applied.
If you're coming from BreweryX, you may remember that the ranges were used for specifying different values based on brew quality.
In TBP, this is no longer the case. Instead, you can define quality-specific effects using the new format described below.
#### Quality Factored Effects [#quality-factored-effects]
You can define effects that apply only to specific brew qualities by prefixing the effect definition with `+++`, `++`, or `+`.\
This format is described more in detail in the Quality Factored List section of the Basics page.
```yaml
effects:
- +++// # Excellent only
- ++// # Good only
- +// # Bad only
- // # All qualities
```
## Examples [#examples]
### Simple Example [#simple-example]
A brew that gives a Speed II effect for 45 seconds, and a Jump Boost I effect for a random duration between 30 and 60 seconds:
```yaml
effects:
- SPEED/1/45-90
- JUMP_BOOST/0/30-60
```
### A more complex example [#a-more-complex-example]
* A strong poison effect for Bad quality brews, and a weak poison effect for Good quality brews. No poison effect for Excellent quality brews.
* A speed boost that increases in strength with the quality of the brew.
* Regeneration and absorption only for Excellent quality brews.
* A nausea effect for all qualities.
```yaml
effects:
# poison
- +POISON/2/30-60 # Bad only: Poison III for 30-60 seconds
- ++POISON/1/20-40 # Good only: Poison II for 20-40 seconds
# speed
- +++SPEED/2/60-120 # Excellent only: Speed III for 60-120 seconds
- ++SPEED/1/45-90 # Good only: Speed II for 45-90 seconds
- +SPEED/0/30-60 # Bad only: Speed I for 30-60 seconds
# regeneration and absorption
- +++REGENERATION/1/15-30 # Excellent only: Regeneration II for 15-30 seconds
- +++ABSORPTION/1/60 # Excellent only: Absorption II for 60 seconds
# nausea
- NAUSEA/0/20-40 # All qualities: Nausea I for 20-40 seconds
```
# Events and sending messages (/docs/tbp/for-server-owners/recipe-how-to/events-and-messages)
## Event [#event]
You can initiate an event whenever the brew is consumed like this:
```yml
my_brew:
...
events:
- +stumble
- ++gsit:sit
- +++my_custom_event
- tunnel_vision
```
See{" "}
Quality Factored List
{" "}
for more information
## Sending messages [#sending-messages]
You can specify some messages to send **to** the player. They are specified using the [MiniMessage](https://docs.advntr.dev/minimessage/format) format
```yml
my_brew:
...
messages.action-bar: This message will show up on player action bar
messages.title: This message will show up on player title
messages.message: This message will show up in player chat
```
See{" "}
Quality Factored Value
{" "}
for more information. If you want to have multiple lines, use the `br` or `newline` MiniMessage tag{" "}
# Resulting item (/docs/tbp/for-server-owners/recipe-how-to/result-item)
By default, the result item will be `minecraft:potion`.
## Color \* [#color-]
This is how you specify a color of the brew.
```yml
my_recipe:
...
potion-attributes.color: "#FFFFFF" # White
```
See{" "}
Quality Factored Value
{" "}
for more information.
## Name \* [#name-]
This is how you specify the name of the brew.
```yml
my_recipe:
...
potion-attributes.name: Bad/Good/Excellent
```
See{" "}
Quality Factored Value
{" "}
for more information.
## Lore [#lore]
This is how you specify the lore of a brew:
```yml
my_recipe:
...
potion-attributes.lore:
- I love my
- +Bad brew
- ++Good brew
- +++Excellent brew
```
See{" "}
Quality Factored List
{" "}
for more information.
## Custom textures [#custom-textures]
You can specify either custom model data, or item model like this:
```yml
my_recipe:
...
potion-attributes.custom-model-data: 1/2/3
potion-attributes.item-model: dirt/sand/gravel
```
See{" "}
Quality Factored Value
{" "}
for more information.
## Custom resulting item [#custom-resulting-item]
If you want the resulting item to have a different material than `minecraft:potion`, then this can be changed like this:
```yml
my_recipe:
...
potion-attributes.custom-id: splash_potion/splash_potion/lingering_potion
```
With that example, you can now throw brews that affect other players!
See{" "}
Quality Factored Value
{" "}
for more information.
# Recipe Steps (/docs/tbp/for-server-owners/recipe-how-to/steps)
## Introduction [#introduction]
By defining a sequence of steps in a recipe, you will specify how a perfect brew has to be made. The real brewing process does not necessarily need to match exactly with the defined recipe steps.
There are 4 different steps that are currently supported by TheBrewingProject:
| Step Type | ID |
| ---------- | --------- |
| Cooking | `cook` |
| Mixing | `mix` |
| Distilling | `distill` |
| Aging | `age` |
Cooking and mixing always have to be the first step of any brewing process!
## Step Format [#step-format]
Each type of step has a unique format
### Cooking step [#cooking-step]
An example definition of a cooking step:
```yml
- type: cook
cook-time: 2min
cauldron-type: water
ingredients:
- apple/10
- my_plugin_name:sugar/64
```
See
Ingredients Basics
for more information about the ingredient format
### Mix step [#mix-step]
An example definition of a mix step:
```yml
- type: mix
mix-time: 2min
cauldron-type: water # Not read at the moment
ingredients:
- brewery:gin/3
- sugar/2
```
See{" "}
Ingredients Basics
{" "}
for more information about the ingredient format
### Distill step [#distill-step]
An example definition of a distill step:
```yml
- type: distill
runs: 3
```
Runs means that a brew would need to be distilled a specific amount of times to get a perfect result.
### Age step [#age-step]
An example definition of an age step:
```yml
- type: age
age-years: 13
barrel-type: any
```
More about barrel types can be found in{" "}
Aging guide
# Basics (/docs/tbp/for-server-owners/reference/basics)
## The Quality System [#the-quality-system]
TheBrewingProject features a quality system where every brew can turn out **Bad**, **Good**, or **Excellent**.\
This makes the brewing process more engaging and rewarding for players.
Quality Factored Properties are configuration options that allow you to define values or behaviors that change based on the final quality of the brew.
### Quality Factored Value [#quality-factored-value]
A Quality Factored Value allows a single property, such as an item's name or a brew's alcohol content, to change depending on the quality.\
You define this by providing three values separated by slashes in the format: `Bad/Good/Excellent`.
#### Example [#example]
```yaml
name: Skunked Beer/Beer/Golden Lager
```
| Quality | Resulting Name |
| --------- | ------------------------------------------------------------------------ |
| Excellent | |
| Good | |
| Bad | |
### Quality Factored List [#quality-factored-list]
A Quality Factored List allows you to conditionally include items in a list, such as lore lines or potion effects, based on the brew's quality.
You control this by prefixing list items with `+` symbols.
| Prefix | Applies To Quality | Description |
| ------ | ------------------ | -------------------------------------------------------------------- |
| `+++` | Excellent only | The item is included *only* if the brew is of Excellent quality. |
| `++` | Good only | The item is included *only* if the brew is of Good quality. |
| `+` | Bad only | The item is included *only* if the brew is of Bad quality. |
| (none) | All Qualities | The item is included regardless of the brew's quality (the default). |
#### Example [#example-1]
```yaml
lore:
- +++A rare, top-shelf beer, perfect for connoisseurs.
- +++A well-balanced brew, favored by many.
- ++A decent brew, great for relaxing after a hard day's work.
- +A cloudy, sluggish mixture.
- This message is always included, regardless of quality.
```
## Ingredients [#ingredients]
Ingredients are the building blocks of your recipes. An ingredient can be a vanilla Minecraft item, an item from another supported plugin, or even another brew created with TheBrewingProject.
Ingredients are defined as a list under the `ingredients` key in a brewing step. The format for defining an ingredient depends on the type of item:
| Format | Description |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/` | A Minecraft item. |
| `:/` | An item from another plugin. See Integrations page. |
| `brewery:/` | Another brew from TheBrewingProject. |
| `#brewery:/amount` | An ingredient group reference. See Ingredient Groups page. |
Example:
```yaml
ingredients:
- emerald/5 # 5 Emeralds.
- nexo:infused_golden_apple/2 # 2 Infused Golden Apples from the Nexo plugin.
- brewery:beer/1 # 1 Beer from TheBrewingProject.
- "#brewery:grass/1" # One item from the grass group
```
Note that every ingredient group has to be within quotes, otherwise it would count as a comment due to the `#`
symbol
## MiniMessage Formatting [#minimessage-formatting]
Every message or text in the recipe configuration is going to be formatted using MiniMessage.\
**Legacy formatting codes (e.g., \&a, §l) are not supported.**
| Message | Preview |
| ------------------------------------------- | ------------------------------------------------------------------------ |
| `Test<#2080ff>123` | |
| `Gradient Text` | |
For a complete guide on syntax and features, please refer to the official [MiniMessage Format Documentation](https://docs.advntr.dev/minimessage/format).
# Permissions (/docs/tbp/for-server-owners/reference/permissions)
TODO
# Placeholders (/docs/tbp/for-server-owners/reference/placeholders)
TheBrewingProject supports both [PlaceholderAPI](https://github.com/PlaceholderAPI/PlaceholderAPI) and [MiniPlaceholders](https://modrinth.com/plugin/miniplaceholders) for displaying information.
Please note that some plugins don't support PlaceholderAPI, or MiniPlaceholders.\
To reliably check if a placeholder works, you can use the following commands:
```yaml
# For PlaceholderAPI
/placeholderapi parse PLAYER PLACEHOLDER
# For MiniPlaceholders
/miniplaceholders parse PLAYER PLACEHOLDER
```
## Player Placeholders [#player-placeholders]
| PlaceholderAPI | MiniPlaceholders | Description |
| ------------------ | ------------------ | ------------------------------------------------------------------------------------- |
| `%tbp_[modifier]%` | `` | Returns the value of a modifier from the player's state. For example `%tbp_alcohol%`. |
| `%tbp_next_event%` | `` | Name of the next event that will happen when the player is drunk. |
# Aging (/docs/tbp/gameplay/creating-brews/aging)
Aging is a slow process, a typical beer takes about an hour to age, which is roughly 3 in-game days. You age a brew by placing it into a barrel.
The type of barrel you use matters. Some brews have no preference and can be aged in any barrel, while others will age better in an oak barrel than a spruce barrel, and so on.
## Creating a barrel [#creating-a-barrel]
You create a barrel by placing down all required blocks, and then lastly a sign facing towards any of these blocks.\
If you build the barrel correctly, you should see a confirmation message in the chat, the sign can be safely removed afterwards.
***
Unless your server has configured custom barrel types, there are two default ones:
### Small barrel [#small-barrel]
### Large barrel [#large-barrel]
If neither of these barrels work, you should check with your server staff to see if they have configured custom barrel types.
## Barrel types [#barrel-types]
| Barrel type | Stairs | Full blocks | Fences |
| ----------- | ----------------- | --------------- | ------------------------------------------------------------------ |
| Oak | Oak Stairs | Oak Planks | Oak Fence |
| Spruce | Spruce Stairs | Spruce Planks | Spruce Fence |
| Birch | Birch Stairs | Birch Planks | Birch Fence |
| Jungle | Jungle Stairs | Jungle Planks | Jungle Fence |
| Acacia | Acacia Stairs | Acacia Planks | Acacia Fence |
| Dark Oak | Dark Oak Stairs | Dark Oak Planks | Dark Oak Fence |
| Crimson | Crimson Stairs | Crimson Planks | Crimson Fence |
| Warped | Warped Stairs | Warped Planks | Warped Fence |
| Cherry | Cherry Stairs | Cherry Planks | Cherry Fence |
| Pale Oak | Pale Oak Stairs | Pale Oak Planks | Pale Oak Fence |
| Copper | Cut Copper Stairs | Cut Copper | Any Fence Type |
# Distilling (/docs/tbp/gameplay/creating-brews/distilling)
Distilling isn't required, but you'll see it in a lot of recipes.
Unlike in BreweryX, TBP uses a custom structure for distillation instead of a brewing stand.
### Building a Distillery [#building-a-distillery]
To build a distillery, you will need 3 decorated pots and 3 bamboo fences.
Place them like in the video below:
Don't forget to sneak while placing blocks on decorated pots! If you don't, you'll end up putting items inside them
instead.
If you build the distillery correctly, you should see a message in chat confirming it.
### Using the Distillery [#using-the-distillery]
The two stacked pots are the inputs for the distillery, and the single pot is the output. Just like in the image below:
So, to distill a brew, simply right-click one of the input pots to open the "mixture" GUI, and place the brew you want to distill wherever you want.
Then, right-click the single output pot to open the "distillate" GUI, the brews should start appearing there after a while.\
While the distillation is happening, you should see particles appearing above the output pot.
The number of times you should distill is also something you'll need to figure out by yourself :)
# Introduction (/docs/tbp/gameplay/creating-brews/introduction)
In The Brewing Project, a brew can created by processing it through different structures.
To successfully complete a brew, it has to have followed the right steps, such that it is close enough to one of the many recipes created by the server's administration, **that's why the recipes usually differ from server to server!**
The initial step when brewing is always going to be to cook/mix the ingredients in a boiler, see next chapter for more on that.
# Mixing and cooking (/docs/tbp/gameplay/creating-brews/mixing-and-cooking)
## Preparing the cauldron [#preparing-the-cauldron]
The first step depends on whether you want to cook or mix.
For cooking, you must first place a heat source (like a campfire, magma block or just a fire) underneath your cauldron. For mixing, you don't need any heat at all.
Once your setup is ready, simply add water to the cauldron, and right-click it while holding an ingredient to add it.
## Adding ingredients [#adding-ingredients]
Once the ingredients are in the boiler, cooking or mixing will begin. While it does that, you should see particles appearing above the cauldron *(tip: the particles will change color depending on how close you are to a defined recipe or the progress of making your brew)*.
You can check how long the boiler has been processing the ingredients by right-clicking it with a clock.
You might wonder how long it takes for the ingredients to be processed. The time, the amount of ingredients and the ingredients themselves, depend on the recipe. There is no true answer to this question, so you'll just have to experiment :D
## Extracting the brew [#extracting-the-brew]
When you feel like the brew is ready, right-click the cauldron with empty bottles to collect it.
# Sealing (/docs/tbp/gameplay/creating-brews/sealing)
Sealing your brews hides the brewing steps from the lore, making it harder other players to replicate your recipes. Which allows you to establish a brewing monopoly, letting you charge a fortune for your brews.
You can also brand your brews, which will add a custom name to the brew lore.
## How to Seal [#how-to-seal]
It's pretty simple, just:
* Hold the brew you want to seal in your main hand.
* Hold paper in your offhand.
* Right click on a crafting table while sneaking.
The brew will be sealed, and the paper will be consumed.
### How to Brand [#how-to-brand]
Branding works the same way as sealing, but you just need to name the paper first (e.g. using an anvil).
# GSit (/docs/tbp/for-server-owners/reference/integrations/gsit)
## Events [#events]
| Event Key | Description |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `gsit:sit` | Makes the player sit. |
| `gsit:crawl` | Makes the player crawl. |
| `gsit:` | Makes the player take a specific pose. You can find the list of available poses [here](https://github.com/gecolay/GSit/blob/main/core/src/main/java/dev/geco/gsit/model/PoseType.java) |
# Integrations (/docs/tbp/for-server-owners/reference/integrations)
## Item Integrations [#item-integrations]
Allow TheBrewingProject to use items from other plugins.
| Plugin | Namespace |
| -------------------------------------------------------------------- | ------------- |
| [CraftEngine](https://mo-mi.gitbook.io/xiaomomi-plugins/craftengine) | `craftengine` |
| [ItemsAdder](https://itemsadder.devs.beer/) | `itemsadder` |
| [MMOItems](https://www.spigotmc.org/resources/mmoitems.39267/) | `mmoitems` |
| [Mythic](https://mythiccraft.io/) | `mythic` |
| [Nexo](https://polymart.org/product/6901/nexo) | `nexo` |
| [Oraxen](https://oraxen.com/) | `oraxen` |
## Structure Integrations [#structure-integrations]
To prevent accessing TBP's structures on regions/plots that are protected by other plugins.
* [Bolt](https://modrinth.com/plugin/bolt)
* [GriefDefender](https://www.griefdefender.com/)
* [GriefPrevention](https://griefprevention.com/)
* [HuskClaims](https://william278.net/project/huskclaims)
* [Lands](https://www.spigotmc.org/resources/lands-%E2%AD%95-land-claim-plugin-%E2%9C%85-grief-prevention-protection-gui-management-nations-wars-1-21-support.53313/)
* [Towny](https://townyadvanced.github.io/)
* [WorldGuard](https://worldguard.enginehub.org/en/latest/)
## Shop Integrations [#shop-integrations]
TBP's items are too unique, which will cause issues with chest shop plugins. Here are the ones currently supported by TBP:
* [QuickShop-Hikari](https://modrinth.com/plugin/quickshop-hikari)
## Event Integrations [#event-integrations]
Some plugins can provide new events to the players, these are as follows:
* [GSit](https://hangar.papermc.io/Gecolay/GSit) - [further documentation](integrations/gsit)
## Placeholder integrations [#placeholder-integrations]
TBP supports all major placeholder plugins, which are:
* [MiniPlaceholders](https://modrinth.com/plugin/miniplaceholders)
* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/)
# Базовые рецепты (/ru/docs/breweryx/default-recipes)
Администраторы серверов могут добавлять, менять и удалять рецепты, поэтому рецепты с этой страницы могут быть далеко не на каждом сервере.
```yaml title="recipes.yml"
# !!! ВАЖНО: Конфиг BreweryX НЕ поддерживает внешние комментарии!
# Если вы добавите собственные комментарии в файл, то они автоматически будут перезаписаны !!!
# -- Рецепты напитков --
# enabled: Включен ли рецепт или нет (true/false)
# name: Названия для плохого/нормального/хорошего качества (Доступно форматирование, например &6 или hex-коды )
# name: "Плохое пиво/Нормальное пиво/Отличное пиво, вот оно жидкое золото!"
# ingredients: Список ингредиентов в формате 'материал/количество'
# Можно использовать /brew ItemName с предметом в руке, чтобы узнать его "материал" для конфига (как правило, это id предмета)
# Список материалов можно также найти тут: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html
# Плагинские материалы указываются форматом 'plugin:id/количество' (Поддерживаются: Brewery (другой напиток как ингредиент), Garden (BreweryX Garden Addon), Oraxen, ItemsAdder, Nexo, Slimefun)
# Например: '- itemsadder:grape/5'
# Кастом-айтемы из 'custom-items.yml' не требуют никаких префиксов ('- example_custom_item/10')
# Можно также использовать напитки как ингредиенты к другим напиткам. Правильный формат: 'brewery:ID/количество'
# Пример: '- brewery:wheatbeer/1'
# cookingtime: Время (в минутах), на протяжении которого ингредиенты должны вариться
# distillruns: Сколько раз нужно продистиллировать для полного содержания алкоголя (0 = не требует дистилляции. Но можно также просто не добавлять этот параметр)
# distilltime: Сколько (в секундах) занимает один круг дистилляции (дефолтное время в плагине = 40 сек, дефолтное время ванильных зелий в зельеварке = 20)
# wood: Тип дерева у бочки:
# Может быть буквенным значением, номером (см. ниже), или списком из видов дерева
# 0=any 1=Birch 2=Oak 3=Jungle 4=Spruce
# 5=Acacia 6=Dark Oak 7=Crimson 8=Warped
# 9=Mangrove 10=Cherry 11=Bamboo 12=Cut Copper 13=Pale Oak
# Вместо номера можно использовать имя или id:
# wood: 13
# wood: pale_oak
# wood: Pale Oak
# Ванильная бочка из игры считается за дубовую
# age: Время в "годах", которое напиток должен настаиваться в бочке. 0 = рецепт без настаивания (или просто не добавляйте wood и age в рецепт)
# color: Цвет готового напитка.
# Встроенные цвета: DARK_RED, RED, BRIGHT_RED, ORANGE, YELLOW, PINK, PURPLE, BLUE, CYAN, WATER, TEAL, OLIVE, GREEN, LIME, BLACK, GREY, BRIGHT_GREY, WHITE
# Либо HEX-цвета (color: 99FF33) (гуглите "HTML color picker")
# difficulty: Сложность (1-10) рецепта напитка. Чем выше число - тем более точно нужно следовать рецепту для получения идеального качества.
# alcohol: Процент опьянения (до 100), добавляемый игроку при выпивании идеально приготовленного напитка. Может быть отрицательным.
# lore: Дополнительное описание у напитка в инвентаре. Поддерживает цветовое форматирование, см. "name:" выше.
# Строки описания можно сделать отображаемыми при определенном уровне качества напитка, добавив + для плохого, ++ для среднего, или +++ для хорошего, перед началом текста:
# - +++ Это хороший напиток!
# - ++ Это среднячок.
# - + БояринЪ меня...
# - А эта строка будет показываться при любом качестве!
# servercommands: Список команд, выполняемых от лица сервера при выпивании (плейсхолдеры %player_name% %quality%)
# Можно сделать их выполнение зависящим от качества напитка при помощи плюсов (см. lore выше):
# - +++ op %player_name%
# - ++ money give %player_name% 10
# - + kill %player_name%
# Команду можно сделать отложенной по времени, добавив "/ s" в конце:
# - op Jsinco / 3s
# playercommands: Список команд, выполняемых от лица выпившего игрока при выпивании (плейсхолдеры %player_name% %quality%)
# Можно сделать их выполнение зависящим от качества напитка при помощи плюсов (см. lore выше):
# - +++ spawn
# - ++ home
# - + suicide
# Команду можно сделать отложенной по времени, добавив "/ s" в конце:
# - op Jsinco / 3s
# drinkmessage: Сообщение в чате, возникающее при выпивании
# drinktitle: Надпись на экране, возникающая при выпивании
# glint: true/false - должна ли модель напитка переливаться, как у зачарованного предмета
# customModelData: Custom Model Data тэг. Может использоваться для добавления кастомных текстур предмету.
# Можно задать сразу 3, для плохого/среднего/хорошего качества, разделяя номера через "/"
# customModelData: 1
# customModelData: 1/2/3
# effects: Эффекты при выпивании в формате "эффект/уровень/длительность(сек)"
# Существующие эффекты: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html
# Разброс качества и/или длительности в зависимости от кач-ва можно задать при помощи "-", Например: 'SPEED/1-2/30-40' = lvl 1 скорость на 30сек при худшем качестве и lvl 2 скорость на 40сек при лучшем.
# В обратную сторону это тоже работает: 'POISON/3-1/20-5' - отравление будет слабее при улучшении качества.
# Максимальная длительность: 1638 сек. Мгновенным эффектам (лечение, урон, ...)указывать длительность необязательно.
# 'ex' - это пример со всеми возможными аргументами:
recipes:
ex:
enabled: true
name: Bad Example/Example/Good Example
ingredients:
- Bedrock/2
- Spruce_Planks/8
- Bedrock/1
- Brewery:Wheatbeer/2
- ExoticGarden:Grape/3
- ex-item/4
cookingtime: 3
distillruns: 2
distilltime: 60
wood: 4
age: 11
color: DARK_RED
difficulty: 3
alcohol: 14
lore:
- This is an example brew
- ++Just a normal Example
- This text would be on the brew
- + Smells disgusting
- ++ Smells alright
- +++ Smells really good
servercommands:
- +++ weather clear
- + weather rain
playercommands:
- homes
drinkmessage: Tastes good
drinktitle: Warms you from inside
glint: true
customModelData: 556/557/557
effects:
- FIRE_RESISTANCE/20
- HEAL/1
- WEAKNESS/2-3/50-60
- POISON/1-0/20-0
wheatbeer:
name: Skunky Wheatbeer/Wheatbeer/Fine Wheatbeer
ingredients:
- Wheat/3
cookingtime: 8
distillruns: 0
wood: 1
age: 2
color: ffb84d
difficulty: 1
alcohol: 5
lore:
- +++ &8Refreshing
beer:
name: Skunky Beer/Beer/Fine Beer
ingredients:
- Wheat/6
cookingtime: 8
distillruns: 0
wood: 0
age: 3
color: ffd333
difficulty: 1
alcohol: 6
lore:
- +++ &8Crisp taste
darkbeer:
name: Skunky Darkbeer/Darkbeer/Fine Darkbeer
ingredients:
- Wheat/6
cookingtime: 8
distillruns: 0
wood: 6
age: 8
color: "650013"
difficulty: 2
alcohol: 7
lore:
- +++ &8Roasted taste
wine:
name: Red Wine
ingredients:
- Sweet_Berries/5
cookingtime: 5
distillruns: 0
wood: 0
age: 20
color: RED
difficulty: 4
alcohol: 8
lore:
- + &8Harsh
- + &8Corked
- ++ &8Mellow
- +++ &8Full-Bodied
mead:
name: Awkward Mead/Mead/&6Golden Mead
ingredients:
- Sugar_Cane/6
cookingtime: 3
distillruns: 0
wood: 2
age: 4
color: ORANGE
difficulty: 2
alcohol: 9
lore:
- +++ Has a golden shine
ap_mead:
name: Apple Mead/Sweet Apple Mead/&6Sweet Golden Apple Mead
ingredients:
- Sugar_Cane/6
- Apple/2
cookingtime: 4
distillruns: 0
wood: 2
age: 4
color: ORANGE
difficulty: 4
alcohol: 11
lore:
- Is there any Apple in this?
- Refreshing taste of Apple
- Sweetest hint of Apple
effects:
- WATER_BREATHING/1-2/150
cidre:
name: Poor Cidre/Apple Cider/Great Apple Cider
ingredients:
- Apple/14
cookingtime: 7
distillruns: 0
wood: 0
age: 3
color: f86820
difficulty: 4
alcohol: 7
apple_liquor:
name: Sour Apple Liquor/Apple Liquor/Calvados
ingredients:
- Apple/12
cookingtime: 16
distillruns: 3
wood: 5
age: 6
color: BRIGHT_RED
difficulty: 5
alcohol: 14
lore:
- +Sour like Acid
- +++ Good Apple Liquor
whiskey:
name: Unsightly Whiskey/Whiskey/Scotch Whiskey
ingredients:
- Wheat/10
cookingtime: 10
distillruns: 2
distilltime: 50
wood: 4
age: 18
color: ORANGE
difficulty: 7
alcohol: 26
lore:
- "&7Single Malt"
rum:
name: Bitter Rum/Spicy Rum/&6Golden Rum
ingredients:
- Sugar_Cane/18
cookingtime: 6
distillruns: 2
distilltime: 30
wood: 2
age: 14
color: DARK_RED
difficulty: 6
alcohol: 30
lore:
- + &8Too bitter to drink
- ++ &8Spiced by the barrel
- +++ &eSpiced Gold
effects:
- FIRE_RESISTANCE/1/20-100
- POISON/1-0/30-0
vodka:
name: Lousy Vodka/Vodka/Russian Vodka
ingredients:
- Potato/10
cookingtime: 15
distillruns: 3
age: 0
color: WHITE
difficulty: 4
alcohol: 20
lore:
- + &8Almost undrinkable
effects:
- WEAKNESS/15
- POISON/10
shroom_vodka:
name: Mushroom Vodka/Mushroom Vodka/Glowing Mushroom Vodka
ingredients:
- Potato/10
- Red_Mushroom/3
- Brown_Mushroom/3
cookingtime: 18
distillruns: 5
age: 0
color: ff9999
difficulty: 7
alcohol: 18
lore:
- +++&aGlows in the dark
effects:
- WEAKNESS/80
- CONFUSION/27
- NIGHT_VISION/50-80
- BLINDNESS/12-2
- SLOW/10-3
gin:
name: Pale Gin/Gin/Old Tom Gin
ingredients:
- Wheat/9
- blue-flowers/6
- Apple/1
cookingtime: 6
distillruns: 2
color: 99ddff
difficulty: 6
alcohol: 20
lore:
- ++ With the
- ++ taste of juniper
- +++ Perfectly finished off
- +++ with juniper
tequila:
name: Mezcal/Tequila/Tequila anejo
ingredients:
- cactus/8
cookingtime: 15
distillruns: 2
wood: 1
age: 12
color: f5f07e
difficulty: 5
alcohol: 20
lore:
- Desert spirit
absinthe:
name: Poor Absinthe/Absinthe/Strong Absinthe
ingredients:
- Grass/15
cookingtime: 3
distillruns: 6
distilltime: 80
color: GREEN
difficulty: 8
alcohol: 42
lore:
- +++&8High proof liquor
effects:
- POISON/15-25
gr_absinthe:
name: Poor Absinthe/Green Absinthe/Bright Green Absinthe
ingredients:
- Grass/17
- Poisonous_Potato/2
cookingtime: 5
distillruns: 6
distilltime: 85
color: LIME
difficulty: 9
alcohol: 46
lore:
- "&aLooks poisonous"
effects:
- POISON/25-40
- HARM/2
- NIGHT_VISION/40-60
potato_soup:
name: Potato soup
ingredients:
- Potato/5
- Grass/3
cookingtime: 3
color: ORANGE
difficulty: 1
effects:
- HEAL/0-1
coffee:
name: Stale Coffee/Coffee/Strong Coffee
ingredients:
- Cocoa_Beans/12
- Milk_Bucket/2
cookingtime: 2
color: BLACK
difficulty: 3
alcohol: -6
lore:
- + &8Probably a week old
effects:
- REGENERATION/1/2-5
- SPEED/1/30-140
eggnog:
name: Egg Liquor/Eggnog/Advocaat
ingredients:
- Egg/5
- Sugar/2
- Milk_Bucket/1
cookingtime: 2
age: 3
color: ffe680
difficulty: 4
alcohol: 10
lore:
- Made with raw egg
g_vodka:
name: Rancid Vodka/&6Golden Vodka/&6Shimmering Golden Vodka
ingredients:
- Potato/10
- Gold_Nugget/2
cookingtime: 18
distillruns: 3
age: 0
color: ORANGE
difficulty: 6
alcohol: 20
effects:
- WEAKNESS/28
- POISON/4
fire_whiskey:
name: Powdery Whiskey/Burning Whiskey/Blazing Whiskey
ingredients:
- Wheat/10
- Blaze_Powder/2
cookingtime: 12
distillruns: 3
distilltime: 55
wood: 4
age: 18
color: ORANGE
difficulty: 7
alcohol: 28
drinkmessage: You get a burning feeling in your mouth
hot_choc:
name: Hot Chocolate
ingredients:
- cookie/3
cookingtime: 2
color: DARK_RED
difficulty: 2
effects:
- FAST_DIGGING/40
iced_coffee:
name: Watery Coffee/Iced Coffee/Strong Iced Coffee
ingredients:
- cookie/8
- snowball/4
- milk_bucket/1
cookingtime: 1
color: BLACK
difficulty: 4
alcohol: -8
effects:
- REGENERATION/30
- SPEED/10
# More recipe ideas:
# Dandelion Liquor
# Beetroot Spirit
# Poppy Liquor: Macum/Grand Poppy
# Bamboo Liquor: Chu Yeh Ching
# Cachaca
# Cognac
# Sake
# Buorbon
# Moonshine
# Different Wines
# Brandy
# Amaretto
# etc. as well as variations like,
# Pumpkin Spice Beer
# Melon Vodka
# There are a lot of items in Minecraft like Vines, Milk and items added by plugins that would make great ingredients.
```
# Добро пожаловать (/ru/docs/breweryx)
Добро пожаловать в документацию BreweryX!
Здесь вы можете найти всю информацию, необходимую для ознакомления с BreweryX, включая инструкции по установке, конфигурации, а также API.
# Главная (/ru/docs)
Пока что не знаем, что писать в этой категории, может, какие-нибудь FaQ? хз
Используйте сайдбар слева, чтобы перейти в другие разделы Документации.\
Нажмите на "Главная" (верхнюю, слева), чтобы увидеть остальные разделы.
# Welcome (/ru/docs/garden)
Welcome to the documentation for Garden.
Garden is a plugin for Paper-based servers that implements an in-depth growth system for plants and crops using schematics.
# Сравнение BreweryX и TBP (/ru/docs/tbp/breweryx-vs-tbp)
### Кратко [#кратко]
BreweryX лучше протестирован, поскольку берёт свое начало из 10-летнего проекта, в то время как его перепис, TBP, имеет гораздо более чистый код, больше продвинутых фич и приоритет в разработке и поддержке.
Есть большой шанс того, что эта страница уже устаревшая, поскольку TBP разрабатывается очень активно. Поэтому если вы хотите наверняка узнать текущее положение дел, читайте [чейнджлог](https://modrinth.com/plugin/thebrewingproject/changelog).
### Различия [#различия]
* TBP поддерживает кастомные мультиблочные структуры. Например, кастомные перегонные кубы, в то время как bX для дистилляции может использовать лишь варочные стойки.
* TBP не копирует каждую микрофичу из bX, чтобы не перегружать плагин, но если что-то конкретное вам нужно, то обратитесь к нам, и мы подумаем над этим.
* Система создания в TBP менее щадящая (но настраиваемая), так что теперь у вас не получится успешно сварить дефолтное пиво из стака пшеницы, если все остальные шаги при этом идеальны.
* В BreweryX время, требующееся для дистилляции, настраивается по рецептам, в то время как в TBP оно настраивается отдельно для каждого вида перегонной конструкции (см. первый пункт), что позволяет делать какие-то из них медленнее, а какие-то быстрее.
* BreweryX шифрует свои данные способом уровня "отпугнёт-начинающих-хацкеров", в то время как TBP шифрует данные способом уровня "ну-давай-попробуй-умник", и поддерживает лёгкую ротацию ключа шифрования.
### Новые функции TBP [#новые-функции-tbp]
* Теперь для дистилляции вместо варочной стойки используется собственная мультиблочная структура, создаваемая из трёх узорчатых ваз и трех бамбуковых заборов.
* При помощи schematic-файлов можно добавить собственные мультиблоки для бочек и дистилляции.
* Система "событий" позволяет тонко настроить, что произойдет при употреблении тех или иных напитков. Плюс можно добавлять свои собственные события.
* Есть также система модификаторов, включающая в себя опьянение, токсины, и зависимость/толерантность к алкоголю. Опять же, можно создать собственные модификаторы.
* Порядок шагов при приготовлении не статичен, поэтому теперь можно, например, создать напиток, который готовится в таком порядке: `дистилляция➜бочка➜варка➜еще раз варка➜еще раз бочка➜еще раз дистилляция`
* Можно свободно изменять итоговый предмет при создании. Например, чтобы напиток, дающий ускорение, выглядел как алмазная кирка. *Я знаю, о чем ты думаешь, мамкин нарколыга.*
* Ингредиенты можно группировать, чтобы, например, допускать в рецепт любой вид травы, но при этом чтобы сухая трава уменьшала качество.
* Появился новый этап готовки - `mix` (смешивание). Осуществляется так же, как и варка в котле, но без источника тепла снизу.
* Можно задать в рецепте требование определенной субстанции в котле (вода/лава/снег) при варке и/или смешивании.
[](https://canary.discord.com/channels/1108854517048549396/1272805304601415711/1396831593892548680)
# Добро пожаловать (/ru/docs/tbp)
Добро пожаловать в документацию TheBrewingProject (TBP)!
# API плагина (/ru/docs/breweryx/for-developers/plugin-api)
Если вы - разработчик, желающий расширить функциональность вашего плагина при помощи BreweryX, то вы пришли по адресу.
Поскольку я являюсь неграмотным бездарем в этой сфере, я не осмелюсь переводить незнакомые мне термины и матчасть. Ниже представлен оригинал.
On this page, we'll walk through how to set up BreweryX's API and start writing your own custom features.
## Repository and Dependency [#repository-and-dependency]
```kotlin title="build.gradle.kts"
repositories {
maven("https://repo.jsinco.dev/releases")
}
dependencies {
compileOnly("com.dre.brewery:BreweryX:%VERSION%")
}
```
```groovy title="build.gradle"
repositories {
maven {
url "https://repo.jsinco.dev/releases"
}
}
dependencies {
compileOnly "com.dre.brewery:BreweryX:%VERSION%"
}
```
```xml title="pom.xml"
jsinco-repohttps://repo.jsinco.dev/releasescom.dre.breweryBreweryX%VERSION%provided
```
## Usage [#usage]
We offer a variety of utilities and events within BreweryX's [`api`](https://github.com/BreweryTeam/BreweryX/tree/master/src/main/java/com/dre/brewery/api) package.
### Example [#example]
```java
// Checking if an item is a BreweryX potion
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
ItemStack item = event.getItem();
if (BreweryApi.isBrew(item)) {
event.getPlayer().sendMessage("This is a BreweryX potion!");
}
}
```
```kotlin
// Checking if an item is a BreweryX potion
@EventHandler
fun onPlayerInteract(event: PlayerInteractEvent) {
val item = event.item
if (BreweryApi.isBrew(item)) {
event.player.sendMessage("This is a BreweryX potion!")
}
}
```
# Установка (/ru/docs/breweryx/for-server-owners/install)
## Требования [#требования]
* **Java 21+**
* Spigot/Paper 1.20.2+
BreweryX требует Java 21. Поскольку версии игры ниже 1.20.5 используют более старую версию Java, BreweryX **не будет** работать на них, если только вы не обновите Java.\
Кроме того, мы больше не поддерживаем более старые версии игры, поэтому вы можете столкнуться с багами на них даже с Java 21. Если вам крайне необходимо использовать старую версию игры, установите более ранний релиз BreweryX, или получите поддержку на нашем Дискорд-сервере.
## Первая установка [#первая-установка]
Загрузите плагин с одного из следующих ресурсов:
* [Modrinth](https://modrinth.com/plugin/breweryx) (рекомендовано)
* [Hangar](https://hangar.papermc.io/Jsinco/BreweryX)
* [GitHub релизы](https://github.com/BreweryTeam/BreweryX/releases)
* [Наш Jenkins](https://ci.nadwey.pl/) (дев билды, не рекомендовано)
Установите плагин:
* Остановите сервер
* Положите JAR-файл в папку `/plugins`
* Запустите сервер
Поздравления, плагин установлен
## Переход с оригинального Brewery [#переход-с-оригинального-brewery]
Как правило, переход с оригинального Brewery на Brewery**X** проходит без проблем. Однако большие изменения в Brewery**X** могут привести к некоторым затруднениям во время перехода.
Поэтому если у вас возникнут проблемы с этим, не стесняйтесь попросить помощи на нашем Дискорд-сервере.
Удалите оригинальный Brewery:
* Остановите сервер
* **Удалите JAR-файл оригинального плагина**
* **НЕ УДАЛЯЙТЕ ПАПКУ** Brewery
Установите Brewery**X** на сервер:
* Положите JAR-файл Brewery**X** в папку `/plugins`
* Запустите сервер
Brewery
**X**
должен автоматически перенести данные оригинального плагина в свою папку.
# Global Configuration (/ru/docs/garden/config/global)
The Garden configuration (`config.yml`), contains various miscellaneous settings that affect the behavior of Garden as a whole.
These settings do not apply to any specific plant.
```yaml
# https://docs.breweryteam.dev/docs/garden
# Customizes the default language used for messages.
language: en-US
# Whether to use client-sided translations for messages. If false, messages will be sent in the language specified above.
client-sided-translations: false
# The chance for a seed to spawn when breaking valid seed drop blocks. (0-100)
seed-spawn-chance: 15
# Block types that seeds can drop from when broken.
valid-seed-drop-blocks:
- SHORT_GRASS
- TALL_GRASS
# Block types that seeds can be planted on.
plantable-blocks:
- GRASS_BLOCK
- DIRT
- COARSE_DIRT
- PODZOL
- MYCELIUM
- ROOTED_DIRT
# Worlds where seeds will not drop and cannot be planted. This does not affect the growth of plants.
blacklisted-worlds:
- resource
- resource_nether
# A list of tags of materials generated through Garden that will drop when broken.
drops-default-items:
- '#minecraft:logs'
# A map of tags of materials generated through Garden with custom drops.
drop-override:
'#minecraft:wooden_stairs': STICK
'#minecraft:wooden_trapdoors': STICK
# Let fruits fall to the ground as items after a while.
fall-fruit: true
# Whether players can use bone meal to advance a garden plants growth.
bonemeal-growth: true
# The percent chance that using bone meal on a garden plant advances its growth by one stage (0-100).
bonemeal-chance: 25
```
# Plant Configuration (/ru/docs/garden/config/plant)
Plant configurations are specific to each plant and exist in the base directory for each plant as `plant.yml`.
These configurations contain settings that affect the behavior of the specific plant they belong to, such as growth stages, display names, etc.
## What are "tracks"? [#what-are-tracks]
Tracks are a way to specify different growth paths for a plant.
Each track corresponds to a folder in the same directory as the plant's `plant.yml` and contains schematic files that represent the different growth stages of the plant.
When a plant grows, it will randomly select a track (or use the specified track) and use the schematic files in that track to determine how the plant grows and what it looks like at each growth stage.
## Folder structure [#folder-structure]
Each plant lives in its own folder inside the `plants` directory. That folder holds the plant's `plant.yml` and one subfolder per track, with each track containing the schematic files for its growth stages.
* In the example provided below, `apple` has a track called `fLip` with 5 growth stages, while `blueberry` has a track called `default` with 2 growth stages.
Both plants have their own `plant.yml` configuration file and more tracks can be added by simply creating new folders with schematic files in them.
## Configuration Settings [#configuration-settings]
```yaml
# https://docs.breweryteam.dev/docs/garden/config/plant
# Approximate growth time in minutes or days (e.g. "30m" or "1d").
approximate-growth-time: "1d"
# How fruits are placed when a plant grows. Options are: ADJACENT, ABOVE and UNDER.
fruit-placement: UNDER
# The track that should be used for this plant (optional)
# This should correspond to a folder or "track" defined in the same directory as this plant's `plant.yml`.
tracks:
- fLip # fLip is the player name of our plant builder
# Whether this plant may bear fruit.
# If false, the plant will not produce any fruit even if it grows successfully. If unspecified, this will default to true.
bear-fruit: true
# See items definition section for more information
seeds:
# The item's display name
display-name: "Apple Seeds"
# The item material
material: sweet_berries
# See items definition section for more information
fruit:
# The item's display name
display-name: "Apple"
# The item material
material: apple
```
## Items Definition [#items-definition]
### Player head items [#player-head-items]
```yaml
# The item's display name
display-name: "<#4f86f7>Blueberry"
# The head texture in base64
head-texture-base64: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDI2OTdmM2VmOGY0NjI5YjY0NWZkMmU2NDQ2NDEzMjRhMWMxMTgzNTQ5OGU2MzhmNzU3ZjI3OGFmYmNlNWRiMSJ9fX0="
# The lore of the item
lore:
- Line 1
- Line 2
# How the items color should be shown (used by TheBrewingProject)
color: dark_red # Also supports hex codes like this "#4f86f7"
# Specify more precisely how you want the fruit to be placed (optional)
fruit-placement: ... # See fruit placement definition
# Extra data for the item
data: ... # See extra item data definition
```
### Material items [#material-items]
```yaml
# The item's display name
display-name: "Apple"
# The items material
material: apple
# The scale of the item display when placed to a tree (optional + legacy value)
placed-scale: 0.7
# How the items color should be shown (used by TheBrewingProject)
color: dark_red # Also supports hex codes like this "#4f86f7"
# The lore of the item (optional)
lore:
- Line 1
- Line 2
# Specify more precisely how you want the fruit to be placed (optional)
fruit-placement: ... # See fruit placement definition
# Extra data for the item
data: ... # See extra item data definition
```
## Fruit placement definition [#fruit-placement-definition]
### Player head placement [#player-head-placement]
```yml
# The head texture in base64
head-texture-base64: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDI2OTdmM2VmOGY0NjI5YjY0NWZkMmU2NDQ2NDEzMjRhMWMxMTgzNTQ5OGU2MzhmNzU3ZjI3OGFmYmNlNWRiMSJ9fX0="
```
### Material placement [#material-placement]
```yml
# Extra data for the item shown by the item display, note that only texture changes will be noted by users
data: ... # See extra item data definition
# The scale of the item display when placed to a tree (optional)
placed-scale: 0.7
# The amount of item displays to render, for example a block type item should be 1, and a normal item 2
item-displays: 2
# The items material
material: apple
```
### Extra item data [#extra-item-data]
```yml
# All extra data is optional
data:
# Define custom model data for the item
customModelData:
floats:
- 0
- 1
- 2
colors:
- red
- "#000000" # Black in hex code
flags:
- true
- false
# Define custom persistent data container data, usually used by plugins, use with caution
pdc:
# Supports boolean, byte, short, int, long, float, double, string. Array types are not supported!
my_plugin:key_value:
type: string
value: "My value"
my_plugin:other_key:
type: boolean
value: true
# Define custom consume properties for this item
# Hint: If you don't want the item to be consumable, specify it as such:
# consumption: {}
consumption:
consumeEffects:
# Randomly teleport once consumed, like when eating chorus fruit
- type: teleport
diameter: 1.0
# Play sound once consumed
- type: playSound
soundKey: minecraft:ambient_cave
# Apply potion effects once consumed
- type: potionEffects
# effect[;duration[;amplifier]]
# Note that amplifier level one has the data value 0 and duration is in ticks
effects:
- poison;10;2
- regeneration;10
- speed # Default to speed;20;0
# Remove potion effect once consumed
- removeEffects:
- lucky
# The animation to show when consuming the item
# Any of [none, eat, drink, block, bow, spear, crossbow, spyglass, toot_horn, brush, bundle]
animation: eat
# The time it takes to consume the item in seconds
consumeSeconds: 1.0
# Whether to show consume particles when consuming the item
consumeParticles: true
# Whether to play a sound during consumption
sound: minecraft:ambient_cave
# Whether the item can always be eaten regardless of hunger
canAlwaysEat: false
# The nutrition gained when consuming the item
nutrition: 10
# The amount of saturation gained per nutrition level when consuming this item
saturation: 0.5 # 50 percent
# Define the item model to use
itemModel: minecraft:dirt
```
# Установка (/ru/docs/tbp/for-server-owners/install)
## Требования [#требования]
* `Java 25+`
* `PaperMC 1.21.8+` (или любой подходящий форк, т.е. Folia, Purpur, ...), **SpigotMC работать не будет**
Многие форки PaperMC с большим упором на оптимизацию, по типу [Canvas](https://github.com/CraftCanvasMC/Canvas), [Leaf](https://github.com/Winds-Studio/Leaf) и [LightingLuminol](https://github.com/LuminolMC/LightingLuminol) часто могут вызывать проблемы с совместимостью некоторых плагинов.
В случае с BreweryX мы уже получали отчеты о проблемах при их использовании (см. [issue #138](https://github.com/BreweryTeam/BreweryX/issues/138), [issue #85](https://github.com/BreweryTeam/BreweryX/issues/85)).
Мы не можем гарантировать идеальную работу TheBrewingProject с этими форками, но в целом совместимость должна быть лучше, чем у BreweryX.
## Установка [#установка]
Скачайте плагин из желаемого источника: Modrinth,{" "}
Hangar или Jenkins (дев билды)
Поставьте плагин
* Остановите сервер
* Закиньте JAR-файл в папку `/plugins`
* Запустите сервер
Всё, **TheBrewingProject** Установлен!
Если вы столкнётесь с проблемами при установке, проверьте ваши логи на предмет ошибок. В них часто содержится информация, полезная для решения проблем.
Если вам всё ещё нужна помощь, не стесняйтесь запрыгивать в наш Discord-сервер!
# Переход с BreweryX (/ru/docs/tbp/for-server-owners/migrate-from-breweryx)
Существует возможность быстро перенести большинство ваших прибамбасов из BreweryX, вот как это делается:
Скачайте
[вот этот](https://ci.breweryteam.dev/job/BreweryTeam/job/TheBrewingProject/job/master/lastBuild/artifact/migration/build/libs/TheBrewingProjectMigration-master.jar)
файл. Это плагин для миграции файлов.
Закиньте скачанный плагин-мигратор в папку
`/plugins/`
. Убедитесь, что у вас уже установлен TheBrewingProject.
Запустите ваш сервер.
После полного запуска сервера, вновь остановите его и удалите jar-файлы мигратора и BreweryX.
### Что будет перенесено? [#что-будет-перенесено]
* Бочки (но любые не-напитки внутри будут удалены)
* Напитки, хранящиеся где-то: когда игрок откроет контейнер, TheBrewingProject проверит, есть ли внутри напитки из BreweryX, и сконвертирует их, если требуется. (и нет, для работы этой функции наличие плагина-мигратора не требуется)
* Котлы с их текущим прогрессом варки и всеми ингредиентами внутри
* Всё в файле `recipes.yml`, КРОМЕ:
* Большинства кастомных ингредиентов из `custom-items.yml`
* Ингредиенты-напитки тоже могут сломаться, поскольку их display-name больше не может использоваться в качестве обозначения ингредиента.
Заданные в рецептах команды, выполняемые при выпивании напитка, больше невозможны в прежнем виде в TheBrewingProject. Они автоматически будут сконвертированы в события. Ищите их в файле `events.yml`
### Что **НЕ** будет перенесено? [#что-не-будет-перенесено]
Всё, что не перечислено в списке выше, не будет автоматически перенесено, включая:
* `config.yml`
* `custom-items.yml`
* `cauldron.yml`
# Об алкоголе (/ru/docs/tbp/gameplay/getting-drunk)
## Как набухаться [#как-набухаться]
1. Ищем спирт. 2. Пьём спирт. 3. Готово. Но учтите, что неправильно изготовленные напитки могут доставить вам уйму неприятностей. Качество - залог успеха.
## Что со мной произойдет, когда я опьянею? [#что-со-мной-произойдет-когда-я-опьянею]
Ты на шаг приблизишься к сверхчеловеку. Эффекты следующие:
### Ты станешь свободно разговаривать на новом языке, понять который могут лишь боги. [#ты-станешь-свободно-разговаривать-на-новом-языке-понять-который-могут-лишь-боги]
### Твоя походка станет **сногсшибательной**. Место назначения - Пивлэнд. [#твоя-походка-станет-сногсшибательной-место-назначения---пивлэнд]
TODO
### Мгновенное восхождение, правда ты об этом скорее всего чуть-чуть забудешь. [#мгновенное-восхождение-правда-ты-об-этом-скорее-всего-чуть-чуть-забудешь]
TODO
## Протрезветь бы, да поскорее [#протрезветь-бы-да-поскорее]
Самый простой способ ускорить процесс отрезвления - есть много хлеба и пить молоко. Впрочем, каждый сервер может настроить подходящую еду по-своему.
# Команды и события аддонов (/ru/docs/breweryx/for-developers/addons/addon-commands-and-events)
Поскольку я являюсь неграмотным бездарем в этой сфере, я не осмелюсь переводить незнакомые мне термины и матчасть. Ниже представлен оригинал.
### Addon Commands [#addon-commands]
Addon commands should be registered through the `registerCommand` method in the `onAddonEnable` method.
Addon commands will appear as subcommands for the `/breweryx` command in-game.
```java title="MyCommand.java"
public class MyCommand implements AddonCommand {
@Override
public void execute(BreweryPlugin breweryPlugin, Lang lang, CommandSender sender, String label, String[] args) {
sender.sendMessage("Hello, from MyCommand!");
}
@Override
public List tabComplete(BreweryPlugin breweryPlugin, CommandSender sender, String label, String[] args) {
return null;
}
@Override
public String getPermission() {
return "brewery.myaddon.command";
}
@Override
public boolean playerOnly() {
return false;
}
}
@Override
public void onAddonEnable() {
registerCommand("mycommand", new MyCommand());
}
```
```kotlin title="MyCommand.kt"
class MyCommand : AddonCommand {
override fun execute(breweryPlugin: BreweryPlugin, lang: Lang, sender: CommandSender, label: String, args: Array) {
sender.sendMessage("Hello, from MyCommand!")
}
override fun tabComplete(breweryPlugin: BreweryPlugin, sender: CommandSender, label: String, args: Array): List? {
return null
}
override fun getPermission(): String {
return "brewery.myaddon.command"
}
override fun playerOnly(): Boolean {
return false
}
}
override fun onAddonEnable() {
registerCommand("mycommand", MyCommand())
}
```
### Events in addons [#events-in-addons]
Events in addons should be declared the same way as they are in normal Bukkit plugins.
The only difference being, is that you must register them through your addons `registerListener`
method in the `onAddonEnable` method.
```java title="MyListener.java"
public class MyListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
event.getPlayer().sendMessage("Hello, from MyListener!");
}
}
@Override
public void onAddonEnable() {
registerListener(new MyListener());
}
```
```kotlin title="MyListener.kt"
class MyListener : Listener {
@EventHandler
fun onPlayerJoin(event: PlayerJoinEvent) {
event.player.sendMessage("Hello, from MyListener!")
}
}
override fun onAddonEnable() {
registerListener(MyListener())
}
```
# Конфигурации аддонов (/ru/docs/breweryx/for-developers/addons/addon-configurations)
Поскольку я являюсь неграмотным бездарем в этой сфере, я не осмелюсь переводить незнакомые мне термины и матчасть. Ниже представлен оригинал.
### Configuration files in addons [#configuration-files-in-addons]
Addons support configuration files using Okaeri config,
which is a powerful and easy-to-use configuration library.
Lombok is recommended for Java developers to reduce boilerplate code.
```java title="MyConfig.java"
@OkaeriConfigFile(fileName = "addon-config.yml")
@Getter @Setter
public class MyConfig extends AddonConfigFile {
private String message = "Hello, from MyConfig!";
}
@Override
public void onAddonEnable() {
MyConfig config = getAddonConfigManager().getConfig(MyConfig.class);
getLogger().info(config.getMessage());
}
```
```kotlin title="MyConfig.kt"
@OkaeriConfigFile(fileName = "addon-config.yml")
class MyConfig : AddonConfigFile() {
// Do not use 'val' for config keys!
var message = "Hello, from MyConfig!"
}
override fun onAddonEnable() {
val config = addonConfigManager.getConfig(MyConfig::class.java)
logger.info(config.message)
}
```
# Создание проекта (/ru/docs/breweryx/for-developers/addons/creating-a-project)
Поскольку я являюсь неграмотным бездарем в этой сфере, я не осмелюсь переводить незнакомые мне термины и матчасть. Ниже представлен оригинал.
BreweryX supports addons that can add new features to the plugin.
This can be new brewing recipes, custom items, or other features.
This section documents how to create an addon for BreweryX.
### Choosing a language [#choosing-a-language]
BreweryX supports addons compiled down to Java >=17. We also support Kotlin natively.
If you're using Kotlin in your project, please **don't** shade in its standard libraries!
### Creating an addon [#creating-an-addon]
See our [template repository](https://github.com/BreweryTeam/ExampleBreweryAddon) addons for project setup and what dependencies to include.
After setting up your project, you'll need a main class that extends BreweryAddon and implements the `onAddonEnable` method.
```java title="MyAddon.java"
import com.dre.brewery.api.addons.BreweryAddon;
import com.dre.brewery.api.addons.AddonInfo;
@AddonInfo(name = "MyAddon", version = "1.0", author = "Jsinco")
public class MyAddon extends BreweryAddon {
@Override
public void onAddonEnable() {
// Code which is executed when MyAddon is enabled
}
@Override
public void onAddonDisable() {
// Code which is executed when BreweryX is disabled
}
@Override
public void onBreweryReload() {
// Code which is executed when `/breweryx reload` is executed
}
}
```
```kotlin title="MyAddon.kt"
import com.dre.brewery.api.addons.BreweryAddon
import com.dre.brewery.api.addons.AddonInfo
@AddonInfo(name = "MyAddon", version = "1.0", author = "Jsinco")
class MyAddon : BreweryAddon() {
override fun onAddonEnable() {
// Code which is executed when MyAddon is enabled
}
override fun onAddonDisable() {
// Code which is executed when BreweryX is disabled
}
override fun onBreweryReload() {
// Code which is executed when `/breweryx reload` is executed
}
}
```
# Котловые напитки (/ru/docs/breweryx/for-server-owners/config/cauldron)
*Они же - недовары. Они же - полуфабрикаты.*
# Файл cauldron.yml [#файл-cauldronyml]
`cauldron.yml` предназначен для настройки того, какие бутылки выходят из котла в зависимости от использованных ингредиентов.
## Как это использовать? [#как-это-использовать]
Записи из `Cauldron.yml` используются для того, чтобы сделать котлы более "интуитивными", добавляя им партиклы, цвет которых
зависит от времени варки и используемых ингредиентов, а также для того, чтобы задать "недовары"/"полуфабрикаты"/"котловые напитки".
У них нет особых эффектов - они выходят из котла, когда вложенные ингредиенты не соответствуют ни одному из рецептов, или же когда
напиток нуждается в дальнейшей обработке (дистилляция/бочка).\
Например, поскольку пиво нуждается в настаивании после варки, логично сделать недовар вроде "пшеничного сусла", который получается при варке пшена в котле.
## Задаём новые записи в cauldron.yml [#задаём-новые-записи-в-cauldronyml]
P.S. Переключите язык в конфиге на русский, комментарии в этом файле у вас на сервере тоже переведутся на русский.
```yaml title="cauldron.yml"
cauldron:
# The key of the cauldron entry. This doesn't really matter, but it must be unique.
exampleKey:
# Note: Brews declared here only come out of cauldrons when the cauldron CANNOT find a matching recipe!
# These entries will not override any declared recipes in your `recipes.yml` file.
name: Unknown Brew # The name of the brew.
color: BLACK # The color of the brew.
customModelData: 545 # The custom model data of the brew.
# The lore of the brew.
lore:
- You just created a completely useless brew!
# The ingriends that must be used to make this cauldron brew. One or more ingredients must match.
ingredients:
- Bedrock/2
- Diamond
# The cooking particles that will be used when brewing. Only ingredients have to match!
cookParticles:
- RED/5
- WHITE/10
- 800000/25
```
# Стандартная конфигурация (/ru/docs/breweryx/for-server-owners/config/config)
Конфигурация BreweryX (config.yml) довольно прямолинейна. Эта документация может быть не всегда актуальна, и мы рекомендуем вам смотреть ваш config.yml, а также читать комментарии к параметрам.
P.S. Переключите `language:` на `ru`, сохраните файл и перезагрузите плагин. Комментарии тоже станут на русском.
## Конфигурация [#конфигурация]
```yaml
# !!! IMPORTANT: BreweryX configuration files do NOT support external comments! If you add any comments, they will be overwritten !!!
# Still have questions? Join our Discord: https://discord.gg/ZTGCzeKg45
# The translation to be used [en]
# Available types: en (English), de (German), es (Spanish), fr (French), it (Italian), ru (Russian), zh (Chinese), uk (Ukrainian)
language: en
# Should BreweryX check for updates? Specify which service you'd like to use for update checking or disable it.
# Options available: GitHub, Snapshots, Spigot, None [GitHub]
resolveUpdatesFrom: GITHUB
# Autosave interval in minutes [10]
autosave: 10
# Prefix used on messages
pluginPrefix: "&2[BreweryX]&f "
# Show debug messages in logs [false]
debug: false
# -- Storage Settings --
storage:
# What type of storage to use [FLATFILE]
# Available types: FlatFile, MySQL, SQLite, MongoDB
type: SQLITE
# The name of the database. When the database is a file, this will be the name of the file. [brewery-data]
database: brewery-data
tablePrefix: brewery_
address: localhost
username: root
password: password
# If the player wakes up at /home when logging in after excessive drinking (/home plugin must be installed!) [true]
enableHome: true
# Type of the home-teleport: ['cmd: home']
# bed = Player will be teleported to his spawn bed
# 'cmd: home' = /home will be executed by the player. He has to have permissions for it without any delay!
# 'cmd: spawn' = /spawn will be executed by the player.
# 'cmd: whatever' = /whatever will be executed by the player.
homeType: "cmd: home"
# If the player "wakes up" at a random place when offline for some time while drinking (the places have to be defined with '/brew Wakeup add' through an admin)
# The Player wakes at the nearest of two random places of his world [true]
enableWake: true
# If the Player may have to try multiple times when logging in while extremely drunk [true]
enableLoginDisallow: true
# If the Player faints shortly (gets kicked from the server) if he drinks the max amount of alcohol possible [false]
enableKickOnOverdrink: false
# If the Player vomits on high drunkenness (drops item defined below) [true]
# The item can not be collected and stays on the ground until it despawns.
enablePuke: true
# Items that is dropped multiple times uncollectable when puking [Soul_Sand]
# Can be list of items such as [Soul_sand, Slime_block, Dirt]
pukeItem:
- SOUL_SAND
# Time in seconds until the pukeitems despawn, (mc default is 300 = 5 min) [60]
# If the item despawn time was changed in the spigot.yml, the pukeDespawntime changes as well.
pukeDespawntime: 60
# How much the Player stumbles depending on the amount of alcohol he drank. Can be set to 0 and higher than 100 [100]
stumblePercent: 100
# Display his drunkenness to the player when he drinks a brew or eats a drainItem [true]
showStatusOnDrink: true
# Consumable Item/strength. Decreases the alcohol level by when consumed. (list)
drainItems:
- Bread/4
- Milk_Bucket/2
# Show Particles over Cauldrons when they have ingredients and a heat source. [true]
# The changing color of the particles can help with timing some recipes
enableCauldronParticles: true
# If Cauldron Particles should be reduced to the bare minimum [false]
minimalParticles: false
# If crafting and using of the Brew Sealing Table is enabled (2 Bottles over 4 Planks) [true, true]
craftSealingTable: true
enableSealingTable: true
# By default, Brewery uses Smoker as a Sealing Table, this option allows you to change it
# IMPORTANT: It needs to be a container - meaning a block that can store items (e.g., SMOKER, CHEST, BLAST_FURNACE).
sealingTableBlock: SMOKER
# Always show the 1-5 stars on the item depending on the quality. If false, they will only appear when brewing [true]
alwaysShowQuality: true
# Always show the alcohol content on the item. If false, it will only show in the brewing stand [false]
# Sealed brews will not show the alcohol content regardless of this setting
alwaysShowAlc: false
# Always show that a brew is alcoholic by putting "Alcoholic" in the item's lore
# Sealed brews will show that a brew is alcoholic, but not its alcohol content
alwaysShowAlcIndicator: true
# If ruined brews show hints about why they were ruined [false].
# Examples:
# - "Too much time in the oven..."
# - "One of the ingredients doesn't taste good..."
# Note that the hints are for the closest recipe based on the ingredients and may not be 100% accurate.
showRuinedBrewHints: false
# If we should show who brewed the drink [false]
showBrewer: false
# If barrels are only created when the sign placed contains the word "barrel" (or a translation when using another language) [true]
requireKeywordOnSigns: true
# If aging in -Minecraft- Barrels in enabled [true] and how many Brewery drinks can be put into them [6]
ageInMCBarrels: true
maxBrewsInMCBarrels: 6
# Duration (in minutes) of a 'year' when aging drinks [20]
agingYearDuration: 20
# Whether to use the new algorithm for calculating wood type quality and shifting wood type when a brew is aged in different barrels.
# False is the behavior of the original Brewery plugin.
# True groups similar barrel types (such as oak and pale oak) together in a more intuitive way. [false]
newBarrelTypeAlgorithm: false
# Aliases for the '/breweryx' command. Requires a server restart to take effect. (list) [brewery, brew]
commandAliases:
- brewery
- brew
# The used Ingredients and other brewing-data is saved to all Brewery Items. To prevent
# hacked clients from reading what exactly was used to brew an item, the data can be encoded/scrambled.
# This is a fast process to stop players from hacking out recipes, once they get hold of a brew.
# Only drawback: brew items can only be used on another server with the same encodeKey.
# When using Brews on multiple (BungeeCord) Servers, define a MYSQL database in the 'storage' settings.
# So enable this if you want to make recipe cheating harder, but don't share any brews by world download, schematics, or other means. [false]
enableEncode: false
encodeKey: 1000000000000000000
# -- Plugin Compatibility --
# Enable checking of other Plugins (if installed) for Barrel Permissions [true]
# Plugins 'Landlord' and 'Protection Stones' use the WorldGuard Flag. 'ClaimChunk' is natively supported.
useWorldGuard: true
useLWC: true
useGriefPrevention: true
useTowny: true
useLands: true
useBlockLocker: true
useGMInventories: true
# Use a virtual chest when opening a Barrel to check with all other protection plugins
# This could confuse Anti-Cheat plugins, but is otherwise good to use
# use this for 'Residence' Plugin and any others that don't check all cases in the PlayerInteractEvent
useVirtualChestPerms: false
# Enable the Logging of Barrel Inventories to LogBlock [true]
useLogBlock: true
# If items in Offhand should be added to the cauldron as well [false]
useOffhandForCauldron: false
# This option no longer does anything anymore, and will be removed in future releases of BreweryX.
# BreweryX will load data asynchronously always, with the exception of server startup and shutdown.
loadDataAsync: true
# Time (in days) that drunkenness-data stays in memory after a player goes offline, to apply hangover etc. [7]
hangoverDays: 7
# If only Brewery drinks can be put into barrels [false]
onlyAllowBrewsInBarrels: false
# Color the Item information (lore) depending on quality while it is 1. in a barrel and/or 2. in a brewing stand [true, true]
colorInBarrels: true
colorInBrewer: true
# If a Large Barrel can be opened by clicking on any of its blocks, not just Spigot or Sign. This is always true for Small Barrels. [true]
openLargeBarrelEverywhere: true
# How many rows the inventory of each barrel type should have [3,1]
# Must be an integer between 1 and 6 (a Minecraft / GUI limitation)
# (A server restart is required for changes here to take effect)
barrelInvSizeLarge: 3
barrelInvSizeSmall: 1
# Allow emptying brews into hoppers to discard brews while keeping the glass bottle [true]
brewHopperDump: true
# If written Chat is distorted when the Player is Drunk, so that it looks like drunk writing
# How much the chat is distorted depends on how drunk the Player is
# Below are settings for what and how changes in chat occur
enableChatDistortion: true
# Log to the Serverlog what the player actually wrote, before his words were altered [false]
logRealChat: false
# Text after specified commands will be distored when drunk (list) [- /gl]
distortCommands:
- /gl
- /global
- /fl
- /s
- /letter
- /g
- /l
- /lokal
- /local
- /mail send
- /m
- /msg
- /w
- /whisper
- /reply
- /r
- /t
- /tell
# Distort the Text written on a Sign while drunk [false]
distortSignText: false
# Enclose a Chat text with these Letters to bypass Chat Distortion (Use "," as Separator) (list) [- '[,]']
# Chat Example: Hello i am drunk *I am testing Brewery*
distortBypass:
- "*,*"
- "[,]"
# Words and letters that will be altered when chatting while being drunk.
# Will be processed from first to last and a written sentence is altered in that order.
# replace: Word or letter to be replaced. (Special: "-space": replaces space, "-random": insert into random position, "-all": everything, "-start": At Beginning, "-end": At the End.)
# to: What to replace it with.
# pre: Words and Letters before the wanted word (split with ",")
# match: true = one of the "pre"-Words has to be before the wanted Word, false = none of the "pre" Words is allowed before the wanted Word
# alcohol: 1-100 minimum drunkenness after which this word is replaced
# percentage: Probability of replacing a Word in percent
words:
- replace: s
to: sh
alcohol: 30
percentage: 90
- replace: ch
to: sh
pre: u,s,o,a
match: false
alcohol: 10
percentage: 70
- replace: h
to: hh
pre: sch,h,t
match: false
alcohol: 20
percentage: 60
- replace: th
to: thl
alcohol: 30
percentage: 40
- replace: sch
to: shk
alcohol: 40
percentage: 60
- replace: u
to: uuh
percentage: 20
- replace: y
to: yy
alcohol: 15
percentage: 60
- replace: e
to: ee
alcohol: 15
percentage: 40
- replace: you
to: u
percentage: 40
- replace: u
to: uo
pre: u
match: false
percentage: 60
- replace: that
to: taht
alcohol: 40
percentage: 20
- replace: p
to: b
percentage: 30
- replace: p
to: b
alcohol: 60
percentage: 70
- replace: up
to: ubb
alcohol: 25
percentage: 80
- replace: o
to: oh
percentage: 20
- replace: ei
to: i
alcohol: 15
percentage: 30
- replace: b
to: bb
alcohol: 40
percentage: 80
- replace: "!!!"
to: "!!!111!!!eleven!1!"
pre: "!"
match: false
alcohol: 70
percentage: 20
- replace: "!"
to: "!!"
pre: "!"
match: false
percentage: 90
- replace: drunk
to: dhrkunn
pre: are
match: false
alcohol: 65
percentage: 70
- replace: walk
to: whhealhk
pre: you can, you can still, you can not
match: false
alcohol: 30
percentage: 80
- replace: wtf
to: wft
alcohol: 40
percentage: 20
- replace: lol
to: loool
alcohol: 10
percentage: 80
- replace: afk
to: aafkayyy
alcohol: 30
percentage: 30
- replace: write
to: wreitt
pre: you can,you can still,you can not
match: false
alcohol: 50
percentage: 80
- replace: drink
to: booze
alcohol: 70
percentage: 80
- replace: "?"
to: ????
pre: "?"
match: false
alcohol: 40
percentage: 80
- replace: -space
to: ""
pre: h,g,w
match: true
alcohol: 10
- replace: -space
to: ""
alcohol: 35
percentage: 30
- replace: -space
to: ""
percentage: 10
- replace: -start
to: dho
alcohol: 50
percentage: 15
- replace: -start
to: hhn
alcohol: 50
percentage: 10
- replace: -random
to: lu
percentage: 10
- replace: -random
to: lug
alcohol: 50
percentage: 10
- replace: -random
to: blub
alcohol: 80
percentage: 20
- replace: -random
to: lerg
alcohol: 85
percentage: 40
- replace: -random
to: gul
alcohol: 80
percentage: 40
- replace: -random
to: " "
alcohol: 70
percentage: 100
- replace: -random
to: " "
alcohol: 40
percentage: 60
- replace: -random
to: " "
alcohol: 30
percentage: 50
- replace: -end
to: "!"
alcohol: 30
percentage: 40
- replace: -random
to: " *hic* "
alcohol: 70
percentage: 80
- replace: -random
to: " *hic* "
alcohol: 40
percentage: 15
- replace: -space
to: " *hic* "
alcohol: 20
percentage: 5
- replace: -end
to: " *hic*"
alcohol: 50
percentage: 70
- replace: -all
to: "*burp*"
alcohol: 60
percentage: 3
- replace: -all
to: "*burp*"
alcohol: 80
percentage: 6
# Yep, that's it! The end of config.yml! I had so much fun! And you?...
```
# Кастомные ингредиенты (/ru/docs/breweryx/for-server-owners/config/custom-items)
### #needtodoc [#needtodoc]
# Создание рецептов (/ru/docs/breweryx/for-server-owners/config/recipes)
# Создаём новый рецепт с нуля до похмелья [#создаём-новый-рецепт-с-нуля-до-похмелья]
Создание нового рецепта устроено не слишком сложно в BreweryX. Всё что вам нужно - это следовать данному гайду!
## ***...или нет.*** [#или-нет]
Дело в том, что я пока что не вижу смысла переводить эту страницу на русский, поскольку примерно такая же информация написана в `recipes.yml`.
А если вы смените язык плагина в конфиге на русский, то и комментарии тоже поменяют язык. Кроме того, в русской версии комментарии расписаны местами
даже подробнее, чем в оригинале. Поэтому рекомендую вместо этой страницы использовать подсказки в вашем файле рецептов.
***
## Name*s* of a drink: `name` [#names-of-a-drink-name]
| Required? | Value | Default Value |
| --------- | ------------------------- | ------------- |
| Yes | `Bad Name/Name/Good Name` | None |
The name of the drink. Can contain three variations, each for different quality of a drink. It'll look like that:
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
```
Name supports ampersand and HEX color codes:
```yaml
ColorfulBrew:
name: "&8Bad brew/Brew/ffb424Good brew"
```
If you don't want to do names based on brew's quality - just put one name
```yaml
TestBrew:
name: Brew
```
***
## Ingredients: `ingredients` [#ingredients-ingredients]
| Required? | Value | Default Value |
| --------- | ------------------- | ------------- |
| Yes | `- ItemName/Amount` | None |
!!! warning ""
Required at all time
Ingredients needed for the brew. Possible values:
* Minecraft item name
* BreweryX brew name
* BreweryX custom item name
* ItemsAdder id of item (without namespace)
* Oraxen id of item
Format of item is `Item/Amount`
With Minecraft items this'll look like this:
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
ingredients:
- Apple/10 # You need 10 apples
- Brewery:ColorfulBrew/2 # You'll need 2 ColorfulBrew brews from BreweryX
- ItemsAdder:SomeItem/1
- Oraxen:SomeItem/1
- blue_flowers/2 # You'll need 2 items defined in brewery's CustomItems
```
***
## Time to brew: `cookingtime` [#time-to-brew-cookingtime]
| Required? | Value | Default Value |
| --------- | ----------------- | ------------- |
| Yes | Number in minutes | None |
How much in minutes player need to brew. Can be checked with right clicking Clock on Cauldron.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
cookingtime: 12 # 12 minutes
```
***
## How much distilling: `distillruns` [#how-much-distilling-distillruns]
| Required? | Value | Default Value |
| -------------------------------- | ------ | ------------- |
| No, unless `distilltime` present | Number | 0 |
How much times player need to distill brew
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
distillruns: 4
```
***
## Distill time: `distilltime` [#distill-time-distilltime]
| Required? | Value | Default Value |
| --------- | ----------------- | ------------- |
| No | Number in seconds | 0 |
How much it will take to distill brew one time
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
distilltime: 10
```
***
## Type of barrel wood: `wood` [#type-of-barrel-wood-wood]
| Required? | Value | Default Value |
| --------- | ------------------ | ------------- |
| No | Wood type's number | 0 |
Type of barrel wood needed to age brew properly. Posible values:
* 0 - any wood
* 1 - Birch
* 2 - Oak
* 3 - Jungle
* 4 - Spruce
* 5 - Acacia
* 6 - Dark Oak
* 7 - Crimson
* 8 - Warped
* 9 - Mangrove
* 10 - Cherry
* 11 - Bamboo
* 12 - Cut copper
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
wood: 4 # Spruce barrel
```
***
## Aging time: `age` [#aging-time-age]
| Required? | Value | Default Value |
| --------- | ----------------- | ------------- |
| No | Number in MC days | 0 |
How many MC days brew have to be in barrel for best quality.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
age: 12 # 12 minecraft days
```
***
## Color of a drink: `color` [#color-of-a-drink-color]
| Required? | Value | Default Value |
| --------- | ------------------------------- | ------------- |
| No | HEX without `#` or color's name | `WHITE` |
Color of a potion. Can be HEX color or `DARK_RED`, `RED`, `BRIGHT_RED`, `ORANGE`, `YELLOW`, `PINK`, `PURPLE`, `BLUE`, `CYAN`, `WATER`, `TEAL`, `OLIVE`, `GREEN`, `LIME`, `BLACK`, `GREY`, `BRIGHT_GREY`, `WHITE`
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
color: RED
# Or...
color: '99FF33'
```
***
## Difficulty of brewing: `difficulty` [#difficulty-of-brewing-difficulty]
| Required? | Value | Default Value |
| --------- | ------------- | ------------- |
| Yes | Number 1 - 10 | None |
Accuracy needed to get good quality, from `1` to `10`, where `1` is very inaccurate and `10` is very precise.
Lower number - easier drink and vica versa.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
difficulty: 5
```
***
## Alcohol level: `alcohol` [#alcohol-level-alcohol]
| Required? | Value | Default Value |
| --------- | -------------- | ------------- |
| No | Number 0 - 100 | 0 |
How much alcohol "points" player will get after drinking, from `0` to `100`, where `0` is no alcohol and `100` player will most likely faint
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
alcohol: 45
```
***
## Lore of brew: `lore` [#lore-of-brew-lore]
| Required? | Value | Default Value |
| --------- | ----- | ------------- |
| No | List | None |
Lore of a potion. It may vary depending on the quality of the drink.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
lore:
- "This text will always be present"
- + "This text will be present if brew has bad quality"
- ++ "This text will be present if brew has normal quality"
- +++ "This text will be present if brew has good quality"
```
***
## Executing server commands on drink: `servercommands` [#executing-server-commands-on-drink-servercommands]
| Required? | Value | Default Value |
| --------- | ----- | ------------- |
| No | List | None |
Commands that will execute as server. They can be executed depending on the quality of the drink.
Adding `\s` at the end of a command will add delay to execution.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
servercommands:
- say This will execute no matter what!
- say This message will be delayed by 5 seconds! \5s
- + kill %player_name% # This will execute if brew quality is bad
- ++ heal %player_name% # This will execute if brew quality is normal
- +++ op %player_name% # This will execute if brew quality is good. Also don't give OP to players =)
```
***
## Executing commands as player: `playercommands` [#executing-commands-as-player-playercommands]
| Required? | Value | Default Value |
| --------- | ----- | ------------- |
| No | List | None |
Commands that will execute as player. They can be executed depending on the quality of the drink.
Adding `\s` at the end of a command will add delay to execution.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
playercommands:
- me This will execute no matter what!
- me This message will be delayed by 5 seconds! \5s
- + suicide # This will execute if brew quality is bad
- ++ home # This will execute if brew quality is normal
- +++ give %player_name% diamond 9999 # This will execute if brew quality is good.
```
***
## Message after drinking: `drinkmessage` [#message-after-drinking-drinkmessage]
| Required? | Value | Default Value |
| --------- | ------ | ------------- |
| No | String | None |
Message that will be sent to a player after drinking brew.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
drinkmessage: "UR DRUNK!"
```
***
## Title after drinking: `drinktitle` [#title-after-drinking-drinktitle]
| Required? | Value | Default Value |
| --------- | ------ | ------------- |
| No | String | None |
Title message that will be sent to a player after drinking brew.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
drinktitle: "UR DRUNK AND THIS IS TITLE!"
```
***
## Glint effect: `glint` [#glint-effect-glint]
| Required? | Value | Default Value |
| --------- | ---------------------- | ------------- |
| No | bool `true` or `false` | `false` |
Whether brew will have glint effect (as it were enchanted)
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
glint: true
```
***
## CMD of item: `customModelData` [#cmd-of-item-custommodeldata]
| Required? | Value | Default Value |
| --------- | ---------------------- | ------------- |
| No | `Bad CMD/CMD/Good CMD` | None |
Custom model data of a brew, can vary based on quality of a brew.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
customModelData: 1337/1338/1339
```
***
## Potion effects: `effects` [#potion-effects-effects]
| Required? | Value | Default Value |
| --------- | --------------------------- | ------------- |
| No | `EffectName/level/duration` | None |
Effects that will be given to a player after drinking.
Possible Effects: [https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html)
Level or Duration ranges may be specified with a "-", ex. 'SPEED/1-2/30-40' = lvl 1 and 30 sec at worst and lvl 2 and 40 sec at best
Ranges also work high-low, ex. 'POISON/3-1/20-5' for weaker effects at good quality.
Highest possible Duration: 1638 sec. Instant Effects don't need any duration specified.
```yaml
TestBrew:
name: Bad Brew/Brew/Good Brew
effects:
- FIRE_RESISTANCE/20 # Will be given no matter what
- WEAKNESS/3-1/50-10 # Better the brew - less Weakness player will have
- REGENERATION/1-3/10-50 # Vica versa
```
***
## Examples [#examples]
```yaml
g_vodka:
name: "Rancid Vodka/&6Golden Vodka/&6Shimmering Golden Vodka"
ingredients:
- Potato/10
- Gold_Nugget/2
cookingtime: 18
distillruns: 3
age: 0
color: ORANGE
difficulty: 6
alcohol: 20
effects:
- WEAKNESS/28
- POISON/4
fire_whiskey:
name: Powdery Whiskey/Burning Whiskey/Blazing Whiskey
ingredients:
- Wheat/10
- Blaze_Powder/2
cookingtime: 12
distillruns: 3
distilltime: 55
wood: 4
age: 18
color: ORANGE
difficulty: 7
alcohol: 28
drinkmessage: "You get a burning feeling in your mouth"
hot_choc:
name: Hot Chocolate
ingredients:
- cookie/3
cookingtime: 2
color: DARK_RED
difficulty: 2
effects:
- FAST_DIGGING/40
```
# /breweryx age (/ru/docs/breweryx/for-server-owners/commands/age)
Состаривает напиток, который вы держите в руке, как если бы он полежал N лет в бочке.
## Аргументы [#аргументы]
* `barrel_type`: Тип дерева бочки.
* `time`: Количество лет, на которое состарить напиток.
# /breweryx copy (/ru/docs/breweryx/for-server-owners/commands/copy)
Копирует напиток в вашей руке.
## Аргументы [#аргументы]
* `[quantity]`: Сколько копий создать. Если не указано, то создаёт одну.
# /breweryx create (/ru/docs/breweryx/for-server-owners/commands/create)
Создаёт напиток, соответствующий выбранному рецепту.
## Аргументы [#аргументы]
* `recipe_name`: Название (либо ID) рецепта
* `[quality]`: Качество напитка. Дефолтное значение - 10 (идеально)
* `[player]`: Какому игроку выдать напиток. Аргумент обязателен, если команда выполняется из консоли.
# /breweryx data (/ru/docs/breweryx/for-server-owners/commands/data)
Позволяет перезагрузить или сохранить данные плагина без перезагрузки сервера (или плагина).
## Подкоманды [#подкоманды]
### `/breweryx data save` [#breweryx-data-save]
Сохраняет все данные BreweryX (бочки, котлы и тд)
### `/breweryx data reload` [#breweryx-data-reload]
Перезагружает вначале конфиги, а затем все данные плагина.
## Заметка [#заметка]
Большинству серверов эта команда не понадобится, однако она может быть полезна во время отладки.
Она также позволяет сменить способ хранения данных.
### Меняем способ хранения данных [#меняем-способ-хранения-данных]
Предположим, что вы используете устаревший `FlatFile` способ хранения и хотите перейти на `SQLite` датабазу.
Для начала нам нужно поменять настройку `storage.type` в файле `config.yml` с `FLATFILE` на `SQLITE`, сохранить изменения и прописать `/breweryx data reload`.
BreweryX прочитает конфиг, изменит способ хранения данных, а затем сохранит их в новом формате.
# /breweryx debuginfo (/ru/docs/breweryx/for-server-owners/commands/debuginfo)
Выводит отладочную информацию про напиток в руке:
* Инфо о самом напитке
* Состав
* Время варки, кол-во дистилляций, возраст в бочке и т.д.
* Обнаруженное соответствие рецепту
* Тесты рецепта
* Сравнит напиток относительно всех (либо указанного в команде) рецептов(-а) и покажет результаты сравнения, включая соответствие состава, времени готовки и т.д.
## Аргументы [#аргументы]
* `[recipe_name]`: Укажите, если нужно сравнить напиток лишь с определенным рецептом.
# /breweryx delete (/ru/docs/breweryx/for-server-owners/commands/delete)
Ликвидирует напиток в руке.
# /breweryx distill (/ru/docs/breweryx/for-server-owners/commands/distill)
Применяет дистилляцию к напитку в руке.
## Аргументы [#аргументы]
* `[times]`: Сколько кругов дистилляции добавить. Дефолтное значение - 1.
# /breweryx drink (/ru/docs/breweryx/for-server-owners/commands/drink)
Симулирует выпивание указанного напитка игроку.
## Аргументы [#аргументы]
* `recipe_name`: Какой рецепт споить.
* `[quality]`: Качество напитка. Дефолтно - 10 (идеально).
* `[player]`: Какому игроку споить напиток. Если команда выполняется из консоли, то аргумент обязателен.
# /breweryx help (/ru/docs/breweryx/for-server-owners/commands/help)
Выводит список команд BreweryX и их назначение.
## Аргументы [#аргументы]
* `[page]`: Номер страницы. Дефолтно - 1.
# Команды (/ru/docs/breweryx/for-server-owners/commands)
В этой секции содержится документация для всех команд BreweryX.
Обязательные аргументы написаны вот так `arg_name`, в то время как необязательные - вот так `[arg_name]`.
# /breweryx info (/ru/docs/breweryx/for-server-owners/commands/info)
Выводит информацию об уровне опьянения игрока.
## Подкоманды [#подкоманды]
### `/breweryx info` [#breweryx-info]
Выводит ваш собственный уровень опьянения.
### `/breweryx info player_name` [#breweryx-info-player_name]
Выводит уровень опьянения определенного игрока. Эта команда может выполняться как от консоли, так и игроком. **Требует другое разрешение**
#### Аргументы [#аргументы]
* `player_name`: Имя игрока.
# /breweryx itemName (/ru/docs/breweryx/for-server-owners/commands/itemname)
Выводит название материала для предмета в руке (например, Дёрн будет `grass_block`)
# /breweryx puke (/ru/docs/breweryx/for-server-owners/commands/puke)
Заставляет вас (или игрока) блевать как при высоком опьянении.
### Аргументы [#аргументы]
* `[player_name]`: Никнейм рыгающего игрока. Если не указан, то применяется к исполнителю.
* Если указанный игрок не исполнитель команды, команда будет применена лишь если у исполнителя есть права `brewery.cmd.puke` и `brewery.cmd.pukeOther`
* `[items]`: Сколько единиц блевоты вырыгнуть. Если не указано, будет выбрано случайное значение между 20 и 60.
# Команда 'Reload' (/ru/docs/breweryx/for-server-owners/commands/reload-command)
#### Синтаксис: `/breweryx reload` [#синтаксис-breweryx-reload]
##### Разрешение: brewery.cmd.reload [#разрешение-brewerycmdreload]
Эта команда перезагружает плагин, а также аддоны и конфигурацию.
При использовании этой команды, BreweryX перезагрузит:
* config.yml
* recipes.yml
* cauldron.yml
* custom-items.yml
* Всю локализацию
* А также заставит аддоны перезагрузить собственные данные и конфигурацию.
Эта команда **НЕ**:
* Не сохраняет принудительно данные BreweryX
* Не перезагружает BreweryX DataManager (настраивается в `config.yml#storage`)
Для упомянутых действий, нужно использовать `/breweryx data save` или `/breweryx data reload`.
# Команда 'ReloadAddons' (/ru/docs/breweryx/for-server-owners/commands/reloadaddons-command)
:::ВНИМАНИЕ \[НЕ РЕКОМЕНДУЕТСЯ]\
Использование этой команды крайне **не рекомендовано**, особенно вне тестовой среды.\
Эта команда ПОЛНОСТЬЮ перезагружает аддоны и фактически работает так же как и [Bukkit-овская команда `/reload`](https://madelinemiller.dev/blog/problem-with-reload/)
Если вы хотите перезагрузить конфигурацию аддонов, используйте `/breweryx reload`.
#### Синтаксис: `/breweryx reloadaddons` [#синтаксис-breweryx-reloadaddons]
##### Разрешение: brewery.cmd.reloadaddons [#разрешение-brewerycmdreloadaddons]
Перезагружает все аддоны BreweryX. Эта команда напрямую вытягивает аддоны из их папки и загружает их в память.
Классы аддонов, загружаемые BreweryX, используют ClassLoader `PluginLoader`, что означает, что эта команда будет жрать больше и больше памяти по мере своего использования, потому что мусор старых классов аддонов не будет собираться.
Использование этой команды крайне не рекомендуется и может привести к большому количеству проблем!
# Команда 'Seal' (/ru/docs/breweryx/for-server-owners/commands/seal-command)
#### Синтаксис: `/breweryx seal` [#синтаксис-breweryx-seal]
##### Разрешения: brewery.cmd.seal [#разрешения-brewerycmdseal]
Открывает интерфейс стола запечатывания для игрока, выполнившего команду.
# Команда'Set' (/ru/docs/breweryx/for-server-owners/commands/set-command)
#### Синтаксис: `/breweryx set <игрок> <опьянение> <качество>` [#синтаксис-breweryx-set-игрок-опьянение-качество]
##### Разрешение: brewery.cmd.set [#разрешение-brewerycmdset]
Устанавливает опьянение игрока. Опьянение может быть 0-100, качество - 0-10.
# Команда 'ShowStats' (/ru/docs/breweryx/for-server-owners/commands/showstats-command)
### Синтаксис: `/breweryx showstats` [#синтаксис-breweryx-showstats]
##### Разрешение: brewery.cmd.showstats [#разрешение-brewerycmdshowstats]
Выводит информацию о вашей установке BreweryX:
* Количество пьяных на данный момент игроков.
* Общее количество созданных на сервере напитков.
* Количество бочек на сервере.
* Количество кипящих на данный момент котлов.
* Количество рецептов в `recipes.yml`.
* Количество установленных точек пробуждения.
# Команда 'Simulate' (/ru/docs/breweryx/for-server-owners/commands/simulate-command)
### #needtodoc [#needtodoc]
##### Permission: brewery.cmd.create [#permission-brewerycmdcreate]
# Команда 'Static' (/ru/docs/breweryx/for-server-owners/commands/static-command)
#### Синтаксис: `/breweryx static` [#синтаксис-breweryx-static]
##### Разрешение: brewery.cmd.static [#разрешение-brewerycmdstatic]
Делает напиток в руке статичным, как если бы его запихнули в стол для запечатывания.
# Команда 'Unlabel' (/ru/docs/breweryx/for-server-owners/commands/unlabel-command)
#### Синтаксис: `/breweryx unlabel` [#синтаксис-breweryx-unlabel]
##### Разрешение: brewery.cmd.create [#разрешение-brewerycmdcreate]
Скрывает детали описания напитка, как если бы его запихнули в стол для запечатывания.
# Команда 'Version' (/ru/docs/breweryx/for-server-owners/commands/version-command)
#### Синтаксис: `/breweryx version` [#синтаксис-breweryx-version]
##### Разрешения: brewery.cmd.version [#разрешения-brewerycmdversion]
Выводит информацию о плагине:
* Текущая версия BreweryX.
* Авторы Brewery и BreweryX.
* Список загруженных аддонов.
# Команда 'Wakeup' (/ru/docs/breweryx/for-server-owners/commands/wakeup-command)
### #needtodoc [#needtodoc]
##### Permission: brewery.cmd.wakeup [#permission-brewerycmdwakeup]
# Бочка (/ru/docs/breweryx/gameplay/creating-brews/aging)
Настаивание в бочке - еще один этап в нашем кропотливом труде. Во время настаивания напиток увеличивает своё качество и эффекты, если таковые указаны в его рецепте.\
Настаивание, подобно дистилляции, нужно не всем напиткам, однако, в отличие от неё, непосредственно влияет на качество готового продукта.\
Для настаивания нам понадобится бочка. Рассмотрим процесс её создания. Кстати, ножки бочке не нужны.
## Бочка дёгтя в ложке мёда... Или.... Эээ... [#бочка-дёгтя-в-ложке-мёда-или-эээ]
Для создания бочки нам понадобится:
* 20 досок, 16 ступенек, 1 забор и табличка того же типа - для большой бочки. Кстати, ножки ей не требуются.
* 8 досок и табличка того же типа - для маленькой бочки.
Установите блоки так же, как указано на схеме внизу (не считая ножек у больших бочек, они им не нужны).\
**В последнюю очередь** установите на бочку табличку с надписью "barrel" (Или можно "бочка", если плагин у вас на русском языке).\
Если вы всё правильно сделали, то в чате появится сообщение об успешном создании бочки. Не забудьте отпилить ножки большой бочке, если случайно их добавили. Они ей не требуются.
Вопреки расхожему **ошибочному** мнению, большая бочка не нуждается в четырех заборах-ножках. Это ложь, распространяемая лесорубским лобби для повышения продаж древесины, не верьте им!
После создания бочки положите ваши напитки в неё и ждите! По прошествии одного "года" информация в названии/описании напитка обновится.\
В отличие от дистилляции, тут у нас есть все шансы испортить напиток, передержав его, или же засунув в бочку не того типа, будьте внимательны.\
*И помните: ни слова про ножки.*
# Варка (/ru/docs/breweryx/gameplay/creating-brews/brewing)
### Предисловие [#предисловие]
Пора варить, Джесси! В отличие от ванильного Майнкрафта, здесь всё немного сложнее, чем просто закинуть ингредиенты в зельеварку и подождать 20 секунд.\
В Зависимости от рецепта, процесс может оказаться сложным и времязатратным. Некоторые рецепты могут требовать высокой точности, когда речь заходит об ингредиентах или любом другом этапе приготовления.\
Если определенный шаг был выполнен неправильно, то качество напитка может пострадать, или же вы и вовсе получите совсем не то, что изначально собирались сварить!
В зависимости от рецепта, некоторые шаги могут быть необязательными, однако варка нужна всегда. На этой странице мы рассмотрим как раз её.
### Как варить? [#как-варить]
Поставьте котёл и наполните его водой.
Добавьте под котёл источник тепла. Подойдет любой из подходящих вариантов: Огонь, Лава, Блок магмы, Костёр, или любой другой подходящий источник тепла, указанный в конфигурации.
Добавьте необходимые ингредиенты, нажимая ПКМ по котлу с ними в руке.
{/* Formatter breaks the layout D: */}
Нажмите ПКМ по котлу с
**часами**
в руке, чтобы узнать, сколько времени ингредиенты уже варятся.
Когда пройдет необходимое количество времени, заберите содержимое из котла при помощи **трёх** пустых бутылок
В некоторых случаях, на этом - всё! Однако многие рецепты могут требовать дальнейшей обработки в виде дистилляции в зельеварке и/или настаивания в бочке. Перейдите на следующую страницу, чтобы узнать об этом подробнее.
# Дистилляция (/ru/docs/breweryx/gameplay/creating-brews/distilling)
Для некоторых рецептов может понадобится продистиллировать напиток один или несколько раз.\
В BreweryX дистилляция осуществляется в зельеварке при помощи светокаменной пыли в качестве ингредиента (вам понадобится лишь 1 штука, она не тратится)
Сам по себе процесс довольно прост, нужно всего лишь положить бутылки с содержимым в нижние слоты, светокаменную пыль - в верхний, и ждать.
В видео выше я делаю водку, которая требует три дистилляции.
И хотя одной дистилляции уже достаточно для получения полного качества, вторая и третья дистилляция нужны для того,
чтобы довести алкогольность до возможного максимума (настраиваемого в рецепте)
Процесс дистилляции не требует особо контроля и сам остановится, когда напитки достигнут необходимого количества дистилляций. Конечно, всегда можно снять их раньше, кто кто ж градус понижает-то? ¯\\*(ツ)*/¯
# Запечатывание (/ru/docs/breweryx/gameplay/creating-brews/sealing)
Запечатывание напитков не принимает непосредственного участия в приготовлении, однако полезно, если вы хотите скрыть детальное описание о шагах приготовления напитка, скрыв от других игроков детали рецепта.
Оно также иногда помогает при возникновении проблем с плагинами продажи предметов.
## Как запечатывать [#как-запечатывать]
Сначала нужно скрафтить столик для запечатывания. Он создается при помощи 4 досок и 2 пустых бутылок.
Затем просто поставьте его и нажмите по нему, чтобы открыть его инвентарь. Просто закиньте туда напитки, которые запечатываете, подождите с полсекунды (при запечатывании должен проиграться звук), и заберите запечатанные напитки.
# Основная конфигурация (/ru/docs/tbp/for-server-owners/config/config)
В файле `config.yml` задаётся поведение основных механик плагина. Он содержит комментарии к каждой настройке, поэтому нет нужды в отдельной странице для этого.
# События (/ru/docs/tbp/for-server-owners/config/events)
События - это система для выполнения комманд, применения эффектов, отправки сообщений, и применения других событий. Вся конфигурация событий находится в `events.yml`
## Random drunken events [#random-drunken-events]
События, происходящие случайно, пока у игрока достаточно опьянения и/или токсинов.
```yml
enabled-random-events:
- puke
- memory_loss
- stumble
- chicken
- drunk_message
- nausea
```
## Pass out time [#pass-out-time]
Сколько минут игрок должен находиться в отрубе во время события `pass_out`
```yml
pass-out-time: 5
```
## Teleport destinations [#teleport-destinations]
Куда игрок должен быть телепортирован (выбирается рандомно, если несколько) во время события с телепортацией
```yml
teleport-destinations:
- world, x, y, z
```
## Drunken messages [#drunken-messages]
Какие сообщения должны отправляться от имени игрока во время события drunk\_message.
```yml
messages:
- I love you , you're my best friend.
- I could do one more.
- Who is she?
- Watch this!
- I'm not drunk. You're drunk.
```
Может очень раздражать иметь в чате вот такой спам повторяющимися сообщениями, лучше держите это подальше от случайных пьяных событий.
## Кастомные события [#кастомные-события]
Вот как добавлять свои собственные события
```yml
custom-events:
memory_loss:
steps:
- named-event: pass_out
wait-condition: join
- named-event: teleport
consume:
alcohol: -30
toxins: -15
```
Система кастомных событий tbp крайне гибка и может использоваться для очень многих вещей. При помощи кастомных событий можно выполнять команды, проигрывать эффекты, и делать почти всё что угодно. Почти как отдельный язык программирования!
Наиболее простой вариант пользовательских событий - это просто линейный порядок выполнения нескольких шагов события:
```yml
- Сначала этот шаг
- Потом этот
- А этот позже всех
```
Разберём все возможные параметры для шагов.
### `named-event` [#named-event]
Запустить предопределённое событие (некоторые из них мы разбирали в начале этой страницы).
Возможные значения: `puke`, `pass_out`, `stumble`, `chicken`, `teleport`, `drunk_message`, `nausea`, `fever`, `hallucination`, `kaboom`. Список может пополняться.
### `wait-duration` [#wait-duration]
Подождать какое-то время перед переходом к следующему шагу, `10s 10t` - подождать 10 секунд и 10 тиков.
### `wait-condition` [#wait-condition]
Ждать выполнения определённого условия, прежде чем текущий шаг запустится. Вот как задаётся каждое условие:
```yml
steps:
- wait-condition: died
- wait-condition: joined-server
- wait-condition:
joined-world: my-world-name
- wait-condition: took-damage
```
### `if-condition` [#if-condition]
Продолжать лишь при соблюдении условия, в противном случае прервать выполнение события. Вот как задаётся if-условие:
```yml
steps:
- if-condition:
modifier-above:
modifier: alcohol
value: 70
- if-condition:
has-permission: my-permission
- if-condition:
joined-world: my-world-name
```
Вы также можете интвертировать условие, добавив `not`:
```yml
steps:
- if-condition:
not:
has-permission: my-permission
```
### `consume` [#consume]
Изменить указанные модификаторы. Пример:
```yml
steps:
- consume:
alcohol: 10
my_modifier: -20
```
### `event` [#event]
Задать другое событие с помощью параметра (может быть как кастомным так и предопределенным)
### `effect` [#effect]
Наложить эффект на игрока. Требуется указать эффект, усиление и длительность. Пример:
```yml
steps:
- effect: poison
amplifier: 1;2
duration: 20;100
```
Наложит на игрока отравление со случайным усилением 1-2 (**т.е. уровнем 2-3**) и длительностью 20-100
### `command` [#command]
Выполнить команду. Требуется указать саму команду. Исполнителя можно указать с помощью параметра `as`
```yml
steps:
- command: ping
as: player # Выполнить с разрешениями игрока
- command: pong
as: server # Выполнить с разрешениями консоли
```
### `location` [#location]
Установить позицию для телепортации игрока. Пример:
```yml
steps:
- location: worldname 1 2 3
```
Телепортирует игрока в мир `worldname` на координаты x=1, y=2, z=3
### `integration-event` [#integration-event]
Запустить событие из интеграции
```yml
steps:
- integration-event: gsit:sit
```
## Пример события [#пример-события]
Данный пример описывает событие с указанием шансов и разбросов. Благодаря этому, данное событие можно использовать в разделе [enabled-random-events](./events#random-drunken-events) в файле.
```yml
repeating_drunken_walk:
probability:
probability-expression: 4*probabilityWeight(alcohol)
allowed-ranges:
alcohol:
min: 60.0
max: 100.0
display-name: walk unsteadily
steps:
- named-event: drunken_walk
- wait-duration: 20s 1t
- if-condition:
modifier-above:
modifier: alcohol
value: 60.0
- event: repeating_drunken_walk
```
Получается следующее:
1. Запустить предустановленное событие drunken walk
2. Ждать 20 секунд и 1 тик
3. Перейти к следующему шагу, если количество опьянения выше 60, в противном случае отмена.
4. Вернуться к шагу 1, т.е. запустить это событие заново.
На выходе получаем бесконечную пьяную походку, пока ваш уровень опьянения выше 60.
# Группы ингредиентов (/ru/docs/tbp/for-server-owners/config/ingredient-groups)
Группы ингредиентов полезны в случае, если нужно разрешить использование нескольких взаимозаменяемых ингредиентов в рецепте. Они настраиваются в файле `ingredients.yml`. При помощи этой функции вы можете, например, разрешить закидывать в котёл любой вид зерна для приготовления виски. Возможно сделать так, чтобы ингредиенты влияли на качество.
```yml
- key: meat
display-name: Meat
materials:
- +pork # уменьшит итоговое качество напитка
- ++chicken # чуть-чуть уменьшит итоговое качество напитка
- +++beef # чуть-чуть улучшит итоговое качество напитка
- key: horse_food
display-name: Horse Food
materials:
- "#minecraft:horse_food" # тэги тоже допускаются
```
Использовать одну группу ингредиентов в качестве допустимого ингредиента внутри другой группы не получится.
## Использование в конфигурации рецепта [#использование-в-конфигурации-рецепта]
Для указания группы ингредиентов в ингредиентах напитка нужно вписать в `ingredients:` её `key`, добавив перед ним префикс `#brewery:`. Например, приведённые выше группы правильно было бы указать вот так: `#brewery:meat`, `#brewery:horse_food`
If you defined a key with its own namespace, something will fail
# Модификаторы (/ru/docs/tbp/for-server-owners/config/modifiers)
Файл `modifiers.yml` содержит в себе информацию о модификаторах. Модификаторы - это "статусы", которые могут присутствовать у игрока. Самый простой пример - alcohol и toxins. Модификаторы могут зависеть от других модификаторов или, например, изменяться при употреблении чего-либо. Обычно у них присутствует время их спада.
### Drunken modifiers [#drunken-modifiers]
Вот краткое описание каждого параметра модификатора
#### `name` [#name]
Уникальное имя, дающееся модификатору, чтобы определять его среди остальных. Во избежание конфликтов убедитесь, что оно не содержит ничего кроме `a-z`, `0-9` и `_`, а также не идентично каким-либо другим значениям конфигурации из других файлов.
#### `min-value, max-value` [#min-value-max-value]
Пределы, в рамках которых может быть значение модификатора. Например, от 0 до 100
#### `decrement-time` [#decrement-time]
Время спада модификатора. Например, 400 означало бы, что значение модификатора пассивно уменьшается на 1 каждые 400 тиков (20 секунд). Больше - модификатор спадает медленнее. Меньше - быстрее. Кстати, допустимо также что-то подобное:
```yml
decrement-time: "0.2 * sin(my_other_modifier)"
```
См. [exp4j library](https://www.objecthunter.net/exp4j/#Built-in_functions) для большей информации о том, что еще доступно.
#### `increment-dependency` [#increment-dependency]
Позволяет указать, как этот модификатор изменяется при изменении другого модификатора у игрока. Например:
```yml
increment-dependency: consumed_other_modifier * (110 - different_modifier) / 110
```
Модификатор с префиксом `consumed_`, будет указанным в событии изменением модификатора. См. [exp4j library](https://www.objecthunter.net/exp4j/#Built-in_functions) для большей информации о том, что еще доступно.
#### `display-name` [#display-name]
Определяет имя модификатора, которое будет отображаться в командах.
### Drunken displays [#drunken-displays]
Drunken display отображается игроку, когда модификатор изменяется. Если drunken display для данного модификатора не указан, то отображаться не будет. Параметры:
#### `message` [#message]
Выводит сообщение, показывающееся при изменении модификатора. Включает в себя 3 кастомных тега, черепушки, палочки и звёзды, которые вы можете использовать для отображения значения.
#### `filter` [#filter]
Позволяет задать выражение для определения случаев, когда показывать сообщение. Display покажется лишь в случае, если значение выражения равняется больше, чем 0. См. [exp4j library](https://www.objecthunter.net/exp4j/#Built-in_functions) для большей информации о том, что еще доступно.
#### `display-value` [#display-value]
Значение, которое будет отображаться пользователю. Должно быть нормализованным между 0 и 100 для 3 тегов, показывающих значение. См. [exp4j library](https://www.objecthunter.net/exp4j/#Built-in_functions) для большей информации о том, что еще доступно.
#### `display-window` [#display-window]
Позволяет указать, где именно отображать сообщение. Возможны chat, action\_bar, title
### Drunken tooltips [#drunken-tooltips]
Позволяет указать, как отображать этот модификатор в описаниях напитков
#### `filter` [#filter-1]
Позволяет задать выражение для определения случаев, когда показывать модификатор в описаниях напитков. Будет отображаться лишь в случае, если значение выражения равняется больше, чем 0. См. [exp4j library](https://www.objecthunter.net/exp4j/#Built-in_functions) для большей информации о том, что еще доступно.
#### `brewing-tooltip` [#brewing-tooltip]
Позволяет указать, что отображать в описании напитка в случае, если он еще не готов полностью, например, еще лежит в бочке или перегонном кубе. У каждого модификатора есть кастомный тег для этого.
#### `default-tooltip` [#default-tooltip]
Позволяет указать, что именно отображать в описании готового напитка. У каждого модификатора есть кастомный тег для этого.
#### `sealed-tooltip` [#sealed-tooltip]
Позволяет указать, что именно отображать в описании запечатанного напитка. У каждого модификатора есть кастомный тег для этого.
### Consumables [#consumables]
Позволяет указать предметы не из TheBrewingProject, которые будут изменять этот модификатор у игрока. Хлеб, например.
*Я не понял многое из того, что переводил. Методом проб и ошибок, друзья. Ну или спрашивайте на дискорд сервере, если хорошо говорите на английском.*
# Эффекты (/ru/docs/tbp/for-server-owners/recipe-how-to/effects)
## Вступление [#вступление]
В TBP вы можете добавить эффекты зелий напиткам, они будут накладываться при выпивании бутылки.\
Чтобы дать вашему напитку эффекты, их нужно добавить в секцию `effects:` вашего рецепта (который, в свою очередь, находится в `recipes.yml`)
## Настройка эффектов [#настройка-эффектов]
Каждый эффект описывается с помощью указания его типа, длительности, усиления (не уровня!). Их также можно сделать зависимыми от уровня качества готового напитка.
### Формат [#формат]
Формат добавления рецептов следующий:
```yaml
effects:
- //
```
* `EFFECT_TYPE`: Тип(id) эффекта (e.g., `SPEED`, `POISON`, `REGENERATION`). Полный список можно найти в [PaperMC's Javadocs](https://jd.papermc.io/paper/1.21.10/org/bukkit/potion/PotionEffectType.html).
* `AMPLIFIER`: Усиление эффекта (не уровень, а то, на сколько уровней его усилить. То есть 0 = эффект I-го уровня, 1 = эффект II-го уровня, и т.д.)
* `DURATION`: Длительность в секундах
#### Разброс [#разброс]
Можно также указать разбросы при помощи тире, чтобы добавить элемент случайности:
```yaml
effects:
- /-/-
```
Будет применено случайное значение между указанными минимумом и максимумом каждый раз при наложении эффекта.
Если вы переходите с BreweryX, то скорее всего вы в курсе, что там это работает по-другому: значение из разброса выбирается не случайно, а в зависимости от качества.
В TBP такого больше нет, по крайней мере, в прежнем виде. Вместо этого вы можете сделать зависимый от качества эффект при помощи знакомого некоторым формата с плюсиками.
#### Эффекты, зависящие от качества [#эффекты-зависящие-от-качества]
Вы можете сделать так, чтобы эффект накладывался лишь при определённом уровне качества напитка, используя `+++`, `++` и `+`\
Более подробно о "плюсиках" можно прочитать здесь.
```yaml
effects:
- +++// # только у отличных
- ++// # только у хороших
- +// # только у плохих
- // # при любом качестве
```
## Примеры [#примеры]
### Простенький пример [#простенький-пример]
Напиток, дающий Скорость II на 45 сек и Прыгучесть I на 30-60 (случайно) секунд:
```yaml
effects:
- SPEED/1/45-90
- JUMP_BOOST/0/30-60
```
### Более сложный пример [#более-сложный-пример]
* Сильное отравление при плохом качестве, слабое отравление при хорошем качестве, нет отравления при отличном качестве.
* Скорость, увеличивающаяся в силе и длительности по мере улучшения качества
* Регенерация и поглощение, только при отличном качестве.
* Тошнота при любом качестве
```yaml
effects:
# poison
- +POISON/2/30-60 # Bad only: Poison III for 30-60 seconds
- ++POISON/1/20-40 # Good only: Poison II for 20-40 seconds
# speed
- +++SPEED/2/60-120 # Excellent only: Speed III for 60-120 seconds
- ++SPEED/1/45-90 # Good only: Speed II for 45-90 seconds
- +SPEED/0/30-60 # Bad only: Speed I for 30-60 seconds
# regeneration and absorption
- +++REGENERATION/1/15-30 # Excellent only: Regeneration II for 15-30 seconds
- +++ABSORPTION/1/60 # Excellent only: Absorption II for 60 seconds
# nausea
- NAUSEA/0/20-40 # All qualities: Nausea I for 20-40 seconds
```
# События и сообщения (/ru/docs/tbp/for-server-owners/recipe-how-to/events-and-messages)
## События [#события]
Вы можете назначать напиткам события, выполняемые при выпивании:
```yml
my_brew:
...
events:
- +stumble
- ++gsit:sit
- +++my_custom_event
- tunnel_vision
```
Смотрите{" "}
Quality Factored List
{" "}
для большей информации
## Отправка сообщений [#отправка-сообщений]
Вы можете настроить показ сообщений игроку при выпивании напитка. Они используют специальное форматирование [MiniMessage](https://docs.advntr.dev/minimessage/format), так что привычные "&" цветовые коды работать не будут! Смотрите ссылку.
```yml
my_brew:
...
messages.action-bar: Это сообщение будет показано в акшн-баре (над полоской опыта)
messages.title: Это сообщение будет показано на экране
messages.message: А это будет показано в чате.
```
Смотрите{" "}
Quality Factored Value
{" "}
для большей информации. Если вы хотите сделать несколько линий текста, то используйте MiniMessage-тег `br` или `newline`{" "}
# Настройка итогового предмета (/ru/docs/tbp/for-server-owners/recipe-how-to/result-item)
По умолчанию, итоговый предмет всегда `minecraft:potion`.
## Цвет зелья \* [#цвет-зелья-]
Вот как можно указать желаемый цвет зелья:
```yml
my_recipe:
...
potion-attributes.color: "#FFFFFF" # Белый
```
Смотрите{" "}
Quality Factored Value
{" "}
для большей информации.
## Название \* [#название-]
Вот как можно указать название напитку:
```yml
my_recipe:
...
potion-attributes.name: Плохое пиво/Хорошее пиво/Жидкое золото
```
Смотрите{" "}
Quality Factored Value
{" "}
для большей информации.
## Описание (лор) [#описание-лор]
Вот как можно задать напитку описание:
```yml
my_recipe:
...
potion-attributes.lore:
- И всё-таки это
- +полное дерьмо
- ++хороший пивас
- +++шедевр
```
Смотрите{" "}
Quality Factored List
{" "}
для большей информации.
## Кастомные текстуры [#кастомные-текстуры]
Вы можете указать custom model data или item model вот так:
```yml
my_recipe:
...
potion-attributes.custom-model-data: 1/2/3
potion-attributes.item-model: dirt/sand/gravel
```
Смотрите{" "}
Quality Factored Value
{" "}
для большей информации.
## Кастомный предмет-результат [#кастомный-предмет-результат]
Если вы хотите, чтобы итоговый предмет был не зельем, а чем-то другим, это можно изменить:
```yml
my_recipe:
...
potion-attributes.custom-id: splash_potion/splash_potion/lingering_potion
```
Напитки из этого примера можно швырять в других игроков!
Смотрите{" "}
Quality Factored Value
{" "}
для большей информации.
# Шаги приготовления (/ru/docs/tbp/for-server-owners/recipe-how-to/steps)
## Вступление [#вступление]
Указывая шаги при настройке рецепта, вы указываете их для идеального напитка. Реальный процесс приготовления необязательно должен 100%-но соответствовать всем указанным шагам, но качество пострадает.
На данный момент в TheBrewingProject существует 4 возможных вида шагов:
| Вид шага | ID |
| ---------------- | --------- |
| Варка | `cook` |
| Смешивание | `mix` |
| Дистилляция | `distill` |
| Выдержка (бочка) | `age` |
Рецепт приготовления напитка всегда должен начинаться с варки или/и смешивания!
## Формат шагов [#формат-шагов]
Каждый вид шагов использует собственный формат.
### Готовка [#готовка]
Пример готовки:
```yml
- type: cook
cook-time: 2min
cauldron-type: water
ingredients:
- apple/10
- my_plugin_name:sugar/64
```
Смотрите
Ingredients Basics
для большей информации об ингредиентах
### Смешивание [#смешивание]
Пример смешивания:
```yml
- type: mix
mix-time: 2min
cauldron-type: water # Not read at the moment
ingredients:
- brewery:gin/3
- sugar/2
```
Смотрите
Ingredients Basics
для большей информации об ингредиентах
### Дистилляция [#дистилляция]
Пример дистилляции:
```yml
- type: distill
runs: 3
```
Runs означает количество раз, которое требуется продистиллировать напиток для получения идеала.
### Выдержка [#выдержка]
Пример выдержки:
```yml
- type: age
age-years: 13
barrel-type: any
```
Больше информации о видах бочек можно найти{" "}
здесь
# Главное (/ru/docs/tbp/for-server-owners/reference/basics)
## Система качества [#система-качества]
TheBrewingProject добавляет систему качества напитков. Они могут быть **плохими**, **хорошими** или **отличными**.\
Это делает процесс приготовления напитков более привлекательным и награждающим.
**Качествозависимые параметры** - это параметры настройки рецептов/напитков, позволяющие указывать те или иные значения, применяемые в зависимости от качества приготовленного напитка.
### Quality Factored Value [#quality-factored-value]
Качествозависимое **значение** позволяет одному значению, например названию напитка или алкогольности, быть разным в зависимости от качества.
Для указания такого значения нужно задать **три** варианта, разделённых `/` слэшами: `Плохо/Хорошо/Отлично`.
#### Пример [#пример]
```yaml
name: Вонючее пиво/Пиво/Золотой лагер
```
| Quality | Resulting Name |
| ------- | ------------------------------------------------------------------------- |
| Отлично | |
| Хорошо | |
| Плохо | |
### Quality Factored List [#quality-factored-list]
Качествозависимый **список** позволяет вам использовать список из нескольких значений, зависящих от качества.
Для создания такого списка нужно использовать плюсы перед значениями.
| Префикс | Применяется к качеству | Описание |
| ------- | ---------------------- | ---------------------------------------------------------- |
| `+++` | Только отличное | Применяется *только* если качество напитка - отлично. |
| `++` | Только хорошее | Применяется *только* если качество напитка - хорошо. |
| `+` | Только плохое | Применяется *только* если качество напитка - плохо. |
| (нет) | Любое качество | Применяется независимо от качества напитка (по умолчанию). |
#### Пример [#пример-1]
```yaml
lore:
- +++Редкое, премиальное пиво, идеальное для ценителей.
- +++Хорошо сбалансированный напиток, любимый многими.
- ++Приличный напиток, прекрасно подходящий для отдыха после тяжкого дня.
- +Мутная и вязкая смесь.
- Это сообщение показывается всегда, вне зависимости от качества.
```
## Ингредиенты [#ингредиенты]
Ингредиенты - фундамент вашего рецепта. Ингредиентом может выступать ванильный предмет игры, предмет из поддерживаемого плагина или же другой приготовленный в TBP напиток.
Ингредиенты указываются списком в разделе `ingredients:` внутри шага приготовления. Формат указания ингредиента зависит от того, из какой вышеупомянутой категории предмет:
| Формат | Описание |
| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/<количество>` | Обычный предмет из игры |
| `:/<количество>` | Предмет из другого плагина. Смотри страницу Интеграций |
| `brewery:/<количество>` | Другой напиток из TheBrewingProject. |
| `#brewery:/количество` | Группа ингредиентов. Смотри эту страницу. |
Пример:
```yaml
ingredients:
- emerald/5 # 5 изумрудов.
- nexo:infused_golden_apple/2 # 2 Infused Golden Apple из плагина Nexo.
- brewery:beer/1 # 1 Пиво из TheBrewingProject.
- "#brewery:grass/1" # Один предмет из группы ингредиентов grass
```
Учтите, что каждую группу ингредиентов нужно указывать в `"кавычках"`, иначе yaml сочтёт это за комментарий из-за наличия символа решётки.
## MiniMessage-форматирование [#minimessage-форматирование]
Любое сообщение или текст в конфигурации форматируется при помощи MiniMessage.\
**Legacy-форматирование (\&a, §l и т.д.) не поддерживается.**
| Сообщение | Превью |
| ------------------------------------------- | ------------------------------------------------------------------------ |
| `Test<#2080ff>123` | |
| `Gradient Text` | |
Полный гайд по синтаксису и функциям MiniMessage можно посмотреть в [официальной документации](https://docs.advntr.dev/minimessage/format).
# Разрешения (/ru/docs/tbp/for-server-owners/reference/permissions)
TODO
# Плейсхолдеры (/ru/docs/tbp/for-server-owners/reference/placeholders)
TheBrewingProject поддерживает как [PlaceholderAPI](https://github.com/PlaceholderAPI/PlaceholderAPI), так и [MiniPlaceholders](https://modrinth.com/plugin/miniplaceholders) отображения информации.
Обратите внимание, что некоторые плагины не поддерживают PAPI или MiniPlaceholders.\
Чтобы проверить наверняка, работает ли плейсхолдер, используйте следующую команду:
```yaml
# Для PlaceholderAPI
/placeholderapi parse PLAYER PLACEHOLDER
# Для MiniPlaceholders
/miniplaceholders parse PLAYER PLACEHOLDER
```
## Плейсхолдеры игрока [#плейсхолдеры-игрока]
| PlaceholderAPI | MiniPlaceholders | Описание |
| ------------------ | ------------------ | ------------------------------------------------------------------------------------- |
| `%tbp_[modifier]%` | `` | Выводит текущее значение модификатора у конкретного игрока, например `%tbp_alcohol%`. |
| `%tbp_next_event%` | `` | Название следующего события, которое произойдет у пьяного игрока. |
# Бочка (/ru/docs/tbp/gameplay/creating-brews/aging)
Настаивание - процесс неторопливый. Обычное пиво требует порядка часа ожидания (около 3 игровых дней) для идеальной выдержки. Для настаивания напитков нам понадобится построить бочку.
Тип дерева, из которого построена бочка, имеет значение. Некоторым напиткам без разницы, в какой бочке лежать, а некоторые требует, например, именно дубовую бочку.
## Создание бочки [#создание-бочки]
Бочка создается путем постановки необходимых блоков в правильном положении, а затем, в последнюю очередь, табличку.\
Если вы всё сделали правильно, то в чате появится подтверждение. После этого табличку можно убрать, если хочется.
***
За исключением возможных кастомных бочек на вашем сервере, существует два основных вида бочек:
### Малая бочка [#малая-бочка]
### Большая бочка [#большая-бочка]
Если ни одна из этих бочек не работает, вам следует обратиться к администрации вашего серверва. Возможно, сервер использует свои кастомные бочки, а изначальные отключены.
## Виды бочек [#виды-бочек]
| Тип бочки | Ступени | Доски | Заборы |
| -------------- | -------------- | ------------------ | -------------------------------------------------------------------- |
| Дубовая | Дубовые | Дубовые | Дубовый |
| Еловая | Еловые | Еловые | Еловый |
| Березовая | Берёзовые | Берёзовые | Берёзовый |
| Тропическая | Тропические | Тропические | Тропический |
| Акациевая | Акациевые | Акациевые | Акациевый |
| Тёмно-дубовая | Тёмно-дубовые | Тёмно-дубовые | Тёмно-дубовый |
| Багровая | Багровые | Багровые | Багровый |
| Искажённая | Искажённые | Искажённые | Искажённый |
| Вишнёвая | Вишнёвые | Вишнёвые | Вишнёвый |
| Бледно-дубовая | Бледно-дубовые | Бледно-дубовые | Бледно-дубовый |
| Медная | Резные медные | Резной медный блок | Любой деревянный |
# Дистиллирование (/ru/docs/tbp/gameplay/creating-brews/distilling)
Многие рецепты могут потребовать дистилляцию.
В отличие от BreweryX, в TBP используется кастомная структура для дистилляции, вместо обычной варочной стойки.
### Перегонный куб [#перегонный-куб]
Для постройки перегонного куба вам понадобятся три узорчатые вазы и три бамбуковых забора.
Поставьте их как на видео:
Не забудьте присесть, когда ставите блоки об узорчатые вазы, иначе вы просто закинете их внутрь.
Если вы всё сделали правильно, в чате появится сообщение.
### Дистилляция [#дистилляция]
Сторона с двумя вазами - входная, а с одной - выходная:
После постройки перегонки можно начинать дистилляцию. нажмите ПКМ по любой из входных ваз, чтобы открыть их инвентарь, и положите внутрь напитки, которые собираетесь дистиллировать.
Затем нажмите ПКМ по выходной вазе, чтобы открыть её. По мере дистилляции напитки будут перекладываться в её инвентарь.\
Принцип работы наглядно показан в видео:
Число необходимых дистилляций разнится от рецепта к рецепту.
# Вступление (/ru/docs/tbp/gameplay/creating-brews/introduction)
В The Brewing Project напитки создаются путем обработки сырья в разных структурах.
Чтобы успешно создать напиток, необходимо максимально точно следовать правильным шагам рецепта. Чаще всего на серверах имеются свои собственные рецепты помимо/вместо предустановленных.
Первоначальный шаг всегда представляет из себя варку/смешивание ингредиентов в котле, следующая страница как раз об этом.
# Варка и смешивание (/ru/docs/tbp/gameplay/creating-brews/mixing-and-cooking)
## Подготавливаем котёл [#подготавливаем-котёл]
Первый шаг зависит от того, будете вы варить ингредиенты или же смешивать их.
Для варки вам понадобится иметь под котлом источник тепла (костёр, магма блок или, например, огонь). Для смешивания источник тепла не нужен.
Когда закончили с этим, просто добавьте в котёл подходящее наполнение (вода/рыхлый снег/лава), и добавляйте ингредиенты нажатием ПКМ по котлу.
## Добавляем ингредиенты [#добавляем-ингредиенты]
Как только ингредиенты попали в котёл, начинается варка/смешивание. Также над котлом появятся частицы. *(Подсказка: если частицы меняют цвет, то это не просто так)*
Вы можете узнать, сколько времени котел уже работает, нажав ПКМ по нему с часами в руке.
## Забираем результат [#забираем-результат]
Когда котел проработает нужное вам время, нажмите ПКМ по котлу с пустыми бутылками в руке, чтобы собрать его содержимое.
# Запечатывание (/ru/docs/tbp/gameplay/creating-brews/sealing)
Запечатывание позволяет удалить подробности приготовления напитка из его описания, не давая другим игрокам с лёгкостью повторить ваш рецепт. Полезно, если вы планируете установить торговую монополию на рынке напитков и травить своих конкурентов отваром из ландыша.\
~~Славные были времена...~~
Напитки также можно **брендировать**, что представляет из себя добавление собственного текста к описанию.
## Запечатывание [#запечатывание]
Процесс крайне прост:
* Возьмите в основную руку напиток, который будете запечатывать.
* В левую руку возьмите бумагу.
* Нажмите SHIFT+ПКМ по верстаку с этими предметами.
Бумага израсходуется, а напиток будет запечатан.
### Брендирование [#брендирование]
Для брендирования нужно сделать всё то же самое, но бумагу перед этим нужно переименовать, написав вместо названия текст, который вы хотите добавить.
# GSit (/ru/docs/tbp/for-server-owners/reference/integrations/gsit)
## События [#события]
| Event Key | Описание |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `gsit:sit` | Заставляет сесть. |
| `gsit:crawl` | Заставляет ползти. |
| `gsit:` | Заставляет принять определённую позу. [Список поз](https://github.com/gecolay/GSit/blob/main/core/src/main/java/dev/geco/gsit/model/PoseType.java). |
# Интеграции (/ru/docs/tbp/for-server-owners/reference/integrations)
## Интеграции предметов [#интеграции-предметов]
TheBrewingProject может использовать предметы из этих плагинов в качестве ингредиентов:
| Plugin | Namespace |
| -------------------------------------------------------------------- | ------------- |
| [CraftEngine](https://mo-mi.gitbook.io/xiaomomi-plugins/craftengine) | `craftengine` |
| [ItemsAdder](https://itemsadder.devs.beer/) | `itemsadder` |
| [MMOItems](https://www.spigotmc.org/resources/mmoitems.39267/) | `mmoitems` |
| [Mythic](https://mythiccraft.io/) | `mythic` |
| [Nexo](https://polymart.org/product/6901/nexo) | `nexo` |
| [Oraxen](https://oraxen.com/) | `oraxen` |
## Интеграции структур [#интеграции-структур]
Приваты следующих плагинов распространяются на структуры TBP:
* [Bolt](https://modrinth.com/plugin/bolt)
* [GriefDefender](https://www.griefdefender.com/)
* [GriefPrevention](https://griefprevention.com/)
* [HuskClaims](https://william278.net/project/huskclaims)
* [Lands](https://www.spigotmc.org/resources/lands-%E2%AD%95-land-claim-plugin-%E2%9C%85-grief-prevention-protection-gui-management-nations-wars-1-21-support.53313/)
* [Towny](https://townyadvanced.github.io/)
* [WorldGuard](https://worldguard.enginehub.org/en/latest/)
## Торговые интеграции [#торговые-интеграции]
Предметы TBP слишком уникальны, что приводит к проблемам с плагинами на честшопы. Следующие плагины точно поддерживаются в TBP:
* [QuickShop-Hikari](https://modrinth.com/plugin/quickshop-hikari)
## Интеграции событий [#интеграции-событий]
Эти плагины поддерживаются в событиях TBP:
* [GSit](https://hangar.papermc.io/Gecolay/GSit) - [страница](integrations/gsit)
## Плейсхолдерные интеграции [#плейсхолдерные-интеграции]
TBP поддерживает основные плейсхолдерные плагины:
* [MiniPlaceholders](https://modrinth.com/plugin/miniplaceholders)
* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/)