Domination | Leaderboards | Classes or Kits | Special Effects/Systems | Mounts | Bungee/ MultiArena
Select your Wizard class and capture the map objectives to score.
Check out the WIKI for more info!
If you have any issues, report via discussion or private message. Do not use the rating area to report bugs or request features. Please go to discussion.
If you don't want to have skills and want to enable a kit system this is 100% possible, this system will be available soon with more gamemodes.
Wizards can run all systems by itself, however, you can install Holographic Displays to enable Leaderboards and Vault to work with global economy.
You can also install ItemBridge to hook with QualityArmory. You should be able to use CrackShot without ItemBridge.
The following placeholders are available, they are self explanatory:
%wizards_wins%
%wizards_gamesplayed%
%wizards_losses%
%wizards_kills%
%wizards_assists%
%wizards_deaths%
%wizards_damagecaused%
%wizards_healingdone%
%wizards_balance%
%wizards_kit_name%
%wizards_kit_displayname%
%wizards_class_name%
%wizards_class_displayname%
-- Arena Placeholders --
%wizards_arena_players_{arena}%
%wizards_arena_max_players_{arena}%
%wizards_arena_min_xplayers_{arena}%
%wizards_arena_status_{arena}%
%wizards_points-to-win_{arena}%
Usage example (DeluxeMenus):
An extra placeholder is %wizards_team_color% that returns player's team color, if in game. This was added in case you need to use a third party nametag plugin.
Required permission: wizards.setup
First of all set global spawn using /wizards setgspawn
Objectives are a 3x3 area with e beacon on center.
Optional setup commands
Sign format:
Video:
Leaderboards
You need HolographicDisplays to work with Leaderboards, just use the placeholder:
Placeholders:
Command: wizards
Aliases: wzds, wrz.
Manager commands
Others:
The main objective of all classes are the same - shoot a spell or projectile to cause damage, you will decide everything else of the class.
Suggestions for classes are appreciated.
You can modify everything of all classes, the damage, explosion area and more.
display-name: 'Aquamancer'
description:
- '&9Aquamancer'
- ' '
- '&7Shots a spell of Aqua'
- '&7causing damage to enimies and'
- '&7healing teammates.'
price: 500
mana-cost-per-use: 25
mana-per-hit: 2
max-distance: 80
damage: 2.5
damage-area: 4.0
explosion-radius: 2.5
display-item: 'IRON_AXE: 1'
weapon: 'IRON_AXE : 1 : name:&bHealing'
helmet: 'IRON_HELMET : 1'
chestplate: 'IRON_CHESTPLATE : 1'
leggings: 'IRON_LEGGINGS : 1'
boots: 'IRON_BOOTS : 1'
scripts: []
target-scripts: []
By setting Options.Use-Class-Permission-As-Owned to true, players with the class permission will be able to select the class without needing to purchase it.
If Options.Use-Class-Permission-As-Owned is set to false, players will need the permission to purchase the class.
For that, make sure to add a 'permission' line to the class file, for example:
With version 3.0 or above you can give items to players using Classes.
display-name: 'Herobrine'
description:
- '&9Herobrine'
- ' '
- '&7Shots a spell of Lightning'
- '&7causing with &c3.0❤ &7of damage.'
price: 1000
mana-cost-per-use: 35
mana-per-hit: 1
max-distance: 80
damage: 6.0
damage-area: 5.0
explosion-radius: 4.5
weapon: 'GOLDEN_AXE : 1 : name:&bStrike'
helmet: 'IRON_HELMET : 1'
chestplate: 'IRON_CHESTPLATE : 1'
leggings: 'IRON_LEGGINGS : 1'
boots: 'IRON_BOOTS : 1'
scripts: []
target-scripts: []
items:
- 'ARROW : 64'
So just add
items:
- 'ITEM : AMOUNT'
Full tutorial on items can be found in pyromancer.yml at your classes folder.
A quick note on this, you cannot use the class reload command when using the API to inject a new class, it will not register the class injected via API. Create your own reload command and access the API to manually reload and register your class again.
To create your own class, simple create a new Class that extends WizardClass and register on your onEnable using
WizardClasses.injectClass(Class<? extends WizardClass> clazz, String name, String fileName);
Where Class<? extends WizardClass> will be your Class, name the (original) name of the class and fileName the file name that will be generated.
After that, you need to manually add your class to the shop.yml.
Example:
import com.floodeer.wizards.Wizards;
import com.floodeer.wizards.game.GamePlayer;
import com.floodeer.wizards.game.classes.WizardClass;
import com.floodeer.wizards.particles.ParticleEffect;
import com.floodeer.wizards.script.ScriptManager;
import com.floodeer.wizards.util.ItemFactory;
import com.floodeer.wizards.util.LocationUtils;
import com.floodeer.wizards.util.Util;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import java.io.File;
public class Reaper extends WizardClass {
public Reaper(String name, File configFile) {
super(name, configFile);
}
@Override
public void give(Player player) {
player.getInventory().addItem(ItemFactory.unbreakable(getWeapon()));
player.getInventory().setHelmet(ItemFactory.unbreakable(getHelmet()));
player.getInventory().setChestplate(ItemFactory.unbreakable(getChesplate()));
player.getInventory().setLeggings(ItemFactory.unbreakable(getLeggings()));
player.getInventory().setBoots(ItemFactory.unbreakable(getBoots()));
}
@Override
public void onInteract(Player player) {
GamePlayer gp = GamePlayer.get(player.getUniqueId());
if (gp.getMana() < getManaCost()) { //Mana Manager
if(!Wizards.get().getMessages().enoughMana.isEmpty())
gp.getP().sendMessage(Util.colorString(Wizards.get().getMessages().enoughMana.replaceAll("%prefix%", Wizards.get().getMessages().prefix)));
if(!Wizards.get().getOptions().enoughMana.isEmpty())
Util.playSound(gp.getP(), Wizards.get().getOptions().enoughMana);
} else {
ScriptManager.run(gp, getScript()); //Script system, if enabled
gp.setMana(gp.getMana() - getManaCost()); //Remove player mana
//Skill start
Location location = player.getLocation();
//Skill Particle Effect
LocationUtils.getCircle(location.clone().add(0.0D, 1.0D, 0.0D), 5.0D, 40).forEach(l -> {
ParticleEffect.CRIT_MAGIC.display(0.0F, 0.0F, 0.0F, 0.1F, 3, l, 126);
ParticleEffect.CLOUD.display(0.0F, 0.0F, 0.0F, 0.01F, 1, l, 126);
});
//Apply skill damage and effects
Util.filterAreaDamage(player, getDamage(), location, getAreaDamage(), false, Wizards.get().getMessages().magic).forEach(target -> {
ScriptManager.run(gp, GamePlayer.get(target), getTargetScript());
GamePlayer targetgp = GamePlayer.get(target);
targetgp.setMana(0);
target.sendMessage(Util.colorString("&cYour mana has been devoured by &4" + player.getName() + "&c!"));
});
//Skill end
}
}
}
To tell Wizards that you have a class to add, add the following code to your onEnable
WizardClasses.injectClass(Reaper.class, "Reaper", "reaper.yml");
Where Reaper is the class that extends WizardClass, Reaper is the Original name and reaper.yml the class file name that will be generated so you can change it however you want.
After creating the class, you need to manually add to the shop.yml;
reaper:
item: 'DIAMOND_SWORD : 1'
name: '&6Reaper Class'
lore:
- '&7Removes mana from'
- '&7nearby players.'
slot: 23
Where's everything you need from WizardClass
public String getOriginalName();
public String getDisplayName();
public List getDescription();
public int getPrice();
public int getMaxDistance();
public int getManaCost();
public ItemStack getHelmet();
public ItemStack getChesplate();
public ItemStack getLeggings();
public ItemStack getBoots();
public ItemStack getWeapon();
public double getDamage();
public double getAreaDamage();
public double getExplosionRadius();
public List getScript();
public List getTargetScript();
public int getManaPerHit();
public Collection getEffects();
public List getItems();
Everything from here is taken from your class.yml, you can, of course, ignore all of that and create the class however you want without interacting with the class file.
That's it! There was no plan to let you add Classes via the API, but since it was possible to make it work... why not.
You can either disable or limit the explosions from the special abilities.
To turn explosions off, go to settings.yml and set Explosions to false.
You can also limit the explosion, for example, you can disable explosions for blocks below Y coordinate:
Map config option at Min-Y-Explosions
You can use Kits instead of classes.
Enabling Use-Kits-Instead-Of-Classes in options.yml will disable all Game Effects caused by the Classes
You can add these lines to execute commands, both of them has the %player% placeholder.
A kit.yml file will be created and you will be able to add your kits.
[SPOILER="kits.yml"]
inventory:
name: '&9Kits'
rows: 3
Kits:
fighter:
needs-permission: false
permission: ""
slot: 0
price: 0
display-item: 'DIAMOND_SWORD : 1 : name:&6Fighter'
helmet: 'IRON_HELMET : 1'
chestplate: 'IRON_CHESPLATE : 1'
leggings: 'IRON_LEGGINGS : 1'
boots: 'IRON_BOOTS : 1'
items:
- 'DIAMOND_SWORD : 1'
lore:
- '&7Fighter Kit'
warrior:
needs-permission: true
permission: "wizards.kits.warrior"
slot: 1
price: 100
display-item: 'DIAMOND_AXE : 1 : name:&6Warrior'
helmet: 'IRON_HELMET : 1'
chestplate: 'IRON_CHESPLATE : 1'
leggings: 'IRON_LEGGINGS : 1'
boots: 'IRON_BOOTS : 1'
items:
- 'DIAMOND_AXE : 1'
lore:
- '&7Warrior kit'
archer:
needs-permission: true
permission: "wizards.kits.archer"
slot: 2
price: 200
display-item: 'BOW : 1 : name:&6Archer'
helmet: 'IRON_HELMET : 1'
chestplate: 'IRON_CHESPLATE : 1'
leggings: 'IRON_LEGGINGS : 1'
boots: 'IRON_BOOTS : 1'
items:
- 'BOW : 1'
- 'ARROW : 64'
lore:
- '&7Archer kit'
[/SPOILER]
Some users are using Wizards as a TDM Gamemode and/or playing with Guns, this is totally possible! You can disable all game objectives and set points per kill.
For the default Domination gamemode, you can check those options below.
Examples
Options:
Game:
Mana-Update-Type: '75'
This means that the update type is set to TICK_2 (1 mana every0,075s)
SEC = 1000 (1s)
FAST = 500 (0,5s)
FASTER = 250 (0,25s)
FASTEST = 125 (0,125s)
TICKS_2 = 75 (0,075s)
TICK = 49 (0,049s)
Disabled by default. Enable it at options.yml.
When enabled, a new file will be generated, levels.yml, with this file you will be able to add your levels, rewards and more:
Levels:
Level-1: #Do not change the Level-1 section
exp: 0 #Required Exp
display-name: "&6Level 1" #Display name in level up message
prefix: "&6[1]" #Chat prefix, if enabled, hooked to PAPI
commands-to-execute: [] #Commands to execute when reaching the level
level-up-message: [] #Message to display
Level-2: #From now on you can change
exp: 10
display-name: "&6Level 2"
prefix: "&6[2]"
commands-to-execute:
- wizards coins add %player% 100
level-up-message:
- '&7&m--------------&7[&6&lWIZARDS&7]&m--------------'
- ''
- '&a&lLevel Up &e&l%level%'
- ''
- '&9Next level: &b%next_level% &7(%until_next_level%/%next_level_exp% EXP)'
- ''
- '&7&m-------------------------------------'
Level-3:
exp: 20
display-name: "&6Level 3"
prefix: "&6[3]"
commands-to-execute:
- wizards coins add %player% 100
level-up-message:
- '&7&m--------------&7[&6&lWIZARDS&7]&m--------------'
- ''
- '&a&lLevel Up &e&l%level%'
- ''
- '&9Next level: &b%next_level% &7(%until_next_level%/%next_level_exp% EXP)'
- ''
- '&7&m-------------------------------------'
Please do not change Level-1 as it is the default Database value, you can just use display-name to not show "Level-1" in game, the section name is just a backend thing.
Note that the reload command will not apply changes for levels.yml ATM.
Players can earn Exp by playing, kills/assists, wins cand capturing points, check options.yml and you will see a new Exp section to modify.
Set Options.Update-Levels to true in options.yml, when a player joins the server after this update, players will get exp based on wins, games played and kills/assists.
Note that some exp methods (like point captured) is not stored to calculate.
Just don't enable the option. Everything will work just fine without it.
NOTE: This feature is in BETA, please report bugs at discussion or Private Message.
Holographic Displays & ProtocolLib are recommended to use CTF so each team can see the flag holograms correctly.
This is not a separated game mode, you can set your arena to be CTF but there's no CTF wins or anything like that.
Key game features:
The CTF can be played along the other game modes as well! You can add game objectives, CTF flags and use the KOTH system all at the same time.
To enable CTF go to Options.Game.CTF.Enable-Game-Tasks and set it to true, this will enable some tasks for the game to work. This is a option because if CTF is not being used the task would be still be running but doing nothing so the tasks will just not run if this is not enabled to save server resources.
After enabling the game tasks, you can add the flags to your arena by using
That's it! You can now customize the game mode. There's a ton of options, sounds and messages - everything is separated by a CTF section in config, so look for those.
Additionally, if you want to use CTF in some arenas and not on others, you can! Just like the Objectives Placeholder in scoreboard you can use %ctf%. If the game does not detect any flags this placeholder will just be empty and the Scoreboard line will be reduced accordingly.
Other Scoreboard Placeholders:
When capturing a flag you can add points to the team OR set a specific amount of flags that a team has to capture to win:
By setting Captures-To-Win to -1, the score system will be used. You can also set Score-To-Win to -1 and Captures-To-Win to positive value if you don't want kills to be part of the game; players can still get points by kills.
For classes, your Objective-Protection-Size at map config will apply to flags.
Very important config settings to know what they do:
Everything is customizable.
Known issues:
To avoid constant draws you can enable the avoid-draw system.
If game reaches max time will end in a Draw, however, with avoid-draw the game will check the team with most kills and this team will win.
If both teams has same amount of kills the game will draw - A overtime system was tested but not implemented.
There are two teams, so the amount of players per team is the division of max players per game by 2, make sure to set the max of players multiples of 2.
If the team size is smaller than game player amount divided by 2 the player will not be able to join.
This is a game mechanic to be used with Elytra, it will give you a velocity boost.
Some information about the portals:
Here's a example of an portal file.
[SPOILER="Screenshot"] [/SPOILER]
You can enable mounts if your map is too big and you don't have jump or speed enabled, mounts will work with kits or classes.
Some information about the mount system:
This feature is disabled by default so you will not receive the mount item. You can enable it on the options.yml file.
You will need ItemBridge to work with Quality Armory.
Example:
weaponTest:
needs-permission: true
permission: "wizards.kits.weapons"
slot: 3
price: 200
display-item: 'CROSSBOW : 1 : name:ak47'
helmet: 'IRON_HELMET : 1'
chestplate: 'IRON_CHESTPLATE : 1'
leggings: 'IRON_LEGGINGS : 1'
boots: 'IRON_BOOTS : 1'
items:
- 'CROSSBOW : 1 : weapon : name:ak47'
- 'CROSSBOW : 1 : weapon : name:kar98k'
lore:
- '&7Test weapon kit'
potion-effects: []
To enable it, go to settings.yml -> Options.WeaponMechanics and set it to true
Usage example (kits.yml):
Make sure to use the weapon tag or else it won't work.
item: 'GOLDEN_HOE : 1 : HideItemInfo'
item: 'GOLDEN_AXE : 1 : ItemFlag:HIDE_ATTRIBUTES'
item: 'CARROT_ON_A_STICK : 1 : ModelData:1'
helmet: 'LEATHER_HELMET : 1 : dye:4873336'
Set Options.Always-Use-NBT to true and items will be saved and loaded as NBT. Note that is the entire item data, not just tags, for example
display-item: 'DIAMOND_SWORD : 1 : NBT:{id:"minecraft:diamond_sword",Count:1b,tag:{AttributeModifiers:[0:{UUIDMost:471157,UUIDLeast:384572,Amount:14,Slot:"mainhand",AttributeName:"generic.maxHealth",Operation:0,Name:"generic.maxHealth"},1:{UUIDMost:699344,UUIDLeast:129385,Amount:2,AttributeName:"generic.movementSpeed",Operation:0,Name:"generic.movementSpeed"}]},Damage:0s} : enchant:DAMAGE_ALL:1 : enchant:KNOCKBACK:1
: name:&6Fighter : lore:&f&lLine1 : lore:&f&lLine 2: &eLine2'
In your arena.yml you will see Spawn-Protection-Size and Objective-Protection-Size, this will set the protected area where skills cannot explode blocks.
You can spectate a game by using /wizards spectate . Spectator has a different scoreboard from the normal game, you can change its lines on language file.
For BungeeCord, set Options.Spectate-When-In-Game to true and players will be added to the spectator mode if the match is in IN GAME state.
It will not work if the game is starting or ending, you will receive the message at Messages.Cannot-Spectate.
The spectator spawn location can be added via the command
There are only 4 powerup type at the moment, but you can add your own powerups via the API, see below.
Check the WIKI for more info on Powerups.
To create your own Powerup, create a new class that extends Powerup, example:
public class MyPowerup extends Powerup {
public MyPowerup(String configIdentifier, Location location, long interval) {
super(configIdentifier, location, interval);
}
@Override
protected Item respawnPowerup(Location location) {
return null;
}
@Override
protected void onPlayerPickup(Player player) {
}
}
Now, you can create your Powerup Item and Powerup Action.
The Identifier is the name in map config and the name you will use to add the Powerup location via command.
public class MyPowerup extends Powerup {
public MyPowerup(Location location, long interval) {
super("MYPOWERUP", location, interval);
}
@Override
protected Item respawnPowerup(Location location) {
Item item = location.getWorld().dropItem(location, new ItemStack(Material.BLAZE_POWDER));
item.setVelocity(new Vector(0, 0, 0));
item.teleport(location.clone().add(.5, 0, .5));
return item;
}
@Override
protected void onPlayerPickup(Player player) {
GamePlayer.get(player).setMana(99);
player.sendMessage(ChatColor.RED + "Filled your mana!");
}
}
That's it! You now have your own powerup.
Now, you need to register the Powerup Spawn and add the powerup to your games. You will need to use the new event made for this: GameArenaLoadEvent.
You will need to access the GameArena and the Map that contains the Locations for each Powerup Type, made this way to be easier for developers.
@EventHandler
public void onArenaLoad(GameArenaLoadEvent e) {
e.getGame().registerPowerupSpawn("MYPOWERUP");
e.getGame().getGameArena().getPowerups().get("MYPOWERUP").forEach(location ->
e.getGame().getPowerups().add(new MyPowerup(location, 15000L)));
}
Spawns are automatically handled by the Game.
And it's done.
You can now add your powerups to the arena using the command.
For Developers, a quick note here, make sure all your Powerup names are in UPPER CASE, this is not a mechanic limitation, it is just to make it easier when setting up the arena and getting names from config files.
For admins who are setting up the arena it doesn't metter, you can use upper or lower case, it will convert to uppercase anyways.
This option is quite complicated so please read everything if you want to use it. When enabled, two players on the same team cannot use the same kit/class
Can be enabled at Options.One-KitClass-Per-Teammate
Message: Messages.Kit-Already-Selected-By-Other
FPS Instability
This is a minecraft-side problem, I can't do much about it.
Disabling fireworks, explosions and falling blocks in config should help.
Script system won't work on Java 11+
No plans to fix that, script system works better in Java 8.
Caused by: java.lang.IllegalArgumentException: No enum constant org.bukkit.Sound.....
How to fix:
If you are using 1.9 or above, you have to change all sound values in options.yml to 1.9.
Please DO NOT use /reload with Wizards.
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Sound.html
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html
import org.bukkit.event.EventHandler;
import com.floodeer.wizards.api.DamageBlockEvent;
import com.floodeer.wizards.api.GameEndEvent;
import com.floodeer.wizards.api.GameStartEvent;
import com.floodeer.wizards.api.PlayerAchievementEvent;
import com.floodeer.wizards.api.PlayerHitEvent;
import com.floodeer.wizards.api.PlayerSkillUseEvent;
import com.floodeer.wizards.game.GamePlayer;
import com.floodeer.wizards.game.achievements.AchievementType;
public class APIShowcase {
WizardsAPI api = null;
public APIShowcase() {
api = Wizards.getAPI();
}
//API methods
public GamePlayer getPlayerData(Player bukkitPlayer);
public GamePlayer getPlayerData(UUID uuid);
public GamePlayer getPlayerData(String name);
public Game getGame(String name);
public Game getGame(GamePlayer fromPlayer);
public void saveData(Player... players);
public boolean forwardData(Player player, String server, String key);
public List getTopData(LeaderboardManager.LeaderType type);
public LeaderboardManager.LeaderType.LeaderData getOfflineData(LeaderboardManager.LeaderType type, String player);
//Events
@EventHandler
public void onSkillUse(PlayerSkillUseEvent event) {
GamePlayer player = event.getPlayer();
if(player.getP().isSneaking())
player.setMana(player.getMana()+5);
}
@EventHandler
public void onGameStart(GameStartEvent event) {
event.getGame().sendTitle("The", "start");
}
@EventHandler
public void onGameEnd(GameEndEvent event) {
event.getWinner().getPlayers().forEach(player -> player.sendMessage("You won!"));
}
@EventHandler
public void onAchievement(PlayerAchievementEvent event) {
if(event.getType() == AchievementType.WINS) {
event.getPlayer().sendMessage("Wins!");
}
}
@EventHandler
public void onPlayerDamage(PlayerHitEvent event) {
GamePlayer damager = event.getDamager();
GamePlayer target = event.getPlayer();
if(target.getName().equalsIgnoreCase("Floodeer")) {
event.setCancelled(true);
}else{
if(!target.getP().isSneaking())
event.setDamage(event.getDamage() + 2);
damager.getP().sendMessage("Hit " + target.getName() + " with " + event.getDamage() + " of damage.");
}
}
@EventHandler
public void onDamageBlock(DamageBlockEvent event) {
GamePlayer damager = event.getDamager();
GamePlayer blocker = event.getPlayer();
if(blocker.getP().isSneaking()) {
event.setDamage(event.getDamage()/2);
}
blocker.getP().sendMessage("Blocked " + event.getDamage() + " from " + damager.getName());
}
}
[SPOILER="Screenshots"]
Game Scoreboard
Points
Classes
[/SPOILER]
UTF-8 support for all files.
[SPOILER="{arena}.yml"]
Name: Domination
Map:
MinPlayers: 2
MaxPlayers: 8
Testing: false
Spawn-Protection-Size: 16
Objective-Protection-Size: 8
Locations:
C:
world: Domination
x: 8.402089312653994
y: 39.0
z: 1.4500749722168447
pitch: 1.9899293
yaw: 89.42335
A:
world: Domination
x: -90.5833929437124
y: 39.0
z: 2.751326204097691
pitch: 3.73863
yaw: 270.1394
B:
world: Domination
x: 90.39072227637169
y: 39.0
z: -5.534952169049457
pitch: 0.060287323
yaw: 93.40312
BLUE_SPAWN:
world: Domination
x: 9.632486735399937
y: 38.0
z: 106.16730318365482
pitch: 5.366599
yaw: -179.51047
RED_SPAWN:
world: Domination
x: 6.525856690961593
y: 37.0
z: -105.08913353127672
pitch: 0.90448296
yaw: -0.04574585
LOBBY:
world: Domination
x: 8.455525711641437
y: 39.0
z: 1.6466255335634872
pitch: 2.5928533
yaw: -15.663201
[/SPOILER]
[SPOILER="language.yml"]
Messages:
Prefix: '&9[Wizards] '
Join: '&7%player% &ejoined the game. (&7%players%&e/&7%maxplayers%&e)'
Left: '&7%player% &eleft the game. (&7%players%&e/&7%maxplayers%&e)'
Chat-Format: '&7%player_name%: &r%message%'
Restoring-Period: '&cThis game is restarting, please wait...'
Already-Started: '&cThis game already started!'
Already-InGame: '&cAlready playing!'
Game-Not-Found: '&cNo game found, you are now on the Queue to play.'
No-Permission: '&cNo permission!'
Game-Is-Full: '&cThis game is full!'
Starting: '&eThe game starts in &b%time% &eseconds.'
Command-Failed: '&cYou cannot use commands while playing wizards!'
Countdown-Cancelled: '&cNot enough players to start the game, countdown &lCANCELLED.'
Game-Cancelled: '&cThe game was cancelled by an Administrator.'
Empty: '&7empty'
Draw: '&cDraw'
Out-Of-Bounds-Warning: '&cGet back to the playable area!'
Out-Of-Bounds: '&cYou left the playable area!'
Enough-Mana: '&cYou don''t have enough of mana!'
Recharged: '&eYour &c%ability% ability &eis ready to use!'
Recharged-Action-Bar: '&eYour &c%ability% ability &eis ready to use!'
Recharging: '&cWait %time% to use this ability.'
Enough-Money: '&cYou don''t have enough money to buy this!'
Successful-Purchase: '&aYou successfully purchased &9%item%&a.'
Successful-Selected: '&aYou selected &9%item%&a.'
Shield-Received: '&aShield received from &b%player%&a.'
Shield-Activated: '&aShield activated!'
Shield-Expired: '&a%player%''s &cshield expired.'
Shield-Deactivated: '&cShield deactivated.'
Achievement:
- '&7&m---------------&7[&6&lACHIEVEMENT&7]&m---------------'
- ' '
- '%name% - %description%'
- ' '
- '&7&m----------------------------------'
Game-Start:
- '&7&m---------------&7[&6&lWIZARDS&7]&m---------------'
- ' '
- '&7First team to reach 5000 points win!'
- '&6Capture the map objectives and kill enimies to score!'
- ' '
- '&7&m----------------------------------'
Game-End:
- '&7&m---------------&7[&c&lWIZARDS&7]&m---------------'
- ' '
- '&7Winner: %color% %winner%'
- ' '
- '&e1: &b%killer_1% &7with &b%kills_1% &7kills'
- '&e2: &b%killer_2% &7with &b%kills_2% &7kills'
- '&e3: &b%killer_3% &7with &b%kills_3% &7kills'
- ' '
- '&7&m----------------------------------'
Player-Stats:
- '&7&m---------------&7[&c&lWIZARDS STATS&7]&m---------------'
- ' '
- '&8Games Played: &b%games_played%'
- '&8Wins: &b%wins%'
- '&8Losses: &b%losses%'
- '&8Kills: &b%kills%'
- '&8Assists: &b%assists%'
- '&8Deaths: &b%deaths%'
- '&8Healing Done: &b%healing_done%'
- '&8Damage Caused: &b%damage_caused%'
- '&8Healing Received: &b%healing_received%'
- '&8Damage Received: &b%damage_received%'
- '&8Balance: &b%balance%'
- ' '
- '&7&m----------------------------------'
TimeUnits:
Milliseconds: Milliseconds
Seconds: Seconds
Minutes: Milliseconds
Hours: Hours
Days: Days
Permanent: Permanent
Portals:
ActionBar: '&2Boost &6[%s&6]'
Kills-Kill-Broadcast: '&b%player% &ewas killed by &6%killer%&e.'
Kills-Death-Broadcast: '&b%player% &ewas killed.'
Kills:
Kill-Notification: '&6You killed &6%player%&6.'
Death-Notification: '&6You were killed by &c%killer%&e.'
Death-Notification-No-Killer: '&6You were killed.'
Assist-Notification: '&c&lKILL ASSIST!'
Teams:
Red: '&cRED'
Blue: '&9BLUE'
Red-Color-Value: '&c'
Blue-Color-Value: '&9'
Red-ChatColor-Name: RED
Blue-ChatColor-Name: BLUE
Selector:
Lore: '%team%: &8%players%&7/&8%maxplayers%'
Full: '&cThis team is full!'
Selected: '&6Team selected!'
Already-Selected: '&cYou already on this team.'
Full-In-Order-To-Balance: '&cYou cannot join this team due the amount of players.'
Menu-Name: '&9Team Selector'
Objectives:
A: ALPHA
B: BETA
C: CENTRAL
D: EASY
E: BAKER
F: MEDIUM
G: GAMMA
Action-Bar-Points: '&a&l+%points% Points Per Second'
Titles:
Being-Captured: ''
Captured: ''
SubTitles:
Being-Captured: '%color%%team% &ris capturing %color%%objective%'
Captured: '%color%%team% &rcaptured %color%%objective%'
Class-Changed: '&aYou will respawn with the class &c%class%&a.'
Titles:
Titles:
Join: '&eYou are playing on map:'
Left: '&eYou left the game'
Start: '&eYou are on team'
Respawn: '&cRespawn in'
Title:
Starting: '&eGame starts in:'
Subtitles:
Respawn: '&e&l%countdown%'
Join: '&b%mapname%'
Starting: '&eGame starts in:'
Start: '%color%%team%'
Sign:
Line:
'1': '&7[&cWizards&7]'
'2': '%state%'
'3': '%mapname%'
'4': '%players%/%maxplayers%'
State:
Waiting: '&aWAITING'
Starting: '&6STARTING'
InGame: '&cIN GAME'
Ending: '&4ENDING'
Restoring: '&8RESTORING'
Motd:
State:
Waiting: '&aWAITING'
Starting: '&6STARTING'
InGame: '&cIN GAME'
Ending: '&4ENDING'
No-Data: '&7Waiting...'
Loading-Data: '&7Loading...'
Leaderboard:
Wins-Format: '&e%position%. &b%player% &7- &e%wins% &7wins'
Scoreboard:
Lobby-Scoreboard:
- ' '
- 'Map: &a%mapname%'
- 'Players: &b%players%/%maxplayers%'
- 'Needed: &b%minplayers%'
- ' '
- 'State: %capitalize_state%'
- ' '
- '&fBalance: &b%balance%'
- '&fClass: &b%kit%'
- ' '
- yourserver.com
Game-Scoreboard:
- ' '
- '&9BLUE&f: &9%blue_points%&f/&a+%blue_points_per_second%'
- '&cRED&f: &c%red_points%&f/&a+%red_points_per_second%'
- ' '
- '&fTime: &b%formatted_time%'
- ' '
- '&fKills: &a%kills%'
- ' '
- '%objectives%'
Title: '&e&lWIZARDS'
Uncaptured-Point-Placeholder: "&f&l\u25a0 %name%"
Objective-Placeholder: "%color%&l\u25a0 %name%"
Leaderboard:
Kills-Format: '&e%position%. &b%player% &7- &e%kills% &7kills'
Damage-Format: '&e%position%. &b%player% &7- &e%damage% &7damage caused'
Heal-Format: '&e%position%. &b%player% &7- &e%heal% &7healing done'
Items:
Potion-Item-Name: '&cHealing Potion'
Skills:
Skill: Skill
Explosion: Explosion
Spell: Spell
Fighter-Punch: Fighter Punch
Impact: Impact
Tornado: Shield
Magic: Magic
[/SPOILER]
[SPOILER="options.yml"]
Locations:
spawn: ''
Storage:
Type: SQLite
MySQL:
Host: localhost
Port: '3306'
User: user
Password: '123456'
Database: database
Update-Interval: '5'
Leaderboard:
Data-Limit: '10'
Options:
Save-Inventory: 'true'
Keep-Inventory-When-Joining-A-Game: 'false'
Offline-Mode: 'false'
Inventory-Protection: 'true'
Bungee:
Enabled: 'false'
Lobby-Server: lobby
Server-Name: wz1
Enable-Join-When-No-Games: 'false'
Join-Next-Available-Game: 'false'
Whitelisted-Commands:
- sr
- tell
- r
PreStart-Countdown: '35'
Time-After-Game: '8'
Assist-Expiry-Seconds: '12'
Use-Vault: 'false'
Use-CoinsAPI: 'false'
Toggle-FeatherBoard: 'false'
ItemBridge: 'false'
Disable-Wizards-Damage: 'false'
Use-Being-Captured-Sound: 'true'
Enable-Rewards: 'false'
Use-Kits-Instead-Of-Classes: 'false'
Run-JS-Engine: 'false'
Per-Arena-Chat: 'true'
Use-Titles: 'true'
Use-Action-Bar: 'true'
Join-While-In-Game: 'false'
Reset-Stats-When-Rejoin: 'true'
Potions:
Jump:
Enabled: 'true'
Level: '6'
Speed:
Enabled: 'true'
Level: '3'
Titles:
Fade-In: '8'
Stay: '28'
Fade-Out: '5'
Economy:
Coins-Per-Win: '250'
Coins-Per-Game: '50'
Coins-Per-Kill: '10'
Coins-Per-Assist: '5'
Coins-Per-Point-Captured: '25'
Game:
Default-Kit: fighter
Warn-When-Leave-Arena-Bounds: 'true'
Kill-Player-When-Leave-Arena-Bounds: 'false'
Global-Kill-Messages: 'true'
Unbreakable-Items: 'true'
Unbreakable-Armor: 'true'
Respawn-Delay: 'true'
Team-Armor:
Enabled: 'true'
Enable-Helmet: 'true'
Enable-Chesplate: 'true'
Enable-Leggings: 'true'
Enable-Boots: 'true'
Explosions: 'true'
Spawn-Falling-Blocks: 'true'
Spawn-Fireworks: 'true'
Double-Jump: 'true'
No-Draw-System: 'true'
Enable-Game-Point-Indicators: 'false'
Double-Jump-Multiplier: '1.8'
Double-Jump-Y-Multiplier: '1.9'
Double-Jump-Cooldown: '0'
Particle-Travel-Speed: '0.5'
Particle-View-Distance: '400'
Respawn-Delay-Time: '8'
Max-Length: '600'
Max-Players-Per-Team: '6'
Max-Team-Difference-Allowed: '2'
Points-To-Win: '3000'
Points-Per-Kill: '5'
Points-Per-Second: '4'
Mana-Update-Type: '75'
Max-Potions: '3'
Potion-Healing: '5.0'
Potion-Splash-Area: '4.0'
Potion-Delay: '3'
Item-Damage: '1.0'
Item-Damage-Min: '1.0'
Item-Damage-Max: '1.0'
Hand-Damage: '0.5'
Protected-Blocks: []
Explosion-Max-Radius: '3.5'
Objective:
Capture-Rate: '1.0'
Capture-Max: '24.0'
Change-Class-In-Game: 'false'
Sounds:
Starting: ENTITY_PLAYER_LEVELUP:1
Double-Jump: ENTITY_BAT_TAKEOFF:2
Enought-Captured: VILLAGER_NO:1
Point-Captured: LEVEL_UP:1
Point-Lost: ZOMBIE_UNFECT:1
Purchase-Sound: LEVEL_UP:2
Selected-Sound: LEVEL_UP:3
Items:
Leave:
Item: 'BED : 1 : name:&cLeave'
Slot: '9'
Locked-Item: 'BARRIER : 1 : name&cYou don''t have this class!'
Shop:
Item: 'EMERALD : 1 : name:&6Shop'
Slot: '5'
In-Game-Item: 'NETHER_STAR : 1 : name:&6Class Changer'
In-Game-Slot: '8'
Team:
Team-Selector: 'WOOL : 1 : name:&6Team Selector'
Slot: '1'
Rewards:
Win-Commands:
- eco give %player% 100
Top-Killer:
- eco give %player% 150
Boosters:
Default-Radius: '3'
Default-Initial-Velocity: '3.0'
Default-Final-Velocity: '1.0'
Default-Boost-Duration: '30'
Default-Particle-Amount: '5'
Default-Particle-Type: VILLAGER_HAPPY
Mounts:
Enable-Mounts: 'false'
Spawn-Item: 'DIAMOND_HORSE_ARMOR : 1 : name:&7Mount'
Spawn-Item-Slot: '8'
Horse-Variant: HORSE
Horse-Speed: '0.3'
Horse-Jump: '1.0'
Horse-Cooldown: '12.0'
Horse-Color: WHITE
[/SPOILER]
[SPOILER="{class}.yml"]
display-name: 'Herobrine'
description:
- '&9Herobrine'
- ' '
- '&7Shots a spell of Lightning'
- '&7causing with &c3.0❤ &7of damage.'
price: 1000
mana-cost-per-use: 35
mana-per-hit: 1
max-distance: 80
damage: 6.0
damage-area: 5.0
explosion-radius: 4.5
display-item: 'GOLDEN_AXE : 1'
weapon: 'GOLDEN_AXE : 1 : name:&bStrike'
helmet: 'IRON_HELMET : 1'
chestplate: 'IRON_CHESTPLATE : 1'
leggings: 'IRON_LEGGINGS : 1'
boots: 'IRON_BOOTS : 1'
scripts: []
target-scripts: []
[/SPOILER]
Q: The game says the team is full but there is no player on the team/team is not full.
A: This happens because of the team balancing system that tries to match teams according the amount of players.
Q: What can I do with the Script system?
A: Script system is very simple, was just made to run small tasks like summon methods, all the info are above.
Q: Can I add more classes?
A: Yes, check above to see how.
Q: Plugin is causing TPS problems, what can I do?
A: You should not run Wizards with low memory, try disabling some particles, explosions or/and game effects like falling blocks and fireworks. Also try using kits if your server is not supporting the plugin. Wizards tasks should not cause your server any performance instability. Also note that each arena is a world.
Q: Why is wizard's size more than 390KB?
A: There's a lot of files inside the plugin, not just code. Whenever a class is not used or gets deprecated a update should replace or remove them, there's also a lot of things for planned features.
If you have any suggestions go to Discussion and I'll be happy to read them.
Want to donate? Buy me a coffee.