From c675bf6625edd3ef11e79b2ce5371723149a8228 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Thu, 13 May 2021 13:13:40 +0800 Subject: [PATCH] Adds EntityAttributes (#83) * Adds EntityAttributes Signed-off-by: shedaniel * Switch to ConcurrentHashMap Signed-off-by: shedaniel --- .../registry/entity/EntityAttributes.java | 43 +++++++++++++++ .../entity/fabric/EntityAttributesImpl.java | 33 ++++++++++++ .../entity/forge/EntityAttributesImpl.java | 54 +++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 common/src/main/java/me/shedaniel/architectury/registry/entity/EntityAttributes.java create mode 100644 fabric/src/main/java/me/shedaniel/architectury/registry/entity/fabric/EntityAttributesImpl.java create mode 100644 forge/src/main/java/me/shedaniel/architectury/registry/entity/forge/EntityAttributesImpl.java diff --git a/common/src/main/java/me/shedaniel/architectury/registry/entity/EntityAttributes.java b/common/src/main/java/me/shedaniel/architectury/registry/entity/EntityAttributes.java new file mode 100644 index 00000000..fe919dc9 --- /dev/null +++ b/common/src/main/java/me/shedaniel/architectury/registry/entity/EntityAttributes.java @@ -0,0 +1,43 @@ +/* + * 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 me.shedaniel.architectury.registry.entity; + +import me.shedaniel.architectury.annotations.ExpectPlatform; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; + +import java.util.function.Supplier; + +public final class EntityAttributes { + private EntityAttributes() {} + + /** + * Registers default attributes to entities. + * + * @param type the type of entity + * @param attribute the attributes to register + * @see net.minecraft.world.entity.ai.attributes.DefaultAttributes + */ + @ExpectPlatform + public static void register(Supplier> type, Supplier attribute) { + throw new AssertionError(); + } +} diff --git a/fabric/src/main/java/me/shedaniel/architectury/registry/entity/fabric/EntityAttributesImpl.java b/fabric/src/main/java/me/shedaniel/architectury/registry/entity/fabric/EntityAttributesImpl.java new file mode 100644 index 00000000..5d881ecf --- /dev/null +++ b/fabric/src/main/java/me/shedaniel/architectury/registry/entity/fabric/EntityAttributesImpl.java @@ -0,0 +1,33 @@ +/* + * 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 me.shedaniel.architectury.registry.entity.fabric; + +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; + +import java.util.function.Supplier; + +public class EntityAttributesImpl { + public static void register(Supplier> type, Supplier attribute) { + FabricDefaultAttributeRegistry.register(type.get(), attribute.get()); + } +} diff --git a/forge/src/main/java/me/shedaniel/architectury/registry/entity/forge/EntityAttributesImpl.java b/forge/src/main/java/me/shedaniel/architectury/registry/entity/forge/EntityAttributesImpl.java new file mode 100644 index 00000000..369127aa --- /dev/null +++ b/forge/src/main/java/me/shedaniel/architectury/registry/entity/forge/EntityAttributesImpl.java @@ -0,0 +1,54 @@ +/* + * 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 me.shedaniel.architectury.registry.entity.forge; + +import me.shedaniel.architectury.forge.ArchitecturyForge; +import me.shedaniel.architectury.platform.forge.EventBuses; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraftforge.event.entity.EntityAttributeCreationEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; + +public class EntityAttributesImpl { + private static final Map>, Supplier> ATTRIBUTES = new ConcurrentHashMap<>(); + + public static void register(Supplier> type, Supplier attribute) { + ATTRIBUTES.put(type, attribute); + } + + static { + EventBuses.onRegistered(ArchitecturyForge.MOD_ID, bus -> { + bus.register(EntityAttributesImpl.class); + }); + } + + @SubscribeEvent + public static void event(EntityAttributeCreationEvent event) { + for (Map.Entry>, Supplier> entry : ATTRIBUTES.entrySet()) { + event.put(entry.getKey().get(), entry.getValue().get().build()); + } + } +}