Paintball Battle | Team Minigame | [1.8-1.21.1] icon

Paintball Battle | Team Minigame | [1.8-1.21.1] -----

Fully configurable Paintball minigame. KillStreaks, Hats, Perks and more!



[​IMG]

ATTENTION: NO MORE FUNCTIONALITIES WILL BE ADDED TO THIS PLUGIN.

What is Paintball Battle?
Paintball Battle is a minigame which basically consist in 2 teams throwing snowballs to their opponents. At the beginning of the game, both teams have a certain amount of lives. Every time a user is killed, 1 life will be discounted from his team. The first team to reach 0 lives will lose the game.

- Every hit with a snowball is a kill.
- When you are killed you will spawn in your Team's Spawn.
- When you make a kill you earn KillCoins.
- Multiple arenas can be running at the same time.

To help your team win the battle, you can buy KillStreaks using killcoins, unlock Hats that give you abilities during the game, or permanent perks. Arenas are pretty easy to create, and most of the plugin is configurable.

[​IMG]

Requirements and Dependencies:
- SPIGOT (not craftbukkit)
- HolographicDisplays (Optional, for Top Holograms) https://dev.bukkit.org/projects/holographic-displays
- Vault (Optional, for Economy) http://dev.bukkit.org/bukkit-plugins/vault/
- PlaceholderAPI (Optional, for the scoreboard and chat)
https://www.spigotmc.org/resources/placeholderapi.6245/

If you want to help me maintain this project alive, I would be grateful if you donate and support my work :)

[​IMG]
- Fully Configurable
  • Arena Cooldowns, Time and Team Lives.
  • Teams Customization (Name, Color, Item).
  • Inventories Customization.
  • Sounds.
  • Winners Command Rewards.
  • All Messages.
- 8 KillStreaks (more incoming, you can suggest one!)
  • More Snowballs (You will receive extra snowballs)
  • Strong Arm (You will throw snowballs at high speed)
  • Triple Shoot (You will throw 3 snowballs at a time)
  • +3 Lives (Regain 3 Lives for your team)
  • Teleport (Teleports you to your death location)
  • Lightning Strike (Kills your sorrounding enemies in a radius)
  • Nuke (Kills all of your enemies)
  • Fury Mode (You will be immune to snowballs, and you won't consume them)
- 9 Hats (more incoming, you can suggest one!)
  • Speed Hat (Gives you permanent Speed I)
  • Jump Hat (Gives you Jump I when sneaking for X seconds)
  • Protector Hat (Gives you a small chance of dodging snowballs hits)
  • Time Hat (All of your killstreaks last X more seconds)
  • Guardian Hat (Gives you Invulnerability and Slowness II when sneaking for X seconds)
  • Present Hat (At the start of the game one of your teammates will receive 3 killcoins)
  • Assassin Hat (Killing the user who last killed you will give you an extra killcoin)
  • Chicken Hat (You will shoot eggs instead of snowballs)
  • Explosive Hat (Gives you a small chance of exploding when you are killed, killing nearby enemies)
- 3 Permanent Perks with Configurable levels
  • Extra Lives (Allows you to start the game with additional lives)
  • Initial Killcoins (Allows you to start the game with additional killcoins)
  • Extra Killcoins (Allows you to receive additional killcoins when doing a kill)
- Top Holograms for Wins and Kills (Global, Monthly, Weekly)
- Multiple Arenas
- Per Arena Chat
- Play Again Item
- Command Whitelist
- PlaceholderAPI variables and support for Scoreboard and Chat
- MySQL Database
- 3 Types of Economies
(Paintball, Vault or TokenManager)
- API
- Save players wins, loses, ties, kills
- Works in 1.8+


[​IMG]
Before creating an arena it's important to set the Main Lobby using /paintball setmainlobby

Creating a Paintball arena is very easy, just follow these steps.
1) Use the /paintball create <arena> command.
2) Use the /paintball edit <arena> command to open the GUI Inventory where you can set arena properties.
3) Set the Arena Lobby by clicking the first item. Players will spawn at your location when entering the arena.
4) Set the Team 1 and Team 2 Spawns by clicking the second and third item.
5) You can use the other items to modify some Arena properties like time, amount of starting lives, min and max players and Team colors.
[​IMG]
6) Now, use the /paintball enable <arena> command to be able to play on it.
7) Finally, you can create a Sign to join the arena. Just use the following format:
[Paintball]
arena_name

[​IMG]
8) If you want to edit the arena again, remember to disable it first using /paintball disable <arena>

[​IMG]
Most of the aspects of the plugin are configurable, but NOT ALL OF THEM. If you want something to be modifiable just ask me and I will try to add a config for it!

#Cooldown to start the game when reaching the minimum amount of players.
arena_starting_cooldown: 20

#Duration of the game.
arena_time_default: 360

#Duration of the last phase when ending the game.
arena_ending_phase_cooldown: 10

#When enabled, players will be able to choose their team before the game starts.
choose_team_system: true

#Lives of each team.
team_starting_lives_default: 100

#Invulnerability period in seconds when a user is killed.
respawn_invulnerability: 4

#How many snowballs will the player receive when doing a kill.
snowballs_per_kill: 8

#The initial amount of snowballs of the players when the game starts.
initial_snowballs: 64

#How many killcoins does the player will receive when doing a kill.
#You can use "-" to set a random number between two numbers. "1-3" means the player could will 1, 2 or 3 killcoins.
coins_per_kill: "1-2"

#When creating a player top hologram using /rvp createtophologram command, how many players should the hologram display?
top_hologram_number_of_players: 10

#How often should the top holograms be updated? (in seconds)
top_hologram_update_time: 300

#Type of economy used for the Paintball Shop. You can use "paintball", "vault" or "token_manager".
economy_used: "paintball"

#If this option is set to true, players will receive the rewards when they are teleported back to the lobby. This allows you to give Item rewards, but if the user leaves the game when the arena is finishing, he won't receive any reward. If the option is set to false, players will receive the rewards inside the arena, just right after finishing the game.
rewards_executed_after_teleport: false

#If enabled, a message will be sent to all players in these worlds when a paintball arena is about to start.
broadcast_starting_arena:
enabled: true
worlds:
- "paintball"
- "lobby"


#Here you can create your own teams to define when setting up an arena. It doesn't necessarily must be the name of a color. You can add your own armor color for each team using the color ID from this link: https://minecraftcommand.science/armor-color
teams:
blue:
name: "&1&lBlue"
color: 18175
item: "BLUE_WOOL"
red:
name: "&4&lRed"
color: 16711680
item: "RED_WOOL"


#These commands will be enabled when playing.
commands_whitelist:
- "/paintball leave"
- "/help"


#Whether the Paintball chat system should be enabled or not.
arena_chat_enabled: true

#The chat format when playing Paintball.
arena_chat_format: "&f<&8[&7%team%&8] &a%player%&f> %message%"

#The leave item will appear when the game is starting and finishing.
leave_item_enabled: true

#The killstreaks item is used for opening the KillStreaks menu and will appear during the game.
killstreaks_item_enabled: true

#The hats item is used to select a hat which gives special abilities before the game.
hats_item_enabled: true

#The play again item will appear when the game is finishing.
play_again_item_enabled: true

#Commands to be executed to the winners/losers/ties of a game.
#You can use the %random% variable to generate a random number, using the final kills of the player, just follow this format:
%random_min-max%
min and max values could be a formula. You can use the 'kills' variable in this formula.

winners_command_rewards:
- "msg %player% &aYou've won! Here, take this reward."
- "paintball givecoins %player% %random_10*kills-20*kills%"


#You need to use a valid sound name for your Minecraft Version
#1.8: https://github.com/Attano/Spigot-1.8/blob/master/org/bukkit/Sound.java
#1.9+: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Sound.html
#Format: "Sound;Volume;Pitch"
killedBySound: "BLOCK_NOTE_BLOCK_PLING;10;0.1"
killSound: "ENTITY_FIREWORK_ROCKET_BLAST;10;2"
expireKillstreakSound: "BLOCK_NOTE_BLOCK_BASEDRUM;10;2"
snowballShootSound: "ENTITY_ARROW_SHOOT;10;0.5"
shopUnlockSound: "ENTITY_FIREWORK_ROCKET_BLAST;10;2"
hatAbilityActivatedSound: "BLOCK_CHEST_OPEN;10;1.5"
explosiveHatSound: "ENTITY_GENERIC_EXPLODE;10;1"
startCooldownSound: "BLOCK_NOTE_BLOCK_PLING;10;1"
startGameSound: "BLOCK_NOTE_BLOCK_PLING;10;2"

#Here you can define the particle to display when throwing snowballs. You should use particles listed here: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Particle.html
Set it to 'none' to not display particles.
snowball_particle: SNOW_SHOVEL

#Players will be able to buy killstreaks during a game using killcoins. Each of the killstreaks have their own properties.
#You need to use a valid item Name for your Minecraft Version
#1.8-1.12: https://helpch.at/docs/1.8/org/bukkit/Material.html
#1.13+: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html
#For the activateSound the format is "sound;volume;pitch;global" If you add the "global" argument it means all of the players in the game will hear it.
#You can disable a killstreak by setting the slot to -1
killstreaks_items
more_snowballs:
item: SNOWBALL
name: "&6&lMore Snowballs"
lore:
- "&7You will receive 32 extra snowballs."
- ""
- "&7Cost: &a2 Killcoins"
- ""
- "&aClick to activate!"
slot: 0
snowballs: 32
cost: 2
activateSound: "ENTITY_VILLAGER_YES;10;1"


#Players will be able to select an already unlocked hat from the shop. Here you can define their properties.
hats_items:
jump_hat:
item: SLIME_BLOCK
name: "&6&lJump Hat"
lore:
- "&7Gives you Jump I when sneaking for"
- "&710 seconds."
- ""
- "&7Status: %status%"
duration: 10
cooldown: 30
Most of this file is just translation of items so I am going to explain you just the important sections.

#Players will be able to buy permanent perks for their Paintball games on the shop. Here you can define the possible levels of these perks. You can add your own levels for the 3 types of perks. Just follow the format below.
#Format: "amount;cost;name_of_the_perk"
#Extra Lives Perk: Allows your team to start with additional lives.
#Initial KillCoins: Allows you to start with additional killcoins.
#Extra KillCoins: Allows you to receive more killcoins when doing a kill.
perks_upgrades:
extra_lives:
- "1;1000;&6&lExtra Lives I"
- "2;2000;&6&lExtra Lives II"
- "3;4000;&6&lExtra Lives III"
- "4;6000;&6&lExtra Lives IV"
- "5;8000;&6&lExtra Lives V"

#You can disable any item by setting the slot to -1
Code (YAML):
prefix : "&7[&9&lPaintball Battle&7]"
noPermissions
: "&cYou don't have permissions to use that command."
arenaDoesNotExists
: "&cThat arena doesn't exists."
arenaAlreadyExists
: "&cThat arena already exists."
commandCreateErrorUse
: "&cYou need to use &7/paintball create <arena>"
commandDeleteErrorUse
: "&cYou need to use &7/paintball delete <arena>"
commandJoinErrorUse
: "&cYou need to use &7/paintball join <arena>"
commandEnableErrorUse
: "&cYou need to use &7/paintball enable <arena>"
commandDisableErrorUse
: "&cYou need to use &7/paintball disable <arena>"
commandAdminErrorUse
: "&cYou need to use &7/paintball edit <arena>"
commandCreateHologramErrorUse
: "&cYou need to use &7/paintball createtophologram <name> <kills/wins> <global/monthly/weekly>"
commandRemoveHologramErrorUse
: "&cYou need to use &7/paintball removetopholgram <name>"
commandGiveCoinsErrorUse
: "&cYou need to use &7/paintball givecoins <player> <amount>"
noMainLobby
: "&cBefore creating an arena you need to set the Main Lobby with: &7/paintball setmainlobby"
arenaCreated
: "&aArena &e%name% &acreated!"
arenaDeleted
: "&aArena &e%name% &adeleted!"
arenaCreatedExtraInfo
: "&7Now you can use &6/paintball edit %name% &7to set the arena properties."
configReloaded
: "&aConfig Reloaded."
lobbyDefined
: "&aLobby defined for arena &e%name%&a."
spawnTeamDefined
: "&aTeam %number% Spawn defined for arena &e%name%&a."
typeDefined
: "&aTeam %number% Type defined for arena &e%name%&a."
validNumberError
: "&cYou need to use a valid number."
minPlayersDefined
: "&aMin Players defined for arena &e%name%&a."
maxPlayersDefined
: "&aMax Players defined for arena &e%name%&a."
timeDefined
: "&aTime defined for arena &e%name%&a."
livesDefined
: "&aStarting Lives defined for arena &e%name%&a."
mainLobbyDefined
: "&aMain Lobby defined."
arenaDisabledError
: "&cThat arena is disabled."
alreadyInArena
: "&cYou are already in a game."
arenaAlreadyStarted
: "&cThat arena already started."
arenaIsFull
: "&cThat arena is full."
notInAGame
: "&cYou are not in a game."
arenaAlreadyEnabled
: "&cThat arena is already enabled."
arenaAlreadyDisabled
: "&cThat arena is already disabled."
arenaMustBeDisabled
: "&cThe arena must be disable to do that."
arenaModifyingError
: "&cOnly one arena can be modified at a time."
arenaEnabled
: "&aArena &e%name% &aenabled."
arenaDisabled
: "&aArena &e%name% &adisabled."
enableArenaLobbyError
: "&cTo enable the arena you need to define the Lobby first."
enableArenaSpawnError
: "&cTo enable the arena you need to define the Team %number% Spawn first."
signFormat
:
- "&8[&9Paintball&8]"
- "&1%arena%"
- "%status%"
- "&a%current_players%&8/&a%max_players%"
signStatusWaiting
: "&1WAITING"
signStatusStarting
: "&6STARTING"
signStatusIngame
: "&cINGAME"
signStatusDisabled
: "&8DISABLED"
signStatusFinishing
: "&4FINISHING"
arenaStartingMessage
: "&eThe game starts in &7%time% &eseconds!"
gameStartingCancelled
: "&7There are not enough players to start the game."
playerJoin
: "&7%player% &ehas joined the game (&b%current_players%&8/&b%max_players%&e)"
playerLeave
: "&7%player% &ehas left the game (&b%current_players%&8/&b%max_players%&e)"
gameStarted
: "&aGame started! The team with the most lives at the end of the game is the winner."
teamInformation
: "&eYou are on the &7&l%team% &eTeam."
gameFinishedWinnerStatus
: "&a&l            %winner_team% &eTeam have won!"
gameFinishedTieStatus
: "&e&l            It's a tie!"
topKillsNone
: "&aNone"
gameFinished
:
- "&f&l
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : "
- "
%status_message%"
- ""
- "&9%team1% &ekills: &7%kills_team1% &8- &9%team2% &ekills: &7%kills_team2%"
- ""
- "&f&lTop Kills"
- "&8- &a%player1% &7(&e%kills_player1% kills&7)"
- "&8- &a%player2% &7(&e%kills_player2% kills&7)"
- "&8- &a%player3% &7(&e%kills_player3% kills&7)"
- ""
- "&7Your Kills
: &e%kills_player%"
- "&f&l
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : "
winnerTitleMessage: "
&a&lYou've won! "
loserTitleMessage: "
&c&lYou've lost! "
tieTitleMessage: "
&9&lIt's a tie! "
teamSelected: "
&eYou selected to be in &7&l %team% &eTeam."
errorTeamSelected
: "&cYou can't select that team right now."
errorTeamAlreadySelected
: "&cYou are already on that team."
teamInformationNone
: "NONE"
killedBy
: "&cYou have been killed by &6%player%&c."
kill
: "&aYou have killed &6%player%&a."
materialNameError
: "&cThere is an error on your config. Material: &7&l%material% &cis not valid for your Minecraft version."
teamChoose
: "&eChoose &7&l%team% &eTeam"
gameScoreboardTitle
: "&9&lPAINTBALL"
gameScoreboardBody
:
- "&1"
- "&fStatus:"
- "&7%status%"
- "&2"
- "&7&l%team_1% &fLives: &a%team_1_lives%"
- "&7&l%team_2% &fLives: &a%team_2_lives%"
- "&3"
- "&fYour Kills
: &a%kills%"
- "&fMap
: &a%arena%"
- "&4"
- "&fPlayers:"
- "&a%current_players%&7/&a%max_players%"
statusWaiting
: "&7WAITING"
statusStarting
: "&7STARTING IN &a%time%"
statusIngame
: "&7ENDS IN &a%time%"
statusFinishing
: "&7FINISHING IN &a%time%"
noSufficientCoins
: "&cYou don't have the sufficient amount of Killcoins to buy that."
killstreakActivated
: "&aYou've activated &6%killstreak%&a!"
killstreakAlreadyActivated
: "&cThat Killstreak is already activated!"
killstreakExpired
: "&cYour &6%killstreak% &ckillstreak has expired!"
killstreakCurrentlyActive
: "&7Active for &a%time% &7seconds."
killstreakActionbar
: "&eYour %killstreak% &ekillstreak expires in &c%time% &eseconds!"
killstreakActivatedPlayer
: "&8[&7%team%&8] &a%player% &eactivated %killstreak%&e!"
nukeImpact
: "&c&lNUKE IMPACT IN: &f%time%"
nukeError
: "&cA Nuke is already on progress!"
nukeKillMessage
: "&8[&7%team_player1%&8] &a%player1% &ewas nuked by &8[&7%team_player2%&8] &a%player2%"
noArenasAvailable
: "&cThere are no arenas available."
topHologramFormat
:
- "&9&lPaintball &a%type%"
- "&8[&7%period%&8]"
- "%scoreboard_lines%"
topHologramTypeKills
: "Kills"
topHologramTypeWins
: "Wins"
topHologramPeriodGlobal
: "All Time"
topHologramPeriodMonthly
: "Monthly"
topHologramPeriodWeekly
: "Weekly"
topHologramScoreboardLine
: "&e%position%. &a%name% &7- &e%points%"
topHologramCreated
: "&aTop Hologram created!"
topHologramRemoved
: "&aTop Hologram removed!"
topHologramAlreadyExists
: "&cThat hologram already exists! Use another name."
topHologramDoesNotExists
: "&cThat hologram doesn't exists!"
topHologramPeriodSQLError
: "&cTo create Weekly or Monthly Holograms you need to set up a MySQL database."
errorPlayerOnline
: "&cThe player must be online to do that."
giveCoinsMessage
: "&aYou gave &e%amount% &acoins to &e%player%&a."
buyNoSufficientCoins
: "&cYou don't have enough coins to buy that."
perkErrorPrevious
: "&cYou need to unlock the previous perk level."
perkErrorUnlocked
: "&cYou've already unlocked that perk."
perkUnlocked
: "&aPerk %name% &aUnlocked!"
hatErrorBought
: "&cYou've already bought that hat."
hatBought
: "&aHat %name% &abought!"
hatStatusSelected
: "&aSELECTED"
hatStatusNotSelected
: "&cNOT SELECTED"
hatSelected
: "&aHat %name% &aselected!"
hatAlreadySelected
: "&cYou've already selected that hat."
hatRemoved
: "&aYour hat was removed."
presentHatReceive
: "&aYou've just received 3 Killcoins from &e%player% &9&lPresent Hat&a!"
presentHatGive
: "&aYou've just gived 3 Killcoins to &e%player%&a!"
hatAbilityActivated
: "&7Hat ability activated!"
hatCooldownError
: "&cYou need to wait &7%time% &cseconds to use your Hat ability again."
hatCooldownFinished
: "&7You can use your Hat ability again."
For this to work you need to add my plugin to your plugin external jars dependencies and to set softdepends: PaintballBattle on your plugin.yml file.

Code (Java):
//Returns some player data
int wins = PaintballAPI. getWins ( String player ) ;
int loses = PaintballAPI. getLoses ( String player ) ;
int ties = PaintballAPI. getTies ( String player ) ;
int kills = PaintballAPI. getKills ( String player ) ;

//Paintball Coins methods (not KillCoins)
int coins = PaintballAPI. getCoins (Player player ) ;
void addCoins (Player player, int coins ) ;
void removeCoins (Player player, int coins ) ;

//Hat methods
boolean hasHat = PaintballAPI. hasHat (Player player, String hat ) ;
boolean hasHatSelected = PaintballAPI. hasHatSelected (Player player, String hat )
ArrayList <Hat > hats = PaintballAPI. getHats (Player player )

//Perks methods
int perkLevel = PaintballAPI. getPerkLevel (Player player, String perk )
ArrayList <Perk > perks = PaintballAPI. getPerks (Player player )

PlaceholderAPI/Paintball Battle Variables
You can use these Paintball Battle variables in any other plugin with PlaceholderAPI support.
%paintball_wins%
%paintball_loses%
%paintball_ties%
%paintball_kills%
%paintball_coins%
%paintball_arenaplayers_count_<arena>%
%paintball_arena_status_<arena>%


Translations
Spanish (by @leowww213122 )
Portuguese (by @Brasil150200)

[​IMG]
-/paintball create <arena> Creates a new arena.
-/paintball delete <arena> Deletes an arena.
-/paintball join <arena> Joins an arena.
-/paintball joinrandom Joins a random arena.
-/paintball leave Leaves from the arena.
-/paintball shop Opens the Paintball Shop.
-/paintball givecoins <player> <amount> Gives Paintball coins to a player.
-/paintball setmainlobby Defines the minigame main lobby.
-/paintball enable <arena> Enables an arena.
-/paintball disable <arena> Disables an arena.
-/paintball edit <arena> Edit the properties of an arena.
-/paintball createtophologram <name> <kills/wins> <global/monthly/weekly>
-/paintball removetophologram <name>
-/paintball reload
Reloads the configuration files.

[​IMG]
Just one for now: paintball.admin

[​IMG]
[​IMG]

Videos:
English by @SoulStriker_


English by @ericbarbwire


German by @KeniiY


Please avoid posting bad ratings before asking for help. If you have problems or bugs with the plugin contact with me or post on the plugin discussion and I will take a look at it.

[​IMG]
Resource Information
Author:
----------
Total Downloads: 18,203
First Release: Mar 30, 2020
Last Update: Sep 24, 2024
Category: ---------------
All-Time Rating:
100 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings