Revamp website with new Docusaurus version

This commit is contained in:
2024-11-30 14:00:25 -06:00
parent efc22a7bc6
commit ab9280f8d4
52 changed files with 41244 additions and 846 deletions

63
docs/compiling.mdx Normal file
View File

@ -0,0 +1,63 @@
---
id: compiling
title: Compiling Plex
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Compiling
Compiling Plex is straightforward as there are no dependencies that need to be added manually. Plex uses Gradle as the build system. All compiling instructions are in the ```build.gradle.kts``` file. Note that you can download an already compiled version of Plex from the [CI Server](https://ci.plex.us.org).
## Prerequisites
Please ensure that you have Java 17 installed on your computer, as Plex requires JDK 17 to compile. You will get an error if you try to use an older version.
If you have Java 17 installed, it may not be set in your path. If you do not already have Java installed, the recommended place to get Java is from [Adoptium](https://adoptium.net/). In the installer, there is an option to set JDK 17 to your path. **You must select that option if it is not already selected by default.**
Plex does not require, but recommends having Git installed on your computer. If you do not want to install Git, you may download the source code manually. Git for Windows can be downloaded [here](https://git-scm.com). macOS and Linux users should already have Git installed by default.
## Using the command line
First, clone the Plex source code from GitHub on to your computer using the following command.
```bash
git clone https://github.com/plexusorg/Plex
```
:::note
If you don't have Git installed, you can download a ZIP of the source code from the repository instead.
:::
Next, change your working directory to the Plex folder.
```bash
cd Plex-master
```
Gradle is already included in the folder with Plex. Run the following command below based on your operating system to compile Plex.
<Tabs>
<TabItem value="macOS" label="macOS" default>
```bash
./gradlew build
```
</TabItem>
<TabItem value="Windows" label="Windows">
```bash
gradlew.bat build
```
</TabItem>
<TabItem value="Linux" label="Linux">
```bash
./gradlew build
```
</TabItem>
</Tabs>
You should receive a message indicating the compilation was successful. The JAR files for the Server and Proxy are located in the `build/libs` folder.
Plex has no external dependencies and can be used right away after compilation. Plex works on Minecraft 1.19 to 1.20.4. You also must be running Java 17 on the server itself.
## Troubleshooting
If you receive an error that says Permission denied, run `chmod a+x gradlew`. Note that this only applies to macOS / Linux users.

View File

@ -0,0 +1,85 @@
---
id: commandblocker
title: Command Blocker
---
# Command Blocker
Plex features an advanced command blocker with support for matching and RegEx statements. It is recommended that you use this only in conjunction with ranks. If you are using permissions, there is not as much of a need for a command blocker.
## Default file
The default `commands.yml` file is below.
```yaml title=/plugins/Plex/commands.yml
#
# Command Blocker
#
# Format:
# - "<regex or match>:<rank>:command name no slash:Block message"
#
# Symbols to use:
# - r for RegEx
# - m for matching
# - The ranks are "e" for everyone, "s" for senior admin, and "a" for admin
# - MATCHING MODE: The command is just the command without slashes. Optional arguments are specified as well. It also accepts full plugins via specifying the plugin name followed by a ":" (e.g. "viaversion:")
# - REGEX MODE: The command is regex that matches the desired command. It matches case insensitively.
# - Finally the block message MUST NOT CONTAIN ":". Use _ to use the default command blocked message as specified in messages.yml, or you can optionally put your own in
#
# So these would be valid:
# - "m:e:mail sendall:You cannot send messages to everyone on the server"
# - "r:e:^[A-z]*:[A-z]*::Plugin specific commands are disabled"
commands:
- "m:a:break:_"
- "m:a:delchunks:_"
- "m:a:kickall:_"
- "m:a:locatebiome:_"
- "m:a:playsound:_"
- "m:a:setspawn:_"
- "m:a:socialspy:_"
- "m:a:tpall:_"
- "m:e:/eval:_"
- "m:e:advancement:_"
- "m:e:antioch:_"
- "m:e:backup:_"
- "m:e:ban-ip:_"
- "m:e:co purge:_"
- "m:e:d minecart_command:_"
- "m:e:debug:_"
- "m:e:defaultgamemode:<gray>The default gamemode should not be changed."
- "m:e:deljail:_"
- "m:e:disguiseradius:_"
- "m:e:fill:_"
- "m:e:jails:_"
- "m:e:mail sendall:<red>You cannot send messages to everyone on the server."
- "m:e:mail sendtempall:<red>You cannot send messages to everyone on the server."
- "m:e:paper:_"
- "m:e:pardon-ip:_"
- "m:e:pardon:_"
- "m:e:save-off:_"
- "m:e:save-on:_"
- "m:e:setjail:_"
- "m:e:spigot reload:_"
- "m:e:time:<gray>Server-side time changing is disabled. Please use /ptime to set your own personal time."
- "m:e:togglejail:_"
- "m:e:undisguiseradius:_"
- "m:e:weather:_"
- "m:e:worldborder:<gray>The worldborder does not need to be changed. This command is disabled."
- "r:a:^(co|core|coreprotect) (rb|rollback|l|lookup|rl|reload):_"
- "r:e:^[A-z]*:[A-z]*::<gray>Plugin specific commands are disabled."
# These commands will be blocked when a player is muted
block_on_mute:
- me
- say
- msg
- reply
- mail
```
## The symbols
- `r` represents RegEx and `m` represents matching.
- The ranks are `e` to block for everyone, `a` to block for admins and above, and `s` to block for senior admins and above.
## The format
An example formatted entry in the `commands.yml` file would look like this:
`"m:e:mail sendall:You cannot send messages to everyone on the server"`
The `m` will match the `mail sendall` command. The `e` stands for everyone, so it will block this command for everyone. The last part is the message. If you use `_` as the blocked message, it will use the default message specified in `messages.yml`

View File

@ -0,0 +1,417 @@
---
id: config
title: Configuration
---
# Config
This page will show you how to modify the configuration file. The configuration file is located at: ```/plugins/Plex/config.yml```.
## Default configuration
Below is the default `config.yml` file when Plex is loaded for the first time.
```yaml title=/plugins/Plex/config.yml
# Plex Configuration File
# For documentation, please visit: https://plex.us.org
server:
name: "Plexus"
motd: "%servername% - Minecraft %mcversion%"
colorize_motd: true
sample:
- "&cForums: https://forum.plex.us.org"
# What timezone should various messages appear in (e.g. ban message end date)
timezone: Etc/UTC
# Ban message is customized in the messages.yml file. The URL to appeal at is below.
banning:
ban_url: "https://forum.plex.us.org"
punishments:
mute-timer: 300
freeze-timer: 300
chat:
# Should the server use Plex's chat system? It is recommended to keep this on if you are using ranks.
# If you are using permissions, you should turn this off and use Vault to handle prefixes with a different chat plugin
enabled: true
# The maximum amount of characters a player can have for their tag
# This does not include color tags such as <red> or <rainbow>
max-tag-length: 64
# Color tag for name color
name-color: '<white>'
# You can define colors for each group which will appear in the tab list
colors:
admin: '<aqua>'
senior: '<light_purple>'
executive: '<blue>'
masterbuilder: '<dark_aqua>'
# Login Messages
loginmessages:
# Should the player be required to put their name in the login message?
name: true
data:
central:
storage: sqlite # Use mariadb, or sqlite here
user: ""
password: ""
hostname: 127.0.0.1
port: 27017
db: "plex"
side: # This is Redis, leave password blank if auth is false
enabled: false
auth: true
hostname: 127.0.0.1
port: 6379
password: ""
# Mob limiter / Entity wiping config
# All entities listed here will NOT be wiped upon wiping entities
# By default this includes all mobs, as the mobpurge command can be used to purge mobs.
entitywipe_list:
- "ITEM_FRAME"
- "AXOLOTL"
- "BAT"
- "BEE"
- "BLAZE"
- "CAT"
- "CAVE_SPIDER"
- "CHICKEN"
- "COD"
- "COW"
- "CREEPER"
- "DOLPHIN"
- "DONKEY"
- "DROWNED"
- "ELDER_GUARDIAN"
- "ENDER_DRAGON"
- "ENDERMAN"
- "ENDERMITE"
- "EVOKER"
- "FOX"
- "GHAST"
- "GIANT"
- "GLOW_SQUID"
- "GOAT"
- "GUARDIAN"
- "HOGLIN"
- "HORSE"
- "HUSK"
- "ILLUSIONER"
- "IRON_GOLEM"
- "LLAMA"
- "MAGMA_CUBE"
- "MULE"
- "MUSHROOM_COW"
- "OCELOT"
- "PANDA"
- "PARROT"
- "PHANTOM"
- "PIG"
- "PIGLIN"
- "PIGLIN_BRUTE"
- "PILLAGER"
- "POLAR_BEAR"
- "RABBIT"
- "RAVAGER"
- "SALMON"
- "SHEEP"
- "SHULKER"
- "SILVERFISH"
- "SKELETON"
- "SKELETON_HORSE"
- "SLIME"
- "SNOWMAN"
- "SPIDER"
- "SQUID"
- "STRAY"
- "STRIDER"
- "TRADER_LLAMA"
- "TROPICAL_FISH"
- "TURTLE"
- "VEX"
- "VILLAGER"
- "VINDICATOR"
- "WANDERING_TRADER"
- "WITCH"
- "WITHER"
- "WITHER_SKELETON"
- "WOLF"
- "ZOGLIN"
- "ZOMBIE"
- "ZOMBIE_HORSE"
- "ZOMBIE_VILLAGER"
- "ZOMBIFIED_PIGLIN"
- "PUFFERFISH"
# Automatically wipe the specified entities
autowipe:
# Should we automatically wipe entities?
enabled: true
# How often, in seconds, to automatically wipe entities. Default is 5 minutes.
interval: 300
# Entities to automatically wipe
entities:
- "DROPPED_ITEM"
# What blocks should be blocked?
blocked_blocks:
- "SPAWNER"
- "STRUCTURE_BLOCK"
- "JIGSAW"
# What entities should be blocked?
blocked_entities:
- "WITHER"
- "ENDER_DRAGON"
- "MINECART_TNT"
# Limit entities per chunk
entity_limit:
# Is the mob limit enabled?
mob_limit_enabled: true
# The maximum number of mobs allowed in a chunk
max_mobs_per_chunk: 50
# The available ceiling for the maximum number of mobs
mob_limit_ceiling: 500
# See https://docs.plex.us.org/docs/customization/config#worlds for documentation
# These gamerules apply to all worlds on the server
global_gamerules:
- "doWeatherCycle;true"
- "doDaylightCycle;true"
- "doMobSpawning;false"
- "keepInventory;true"
- "doFireTick;false"
- "doMobLoot;false"
- "mobGriefing;false"
- "doTileDrops;false"
- "commandBlockOutput;false"
- "naturalRegeneration;true"
- "announceAdvancements;false"
- "showDeathMessages;false"
- "sendCommandFeedback;false"
worlds:
flatlands:
name: "Flatlands"
modification:
permission: "plex.world.flatlands.modify"
message: "<red>You do not have permission to modify this world."
gameRules:
# The gamerules here override the global gamerules
- "doWeatherCycle;false"
- "doDaylightCycle;false"
parameters:
grass_block: 1
dirt: 32
stone: 16
bedrock: 1
adminworld:
name: "Admin World"
entry:
permission: "plex.world.adminworld.enter"
message: "<red>You do not have permission to enter this world."
modification:
permission: "plex.world.adminworld.modify"
message: "<red>You do not have permission to modify this world."
gameRules:
- "doWeatherCycle;false"
- "doDaylightCycle;false"
parameters:
grass_block: 1
dirt: 32
stone: 16
bedrock: 1
masterbuilderworld:
name: "MasterBuilder World"
entry:
permission: "plex.world.masterbuilderworld.enter"
message: "<red>You do not have permission to enter this world."
modification:
permission: "plex.world.masterbuilderworld.modify"
message: "<red>You do not have permission to modify this world."
gameRules:
- "doWeatherCycle;false"
- "doDaylightCycle;false"
parameters:
grass_block: 1
dirt: 32
stone: 16
bedrock: 1
# If you are running a custom fork of Plex, you may wish to check for updates from a different repository.
update_repo: "plexusorg/Plex"
# What branch should Plex fetch updates from?
update_branch: "master"
# Additional logging for debugging
debug: false
```
## Server
### server.name
The name of your server goes here and is used throughout Plex.
### server.motd
The text here will appear on the server list.
### server.colorize_motd
This determines if the message of the day should randomly be colorized. You can disable this option and manually colorize your MOTD.
### server.sample
This lets you specify a custom message under the player count in the server list.
## server.timezone
This lets you customize which timezone various messages appear in (e.g. ban message end date)
## Titles
### titles.masterbuilders
A list of players who will show up as a masterbuilder.
### titles.owners
A list of players who will show up as an owner.
## Banning
### banning.ban_url
The URL to be used when a player sees the ban message. The full ban message can be changed in `messages.yml`.
## Chat
### chat.enabled
**Default:** `true`
Determines if the chat system should be enabled. It's useful to turn this off if you're using permissions and want to use prefixes from another plugin instead.
### chat.max_tag_length
**Default:** `64`
The maximum length a tag may be in game.
### chat.name-color
**Default:** `<white>`
The default color a tag should be if a player doesn't specify any colors.
## System
### system
**Options:** `ranks` or `permissions`
This determines how Plex's command system works. If `ranks` is selected, Plex will use a ranking system and give all players operator status. If `permissions` is selected, no players are given operator. Instead, every command will have a permission attached to it which can be assigned in any permission system. It is **highly** recommended to use permissions if you are running Plex behind a proxy such as BungeeCord or Velocity. These proxies **rely** on permissions to give proper commands to players. On some misconfigured instances, if a player is opped, they may inherit *all* available permissions from the proxy.
## Data
### data.central.storage
**Options:** `sqlite`, `mariadb`, `mongodb`
Select which database software you would like to use. `sqlite` is the default. Note that if you change which data storage you use, no data will be transferred.
### data.central.user
This is the username for whichever database software you use. Note that `sqlite` does not require a username.
### data.central.password
This is the password for whichever database software you use. Note that `sqlite` does not require a password.
### data.central.hostname
This is the hostname for whichever database software you use. Note that `sqlite` does not require a hostname.
### data.central.port
This is the port for whichever database software you use. Note that `sqlite` does not require a port.
### data.central.db
This is the name for whichever database software you use. Note that `sqlite` does not require a name.
### data.side.enabled
**Options:** `true` / `false`
This will enable Plex's Redis functionality.
### data.side.auth
**Options:** `true` / `false`
This is whether authentication mode for Redis is turned on or not.
:::info
It is highly recommended to have Redis authentication turned on.
:::
### data.side.hostnane
This is the hostname for Redis. This is required for Redis to work.
### data.side.port
This is the port that Redis is listening on. This is requird for Redis to work.
### data.side.password
This is the password for your Redis instance. Note that this can be left blank if authentication is turned off.
## Entity wiping
### entitywipe_list
All items in the list will not be wiped. By default, this includes all mobs as these can be purged with the `mobpurge` command.
## Autowiping
### autowipe.enabled
**Options:** `true` / `false`
Should autowiping be enabled?
### autowipe.interval
**Default:** 300
How often, in seconds, to automatically wipe entities. Default is 5 minutes.
### autowipe.entities
A list of entities to automatically wipe.
## Blocking
### blocked_blocks
A list of blocks that should be blocked.
### blocked_entities
A list of entities that should be blocked.
## Global gamerules
### global_gamerules
These gamerules apply to all worlds on the server. Gamerules in the generated worlds will override the global gamerules.
## Worlds
An infinite amount of worlds can be generated from the configuration file. A few are automatically generated by default. The format for generating new worlds is as follows:
```yaml title=/plugins/Plex/config.yml
<world name>:
name: "Human readable world name"
entry:
# The permission required to enter the world, optional
permission: "plex.world.worldname.enter"
# Minimum rank requirement, optional
requiredLevels:
- "Rank.ADMIN"
# The message to be shown if a player does not have permission, optional
message: "<red>You do not have permission to enter this world."
modification:
# The permission required to modify the world, optional
permission: "plex.world.worldname.modify"
# Minimum rank requirement, optional
requiredLevels:
- "Rank.ADMIN"
# The message to be shown if a player does not have permission, optional
message: "<red>You do not have permission to modify this world."
gameRules:
- "doWeatherCycle;false"
- "doDaylightCycle;false"
parameters:
grass_block: 1
dirt: 32
stone: 16
bedrock: 1
```
Note that in the `parameters` section, this is how the world should actually be generated. The order is from top to bottom. In the example above, a world will generate with one grass layer, 32 layers of dirt, 16 layers of stone, and one layer of bedrock.
For a list of Ranks and Titles, you can refer to the Javadocs: [Ranks](https://docs.plex.us.org/javadoc/server/dev/plex/rank/enums/Rank.html), [Title](https://docs.plex.us.org/javadoc/server/dev/plex/rank/enums/Title.html).
The gamerule section is what gamerules are set for the world by default. The syntax is the official gamerule name, a semicolon, and either `true` or `false`.
## Updates
update_repo
The repo to use for update checking.
update_branch
The branch to use for update checking.
## Debugging
**Options:** `true` / `false`
The `debug` option is standalone and enables additional logging. This may be useful for diagnosing issues as more information will be displayed in the console. It is recommended to keep this option turned off.

View File

@ -0,0 +1,300 @@
---
id: messages
title: Messages
---
# Messages
Almost all of the messages inside of Plex are fully customizable. This page will document how to change messages in the ```messages.yml``` file inside the Plex folder.
## Default file
The default `messages.yml` file is below.
```yaml title=/plugins/Plex/messages.yml
# Plex Messages File
# This file uses the MiniMessage system.
# Documentation available at https://docs.adventure.kyori.net/minimessage/format.html
# Messages in here will be placed in for certain commands, actions, etc.
# Warning: not all commands have customizable messages
# Variables {number} - these are code-defined replacements for things that should be inserted into messages. (e.g. names, statuses, numbers)
# If any of these variables are supposed to be used within a message, some documentation is provided to give more context to what the variables indicate.
# If you are wishing to change these messages it's recommended you use the same amount of variables as stated in the documentation, however it's not required.
# 0 - Appeal URL
# 1 - Reason
# 2 - Expiry
# 3 - Punisher
banMessage: "<red>You have been banned! You may appeal at <gold>{0}.\n<red>Reason: <gold>{1}\n<red>End date: <gold>{2}\n<red>Banned by: <gold>{3}"
# 0 - Reason
# 1 - Punisher
kickMessage: "<red>You have been kicked! \n<red>Reason: <gold>{0}\n<red>Kicked by: <gold>{1}"
# 0 - The type of indefinite ban
# 1 - Appeal URL
indefBanMessage: "<red>Your {0} is indefinitely banned! You may appeal at <gold>{1}."
# 0 - The type of indefinite ban
# 1 - Appeal URL
# 2 - The reason
indefBanMessageReason: "<red>Your {0} is indefinitely banned! You may appeal at <gold>{1}.\n<red>Reason: <gold>{2}"
playerNotFound: "<red>Player not found!"
specifyPlayer: "<red>You must specify a player!"
worldNotFound: "<red>World not found!"
# This will always be used for punishments where the sanctioning administrator has not provided a reason. Will ignore MiniMessage tags.
noReasonProvided: "No reason provided."
# 0 - The world you have been teleported to
playerWorldTeleport: "<aqua>You have been teleported to {0}."
# 0 - The person who is freezing
# 1 - The person who has been frozen
frozePlayer: "<red>{0} - Froze {1}"
# 0 - The person who is unfreezing
# 1 - The person who has been unfrozen
unfrozePlayer: "<aqua>{0} - Unfroze {1}"
# 0 - The command sender
# 1 - The person who has been muted
mutedPlayer: "<red>{0} - Muted {1}"
# 0 - The command sender
# 1 - The person who has been unmuted
unmutedPlayer: "<aqua>{0} - Unmuted {1}"
invalidTimeFormat: "<red>Invalid time format. Use s, m, h, d, w, mo, or y (e.g., 1h30m)."
timeMustBeFuture: "<red>The specified time must be in the future."
# 0 - The command sender
# 1 - The person who has been muted
# 2 - The time that the person is muted for
tempMutedPlayer: "<red>{0} - Muted {1} for {2}"
maxTimeExceeded: "<red>The specified time must be under a week."
# 0 - The person who is locking up
# 1 - The person who has been locked up
lockedUpPlayer: "<aqua>{0} - Locking up {1}"
# 0 - The person who is unlocking
# 1 - The person who has been unlocked
unlockedPlayer: "<aqua>{0} - Unlocking {1}"
# 0 - The permission node required to use the command
noPermissionNode: "<red>You must have the permission: {0} <red>to use this command!"
noPermissionInGame: "<red>You must be in console to use this command!"
noPermissionConsole: "<red>You must be in-game to use this command!"
# 0 - The username of the name history
nameHistoryTitle: "<gold>Name History of {0}"
nameHistorySeparator: "<gold><strikethrough>-----------------------------"
# 0 - The name
# 1 - The date and time of the name change
nameHistoryBody: "<gold>{0} <dark_gray>- <gold>{1}"
# 0 - The gamemode
gameModeSetTo: "<gray>Your gamemode has been set to {0}."
# 0 - The player's name
# 1 - The gamemode
setOtherPlayerGameModeTo: "<gray>You set {0}'s gamemode to {1}."
# 0 - The command sender
# 1 - The gamemode
playerSetOtherGameMode: "<gray>{0} set your gamemode to {1}."
# 0 - The command sender
# 1 - The gamemode
setEveryoneGameMode: "<aqua>{0} - Changing everyone's gamemode to {1}"
consoleMustDefinePlayer: "<red>You must define a player since you are running this command from console."
# 0 - The command sender
# 1 - The player
newAdminAdded: "<aqua>{0} - Adding {1} to the admin list"
# 0 - The command sender
# 1 - The player
# 2 - The rank name
adminReadded: "<aqua>{0} - Re-adding {1} to the admin list as rank: {2}"
# 0 - The command sender
# 1 - The player
adminRemoved: "<red>{0} - Removing {1} from the admin list"
# 0 - The command sender
# 1 - The player
# 2 - The rank
adminSetRank: "<aqua>{0} - Setting {1}'s rank to {2}"
# 0 - The world name
teleportedToWorld: "<aqua>You have been teleported to the {0}."
higherRankThanYou: "<red>This player is an admin or a higher rank than you."
playerNotAdmin: "<red>That player is not an admin."
playerIsAdmin: "<red>That player is already an admin."
rankNotFound: "<red>The rank you entered was not found."
rankMustBeHigherThanAdmin: "<red>The rank you entered must be higher than Admin."
consoleOnly: "<red>This command can only be executed by the console."
# 0 - Rank
yourRank: "<aqua>Your rank is: {0}"
# 0 - Player name
# 1 - Rank
otherRank: "<aqua>{0}'s rank is: {1}"
# 0 - The command sender
# 1 - The player
banningPlayer: "<red>{0} - Banning {1}"
# 0 - The command sender
# 1 - The player
unbanningPlayer: "<aqua>{0} - Unbanning {1}"
playerNotBanned: "<red>That player is not banned!"
playerNotFrozen: "<red>That player is not frozen!"
playerNotMuted: "<red>That player is not muted!"
playerBanned: "<red>That player is already banned!"
playerFrozen: "<red>That player is already frozen!"
playerMuted: "<red>That player is already muted!"
playerLockedUp: "<red>That player is already locked up!"
muted: "<red>You are currently muted - STFU!"
pvpDisabled: "<red>PVP has been disabled!"
chatIsOff: "<red>Chat is currently toggled off!"
# 0 - The command sender
# 1 - The set value of the chat toggle
chatToggled: "<red>{0} - Toggled chat {1}"
# 0 - The command sender
# 1 - The player
kickedPlayer: "<red>{0} - Kicking {1}"
teleportedToWorldSpawn: "<aqua>Teleporting to the local spawn"
toggleCommandSpy: "<gray>CommandSpy has been"
enabled: "<gray>enabled."
disabled: "<gray>disabled."
# 0 - The admin / staff member
# 1 - The player's group's prefix if any
# 2 - The message
adminChatFormat: '<dark_gray>[<blue>AdminChat<dark_gray>] <dark_red>{0} {1} <gray>» <gold>{2}'
# 0 - Whether it was toggled on or off
adminChatToggled: '<gray>AdminChat was toggled {0}'
# 0 - Maximum length, configured in config.yml
maximumPrefixLength: "<red>The maximum length for a tag may only be {0}."
prefixCleared: "<aqua>Your prefix has been cleared."
# 0 - The player name
otherPrefixCleared: "<aqua>You have cleared {0}'s prefix."
# 0 - The new prefix
prefixSetTo: "<aqua>Your prefix has been set to {0}"
# 0 - The action (blocked / unblocked)
# 1 - The amount of players
blockeditSize: "<gray>{0} all block modification abilities for {1} players."
# The action (blocked or restored)
editsModified: "<gray>Your block modification abilities have been {0}."
listOfPlayersBlocked: "<gray>The following have block modification abilities restricted:"
# 0 - The player name
editsBlocked: "<gray>Blocked block modification abilities for {0}"
# 0 - The command sender
# 1 - The player name
blockingEdits: "<red>{0} - Blocking block modification abilities for {1}"
# 0 - The command sender
# 1 - The player
unblockingEdits: "<aqua>{0} - Unblocking block modification abilities for {1}"
# 0 - The player name
editsUnblocked: "<gray>Unblocked block modification abilities for {0}"
# 0 - The command sender
# 1 - Number of entities removed
removedEntities: "<red>{0} - Removed {1} entities"
# 0 - The command sender
# 1 - Number of entities removed
# 2 - Entity type(s) removed
removedEntitiesOfTypes: "<red>{0} - Removed {1} entities of type(s) {2}"
# 0 - The command sender
# 1 - Number of entities removed
# 2 - Entity type removed
removedEntitiesOfType: "<gray>Removed {1} {2}"
# 0 - Entity type that is invalid
invalidEntityType: "<gray>Notice: Entity type {0} is invalid!"
noRemovedEntities: "<gray>No entities were removed."
# 0 - Number of mobs removed
# 1 - Type of mob removed
amountOfMobsRemoved: "<gray>{0} {1} removed."
notAValidMob: "<red>That is not a valid mob."
notAValidMobButValidEntity: "<red>That is a valid entity, but is not a valid mob."
# 0 - The command sender
# 1 - Number of mobs removed
removedMobs: "<red>{0} - Removed {1} mobs"
autoWipeDisabled: "<gray>Item wiping is currently disabled in the config!"
# 0 - The boolean for whether the limit is enabled or disabled
mobLimitToggle: "<gray>The mob limit has been {0}"
# 0 - The amount that the mob limit has been set to
mobLimitSet: "<gray>The mob limit has been set to: <em><white>{0}"
# 0 - The boolean for whether the limit is enabled or disabled
# 1 - The current amount of mobs in the world
# 2 - The current set mob limit
# 3 - Chunk x value
# 4 - Chunk z value
mobLimitStatus: "<gray>({0}<gray>) <em><white>{1} <reset><gray>/ <em><white>{2} <reset><gray>per chunk (<em><white>Chunk<gray>: <reset>{3}, {4}<gray>)"
# 0 - The max set limit in config
mobLimitCeiling: "<gray>The limit you have entered is too high. Defaulting to the ceiling value from config"
commandBlocked: "<gray>That command is blocked."
# 0 - The command sender
# 1 - The message being said
sayMessage: "<blue>[Server: {0}] {1}"
# 0 - The command sender
# 1 - The message being said
consoleSayMessage: "<gray>[Console: {0}] <white>{1}"
# 0 - The number attempted to be parsed
unableToParseNumber: "<red>Unable to parse {0} as a number!"
noNotes: "<red>This player has no notes!"
noteAdded: "<green>Note added."
noteNotFound: "<red>A note with this ID could not be found."
# 0 - The ID of the note removed
removedNote: "<green>Removed note with ID: {0}"
# 0 - The number of notes cleared
clearedNotes: "<green>Cleared {0} notes."
invalidToggle: "<red>That is not a valid toggle."
specifyLoginMessage: "<red>Please specify a login message."
# 0 - The login message
setOwnLoginMessage: "<gray>Your login message is now:<newline><gray>> <reset>{0}"
# 0 - The player
# 1 - The login message
setOtherPlayersLoginMessage: "<gray>{0}'s login message is now:<newline><gray>> <reset>{1}"
removedOwnLoginMessage: "<gray>Your login message has been removed."
# 0 - The player
removedOtherLoginMessage: "<gray>You removed {0}'s login message."
nameRequired: "<red>Policy requires that you must state your player name in your login message. You can either do this by inserting your name or %player%."
rankRequired: "<red>Policy requires that you must state your rank in your login message. You can do this by using %rank% in your login message."
# 0 - The material name
# 1 - The players who have the material in their inventory
playersWithMaterial: "<gray>Players with {0} in their inventory: {1}"
# 0 - The material name
# 1 - The players who have the material in their inventory
playersMaterialCleared: "<gray>{0} has been removed from the following players: {1}"
nobodyHasThatMaterial: "<gray>No one online has that in their inventory."
# 0 - The attempted material name
materialNotFound: "<red>{0} is not a valid item/block name."
# 0 - The players name
loginMessage: "<yellow>{0} joined the game"
# 0 - The string that wasn't a valid integer
notANumber: "<red>{0} is not a valid number!"
# 0 - Players currently online
# 1 - Max players
listHeader: "<gray>There is currently <yellow>{0}<gray> player online out of <yellow>{1}<gray> players."
# 0 - Players currently online
# 1 - Max players
listHeaderPlural: "<gray>There are currently <yellow>{0}<gray> players online out of <yellow>{1}<gray> players."
# 0 - Player who is having their notes fetched
notesHeader: "Player notes for: <green>{0}"
# 0 - Note ID
# 1 - Author of the note
# 2 - Timestamp
notePrefix: "<gold><!italic>{0} - Written by: {1} on {2}"
# 0 - The content of the note
noteLine: "<newline><yellow># {0}"
# 0 - The player
# 1 - The number of notes logged for said player
playerNoteAlert: "<gold>{0} has {1} note. <click:run_command:/notes {0} list><underlined>Click here to view their note."
# 0 - The player
# 1 - The number of notes logged for said player
playerNoteAlertPlural: "<gold>{0} has {1} notes. <click:run_command:/notes {0} list><underlined>Click here to view their notes."
smiteTitleHeader: "<red>You've been smitten."
# 0 - The reason for the smite. Will default to noReasonProvided if no reason is specified.
# 1 - The admin / staff member
smiteTitleMessage: "<yellow>Be sure to follow the rules!"
# 0 - The player
# 1 - The reason for the smite. Will default to noReasonProvided if no reason is specified.
# 2 - The admin / staff member
smiteBroadcast: "<red>{0} has been a naughty, naughty boy.<newline><red> - Reason: <yellow>{1}<newline><red> - Smitten by: <yellow>{2}"
# 0 - The player
smittenQuietly: "<gray>Smitten {0} quietly."
# 0 - The reason for being smitten
smitten: "<red>You've been smitten. Reason: <yellow>{0}"
nukerKickMessage: "Please turn off your nuker!"
antiSpamMessage: "<gray>Please refrain from spamming messages."
# 0 - The player
banExpiredBroadcast: "Plex - Automatically unbanning {0}"
# 0 - The player
redisResetSuccessful: "<yellow>Successfuly reset {0}'s Redis punishments!"
redisResetPlayerNotFound: "Couldn't find player in Redis punishments."
reappliedGamerules: "<aqua>All game rules have been re-applied!"
commandNotFound: "<red>That command could not be found!"
# 0 - The command
# 1 - A list of aliases found
commandAliases: "<aqua>Aliases for {0} are: {1}"
```
## MiniMessage
The `messages.yml` file uses MiniMessage for coloring messages. For example, writing `<aqua>`, will color the text aqua. This is not like HTML, and you should not close the tag (`</aqua>`). There are some special functions as well, such as `<rainbow>`. The default color will be gray. For a complete guide on using MiniMessage, visit: [https://docs.adventure.kyori.net/minimessage/format.html](https://docs.adventure.kyori.net/minimessage/format.html).
## Troubleshooting
If you receive `No message.` when executing a command, it is likely you need to regenerate your `messages.yml` file. The default configuration file is also available on [GitHub](https://raw.githubusercontent.com/PlexDevelopment/Plex/master/src/main/resources/messages.yml). As of Plex 0.6 (Beta 6), your `messages.yml` file should automatically update with new entries.

41
docs/indefinitebans.md Normal file
View File

@ -0,0 +1,41 @@
---
id: indefinitebans
title: Indefinite Bans
---
# Indefinite Bans
Similar to TotalFreedomMod, Plex has indefinite bans. Indefinite bans are reserved for players who should not automatically be unbanned. Anyone who has access to the `indefbans.yml` file can add indefinite bans. If you are using Redis, all indefinite bans will be uploaded to Redis on startup. From that point on, indefinite bans will be fetched from Redis instead of the `indefbans.yml` file. **Redis is NOT required to use indefinite bans.** If you do not use Redis, Plex will fetch indefinite bans from the `indefbans.yml` file. No matter which medium you use, you will always add new entries to the `indefbans.yml` file. Note that there is no in-game command for adding or removing indefinite bans.
## Default file
```yaml title=/plugins/Plex/indefbans.yml
# Plex Indefinite Bans File
# Players with their UUID / IP / Usernames in here will be indefinitely banned until removed
# If you want to get someone's UUID, use https://api.ashcon.app/mojang/v2/user/<username>
griefers:
users:
- "badplayer123"
- "badplayer321"
uuids:
- 1dac0e92-f565-4479-afd5-38c7df5f9732 # badplayer123
ips:
- 123.123.123.123
# Note that these keys can be anything, they are simply to help you keep things organized.
# They are not used within the plugin. Duplicate keys are not allowed, and will not work.
bypassers:
users:
- "bypasser1"
ips:
- 321.321.321.321
- 169.254.1.2
```
### How it works
Each entry starts with a description. This is to help you organize indefinite bans. For example, you could have a section `griefers` for serial griefers or `bypassers` for players who have bypassed bans. The `users` section is for usernames only, the `uuids` section is only for UUIDs, and the `ips` section is for IPs only. If you do not want to ban a type, you do not have to include it. Note that no duplicate descriptions can exist. This means you cannot have `bypassers` as a section twice. The actual descriptions are not used in the plugins and can be anything you like. They do not affect the indefinite ban in any way.
### Converting indefinite bans
If you are switching from TotalFreedomMod to Plex, we have developed a tool called IBConverter to convert your existing indefinite bans into Plex's format. For more information on IBConverter, visit [the GitHub page](https://github.com/PlexDevelopment/IBConverter). This tool was written in Rust. The only thing you need to give it is your existing `indefinitebans.yml` file from TotalFreedomMod. You can download a compiled version below:
- [IBConverter-Linux.zip](https://github.com/plexusorg/IBConverter/suites/6509280820/artifacts/242044369)
- [IBConverter-Windows.zip](https://github.com/plexusorg/IBConverter/suites/6509280820/artifacts/242044371)
- [IBConverter-Mac.zip](https://github.com/plexusorg/IBConverter/suites/6509280820/artifacts/242044370)

View File

@ -1,47 +1,10 @@
---
sidebar_position: 1
id: intro
title: Introduction
---
# Tutorial Intro
# Welcome to Plex
Let's discover **Docusaurus in less than 5 minutes**.
Plex is a new freedom plugin. It is an alternative to [TotalFreedomMod](https://github.com/TotalFreedomMC/TotalFreedomMod). It has many of the features that make a freedom server unique, but also many features that TotalFreedomMod doesnt have. For example, there is full support for using a permissions plugin instead of ranks. It is also much more performance oriented. You can use Redis to store indefinite bans and store player data in MongoDB, MariaDB, or SQLite. Plex is also fully customizable as you can change almost all of the messages within the plugin. Plex also has a module system which can be used to add additional functionality. Plex is not a rewrite, "debloat", or related to TotalFreedomMod. Plex is an entirely new experience.
## Getting Started
Get started by **creating a new site**.
Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**.
### What you'll need
- [Node.js](https://nodejs.org/en/download/) version 18.0 or above:
- When installing Node.js, you are recommended to check all checkboxes related to dependencies.
## Generate a new site
Generate a new Docusaurus site using the **classic template**.
The classic template will automatically be added to your project after you run the command:
```bash
npm init docusaurus@latest my-website classic
```
You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor.
The command also installs all necessary dependencies you need to run Docusaurus.
## Start your site
Run the development server:
```bash
cd my-website
npm run start
```
The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there.
The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/.
Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes.
Use the sidebar to navigate the documentation.

View File

@ -0,0 +1,7 @@
---
id: bukkittelnet
title: BukkitTelnet
---
# BukkitTelnet
The BukkitTelnet is a very simple module. The only purpose of the module is to allow admins to automatically log in to telnet without needing to enter the password. If the person's rank is an Admin or above, it will let them connect. If your server is using permissions, you should add the `plex.telnet.autoconnect` to any group you want to have automatically connect to telnet.

28
docs/modules/httpd.md Normal file
View File

@ -0,0 +1,28 @@
---
id: httpd
title: HTTPD
---
# HTTPD
The HTTPD module sets up a basic web server to display information from Plex.
## Endpoints
The endpoints are what allow you to query the server and see information. All endpoints are formatted in JSON.
### /api/admins
Displays a list of admins in JSON format. If your IP is not registered to an admin, it will not display IP addresses. If your server is using permissions, it will check if the player has the `plex.httpd.admins.access` instead.
### /api/indefbans
Displays a list of indefinite players in JSON format. This page is only accessible if your IP address is linked to an admin on the server. If your server is using permissions, it will check if the player has the `plex.httpd.indefbans.access` instead.
### /api/list
This will display a list of online players in JSON format. This is accessible to everyone.
### /api/punishments
If you go this page, it will ask you to enter a UUID in the URL. When you enter a valid UUID to the URL, it will display that user's punishments in JSON format. An example URL would be `/api/punishments/78408086-1991-4c33-a571-d8fa325465b2`. If your IP is not registered to an admin, it will not display IP addresses. If your server is using permissions, it will check if the player has the `plex.httpd.punishments.access` instead.
### /api/schematics/download
This page allows anyone to download schematics from the server. No permission is required to access the page
### /api/schematics/upload
This page allows players who are an Admin or above to upload schematics. The corresponding permission to upload schematics is `plex.httpd.schematics.upload`

View File

@ -0,0 +1,18 @@
---
id: introduction
title: Introduction
---
# Introduction
Plex lets you use optional modules to improve your server experience. Modules are placed in the `/plugins/Plex/modules` folder. They extend off of Plex and can add or change functionality. They are designed for server owners who may want a specific feature that's not built in to Plex.
Below is a list of current modules
| Name | Versions |
| -------------- | --------- |
| BukkitTelnet | 1.3 |
| HTTPD | 1.3 |
| Guilds | 1.3 |
| LibsDisguises | 1.3 |
| NUSH | 1.3 |
| TFMExtras | 1.3 |

View File

@ -0,0 +1,14 @@
---
id: libsdisguises
title: LibsDisguises
---
# LibsDisguises
The LibsDisguises module adds two new commands: `undisguiseall` and `disguisetoggle`.
## Commands
### undisguiseall
The `undisguiseall` command disguises all non-admins. You can optionally add `-a` to undisguise all players including admins. If your server is using permissions, the permission to bypass being undisguised is `plex.libsdisguises.bypass`. This permission will not bypass `-a`. The permission to use the command itself is `plex.libsdisguises.undisguiseall`
### disguisetoggle
The `disguisetoggle` command toggles LibsDisguises. It allows admins or players with the `plex.libsdisguises.disguisetoggle` permission to toggle LibsDisguises. When LibsDisguises is disabled, all players are undisguised and no commands from LibsDisguises can be used until reenabled.

102
docs/permissions.md Normal file
View File

@ -0,0 +1,102 @@
---
id: permissions
title: Permissions
---
# Permissions
This page is a comprehensive list of all of Plex's permission nodes. Note that some of them (such as world entry and modification) are defined by the server config and may vary.
## Plex
| Command | Permission | Description |
| ------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------- |
| adminchat | plex.adminchat | Talk privately with other admins |
| adminworld | plex.adminworld | Teleport to the adminworld |
| adventure | plex.gamemode.adventure | Set your own gamemode to adventure mode |
| adventure | plex.gamemode.adventure.others | Set another player's gamemode to adventure mode |
| ban | plex.ban | Bans a player, offline or online |
| banlist | plex.banlist | Manages the banlist |
| blockedit | plex.blockedit | Prevent players from modifying blocks |
| commandspy | plex.commandspy | Spy on other player's commands |
| consolesay | plex.consolesay | Displays a message to everyone |
| creative | plex.gamemode.creative | Set your own gamemode to creative mode |
| creative | plex.gamemode.creative.others | Set another player's gamemode to creative mode |
| pdebug | plex.debug | Plex's debug command |
| entitywipe | plex.entitywipe | Remove various server entities that may cause lag, such as dropped items, minecarts, and boats. |
| flatlands | plex.flatlands | Teleport to the flatlands |
| freeze | plex.freeze | Freeze a player on the server |
| kick | plex.kick | Kicks a player |
| list | plex.list | Show a list of all online players |
| list -v | plex.list.vanished | Filters the list command to see vanished players only |
| localspawn | plex.localspawn | Teleport to the spawnpoint of the world you are in |
| lockup | plex.lockup | Lockup a player on the server |
| masterbuilderworld | plex.masterbuilderworld | Teleport to the masterbuilderworld |
| moblimit | plex.moblimit | Manages the mob limit per chunk. |
| mobpurge | plex.mobpurge | Purge all mobs. |
| mute | plex.mute | Mute a player on the server |
| notes | plex.notes | Manage notes for a player |
| plex | N/A | Show information about Plex |
| plex redis | plex.redis | Tests your Redis database to ensure Plex can reach it |
| plex reload | plex.reload | Reload Plex |
| plex modules reload | plex.modules.reload | Reload Plex's modules |
| punishments | plex.punishments | Opens the Punishments GUI |
| rawsay | plex.rawsay | Displays a message to everyone |
| removeloginmessage | plex.removeloginmessage | Remove your own (or someone else's) login message |
| say | plex.say | Displays a message to everyone |
| setloginmessage | plex.setloginmessage | Sets your (or someone else's) login message |
| smite | plex.smite | Someone being a little bitch? Smite them down... |
| spectator | plex.gamemode.spectator | Set your own gamemode to spectator mode |
| spectator | plex.gamemode.spectator.others | Set another player's gamemode to spectator mode |
| survival | plex.gamemode.survival | Set your own gamemode to survival mode |
| survival | plex.gamemode.survival.others | Set another player's gamemode to survival mode |
| tag | plex.tag | Set or clear your prefix |
| tag | plex.tag.clear.others | Clear another player's prefix |
| tempban | plex.tempban | Temporarily ban a player |
| tempmute | plex.tempmute | Temporarily mute a player on the server |
| toggle | plex.toggle | Allows toggling various server aspects through a GUI |
| unban | plex.unban | Unbans a player, offline or online |
| unfreeze | plex.unfreeze | Unfreeze a player |
| unmute | plex.unmute | Unmute a player |
| whohas | plex.whohas | Returns a list of players with a specific item in their inventory. |
| whohas | plex.whohas.clear | Clear a specific item in all player's inventories |
| world | plex.world | Teleport to a world. |
## BukkitTelnet Module
| Permission | Description |
| ----------------------- | ----------------------------------------------------------- |
| plex.telnet.autoconnect | Allow automatically connecting to telnet without a password |
## Guilds Module
| Command | Permission | Description |
| ------------- | ------------------- | ------------------------------------------------------------- |
| guild | plex.guilds.guild | Guild menu |
| guild chat | plex.guilds.chat | Toggles guild chat or sends a guild chat message |
| guild create | plex.guilds.create | Creates a guild with a specified name |
| guild home | plex.guilds.home | Teleports to the guild home |
| guild info | plex.guilds.info | Shows the guild's information |
| guild invite | plex.guilds.invite | Invites a player to the guild |
| guild owner | plex.guilds.owner | Sets the guild owner |
| guild prefix | plex.guilds.prefix | Sets the guild's default prefix |
| guild sethome | plex.guilds.sethome | Sets the guild's home |
| guild setwarp | plex.guilds.setwarp | Creates a new warp at player's location with a specified name |
| guild warps | plex.guilds.warps | Displays a clickable list of warps |
| guild warp | plex.guild.warp | Warps to a specified guild warp |
## HTTPD Module
| Permission | Description |
| ----------------------------- | --------------------------------------------------------------------------------------------- |
| plex.httpd.admins.access | Allows seeing IP addresses of admins. Anyone can view the page regardless of permissions |
| plex.httpd.indefbans.access | Allows accessing the indefinite bans. This permission is required to view the page at all. |
| plex.httpd.punishments.access | Allows seeing IP addresses of punishments. Anyone can view the page regardless of permissions |
| plex.httpd.schematics.upload | Allows uploading schematics to the HTTPD if the permission system is enabled. |
## LibsDisguises Module
| Command | Permission | Description |
| -------------- | --------------------------------- | ----------------------------------------------------------------------------------------------- |
| disguisetoggle | plex.libsdisguises.disguisetoggle | Toggle LibsDisguises |
| undisguiseall | plex.libsdisguises.undisguiseall | Undisguise all players |
| undisguiseall | plex.libsdisguises.bypass | Bypass being undisguised. This can be overridden regardless of permission with the \`-a\` flag. |
## NUSH Module
| Command | Permission | Description |
| ------- | ----------------- | ---------------------- |
| nush | plex.nush.command | Toggle NUSH on or off. |

85
docs/redis.md Normal file
View File

@ -0,0 +1,85 @@
---
id: redis
title: Configuring Redis
---
# Redis
This page will show you how to setup and configure Redis for Plex. This tutorial assumes a moderate amount of computer knowledge. Please note that setting up Redis is optional. It offers many performance improvements, but can be dangerous if improperly configured.
## Using Pterodactyl
If you are using Pterodactyl, setting up Redis is easy. You will need to download and add the Redis egg, which requires administrator privileges. If you are not an administrator, you may request an administrator to set up Redis for you.
### Setup the Redis egg
Right click on [this link](https://docs.plex.us.org/egg-redis-7.json) and click "Save As". Please ensure that the filename ends in .json
On your Pterodactyl admin page, click on the "Nests" from the sidebar. Click the blue "Create New" button and enter "Databases" for the name.
Then, click on the green "Import Egg" button. Import the `egg-redis-7.json` file you just downloaded and make sure the "Associated Nest" is set to "Databases".
### Configure the allocations
Click on the "Nodes" tab from the sidebar. Click on the node you would like to add Redis. Click on the "Allocation" tab. On the right, you will see a box that says "Assign New Allocations". For the IP Address, enter `172.18.0.1`, and for the port enter `6380`.
:::danger
Do ***NOT*** enter the public IP for the server under IP Address. If you do that, you will open up your Redis instance to the entire internet. Also, do ***NOT*** use port `6379` for Redis. Pterodactyl itself uses Redis and it will not work. You have been warned.
:::
### Add a new server
Go to the Servers tab and click the "Create New" button. The Server Name can be whatever you like. Under "Allocation Management" > "Default Allocation", select the allocation you made for Redis. If you have done the above step correctly, you should see `172.18.0.1:6380` in the list. Redis does not need much memory, 256MB is plenty.
To ensure Redis is actually used, you need to use the Redis egg. Under "Nest Configuration", select the "Databases" nest. Redis should be the only option under there.
### Set the password
The password for Redis is set under the "Service Variables" tab. Please change it from the default password. A good website to generate a secure password can be found here: [https://www.grc.com/passwords.htm](https://www.grc.com/passwords.htm).
:::danger
***DO NOT USE THE DEFAULT PASSWORD PROVIDED BY THE EGG.***
:::
### Configuration
Once the Redis server has been installed, go to the "File Manager" tab and open `redis.conf`. You will need to change the bind address.
```title=redis.conf
...
################################## NETWORK #####################################
# By default, if no "bind" configuration directive is specified, Redis listens
# for connections from all the network interfaces available on the server.
# It is possible to listen to just one or multiple selected interfaces using
# the "bind" configuration directive, followed by one or more IP addresses.
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 loopback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 172.18.0.1
...
```
Find this block in your Redis configuration file and ensure bind is set to `172.18.0.1`. It is normally set to `127.0.0.1`, which will **not** work.
### Plex Configuration
Redis should be successfully set up! Now all you have to do is enter your credentials into the Plex configuration file.
```yaml title=/plugins/Plex/config.yml
side:
enabled: true
auth: true
hostname: '172.18.0.1'
port: 6380
password: 'your_secure_password_here'
```
Replace `your_secure_password_here` with the password you made for Redis. Now, Plex will use Redis for storing punishment data. Note that the JSON files are still made as a backup no matter what.
### Firewall Configuraton
If you are using a firewall, you may have to allow port `6380`. It is safe to allow connections from anywhere provided you have followed the documentation correctly.

View File

@ -1,8 +0,0 @@
{
"label": "Tutorial - Basics",
"position": 2,
"link": {
"type": "generated-index",
"description": "5 minutes to learn the most important Docusaurus concepts."
}
}

View File

@ -1,23 +0,0 @@
---
sidebar_position: 6
---
# Congratulations!
You have just learned the **basics of Docusaurus** and made some changes to the **initial template**.
Docusaurus has **much more to offer**!
Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**.
Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610)
## What's next?
- Read the [official documentation](https://docusaurus.io/)
- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config)
- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration)
- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout)
- Add a [search bar](https://docusaurus.io/docs/search)
- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase)
- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support)

View File

@ -1,34 +0,0 @@
---
sidebar_position: 3
---
# Create a Blog Post
Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed...
## Create your first Post
Create a file at `blog/2021-02-28-greetings.md`:
```md title="blog/2021-02-28-greetings.md"
---
slug: greetings
title: Greetings!
authors:
- name: Joel Marcey
title: Co-creator of Docusaurus 1
url: https://github.com/JoelMarcey
image_url: https://github.com/JoelMarcey.png
- name: Sébastien Lorber
title: Docusaurus maintainer
url: https://sebastienlorber.com
image_url: https://github.com/slorber.png
tags: [greetings]
---
Congratulations, you have made your first post!
Feel free to play around and edit this post as much as you like.
```
A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings).

View File

@ -1,57 +0,0 @@
---
sidebar_position: 2
---
# Create a Document
Documents are **groups of pages** connected through:
- a **sidebar**
- **previous/next navigation**
- **versioning**
## Create your first Doc
Create a Markdown file at `docs/hello.md`:
```md title="docs/hello.md"
# Hello
This is my **first Docusaurus document**!
```
A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello).
## Configure the Sidebar
Docusaurus automatically **creates a sidebar** from the `docs` folder.
Add metadata to customize the sidebar label and position:
```md title="docs/hello.md" {1-4}
---
sidebar_label: 'Hi!'
sidebar_position: 3
---
# Hello
This is my **first Docusaurus document**!
```
It is also possible to create your sidebar explicitly in `sidebars.js`:
```js title="sidebars.js"
export default {
tutorialSidebar: [
'intro',
// highlight-next-line
'hello',
{
type: 'category',
label: 'Tutorial',
items: ['tutorial-basics/create-a-document'],
},
],
};
```

View File

@ -1,43 +0,0 @@
---
sidebar_position: 1
---
# Create a Page
Add **Markdown or React** files to `src/pages` to create a **standalone page**:
- `src/pages/index.js``localhost:3000/`
- `src/pages/foo.md``localhost:3000/foo`
- `src/pages/foo/bar.js``localhost:3000/foo/bar`
## Create your first React Page
Create a file at `src/pages/my-react-page.js`:
```jsx title="src/pages/my-react-page.js"
import React from 'react';
import Layout from '@theme/Layout';
export default function MyReactPage() {
return (
<Layout>
<h1>My React page</h1>
<p>This is a React page</p>
</Layout>
);
}
```
A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page).
## Create your first Markdown Page
Create a file at `src/pages/my-markdown-page.md`:
```mdx title="src/pages/my-markdown-page.md"
# My Markdown page
This is a Markdown page
```
A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page).

View File

@ -1,31 +0,0 @@
---
sidebar_position: 5
---
# Deploy your site
Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**).
It builds your site as simple **static HTML, JavaScript and CSS files**.
## Build your site
Build your site **for production**:
```bash
npm run build
```
The static files are generated in the `build` folder.
## Deploy your site
Test your production build locally:
```bash
npm run serve
```
The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/).
You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**).

View File

@ -1,152 +0,0 @@
---
sidebar_position: 4
---
# Markdown Features
Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**.
## Front Matter
Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/):
```text title="my-doc.md"
// highlight-start
---
id: my-doc-id
title: My document title
description: My document description
slug: /my-custom-url
---
// highlight-end
## Markdown heading
Markdown text with [links](./hello.md)
```
## Links
Regular Markdown links are supported, using url paths or relative file paths.
```md
Let's see how to [Create a page](/create-a-page).
```
```md
Let's see how to [Create a page](./create-a-page.md).
```
**Result:** Let's see how to [Create a page](./create-a-page.md).
## Images
Regular Markdown images are supported.
You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`):
```md
![Docusaurus logo](/img/docusaurus.png)
```
![Docusaurus logo](/img/docusaurus.png)
You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them:
```md
![Docusaurus logo](./img/docusaurus.png)
```
## Code Blocks
Markdown code blocks are supported with Syntax highlighting.
````md
```jsx title="src/components/HelloDocusaurus.js"
function HelloDocusaurus() {
return <h1>Hello, Docusaurus!</h1>;
}
```
````
```jsx title="src/components/HelloDocusaurus.js"
function HelloDocusaurus() {
return <h1>Hello, Docusaurus!</h1>;
}
```
## Admonitions
Docusaurus has a special syntax to create admonitions and callouts:
```md
:::tip My tip
Use this awesome feature option
:::
:::danger Take care
This action is dangerous
:::
```
:::tip My tip
Use this awesome feature option
:::
:::danger Take care
This action is dangerous
:::
## MDX and React Components
[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**:
```jsx
export const Highlight = ({children, color}) => (
<span
style={{
backgroundColor: color,
borderRadius: '20px',
color: '#fff',
padding: '10px',
cursor: 'pointer',
}}
onClick={() => {
alert(`You clicked the color ${color} with label ${children}`)
}}>
{children}
</span>
);
This is <Highlight color="#25c2a0">Docusaurus green</Highlight> !
This is <Highlight color="#1877F2">Facebook blue</Highlight> !
```
export const Highlight = ({children, color}) => (
<span
style={{
backgroundColor: color,
borderRadius: '20px',
color: '#fff',
padding: '10px',
cursor: 'pointer',
}}
onClick={() => {
alert(`You clicked the color ${color} with label ${children}`);
}}>
{children}
</span>
);
This is <Highlight color="#25c2a0">Docusaurus green</Highlight> !
This is <Highlight color="#1877F2">Facebook blue</Highlight> !

View File

@ -1,7 +0,0 @@
{
"label": "Tutorial - Extras",
"position": 3,
"link": {
"type": "generated-index"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

View File

@ -1,55 +0,0 @@
---
sidebar_position: 1
---
# Manage Docs Versions
Docusaurus can manage multiple versions of your docs.
## Create a docs version
Release a version 1.0 of your project:
```bash
npm run docusaurus docs:version 1.0
```
The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created.
Your docs now have 2 versions:
- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs
- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs**
## Add a Version Dropdown
To navigate seamlessly across versions, add a version dropdown.
Modify the `docusaurus.config.js` file:
```js title="docusaurus.config.js"
export default {
themeConfig: {
navbar: {
items: [
// highlight-start
{
type: 'docsVersionDropdown',
},
// highlight-end
],
},
},
};
```
The docs version dropdown appears in your navbar:
![Docs Version Dropdown](./img/docsVersionDropdown.png)
## Update an existing version
It is possible to edit versioned docs in their respective folder:
- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello`
- `docs/hello.md` updates `http://localhost:3000/docs/next/hello`

View File

@ -1,88 +0,0 @@
---
sidebar_position: 2
---
# Translate your site
Let's translate `docs/intro.md` to French.
## Configure i18n
Modify `docusaurus.config.js` to add support for the `fr` locale:
```js title="docusaurus.config.js"
export default {
i18n: {
defaultLocale: 'en',
locales: ['en', 'fr'],
},
};
```
## Translate a doc
Copy the `docs/intro.md` file to the `i18n/fr` folder:
```bash
mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/
cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md
```
Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French.
## Start your localized site
Start your site on the French locale:
```bash
npm run start -- --locale fr
```
Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated.
:::caution
In development, you can only use one locale at a time.
:::
## Add a Locale Dropdown
To navigate seamlessly across languages, add a locale dropdown.
Modify the `docusaurus.config.js` file:
```js title="docusaurus.config.js"
export default {
themeConfig: {
navbar: {
items: [
// highlight-start
{
type: 'localeDropdown',
},
// highlight-end
],
},
},
};
```
The locale dropdown now appears in your navbar:
![Locale Dropdown](./img/localeDropdown.png)
## Build your localized site
Build your site for a specific locale:
```bash
npm run build -- --locale fr
```
Or build your site to include all the locales at once:
```bash
npm run build
```

26
docs/versions.md Normal file
View File

@ -0,0 +1,26 @@
---
id: versions
title: Versions
---
# Versions
Plex builds against the latest Minecraft version available. A table has been provided below to help you determine which versions of Plex work with your version of Minecraft. Note that these are only the versions we have officially tested. Plex may or may not work with versions other than in this table.
| Plex Version | Minecraft Versions |
|--------------|--------------------|
| 1.5-SNAPSHOT | 1.20.6 - 1.21.3 |
| 1.4 | 1.20.4 |
| 1.3 | 1.19.4 - 1.20.4 |
| 1.2 | 1.18.2 - 1.19.2 |
| 1.1.1 | 1.18.2 - 1.19.2 |
| 1.1 | 1.18.2 |
| 1.0.3 | 1.18.2 |
| 1.0.2 | 1.18.2 |
| 1.0.1 | 1.18.2 |
| 1.0 | 1.18.2 |
| 0.9 | 1.18.2 |
| 0.8 | 1.18.2 |
| 0.7 | 1.18 - 1.18.1 |
| 0.6 | 1.18 - 1.18.1 |
| 0.5 | 1.18 - 1.18.1 |
| 0.4 | 1.16.5 - 1.18.1 |