Dream Minecraft Manhunt (with optional Discord music integration)
MinecraftManhunt
Made by Eric (yoonicode.com)
Minecraft: TildeTildeTilde
Inspired by Dream on YouTube
This project is open-source! View on Github
Something wrong? Plugin broken? Check the FAQ Issues page or report the problem here!
How It Works
Three teams: Hunters, Runners, and Spectators Hunters try to kill the runners before they beat the enderdragon. Runners must beat the enderdragon before they get killed once!
Features
- Compass tracking: Right-click with your compass to choose who to track, then the compass will point to that runner!
- Portal tracking: If a runner is in the nether, the compass will track their last-used portal!
- Teams assignment: Automatically assigns in-game
/team
to distinguish between players with colors! - Discord integration: Optionally integrate with Discord for extra features!
- Auto role assignment: Automatically assign Discord roles according to teams
- Music player: Automatically (or manually) play music in your Discord voice channel that mirrors the action happening!
Instructions For Use
- Move the .jar to your plugins folder.
- Make sure your config file is up to date and has all the required options (more info down below).
- Assign roles with
/speedrunner
,/hunter
, and/spectator
. - If you want automatic music, type
/music auto
now. - Type
/start
! - After the headstart period is over, hunters should be able to start tracking runners by selecting someone to track by right-clicking with their compass.
Note: teams are not persistent between server sessions— if you shut down the server you'll have to re-assign teams and type
/start
again.
Discord Setup Instructions
-
- Create a Discord app from the Developer Portal.
- Add a Bot under the bots tab.
- Take note of your Client ID (in the General Information tab) and your Token (under the Bot tab).
- Go to the following link, replacing
123YourClientID456
with your client ID:https://discord.com/oauth2/authorize?scope=bot&client_id=123YourClientID456&permissions=8
- Select the Discord server to add your bot to.
- Add your Client ID and Token to the respective fields in the config file.
- Go to your Discord server, and add the following values to the config file, in accordance with the table above (you can
Right Click > Copy ID
if you turn on Developer Mode in Discord settings!)- the ID of your server
- the ID of the voice channel you want your music to play in
- the ID of the hunter, runner, and spectator Discord roles you want to be automatically assigned
Note: For auto-role-assignment to work, each Discord user's nickname for your Server must be set to their Minecraft username.
Commands
/speedrunner <username>
: Assign speedrunner role/hunter <username>
: Assign hunter role/spectator <username>
: Assign spectator role/start
: Start the match/end
: End the match/compass
: Give yourself a compass/music
: Controls the Discord music/music list
: Gets a list of available tracks to play./music <trackname>
: Plays a specific track by nickname and turns off auto-music./music stop
: Stops all music playing and turns off auto-music./music auto
: Turns on auto-music, which plays different tracks based on game events and hunter/runner distance./music forceupdate
: Forces the music to update to match the current hunter/runner distance. Use/music stop
first if a special event track is playing.
Configuration Options
Edit the plugins/MinecraftManhunt/config.yml
file with the following options:
Game Options
Key | Description | Type | Required? |
---|---|---|---|
headStartDuration | How long the hunters should get blindness and slowness when the match starts, in secs. | int | Required |
compassEnabledInNether | Set to true to allow the compass to work in the nether. | boolean | Optional, defaults to true |
sendUsageData | Set to true to send anonymized, aggregated usage data to help improve the plugin. | boolean | Optional, defaults to false |
uuid | Randomized id that is automatically assigned if sendUsageData is enabled. Please do not touch this field. |
string | Do not set manually |
Extra Options
Key | Description | Type | Required? |
---|---|---|---|
setRunnersToSpecOnDeath | Set to true to set runners' gamemodes to spectator when they die. | boolean | Optional, defaults to true |
huntersColor | The color to give to the hunters team. |
string | Optional |
runnersColor | The color to give to the runners team. |
string | Optional |
spectatorsColor | The color to give to the spectators team. |
string | Optional |
clearRunnerInvOnStart | Set to true to clear the runners' inventories and experience when the game starts. | boolean | Optional, defaults to false |
clearHunterInvOnStart | Set to true to clear the hunters' inventories and experience when the game starts. | boolean | Optional, defaults to false |
clearItemDropsOnStart | Set to true to clear all Item entities when the game starts. | boolean | Optional, defaults to false |
setTimeToZero | Set to true to reset the game time when the game starts. | boolean | Optional, defaults to true |
startGameByHit | Set to true to start the game when a runner hits a hunter, instead of when the /start command is used. |
boolean | Optional, defaults to false |
preGameWorldBorder | Set to true to enforce a world border before the game starts (useful to keep players from running too far). | boolean | Optional, defaults to false |
preGameBorderSize | States how big the pre-game world border would be, if enabled. | int | Optional, defaults to 100 ; ignored when preGameWorldBorder is false |
Discord Integration
Key | Description | Type | Required? |
---|---|---|---|
enableDiscord | Set to true to turn on Discord integration. Read below for more information. | boolean | Required |
discordToken | Enter the token of your Discord bot here. | string | Required if enableDiscord is true |
ip | The Discord status message portion. Will display as Playing {value} so it's recommended that you make this your server's IP. |
string | Optional |
parseDiscordCommands | Set to true if you want music commands to be run by sending a message in Discord text channels. This allows anyone in your Discord server to run music commands, however. | Optional, defaults to false |
|
discordServerId | The ID of your Discord server that the bot is on. | string | Required if enableDiscord is true |
musicChannelId | The ID of the voice channel that the bot should play music on. | string | Required if enableDiscord is true |
hunterRoleId | The ID of the role to assign to Hunters. | string | Optional |
runnnerRoleId | The ID of the role to assign to Runners. | string | Optional |
spectatorRoleId | The ID of the role to assign to Spectators. | string | Optional |
Note: if any of the role IDs are missing or invalid, no roles will be assigned.
Permissions
Permission | Description | Recommended level |
---|---|---|
minecraftmanhunt.hunter |
Allow /hunter command |
everyone |
minecraftmanhunt.speedrunner |
Allow /speedrunner command |
everyone |
minecraftmanhunt.spectator |
Allow /spectator command |
everyone |
minecraftmanhunt.clearteams |
Allow /clearteams command |
operators |
minecraftmanhunt.start |
Allow /start command |
operators |
minecraftmanhunt.end |
Allow /end command |
operators |
minecraftmanhunt.compass |
Allow /compass command |
everyone |
minecraftmanhunt.music |
Allow /music command. Note that music commands can also be typed in Discord if processDiscordCommands in config is set to true . |
everyone |
minecraftmanhunt.config |
Allow config-changing commands, such as /setheadstart . |
operators |
Music Queues
Part of the fun of this plugin is learning what each music queue means to get a competitive advantage. Here's a list of what causes each track to play.
Distance
The intensity of the music depends on the distance between the runners and the hunters. Tracks are selected at random from the following categories:
- < 50 blocks away: Chasing
- < 150 blocks away: In Sight
- < 300 blocks away: Stealth
- < 450 blocks away: Approaching
- >= 450 blocks away: Far away
Additionally, there is a set of tracks that play if the runners, but not the hunters, are in the Nether.
Special Events
Special tracks play when events related to the game occur. Some events are:
- The runners mine their first iron ore
- The runners mine a diamond ore
- The hunters craft their first piece of iron armor
- The hunters and runners damage each other
- "Chase" music plays if the fighters have a combined total of less than two pieces of armor
- "Fight" music plays if they have more than two pieces of armor
- A hunter dies
- A runner dies
- Both players are in boats
- A runner trades with a Piglin for the first time
- A runner teleports to the end
Troubleshooting
online-mode
in server.properties must be set totrue
as of version 1.2.4.- If you are using Discord integration, make sure your server's system clock is set correctly.
- Check the FAQ Issues page, or report a problem on the Issues tab!
I absolutely love this plugin. I've been having a blast doing mc manhunts with my friends recently, however, I do have some feedback that I hope the creator will see. I seem to run into a few issues when playing the game. If the hunters die in the nether and respawn their compass ends up going absolutely crazy and spins in circles, however upon the speedrunner leaving the nether the compass fixes itself. This is the only issue I have with the ingame features.
I also only have one issue with the discord integration but first I want to say that I love it. It's super cool that it plays music based on what's happening in the game. But there are a few things I wish could be different. First off, when a runner dies it plays from a selection of only 2 songs, I would love to see more songs for this added in the future, following up on that the music resets every single time a runner dies which makes it kind of a joke when the speedrunner and hunters are just mining or gearing up and a hunter dies and it starts playing some outplay music. Also, I'm having a hard time figuring out what exactly gets the music to change. The last issue I have is that sometimes when the music auto changes it tries to load it and fails. I'm not exactly sure why this happens, but it's only occasionally. I can go some manhunts where the music works perfectly fine but other manhunts when the music tries to update it just doesn't play anything.
Other than the things I've listed I do really enjoy using this plugin. I look forward to future changes/updates that you make to this plugin.
In reply to Shorfy1:
Glad you're enjoying the plugin!
1) Thanks for reporting this problem with the compass—I've seen this happen once before, but I did not know what exactly caused it! I'll try to fix it soon.
2) Indeed there are only two songs upon runner death—I'll look through to see what other fitting tracks I can find and add them, and possibly split the "hunter death" cue into a) by natural causes and b) killed by runner.
3) There are two types of tracks that play: normal tracks and special tracks. The selection of normal tracks changes based on distance between the runners and hunters, so the more tense the music the closer the teams are. The special tracks play on certain triggers that are related to progression in the game—part of the fun is learning when special tracks trigger which can serve as an advantage to those who can figure it out ;) to name a few: when both teams are in boats, when iron is first mined by runners, when runners trade with piglins, when one team hits the other (either "chase" or "fight" tracks depending on # of armor pieces), when one team kills the other, when iron armor is crafted by hunters, when diamonds are mined, etc.
4) Since the music player sources audio from various Youtube videos, when these videos get taken down, those tracks stop working. This is a matter of changing URLs in the source code, so I'll look through all the tracks and replace whichever ones are broken. Otherwise, it might be a configuration issue—in the games where it doesn't play anything, please open an issue on the Github repo including any server logs and I'll address this.
In reply to ericyoonicorn:
Hey, Thank you so much for responding. If I'm being honest I wasn't expecting a response let alone so soon so thank you so much for that. To help you save time I just went on my server and tested all the tracks earlier with the console open on my second monitor. I noticed that they all played perfectly fine except for one of them titled "discovered". I noticed in the console that it stated the video was "a private video"
[MinecraftManhunt] [00:18:30] [lava-daemon-pool-info-loader-2-thread-1/WARN]: com.sedmelluq.discord.lavaplayer.tools.FriendlyException: This is a private video.
However that is the only one that refused to play. I hope this helps save you some time.
Last thing I want to say is about the two tracks that plays upon hunter deaths. This one isn't that big of a problem of mine but it does without a doubt, throw off the vibe of the manhunt a little, especially, as I've stated before, when both teams are getting resources/gearing up and one of the hunters dies and it acts like the runner just pulled off an enormous feat. If you are open to suggestions maybe just make it so that when hunters die to runners, it will play the tracks. Also, one last last thing. These tracks do tend to stack on top of one another. For example the runner kills a hunter and one of these tracks start to play. If the runner then kills another hunter it will reload the same track or the other track and start playing it from the beginning.
Again, Thank you for responding and I look forward to future updates :)
This is my fav Manhunt plugin for the simple to use config and a 10/10 compass GUI. 2 quick features that would work really nicely with this plugin.
In the config 2 settings being something like:
hunteronehit <true,false> Where the hunter punches a speedrunner and insta kills (from dreams assassin video)
runnerfreezeray <true,false> where the speedrunner can look at a hunter from max 64 blocks and freezes them
The reason i want both is because most assassin/manhunt plugins dont have customized configs like yours. i used to use a 1.15 plugin but then they didnt update it to have compasses work in the nether/end.
Im giving 4.5 stars because this might take a bit of time, on bukkit there is a freeze ray plugin when searched "assassin" so if you maybe asked them for the code idk tho.
I am using this plugin on a server with online mode false and it works fine.
But whenever i play music using it, me and my friends get disconnected from the server and we are able to join after a looonnngg time. Does this mean that i cannot play music in cracked server???
i have fully and correctly edited the config.yml file. Pls help me as fast as possible......
In reply to arindamgamer576:
I have not properly tested in offline mode, so I do not know if this would affect the music bot feature. Please submit a bug report and include server logs so I can help you further!
In reply to ericyoonicorn:
I have submitted the bug report, please look forward to my problem
In reply to ericyoonicorn:
i WILL CHECK OUT THE NEW VERSION AND REPLY. THANKS A LOT!
In reply to arindamgamer576:
BUT HEY, I AM CHECKING THE FILES TAB IN THE DEV.BUKKIT WEBSITE, THERE IS NO VERSION 1.3.3.7, ONLY TILL 1.3.3.6
In reply to arindamgamer576:
It exists https://dev.bukkit.org/projects/dream-style-manhunt/files/3301147
A manhunt with these things would be perfect.
- Customizable loadouts depending on whether runner or hunter
- able to change objective to something easier than killing the ender dragon (configurable options)
- Set players back to spawn when game ended
- and of course basic things all manhunt plugins have
Thanks so much for developing this plugin with all these features (especially the Discord integration, that is just so cool and my friends and I are having a blast). If there's any way I can donate, I'd love to. It's too good to be free!
Do you know if there's a way to customize the tracks with the auto music functionality? I think the way you have it coded, the music player pulls tracks from YouTube, right? Would it be possible for us to alter those tracks using different links, and if so, how?
In reply to NoTimeToFail:
Glad you're enjoying the plugin! There's no way right now to customize which music plays, but if you know a bit of Java, you can make a fork of the repository on Github and change the track URLs! (The project uses Maven, so follow this handy guide to get started!)
In reply to ericyoonicorn:
I'll have to give it a shot. Thanks :))
Hi there! I am trying to run this locally with a friend, where they join, I assign them the hunter role, they hunt me, and then we switch roles after that round is over.
I would like whoever has the hunter role to be able to use the /compass command as they see fit, so when they die repeatedly they can still easily get back on track.
I'm fairly new to this whole thing but I've got most of it properly working. I don't know much about permissions.
I have the luck permissions plugin in and your plugin.
What's the simplest way for me to let whoever I've typed /hunter for to have access to the /compass command as long as they're a hunter?
In reply to lord_nuke_:
There's currently no way to assign permissions to only hunters (although hunters are assigned a Scoreboard team; I'm also a permissions noob, but if you find a way to grant a permission when someone is on a team, that would work), but if you're okay with manually creating a LuckPerms group for manhunt players, you can use this:
Where "manhuntplayer" is the custom group you created and assigned to players/hunters. Hope this helps!
In reply to ericyoonicorn:
Yeah I don't really know what I'm doing with LuckPerms at all. Alternatively, is there a way to give *all* players the compass command?
In reply to lord_nuke_:
The "default" group in LuckPerms is automatically applied to everyone:
In reply to ericyoonicorn:
Good to know! THat'll do in a pinch if I can get it to work.
When I put that in the permissions.yml file I get "[10:18:17] [Server thread/WARN]: Server permissions file permissions.yml is not valid YAML." so I'm guessing there's more to it than just a quick paste job.
In reply to lord_nuke_:
The command I sent doesn't go in permissions.yml, type it as a command! LuckPerms should automatically manage the permissions.yml file, you don't have to touch it. Look at the LuckPerms Documentation for info on getting started!