Tested Minecraft Versions:
Bugs
Please go to discussion to report bugs before leaving a bad review some things are still being worked from premium version. If you issues were fixed and you still don't like how we work, feel free to do your review.
Dependencies
You need to install WorldEdit to set arena bounds, you also can install vault and enable the vault support.
The Advanced RestoreSystem
You can enable it on config, if enabled ALL OF THE WORLD will reset, the map storage system will have some changes.
Arena Restore system
Optional restore system ("Plan B")
This will be used if the server stop/crash/reload or even if anything goes wrong during the restoring process. All blocks will be placed at the same time and this can cause lag issues during the process.
You cannot force BowSpleef to use this system, isn't safe for your server.
ParticleEffects (for trails and effects)
Spoiler: ParticleEffects
Code (Text):
To avoid issues we're working only with:
EXPLODE
LARGEEXPLODE
HUGEEXPLOSION
FIREWORKSSPARK
CRIT
MAGICCRIT
SMOKE
LARGESMOKE
SPELL
INSTANTSPELL
MOBSPELL
WITCHMAGIC
DRIPWATER
DRIPLAVA
HAPPYVILLAGER
ANGRYVILLAGER
NOTE
PORTAL
ENCHANTMENTTABLE
FLAME
FOOTSTEP
CLOUD
REDSTONE
SNOWBALL
SNOW_SHOVELD
SLIME
HEART
LAVA
Player commands
Arena setup
Required permission: bs.admin
First of all set global spawn using /bs setgspawn
Extra permissions
The shop system may be reworked soon, for now it's the same system from before.
Shop system (Permission-based):
Examples:
I am a VIP member ->
The permission to buy the diamond shovel is bs.buy.shovel.diamond. I'll buy because I have the buyPermission and I'll get the permission to use when I want.
I am normal member ->
I don't have the bs.buy.shovel.diamond permission so I can't buy the item.
Trails & Effects config
Spoiler: Files
Code (Text):
# ##### Important things in configuration #####
# Storage.Type: Types -> MYSQL, YAML, SQLITE
# Storage.Update-Interval: Interval (in minutes) to send a updated version of all the player data to your DB.
#
# Advanced.Advanced-Restore: Not recommended for BowSpleef. If enabled, THE WORLD WILL BE DELETED and recreated from a backup at maps folder.
Locations:
spawn: '{"world":"world","x":153.57897622929423,"y":52.0,"z":643.4477882597615}'
Advanced:
Restore-Log: 'true'
Iterator-Delay: '5'
Blocks-Per-Iterator: '50'
Restore: 'false'
Storage:
Type: YAML
MySQL:
Host: localhost
Port: '3306'
User: user
Password: '123456'
Database: database
Update-Interval: '5'
Options:
Bungee:
Enabled: 'false'
Lobby-Server: lobby
Server-Name: bowspleef1
Velocity:
Double-Jump-Multiply-Forward: '1.5'
Double-Jump-Multiply-Y: '0.8'
Whitelisted-Commands:
- bs leave
- tell
- r
PreStart-Countdown: '35'
Game-Length: '600'
Time-After-Game: '8'
Grace-Period-Countdown: '15'
Use-Vault: 'false'
Stop-Particles-When-Look-Up: 'false'
Use-DeathEvent: 'true'
Action-Bar: 'true'
Use-WinFirework-Party: 'true'
Use-Titles: 'true'
Titles:
Fade-In: '8'
Stay: '28'
Fade-Out: '5'
Double-Jump: 'true'
Double-Jump-Per-Game: '2'
Double-Jump-Limit: '6'
Double-Jump-Price: '80'
Triple-Shot: 'true'
Triple-Shot-Per-Game: '3'
Triple-Shot-Limit: '4'
Triple-Slot-Price: '120'
Economy:
Coins-Per-Win: '250'
Coins-Per-Loss: '0'
Coins-Per-Player-Death: '5'
Coins-For-Participation: '50'
Messages:
ActionBar:
Lobby-Format: '&bMoney: &c&l%money% &e&l| &bJumps: &c&l%double_jumps% &e&l| &bTShoots:
&c&l%triple_shots%'
Game-Format: '&bJumps: &c&l%double_jumps% &e&l| &bTShoots: &c&l%triple_shots%'
Default-BowName: '&8Bow'
Permission: '&cNo permission!'
Item-Selected: '&aItem selected!'
Permission-To-Buy: '&cNo permission to unlock this item!'
Join: '&7%player% &ejoined the game. (&7%players%&e/&7%maxplayers%&e)'
Left: '&7%player% &eleft the game. (&7%players%&e/&7%maxplayers%&e)'
Already-Started: '&cThis game already started!'
Already-InGame: '&cAlready playing!'
Game-Is-Full: '&cThis game is full!'
CannotJoin: '&cThis game already started!'
Player-Eliminated: '&7%player% &ewas eliminated! %alive% players left.'
Eliminated: '&cEliminated! &7You''re now on spectator mode.'
Already-Purchased: '&cYou already purchased a shovel for this game!'
Starting: '&eThe game starts in &b%time% &eseconds.'
Grace-Period: '&eThe Grace-Period ends in &b%time% &eseconds!'
Game-Started: '&e&lGame started! Goodluck!'
Successfully-Purchased: '&aYou successfully purchased a item for &c%cost%&a. If
you quit the game this purchase will be cancelled.'
Win: '&7%player% &ewon the game!'
CommandFailed: '&cYou cannot use commands while playing BowSpleef!'
Prefix: '&7[&cBowSpleef&7]'
Wins-Stats: 'Wins: %wins%'
Shots-Stats: 'Shots: %shots%'
Position: '#%position%'
Achievement:
- '&7&m---------------&7[&6&lACHIEVEMENT&7]&m---------------'
- ' '
- '%name% - %description%'
- ' '
- '&7&m----------------------------------'
Player-Stats:
- '&7&m---------------&7[&c&lBOWSPLEEF STATS&7]&m---------------'
- ' '
- '&8Games Played: &b%games_played%'
- '&8Wins: &b%wins%'
- '&8Losses: &b%losses%'
- '&8Arrows Shot: &b%arrowsShot%'
- '&8Balance: &b%balance%'
- ' '
- '&7&m----------------------------------'
Enough-Money: '&cYou don''t have enough money to buy this!'
Titles:
Titles:
Join: '&eYou are playing on map:'
Left: '&eYou left the game'
Player-Eliminated: '&b%player%'
Grace-Time: ''
Subtitles:
Join: '&b%mapname%'
Left: ''
Player-Eliminated: '&7has eliminated!'
Grace-Time: '&c&l%time%'
Title-Starting: '&eGame starts in:'
Subtitle-Starting: '&e&l%countdown%'
DoubleJump-Limit: '&cYou cannot buy more than %limit% double jumps!'
TripleShot-Limit: '&cYou cannot buy more than %limit% triple shots!'
Shop:
Name: '&7BowSpleef Shop'
Effects-Name: '&7BowSpleef Effects Shop'
Trails-Name: '&7BowSpleef Trails Shop'
Lore: '&c%amount% %moneyname% will be removed from your balance.'
MoneyName: Coins
DoubleJump:
Name: '&bDouble Jumps (Click to buy)'
Lore:
- '&eBuy more double jumps for this game only!'
TripleArrowShot:
Name: '&bTriple Shot (Click to buy)'
Lore:
- '&eBuy more triple shots for this game only!'
Effects:
Name: '&bEffects (Click to open)'
Lore:
- '&eBuy in-game particles!'
Trails:
Name: '&bTrails (Click to open)'
Lore:
- '&eBuy in-game arrow particles!'
Sign:
Line:
'1': '&7[&cBowSpleef&7]'
'2': '%state%'
'3': '%mapname%'
'4': '%players%/%maxplayers%'
State:
Waiting: '&aWAITING'
Starting: '&6STARTING'
InGame: '&cIN GAME'
Ending: '&4ENDING'
Resetting: '&8RESETTING'
Motd:
State:
Waiting: '&aWAITING'
Starting: '&6STARTING'
InGame: '&cIN GAME'
Ending: '&4ENDING'
Restoring: '&8RESTORING'
Scoreboard:
Lobby-Title: '&6&lBOW SPLEEF'
Lobby-Format:
- ' '
- 'Map: &a%mapname%'
- 'Players: &b%players%/%maxplayers%'
- 'Needed: &b%minplayers%'
- ' '
- 'State: %capitalize_state%'
- ' '
- yourserver.com
Game-Title: '&6&lBOW SPLEEF - %timer%'
Game-Format:
- ' '
- 'Map: &a%mapname%'
- ' '
- 'Alive players:'
- '&a%alive%'
- ' '
- 'Eliminated players:'
- '&a%eliminated%'
- ' '
- yourserver.com
Rewards:
Win-Commands:
- eco give %player% 100
Itens:
Leave-Item:
Name: '&c&lLeave &7(Right Click)'
Type: BED
Shop-Item:
Name: '&a&lBow Spleef Shop &7(Right Click)'
Type: EMERALD
Shop:
Double-Jump-Slot: '1'
Triple-Shot-Slot: '3'
Effects-Slot: '5'
Trail-Slot: '7'
Effects-Rows: '6'
Trails-Rows: '6'
Sounds:
Double-Jump: BAT_LOOP:0.2
Grace-Time: CLICK:1
Code (Text):
#Trails
'0':
name: '&cFlame Arrow'
permission: bs.trails.unlock.flames
buyPermission: bs.trails.flames
particles: flame
menuItem: BLAZE_POWDER
lore:
- '&eDisplays flames particles your on arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 20000
slot: 10
'1':
name: '&cFirework Arrow'
permission: bs.trails.unlock.firework
buyPermission: bs.trails.firework
particles: fireworksSpark
menuItem: FIREWORK
lore:
- '&eDisplays firework particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 18000
slot: 11
'2':
name: '&cLove Arrow'
permission: bs.trails.unlock.love
buyPermission: bs.trails.love
particles: heart
menuItem: RED_ROSE
lore:
- '&eDisplays heart particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 12000
slot: 12
'3':
name: '&cMusic Arrow'
permission: bs.trails.unlock.music
buyPermission: bs.trails.music
particles: note
menuItem: NOTE_BLOCK
lore:
- '&eDisplays note particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 15000
slot: 13
'4':
name: '&cExplosive Arrow'
permission: bs.trails.unlock.explosion
buyPermission: bs.trails.explosion
particles: explode
menuItem: TNT
lore:
- '&eDisplays explosion particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 50000
slot: 15
'5':
name: '&cWater Arrow'
permission: bs.trails.unlock.water
buyPermission: bs.trails.water
particles: dripWater
menuItem: WATER_BUCKET
lore:
- '&eDisplays drip water particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 15000
slot: 14
'6':
name: '&cBlizzard Arrow'
permission: bs.trails.unlock.blizzard
buyPermission: bs.trails.blizzard
particles: snowballpoof
menuItem: SNOW_BALL
lore:
- '&eDisplays snowball particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 12000
slot: 16
'7':
name: '&cLava Arrow'
permission: bs.trails.unlock.lava
buyPermission: bs.trails.lava
particles: dripLava
menuItem: LAVA_BUCKET
lore:
- '&eDisplays drip lava particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 10000
slot: 19
Code (Text):
#achievements
wins:
'1':
enabled: true
display-name: '&8&lIt''s my first win!'
description: '&7First bowspleef win.'
commands:
- bs coins add %player% 100
'5':
enabled: true
display-name: '&8&lMy arrows are already on fire!'
description: '&7Win 5 BowSpleef games.'
commands:
- bs coins add %player% 150
games:
'5':
enabled: true
display-name: '&b&lStarting my journey!'
description: '&7Play 5 BowSpleef games.'
commands:
- bs coins add %player% 100
'15':
enabled: true
display-name: '&b&lTrying my best!'
description: '&7Play 15 BowSpleef games.'
commands:
- bs coins add %player% 100
shots:
'50':
enabled: true
display-name: '&b&lArrows everywhere!'
description: '&7Shoot 50 arrows with your bow!'
commands:
- bs coins add %player% 100
'250':
enabled: true
display-name: '&b&lArrow party!'
description: '&7Shoot 250 arrows with your bow!'
commands:
- bs coins add %player% 100
Spoiler: Screenshots
Code (Text):
package com.floodeer.bowspleef;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import com.floodeer.bowspleef.api.ArrowHitEvent;
public class APIExample implements Listener {
/**
* On BowSpleef events
*
* Event list:
* - TNTPrimedDespawnEvent
* - ArrowHitEvent
* - GameStartEvent
* - GameEndEvent
*/
@EventHandler
public void onHit(ArrowHitEvent e) {
Location l = e.getEntity().getLocation();
if(!e.getGame().getGameArena().getArenaCuboid().containsLoc(l)) {
e.getEntity().remove();
}
}
/**
* On bukkit events
*
* API Methods:
* - Getting player data
* getPlayerData(Player bukkitPlayer);
* getPlayerData(UUID uuid);
* getPlayerData(String name);
*
* - Getting a game
* getGame(String name);
* getGame(GamePlayer fromPlayer);
*
* - Leaderboard
* getTopWins(int limit);
* getTopShots(int limit);
*
* - Extra
* saveData(Player... players);
*
*/
@EventHandler
public void onPlayerQuit(PlayerQuitEvent e) {
BowSpleef.getAPI().saveData(e.getPlayer());
}
@EventHandler
public void checkForTop(PlayerJoinEvent e) {
Map<Integer, String> topWins = BowSpleef.getAPI().getTopWins(3);
if(topWins.values().contains(e.getPlayer())) {
e.setJoinMessage("The one of the three bests BowSpleef's player joined the server!");
for(Integer i : topWins.keySet()) {
if(topWins.get(i).equalsIgnoreCase(e.getPlayer().getName())) {
Bukkit.broadcastMessage(e.getPlayer().getName() + " with the position " + i);
}
}
}
}
@EventHandler
public void onSneak(PlayerToggleSneakEvent e) {
if(BowSpleef.getAPI().getPlayerData(e.getPlayer()).isInGame()) {
e.setCancelled(true);
e.getPlayer().sendMessage("You can't sneak here!");
}
}
}
- 1.8
- 1.9
- 1.10
- 1.11
- 1.12

- Multi-Arena or Bungee support.
- Basic API with game events.
- Shop with hats, particles and game perks.
- Achievements.
- Grace Period.
- Spectator mode.
- Minecraft 1.8 Titles.
- Vault or custom economy support.
- MySQL, yaml and SQLite support.
- Custom messages.
- Custom signs.
- Automatically rollback system (After game/server shutdown).
- UUID support.
- Save and restore player inventory, levels and more!
- Made for Java 8 and MC 1.8, 1.9, 1.10, 1.11 and 1.12.
- A pre made arena!
- Leaderboard FOR MYSQL or SQLITE only!
- Advanced world restore or map resetting system.
- Reward system.

Bugs
Please go to discussion to report bugs before leaving a bad review some things are still being worked from premium version. If you issues were fixed and you still don't like how we work, feel free to do your review.
Dependencies
You need to install WorldEdit to set arena bounds, you also can install vault and enable the vault support.
The Advanced RestoreSystem
You can enable it on config, if enabled ALL OF THE WORLD will reset, the map storage system will have some changes.
- After using the create command you will be teleported to a new world (or to a existing one if the world is loaded).
- Paste/build/edit your map on this world.
- After setting up the arena and saving you will be teleported to global spawn (server spawn if global spawn is not valid).
- BowSpleef will create a backup of your world and reload the map after a match.
Arena Restore system
- Sometimes the System just place more blocks than the allowed value in blocks per second due an Delay and to prevent Exceptions, this can reduce the value in 5-8 seconds.
- You can change the Iterator-Delay and Blocks-Per-Iterator values in config to have something faster.
- The restore system replace ALL blocks to prevent fails.
- If your restore system is low:
- I have 14k of blocks in an arena, with 5 Iterator delay and 50 blocks per iterator.
- 4 Iterators = 20 ticks (5 Iterator dealy * 4 Iterators = 20 ticks = 1 second)
- If 4 iterators = 1 second, I'm getting 200 blocks placed per second (4 iterators * 50 blocks)
- If I'm getting 200 blocks placed per second and my arena has 14.000 blocks, the calculated delay to reset the arena is 70 seconds. (14.000/200)
- I have 3k of blocks in an arena, with 5 Iterator delay and 50 blocks per iterator.
- 4 Iterators = 20 ticks (5 Iterator dealy * 4 Iterators = 20 ticks = 1 second)
- If 4 iterators = 1 second, I'm getting 200 blocks placed per second (4 iterators * 50 blocks)
- If I'm getting 200 blocks placed per second and my arena has 3.0000 blocks, the calculated delay to reset the arena is 15 seconds. (3.000/200)

Optional restore system ("Plan B")
This will be used if the server stop/crash/reload or even if anything goes wrong during the restoring process. All blocks will be placed at the same time and this can cause lag issues during the process.
You cannot force BowSpleef to use this system, isn't safe for your server.
ParticleEffects (for trails and effects)
Spoiler: ParticleEffects
Code (Text):
To avoid issues we're working only with:
EXPLODE
LARGEEXPLODE
HUGEEXPLOSION
FIREWORKSSPARK
CRIT
MAGICCRIT
SMOKE
LARGESMOKE
SPELL
INSTANTSPELL
MOBSPELL
WITCHMAGIC
DRIPWATER
DRIPLAVA
HAPPYVILLAGER
ANGRYVILLAGER
NOTE
PORTAL
ENCHANTMENTTABLE
FLAME
FOOTSTEP
CLOUD
REDSTONE
SNOWBALL
SNOW_SHOVELD
SLIME
HEART
LAVA

Player commands
- /bs join <arena> - bs.player
- /bs leave. - bs.player
- /bs stats - no permission needed.
- /bs setgspawn - bs.admin
- /bs start <arena> - bs.moderator/bs.admin
- /bs stop <arena> - bs.moderator/bs.admin
- /bs delete <arena> - bs.admin
- /bs coins set/add/remve <player> <amount> - bs.command.coins
- /bs updateData <player>
- /bs leaderboard [update/values] <type> - Types: Wins, Shots.
- /bs config <update/set> [path] [value]

Arena setup
Required permission: bs.admin
First of all set global spawn using /bs setgspawn
- Create your arena - /bs create <name> (If you are using the advanced restore system, bowspleef will create a empty world and teleport you to paste the map, after paste it you can start the setup).
- Set arena lobby - /bs setlobby <name>
- Set arena bounds - /bs setbounds <name> <low/high>
- Add spawn - /bs setspawn <name>
- Set min players - /bs setMinPlayers <name> <amount>
- Set max players - /bs setMaxPlayers <name> <amount>
- Finish the arena with - /bs finish <name>

Extra permissions
- bs.joinfull - Allows you to join in full games.
- bs.advanced - Allows you to read the restore log.
- [bowspleef]
- join
- ArenaName
- [bowspleef]
- leaderboard
- <type> - types: Shots & Wins
- <position>
The shop system may be reworked soon, for now it's the same system from before.
Shop system (Permission-based):
- buyPermission: The player needs to have this permission to buy an item (permission).
- permission: The item (permission) that the player with the buyPermission will purchase.
Examples:
I am a VIP member ->
The permission to buy the diamond shovel is bs.buy.shovel.diamond. I'll buy because I have the buyPermission and I'll get the permission to use when I want.
I am normal member ->
I don't have the bs.buy.shovel.diamond permission so I can't buy the item.
Trails & Effects config
- The number is the ID and will be saved in Database.
- name: The display name in menu.
- buyPermission: The player needs to have this permission to buy an trail/effect.
- permission: The trail/effect that the player with the buyPermission will purchase.
- particles: The particle type, the list is on Main page. CLICK HERE TO GO
- menuItem: The display item in menu.
- lore: The item lore in menu.
- buyCommands: Commands to execute when player buy the trail/effect.
- price: The price
- slot: Slot in menu
- rotateParticles: For Effects Only, special/rotative particles around the player or normal particles.
- helmet: (Full armor set will be added soon) If player will get some hat with the effect.
Spoiler: Files
Code (Text):
# ##### Important things in configuration #####
# Storage.Type: Types -> MYSQL, YAML, SQLITE
# Storage.Update-Interval: Interval (in minutes) to send a updated version of all the player data to your DB.
#
# Advanced.Advanced-Restore: Not recommended for BowSpleef. If enabled, THE WORLD WILL BE DELETED and recreated from a backup at maps folder.
Locations:
spawn: '{"world":"world","x":153.57897622929423,"y":52.0,"z":643.4477882597615}'
Advanced:
Restore-Log: 'true'
Iterator-Delay: '5'
Blocks-Per-Iterator: '50'
Restore: 'false'
Storage:
Type: YAML
MySQL:
Host: localhost
Port: '3306'
User: user
Password: '123456'
Database: database
Update-Interval: '5'
Options:
Bungee:
Enabled: 'false'
Lobby-Server: lobby
Server-Name: bowspleef1
Velocity:
Double-Jump-Multiply-Forward: '1.5'
Double-Jump-Multiply-Y: '0.8'
Whitelisted-Commands:
- bs leave
- tell
- r
PreStart-Countdown: '35'
Game-Length: '600'
Time-After-Game: '8'
Grace-Period-Countdown: '15'
Use-Vault: 'false'
Stop-Particles-When-Look-Up: 'false'
Use-DeathEvent: 'true'
Action-Bar: 'true'
Use-WinFirework-Party: 'true'
Use-Titles: 'true'
Titles:
Fade-In: '8'
Stay: '28'
Fade-Out: '5'
Double-Jump: 'true'
Double-Jump-Per-Game: '2'
Double-Jump-Limit: '6'
Double-Jump-Price: '80'
Triple-Shot: 'true'
Triple-Shot-Per-Game: '3'
Triple-Shot-Limit: '4'
Triple-Slot-Price: '120'
Economy:
Coins-Per-Win: '250'
Coins-Per-Loss: '0'
Coins-Per-Player-Death: '5'
Coins-For-Participation: '50'
Messages:
ActionBar:
Lobby-Format: '&bMoney: &c&l%money% &e&l| &bJumps: &c&l%double_jumps% &e&l| &bTShoots:
&c&l%triple_shots%'
Game-Format: '&bJumps: &c&l%double_jumps% &e&l| &bTShoots: &c&l%triple_shots%'
Default-BowName: '&8Bow'
Permission: '&cNo permission!'
Item-Selected: '&aItem selected!'
Permission-To-Buy: '&cNo permission to unlock this item!'
Join: '&7%player% &ejoined the game. (&7%players%&e/&7%maxplayers%&e)'
Left: '&7%player% &eleft the game. (&7%players%&e/&7%maxplayers%&e)'
Already-Started: '&cThis game already started!'
Already-InGame: '&cAlready playing!'
Game-Is-Full: '&cThis game is full!'
CannotJoin: '&cThis game already started!'
Player-Eliminated: '&7%player% &ewas eliminated! %alive% players left.'
Eliminated: '&cEliminated! &7You''re now on spectator mode.'
Already-Purchased: '&cYou already purchased a shovel for this game!'
Starting: '&eThe game starts in &b%time% &eseconds.'
Grace-Period: '&eThe Grace-Period ends in &b%time% &eseconds!'
Game-Started: '&e&lGame started! Goodluck!'
Successfully-Purchased: '&aYou successfully purchased a item for &c%cost%&a. If
you quit the game this purchase will be cancelled.'
Win: '&7%player% &ewon the game!'
CommandFailed: '&cYou cannot use commands while playing BowSpleef!'
Prefix: '&7[&cBowSpleef&7]'
Wins-Stats: 'Wins: %wins%'
Shots-Stats: 'Shots: %shots%'
Position: '#%position%'
Achievement:
- '&7&m---------------&7[&6&lACHIEVEMENT&7]&m---------------'
- ' '
- '%name% - %description%'
- ' '
- '&7&m----------------------------------'
Player-Stats:
- '&7&m---------------&7[&c&lBOWSPLEEF STATS&7]&m---------------'
- ' '
- '&8Games Played: &b%games_played%'
- '&8Wins: &b%wins%'
- '&8Losses: &b%losses%'
- '&8Arrows Shot: &b%arrowsShot%'
- '&8Balance: &b%balance%'
- ' '
- '&7&m----------------------------------'
Enough-Money: '&cYou don''t have enough money to buy this!'
Titles:
Titles:
Join: '&eYou are playing on map:'
Left: '&eYou left the game'
Player-Eliminated: '&b%player%'
Grace-Time: ''
Subtitles:
Join: '&b%mapname%'
Left: ''
Player-Eliminated: '&7has eliminated!'
Grace-Time: '&c&l%time%'
Title-Starting: '&eGame starts in:'
Subtitle-Starting: '&e&l%countdown%'
DoubleJump-Limit: '&cYou cannot buy more than %limit% double jumps!'
TripleShot-Limit: '&cYou cannot buy more than %limit% triple shots!'
Shop:
Name: '&7BowSpleef Shop'
Effects-Name: '&7BowSpleef Effects Shop'
Trails-Name: '&7BowSpleef Trails Shop'
Lore: '&c%amount% %moneyname% will be removed from your balance.'
MoneyName: Coins
DoubleJump:
Name: '&bDouble Jumps (Click to buy)'
Lore:
- '&eBuy more double jumps for this game only!'
TripleArrowShot:
Name: '&bTriple Shot (Click to buy)'
Lore:
- '&eBuy more triple shots for this game only!'
Effects:
Name: '&bEffects (Click to open)'
Lore:
- '&eBuy in-game particles!'
Trails:
Name: '&bTrails (Click to open)'
Lore:
- '&eBuy in-game arrow particles!'
Sign:
Line:
'1': '&7[&cBowSpleef&7]'
'2': '%state%'
'3': '%mapname%'
'4': '%players%/%maxplayers%'
State:
Waiting: '&aWAITING'
Starting: '&6STARTING'
InGame: '&cIN GAME'
Ending: '&4ENDING'
Resetting: '&8RESETTING'
Motd:
State:
Waiting: '&aWAITING'
Starting: '&6STARTING'
InGame: '&cIN GAME'
Ending: '&4ENDING'
Restoring: '&8RESTORING'
Scoreboard:
Lobby-Title: '&6&lBOW SPLEEF'
Lobby-Format:
- ' '
- 'Map: &a%mapname%'
- 'Players: &b%players%/%maxplayers%'
- 'Needed: &b%minplayers%'
- ' '
- 'State: %capitalize_state%'
- ' '
- yourserver.com
Game-Title: '&6&lBOW SPLEEF - %timer%'
Game-Format:
- ' '
- 'Map: &a%mapname%'
- ' '
- 'Alive players:'
- '&a%alive%'
- ' '
- 'Eliminated players:'
- '&a%eliminated%'
- ' '
- yourserver.com
Rewards:
Win-Commands:
- eco give %player% 100
Itens:
Leave-Item:
Name: '&c&lLeave &7(Right Click)'
Type: BED
Shop-Item:
Name: '&a&lBow Spleef Shop &7(Right Click)'
Type: EMERALD
Shop:
Double-Jump-Slot: '1'
Triple-Shot-Slot: '3'
Effects-Slot: '5'
Trail-Slot: '7'
Effects-Rows: '6'
Trails-Rows: '6'
Sounds:
Double-Jump: BAT_LOOP:0.2
Grace-Time: CLICK:1
Code (Text):
#Trails
'0':
name: '&cFlame Arrow'
permission: bs.trails.unlock.flames
buyPermission: bs.trails.flames
particles: flame
menuItem: BLAZE_POWDER
lore:
- '&eDisplays flames particles your on arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 20000
slot: 10
'1':
name: '&cFirework Arrow'
permission: bs.trails.unlock.firework
buyPermission: bs.trails.firework
particles: fireworksSpark
menuItem: FIREWORK
lore:
- '&eDisplays firework particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 18000
slot: 11
'2':
name: '&cLove Arrow'
permission: bs.trails.unlock.love
buyPermission: bs.trails.love
particles: heart
menuItem: RED_ROSE
lore:
- '&eDisplays heart particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 12000
slot: 12
'3':
name: '&cMusic Arrow'
permission: bs.trails.unlock.music
buyPermission: bs.trails.music
particles: note
menuItem: NOTE_BLOCK
lore:
- '&eDisplays note particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 15000
slot: 13
'4':
name: '&cExplosive Arrow'
permission: bs.trails.unlock.explosion
buyPermission: bs.trails.explosion
particles: explode
menuItem: TNT
lore:
- '&eDisplays explosion particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 50000
slot: 15
'5':
name: '&cWater Arrow'
permission: bs.trails.unlock.water
buyPermission: bs.trails.water
particles: dripWater
menuItem: WATER_BUCKET
lore:
- '&eDisplays drip water particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 15000
slot: 14
'6':
name: '&cBlizzard Arrow'
permission: bs.trails.unlock.blizzard
buyPermission: bs.trails.blizzard
particles: snowballpoof
menuItem: SNOW_BALL
lore:
- '&eDisplays snowball particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 12000
slot: 16
'7':
name: '&cLava Arrow'
permission: bs.trails.unlock.lava
buyPermission: bs.trails.lava
particles: dripLava
menuItem: LAVA_BUCKET
lore:
- '&eDisplays drip lava particles on your arrows!'
buyCommands:
- '&epex add %player% %permission%'
price: 10000
slot: 19
Code (Text):
#achievements
wins:
'1':
enabled: true
display-name: '&8&lIt''s my first win!'
description: '&7First bowspleef win.'
commands:
- bs coins add %player% 100
'5':
enabled: true
display-name: '&8&lMy arrows are already on fire!'
description: '&7Win 5 BowSpleef games.'
commands:
- bs coins add %player% 150
games:
'5':
enabled: true
display-name: '&b&lStarting my journey!'
description: '&7Play 5 BowSpleef games.'
commands:
- bs coins add %player% 100
'15':
enabled: true
display-name: '&b&lTrying my best!'
description: '&7Play 15 BowSpleef games.'
commands:
- bs coins add %player% 100
shots:
'50':
enabled: true
display-name: '&b&lArrows everywhere!'
description: '&7Shoot 50 arrows with your bow!'
commands:
- bs coins add %player% 100
'250':
enabled: true
display-name: '&b&lArrow party!'
description: '&7Shoot 250 arrows with your bow!'
commands:
- bs coins add %player% 100
Spoiler: Screenshots







Code (Text):
package com.floodeer.bowspleef;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import com.floodeer.bowspleef.api.ArrowHitEvent;
public class APIExample implements Listener {
/**
* On BowSpleef events
*
* Event list:
* - TNTPrimedDespawnEvent
* - ArrowHitEvent
* - GameStartEvent
* - GameEndEvent
*/
@EventHandler
public void onHit(ArrowHitEvent e) {
Location l = e.getEntity().getLocation();
if(!e.getGame().getGameArena().getArenaCuboid().containsLoc(l)) {
e.getEntity().remove();
}
}
/**
* On bukkit events
*
* API Methods:
* - Getting player data
* getPlayerData(Player bukkitPlayer);
* getPlayerData(UUID uuid);
* getPlayerData(String name);
*
* - Getting a game
* getGame(String name);
* getGame(GamePlayer fromPlayer);
*
* - Leaderboard
* getTopWins(int limit);
* getTopShots(int limit);
*
* - Extra
* saveData(Player... players);
*
*/
@EventHandler
public void onPlayerQuit(PlayerQuitEvent e) {
BowSpleef.getAPI().saveData(e.getPlayer());
}
@EventHandler
public void checkForTop(PlayerJoinEvent e) {
Map<Integer, String> topWins = BowSpleef.getAPI().getTopWins(3);
if(topWins.values().contains(e.getPlayer())) {
e.setJoinMessage("The one of the three bests BowSpleef's player joined the server!");
for(Integer i : topWins.keySet()) {
if(topWins.get(i).equalsIgnoreCase(e.getPlayer().getName())) {
Bukkit.broadcastMessage(e.getPlayer().getName() + " with the position " + i);
}
}
}
}
@EventHandler
public void onSneak(PlayerToggleSneakEvent e) {
if(BowSpleef.getAPI().getPlayerData(e.getPlayer()).isInGame()) {
e.setCancelled(true);
e.getPlayer().sendMessage("You can't sneak here!");
}
}
}