Releases: adeynes/cucumber
Version 2
Alright, this is a big changelog.
Setup
Although v2.0 changes a lot of things, configuration files (config.yml
, lang files) do NOT need to be deleted before updating. Just drop the new .phar
in, and the plugin will take care of updating them while keeping your old settings.
Functionality
Punishments now automatically synchronize with the database: you can enforce your iron fist on several servers at once by using the same database for all of them. There will also no longer be database connection timeouts when the server is inactive for too long.
Infinite durations are no longer stored as 2038-01-19T03:14:07
. They will no longer actually expire on that date, and will display by default as until the Big Crunch
(configurable in the lang files). Note that punishments created before version 2.0.0 will not be updated to the new infinite duration format. The default time format has also been changed to 17:53:45 on September 26 2020
, from 2020-09-26T17:53:45
.
Punishment histories: it is now possible to view all of a player's punishments (including expired ones) with the /history
command. See below.
Warning system: /warn
and the associated commands have been added. See below.
We've decided that it was time to infringe on Alias
's market share: /ip
now shows a list of accounts with the same IP as the specified player.
Commands
duration
is now a required argument and no longer requires a -d
flag. A punishment that never expires has a duration of inf
.
/ban <player> <duration>|inf [reason]
/mute <player> <duration>|inf [reason]
The -player
and -ip
flags no longer exist for IP ban and uban; cucumber always infers which was entered using a serverless machine learning algorithm.
/ipban <player>|<ip> <duration>|inf [reason]
/uban <player>|<ip> [reason]
There is a -all
flag for punishment list commands to specify that expired punishments should be displayed.
/banlist [-all|-a]
/ipbanlist [-all|-a]
/mutelist [-all|-a]
Warning system!
/warn <player> <duration>|inf [reason]
/warnings <player> [-all|-a]
/mywarnings [-all|-a]
Each warning has a warning ID for easy warning deletion which is displayed on warning creation and in /warnings
:
/delwarn <id>
Were the previous versions of cucumber not reminiscent enough of 1984 to your taste? Good news, with punishment histories, players will no longer be able to escape your omniscience:
/history <player>
This should be a comprehensive list of changes, but check out the README for excruciatingly detailed information.
Improved punishment saving, languages
v1.6.2
This patch sends a message to muted players who attempt to chat. It does not require a language file update, as the default mute message (moderation.mute.mute.message
) will be used if the chat attempt message (moderation.mute.chat-attempt
) is not present. The message file version is now 2.1, but only 2.0 is required.
v1.6.1
This patch adds support for the French language (fr.yml
).
v1.6.0
This release adds support for languages. It is a breaking change for message files, so their version has been bumped to 2.0. They are now located at cucumber/lang
. A language can be specified in config.yml
.
v1.5.1
This patch switches over to parsecmd
v4.0. Despite the major version bump, this is mostly an internal change and will not change the way the plugin behaves, except for a few bug fixes. This upgrade fixes a minor bug with the duration parser crashing when a duration was not in ascending order (e.g. 15d1M
instead of 1M15d
). A critical bug where the server would freeze shortly after a punishment save has also been patched. It was caused by a bug with pthreads
's garbage collector when scheduling too many libasynql
queries at once, which created too many threads. This was fixed by a libasynql
update which changed pthreads
inheritance settings. The threads were started when the punishment save executed INSERT
s and DELETE
s for every new/old punishment instead of bulk insertions and deletions. Punishments are now saved when they are set/pardoned, which also fixes a bug where pardoning a player and re-punishing them before the punishment save kicked in would leave the player pardoned after a restart.
IP/player inference for /ipban and /uban
With this release, /ipban
and /uban
will no longer require the player
or ip
tags. Instead, they will infer whether the provided target is a player or an IP. If it resembles an IP but a player exists whose username is that IP, the sender will be prompted to retype the command and append either the player
or ip
flag, depending on which they want to ban. If both the player
and ip
flags are set, the command will ignore both, as this does not remove any ambiguity. The new usage for /ipban
is /ipban <target> [reason] [-duration|-d <duration>] [-player|-p] [-ip]
. That of /uban
is similar, but without the duration flag.
Forms, forms, forms
v1.4.2
This patch fixes a bug with Player::addSubTitle()
not working correctly in /rawtell
with the title
flag set. Player::addTitle()
is now used, with an empty string passed as the first argument.
v1.4.1
This patch fixes several bugs by requiring version 3.1.2 of parsecmd
.
v1.4.0
This release introduces command UIs when a command sender executes a command that does not contain at least the minimum required amount of arguments by using parsecmd
v3.1.
v1.3.3
This patch upgrades parsecmd
to v2.0 internally. It is rendered obsolete by v1.4.0.
v1.3.2
This patch gets rid of the CucumberPlayer
class (except for CucumberPlayer::getOnlinePlayer()
) and instead passes Player
instances around.
/vanish, async logging
v1.3.0
This release implements /vanish
, which renders a player invisible from others. Running /vanish
while already vanished will toggle the vanish status to off. Quitting while vanished will conserve the vanish status when re-joining.
v1.3.1
This patch introduces asynchronous logging for the BaseLogger
class. Instead of being logged on the main thread as they come in, messages are now queued and logged asynchronously every 10 seconds. Everything is still the same as before this patch, including correct timestamps (they are calculated when submitting the message, not when writing to the file).
Offline IP ban/uban
This release introduces the ability to IP ban and uban players who are offline, using the IP stored in the database. The syntax is the same as for an online player.
Bug fixes have also been made.
Use parsecmd
This patch changes how commands are parsed. https://github.com/adeynes/parsecmd is now used for command parsing rather than a custom implementation.
/uban
Logging improvements, /ip
This release adds /ip
, which displays a player's IP. It also implements improvements to the logging system, including logging severities and the ability to stop traversing the logger stack when a Logger::log() call returns false.
API versions have also been added for both config.yml
and messages.yml
as major.minor
. If the plugin requires version n.m
, only major version n
will be accepted, but any minor version greater than or equal to m
will be accepted.
Initial release
This is cucumber's initial release.