From 39e216bbed79bc5d5e035bf213f4114b38fc25df Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 1 Jan 2022 05:36:08 +0800 Subject: [PATCH] [ci skip] Entity Model Layer Reg, and move to new package (#159) --- .../client/ClientReloadShadersEvent.java | 19 +++++++ .../entity/EntityModelLayerRegistry.java | 36 +++++++++++++ .../level/entity/EntityRendererRegistry.java | 40 ++++++++++++++ .../level/entity/EntityRendererRegistry.java | 10 ++-- .../fabric/EntityModelLayerRegistryImpl.java | 32 ++++++++++++ .../fabric/EntityRendererRegistryImpl.java | 6 +-- .../forge/EntityModelLayerRegistryImpl.java | 52 +++++++++++++++++++ .../forge/EntityRendererRegistryImpl.java | 2 +- 8 files changed, 190 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/dev/architectury/registry/client/level/entity/EntityModelLayerRegistry.java create mode 100644 common/src/main/java/dev/architectury/registry/client/level/entity/EntityRendererRegistry.java create mode 100644 fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityModelLayerRegistryImpl.java rename fabric/src/main/java/dev/architectury/registry/{ => client}/level/entity/fabric/EntityRendererRegistryImpl.java (85%) create mode 100644 forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityModelLayerRegistryImpl.java rename forge/src/main/java/dev/architectury/registry/{ => client}/level/entity/forge/EntityRendererRegistryImpl.java (97%) diff --git a/common/src/main/java/dev/architectury/event/events/client/ClientReloadShadersEvent.java b/common/src/main/java/dev/architectury/event/events/client/ClientReloadShadersEvent.java index 83c63b76..4506c7d0 100644 --- a/common/src/main/java/dev/architectury/event/events/client/ClientReloadShadersEvent.java +++ b/common/src/main/java/dev/architectury/event/events/client/ClientReloadShadersEvent.java @@ -1,3 +1,22 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + package dev.architectury.event.events.client; import dev.architectury.event.Event; diff --git a/common/src/main/java/dev/architectury/registry/client/level/entity/EntityModelLayerRegistry.java b/common/src/main/java/dev/architectury/registry/client/level/entity/EntityModelLayerRegistry.java new file mode 100644 index 00000000..8084744f --- /dev/null +++ b/common/src/main/java/dev/architectury/registry/client/level/entity/EntityModelLayerRegistry.java @@ -0,0 +1,36 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package dev.architectury.registry.client.level.entity; + +import dev.architectury.injectables.annotations.ExpectPlatform; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.builders.LayerDefinition; + +import java.util.function.Supplier; + +@Environment(EnvType.CLIENT) +public class EntityModelLayerRegistry { + @ExpectPlatform + public static void register(ModelLayerLocation location, Supplier definition) { + throw new AssertionError(); + } +} diff --git a/common/src/main/java/dev/architectury/registry/client/level/entity/EntityRendererRegistry.java b/common/src/main/java/dev/architectury/registry/client/level/entity/EntityRendererRegistry.java new file mode 100644 index 00000000..fb972fe3 --- /dev/null +++ b/common/src/main/java/dev/architectury/registry/client/level/entity/EntityRendererRegistry.java @@ -0,0 +1,40 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package dev.architectury.registry.client.level.entity; + +import dev.architectury.injectables.annotations.ExpectPlatform; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; + +import java.util.function.Supplier; + +@Environment(EnvType.CLIENT) +public final class EntityRendererRegistry { + private EntityRendererRegistry() { + } + + @ExpectPlatform + public static void register(Supplier> type, EntityRendererProvider provider) { + throw new AssertionError(); + } +} diff --git a/common/src/main/java/dev/architectury/registry/level/entity/EntityRendererRegistry.java b/common/src/main/java/dev/architectury/registry/level/entity/EntityRendererRegistry.java index 16cf2645..6150ae52 100644 --- a/common/src/main/java/dev/architectury/registry/level/entity/EntityRendererRegistry.java +++ b/common/src/main/java/dev/architectury/registry/level/entity/EntityRendererRegistry.java @@ -19,12 +19,12 @@ package dev.architectury.registry.level.entity; -import dev.architectury.injectables.annotations.ExpectPlatform; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import org.jetbrains.annotations.ApiStatus; import java.util.function.Supplier; @@ -33,8 +33,12 @@ public final class EntityRendererRegistry { private EntityRendererRegistry() { } - @ExpectPlatform + /** + * @deprecated Migrate to {@link dev.architectury.registry.client.level.entity.EntityRendererRegistry} + */ + @Deprecated + @ApiStatus.ScheduledForRemoval public static void register(Supplier> type, EntityRendererProvider provider) { - throw new AssertionError(); + dev.architectury.registry.client.level.entity.EntityRendererRegistry.register(type, provider); } } diff --git a/fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityModelLayerRegistryImpl.java b/fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityModelLayerRegistryImpl.java new file mode 100644 index 00000000..cedf998c --- /dev/null +++ b/fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityModelLayerRegistryImpl.java @@ -0,0 +1,32 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package dev.architectury.registry.client.level.entity.fabric; + +import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.builders.LayerDefinition; + +import java.util.function.Supplier; + +public class EntityModelLayerRegistryImpl { + public static void register(ModelLayerLocation location, Supplier definition) { + EntityModelLayerRegistry.registerModelLayer(location, definition::get); + } +} diff --git a/fabric/src/main/java/dev/architectury/registry/level/entity/fabric/EntityRendererRegistryImpl.java b/fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityRendererRegistryImpl.java similarity index 85% rename from fabric/src/main/java/dev/architectury/registry/level/entity/fabric/EntityRendererRegistryImpl.java rename to fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityRendererRegistryImpl.java index 84fc1a16..242d4b5e 100644 --- a/fabric/src/main/java/dev/architectury/registry/level/entity/fabric/EntityRendererRegistryImpl.java +++ b/fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityRendererRegistryImpl.java @@ -17,9 +17,9 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package dev.architectury.registry.level.entity.fabric; +package dev.architectury.registry.client.level.entity.fabric; -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -28,6 +28,6 @@ import java.util.function.Supplier; public class EntityRendererRegistryImpl { public static void register(Supplier> type, EntityRendererProvider provider) { - EntityRendererRegistry.INSTANCE.register(type.get(), provider); + EntityRendererRegistry.register(type.get(), provider); } } diff --git a/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityModelLayerRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityModelLayerRegistryImpl.java new file mode 100644 index 00000000..3d0e9ed7 --- /dev/null +++ b/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityModelLayerRegistryImpl.java @@ -0,0 +1,52 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package dev.architectury.registry.client.level.entity.forge; + +import dev.architectury.forge.ArchitecturyForge; +import dev.architectury.platform.forge.EventBuses; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; + +public class EntityModelLayerRegistryImpl { + private static final Map> DEFINITIONS = new ConcurrentHashMap<>(); + + static { + EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> { + bus.register(EntityModelLayerRegistryImpl.class); + }); + } + + public static void register(ModelLayerLocation location, Supplier definition) { + DEFINITIONS.put(location, definition); + } + + @SubscribeEvent + public static void event(EntityRenderersEvent.RegisterLayerDefinitions event) { + for (Map.Entry> entry : DEFINITIONS.entrySet()) { + event.registerLayerDefinition(entry.getKey(), entry.getValue()); + } + } +} diff --git a/forge/src/main/java/dev/architectury/registry/level/entity/forge/EntityRendererRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java similarity index 97% rename from forge/src/main/java/dev/architectury/registry/level/entity/forge/EntityRendererRegistryImpl.java rename to forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java index 8901001b..dac2104a 100644 --- a/forge/src/main/java/dev/architectury/registry/level/entity/forge/EntityRendererRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java @@ -17,7 +17,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package dev.architectury.registry.level.entity.forge; +package dev.architectury.registry.client.level.entity.forge; import dev.architectury.forge.ArchitecturyForge; import dev.architectury.platform.forge.EventBuses;