The game is played as follows: You begin on a court, aiming to hit the ball over the net and into your opponent's side of the court. Position yourself carefully, as the ball travels in the direction you're facing. Your goal is to score points by hitting the ball where your opponent cannot return it, all while keeping an eye on the speed and timing of your shots.
TEST SERVER: testing.mipcraft.eu (157.90.137.69:22022)
Features: The plugin is highly configurable, allowing you to customize nearly every aspect. Some notable features of this game mode include:
Design Your Own Courts: Unleash your creativity by designing personalized courts.
Music Integration: Enhance the gaming experience by adding music through NBS files.
Per-server/Multi-arena: Set one game per server (BungeeCord) or multiple games per server.
MySql Support: Keep track of win streaks with efficient MySql integration.
PlaceholderAPI Support: Enjoy compatibility with PlaceholderAPI for streamlined integration.
Custom Models: Immerse players with support for custom models.
1. Get the plugin and put it in the plugins folder. Start the server and let the plugin generate the folders. 2. Feel free to modify any settings in the configuration file as you see fit. Afterward, restart the server, and you'll be able to join with your new changes. 3. For both the multi-games per server and single game on the server mode, you'll want to create at least one game. You can do so with the "/tnp create [game_name]" command. 4. Set up the game. Your inventory will now have tools.
4.1. First, set the lobby location (waiting location before the game starts). 4.2. Next, set up the court by selecting the outer boundary, followed by the middle point where the net ends. Then, select the center of the player’s court area. Remember, you're only setting up one side, as both sides are identical but mirrored. 4.3. Next, you can set the display part by setting the settings for different materials, this is optional. 4.4. When you're done, save the game by clicking on the save item.
5. Enjoy!
Setup video:
Adding your own music: For music, you'll need to download an additional plugin [NoteBlockAPI] Restart the server and you'll get a folder in TennisParty called music, where you drop in the NBS files. You'll need a Note Block Studio. If you want to see where to get those files you can watch this video:
When you have a song in Note Block Studio just export it as NBS.
Commands: /tnp join - Join the best game. /tnp join [name] - Join the game. /tnp leave - Leave game. /tnp create [game_name] - Create a new game. /tnp edit [game_name] - Edit a game. /tnp remove tool - Gets you a remove display tool.
PlaceholderAPI: Player stats:
%tennisparty_player_uuid%
%tennisparty_player_name%
%tennisparty_player_games-played%
%tennisparty_player_win-streak%
%tennisparty_player_wins%
%tennisparty_player_score%
%tennisparty_player_placement%
Game stats:
%tennisparty_game-count_<game_name>%
%tennisparty_game-state_<game_name>%
Top stats:
Structure of top placeholders: %tennisparty_top_games-played_1_name%
tennisparty_top_ - is always the same. games-played_ - can be (games-played, win-streak, wins or score) - represents top 10 category. 1_ - is a placement number which can be from 1 .. 10. name - this part can be (uuid, name, games-played, win-streak, wins, score or placement) - data of the player in this placement of the top 10 category.
Examples:
%tennisparty_top_games-played_5_name%
%tennisparty_top_win-streak_10_score%
%tennisparty_top_wins_1_win-streak%
%tennisparty_top_score_3_name%
Config:
Code (YAML):
# TENNIS PARTY # CREATED BY ALANDIODA # VERSION 1.6.0
# Configuration with MY_VERSION # SPIGOT_MATERIAL_LINK # SPIGOT_SOUND_LINK # SPIGOT_POTIONS_LINK
# MYSQL INFORMATION mysql:
enabled: true
use_local_file: true
host: localhost
port: 3306
database: database
username: username
password: password
tablename: TennisPartyData
# Top 10 update rate (in seconds, 0 = disable) top_10_update_rate: 300
# Ball materials # # Here are default ball blocks which will be used in the game. # # The layout of the config is as follows: # MATERIAL_NAME: # color: COLOR_WHICH_THE_BLOCK_REPRESENTS_IN_HEX # name: COLOR_DISPLAY_NAME # custom_model_data: NUMBER_CUSTOM_MODEL_DATA # # For older versions you can add data number to change the variant. # MATERIAL_NAME-4: # color: COLOR_WHICH_THE_BLOCK_REPRESENTS_IN_HEX # name: COLOR_DISPLAY_NAME # custom_model_data: NUMBER_CUSTOM_MODEL_DATA # # If you want a player head use this format: # SPECIAL_NAME: # texture: HEAD_TEXTURE # name: COLOR_DISPLAY_NAME # balls:
RED_CONCRETE_POWDER:
color: 8c2020
name: red
ORANGE_CONCRETE_POWDER:
color: de6101
name: orange
YELLOW_CONCRETE_POWDER:
color: eead15
name: yellow
LIME_CONCRETE_POWDER:
color: 5ca618
name: lime
GREEN_CONCRETE_POWDER:
color: 485a23
name: green
CYAN_CONCRETE_POWDER:
color: 167687
name: cyan
LIGHT_BLUE_CONCRETE_POWDER:
color: 2287c4
name: blue
BLUE_CONCRETE_POWDER:
color: 2b2d8d
name: blue
PURPLE_CONCRETE_POWDER:
color: 631f9a
name: purple
MAGENTA_CONCRETE_POWDER:
color: a72f9d
name: magenta
PINK_CONCRETE_POWDER:
color: d3658e
name: pink
WHITE_CONCRETE_POWDER:
color: ccd2d3
name: white
LIGHT_GRAY_CONCRETE_POWDER:
color: 7b7b71
name: light gray
GRAY_CONCRETE_POWDER:
color: 35383c
name: gray
BLACK_CONCRETE_POWDER:
color: 090b10
name: black
BROWN_CONCRETE_POWDER:
color: 5f3a1f
name: brown
# Default display material default_display_material: BLUE_STAINED_GLASS_PANE
# Number of wins to win the game number_of_wins_to_win: 5
# Start with serving (if set to false the serving part of the game is ignored). start_with_serving: true
# How many times you can try to serve a ball. serving_attempts_count: 2
# Display where the player needs to get the ball when serving. display_serving_area: true
# Max wait time in seconds to start the round. max_time_for_start: 30
# Max game time in seconds. max_game_time_seconds: 1800
# Preferences ball: # Changes how fast the ball moves (faster is harder and requires better connection). physics_time_scale: 0.3
# Maximum distance between players head and ball to hit it. max_player_hit_distance: 2
gravity: 0.08
wind_resistance: 0
# Minimum velocity for bouncing bounce_threshold: 0.05
bounce_factor: 0.75
max_speed: 10.0
serve_pitch: 20.0
hit_pitch: 20.0
# Commands # you can use <player> when not using player mode ( give <player> gold ). # as well as <uuid> win:
command: 'give <player> minecraft:gold_ingot'
player: false
lose:
command: ''
player: false
# Game mode: # true = the whole server is for one game. # false = have a lobby and games in one server. is_game_per_server: false
# return server return_server:
enabled: false
name: lobby
# Lobby leave item. # You can replace material with texture. lobby_leave:
enabled: true
slot: 8
material: RED_BED
name: "&cLeave" lore: -
"&eClick to leave the lobby."
# Scoreboard settings scoreboard_enabled: true
# Block commands when in game block_commands_in_game:
enabled: true
not_blocked_permission: TennisParty.admin
allowed_commands: - help
# if is_game_per_server is set to true ignore this lobby:
world: world
x: 0.5
y: 100.0
z: 0.5
yaw: 0.0
pitch: 0.0
return_to_lobby_after_game_ends: true
# Ball selector selector:
enabled: true
selector_item:
slot: 0
material: MAGMA_CREAM
name: "&eSelector" lore: -
"&7Left click to reset." -
"&7Right click to open." title: "Ball selector" rows: 4
back:
material: PAPER
name: "&eBack" lore: -
"&7Click to go back." next:
material: PAPER
name: "&eNext" lore: -
"&7Click to go to" -
"&7the next page." page:
material: BOOK
name: "&e<page>" item:
not_selected:
name: "<color><name>" lore: -
"&7Click to select." selected:
name: "&fSelected <color><name>" lore: -
"&7You have selected this ball." taken:
name: "&c&lTaken <name>" lore: -
"&7This ball is taken!" no_permission:
name: "&c&lUnavailable <name>" lore: -
"&7This is not available for you!"
# Formats formats:
commands:
no_games_for_player: '&8
[&aTennisParty&8
] &cThere is
no games you can join!'
already_in_game: '&8
[&aTennisParty&8
] &cYou are already in a game!'
not_in_game: '&8
[&aTennisParty&8
] &cYou are not in a game!'
game_not_exist: '&8
[&aTennisParty&8
] &cA game with this name does not exist!'
game_already_playing: '&8
[&aTennisParty&8
] &cThe game is already running!'
help: -
"&8&m &a" -
" &e&lHelp &r&e- &aTennis Party" -
"" -
"&e/tnp join &8- &7Join the best game." -
"&e/tnp join [name] &8- &7Join the game." -
"&e/tnp leave &8- &7Leave game." -
"" -
"&8&m &a" help_admin: -
"&8&m &a" -
" &e&lHelp &r&e- &aTennis Party Admin" -
"" -
"&e/tnp join &8- &7Join the best game." -
"&e/tnp join [name] &8- &7Join the game." -
"&e/tnp leave &8- &7Leave game." -
"&e/tnp reload &8- &7Reload the config." -
"&e/tnp create [name] &8- &7Create a new game." -
"&e/tnp edit [name] &8- &7Edit a game." -
"&e/tnp remove tool &8- &7Gets you a remove display tool." -
"&eset display material <spigot_material> &8- &7To set the display material." -
"" -
"&8&m &a" selector:
reset: "&8[&aTennisParty&8] &fBall selection reset!" set: "&8[&aTennisParty&8] &fBall <name> set!" already_set: "&8[&aTennisParty&8] &fBall <name> already set!" no_permission: "&8[&aTennisParty&8] &cYou can't select this ball!" taken: "&8[&aTennisParty&8] &fBall is already taken!" connection:
join: '&8
[&aTennisParty&8
] &fPlayer &a<player_name> &fhas joined the game! &8
[&a<count_players>&8/&a<count_max>&8
]'
leave: '&8
[&aTennisParty&8
] &fPlayer &a<player_name> &fhas left the game! &8
[&a<count_players>&8/&a<count_max>&8
]'
everyone_left:
title:
head: '&cEveryone left!'
sub: '&cStopping the game!'
chat: '&8
[&aTennisParty&8
] &cGame ended due to everyone leaving the game!'
rules:
lines: -
"&8&m &a" -
"" -
"&aRULES:" -
"&7Tennis Party is a game where players aim to hit the ball into" -
"&7their opponent's side of the court and score points." -
"&cWhen returning the ball, you don’t need to hit it. Just be within" -
"&c2 blocks of the ball and look in the direction you want it to go." -
"" -
"&8&m &a" display:
powers: -
"&aPower 1" -
"&aPower 2" -
"&aPower 3" -
"&aPower 4" -
"&aPower 5" -
"&aPower 6" -
"&aPower 7" -
"&aPower 8" -
"&aPower 9" countdown:
chat:
format: '&8
[&aTennisParty&8
] &fStarting in &a<time>&f!'
display_per_sec: 1
title:
format: '&fStarting in &a<time>'
sub: '&aThe game will start soon!'
display_per_sec: 1
winning:
title:
format: '&a&l<name> &f&lhas won!'
sub: ''
win_display:
chat: - '&e&l<num_1_name> &f&lhas won the game!'
- ''
- '
----------------------------'
- '&6&l1st &f<num_1_name>'
- '&6&l2nd &f<num_2_name>'
- '
----------------------------'
game:
waiting_for_player_to_serve:
chat: "&8[&aTennisParty&8] &fNext it's <player>'s turn." toolbar: "&fWaiting for &a<player> &fto start &7(&a<seconds>&7)&f!" block_command: "&8[&aTennisParty&8] &cYou can't execute this command while in game!" chat:
enabled: true
waiting: '&7<player_name>
: &f<message>' playing: '&7<player_name>
: &f<message>' spectating: '&8
[SPEC
] &7<player_name>
: <message>'
# Status display status: # This will be shown on waiting scoreboards <lobby_status> gamestate:
WAITING: Waiting
STARTING: Starting
PLAYING: Playing
ENDING: Ending
Before you buy the plugin make sure to read carefully this page just so you'll understand what you're getting.
Terms and conditions: This plugin cannot be refunded. You aren't allowed to redistribute/resell this plugin. You aren't allowed to modify or decompile the plugin. Support: https://discord.gg/2dcXEtP