Skip to content

Commit

Permalink
Include namespace in modded registry tag path (FabricMC#3303)
Browse files Browse the repository at this point in the history
* Include namespace in modded registry tag path

* Document tag namespace change
  • Loading branch information
apple502j authored Sep 7, 2023
1 parent 4351121 commit 34a3e0e
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@
* <p>The list of all dynamic registries, whether from vanilla or mods, can be accessed using
* {@link #getDynamicRegistries()}.
*
* <p>Tags for the entries of a custom registry must be placed in
* {@code /tags/<registry namespace>/<registry path>/}. For example, the tags for the example
* registry below would be placed in {@code /tags/my_mod/my_data/}.
*
* <h2 id="sync">Synchronization</h2>
* Dynamic registries are not synchronized to the client by default.
* To register a <em>synced dynamic registry</em>, you can replace the {@link #register} call
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@
* }
* </pre>
*
* <p>Tags for the entries of a custom registry must be placed in
* {@code /tags/<registry namespace>/<registry path>/}. For example, the tags for the example
* registry above would be placed in {@code /tags/modid/registry_name/}.
*
* @param <T> The type stored in the Registry
* @param <R> The registry type
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,16 @@
import net.minecraft.registry.tag.TagManagerLoader;
import net.minecraft.util.Identifier;

import net.fabricmc.fabric.impl.registry.sync.DynamicRegistriesImpl;

// Adds namespaces to tag directories for registries added by mods.
@Mixin(TagManagerLoader.class)
abstract class TagManagerLoaderMixin {
@Inject(method = "getPath", at = @At("HEAD"), cancellable = true)
private static void onGetPath(RegistryKey<? extends Registry<?>> registry, CallbackInfoReturnable<String> info) {
// TODO: Expand this change to static registries in the future.
if (!DynamicRegistriesImpl.DYNAMIC_REGISTRY_KEYS.contains(registry)) {
return;
}

Identifier id = registry.getValue();

// Vanilla doesn't mark namespaces in the directories of tags at all,
// so we prepend the directories with the namespace if it's a modded registry id.
// No need to check DIRECTORIES, since this is only used by vanilla registries.
if (!id.getNamespace().equals(Identifier.DEFAULT_NAMESPACE)) {
info.setReturnValue("tags/" + id.getNamespace() + "/" + id.getPath());
}
Expand Down

0 comments on commit 34a3e0e

Please sign in to comment.