Nov 11, 2021

  • Introduction(top)

    Exhaustion is a plugin created by libraryaddict and Darkitect.

    However the plugin was so interesting, they both decided it needed to be released.

    With the assistance of this wiki, it won't be long before you're the terror of the seven configseas.


    There's only one permission outside of commands, this permission makes you exempt from exhaustion events.

    Players not in survival or adventure mode are also exempt, but you can still bypass this with /exhaustion zzz

    Code (Text):
    Permission: exhaustion.exempt


    There is one command in the plugin, and it's /exhaustion. However, it has several subcommands you can use.


    Code (Text):
    Permission: exhaustion.zzz
    To test an event, use /exhaustion zzz to make the plugin trigger an event on you. It will choose from what is valid.

    You can also provide the name of the event which will play if possible.

    Code (Text):
    /exhaustion zzz PlayerDigging

    zzz player(top)

    Code (Text):
    Permission: exhaustion.zzz_player
    This works like above, except you can run this from console and trigger it on another player.

    You can also provide the event name to trigger it specifically.

    Code (Text):
    /exhaustion zzz libraryaddict PlayerDigging


    Code (Text):
    Permission: exhaustion.reload
    This will reload the config


    Code (Text):
    Permission: exhaustion.toggle
    Turn exhaustion off and on


    Code (Text):
    Permission: exhaustion.valid

    Check what events are valid for the command user, and what their chances of triggering are.


    Code (Text):
    Permission: exhaustion.status
    Code (Text):
    Permission: exhaustion.status_player

    Check the exhaustion status of the command user, or a target player if they have both permissions.

    Base Config(top)

    This is basic configuration that can be left alone, but of course you can customize it yourself.
    There's more information in the file itself, this isn't required reading.

    Code (Text):
    DaysAwake: 3
    This is a number of days the player must be awake and out of bed before they will start being targeted.

    Code (Text):
    TimeAwakeMultiplier: 3.0
    Every day from the moment they were considered a valid target, this will increase the amount of times they begin to hallucinate.
    At day one, they may have 10% chance. But day two, its 30%. Day three? 60%

    Code (Text):
    TimeAwakeMaxMultiplier: 12.0
    There needs to be a maximum to the above multiplier, because 1000% is just not reasonable. Here it's maxed to 12. Which means that after 4 days, they no longer get increased chances.

    Code (Text):
    RandomChance: 0.01
    The chance of a event being chosen every second, so 0.01 chance is 1% chance.

    Code (Text):
    EventMinInterval: 300
    Minimum amount of time between events in seconds

    Code (Text):
    EventMaxInterval: 600
    Maximum amount of time between events in seconds

    Code (Text):
    SoundMinRange: 2
    The closest it can pick a block nearby the player to play sounds

    Code (Text):
    SoundMaxRange: 12
    The furthest it can pick a block nearby the player to play sounds. Too far away and they hear nothing.

    Code (Text):
    IncreaseVolume: 1.5
    Sometimes the player might move away from the block, or the sound itself doesn't carry that far. This boosts the volume of all sound effects by 1.5 times. So volume has been turned up from 10 to 15.


    The Criterias are used to select players that are matching certain triggers.
    For example, we might want to pick someone who is very low on health and deep underground.
    Or we want to pick someone who is locked inside their house and refuses to look at the sun.

    If you don't set these criterias, then they are ignored.

    Examples can be found in the 'criterias' folder.

    Code (Text):
    MinY: 10
    The player must be at Y 10 or above

    Code (Text):
    MaxY: 40
    The player must be at Y 40 or below

    Code (Text):
    MinLight: 7
    The player must not be in absolute darkness

    Code (Text):
    MaxLight: 13
    The player must not be standing in a bright place

    Code (Text):
    SeeSky: false
    The player must not be able to see the sun by looking up.
    If you set this to true, they must be able to see the sun.

    Code (Text):
    NoPlayersRadius: 16
    The player must not have any other players in this radius

    Code (Text):
    FoundPlayersRadius: 32
    There must be another player in this radius

    Code (Text):
    MinHealth: 0.25
    This is a scale of 0.0 to 1.0.
    0.5 means half of their health. 0.75 means three quarters.

    So 1 means 20 hearts and 0.5 means 10 hearts if their max health is 20.

    They must have this amount of health or more.

    Code (Text):
    MaxHealth: 0.6
    They must have this amount of health or less.

    Code (Text):
    MinDays: 1.0
    They must have stayed up this number of days beyond the initial trigger

    Code (Text):
    MaxDays: 3.0
    They must not have stayed up more than this amount of days.


    This affects what blocks are picked to play sounds from, and what blocks the player must be near.

    To reverse the check, so for example instead of choosing Dirt. You want it to pick everything but Dirt. Then prefix your file name with 'Not'

    So 'Air.yml' turns into 'NotAir.yml'

    The file contents remain the same.

    The file works like a normal YAML file, except you're just putting a dash - on each line. Then a material name.

    Material names found [here]

    Examples can be found in your installation inside the 'blocks' folder.

    These are not required to be set, and can be ignored. It allows you to filter what type of events play where.


    This is the real juice of the matter.

    With these events, you can play sounds, potion effects and messages to the affected player. Other players will not hear the sounds, or see the messages.

    Examples can be found in the events folder in your installation.

    Code (Text):
    Chance: 1
    Each event has a chance to be played, with this setting you can place a higher priority on one event, or make another event very rare.

    If each event has 1 chance, and you have 3 events. That means there is 1/3 chance for this event to be played.

    But if this event is 0.1 chance, and the others are 1 chance. This event has only 0.1/2.1 chance to be played.


    This is a config section that can change how this event is played.
    Without it, the event will be played in order. Every effect is played.
    But with it, you can randomize which sounds are played.

    Code (Text):
    Chance: 0.5
    The chance for each effect to be played

    Code (Text):
    Amount: 10
    The max amount of effects that can be played, the minimum amount is a third of this.
    So 3 effects up to a max of 10 will play.

    Code (Text):
    MinDelay: 1
    The minimum amount of time it will wait before playing the next effect

    Code (Text):
    MaxDelay: 30
    The maximum amount of time it will wait before playing the next effect


    This is yet another configuration section that can be ignored, or utilized.
    Here you can determine what blocks must be nearby, and where the sounds will play.
    If you require Stone to be nearby, the sounds will play from the Stone block that was found.

    This is a list, so you can use
    Code (Text):
        - Stone
        - Diamond
    The blocks entries must have been created in the blocks folder. Read up for more information on Blocks.


    This is another list, here you add the names of the Criterias you've created and only the players matching this criteria can receive the event.


    Ah and finally we get to the real matter, the actual effects themselves.

    But that's covered in the next section.


    There are currently three effects you can play.


    But before we cover the effects themselves, we'll first introduce the basics.
    The effects are added to the 'Effects' part of the config as a list, if this is confusing you can look at existing files for a hint.

    There are different effects but they do share a few similarities.

    Each effect

    First you are adding the effect itself, in the case of Sound we want to play "minecraft:block.grass.break".

    Then after that we add the modifiers, there are special modifiers for each event. But two of them are shared.

    The first is the tick delay, how long after the last effect should this one be played?

    Tick Delay(top)

    Use a number, then add a t. So '30t' = 30 ticks.

    "minecraft:block.grass.break 40t" - Great! Now this will play 40 ticks after the last effect!

    If not defined, it will default to 20 ticks. A second.

    Effect Amount(top)

    Sometimes you want an effect to be played four thousand times in a row, but you don't feel like copy pasting it.

    So like above, we're doing a number. 30. Then add an 'a'. So '4000a' = Play this effect 4000 times.

    This is the equiv to just copy/pasting the exact same line 4000 times.

    Those are the two globally shared options.
    Now we are going to cover sounds.


    Sounds are recognized (but not validated!) if they have a prefix, and a :
    Unless you're using a resource pack or modpack or similar, you will be using "minecraft:"
    This is the vanilla sounds.

    You can find all the sounds ingame with the /playsound command, or at this link: https://minecraft.gamepedia.com/Sounds.json#Java_Edition_values

    I like to test it ingame as it means I can find exactly what sound I'm looking for, and the correct pitch to use it on.

    Each sound can be modified twice. The first for pitch, the second for volume.

    Sound Pitch(top)

    As above, we're first deciding what we want the pitch to be.
    Minecraft allows you to define a pitch from 0 to 2. 1 is the normal pitch, and if you pick 0 the sound will become deeper and slower.
    But if you pitch 2, the sound will become high pitched and faster.

    Lets choose 1.2 to make a higher pitched version of our grass breaking.
    Now, add a 'p' to it so it represents pitch.
    "1.2p" = A pitch of 1.2!

    Sound Volume(top)

    You're getting the hang of this!
    At 0, no one is going to hear it.
    But at 15... Well, it doesn't actually blast your eardrums. It just means it will play at full volume even if they moved further away.

    A volume of 1 is normal, you can use it like so: 1v

    So now we have
    "minecraft:block.grass.break 1.2p 1v"

    But wait, you do realize that 1v is the normal volume? You could delete that and it'd make no difference.

    Yeah ok, lets do that. And lets play it 40 ticks after the other effect.

    "minecraft:block.grass.break 1.2p 40t"


    Do note that you may need to quote some of these strings as YAML can be a finicky langauge.

    So. What about...


    Ah! Time to poison my players.

    These accept potion names found here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/potion/PotionEffectType.html

    So if I want to use confusion, I'm doing "CONFUSION"

    Potion Level(top)

    This is defined by e. Why not l you ask? Or p? That's because L can be misread in some fonts, and p is used by the next effect!

    So "4e" means a potion effect that's level 4. By default, it will be level 1.

    Potion Effect Duration(top)

    This is defined by p. 30p means it will last for 30 ticks.

    By default it will last 60 ticks, or 3 seconds.

    As such, it's recommended you increase the potion effect duration when you add it to your effects.

    So a potion that's level 10, lasts for 10 seconds and is confusion..

    "CONFUSION 10e 200p"

    Ha! Brilliant!

    Hmm, wasn't there something else?



    Oh wait, this might be the most boring one of them all.

    There are no options that can be applied on this, and the color codes work as expected with the & operator.

    There is one note though, you can use "%days%" and it will replace that with the number of days (rounded down) the player has been awake for.

    "&cYou've been awake for %days% days... At 30 days awake, the ancient one shall awake..."

    Ohh, creepy.

    #Combining them

    Ok. Lets add that confusion, maybe some sounds and that creepy message!

    - "&cYou've been awake for %days% days... At 30 days awake, the ancient one shall awake..."
    - "CONFUSION 10e 200p 0t" # 0t means we play it immediately after that message! Not 20 ticks after!
    - "minecraft:entity.zombie.ambient 0p 10v 0t" # Lets make this zombie groan really slow and deep, and plays at the same time!

    Oh wow, I'm quaking in my socks. Maybe I should sleep.
    Na. Diamonds!


    But maybe you want to repeat the same effects in multiple events, or you want to randomly pick between a sound, and the script?
    Scripts follow the same steps as the 'Effects' section, but it's just a list of effects to play.

    You can see examples in your installation.

    To refer to a script and play it, just call the script name in your effects.

    - "&cYou are going to die! Ohhhhhhhh so creepy!"
    - $ActuallyMakeThemDie

    Then your script called "ActuallyMakeThemDie.yml" has

    - "WITHER 10e 100000p 100t" # Lets give them 5 seconds of panic!

    But wait. That's only one line. That's a waste!
    Yep. You don't need to use scripts, but you might come up with something cool!
  • Loading...
  • Loading...