From 297a9d2e976d5794842acb12c10fac6e0cb62667 Mon Sep 17 00:00:00 2001 From: Luke Bemish Date: Thu, 21 Sep 2023 12:22:11 +0100 Subject: [PATCH 1/4] Begin updating docs for 5.x --- docs/java/concepts.mdx | 19 ++++++++++------ docs/java/textures.mdx | 4 ++-- docs/json/category.md | 2 +- docs/json/metadata.md | 14 +++--------- docs/json/texsources/channel_route.md | 30 ++++++++++++++++++++++++++ docs/json/texsources/mask.md | 18 ---------------- docs/json/texsources/masks/channel.md | 2 +- docs/json/texsources/masks/cutoff.md | 2 +- docs/json/texsources/palette_spread.md | 6 +----- docs/json/texsources/shadowed.md | 4 ++-- docs/json/texsources/splitter.md | 13 +++-------- docs/json/texsources/spread.md | 18 ++++++++++++++++ 12 files changed, 75 insertions(+), 57 deletions(-) create mode 100644 docs/json/texsources/channel_route.md delete mode 100644 docs/json/texsources/mask.md create mode 100644 docs/json/texsources/spread.md diff --git a/docs/java/concepts.mdx b/docs/java/concepts.mdx index 1a831a9e..f95e15ba 100644 --- a/docs/java/concepts.mdx +++ b/docs/java/concepts.mdx @@ -15,18 +15,25 @@ public static final DataResourceCache DATA_CACHE = `AssetResourceCache` is a similar built-in implementation for client resources. Resource generation is structured around several core concepts: -* `ResourceGenerationContext`, an object which holds information about the current resource generation environment +* `ResourceGenerationContext`, an object which holds information about the current resource generation environment, including + a `ResourceSource` which can be used to access existing resources. * `InputStreamSource`, an object which can take a target file resource location and a generation context, and supplies an - `IoSupplier` which can be used to read the resource data, or `null`` if no resource should be supplied. + `IoSupplier` which can be used to read the resource data, or `null` if no resource should be supplied. * `PathAwareInputStreamSource`, a `InputStreamSource` which is aware of which locations it can provide data for. * Reset listeners, callbacks which are invoked when a resource cache is reset. These should be used to invalidate any sort of - caching + caching. + +`InputStreamSource` also has a default method, `createCacheKey`, which can be overridden to provide a "key" for the generated +resource. Between resource pack reloads or game restarts, if this key has not changed for a resource at a given location, then +the existing, cached location will be used. Thus, this key should include all information needed to specify the resource; for +texture sources, for instance, the implementation of this key contains both the serialized texture source generator, as well +as hashed versions of any images that the texture source reads. `ResourceCache` contains a number of methods for adding input stream sources; these methods all internally delegate to the "lazy" method which accepts a `Supplier` and does not evaluate it until resources are requested from the cache. This means that a `PathAwareInputStreamSource` can safely access existing resources or data both when generating resources and when determining which resources it can provide. -Resources and data from other sources (the base game, resource packs, other mods, etc.) can be accessed through -`ServerPrePackRepository` and `ClientPrePackRepository` respectively. Note that there are separate methods for getting a -single resource, such as a texture or model, and getting all resources with a given location, such as tags. +Resources and data from other sources (the base game, resource packs, other mods, etc.) can be accessed through the provided +`ResourceGenerationContext`; by default, this will not contain resources from other packs added by DynAssetGen. To access +these, provide their names in `ResourceCache#getDependencies`. \ No newline at end of file diff --git a/docs/java/textures.mdx b/docs/java/textures.mdx index 5f9c589b..751d6c93 100644 --- a/docs/java/textures.mdx +++ b/docs/java/textures.mdx @@ -30,8 +30,8 @@ Custom texture sources can be created by implementing `TexSource`, which require `getSupplier` takes a `TexSourceDataHolder` and a `ResourceGenerationContext`, and returns a `IoSupplier`, or `null` if no texture can be constructed. The `TexSourceDataHolder` is used to hold data that should be passed to "child" elements of the texture source, such as the logger, which can be retrieved with `TexSourceDataHolder#getLogger`. Note that -making your source's output depend on other data in this element requires implementing the currently-experimental caching -API. +making your source's output depend on other data in this element requires implementing the caching API, and that if your +source reads existing resources, it should implement the cache key API. `codec` returns a codec that can be used to serialize or deserialize the texture source. This codec must be registered with `TexSource.register`, and is used when caching texture sources; a texture source's generated texture must be fully diff --git a/docs/json/category.md b/docs/json/category.md index cdcc4f65..c356aee0 100644 --- a/docs/json/category.md +++ b/docs/json/category.md @@ -1,6 +1,6 @@ # JSON Generators -Dynamic Asset Generator can be used to add or overwrite assets or data using JSON files. These files live in `assets//dynamic_asset_generator` or `data//dynamic_asset_generator`, and can be placed under any namespace and within subfolders. Their general format is as follows: +Dynamic Asset Generator can be used to add or overwrite assets or data using JSON files. These files live in `assets//dynamic_asset_generator/generators` or `data//dynamic_asset_generator/generators`, and can be placed under any namespace and within subfolders. Their general format is as follows: ```json { diff --git a/docs/json/metadata.md b/docs/json/metadata.md index faa0e802..7327f213 100644 --- a/docs/json/metadata.md +++ b/docs/json/metadata.md @@ -19,11 +19,8 @@ Format: "animation" : { "frametime" : 300, "interpolate" : true, - "pattern_source" : "namespace:texture_path1", - "scales" : [ - 1, - 2 - ] + "width" : 16, + "height" : 16, }, "villager" : { "hat" : "partial" @@ -39,10 +36,5 @@ This generator generates a `.png.mcmeta` file for a texture at `output_location` `animation`, `villager`, and `texture`, along with all their arguments, are optional; if not provided, they will either be excluded if appropriate of inherited from the source textures if present. -`animation`: -* `frametime` and `interpolate` are the same as the corresponding arguments in a `.png.mcmeta` file. -* `pattern_source` determines which of the sources to take the general ordering of the frames from. -* `scales` can be used to specify that one or more of the source textures has been scaled in time when added to the output texture; see [Animation Splitter](texsources/splitter). - -The arguments of `villager` and `texture` allow the corresponding arguments in the `.png.mcmeta` to be overridden instead of inherited. +The arguments of `villager`, `animation`, and `texture` allow the corresponding arguments in the `.png.mcmeta` to be overridden instead of inherited. diff --git a/docs/json/texsources/channel_route.md b/docs/json/texsources/channel_route.md new file mode 100644 index 00000000..310ff8d9 --- /dev/null +++ b/docs/json/texsources/channel_route.md @@ -0,0 +1,30 @@ +# Channel Route Source + +Source Type ID: `dynamic_asset_generator:channel_route` + +Format: + +```json +{ + "type": "dynamic_asset_generator:channel_route", + "sources": { + "source": { }, + "another_source": { }, + "...": { }, + }, + "red": { + "source": "another_source", + "channel": "red" + }, // optional + "green": { }, // optional + "blue": { }, // optional + "alpha": { } // optional +} +``` + +This source routes channels from provided inputs to the channels of an output image. The `sources` field takes a map of identifier +names to texture sources; the fields for each channel (`red`, `green`, `blue`, and `alpha`) refer to these provided sources, and +specify a channel (`red`, `green`, `blue`, `alpha`, `cielab_lightness`, `cielab_a`, `cielab_b`, `hsl_hue`, `hsl_lightness`, `hsl_saturation`, `hsv_hue`, +`hsv_value`, or `hsv_saturation`) to use for the given channel; if a channel is not provided, it is assumed to always be 0 (`red`, `green`, or `blue`) +or 255 (`alpha`). + diff --git a/docs/json/texsources/mask.md b/docs/json/texsources/mask.md deleted file mode 100644 index fe533b06..00000000 --- a/docs/json/texsources/mask.md +++ /dev/null @@ -1,18 +0,0 @@ -# Mask Source - -Source Type ID: `dynamic_asset_generator:mask` - -Format: - -```json -{ - "type": "dynamic_asset_generator:mask", - "mask": { }, - "input": { } -} -``` - -* `mask` is a texture source used for the mask texture. -* `input` is a texture source used for the input texture. - -The output texture will be identical to the input, with its alpha multiplied by that of the mask texture. Textures are scaled to fit the wider texture if necessary. \ No newline at end of file diff --git a/docs/json/texsources/masks/channel.md b/docs/json/texsources/masks/channel.md index f39f4734..cdbe6d83 100644 --- a/docs/json/texsources/masks/channel.md +++ b/docs/json/texsources/masks/channel.md @@ -12,4 +12,4 @@ Format: } ``` -Generates a mask whose alpha channel is the specified channel of the source texture. The `channel` may be one of `red`, `green`, `blue`, `alpha`, `cielab_lightness`, `cielab_a`, `cielab_b`, `hsl_hue`, `hsl_lightness`, or `hsl_saturation`. \ No newline at end of file +Generates a mask whose alpha channel is the specified channel of the source texture. The `channel` may be one of `red`, `green`, `blue`, `alpha`, `cielab_lightness`, `cielab_a`, `cielab_b`, `hsl_hue`, `hsl_lightness`, `hsl_saturation`, `hsv_hue`, `hsv_value`, or `hsv_saturation`. \ No newline at end of file diff --git a/docs/json/texsources/masks/cutoff.md b/docs/json/texsources/masks/cutoff.md index db3eea07..88061d8f 100644 --- a/docs/json/texsources/masks/cutoff.md +++ b/docs/json/texsources/masks/cutoff.md @@ -13,4 +13,4 @@ Format: } ``` -Generates a mask which is solid everywhere the provided channel of the provided source is greater than the cutoff, and transparent otherwise. The `channel` may be one of `red`, `green`, `blue`, `alpha`, `cielab_lightness`, `cielab_a`, `cielab_b`, `hsl_hue`, `hsl_lightness`, or `hsl_saturation`. The `cutoff` must be an integer between 0 and 255, inclusive. \ No newline at end of file +Generates a mask which is solid everywhere the provided channel of the provided source is greater than the cutoff, and transparent otherwise. The `channel` may be one of `red`, `green`, `blue`, `alpha`, `cielab_lightness`, `cielab_a`, `cielab_b`, `hsl_hue`, `hsl_lightness`, `hsl_saturation`, `hsv_hue`, `hsv_value`, or `hsv_saturation`. The `cutoff` must be an integer between 0 and 255, inclusive. \ No newline at end of file diff --git a/docs/json/texsources/palette_spread.md b/docs/json/texsources/palette_spread.md index fe17d1f4..068a8ef0 100644 --- a/docs/json/texsources/palette_spread.md +++ b/docs/json/texsources/palette_spread.md @@ -9,11 +9,7 @@ Format: "type": "dynamic_asset_generator:palette_spread", "source": { }, "palette_cutoff": 3.5, // optional, defaults to 3.5 - "range": [ - [0, 50], - [100, 255] - ] // optional, defaults to [[0, 255]] } ``` -This source converts the provided source, `source`, to a greyscale image by evenly spreading out the individual colors in the images palette so that distances between colors are even. This is useful if you are going to use the image as a palette providing texture, as it will make the colors more evenly distributed. `palette_cutoff` configures how sensitive the palette used is, with colors falling within the given distance of each other being considered the same color. The default, `3.5`, is usually a good value. The `range` configures the range of values to use for the output image; the members of the palette will correspond to evenly spaced values within this range. For instance, if the range is `[[0, 70], [225, 255]]`, and 4 colors are provided, the colors will be mapped to values 25 apart within the range, at `0`, `25`, `50`, and `230`. +This source converts the provided source, `source`, to a greyscale image by evenly spreading out the individual colors in the images palette so that distances between colors are even. This is useful if you are going to use the image as a palette providing texture, as it will make the colors more evenly distributed. `palette_cutoff` configures how sensitive the palette used is, with colors falling within the given distance of each other being considered the same color. The default, `3.5`, is usually a good value. diff --git a/docs/json/texsources/shadowed.md b/docs/json/texsources/shadowed.md index 82fa0b32..6a5cf9cb 100644 --- a/docs/json/texsources/shadowed.md +++ b/docs/json/texsources/shadowed.md @@ -1,12 +1,12 @@ # Shadowed Source -Source Type ID: `dynamic_asset_generator:palette_spread` +Source Type ID: `dynamic_asset_generator:shadowed` Format: ```json { - "type": "dynamic_asset_generator:palette_spread", + "type": "dynamic_asset_generator:shadowed", "background": { }, "foreground": { }, "extend_palette_size": 6, // optional, defaults to 6 diff --git a/docs/json/texsources/splitter.md b/docs/json/texsources/splitter.md index 51ec6def..7705cea9 100644 --- a/docs/json/texsources/splitter.md +++ b/docs/json/texsources/splitter.md @@ -8,14 +8,8 @@ Format: { "type" : "dynamic_asset_generator:animation_splitter", "sources" : { - "name1" : { - "source" : { }, - "scale" : 1 - }, - "name2" : { - "source" : { }, - "scale" : 3 - } + "name1" : { }, + "name2" : { } }, "generator" : { ... @@ -28,5 +22,4 @@ Format: } ``` -This source allows animation images to be split up and processed frame-by-frame. A list of `sources` is specified; each of these is broken up into square frames; in the final animation, each source's original frame will correspond to `scale` frames in a row in the output. The total length of the output animation will be the least common multiple of the lengths of the input animation multiplied by their scales. The `generator` is calculated for each frame of the output animation; inside of this texture source, any other texture source can be used, in addition to the special `frame_capture` source, which is given a source name and captures a single frame of that source at a time. - +This source allows animation images to be split up and processed frame-by-frame. A list of `sources` is specified; each of these is broken up into square frames. The total length of the output animation will be the least common multiple of the lengths of the input animations. The `generator` is calculated for each frame of the output animation; inside of this texture source, any other texture source can be used, in addition to the special `frame_capture` source, which is given a source name and captures a single frame of that source at a time. diff --git a/docs/json/texsources/spread.md b/docs/json/texsources/spread.md new file mode 100644 index 00000000..ff8ec99e --- /dev/null +++ b/docs/json/texsources/spread.md @@ -0,0 +1,18 @@ +# Spread Source + +Source Type ID: `dynamic_asset_generator:spread` + +Format: + +```json +{ + "type": "dynamic_asset_generator:spread", + "source": { }, + "range": [ + [0, 50], + [100, 255] + ] // optional, defaults to [[0, 255]] +} +``` + +This source converts the provided source, `source`, to a greyscale image by spreading out or squishing the colors in an image to fit in a given range. The `range` configures the range of values to use for the output image; the members of the palette will correspond to evenly spaced values within this range. From 343b39043686f09650c2f6e13fa3d8def50b873d Mon Sep 17 00:00:00 2001 From: Luke Bemish Date: Sun, 24 Sep 2023 18:38:03 +0100 Subject: [PATCH 2/4] Add 1.20.2 section to table --- docs/java/category.mdx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/java/category.mdx b/docs/java/category.mdx index 18a95a18..bc5db7c4 100644 --- a/docs/java/category.mdx +++ b/docs/java/category.mdx @@ -3,7 +3,7 @@ :::note While these docs will contain examples and explanations, the javadocs for DynAssetGen are also a good source for information on the java API; while they are not complete, I am continually working to expand how much of -the API surface is well documented in this way. Additionally, javadocs are published for each major DynAssetGen version after 4. Javadocs are located at [https://javadoc.lukebemish.dev/dev/lukebemish/dynamicassetgenerator/4/](https://javadoc.lukebemish.dev/dev/lukebemish/dynamicassetgenerator/4/). +the API surface is well documented in this way. Additionally, javadocs are published for each major DynAssetGen version after 4. Javadocs are located at [https://javadoc.lukebemish.dev/dev/lukebemish/dynamicassetgenerator/5/](https://javadoc.lukebemish.dev/dev/lukebemish/dynamicassetgenerator/5/). ::: @@ -21,20 +21,20 @@ repositories { For each version of DynAssetGen, three types of artifacts are published: * `common` jars, which are in official "Mojmaps" mappings and contain no loader-specific code -* `quilt` jars which run on Quilt -* `forge` jars which run on Forge +* `fabriquilt` jars which run on Quilt and Fabric +* `neoforge` jars which run on NeoForge The artifact coordinates take the format `dev.lukebemish.dynamicassetgenerator:dynamicassetgenerator--:` -```gradle title="Adding artifact on Forge" +```gradle title="Adding artifact on NeoForge" dependencies { - implementation fg.deobf('dev.lukebemish.dynamicassetgenerator:dynamicassetgenerator-forge-:') + implementation fg.deobf('dev.lukebemish.dynamicassetgenerator:dynamicassetgenerator-neoforge-:') } ``` -```gradle title="Adding artifact on Quilt" +```gradle title="Adding artifact on Quilt or Fabric" dependencies { - modImplementation 'dev.lukebemish.dynamicassetgenerator:dynamicassetgenerator-quilt-:' + modImplementation 'dev.lukebemish.dynamicassetgenerator:dynamicassetgenerator-fabriquilt-:' } ``` @@ -42,6 +42,7 @@ dependencies { | Minecraft Version | Latest | | :---------------- | :----- | +| 1.20.2 | [![Latest 1.20.2 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.19.3%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.20.2/) | | 1.20.1 | [![Latest 1.20.1 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.20.1%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.20.1/) | | 1.19.4 | [![Latest 1.19.3 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.19.4%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.19.4/) | | 1.19.3 | [![Latest 1.19.3 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.19.3%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.19.3/) | From 80f4c0ce716f51a7b17e348c72eb47a3ee571381 Mon Sep 17 00:00:00 2001 From: Luke Bemish Date: Sat, 25 Nov 2023 20:26:49 +0000 Subject: [PATCH 3/4] Update neoforge instructions --- docs/java/category.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/java/category.mdx b/docs/java/category.mdx index bc5db7c4..58b04a3d 100644 --- a/docs/java/category.mdx +++ b/docs/java/category.mdx @@ -28,7 +28,7 @@ The artifact coordinates take the format `dev.lukebemish.dynamicassetgenerator:d ```gradle title="Adding artifact on NeoForge" dependencies { - implementation fg.deobf('dev.lukebemish.dynamicassetgenerator:dynamicassetgenerator-neoforge-:') + implementation 'dev.lukebemish.dynamicassetgenerator:dynamicassetgenerator-neoforge-:' } ``` @@ -42,7 +42,7 @@ dependencies { | Minecraft Version | Latest | | :---------------- | :----- | -| 1.20.2 | [![Latest 1.20.2 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.19.3%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.20.2/) | +| 1.20.2 | [![Latest 1.20.2 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.20.2%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.20.2/) | | 1.20.1 | [![Latest 1.20.1 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.20.1%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.20.1/) | | 1.19.4 | [![Latest 1.19.3 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.19.4%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.19.4/) | | 1.19.3 | [![Latest 1.19.3 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.19.3%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.19.3/) | From 4c6f954b7380a13b2ec64cfa43f0153da0143cad Mon Sep 17 00:00:00 2001 From: Luke Bemish Date: Sat, 23 Dec 2023 02:00:54 +0000 Subject: [PATCH 4/4] Update for 1.20.4 --- docs/java/category.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/java/category.mdx b/docs/java/category.mdx index 58b04a3d..5a874bd7 100644 --- a/docs/java/category.mdx +++ b/docs/java/category.mdx @@ -42,6 +42,7 @@ dependencies { | Minecraft Version | Latest | | :---------------- | :----- | +| 1.20.4 | [![Latest 1.20.4 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.20.4%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.20.4/) | | 1.20.2 | [![Latest 1.20.2 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.20.2%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.20.2/) | | 1.20.1 | [![Latest 1.20.1 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.20.1%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.20.1/) | | 1.19.4 | [![Latest 1.19.3 Version](https://img.shields.io/badge/dynamic/xml?style=for-the-badge&color=e3116c&label=&prefix=v&query=metadata%2F%2Flatest&url=https%3A%2F%2Fmaven.lukebemish.dev%2Freleases%2Fdev%2Flukebemish%2Fdynamicassetgenerator%2Fdynamicassetgenerator-common-1.19.4%2Fmaven-metadata.xml)](https://maven.lukebemish.dev/releases/dev/lukebemish/dynamicassetgenerator/dynamicassetgenerator-common-1.19.4/) |