Sueta

Connect Four 1v1 GUI Minigame [1.8.8 - 26.3]

1.5.3

Connect Four GUI minigame, including sounds, falling animation, configuration etc..

·Config

ConnectFour GUI 1vs1 Minigame

Minecraft GUI minigame
Supports any bukkit platform from 1.8 up to 26.3

SHOWCASE
YouTube

Features:

  • GUI
  • Bets
  • Leaderboard
  • Player stats
  • Configurable rewards
  • Placeholders
  • Hex colors
  • Configurable messages

Commands:

/connectfour - Shows a help menu
/cf invite <player> [bet]
/cf bet <player> <bet>
/cf accept <player>
/cf reject <player>
/cf stats [player]
/cf leaderboard
/cf reload

Placeholders:

%connectfour_wins%
%connectfour_losses%
%connectfour_draws%
%connectfour_played%
%connectfour_winrate%
%connectfour_leaderboard_<position>% - Returns player name at given position
%connectfour_leaderboard_<position>_wins% - Returns wins at given position
%connectfour_leaderboard_<position>_played% - Returns played games at given position


Configuration

Default configuration
# Prefix for chat messages by this plugin
prefix: "&7[&6ConnectFour&7] &r"

lang: "en"

# Should the plugin check for updates?
updateCheck: true

hooks:
    # Should the plugin hook into PlaceholderAPI?
    # If set to true, and PlaceholderAPI is not installed, the plugin will still work
    placeholderAPI: true

    # Should the plugin hook into Vault for economy support?
    # If set to false, betting feature will be disabled
    vault: true

# Send bstats metrics
metrics: true

# Can player escape by pressing ESC key single time? true = have to press ESC key 2 times
doubleEscape: true

# How max should we wait for opponent to make his move (in seconds)
# 0 = disabled
moveTimeout: 120


# Timeout in seconds for invites
# Invite will expire in x seconds
inviteTimeout: 60

# Should the plugin use the token fall animation?
# If set to false, the token will be placed instantly
tokenFallAnimation: true

# Token falling speed in milliseconds
# The lower the value, the faster the token will fall
tokenFallSpeed: 100 # ms per row

# Should the player who is inviting always start first?
inviterStarts: false

# Winning rewards:
winRewards:
    enabled: false
    commands:
        - "eco give %player% 1000"
        - "give %player% diamond 1"

bets:
    min: 0
    max: 1000000


Locale

messages-en.yml
# {prefix} will be replaced with prefix defined in config.yml

only_player: "{prefix}&cYou must be a player to use this command!"
wrong_usage: "{prefix}&cWrong usage! &8(&7{usage}&8)"
config_reload: "{prefix}&aConfig reloaded!"
no_stats_found_player: "{prefix}&cNo stats found for this player!"
no_leaderboard_entries: "{prefix}&cNo stats found!"
invite_self_err: "{prefix}&cYou can't invite yourself!"
player_already_playing: "{prefix}&cThis player is already playing a game!"
self_already_playing: "{prefix}&cYou are already playing a game!"
someone_already_invited: "{prefix}&cYou already invited someone!"
player_already_invited: "{prefix}&cYou already invited this player!"
self_accept_err: "{prefix}&cYou can't accept your self!"
self_reject_err: "{prefix}&cYou can't reject your self!"
no_invites_from_player: "{prefix}&cYou don't have any invites from this player!"
no_invites: "{prefix}&cYou don't have any invites!"
invite_sent: "{prefix}&aInvite sent to &e&l{player}"
invite_expired: "{prefix}&cThe invitation has expired!"
invite_err: "{prefix}&cAn error occurred while sending the invitation"
invite_accept_other: "{prefix}&e{player} &ahas accepted the invitation"
invite_accept_self: "{prefix}&aYou have accepted the invitation!"
invite_reject_other: "{prefix}&e{player} &chas rejected the invitation!"
invite_reject_self: "{prefix}&cYou have rejected the invitation!"
move_timeout: "{prefix}&cPlayer &e{player} &ctook so long to make his move!"
esp_confirm: "{prefix}&fPress escape key one more time to exit the game!"

not_enough_money: "{prefix}&cYou don't have enough money to start the game!"
invite_accept_no_money_target: "{prefix}&c{player} doesn't have enough money to start the game!"
invite_accept_bet_withdraw: "{prefix}&a{bet}$ &fhas been withdrawn from your balance for the bet!"

game_refund_other_cancel: "{prefix}&fThe opponent has cancelled the game. You got the pot of &a{pot}$&f!"
game_refund_cancel: "{prefix}&fGame has been cancelled. &a{bet}$ &fhas been refunded to your balance!"
game_lost_due_cancel: "{prefix}&cYou lost your &a{bet}$ &cbet because you cancelled the game!"

won_bet: "{prefix}&fYou won the bet! You received &a{pot}$ &ffrom the pot!"
draw_pot: "{prefix}&fThe game ended in a draw! You received &a{bet}$ &ffrom the pot!"
lost_bet: "{prefix}&cYou lost the bet! You lost your &a{bet}$ &c!"

max_bet: "{prefix}&cYou can't bet more than &a{max}$&c!"
min_bet: "{prefix}&cYou can't bet less than &a{min}$&c!"

# When one of the player exit out of game GUI
game_closed: "{prefix}&cGame has been closed"

leaderboard:

    # If you dont want to use header or footer, simply remove them
    header: "&a&m-+-----------------&r&a[&bConnectFour&a]&a&m-----------------+-"
    footer: "&a&m-+----------------------------------------------+-"

    # Keep in mind that this array have to be sorted
    symbols: ["?", "?", "?", "?", "?", "?", "?", "?", "?", "?"]

    # How many players should be showed up
    # MAX = 10
    # MIN = 1
    entries: 10

    entry: "     &e{symbol} &7{player} &f- &9{wins} wins  &7(&fWinRate: {winrate}&7)"

gui:
    title: "&6&lConnectFour"

    yellow: "&eYellow"
    red: "&cRed"
    draw: "&6&lDRAW"
    win: "&a&lWIN"
    winner: "&e&lWINNER"

    border_item_lore:
        - " "
        - "&7&l| &fOn move: &9{player}"

    # Player heads in the GUI
    skull:
        name: "&9{player}"
        lore:
            - " "
            - "&7&l| &7Color: {color}"

    
    pot:
       name: "&6&lPot: &a{pot}$"       
       lore:
           - " "
           - "&7&l| &fEach player bet: &a{bet}$"

invite:
    # Modify this if you are running CraftBukkit platform
    bukkit_invite: "&aYou have been invited to a game by &e{player}&7. Type &a/cf accept {player} &7to accept or &c/cf reject {player} &7to reject"

    # If you dont want to use header or footer, simply remove them
    header: "&a&m-+-----------------&r&a[&bConnectFour&a]&a&m-----------------+-"
    footer: "&a&m-+----------------------------------------------+-"

    # Text that will be between header and clickable buttons. (second line)
    text: "&fYou have been invited to a game by &e&l{player}"

    # Clickable buttons
    accept:
        text: "&7[&aACCEPT&7]"
        hover: "&aClick to accept"

    reject:
        text: "&7[&cREJECT&7]"
        hover: "&cClick to reject"

    # This text below will be centered between the header and footer
    buttons: "{button1}    {button2}"

help:

    # If you dont want to use header or footer, simply remove them
    header: "&a&m-+-----------------&r&a[&bConnectFour&a]&a&m-----------------+-"
    footer: "&a&m-+----------------------------------------------+-"

    entry: " &9&l➢ &7{command} &8- &f{description}"

    descriptions:
        stats: "View stats"
        leaderboard: "View leaderboard"
        invite: "Invite a player"
        accept: "Accept an invite"
        reject: "Reject an invite"
        reload: "Reload the config"

stats:

    # Should be all text centered if executor is player?
    centered: true

    # If you dont want to use header or footer, simply remove them
    header: "&a&m-+-----------------&r&a[&bConnectFour&a]&a&m-----------------+-"
    footer: "&a&m-+----------------------------------------------+-"

    text: "&e&l{player} &fstatistics"

    list:
        - " &e&l➢ &7Wins: &9{wins} &e&l⮘"
        - " &e&l➢ &7Losses: &9{losses} &e&l⮘"
        - " &e&l➢ &7Draws: &9{draws} &e&l⮘"
        - " &e&l➢ &7Win rate: &9{winrate}% &e&l⮘"
        - " &e&l➢ &7Games played: &9{gamesPlayed} &e&l⮘"
       #- " &e&l➢ &7Total bet: &a{betsTotal}$ &e&l⮘"
       #- " &e&l➢ &7Bets win rate: &9{betRate}% &e&l⮘"
       #- " &e&l➢ &7Won from bets: &a{betsWon}$ &e&l⮘"
       #- " &e&l➢ &7Lost from bets: &c{betsLost}$ &e&l⮘"

Similar projects

Config →