(corrected after reading the comment by tryashtar)
The bug
If several blocks, including a block that filters out paths in namespace "minecraft", are defined in the filter, blocks that specify a not "minecraft" namespace will also filter out the same paths they say in "minecraft" namespace.
The attachment is a datapack to verify this behavior. It only contains a pack.mcmeta that filters out vanilla advancements and recipes from a namespace that does not exist.
How to reproduce
Download the datapack attached and install it to a world
Enter the world
Press "L" (or the key bind to open advancements tab) and observe that all vanilla advancements are disabled ✔
Execute this command through chat to get all recipes
/recipe give @s *
Observe that all vanilla recipes are disabled ❌
Attachments
Comments 3
I did more testing. A single block with given namespace only works if the given namespace is "minecraft", otherwise it blocks nothing.
I think I will do another report for this.
I did some analysis on this. The ResourceLocationPattern
class has a locationPredicate
method, which is a predicate for testing an entire resource location. This is what the filter
font/glyph provider uses for checking sprite resource locations, as intended.
However the ResourceFilterSection
class has isNamespaceFiltered
and isPathFiltered
methods which respectively check if any of the listed blocks match the namespacePredicate
or pathPredicate
predicates. This means essentially that every combination of namespace-path blocks will block resource locations, which is not expected.
The example given by tryashtar is equivalent to specifying the following, in the current implementation:
{
"namespace": "&NONEXISTENT$",
"path": "^recipes/"
},
{
"namespace": "&NONEXISTENT$",
"path": "&NONEXISTENT$"
},
{
"namespace": "^minecraft$",
"path": "&NONEXISTENT$"
},
{
"namespace": "^minecraft$",
"path": "^recipes/"
}
From doing some testing, the issue isn't exactly as described. For example, a single block with a given namespace works properly. However, namespaces do seem to leak across definitions. For example this
block
filters out vanilla recipes, even though it should filter out nothing.