Workspace setup - RP-Kit/RPKit GitHub Wiki

» Home » Development » Workspace setup

First clone the git repository:

git clone https://github.com/RP-Kit/RPKit.git

This should create a folder called RPKit that contains all modules.

Then import the build.gradle into IntelliJ/your IDE of choice. It should automatically find all of the other modules.

Running ./gradlew build --parallel produces builds in the build/libs directory for each plugin. These can then be collected using one of the following scripts:

copy-plugins.py (Used for copying plugins to a server)

Args:

  • --version [version]: Copies a particular version of RPKit
  • --use-worldedit: Uses worldedit selection instead of normal selection if present
  • --professions [professions/crafting-skill/none]: Sets which professions implementation to use
  • --stats [stat-builds/classes/none]: Sets which stats plugin to use
  • --code-dir [code dir]: Sets base directory for RPKit code
  • --server-dir [server dir]: Sets base directory for the server
#!/usr/bin/python3

import os
from argparse import ArgumentParser, Action, ArgumentError
from shutil import copyfile
import urllib.request


class ReadableDir(Action):
    def __call__(self, parser, namespace, values, option_string=None):
        prospective_dir = os.path.expanduser(values)
        if not os.path.isdir(prospective_dir):
            raise ArgumentError("{0} is not a valid path".format(prospective_dir))
        if os.access(prospective_dir, os.R_OK):
            setattr(namespace, self.dest, prospective_dir)
        else:
            raise ArgumentError("{0} is not a readable directory".format(prospective_dir))


class WritableDir(Action):
    def __call__(self, parser, namespace, values, option_string=None):
        prospective_dir = os.path.expanduser(values)
        if not os.path.isdir(prospective_dir):
            raise ArgumentError("{0} is not a valid path".format(prospective_dir))
        if os.access(prospective_dir, os.W_OK):
            setattr(namespace, self.dest, prospective_dir)
        else:
            raise ArgumentError("{0} is not a writable directory".format(prospective_dir))


parser = ArgumentParser(description='Copy RPKit plugins from a development directory to a server')
parser.add_argument('-v', '--version', type=str, default='1.7.0', dest='version',
                    help='Which version of RPKit to copy')
parser.add_argument('--use-worldedit', type=bool, nargs='?', const=True, default=False, dest='use_worldedit',
                    help='Use WorldEdit for selection, download where required')
parser.add_argument('--professions', type=str, default='none', dest='professions',
                    choices=['professions', 'crafting-skill', 'none'], help='Which professions plugin to use')
parser.add_argument('--stats', type=str, default='none', dest='stats',
                    choices=['classes', 'stat-builds', 'none'], help='Which stats plugin to use')
parser.add_argument('--code-dir', action=ReadableDir, default='~/Documents/rpkit', dest='code_dir',
                    help='Directory where code is stored')
parser.add_argument('--server-dir', action=WritableDir, default='~/Documents/minecraft/servers/rpkit-test',
                    dest='server_dir', help='Directory where server is stored')

args = parser.parse_args()

version = args.version
use_worldedit = args.use_worldedit
professions = args.professions
stats = args.stats
code_dir = os.path.expanduser(args.code_dir)
server_dir = os.path.expanduser(args.server_dir)

print("Copying RPKit version " + version + " from " + code_dir + " to " + server_dir)

plugins = [
    'rpk-auction-lib-bukkit',
    'rpk-auctions-bukkit',
    'rpk-bank-lib-bukkit',
    'rpk-banks-bukkit',
    'rpk-character-lib-bukkit',
    'rpk-characters-bukkit',
    'rpk-chat-lib-bukkit',
    'rpk-chat-bukkit',
    'rpk-core-bukkit',
    'rpk-economy-lib-bukkit',
    'rpk-economy-bukkit',
    'rpk-permissions-lib-bukkit',
    'rpk-permissions-bukkit',
    'rpk-player-lib-bukkit',
    'rpk-players-bukkit',
    'rpk-shop-lib-bukkit',
    'rpk-shops-bukkit',
    'rpk-trade-bukkit',
    'rpk-stat-lib-bukkit',
    'rpk-stats-bukkit',
    'rpk-food-lib-bukkit',
    'rpk-food-bukkit',
    'rpk-payment-lib-bukkit',
    'rpk-payments-bukkit',
    'rpk-warp-lib-bukkit',
    'rpk-kit-lib-bukkit',
    'rpk-drink-lib-bukkit',
    'rpk-drinks-bukkit',
    'rpk-location-history-lib-bukkit',
    'rpk-tracking-lib-bukkit',
    'rpk-daily-quote-lib-bukkit',
    'rpk-essentials-bukkit',
    'rpk-lock-lib-bukkit',
    'rpk-locks-bukkit',
    'rpk-travel-bukkit',
    'rpk-feature-flag-lib-bukkit',
    'rpk-feature-flags-bukkit',
    'rpk-rolling-bukkit',
    'rpk-experience-lib-bukkit',
    'rpk-experience-bukkit',
    'rpk-skill-lib-bukkit',
    'rpk-skills-bukkit',
    'rpk-block-log-lib-bukkit',
    'rpk-block-logging-bukkit',
    'rpk-unconsciousness-lib-bukkit',
    'rpk-unconsciousness-bukkit',
    'rpk-moderation-lib-bukkit',
    'rpk-moderation-bukkit',
    'rpk-selection-lib-bukkit',
    'rpk-store-lib-bukkit',
    'rpk-stores-bukkit',
    'rpk-item-quality-lib-bukkit',
    'rpk-item-quality-bukkit',
    'rpk-monster-lib-bukkit',
    'rpk-monsters-bukkit',
    'rpk-language-lib-bukkit',
    'rpk-languages-bukkit',
    'rpk-notification-lib-bukkit',
    'rpk-notifications-bukkit'
]


def remove_if_exists(path):
    if os.path.exists(path):
        os.remove(path)


if stats == 'classes':
    print('Using classes for stats')
    plugins.append('rpk-class-lib-bukkit')
    plugins.append('rpk-classes-bukkit')
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-stat-build-lib-bukkit.jar'))
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-stat-builds-bukkit.jar'))
elif stats == 'stat-builds':
    print('Using stat builds for stats')
    plugins.append('rpk-stat-build-lib-bukkit')
    plugins.append('rpk-stat-builds-bukkit')
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-class-lib-bukkit.jar'))
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-classes-bukkit.jar'))
else:
    print('Not using stats')
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-stat-build-lib.jar'))
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-stat-builds.jar'))
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-class-lib-bukkit.jar'))
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-classes-bukkit.jar'))

if use_worldedit:
    print('Using WorldEdit for selection')
    # req = urllib.request.Request('https://dev.bukkit.org/projects/worldedit/files/latest')
    # req.add_header('User-Agent', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0')
    # req.add_header('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8')
    # req.add_header('Accept-Encoding', 'gzip, deflate, br')
    # req.add_header('Accept-Language', 'en-GB,en;q=0.5')
    # resp = urllib.request.urlopen(req).read()
    # worldedit_jar = open(os.path.join(server_dir, 'plugins', 'worldedit.jar'), 'w')
    # worldedit_jar.write(resp)
    # worldedit_jar.close()
    plugins.append('rpk-selection-worldedit-bukkit')
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-selection-bukkit.jar'))
else:
    print('Using RPKit selection')
    plugins.append('rpk-selection-bukkit')
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-selection-worldedit-bukkit.jar'))

if professions == 'professions':
    print('Using professions for professions')
    plugins.append('rpk-professions-lib-bukkit')
    plugins.append('rpk-professions-bukkit')
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-crafting-skill-lib-bukkit.jar'))
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-crafting-skill-bukkit.jar'))
elif professions == 'crafting-skill':
    print('Using crafting skill for professions')
    plugins.append('rpk-crafting-skill-lib-bukkit')
    plugins.append('rpk-crafting-skill-bukkit')
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-professions-lib-bukkit.jar'))
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-professions-bukkit.jar'))
else:
    print('Not using professions')
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-crafting-skill-lib-bukkit.jar'))
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-crafting-skill-bukkit.jar'))
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-professions-lib-bukkit.jar'))
    remove_if_exists(os.path.join(server_dir, 'plugins', 'rpk-professions-bukkit.jar'))

print('Copying plugins:\n - ' + '\n - '.join(plugins))

for plugin in plugins:
    copyfile(
        os.path.join(code_dir, 'bukkit', plugin, 'build/libs', plugin + '-' + version + '-all.jar'),
        os.path.join(server_dir, 'plugins', plugin + '.jar')
    )

skills = [
    'rpk-skill-fireball-bukkit'
]

print('Copying skills:\n - ' + '\n - '.join(skills))

for skill in skills:
    copyfile(
        os.path.join(code_dir, 'bukkit/skills', skill, 'build/libs', skill + '-' + version + '-all.jar'),
        os.path.join(server_dir, 'plugins', skill + '.jar')
    )