Tower Defense X: This minigame is about surviving waves and hordes of enemies! Though you can't really fight by yourself for too long because you will get overwhelmed with the increasing strength and numbers of enemies! Therefore, you should build towers that will automatically attack enemies and help you with your fight! You can unlock new towers as you level up and progress. Build different towers and upgrade them to ensure that you can survive the waves! This plugin is highly inspired by Balloon Tower Defense (BTD), I tried to imitate it and add my own ideas suiting Minecraft!
- Create your own towers with your own properties and designs! There are 16 default towers!
- Create your own enemies with your own properties and designs! There are 16 default enemy!
- You can also create Bosses! and specify when they summon and all their properties!
- Customize each difficulty rewards and effects on the game! You can completely control the strength and progression of waves in any way you like!
- Versus mode! When playing in a multiplayer arena you can join the enemy team and start controlling the enemy waves! With AI assistance
- Survival Event! When in versus mode, there is a chance that a survival event will begin where enemy team players can hunt down the defenders and kill them removing some of their coins!
- Endless mode!
- Multiple paths!
- The core of the game is highly customizable! You can change many coins each tower/upgrade costs, how many coins/exp does each enemy give, when do new enemies spawn, how much tougher are these enemies and so on! You can change game mechanics dramatically!
- Multi-arena! You can make many arenas and in the same world too!
- Bungee-Mode! The plugin can be installed along other plugins like in your factions server and what not but it can also take over the server and force players to join the lobby! Or even a specific arena and once the arena finishes the server restarts
- Classes! Create your own classes and give them special abilities and buffs! You can also make them require permission! There are 10 default classes
- Boosters! Encourage users to play with temporary coin boosters
- Parties system! All done through a gui, You can create a party and invite players
- Achievements! customize the achievements requirements and awards, and view the achievements in a cool scrollable gui
- Lobby countdown shortening system! If the arena has a certain number of players the timer will be shortened to begin faster
- Create leaderboards for many stats! kills, coins, wins, games played, waves survived, player exp, towers built, sold, upgraded, etc... and you can also display players head
- Ranks! players earn exp and rank up unlocking new towers until they reach the maximum rank which is configurable, you can also run your own commands when a player reaches a certain rank
- Prestiges! Players can reset their rank and increase their prestige! This will prevent players from getting bored after achieving the max rank
- Fully customizable scoreboards!
- Spectator mode!
- MySQL Support and normal files support
- Titles support!
- Join signs, Auto join signs, Leave signs, Leaderboard signs!
- Built in world manager, you can create, delete, import, backup, restore, tp, setspawn, list, worlds.
- You can customize most of the plugin messages, inventory names, signs format, arena states, items, titles, chat prefixes! BUT NOT ALL. some things are forced to be english!
- The plugin contains a broadcaster system that announces certain messages every x seconds
- PlaceholderAPI and MVdWPlaceholderAPI Support!
- Holograms support! you can make holographic stats and a holographic leaderboard and display tower names in holograms through HolographicDisplays
- Give winners/losers custom maps and display your own images!
- Create your own coin modifiers for vips! You can give them double coins or triple and so on!
- Clickable 'play again' chat messages
- Fully independent! Can run fully by itself without the need of a single plugin! It doesn't even need multiverse due to its own world management system!
- Tower shooting effects! (Shot trails)
- Difficulty voting system!
- You can send messages to party members only by starting your message with an exclamation mark
- A profile gui where you can see all of your stats and your unlocked achievements
- A guide item to help players learn more about enemies
- Amazing rollback system
- Lightweight cooldown system
- Edit arenas on the fly!
- Supports UUID and normal names
- Built in coins system, but it can also use vault economy
- A fireworks ending
- You can separate the spectators chat, team chat, and the lobby chat!
- You can create permissions that allow players to have more slots per party
- Players names are colored based on their team, players health is shown below their name, players coins are shown in the tablist!, and enemies show health bars
- You can run your own commands on players when the arena starts or when players win
- You can have an animated scoreboard title
- Basic API and Events
- Create and edit arenas on the fly! You can also create towers easily!
- Smooth, well designed, and created to be able to handle large amount of players
Please keep in mind this is recorded on an early version. Things can change a lot in coming versions but the core idea will be the same.
The plugin is highly customizable but not fully!! There are some things that are hard-coded like sounds and SOME texts! Below you will find a list of all files generated by the plugin! Using this you will be able to see EXACTLY what you can change and what you cannot!
Config.yml (v1.0): https://pastebin.com/LkU7Bikf
Customization.yml (v1.0): https://pastebin.com/usF55Hic
Classes.yml (v1.0): https://pastebin.com/AVxE1EAD
Enemies.yml (v1.5): https://pastebin.com/p5RGrbrr
Towers.yml (v1.0): https://pastebin.com/bZQaT8ZX
Achievements.yml (v1.0): https://pastebin.com/aAw6BDxP
Broadcaster.yml (v1.0): https://pastebin.com/SaD7KUW1
Each arena will generate a settings file: https://pastebin.com/i3NdhetC
Format: /Command - Description - Permission
- /towerdefense [/td] - Shows a list of commands - None
- /td Join - Puts the player in the game lobby - None
- /td Leave - Removes the player from the game - None
- /td Autojoin- Puts the player in the best available arena - None
- /td List - Shows a list of arenas and other information - None
- /td Admin - Shows a list of admin commands - towerdefense.admin
- /td Setlobby - Sets the lobby location - towerdefense.setlobby
- /td Setspawn - Sets the arena players spawn - towerdefensee.setspawn
- /td Create - Creates a new arena - towerdefense.create
- /td Delete - Deletes an exisiting arena - towerdefense.delete
- /td AddPathSpawn - Adds a path that the enemies follow - towerdefense.addpathspawn
- /td RemovePathSpawn - Removes the last added enemy path - towerdefense.removepathspawn
- /td Showpath - Shows the path of enemies - towerdefense.showpath
- /td Buildingarea - Gives a tool to specify where towers can be built - towerdefense.buildingarea
- /td Towers - Shows a list of tower management commands - towerdefense.towers
- /td Start - Forces an arena to start - towerdefense.start
- /td Stop - Forces an arena to stop - towerdefense.stop
- /td Cheat - Gives you 999999 arena coins! - towerdefense.cheat
- /td Coins - Modifies a player coins - towerdefense.coins
- /td Addbooster - Adds a coin booster - towerdefense.addbooster
- /td Holograms - Manages holographic features - towerdefense.holograms
- /td Reset - Resets a player stats - towerdefense.reset
- /td Edit - Edits arena settings - towerdefense.edit
- /td Editmode - Allows the user to modify surroundings in bungeemode - towerdefense.editmode
- /td Reload - Reloads the plugin - towerdefense.reload
- /td Worldmanager - Shows a list of worldmanagement commands - towerdefense.worldmanager
A huge thank you to @mmuziek for making this awesome tutorial on version 1.5!
A huge thank you to @ItsPat for making this awesome tutorial on version 1.4!
- You first want to set the lobby location by doing /td setlobby
so that when players do /td join they will be teleported there where they can select an arena to join!
- To create an arena, teleport to the arena world and do the command /td create <Name> <minPlayers> <maxPlayers>
This will create a new arena with your defined name.
Min players is the minimum amount of players required for the game to start the countdown. and max players is the maximum amount of players the arena can handle at a time! The arena is considered Single player if the maxPlayers value was 1.
- Now you can set the waiting lobby for the arena using the command /td setlobby <Arena>. This is where players will wait for the arena countdown to finish and they can vote for difficulty or equip classes there.
- Then set the location that the players will teleport to when the game actually begins using /td setspawn <Arena> (This should be inside the map)
- Now you need to setup the enemies path, go to the location where enemies spawn and type /td addpathspawn <Arena> 1. then go for the next point that they should move to and run the command /td addpathspawn <Arena> 1 again. The last path added is the location where if an enemy reaches it, the players health goes down. In case you made a mistake while adding paths you can delete the last added path with /td removepathspawn <Arena> 1. You can also check the paths added using /td showpath <Arena> 1.
The 1 written above is the Path ID. Use Path ID = 1 for your first route. If you have a second route, repeat the process using Path ID = 2 and so on, (For example you would use /td addpathspawn <Arena> 2 not /td addpathspawn <Arena> 1)
- Finally, you need to select the central blocks of towers. Basically the blocks that players have to right click to open the tower builder menu and build a tower there! To do this, use the command /td buildingarea <Arena>. This will give you a tool that when you left click a block with it you can make that block a central block.
- And finish! You just have to enable the arena in the arena editor (/td edit <Arena>) and hit save!
- You could also use the worldmanager commands to backup your worlds just incase anything went wrong :)
- If you want to make all players automatically join tower defense when they join the server you need to enable bungee mode in config.yml! If you have a bungee cord and a lobby system, This plugin will only be on your game server and NOT in your hub server, if you want to join through signs from your hub server, then you need to have a plugin such as TeleportSigns in your hub.
- Using bungee mode, if you have 1 arena setup then players will automatically join that arena once they join the server and when the arena finishes the server will close! If you had multiple arenas in the server then the plugin will simply run the command /td join to put all players in the lobby where they can select an arena! This also prevents them from leaving the lobby and there is no restarting done here!
- To create tower defense signs the first line must be [TD]
- To create a lobby join sign the second line should be 'join'
- To create an arena join sign the second line join be 'join' and the third line should be the arena name
- To create a leave sign the second line should be 'leave'
- To create an autojoin sign the second line should be 'autojoin', additionally you can specify if you want the autojoin to look for singleplayer arenas only or multiplayer arenas only by writing 'singleplayer' or 'multiplayer' in the third line
- To create leaderboard signs the second line should be 'top' and the third line should be the stat name, example 'kills', 'wins', 'games_played' etc...
and the fourth line should be the rank you are looking for! If you want to display the TOP player (rank 1) then write in the fourth line '1'
This plugin works from 1.7.9 and upwards! But it is mainly designed for 1.10! You may encounter some issues in lower versions for example, in lower versions there is no option to disable collision and therefore some enemies might block each other causing the wave to slow down.
Also enemies health bars don't appear correctly so disable them in config.yml
Using mysql is highly recommended as it increases the performance and protects you from some issues
Enemy movements are not normal! They make look a little stuttery and they can also look somewhere else while walking.
If you want any holographic feature, you will need to install HolographicDisplays! If you want to use the Holographic Stats feature, you will need to install ProtocolLib too otherwise the stats holograms will collide.
Current tower abilities are: multi-target, burn, lightning, farm, slow
Tower shooting effects (Shot trails) may be expensive in terms of performance! Modify the plugin and change settings to what suit you best!
There are some extra permissions!
towerdefense.createsigns to create signs
towerdefense.breaksigns to break signs
towerdefense.unblockcmds to be able to use commands while in game
towerdefense.globalchat allows the player to start a message with @ to be sent to everyone if the chat separation features are enabled in config.yml
If vault is enabled in the config, Leaderboards will not show 'Coins' as the player vault money, it will still display the player coins
Ask about any concern in the discussion area before purchasing.
Before posting a negative review, please ask for help!
Tell me your server IP's and I will add them here as long as they have the plugin running on them!
- jogar.craftsgp.net
- bitcubes.eu
This API is very basic and doesn't allow to do a lot of things as of now.
package me.wazup.addon;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import me.wazup.towerdefense.Enums.Stat;
import me.wazup.towerdefense.PlayerData;
import me.wazup.towerdefense.TowerDefense;
import me.wazup.towerdefense.TowerDefenseAPI;
public class Addon extends JavaPlugin {
public void example(){
TowerDefenseAPI api = TowerDefense.api;
//Get a player playerdata
Player p = Bukkit.getPlayer("Wazup92");
PlayerData data = api.getPlayerData(p);
//Modifying some of their stats
data.addCoins(p, 50);
data.kills += 10;
//Some booleans
api.isInArena(p);
api.isSpectating(p);
api.isPlaying(p);
//Getting top players
//First you have to load all players data, this should be Async
try {
HashMap<String, String> playersData = api.getAllPlayersData();
//You can now get top players out of the playersData, ordered by a specfic stat
//If the third argument (int) is bigger than the amount of entries in the playersData hashmap, it will be filled with 'NO_PLAYER'
List<Entry<String, Integer>> top = api.getTopPlayers(playersData, Stat.KILLS, 10);
//Top now contains the top 10 players, ordered by their kills stat
//Entry key is the player name, and the entry value is their score
for(int i = 0; i < top.size(); i++){
Bukkit.broadcastMessage("# " + (i+1) + " is " + top.get(i).getKey() + " with a score of " + top.get(i).getValue());
}
} catch (SQLException e){
e.printStackTrace();
}
//If you want to modify offline players stats, then you have to use a different method, because you can't use the PlayerData class on offline players
//The following method returns true if the stat was updated, and it returns false if the player name wasn't found or the stat wasn't updated for some reason
//The boolean at the end 'increment' is whether you want to SET their stat to the give value, or you want to add it up
try {
boolean updated = api.modifyOfflinePlayerStat("Wazup92", Stat.COINS, 50, true);
} catch (SQLException e){
e.printStackTrace();
}
}
}
Events:
- TDArenaStartEvent
- TDArenaFinishEvent
- TDArenaStopEvent
- TDPlayerJoinArenaEvent
- TDPlayerLeaveArenaEvent
Plugin's lobby scoreboard placeholders (customization.yml):
%kills%, %enemies_spawned%, %coins%, %wins%, %games_played%, %highest_wave_survived%, %player_exp%, %player_next_rank_exp%, %player_rank%, %towers_built%, %tower_upgrades%, %towers_sold%
Plugin's arena scoreboard placeholders (customization.yml):
%arena_players%, %arena_max_players%, %arena_viewers%, %arena_name%, %arena_mode%, %arena_wave%, %arena_difficulty%, %arena_final_wave%, %arena_health%, %arena_max_health%, %date%
The placeholders mentioned below are for PlaceholderAPI, if you want to use MVdWPlaceholderAPI placeholders then use the same placeholders below but replace the first % with { and replace the last % with }
Non-player specific placeholders:
%towerdefense_players_count%, %towerdefense_parties_count%, %towerdefense_lobby_players_count%, %towerdefense_arenas_count%
Player-specific placeholders:
%towerdefense_arena%, %towerdefense_party_leader%, %towerdefense_kills%, %towerdefense_enemies_spawned%, %towerdefense_coins%, %towerdefense_wins%, %towerdefense_games_played%, %towerdefense_highest_wave_survived%, %towerdefense_player_exp%, %towerdefense_player_next_rank_exp%, %towerdefense_player_rank%, %towerdefense_towers_built%, %towerdefense_tower_upgrades%, %towerdefense_towers_sold%
Check out my other projects as well!
Discounts:
- If you own 3 or more of my plugins, you can purchase any of the remaining plugins for 35% off! (づ。◕‿‿◕。)づ
If you don't own 3 or more but you want to purchase 3 at once, you get a 25% discount! (ノ◕ヮ◕)ノ*:・゚✧
To perform any of the above, you need to contact me through email -> [EMAIL][email protected][/EMAIL] and also message me here as well!
̿̿ ̿̿ ̿̿ ̿'̿'\̵͇̿̿\З= ( ▀ ͜͞ʖ▀) =Ε/̵͇̿̿/’̿’̿ ̿ ̿̿ ̿̿ ̿̿
There are several ways to get support! Please use any of the following
[LIST=1]Email: [FONT=Droid Sans][email protected][/FONT]Discussion areaPrivate MessageDiscord (Click image below to join)
[/LIST]
By purchasing this plugin you to the following!
- You are not allowed to redistribute this plugin in any way!
- Refunds are not allowed!
- Source code costs additional money!
- I'm not obligated to do updates within a specific time period!