Death Effects
Custom death effects on player-death, 99% customizable, down to every single detail, be it the offset of a particle or the pitch of a sound.Each player can buy and choose the death effects that they like most by using experience that they gain by playing on the server.
This plugin depends on my Core library! They must BOTH be installed for the plugin to work.
Player Data Storage
This plugin supports storing player data in multiple ways: MySQL database, SQLite database, MongoDB (beta, needs core 1.3.0) and, finally, per-player YAML files.
The plugin also blocks particles and entities from being sent to players whilst they're dead, preventing a known bug that would make the game lag or possibly even freeze.
Experience
Rewarding players for their playtime
Players gain experience by playing in the server, each world can be configured to give players a specific amount of experience every x amount of seconds (only configured and enabled worlds will give a player experience).
YAML:
# Example configuration:
# WorldName: (The world's name, this is also the "{map_id}"
# map_name: "&eExample" (optional, this is also the "{map_name}")
# xp_grants: true
# xp_gain: 10
# xp_time: 60 (time in seconds)
world:
map_name: "&dFFA"
xp_grants: true
xp_gain: 10
xp_time: 10
world_nether:
map_name: "&c&oThe Nether..."
xp_grants: true
xp_gain: 100
xp_time: 10
Experience Boost
The plugin supports "experience boosts", they're meant to reward your vips only at the moment but they will be expanded to purchasable boosts in the future.
You can create your own boost and, by giving the permission to a player or group, it'll be enabled for them.
YAML:
boost1:
permission: death_effects.boost1
multiplier: 5
Configuration
This is the default config file
YAML:
prefix: '&eDeath Effects&7> '
database: # The database to store information such as effects bought by each player, their active effect and their experience
type: MYSQL # This can be either MySQL or SQLite
enabled: false # If enabled is set to false the player data will be stored in yaml files instead
host: 127.0.0.1
port: 3306
name: deatheffects
username: root
password: none # If this is empty or set to "none" no password will be used
effects:
delay: 20 # How long before any effect is started. 20 is a good delay as it allows the death animation to finish (the player model moves) and the particles to dissolve
remove_invalid_bought_effects: false # If this is set to true and a player has bought an effect that is not in the effects.yml file anymore it will be removed, otherwise it'll still be stored. Useful for effects maintenance
warn_console_about_invalid_bought_effects: true # If this is set to true and a player has bought an effect that is not in the effects.yml file anymore a message will be sent to the console warning that the effect doesn't exist.
sounds:
experience_gained:
name: NONE # None means that no sound will be played
volume: 0.15
pitch: 1.0
shop:
item_bought:
name: NOTE_PLING
volume: 0.2
pitch: 1.0
already_owned:
name: GHAST_FIREBALL
volume: 0.2
pitch: 1.0
not_enough_experience:
name: NOTE_PIANO
volume: 0.2
pitch: 1.0
effect:
activated:
name: ITEM_PICKUP
volume: 0.2
pitch: 1.0
deactivated:
name: ITEM_BREAK
volume: 0.2
pitch: 1.0
inventories:
shop:
open:
name: NOTE_PLING
volume: 0.3
pitch: 0.1
closed:
name: ITEM_BREAK
volume: 0.1
pitch: 0.8
item_bought:
name: NOTE_PLING
volume: 0.2
pitch: 1.0
already_owned:
name: GHAST_FIREBALL
volume: 0.2
pitch: 1.0
not_enough_experience:
name: NOTE_PIANO
volume: 0.2
pitch: 1.0
effects:
open:
name: NOTE_PLING
volume: 0.3
pitch: 0.1
closed:
name: ITEM_BREAK
volume: 0.1
pitch: 0.8
activated:
name: ITEM_PICKUP
volume: 0.2
pitch: 1.0
deactivated:
name: ITEM_BREAK
volume: 0.2
pitch: 1.0
inventories_content: # This may change based on the Minecraft version you're running the plugin on
- &id001
==: org.bukkit.inventory.ItemStack
type: STAINED_GLASS_PANE
damage: 5
- null
- null
- null
- null
- null
- null
- null
- *id001
- *id001
- null
- null
- null
- null
- null
- null
- null
- *id001
- *id001
- null
- null
- null
- null
- null
- null
- null
- *id001
- *id001
- null
- null
- null
- null
- null
- null
- null
- *id001
- *id001
- null
- null
- null
- null
- null
- null
- null
- *id001
- *id001
- null
- &id002
==: org.bukkit.inventory.ItemStack
type: STAINED_GLASS_PANE
damage: 11
- *id002
- null
- *id002
- *id002
- *id002
- *id001
inventories:
experience_display:
item:
==: org.bukkit.inventory.ItemStack
type: GOLD_NUGGET
slot: 45
total_experience_display:
item:
==: org.bukkit.inventory.ItemStack
type: GOLD_BLOCK
slot: 46
close:
item:
==: org.bukkit.inventory.ItemStack
type: BARRIER
slot: 49
next_page:
item:
==: org.bukkit.inventory.ItemStack
type: STAINED_CLAY
damage: 13
slot: 53
no_next_page:
item:
==: org.bukkit.inventory.ItemStack
type: STAINED_CLAY
damage: 14
previous_page:
item:
==: org.bukkit.inventory.ItemStack
type: STAINED_CLAY
damage: 4
slot: 52
Messages
Messages are stored in another configuration file called "english.yml" as, in the future, players will be able to change their language by using the /language command and the server administrator will be able to create new language files, such as "italian.yml"
The messages file also contains the effects names and lores, so they will be translatable in the future.
YAML:
#PlaceHolders:
#{experience} = the experience that a player "has"/can spend
#{total_experience}/{total_experience_gained} = the total amount of experience that a player has gained
#{gained} = experience gained
#{base_gained} = experience gained before applying experience boost (same as {gained} if no boost active)
#{boost_multiplier} = the experience multiplier for the active boost (1 if none active)
#{effect_name} = the active effect's name or the effect that the player has interacted in a menu with
#
#Map:
#{map_name} = the name of the current map (defaults to {map_id}
#{map_id} = the ID of the current map (i.e. the actual world name)
language_command:
not_valid: '&cThe language &e{language}&c is not valid.'
changed:
you: '&aYour new language is &e{language}&a.'
other: '&6{player}&a''s new language is &e{language}&a.'
list: '&aHere''s a list of languages (&6{language_amount}&a): &e{languages}'
list_separator: '&f, &e'
player_offline: '&cThe player &e{player}&c is not online.'
xp:
xp_gained: '&bYou have gained &e{gained}&bXP on the map &6{map_name}&b! You now have &e{experience}&b.'
xp_gained_boosted: '&bYou have gained &e{gained}&bXP on the map &6{map_name}&b &7(&ex{boost_multiplier}&a boost&7)&b! You now have &e{experience}&bXP.'
shop:
not_enough_experience: '&cYou don''t have enough experience to buy this effect.'
item_bought: '&aYou have bought the effect &e{effect_name}&a for &b{effect_cost}&bXP&a.
You now have &e{experience}&bXP&a.'
already_owned: '&eYou already own the effect &d{effect_name}&e.'
effect:
activated: '&aYou have activated the effect &e{effect_name}&a.'
deactivated: '&aYou have &ede-activated&a the effect &e{effect_name}&a.'
inventories:
shop:
title: '&eShop'
effects:
title: '&dEffects'
inventory:
shop:
title: '&eShop'
effects:
title: '&dEffects'
items:
next_page: '&aNext Page'
previous_page: '&6Previous Page'
no_next_page: '&cNo Next Page'
close: '&cClose'
experience_display: '&aYou have &e{experience}&bXP'
total_experience_display: '&aYou have gained &e{total_experience_gained}&bXP&a
in total'
deathEffects:
title: '&dEffects'
effects:
Test1:
display_name: '&b&oIt''s complicated...'
lore:
- Hearts<3
- '&b&oCost: &e&o{cost}'
Creeper:
display_name: '&2&lCreeper!'
lore:
- '&2&oCreeper.'
- '&b&oCost: &e&o{cost}'
Effects
Effects are extremely customizable
This is the effects.yml file from the video below (stripped from the example effects to show the multi-page functionality)
YAML:
Test1:
cost: 20
display_item: Redstone
summon: lightninga
particle1:
delay: 2
height: 0.3
particle:
name: SMOKE_NORMAL
count: 2
offset:
x: 0.15
y: 0.1
z: 0.15
particle2:
delay: 7
height: 0.6
particle:
name: SMOKE_NORMAL
count: 3
offset:
x: 0.25
y: 0.15
z: 0.25
particle2:
delay: 11
height: 0.9
particle:
name: SMOKE_LARGE
count: 4
offset:
x: 0.3
y: 0.15
z: 0.3
particle3:
delay: 21
height: 1.2
particle:
name: SMOKE_LARGE
count: 5
offset:
x: 0.3
y: 0.15
z: 0.3
particle4:
delay: 26
height: 1.5
particle:
name: SMOKE_LARGE
count: 6
offset:
x: 0.3
y: 0.15
z: 0.3
particle5:
delay: 38
height: 2.2
particle:
name: REDSTONE
count: 100
offset:
x: 0.5
y: 0.4
z: 0.5
particle6:
delay: 90
height: 0.6
particle:
name: LAVA
count: 5
sound1:
delay: 2
sound:
name: NOTE_PIANO
volume: 0.1
pitch: 0.5
sound2:
delay: 7
sound:
name: NOTE_PIANO
volume: 0.2
pitch: 0.529732
sound3:
delay: 11
sound:
name: NOTE_PIANO
volume: 0.3
pitch: 0.561231
sound4:
delay: 21
sound:
name: NOTE_PIANO
volume: 0.4
pitch: 0.594604
sound5:
delay: 38
sound:
name: CREEPER_HISS
volume: 0.6
pitch: 1
effect1:
delay: 40
height: 2
effect:
name: LAVADRIP
data: 0
effect2:
delay: 41
height: 1.9
effect:
name: LAVADRIP
data: 0
effect3:
delay: 42
height: 1.8
effect:
name: LAVADRIP
data: 0
effect4:
delay: 90
height: 0.1
effect:
name: LAVA_POP
data: 0
firework1:
delay: 110
height: 0.1
power: 2
detonation_delay: 30
firework_effect1:
type: STAR
flicker: true
trail: true
colors:
- "RED"
- "AQUA"
- "BLUE"
fade:
- "ORANGE"
- "YELLOW"
firework2:
delay: 138
height: 0.1
power: 2
detonation_delay: 1
firework_effect1:
type: BALL
flicker: true
trail: true
colors:
- "YELLOW"
- "NAVY"
- "TEAL"
- "SILVER"
- "AQUA"
- "BLUE"
fade:
- "ORANGE"
- "YELLOW"
Creeper:
cost: 50
display_item: TNT
particle1:
delay: 0
height: 1
particle:
name: HEART
count: 5
offset:
x: 0.5
y: 2
z: 0.5
firework1:
delay: 5
height: 0.1
power: 2
detonation_delay: 15
firework_effect1:
type: CREEPER
flicker: true
trail: true
colors:
- "GREEN"
- "NAVY"
- "TEAL"
fade:
- "ORANGE"
- "YELLOW"
Commands
The only command is "/deatheffects" and it will open the effects inventory or the shop (aliases: /de, /cnde)Permissions:
/deathinventory - deatheffects.death_inventory
/deathinventory shop - deatheffects.death_inventory.shop
Upcoming features:
+ ChestCommand like items, given on-join, to open the effect and effect shop inventories.
+ PlaceHolderAPI support.
+ Possibly adding chat messages to death effects (broadcast messages and messages only sent to the killer)
+ The possibility to add a new language just by creating the language file (which is why effects lores and display name are fetched from the English language file first).
* Maybe add a way to let players buy experience or effects with "Tebex" (buycraft)
*
* Possibly a way for players to buy boosts, suggestions about what currency to use are welcome.
* Possibly adding custom events to make integration with this plugin easier
Videos
Known issues:
+ If the player is dead and sounds are played the world disappears in 1.14.


