Sueta

MurderMystery

1.5

TrollyLoki's fully customizable Murder Mystery minigame

·Plugin

My remake of the classic minigame Murder Mystery.

Features:

  • Build and use your own maps
  • Start game with all online players or only a certain list (names separated by commas, no spaces )
  • Automatically fill chests and set blocks when a game starts or ends
  • All messages are customizable
  • Scoreboard with per-player information onscreen
  • Customize murder sword, detective bow, and bystander invisibility potion
  • Turn bystander potion on or off
  • Optional deputy role with a bow that does not drop on death
  • Ability to change total time, grace period length, and more in the config
  • Commands to control remaining time, get roles, and more
  • Auto restart on random maps using shuffle mode
  • Traitor test command for command blocks
  • Update checker
Commands / Permissions

Commands:

  • /mm start <map> [players] - mm.start - Start a game on a specific map
  • /mm shuffle [players] - mm.start - Enable shuffle mode (Explained above)
  • /mm stop - mm.stop - Manually stop a game and/or disable shuffle mode
  • /mm kill <player> - mm.kill - Simulate a player being killed
  • /mm revive <player> - mm.revive - Revive a player that was killed
  • /mm role <player> - mm.role - Get the role of a player
  • /mm time <set|add|remove> <amount> - mm.time - Change the remaining time (Amount in seconds)
  • /mm create <map> [displayname] - mm.create - Create a map with the specified name and display name
  • /mm delete <map> - mm.delete - Remove a map from the config
  • /mm reload - mm.reload - Reload the config file

Additional Permissions:

  • mm.update - Notifies the player when an update is available
  • mm.immune - Makes a player immune from being killed (Except by the /mm kill command) - Note: Opped players do not have this permission by default
  • mm.gamemode - Allows a player to change their gamemode while playing
  • mm.drop - Allows a player to drop items while playing
Configuration
maps  :  
  map1   :   # This is an example, use it as a template   
    shuffle-exempt   :  true  
    name   :  'Map 1'  
    spawn  :  
      location   :  0,100,0  
      yaw   :  0  
      pitch   :  0  
      world   :  world  
    start  :  
      commands   : 
      - 'say Game Starting'  
      blocks  :  
        diamond  :  
          location   :  0,99,0  
          block   :  DIAMOND_BLOCK  
        chest  :  
          location   :  1,100,0  
          block   :  CHEST  
          contents  :  
            0  :  
              material   :  COAL_BLOCK  
              amount   :  1  
              name   :  '&5Free Coal'  
              glow   :  false  
              lore   : 
              - '&6Its free!' 
              - '&3For  all  !'  
            13  :  
              material   :  EMERALD  
              amount   :  5  
              name   :  '&aMystic Emerald'  
              glow   :  true  
              lore   : 
              - '&6Rare and very  ...  ' 
              - '&cValuable!' 
               
    end  :  
      commands   : 
      - 'say Game Over!'  
      blocks  :  
        diamond  :  
          location   :  0,99,0  
          block   :  GRASS_BLOCK  
        chest  :  
          location   :  1,100,0  
          block   :  AIR 
       
enable-deputy   :  false  
items  :  
  sword  :  
    name   :  '&4Murderer Sword'  
    lore   : 
    - 'Used to kill bystanders'  
  bow  :  
    name   :  '&1Detective Bow'  
    lore   : 
    - 'Used to kill the murderer'  
  deputy-bow  :  
    name   :  '&9Deputy Bow'  
    lore   : 
    - 'Used to kill the murderer'  
  potion  :  
    enabled   :  false  
    name   :  '&6Invis Potion'  
    lore   : 
    - 'Used to hide from the murderer'  
    duration   :  30  
    type   :  'splash'  
    color   :  '189,40,42' 
     
titles  :  
  in   :  10  
  stay   :  30  
  out   :  10  
  murderer  :  
    title   :  'You are the &4Murderer'  
    subtitle   :  '&eGoal  :  Kill  all  players'  
    role   :  '&4Murderer'  
  detective  :  
    title   :  'You are the &1Detective'  
    subtitle   :  '&eGoal  :  Kill the murderer'  
    role   :  '&1Detective'  
  deputy  :  
    title   :  'You are the &9Deputy'  
    subtitle   :  '&eGoal  :  Help the detective'  
    role   :  '&9Deputy'  
  bystander  :  
    title   :  'You are a &6Bystander'  
    subtitle   :  '&eGoal  :  Don''t get killed'  
    role   :  '&6Bystander'  
  dead  :  
    role   :  '&4Dead'  
  game-over  :  
    title   :  'Game Over'  
    subtitle   :  'Winner  :   %winner%'   
    roles  :  
      players   :  '&6Players'  
      murderer   :  '&4The Murderer' 
     
timer  :  
  team   :  'MurderPluginTeam'  
  objective   :  'MurderPluginObj'  
  time   :  300  
  grace-period   :  20  
  restart-delay   :  5  
  scoreboard  :  
    title   :  '&4&lMurder Mystery'  
    lines   : 
    - ''  
    - '&aMap   :   %map%'  
    - ''  
    - 'Time Remaining   :   &e%time%'   
    - 'Players Remaining   :   &a%players%'  
    - ''  
    - 'Role   :   %role%'  
    - ''  
debug   :  false  
update-checker   :  true  
lang  :  
  prefix   :  '&8  [  &4MurderMystery&8  ]  &r '  
  messages  :  
    you-died   :  '&cYou were killed!'  
    you-revived   :  '&aYou were revived'  
    player-died   :  '&cA player died!'  
    player-revived   :  '&aA player was revived'  
    player-quit   :  '&c  %player% left the server, so they were removed from the game'   
    died-sound   :  ENTITY_PLAYER_DEATH  
    killed-inno   :  '&6You killed an innocent player!'  
    you-got-bow   :  '&aYou picked up the bow'  
    player-got-bow   :  '&aA player picked up the bow!'  
    detective-dead   :  '&9The detective has been killed! Find the bow to become the next detective!'  
    murderer-dead   :  '&9The murderer has been killed!'  
    all-dead   :  '&9The murderer has killed everyone!'  
    time-up   :  '&9The murderer ran out of time!'  
    grace-ending   :  '&6The grace period ends in  %time% seconds'   
    grace-ended   :  '&6The grace period has ended!'  
    auto-restart   :  '&6Starting a new game in  %time% seconds!'   
    gamemode   :  '&cYou can''t change your gamemode during a game!'  
    drop   :  '&cYou can''t drop items during a game!'  
    gold   :  '&6You picked up  %amount% gold!'   
    update   :  '&aAn update is available! Current version  :   %current%, new version: %new%. Download it from %url%'   
  command  :  
    usage   :  '&cUsage  :  /mm <start|shuffle|stop|reload|kill|revive|role|tt|time>'  
    no-perm   :  '&cYou do not have permission to do that'  
    nan   :  '&cThat is not a valid number'  
    invalid   :  '&cInvalid Usage. Use /mm for help'  
    unknown-error   :  '&cAn error occurred - Check the console for more details'  
    not-playing   :  '&cThat player is not currently in a game'  
    not-running   :  '&cNo game is currently running'  
    maps   :  '&aAvailable Maps:'  
    create  :  
      usage   :  '&cUsage  :  /mm create <map>  [  name  ]  '  
      success   :  '&aSuccessfully created  %map% at your location'   
      already-exists   :  '&c  %map% already exists'   
      not-player   :  '&cYou must be a player to do that!'  
    delete  :  
      usage   :  '&cUsage  :  /mm delete <map>'  
      success   :  '&aSuccessfully deleted  %map%'   
      doesnt-exist   :  '&c  %map% does not exist'   
    reload  :  
      usage   :  '&cUsage  :  /mm reload'  
      success   :  '&aThe config has been reloaded'  
    start  :  
      usage   :  '&cUsage  :  /mm start <map>'  
      already-running   :  '&cA game is already running'  
      shuffle-enabled   :  '&cShuffle is enabled! Disable it first'  
      invalid-map   :  '&c  %map% does not exist'   
      not-enough-players   :  '&cThere are not enough players to start a game on  %map%'   
      invalid-team   :  '&cThe team name is invalid.  (  Is it longer than 16 characters?  )  '  
      invalid-objective   :  '&cThe objective name is invalid.  (  Is it longer than 16 characters?  )  '  
      success   :  '&aSuccessfully started Murder Mystery on map  %map%'   
    shuffle  :  
      enabled   :  '&aShuffle is enabled'  
      disabled   :  '&cShuffle has been disabled'  
    kill  :  
      usage   :  '&cUsage  :  /mm kill <player>'  
      success   :  '&aSuccessfully killed  %player%'   
      already-dead   :  '&cThat player is already dead'  
    revive  :  
      usage   :  '&cUsage  :  /mm revive <player>'  
      success   :  '&aSuccessfully revived  %player%'   
      not-dead   :  '&cThat player is not dead'  
    role  :  
      usage   :  '&cUsage  :  /mm role <player>'  
      success   :  '&a  %player% is %role%'   
    tt  :  
      usage   :  '&cUsage  :  /mm tt <player>'  
      success   :  '&aThat player is the Murderer'  
      failure   :  '&cThat player is not the Murderer'  
    time  :  
      usage   :  '&cUsage  :  /mm time <set|add|remove> <amount>'  
      success   :  '&aSuccessfully changed the time to  %time%'   
      action   :  '&cThat is not a valid action, use set/add/remove'  
      over-time   :  '&cThat is over the maximum time'  
      under-time   :  '&cThat would give the time a negative value'  
    stop  :  
      usage   :  '&cUsage  :  /mm stop'  
      success   :  '&aSuccessfully stopped game on map  %map%'

If you have any ideas for me or find any bugs in the plugin or this page please report them to me on GitHub

Also, thanks to OtakusAreNEET and Arti_Creep for helping me test this plugin.

Thanks for using my plugin, and I hope you enjoy!

Similar projects

Plugin →