[RESELL RIGHTS] HubCore - Special Hub Plugin | 1.7-1.13 Support | Custom Tab |

Status
This thread has been locked.

rinse

FreeLance Editor
Premium
Feedback score
12
Posts
139
Reactions
20
Resources
0
Introduction
Hello Mc-Market, I have bought resell rights to this Hub Core but we havent been able to do updates on it because we are currently busy on other projects at the moment. If you would like to buy the ownership of this please contact DepressedDew#2124 on discord to talk about a reasonable price


Features
  • Queue Plugin Support (EzQueue & Portal)
  • Permission Plugin Support (LuckPerms, PermissionsEx, Nucleus, Vault, and Bukkit[Not Plugin, but Supported])
  • RedisBungee & BungeeCord Support (For Cross Server)
  • The ability to customize Scoreboard [Assemble and Sidebar API Integrated]
  • TabList Support (1.7-1.13 without ProtocolLib or any other dependencies) [Ziggurat Integrated]
  • Multiple Toggle-able Modules. (Basic Protections, Player Visibility, EnderButts, Double Jumps, Basics, Scoreboard, Tablist) [If you do not like it, just change the "Enable" value to false.
  • Global Placeholders (Variables) and supports MVdWPlaceholderAPI and PlaceholderAPI that can be used at almost every single text messages / descriptions.
  • Supports Reloading Specific Modules or All Modules via Command at once.
  • Multiple Configurable Custom Menu Integrated with Buttons that can execute executions via specific execution patterns.
  • Chat Format without crashing even the message has "%"
  • Multi-Threaded in some necessary features like fetch server motd so in that way it won't block Main Thread to prevent lag.

Pricing
10 USD for Jars with Updates
(Not for sale currently) USD for Sources without Updates
(Not for sale currently) USD for Sources with Updates

Screenshots

View attachment 176545 View attachment 176546 View attachment 176547 View attachment 176548

Commands



    • /hubcore reload (module) - Reload the HubCore Configurations & specific module, leave the (module) blank to reload all modules by once.
    • /setspawnlocation - Set the spawn location on login.
Configuration
Code:
License: License Here

#Don't Touch This
ConfigVersion: 1

#Available Fields: RedisBungee, BungeeCord, None
BungeeType: "BungeeCord"

#Available Fields: EzQueue, Portal
QueueType: "EzQueue"

#Available Fields: PermissionsEx, Core, Vault, LuckPerms, Nucleus
PermissionType: "PermissionsEx"

Intervals:
  Player-Count: 5

Protections:
  #Player Cannot Break Blocks
  No-Break: true
  #Player Cannot Build Blocks
  No-Build: true
  #No Damages
  No-Damage: true
  #No Hunger
  No-Hunger: true
  #No Drop
  No-Drop: true
  #No Pick
  No-Pick: true
  #No Weather Change
  No-Weather: true
  #Default GameMode on Join
  Game-Mode: ADVENTURE
  #No Creature Spawning
  No-Creature-Spawn: true
  #Teleport to Spawn Location
  TpLogin:
    Enabled: true
    Void-Teleport:
      Enabled: true
      Off-Set: 0
    Location: "world:0:0:0:0:0"
  #Force to Set Slot on Join
  Force-Join-Slot:
    Enabled: true
    Slot: 4

Modules:
  Tablist:
    Enabled: true
    Update-Ticks: 20 #In Bukkit Scheduler Ticks
    Header: "&6&lMC-Market Network" #Header
    Footer: "&6&lMC-Market Network" #Footer
    Slots:
      1: "&fHello"
      2: "&fHi"
      3: "&fThis is"
      4: "&fCustom Tablist"
  Scoreboard:
    Mode: "NO-FLICKER" #NO-FLICKER or 72-CHARS
    Enabled: true
    Update-Ticks: 2 #In Bukkit Scheduler Ticks
    Title: "&6&lMC-Market Network"
    Entries:
      Default:
        - "&7&m-----------------&r"
        - "&6Rank: &f<player_group>"
        - "&f"
        - "&6Online: &f<online_total>"
        - "&f"
        - "&6www.mc-market.org"
        - "&7&m-----------------&r"
      Queuing:
      - "&7&m-----------------&r"
      - "&6Rank: &f<player_group>"
      - "&f"
      - "&6Online: &f<online_total>"
      - "&f"
      - "&6Queuing &7(<queue_name>)"
      - "&6Position: &7#<queue_position>/<queue_amount>"
      - "&6www.mc-market.org"
      - "&7&m-----------------&r"

  EnderButt:
    Enabled: true
    Item:
      Material: ENDER_PEARL
      Amount: 1
      Name: "&e&lEnder Butt &7(Right-Click)"
      Slot: 0

  DoubleTap:
    Enabled: true
    Cooldown: 5
    Sound:
      Enabled: true
      Name: EXPLODE
      Volume1: 0.7
      Volume2: 1.5

  LobbySpeed:
    Enabled: true
    SpeedLevel: 2
    ItemSlot: 3
    Items:
      Speed:
        Name: "&6&lLobby Speed &7(Click to Toggle)"
        Amount: 1
        Data: 0
        Material: "REDSTONE_TORCH_ON"
        Lores:
          - "&7Right Click to remove your Speed Effects."

      Regular:
        Name: "&c&lLobby Speed &7(Click to Toggle)"
        Amount: 1
        Data: 0
        Material: "TORCH"
        Lores:
          - "&7Right Click to remove your Speed Effects."

  Visibility:
    Enabled: true
    Cooldown: 3
    Messages:
      Visible: "&aYou changed your personal visibility preference to &e&lVISIBLE!"
      Invisible: "&aYou changed your personal visibility preference to &e&lINVISIBLE!"
      Cooldown: "&ePlease wait %second% seconds before toggling player visibility!"
    Items:
      Visible:
        Name: "&a&lPlayer Visibility &7(Click to Toggle)"
        Amount: 1
        Data: 0
        Material: "COMPASS"
        Slot: 8
      Invisible:
        Name: "&c&lPlayer Visibility &7(Click to Toggle)"
        Amount: 1
        Data: 0
        Material: "COMPASS"
        Slot: 8
  NPC:
    Enabled: true
    NPCS:
      '1':
        Location: "world:0:0:0:0:0"
        Lines:
        - "&e&lCustom Line"
        - "&e&lWhatever You Want"
        Skin:
          Mode: "VANILLA" #Vanilla / MineSkin
          Value: "ThatKawaiiAllen"
        Executions:
        - "openmenu:serverselector"

  Basics:
    Join-Items: true
    Items:
      4:
        Name: "&6&lServer Selector"
        Amount: 1
        Data: 0
        Material: "COMPASS"
        Lores:
        - "&7Right click to view our servers."
        Executions:
        - "openmenu:Server-Selector"

    Whitelist:
      Enabled: false
      Bypass: "hubcore.whitelist.bypass"


    Chat-Format:
      Enabled: true
      Colored-Chat-For-Admin: true #Colored Chat (Chat Colored will be transferred)
      Colored-Chat-Permission: "hubcore.admin" #Permission for Colored Chat
      Format: "<player_prefix><player_name>&f: <message>" #Chat Format

    Block-Chat:
      Enabled: true
      Permission: "hubcore.bypasschat"
      Notifications:
      - "&7&m----------------------"
      - "&6&lYou cannot chat at this moment"
      - "&7&m----------------------"

    Join-Message:
      Enabled: true
      Entries:
        - "&7&m----------------------"
        - "&6&lHi <player_name>"
        - "&7&m----------------------"

Allow-Access-Menu-Via-Command: true

Placeholders:
  Server:
    Online: "&aOnline"
    Offline: "&cOffline"
Code:
Title: "&6&lMC-Market Hub Core"
Rows: 3
Buttons:
  Hi:
    Name: "&6&lUltra HardCore"
    Material: "GOLDEN_APPLE"
    Amount: 1
    Data: 0
    Slot: 13
    Lores:
    - "&7&m-----------------------------"
    - "&6Server Information:"
    - "&7* &eStatus&f: &aOnline"
    - "&7* &ePlayers&f: <online_players>/<max_players>"
    - ""
    - "&6Server Features:"
    - "&7* &eUHC Meetup with a twist!"
    - "&7* &eSolo, Team & Custom Games"
    - "&7&m-----------------------------"
    Executions:
    - "queue:UHCZone"

Execution Pattern in Menus and Hotbar Items (Only in Custom Join Items Module)
Currently I made a Execution Patterns for Menus & Hotbar Items, use given patterns to create your own executions easily :)
Executions:



    • playercommand:[command] - Execute [command] Command as player (Who clicked the button)
    • consolecommand:[command] - Execute [command] Command as console
    • queue:[queue] - Join [queue] Queue for player (Who clicked the button)
    • (tell / send / message):[message] - Send a specific message to player (Who clicked the button)
    • (connect / server):[server] - Make player (Who clicked the button) connect to bungeecord [server] Server
    • (sound / soundplay / playsound):[sound] - Play [sound] Sound to player (Who clicked the item) with Volume 1
    • (closemenu / close) - Close the current opening menu
    • (openmenu / open):[menu] - Open [menu] Menu for player
    • (previousmenu / previous) - Open a menu that the player (who clicked the button) recently closed
Placeholders (Variables) [Global Placeholders, can be used on nearly every messages & descriptions & executions]



    • Queue Category
      • <queue_name> - Get player's current queue name (If not queuing return null)
      • <queue_position> - Get player's current queue position (If not queuing return -1)
      • <queue_amount> - Get amount of players in player's current queue (If not queuing return -1)
      • <queue_maximum> - Get maximum amount of players can hold in player's current queue (If not queuing return -1)
      • <queue_online> - Get online amount of players in player's current queue (If not queuing return -1)
    • Player Info Category
      • <player_prefix> - Get player's current prefix
      • <player_suffix> - Get player's current suffix
      • <player_group> - Get player's current group name
      • <player_name> - Get player's current display name
      • <player_ping> - Get player's current ping
      • <player_level> - Get player's current level
      • <player_exp> - Get player's current experiences
    • Online (Proxy) Category
      • <online_total> - Get online amount of this entire proxy
    • Status Category
      • <status_valid_(server)> - Get the status (Online / Offline) of (server) Bungeecord Server, message is configurable in config.yml
      • <status_online_(server)> - Get online amount of (server) Server
      • <status_max_(server)> - Get max players limit of (server) Server
      • <status_motd_(server)> - Get MOTD of (server) Server
      • <status_host_(server)> - Get IP Address (without Port) of (server) Server
      • <status_port_(server)> - Get Port (without IP Address) of (server) Server
Proof of Ownership

Code:
package me.allen.hubcore;


import lombok.Getter;
import me.allen.hubcore.annotations.handler.HubListenerAnnotationHandler;
import me.allen.hubcore.annotations.handler.HubModuleAnnotationHanlder;
import me.allen.hubcore.annotations.handler.InitAnnotationHandler;
import me.allen.hubcore.bungee.IBungee;
import me.allen.hubcore.bungee.impl.BungeeCordImpl;
import me.allen.hubcore.bungee.impl.RedisBungeeImpl;
import me.allen.hubcore.module.ModuleManager;
import me.allen.hubcore.permission.IPermission;
import me.allen.hubcore.permission.impl.*;
import me.allen.hubcore.placeholder.PlaceholderManager;
import me.allen.hubcore.player.HubPlayerManager;
import me.allen.hubcore.queue.IQueue;
import me.allen.hubcore.queue.impl.EzQueueImpl;
import me.allen.hubcore.queue.impl.PortalQueueImpl;
import me.allen.hubcore.util.C;
import me.allen.hubcore.util.config.ConfigUpdater;
import me.allen.hubcore.util.config.FileConfig;
import me.allen.hubcore.util.item.InteractableItemManager;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import org.spigotmc.SpigotConfig;

import java.io.UnsupportedEncodingException;

@Getter
public class HubCore extends JavaPlugin {

    @Getter
    private static HubCore instance;

    private IBungee bungee;

    private IQueue queue;

    private IPermission permission;

    private FileConfig general;

    private ModuleManager moduleManager;

    private PlaceholderManager placeholderManager;

    private InteractableItemManager interactableItemManager;

    private HubPlayerManager hubPlayerManager;

    @Override
    public void onEnable() {
        instance = this;
        loadConfig();
        loadPermissions();
        loadQueues();
        loadBungee();
        loadManagers();
        loadAnnotations();
    }

    private void loadConfig() {
        general = new FileConfig(this, "config.yml");
        try {
            new ConfigUpdater(this, "config.yml").updateConfig();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

    private void loadBungee() {
        String type = this.getConfig().getString("BungeeType").toUpperCase();

        if (!SpigotConfig.bungee && !type.equals("NONE")) {
            Bukkit.getConsoleSender().sendMessage(C.C("&e[HubCore] Please Enable &6BungeeCord Mode &ein &6Spigot.yml &eto in order to make Hub Core to Work!"));
            Bukkit.getPluginManager().disablePlugin(this);
            return;
        }

        switch (type) {
            case "BUNGEECORD":
                bungee = new BungeeCordImpl();
                break;
            case "REDISBUNGEE":
                bungee = new RedisBungeeImpl();
                break;
            default:
                bungee = new BungeeCordImpl();
                break;
        }

        Bukkit.getConsoleSender().sendMessage(C.C("&e[HubCore] Registered \"" + bungee.getClass().getSimpleName().replace("Impl", "") + "\" (Bungee) System as the Implementation."));
    }

    private void loadPermissions() {
        String type = this.getConfig().getString("PermissionType").toUpperCase();

        switch (type) {
            case "PERMISSIONSEX":
                if (Bukkit.getPluginManager().isPluginEnabled("PermissionsEx")) {
                    permission = new PermissionsExPermissionImpl();
                } else {
                    permission = new BukkitPermissionImpl();
                }
                break;
            case "VAULT":
                if (Bukkit.getPluginManager().isPluginEnabled("Vault")) {
                    permission = new VaultPermissionImpl();
                } else {
                    permission = new BukkitPermissionImpl();
                }
                break;
            case "NUCLEUS":
                if (Bukkit.getPluginManager().isPluginEnabled("Nucleus")) {
                    permission = new NucleusPermissionImpl();
                } else {
                    permission = new BukkitPermissionImpl();
                }
                break;
            case "LUCKPERMS":
                if (Bukkit.getPluginManager().isPluginEnabled("LuckPerms")) {
                    permission = new LuckPermsPermissionImpl();
                } else {
                    permission = new BukkitPermissionImpl();
                }
                break;
            default:
                permission = new BukkitPermissionImpl();
                break;
        }

        Bukkit.getConsoleSender().sendMessage(C.C("&e[HubCore] Registered \"" + permission.getClass().getSimpleName().replace("PermissionImpl", "") + "\" (Permission) System as the Implementation."));
    }

    private void loadManagers() {
        moduleManager = new ModuleManager();
        placeholderManager = new PlaceholderManager();
        interactableItemManager = new InteractableItemManager();
        hubPlayerManager = new HubPlayerManager();
    }

    private void loadQueues() {
        String type = this.getConfig().getString("QueueType").toUpperCase();

        switch (type) {
            case "EZQUEUE":
                if (Bukkit.getPluginManager().isPluginEnabled("EzQueueSpigot")) {
                    queue = new EzQueueImpl();
                } else {
                    queue = null;
                }
                break;
            case "PORTAL":
                if (Bukkit.getPluginManager().isPluginEnabled("Portal")) {
                    queue = new PortalQueueImpl();
                } else {
                    queue = null;
                }
                break;
            default:
                queue = null;
                break;
        }

        if (queue == null) return;

        Bukkit.getConsoleSender().sendMessage(C.C("&e[HubCore] Registered \"" + queue.getClass().getSimpleName().replace("Impl", "") + "\" (Queue) System as the Implementation."));
    }

    private void loadAnnotations() {
        Bukkit.getScheduler().runTaskLater(this, () -> {
            InitAnnotationHandler.register();
            HubModuleAnnotationHanlder.register();
            HubListenerAnnotationHandler.register();
        }, 20L);
    }
}
 
Last edited by a moderator:
Status
This thread has been locked.
Top