Popular Dragons & Dragon Escape Minigames

[img] tag


[img] tag
  • 2 Dragons minigames in 1 plugin, you can have both running.
  • Multi-Arena and BungeeCord support.
  • Achievements.
  • SQLite and MySQL support.
  • Leaderboard.
  • Extremely configurable.
    • Signs, Scoreboard, messages, options and more.
  • Save and restore player inventory, levels and more.
  • Reward System.
  • Kits
  • Very easy to setup.
  • Map Records
[img] tag
Bugs
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.

Dependencies
Dragons can run all systems by himself, however, you can install Vault to work with global economy.

Optionally, you can use only PlaceholderAPI to work with Leaderboards, so HolographicDisplays (see below) isn't a requirement.

PlaceholderAPI support
The following placeholders are available, they are self explanatory:

%dragons_all_players%
%dragons_dragonescape_wins%
%dragons_dragonescape_gamesplayed%
%dragons_dragonescape_losses%
%dragons_wins%
%dragons_gamesplayed%
%dragons_losses%

Arena Placeholders:
%dragons_arena_players_{arena}%
%dragons_arena_max_players_{arena}%
%dragons_arena_min_players_{arena}%
%dragons_arena_status_{arena}%

Usage example (DeluxeMenus):
[img] tag

[img] tag

Arena setup (Dragons)
    Required permission: dragons.setup
    First of all set global spawn using /dr setgspawn
  • Create your arena - /dr create <name> Dragons (Solo/Teams)
  • Add player spawn - /dr addSpawn <name>
  • Set lobby - /dr setLobby <name>
  • Set Sky - /dr setSky <name>
  • Add dragon spawn - /dr addDragon <name>
    • DO NOT add a dragon spawn BELOW the SKY!
  • Set min players - /dr setMinPlayers <name> <amount>
  • Set max players - /dr setMaxPlayers <name> <amount>
  • (Optional) Water Damage - /dr setWaterDamage <name> <true/false>
  • Finish setup and create game - /dr finish <name>

Teams Mode

If there are two players alive and both are from the same team the game will end.
Spectators of the Winner Team will also be rewarded with a win if they don't leave the game before it ends.


You can set the map to TEAMS or SOLO mode by using
  • /dragons setArenaMode <Arena> <SOLO/TEAMS>





Sign format:
  • [Dragons]
  • join
  • ArenaName
[img] tag

Arena setup (Dragon Escape)
    Required permission: dragons.setup
    First of all set global spawn using /dr setgspawn
  • Create your arena - /dr create <name> DragonEscape
  • Add player spawn - /dr addSpawn <name>
  • Set lobby - /dr setLobby <name>
  • Add dragon spawn - /dr setDragonSpawn <name>
  • Add dragon waypoint - /dr addWaypoint <name>
    • Important! Waypoint are locations for the Dragon to fly to, check the video tutorial!
  • Set Sky - /dr setSky <name>
    • Optional for this gamemode, but recommended.
  • Set min players - /dr setMinPlayers <name> <amount>
  • Set max players - /dr setMaxPlayers <name> <amount>
  • (Optional) Water Damage - /dr setWaterDamage <name> <true/false>
  • Finish setup and create game - /dr finish <name>
(NEW) Optional: Add Win-Location area.
  • Please note that by default the game will ignore the Y location of this area, if your win area is above your arena you will need to set Options.Dragon-Escape-Win-Area-Ignore-Y to false, however, with this option disabled the game check the exact Y location of the area.
If not set, the game will end after the player reaches the last Waypoint.
  • /dragons edit <arena> - if you want to add it to an existing arena
  • /dragons tool - It will give you the select tool. Right/Left click on a block to set a High/Low position.
  • /dragons setWinArea <arena> - Set the area
  • /dragons finish - Apply changes and load the map.
(NEW) Optional: Add Death locations.
  • Has the same option as Win-Area Options.Dragon-Escape-Death-Area-Ignore-Y but false by default.
You can add a Death Area by using
  • /dragons edit <arena> - if you want to add it to an existing arena
  • /dragons tool - It will give you the select tool. Right/Left click on a block to set a High/Low position.
  • /dragons addDeathArea <arena> - Set the area
  • /dragons finish - Apply changes and load the map.





Sign format:
  • [DragonEscape]
  • join
  • ArenaName

[img] tag

[img] tag

Command: dragons
Aliases: drag, dr
  • /dr join <arena> - no permission.
  • /dr leave - no permission.
  • /dr stats - no permission.
  • /dragons autojoin <gamemode>
    • Will find the better game for a player to join.

Manager commands
  • /dr setgspawn - dragons.admin
  • /dr start <arena> - dragons.moderator/dragons.admin
  • /dr stop <arena> - dragons.moderator/dragonsadmin
  • /dr reload - dragons.admin
    • SAVES all config files.
Arena Config Commands:
  • /dr setDragonSpeed <arena> <value> - dragons.setup
  • /dr setMaxDragons <arena> <value> - dragons.setup
  • /dr setDragonDamage <arena> <value> - dragons.setup

Others:
  • /dr coins set/add/remve <player> <amount>
    • Permission: dragons.admin
    • Updates player balance, command will not work with Vault support enabled.

[img] tag

Kits
You can add kits, add potions to kits and more.

[img] tag
  • Cooldown: Cooldown of the main kit item, the leap axe; 1000 = 1s;
  • Type: Where this kit will work
    • DRAGONESCAPE for Dragon Escape.
    • DRAGONS for Dragons.
    • BOTH for both.
  • Max-Uses
    • Max-uses of the leap axe.
Leap axe cannot be remove as a kit item.

To add potion effect to the kit, add a custom line named potion-effects, for example:
...
    type: "BOTH"
    potion-effects:
    - 'SPEED : 1000 : 1'
    permission: ""
...

EFFECT : DURATION IN SECONDS : LEVEL

Potion Effect List here!

  kits.yml

Achievements
You can have how many achievements you want.

[img] tag

  achievements.yml

Holographic Leaderboards
[img] tag
Placeholder: {dragons_wins_position}
  • e.g: {dragons_wins_1} for the player with most Dragons wins.
Placeholder: {de_wins_position}
  • e.g: {de_wins_1} for the player with most DragonEscape wins.
Example of HolographicDisplays database.yml
[img] tag

Note that the Placeholder value of the Hologram can be changed at language.yml in Wins-Format.
[img] tag

PlaceholderaAPI Leaderboards
If you want to work with another Hologram plugin, you can hook the stats via PlaceholderAPI.
  • %dragons_arena_record_POSITION_ARENA%
    • Example: %dragons_arena_record_1_Lands%
      • Returns the first player on arena Lands
  • %dragons_dragons_wins_POSITION%
  • %dragons_dragons_teams_wins_POSITION%
  • %dragons_dewins_POSITION% (Dragon Escape Wins)

Map Records
  • Can be disabled if you don't want to use.
  • Will create a new database table.
  • Will update and load before (reload) every game.
    • This process should not have any impacts on performance.
  • The time is stored in ms and converted to ss:mm.SSS.
[img] tag

Hologram Leaderboard:
{de_records_map_position}
Example:
[img] tag

Personal Records
  • Personal records will only work for players that have set a record time on a map before.
  • If you previus run was, let's say, 40s and your next 30s, your data will be updated.
  • Note that this only counts if you win the game (or Send All Data to Database option is enabled).
  • Can be turned off if you don't want to use this sytem.
[img] tag

Send All Data to Database (Options.Leaderboard.Send-All-Data-To-Database), false by default
  • This will send the timer of all players that played a game to the database.
  • That means you don't have to beat the Map Record to join the leaderboard.
  • Personal Records will work better with this option enabled
  • Note that if you have a lot of maps this can be lead to a heavy databases. However, it will not impact performance.

Arena Connections (Dragon Escape, BETA)

Disabled by default, you have to set Storage.Accept-Arena-Connections to true and restart the server.

Example of how the system works
  • We have arenas Jungle, Jungle2 and Jungle3, all being the same map.
  • When Jungle2 and Jungle3 is connected to Jungle, the leaderboard will be shared between them
  • Each arena still will have their own leaderbord but the time will be the same

To connect arenas, use /dragons connectArena <Main-Arena> <Target-Arena>, example /dragons connectArena Jungle Jungle2. Jungle now hosts the leaderboard for Jungle2.

After connecting, you can force all connected arenas to have their time updated, copying the the main arena
  • /dragons forceConnectionData <main-arena>
The reset map command supports a extra argument to work with this system
  • /dragons resetMap <arena> (reset all connected true/false)
  • /dragons resetPlayer <player> <arena> (reset all connected true/false)
There are two ways of disconnecting arenas
  • /dragons disconnectAll <main-arena> (reset leaderboard true/false)
    • Disconnects all arenas from the main arena.
    • You can use true at the end of the command to also reset the timer, or just type the command without any extra arguments to not reset.
  • /dragons disconnectArena <target-arena> (reset leaderboard true/false)
    • Disconnects a single arena from a main arena.
    • You can use true at the end of the command to also reset the timer, or just type the command without any extra arguments to not reset.

Dragons Fight Mode

You can change how Dragons game mode works.

By setting Options.Game.Dragons-Fight-Mode.Enabled to true, players are able to win the game by completing a goal, see below:
  • Options.Game.Dragons-Fight-Mode.Target-Sky-When-Hit
    • If enabled, the dragon will be forced to target the sky after getting hit
  • Options.Game.Dragons-Fight-Mode.Allow-Solo-Mode
    • Allows players to play the gamemode solo
  • Options.Game.Dragons-Fight-Mode.Dragons-Respawn
    • Allows Dragons to respawn
    • The max amount of Dragons alive at the same time is set by
      Options.Game.Max-Dragons
  • Options.Game.Dragons-Fight-Mode.Goal
    • Set's the game goal, Goals:
    • KILLS_AMOUNT
      • When a player/team reaches a certain amount of Dragon kills
    • DAMAGE_DEALT
      • The max damage dealt by a player/team when the game time reaches 0 will win
    • DAMAGE_AMOUNT
      • When a player/team reaches a certain amount of Dragon Damage
  • Options.Game.Dragons-Fight-Mode.Goal-Amount
    • Sets the goal amount, be kills or damage.
  • Options.Game.Dragons-Fight-Mode.Fake-Damage
    • Disables dragon damage
  • Options.Game.Dragons-Fight-Mode.Dragon-Health
    • Set's Dragon Health

Cosmetics (Player Trails)
Players can unlock special Trail Effects on the Trails Shop. Example of a trails.yml file:
  • 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: Particle list
  • 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: Special/rotative particles around the player or normal particles.
  • helmet: If player will get some hat with the effect.

Config Paths:
  • Stop particles when player turns the head up: Options.Trails.Stop-Particles-When-Looking-Up
  • Disable particles when player is invisible:
    Options.Trails.Stop-Particles-When-Invisible
  • Player will only see their particle: Options.Trails.Per-Player-Particle


Extra permissions
  • dragons.joinfull - Allows you to join in full games.
  • dragons.kits.all - Access to all kits.
  • dragons.bungeebypass
    • It will allow a player to join a game server without being added to the game. This permission is set to false by default, meaning that not even ops will have it.
Common problems
FPS Instability (1.15+)
This is a minecraft-side problem, I can't do much about it.

Disabling fireworks, explosions and falling blocks in config should help.

Dragon killing everyone at the start (Dragon Escape)
Your waypoint setup is probably incorrect. When creating an arena, make sure to set at least one waypoint closer (not on Dragon spawn, but close, in front of it) to the Dragon first, then you can gradually add waypoints to move the Dragon however you want. The Dragon will go to the closest Waypoint OR to the next checkpoint that the game calculated according to your waypoint setup.

If you are having too much trouble, send me a Private Message, I can fix your setup.

Sounds List
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Sound.html

Potion Effect Types
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html

Material list
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html

API
import com.floodeer.dragons.Dragons;
import com.floodeer.dragons.DragonsAPI;
import com.floodeer.dragons.api.DragonTargetEvent;
import com.floodeer.dragons.api.GameEndEvent;
import com.floodeer.dragons.api.GameStartEvent;
import com.floodeer.dragons.api.PlayerAxeUseEvent;
import com.floodeer.dragons.game.GamePlayer;
import com.floodeer.dragons.game.GameType;
import com.floodeer.dragons.game.IGame;
import com.floodeer.dragons.game.dragons.DragonSctructure;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;

import java.util.UUID;

public class APIShowCase {

    private final DragonsAPI api;

    public APIShowCase() {
        api = Dragons.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 void updateLeaderboard(boolean receiveAfter);

    //Game Events

    @EventHandler
    public void onGameStart(GameStartEvent event) {
        IGame game = event.getGame();
        if(event.getType() == GameType.DRAGONS) {
            game.getPlayers().forEach(player -> player.getP().sendMessage("You are playing Dragons!"));
        }
    }

    @EventHandler
    public void onGameEnd(GameEndEvent event) {
        IGame game = event.getGame();
        if(event.getType() == GameType.DRAGON_ESCAPE) {
            GamePlayer winner = event.getWinner(); // event.getPositions().get(0), depending on your settings.yml
            Player second = event.getPositions().get(1);
            Player third = event.getPositions().get(2);
        }
    }

    @EventHandler
    public void onPlayerUseKit(PlayerAxeUseEvent event) {
        if(event.getKit().getName().equalsIgnoreCase("NoShift") && event.getPlayer().isSneaking())
            event.setCancelled(true);
    }

    @EventHandler
    public void onDragonTarget(DragonTargetEvent event) {
        if(event.getType() == DragonSctructure.TargetType.PLAYER) {
            event.getTarget().sendMessage("Be careful!");
        }
    }
}

Files and Screenshots
  Screenshots

UTF-8 support for all files.

  {arena}.yml

  language.yml

  options.yml

If you have any suggestions go to Discussion and I'll be happy to read them.

Donations & Special Thanks
User @Bluntvloei - $10

By buying Dragons you agree to
  • You are not allowed to distribute this plugin.
  • You are not allowed to decompile this plugin.
  • Use only for your network/server.
  • NO refunds.
  • All support given is on Spigot only. You will not have Discord, Skype or any of those type of contact to ask for support.
    • I'll probably reply in a few minutes, otherwise wait at least 12 hours or check my profile to see any updates.
  • THIS IS A SPIGOT/SPIGOT FORK SOFTWARE. No refunds will be given if the plugin does not work on your server software.
  • Accept future terms.
Want to donate? Buy me a coffee.
[img] tag