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
ConcurrentModificationException
caused 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
ConcurrentModificationException
caused 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.WORD
to become private - Fix
EnchantmentType
not supporting non-ASCII characters - Fix
MaterialType
not supporting non-ASCII characters - Fix
ParticleType
not 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
@Source
to@Pack
- Change classes in
com.karuslabs.commons.item.builders
to 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
SkullBuilder
toHeadBuilder
- 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
as
incom.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
NativeMapper
toSpigotMapper
- Fix
PointType.CUBIC
displaying 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
RetentionPolicy
of annotations fromRUNTIME
toSOURCE
- Change
com.karuslabs.annotations.processors
tocom.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
CartesianType
from public to package private - Change
Cartesian2DType
from public to package private - Change
Cartesian3DType
from public to package private - Change
com.karuslabs.commons.command.suggestions.ClientsideProvider
tocom.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
,DispatcherMapper
andExceptions
fromcom.karuslabs.common.command to
com.karuslabs.common.command.dispatcher` - Change
DispatcherMapper
toNativeMapper
- Change
Executable<T>
toExecution<T>
- Change
Execution.execute(OptionalContext<T>)
toExecution.execute(T source, OptionalContext<T>)
- Change
Exceptions
to package-private - Change
Lexers
toReaders
- Change
Mapper.otherwise(ComandNode<T>)
to throwIllegalArgumentException
instead ofUnsupportedOperationException
- Change
Position2DType
toPointType
- Change
Position3DType
toPointType
- Change
Root
to implementMutable<CommandSender>
- Change
Root.addChild(...)
to throwIllegalArgumentException
if two commands with the same name are registered - Change
Synchronizer
methods annotated withEventListener
to be package private - Change
Type.listSuggestions(CommandContext<S>, SuggestionsBuilder)
to forward toType.listSuggestions(S, CommandContext<S>, SugegstionsBuilder)
- Change
Vector2DType
toVectorType
- Change
Vector3DType
toVectorType
- 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
Root
even when unable to be registered in Bukkit's command system - Fix
WorldType
not 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
Acquirable
toHoldable
- Change
Acquirable.acquire()
toHoldable.hold()
- Change
Acquirable.acquireInterruptibly()
toHoldable.holdInterruptibly()
- Fix longstanding issue with tasks scheduled with
Scheduler
and it's predecessor not running the correct number of times - Fix missing
@Nullable
annotations - Remove
Eventual<T>
- replaced byMaybe<T>
- Remove
EventualTask<T>
- replaced byMaybe<T>
- Remove
Repeater
- replaced byScheduler
- Remove
Repetition
- redundant asScheduler
now accepts aConsumer<Context>
- Remove
RunnableRepetition
- redundant asScheduler
now 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<?>
andvarargs
methods in otherBuilder
s
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
TYPE
constant inType
toObject
- Change
Vectors.LOCATION
from 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.VECTOR
from 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.value
from public to private - Change
Version.version
from public to private
Scribe Core
- Change
com.karuslabs.scribe.core.resolvers
tocom.karuslabs.scribe.core.parsers
- Change
Extractor
toResolver
- Change
Resolution
toEnvironment
- Change
Resolver
and related sub-classes toParser
and...Parser
s - Remove
Messages
Scribe-Maven-Plugin
- Add
MavenEnvironment
- Add
ScribeMojo.valid(MavenEnvironment)
- Change
Messages
toConsole
- 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
@Plugin
annotated classes are not abstract - Add check to ensure only one
@API
annotated class exists - Add check to ensure only one
@Information
annotated class exists - Add check to ensure only one
@Load
annotated class exists - Add check for website URL format, i.e.
@Information(url = "...")
- Fix
@Plugin
to allowname
andversion
to be optional - Fix outdated header in generated plugin.yml
- Add
minimizeJar
to 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.collections
tocom.karuslabs.commons.util.collection
- Remove
Builder.durability(short)
- replaced byBuilder.damage(int)
- Remove
Builder.<T, V>tag(NamespacedKey, ItemTag<T, V>, V)
- theItemTag
API has been deprecated
Annotation processors previously in scribe-annotations
have been moved to scribe-standalone
, scribe-annotations
now only contains annotations.
-
Add
scribe-standalone
project - previously inscribe-annotations
-
Add
INFERRED
andV1_15
values toVersion
enum
- 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
@ValueBased
to@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
Alisable
interface - Add
Mutable
interface - 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
Literal
andArgument
- Fix aliases of commands not getting registered to the server's internal
CommandMap
inRoot
- Fix
Literal
andArgument
to implementAliasable
andMutable
instead ofNode
- Fix
Root#addChild(...)
to throw anIllegalArgumentException
if the given command does not inherit fromLiteralCommandNode
- Fix
Root#register(...)
andRoot#wrap(...)
to allow onlyLiteralCommandNode
s instead ofCommandNode
s - Remove methods & support for Argument aliasing - it didn't make sense since arguments did not have a concrete representation
- Remove
Node
interface - replaced byAlisable
andMutable
- 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
CartesianArguments
if 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.