This is a beta version If you spot bugs, please open an issue on GitHub before writing a review.
After seven years and over 30,000 downloads, I decided to completely redo the original Skywarz. This project contains over 17,000 lines of code and more than 190 Java classes, that showcase my skills in Java. Made with security and future extendability in mind.
Legacy versions (< 2.0) are not supported anymore
Overview
Skywarz Features
Multiarena & Bungeecord
Teams (and solo support)
SQL Database support for MySQL, SQLite, Postgres, Microsoft SQL, and more
Multiarena sign (and states) You can create signs for a multiarena server. If you use Bungeecord, you have to use a separate Bungeecord sign plugin that utilizes the motd of the target arena server as the status. It is planned to add Bungeecord signs natively in the future.
(By default) If the color is green, it means a player is able to join the match in theory.
Media [Tutorial and further media follows]
Scoreboards All scoreboards are completely changable through scoreboards.yml
Configurations Skywarz contains many configurations. Not every is listed below, but most are.
Code (YAML):
# <================================================> # Main configuration # Here contained are general purpose settings. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <================================================> bungeecord: # If true, this server is seen as a dedicated Skywarz server. # This implies that only one arena is active at once for this server. enabled: false
# The dedicated arena that is represented by this dedicated server. # If the above boolean is true, a player will be put into a match for this arena. # If the arena does not exist and the player has no setup permission, they are kicked. arena: <Arena
> # The Motd when the Bungeecord mode is enabled (can be used for external analysis) motd: - '
{name
}'
- '
{state.color
}{state.name
}'
# The fallback server players are teleported when a match ends or they leave fallback: lobby
celebration: # If enabled, effects will spawn to celebrate a winner at the lobby when a match is done enabled: true
# The radius in which fireworks randomly spawn to celebrate the winner firework spawn radius: 20.0
# The minimum height offset to the lobby spawn at which fireworks spawn firework height: 5.0
chat: # When a player is not alone in a team, they will automatically only be able to chat # with their team, unless they use one of following tags at the beginning of their message. # The tags are case-insensitive. everyone tag: - '@everyone'
- '@
all'
- '@a'
# Valid units: 'ticks', 'seconds', 'minutes', 'hours' and 'days' duration: # The different durations of all running game phases phases:
DONE:
==: Skywarz.TickDuration
unit: seconds
amount: 15
IDLE:
==: Skywarz.TickDuration
unit: seconds
amount: 45
PLAYING:
==: Skywarz.TickDuration
unit: minutes
amount: 25
# How long players cannot take damage (protection time) protection:
==: Skywarz.TickDuration
unit: seconds
amount: 15
# The interval in which an opened chest is refilled chest refill:
==: Skywarz.TickDuration
unit: minutes
amount: 3
Code (YAML):
# <============================================================> # Language configuration # The primary message definitions in your target language. # This configuration does *not* contain all translations. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <============================================================> prefix: §b
[Skywarz
]§r
successPrefix: §a
[Skywarz
] warningPrefix: §c
[Skywarz
] errors:
generic: '
{warningPrefix
} Error
: {0
}'
syntax: '
{warningPrefix
} Syntax
: {usage
}'
in a match: '
{warningPrefix
} You are in a match already!'
not in a match: '
{warningPrefix
} You are not in a match!'
not a number: '
{warningPrefix
} Value
{0
} is not a number!'
not an integer: '
{warningPrefix
} Value
{0
} is not an integer!'
arena not found: '
{warningPrefix
} Cannot find arena
{0
}!'
permission: '
{warningPrefix
} You do not have the permission for this action!'
command not found: '
{warningPrefix
} Command not found. Try §r/sw help§c.'
match is full: '
{warningPrefix
} Cannot join
: Match is full!'
not a player: '
{warningPrefix
} Argument is not a valid player!'
match:
join:
error: '
{warningPrefix
} You cannot join this match!'
broadcast: §a
[-
]§7 Player §r
{player.name
}§7 has joined the game.
leave:
success: '
{successPrefix
} You left the match!'
broadcast: §c
[-
]§7 Player §r
{player.name
}§7 has left the game.
team switch:
error: '
{warningPrefix
} You cannot join this team!'
priority:
error: '
{warningPrefix
} Match is full. Could not find anyone that is kickable!'
kick: '
{warningPrefix
} You have been kicked for someone that is VIP.'
dequeued: '
{warningPrefix
} An error occurred. You have been dequeued.'
broadcast:
idle:
countdown: '
{prefix
}§7 The game starts in §8
{match.time.left.literal
}§7!'
require players: '
{prefix
}§7 Require §c
{match.missing
}§7 more players to start!'
done:
countdown: '
{prefix
}§7 The match closes in
{match.time.left.literal
}!'
protection:
countdown: '
{prefix
}§7 Protection phase ends in
{time.left.literal
}!'
ended: '
{prefix
} Protection has ended, you are now vulnerable!'
quickstart:
success: '
{successPrefix
} The game will start shortly.'
error: '
{warningPrefix
} Cannot quickstart your match.'
killed: '
{prefix
}§7 Player
{player.team.color
}{player.name
}§7 was killed by
{killer.team.color
}{killer.name
}§7!'
death: '
{prefix
}§7 Player
{player.team.color
}{player.name
}§7 died!'
kit:
select: '
{successPrefix
} You selected the Kit
{player.kit.displayName
}§a!'
assign: '
{successPrefix
} You have been assigned the Kit
{player.kit.displayName
}§a!'
finish:
title:
you won: §aYou won!
you lost: §cYou lost!
team won: Team
{team.displayName
}§r won!
broadcast:
team won: - '
{team.color
}[Skywarz
] Team §l
{team.displayName
} won!'
- '
{team.color
}[Skywarz
] Thanks for using Skywarz!'
chat:
team: '
{sender.team.color
}[TEAM
] §r
{sender.name
}: §7
{message
}'
all: '§8
[ALL]{sender.team.color
}{sender.name
}: §7
{message
}'
spectator: '§8§o
[DEAD
] §7
{sender.name
}: §7
{message
}'
stats:
fetching: '
{prefix
} §7Fetching statistics
...'
none other: '
{warningPrefix
} Player
{target.name
} has
no stats in Skywarz'
none self: '
{warningPrefix
} You have stats in Skywarz'
overview: - '
{prefix
} §7Stats for §8
{target.name
}§7:'
- '{prefix} §8• §7Points: §e
{target.total.points
}'
- '{prefix} §8• §7Played: §b
{target.total.played
}'
- '{prefix} §8• §7Won: §b
{target.total.won
}'
- '{prefix} §8• §7Kills: §b
{target.total.kills
}'
- '{prefix} §8• §7Deaths: §b
{target.total.deaths
}'
- '{prefix} §8• §7K/D: §b
{target.total.kd
}'
- '
{prefix
} §8• §7Win
%: §b{target.total.winChance}' leaderboard:
overview: - '
{prefix
} §7The top §e10§7 of Skywarz:'
- '
{content
}'
- '
{prefix
} §7It can take up to §81h§7 to refresh.'
line: '
{prefix
} §e
#{place}§r {player.name}§7 - {player.stats.points} Points - {player.stats.kd
} K/D'
time:
TICKS:
plural: ticks
singular: tick
SECONDS:
plural: seconds
singular: second
MINUTES:
plural: minutes
singular: minute
HOURS:
plural: hours
singular: hour
DAYS:
plural: days
singular: day
state:
SETUP: Setup
IDLE: Idle
PLAYING: Playing
DONE: Done
team:
RED: Red
GREEN: Green
BLUE: Blue
WHITE: White
BLACK: Black
CYAN: Cyan
ORANGE: Orange
YELLOW: Yellow
PURPLE: Purple
MAGENTA: Magenta
LIME: Lime
GRAY: Gray
Code (YAML):
# <=================================================================> # Scoreboard configuration # Edit to modify the in-game scoreboards shown to participants. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <=================================================================>
# Scoreboard shown during IDLE state idle:
title: ' §lLobby§r '
# The different lines of this scoreboard. # Tip: use less than 15 characters for better readability. lines: - ' '
- 'Map:'
- §b
{match.arena
} - ' '
- 'Kit:'
- '
{player.kit.displayName
}'
playing: # Scoreboard shown during PLAYING state alive:
title: ' §b§lSKYWARZ§r '
# The different lines of this scoreboard. # Tip: use less than 15 characters for better readability. lines: - ' '
- 'Map:'
- §b
{match.arena
} - ' '
- 'Time:'
- §e
{match.time.left.format
} - ' '
- 'Alive:'
- §e
{match.alive
} - ' '
- 'Kills:'
- §c
{player.match.stats.kills
} # Scoreboard shown during PLAYING state dead:
title: ' §b§lSKYWARZ§r '
# The different lines of this scoreboard. # Tip: use less than 15 characters for better readability. lines: - ' '
- 'Map:'
- §b
{match.arena
} - ' '
- 'Time:'
- §e
{match.time.left.format
} - ' '
- 'Alive:'
- §e
{match.alive
} # Scoreboard shown during DONE state done:
title: ' §b§lSKYWARZ§r '
# The different lines of this scoreboard. # Tip: use less than 15 characters for better readability. lines: - ' '
- 'Map:'
- §b
{match.arena
} - ' '
- 'Winner:'
- '
{match.winner.color
}{match.winner.name
}'
- ' '
- §7~§oby aparx
Code (YAML):
# <==============================================================================> # Sign configuration # Edit to update the sign layout of Skywarz signs. # Note: as of the version (see below) these signs only work for multi-arena. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <==============================================================================> lines: - '
{state.color
}§l
[SW
]'
- '
{state.color
}{state.name
}'
- '
{name
}'
- '
{alive
}/
{maxPlayers
}'
Code (YAML):
# <============================================================================> # Primary database configuration # Change the values to have Skywarz connected to your database. # Supported: MySQL, Postgres, Microsoft SQL, H2, Derby, HSQLDB and Sqlite. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <============================================================================>
# True to enable this configured database. # Note: Skywarz will shut down if the connection cannot be established! active: false
# The Java Database Connectivity (JDBC) URL that identifies your target database. # For MySQL, simply replace "<hostname>" and "<database>" with your respective values. # Read: https://tableplus.com/blog/2019/09/jdbc-connection-strings.html jdbc: jdbc:mysql://<hostname>/<database>
username: <username>
password: <password>
Code (YAML):
# <==============================================================================> # Chest configuration # Edit the items and their possibility of appearing in chests! # The higher the weight, the higher the chance the item is put into a chest. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <==============================================================================>
# <========================================> # Kit Selector configuration # Edit to update the item and menu. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <========================================>
# The position of the item in the inventory (0 through 8) slot: 0
# The item with which a player can interact item:
type: chest
name: §bKit selector
enchants:
LUCK: 1
lore: - §8Click to select your kit
flags: - hide enchants
menu: # The title of the kit selector inventory title: Kit Selector
Code (YAML):
# <========================================> # Leave item configuration # Edit to update the item. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <========================================> item:
item:
type: red dye
name: §cLeave
enchants:
LUCK: 2
lore: - §8Click to leave this match
flags: - hide enchants
Code (YAML):
# <========================================> # Quickstart item configuration # Edit to update the item. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <========================================>
# The position of the item in the inventory (0 through 8) slot: 7
# The item with which a player can interact item:
type: nether star
name: §aQuickstart
lore: - §8Click to quick start your lobby
Code (YAML):
# <========================================> # Team selector configuration # Edit to update the item and menu. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <========================================>
# The position of the item in the inventory (0 through 8) slot: 1
# The item with which a player can interact. Use bed, concrete or wool as a type # to have it replaced with the color of the team a player has joined (it being the default). item:
type: white bed
name: §bTeam selector
enchants:
ARROW_KNOCKBACK: 2
lore: - §8Click to select your team
flags: - hide enchants
menu: # The title of the team selector inventory title: Team Selector
team:
status: # Applied to a team item to show a player that they have already joined the team joined: Joined this team
# Applied to a team item to indicate that the team is already full full: This team is full
# Applied to a team item to indicate the team to be joinable joinable: Click to join this team
# Applied to a team item to showcase who joined a team member: §8•
{0
}
Code (YAML):
# <===================================================> # Teleporter item configuration # Edit to update the item and menu. # The teleporter is a menu with which a spectator # can teleport to other living participants. # [[ Skywarz 2.0.0-beta.1 by ~aparx ]] # <===================================================>
# The position of the item in the inventory (0 through 8) slot: 0
# The item with which a player can interact item:
type: compass
name: §7Teleporter
enchants:
LUCK: 2
lore: - §8Click to teleport to players
flags: - hide enchants
menu: # The title of the teleporter inventory title: Teleporter
Skywarz Permissions
skywarz.* Grants permission to anything Skywarz related
skywarz.play (default) Grants the ability to participate in Skywarz matches
skywarz.priority Ensures if the to be joining match is full in idle phase, a non-priority player is kicked to make space
skywarz.setup Grants access to everything setup related (manage, delete and create arenas and more)
skywarz.stats.* Grants permission to anything stats related (read and write)
skywarz.stats.self (default) Grants permission to see the player's own statistics
skywarz.stats.other Grants permission to see the other players' statistics
skywarz.stats.modify Grants permission to modify the stats of players
/sw arena set lobby <Arena> (unsaved) Permission: skywarz.setup, skywarz.* Updates the idle lobby spawn of an arena
/sw arena set spectator <Arena> (unsaved) Permission: skywarz.setup, skywarz.*
/sw arena set point <Arena> <1:2>(unsaved) Permission: skywarz.setup, skywarz.* Sets a playground corner, i.e. the box in which all spawns exist and players can freely move and play within. It explicitly defines the area that is arena-reset by default.
/sw arena add spawn <Arena> <Team> (unsaved) Permission: skywarz.setup, skywarz.* Adds a spawn to given team and arena. The amount of spawns can be independant to the final maximum team size. Players spawn randomly for their given team (if possible).
/sw arena remove spawn <Arena> <Team> (Spawn-ID) (unsaved) Permission: skywarz.setup, skywarz.* Removes the given spawn or all spawns from given team.
/sw arena save <Arena> Saves and applies all changes for an arena. If a match is currently ongoing in that arena, the changes won't apply to that specific match.
Extra arena rules (modification of arenas;
unsaved):
/sw arena set rule team.size <Arena> <Number> Permission: skywarz.setup, skywarz.* Updates the maximum team size for the arena (default: 2)
/sw arena set rule world.weather <Arena> <clear:downfall> Permission: skywarz.setup, skywarz.* Updates the perceived weather environment for all participants (default: clear)
/sw arena set rule world.time <Arena> <Number> Permission: skywarz.setup, skywarz.* Updates the world time for all participants (default: 6000)
/sw arena set rule refill <Arena> <true:false> Permission: skywarz.setup, skywarz.* Toggles chest refills for given arena (default: true)
/sw arena set phase.protection <Arena> <true:false> Permission: skywarz.setup, skywarz.* Toggles the protection phase for given arena (default: true)
Bungeecord commands:
/sw bungee update <Arena> Permission: skywarz.setup, skywarz.* Updates the dedicated arena in which players are put when they join the server, if Bungeecord is enabled
/sw bungee toggle (true:false) Permission: skywarz.setup, skywarz.* Enables or disables the Bungeecord mode. This only works if a valid dedicated arena has been set (see /sw bungee update)
Kit commands:
/sw kit create <DisplayName...> Permission: skywarz.setup, skywarz.* Creates an empty kit with given display name. The final name will be the display name but without color codes.
/sw kit edit <KitName...> Permission: skywarz.setup, skywarz.* Enters the kit edit mode, in which the player inventory will represent the kit's inventory one-to-one when saved.
/sw kit save:cancel Permission: skywarz.setup, skywarz.* Leaves and saves or cancels the kit edit mode
Note: to edit the kit icon you still have to go to the
kits.yml. Future versions may implement a way to update kit icons using commands.
Tip: you can use color codes (using ampersands '&') on all items for kits!
Servers using this plugin Shoot me a DM if you want your server to be listed here.
Track the process You can track how Skywarz is developing, what is planned, what is currently being developed and more in Skywarz' GitHub!
I hope you like this plugin. Please leave feedback in DMs.
This is an alpha version, thus bugs can occur.
If you see a bug, please open an issue on GitHub.