Compatible Spigot versions: 1.19.3
This update adds support for Spigot 1.19.3
- Deprecate
WordType.word()- recent changes in 1.19 makes this unfeasible to fix
Compatible Spigot versions: 1.19.1
This updates addresses a few breaking bugs.
- Fix
ConcurrentModificationExceptioncaused by self-visiting literal aliase still throwing on Spigot - Fix commands not being executed due to changes in how Spigot forwards command execution
Note: DEFECTIVE - DO NOT USE
Compatible Spigot versions: 1.19.0
This update addresses a ConcurrentModificationException caused by self-visiting literal aliases.
- Fix
ConcurrentModificationExceptioncaused by self-visiting literal aliases.
Note: DEFECTIVE - DO NOT USE
Compatible Spigot versions: 1.19.0
This update adds support for Spigot 1.19.0.
Compatible Spigot versions: 1.18.2
This update adds support for Spigot 1.18.2.
- Remove
ClientSuggestionProvider.BIOMES- This client side mapping is no longer provided in 1.18.2
Compatible Spigot versions: 1.18.0
This update adds support for Spigot 1.18. In addition, the library now requires Java 17.
- Add
AxoltolBucketBuilder - Change item builders to be sealed
Compatible Spigot versions: 1.17.1
This update introduces a replacement for StringArgumentType.word() that supports non-ASCII characters.
In addition, we have updated our Git workflow to embrace a more "trunk-based development" model. As such,
we no longer maintain a stable branch. All releases will be tagged on master instead.
- Add
Readers.unquoted(StringReader)- replacesStringReader.readUnquotedString()which does not support non-ASCII characters - Add
WordType.word()- replacesStringArgumentType.word()which does not support non-ASCII characters - Change
WordType.WORDto become private - Fix
EnchantmentTypenot supporting non-ASCII characters - Fix
MaterialTypenot supporting non-ASCII characters - Fix
ParticleTypenot supporting non-ASCII characters
Compatible Spigot versions: 1.17.0
This update adds argument type matching and overhauls code generation for the command framework. The Scribe project has also been removed. Underneath the hood, we have streamlined the project's infrastructure and documentation. Documentation is now applied on the master branch and the staging branch has been removed. The minimum Java version has also been bumped to Java 16.
Annotation processing related packages have been moved to new project, Satisfactory.
- Add
@Lazy - Remove
@ValueType- redundant due to the introduction of records in JDK 16 - Remove
com.karuslabs.annotations.processor- package has been moved to Satisfactory, a new annotation processing project.
We went full capitalist and privatized (and finalized) several package private fields and methods. ItemStack builders
also received an styling update and safety improvements. More importantly, Chimera command code generation has been moved to it's own project,
Typist.
- Add
@Let - Add
BlockDataBuilder - Add
BundleBuilder - Add
CompassBuilder - Add
Describable - Add
Argument.Builder.description(String) - Add
ItemBuilder.banner() - Add
ItemBuilder.blockData() - Add
ItemBuilder.blockState() - Add
ItemBuilder.book() - Add
ItemBuilder.bundle() - Add
ItemBuilder.compass() - Add
ItemBuilder.crossbow() - Add
ItemBuilder.enchantmentStorage() - Add
ItemBuilder.firework() - Add
ItemBuilder.fireworkEffect() - Add
ItemBuilder.head() - Add
ItemBuilder.knowledgeBook() - Add
ItemBuilder.leatherArmour() - Add
ItemBuilder.map() - Add
ItemBuilder.potion() - Add
ItemBuilder.suspiciousStew() - Add
ItemBuilder.tropicalFishBucket() - Add
LeatherArmourBuilder.helmet() - Add
LeatherArmourBuilder.chestplate() - Add
LeatherArmourBuilder.leggings() - Add
LeatherArmourBuilder.boots() - Add
Literal.Builder.description(String) - Add
MapBuilder.empty() - Add
MapBuilder.filled() - Add
PotionBuilder.lingering() - Add
PotionBuilder.potion() - Add
PotionBuilder.splash() - Change
@Sourceto@Pack - Change classes in
com.karuslabs.commons.item.buildersto be final - Change
Argument's constructors to accept a description - Change
BookBuilder.of(Material)toBookBuilder.of()- only books contain aBookMeta - Change
DispatcherCommand's constructor to accept a description - Change
EnchantmentStorageBuilder.of(Material)toEnchantmentStorageBuilder.of()- only enchantment books contain aEnchantmentStorageMeta - Change
FireworkBuilder.of(Material)toFireworkBuilder.of()- only firework rockets contain aFireworkMeta - Change
FireworkEffectBuilder.of(Material)toFireworkBuilder.of()- only firework stars contain aFireworkEffectMeta - Change
KnowledgeBookBuilder.of(Material)toKnowledgeBookBuilder.of()- only knowledge books contain aKnowledgeBookMeta - Change
Literal's constructors to accept a description - Change
SkullBuildertoHeadBuilder - Change
TropicalFishBucketBuilder.of(Material)toTropicalFishBucketBuilder.of()- only tropical fish buckets contain aTropicalFishBucketMeta - Change the length at which a displayed command is trimmed when an error occurs from 10 to 20
- Fix incorrect capitalization of names in
com.karuslabs.commons.item.Head - Fix commands not being sent to players after server reload - see #292
- Remove
com.karuslabs.commons.command.aot.* - Remove methods prefixed with
asincom.karuslabs.commons.item.ItemBuilder- replaced with equivalent methods without prefixes - Remove
LeatherArmourBuilder.of(Material)- replaced with equivalent methods for specific leather armour items - Remove
MapBuilder.of(Material)- replaced with equivalent methods for empty and filled maps - Remove
PotionBuilder.of(Material)replaced with equivalent methods for different potion types
Command code generation has been rewritten to support inferred parameters for methods annotated with @Bind.
This project was originally part of commons but has since been moved into Typist since this release.
This project provides a minimal example of using Typist in a plugin.
TL;DR - Remove Scribe
When we first released Scribe, we believed that annotation processing was the best solution to ensure that plugin.yamls are free of errors. In hindsight, this approach proved to be both cumbersome to maintain for developers to use. The poor to lukewarm reception has only further exemplified this consensus. Going forward, we will no longer be maintaining the Scribe project, however, it will be useable for the foreseeable future. Looking forward, we plan to develop a new plugin.yaml lint replacement. To those who have been supporting the Scribe project, thank you.
Compatible Spigot versions: 1.16.3
This update focuses on support for 1.16.3
- Add
UUIDType
Compatible Spigot versions: 1.16.1
This update fixes a few issues with SuggestionProviders not parsing arguments
correctly.
- Fix
SpigotMapper.reparse(Type<?>)not parsing arguments correctly - Fix
SpigotMapper.reparse(SuggestionProvider<?>)not parsing arguments correctly
Compatible Spigot versions: 1.16.1
This update focuses on updating Chimera to support Spigot 1.16.1.
- Add
ClientSuggstionProvider.BIOMES - Change
NativeMappertoSpigotMapper - Fix
PointType.CUBICdisplaying 2D coordinates - Remove
com.karuslabs.commons.command.synchronization.*- See https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/pull-requests/675/overview
- Add
com.karuslabs.scribe.annotations.Version.V1_16
Compatible Spigot versions: 1.15.2
This update focuses on fixing an issue with code generated using command annotations.
- Add
Argument(String, ArgumentType<V>, Execution<CommandSender>, Predicate<CommandSender>, SuggestionProvider<CommandSender>) - Add
Literal(String, Execution<CommandSender>, Predicate<CommandSender>) - Fix issue with the generic type of generated local variables not being inferable
Compatible Spigot versions: 1.15.2
This update focuses on introducing compile-time command annotations in addition to quality of life changes and retrofitting old classes/packages.
Big Ol' list of changes:
Annotations has been undergone a few tweaks.
- Add
@Delegate - Add
@VisibleForOverride - Add
Filter - Add
AnnotationProcessor.error(String) - Add
AnnotationProcessor.warn(String) - Add
AnnotationProcessor.note(String) - Add
Messages - Change
RetentionPolicyof annotations fromRUNTIMEtoSOURCE - Change
com.karuslabs.annotations.processorstocom.karuslabs.annotations.processer - Remove
com.karuslabs.annotations.filters- All the current filters are available inFilter
Numerous components of the project has been redesigned to reduce the overall API surface area while retaining functionality. Commands annotations have also been rewritten to support compile-time generation and be less verbose.
Commands
- Add
com.karuslabs.commons.commands.aot.*packages to support AOT compilation - Add
Dispatcher.register(Map<String, CommandNode<CommandSender>>) - Add
DynamicExampleType - Add
Nodes - Add
PlatformMap - Add
PulseListener - Add
SpigotMap - Add
SynchronizationListener - Add
TreeWalker<T, R> - Add
Type.listSuggestions(S, CommandContext<S>, SugegstionsBuilder) - Change
Argument.addChild(CommandNode)andLiteral.addChild(CommandNode)to not merge the current child's aliases and the new child's aliases - Change
CartesianTypefrom public to package private - Change
Cartesian2DTypefrom public to package private - Change
Cartesian3DTypefrom public to package private - Change
com.karuslabs.commons.command.suggestions.ClientsideProvidertocom.karuslabs.commons.command.ClientSuggestionProvider - Change
Commands.alias(LiteralCommandNode<T>, String)toLiteral.alias(LiteralCommandNode<T>, String) - Change
Commands.from(Object)toCommands.resolve(Object) - Change
Commands.from(Object, String)toCommands.resolve(Object, String) - Change
Commands.executes(CommandNode<T>, Command<T>)toCommands.execution(CommandNode<T>, Command<T>) - Change
DefaultableContext<T>toOptionalContext<T> - Change
Dispatcher,DispatcherCommand,DispatcherMapperandExceptionsfromcom.karuslabs.common.command tocom.karuslabs.common.command.dispatcher` - Change
DispatcherMappertoNativeMapper - Change
Executable<T>toExecution<T> - Change
Execution.execute(OptionalContext<T>)toExecution.execute(T source, OptionalContext<T>) - Change
Exceptionsto package-private - Change
LexerstoReaders - Change
Mapper.otherwise(ComandNode<T>)to throwIllegalArgumentExceptioninstead ofUnsupportedOperationException - Change
Position2DTypetoPointType - Change
Position3DTypetoPointType - Change
Rootto implementMutable<CommandSender> - Change
Root.addChild(...)to throwIllegalArgumentExceptionif two commands with the same name are registered - Change
Synchronizermethods annotated withEventListenerto be package private - Change
Type.listSuggestions(CommandContext<S>, SuggestionsBuilder)to forward toType.listSuggestions(S, CommandContext<S>, SugegstionsBuilder) - Change
Vector2DTypetoVectorType - Change
Vector3DTypetoVectorType - Remove
Literal.Builder<T>.alias(String)- useLiteral.Builder<T>.alias(String...)instead - Remove
Synchronization- this was a leaky abstraction and has been replaced bySynchronizationListener - Remove
Tree<T, R>- replaced byTreeWalker<T, R> - Fix child commands not replaced when new child commands are added
- Fix command aliases not being removed in
Commands.remove(String) - Fix command aliases not being associated with their names in Bukkit's command system
- Fix commands being added to
Rooteven when unable to be registered in Bukkit's command system - Fix
WorldTypenot parsing quoted world names with spaces - Remove
Commands.remove(CommandNode<T>, String...)- this method was almost never used and posed a technical burden, useCommands.remove(CommandNode<T>, String)instead - Remove
Commands.resolve(Object)- this method have been made redundant by the rewritten command annotations - Remove
Commands.resolve(Object, String)- this method have been made redundant by the rewritten command annotations - Remove
Nodes.Builder.then(Object, String)- this method have been made redundant by the rewritten command annotations - Remove
com.karuslabs.commons.command.types.parser.VectorParser
Command Annotations
Commands annotations have been rewritten to support compile-time generation and be less verbose. Please refer to the wiki for more information.
Concurrency
- Add
Context - Add
Maybe<T> - Add
Scheduler - Change
AcquirabletoHoldable - Change
Acquirable.acquire()toHoldable.hold() - Change
Acquirable.acquireInterruptibly()toHoldable.holdInterruptibly() - Fix longstanding issue with tasks scheduled with
Schedulerand it's predecessor not running the correct number of times - Fix missing
@Nullableannotations - Remove
Eventual<T>- replaced byMaybe<T> - Remove
EventualTask<T>- replaced byMaybe<T> - Remove
Repeater- replaced byScheduler - Remove
Repetition- redundant asSchedulernow accepts aConsumer<Context> - Remove
RunnableRepetition- redundant asSchedulernow accepts aConsumer<Context>
Items
- Change
BannerBuilder.pattern(Pattern)toBannerBuilder.patterns(Pattern...) - Change
BannerBuilder.pattern(int, Pattern)toBannerBuilder.patterns(Collection<Pattern>) - Change
BookBuilder.pages(List<String>)toBookBuilder.pages(Iterable<String>) - Change
Builder(Builder<ItemMeta, ?>)from public to package-private - Change
Builder(Material)from public to package-private - Change
Builder.sef()from public to package-private - Fix
CrossbowBuilder.projectiles(List<ItemStack>)not being consistent withCollection<?>andvarargsmethods in otherBuilders
Utility
- Add
Point - Add
Type.box(Class<?>) - Add
Type.unbox(Class<?>) - Add
Type.VOID - Change `Trie.prefixed(String, Function<Entry<String, V>, T>, C) from public to package-private
- Change boxed and unboxed values of
TYPEconstant inTypetoObject - Change
Vectors.LOCATIONfrom public to package private - Change
Vectors.Reduction<T>from public to package private - Change
Vectors.rotate(Reduction<T>, T, double, double, double, float, float)from public to package-private - Change
Vectors.VECTORfrom public to package private - Fix incorrect equality comparison for
TrieEntry - Remove
Position- replaced byPoint - Remove
Type.of(Object)
Locale
- Remove
com.karuslabs.commons.util.locale.providers - Remove
com.karuslabs.commons.util.locale.spi - Remove dependency on
lingua-franca
Error and warning messages have been overhauled to improve readability.
Scribe Annotations
- Change
Default.valuefrom public to private - Change
Version.versionfrom public to private
Scribe Core
- Change
com.karuslabs.scribe.core.resolverstocom.karuslabs.scribe.core.parsers - Change
ExtractortoResolver - Change
ResolutiontoEnvironment - Change
Resolverand related sub-classes toParserand...Parsers - Remove
Messages
Scribe-Maven-Plugin
- Add
MavenEnvironment - Add
ScribeMojo.valid(MavenEnvironment) - Change
MessagestoConsole - Change
MavenProcessor(Project, ClassGraph)toMavenProcessor(Environment, ClassGraph) - Change
ScribeMojo.project()from protected to package-private - Fix failed execution caused by project's dependencies not getting resolved
- Remove
ScribeMojo.log(List<Message<Class?>>)
Scribe Standalone
- Add
StandaloneEnvironment
Others
- Add
CHANGELOG.md - Change the project's banner
- Fix incorrect copyright header in files
Compatible Spigot versions: 1.15.2
This update introduces Scribe Maven Plugin for Maven.
Big Ol' list of changes:
Scribe has been rewritten to target multiple platforms.
- Add
scribe-core - Add
scribe-maven-plugin
- Add check to ensure
@Pluginannotated classes are not abstract - Add check to ensure only one
@APIannotated class exists - Add check to ensure only one
@Informationannotated class exists - Add check to ensure only one
@Loadannotated class exists - Add check for website URL format, i.e.
@Information(url = "...") - Fix
@Pluginto allownameandversionto be optional - Fix outdated header in generated plugin.yml
- Add
minimizeJarto most projects to reduce resultant JAR size - Fix incorrect copyright headers in
annotations
Compatible Spigot versions: 1.15.2
This update focuses on porting the project to 1.15 and modularizing scribe.
Big Ol' list of changes:
- Add
CrossbowBuilder - Add
SuspiciousStewBuilder - Add
Builder.damage(int) - Add
Builder.model(Integer) - Add
ItemBuilder.asCrowssbow() - Add
ItemBuilder.asSuspiciousStew() - Rename
com.karuslabs.commons.util.collectionstocom.karuslabs.commons.util.collection - Remove
Builder.durability(short)- replaced byBuilder.damage(int) - Remove
Builder.<T, V>tag(NamespacedKey, ItemTag<T, V>, V)- theItemTagAPI has been deprecated
Annotation processors previously in scribe-annotations have been moved to scribe-standalone, scribe-annotations now only contains annotations.
-
Add
scribe-standaloneproject - previously inscribe-annotations -
Add
INFERREDandV1_15values toVersionenum
- Add checkstyle-maven-plugin to enforce coding conventions
- Bump checker-qual from 3.0.0 to 3.0.1
- Bump lingua-franca from 1.0.6 to 1.0.7
Compatible Spigot versions: 1.14 - 1.14.4
his update introduces Scribe-Annotations, a compile-time annotation processor that generates a plugin.yml from annotations.
Big Ol' list of changes:
- Add Scribe and Scribe Annotations project (obviously)
- Add experimental support for deployment to GitHub Package Registry
- Bump auto-service from 1.0-rc5 to 1.0-rc6
- Bump checker-qual from 2.8.2 to 3.0.0
- Bump jacoco-maven-plugin from 0.8.4 to 0.8.5
- Bump junit-jupiter-api from 5.4.2 to 5.5.2
- Bump junit-jupiter-engine from 5.4.2 to 5.5.2
- Bump junit-platform-launcher from 14.2 to 1.5.2
- Bump junit-jupiter-params from 5.4.2 to 5.5.2
- Bump lingua-franca from 1.0.4 to 1.0.6
- Bump maven-plugin-api from 3.6.1 to 3.6.2
- Bump mockito-core from 2.27.5 to 3.2.0
- Bump mockito-junit-jupiter from 2.27.0 to 3.2.0
- Bump snakeyaml-engine from 1.0 to 2.0
Compatible Spigot versions: 1.14 - 1.14.4
This update focuses on updating the project to support Spigot 1.14 and 1.14.1.
(Not so) big Ol' list of changes:
- Rename
@ValueBasedto@ValueType
- Fix return type of
DefaultableContext.getNodes()to match the changes in Brigadier.
Compatible Spigot versions: 1.13.2
This update focuses mainly on providing annotations from which a CommandNode can be created. In addition, several annotation processors that perform static analysis on the annotations are also included.
Big Ol' list of changes:
- Add
AnnotationProcessor - Add Element filters
- Add annotations from which commands can be derived
- Add annotation processors that perform static analysis on the annotations from which commands are derived
- Add
Alisableinterface - Add
Mutableinterface - Add
Commands#from(...)to create commands from annotated objects - Add
Literal.Builder#then(annotated, name) - Add varargs overload to
Literal.Builder#aliases(...) - Fix aliases of children not getting added in
LiteralandArgument - Fix aliases of commands not getting registered to the server's internal
CommandMapinRoot - Fix
LiteralandArgumentto implementAliasableandMutableinstead ofNode - Fix
Root#addChild(...)to throw anIllegalArgumentExceptionif the given command does not inherit fromLiteralCommandNode - Fix
Root#register(...)andRoot#wrap(...)to allow onlyLiteralCommandNodes instead ofCommandNodes - Remove methods & support for Argument aliasing - it didn't make sense since arguments did not have a concrete representation
- Remove
Nodeinterface - replaced byAlisableandMutable
- Bump Checker-qual to 2.8.1
- Bump Lingua Franca to 1.0.4
Compatible Spigot versions: 1.13.2
This is a patch that fixes some tinny-tiny issues.
(Not so) big Ol' list of changes:
- Fix suggested coordinates not displaying properly in
CartesianArgumentsif argument is blank
Compatible Spigot versions: 1.13.2
The entire library has been razed to the ground and a new library has risen from the ruins. In all seriousness, this is a pretty significant rewrite that bridges the Brigadier command framework to Spigot plugins.