From 2f150cf819909e76db376a399bc227aba3db1699 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 7 Aug 2022 16:01:06 +0200 Subject: [PATCH 1/5] Add more validation to NetworkManagerImpl (#310) [ci skip] --- .../networking/fabric/NetworkManagerImpl.java | 10 ++++++++++ .../networking/forge/NetworkManagerImpl.java | 16 +++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/fabric/src/main/java/dev/architectury/networking/fabric/NetworkManagerImpl.java b/fabric/src/main/java/dev/architectury/networking/fabric/NetworkManagerImpl.java index b0684e34..c7a4483b 100644 --- a/fabric/src/main/java/dev/architectury/networking/fabric/NetworkManagerImpl.java +++ b/fabric/src/main/java/dev/architectury/networking/fabric/NetworkManagerImpl.java @@ -19,6 +19,7 @@ package dev.architectury.networking.fabric; +import com.mojang.logging.LogUtils; import dev.architectury.networking.NetworkManager; import dev.architectury.networking.NetworkManager.NetworkReceiver; import dev.architectury.networking.transformers.PacketSink; @@ -38,10 +39,12 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.thread.BlockableEventLoop; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; +import org.slf4j.Logger; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; public class NetworkManagerImpl { private static final Map C2S_RECEIVER = new HashMap<>(); @@ -49,7 +52,12 @@ public class NetworkManagerImpl { private static final Map C2S_TRANSFORMERS = new HashMap<>(); private static final Map S2C_TRANSFORMERS = new HashMap<>(); + private static final Logger LOGGER = LogUtils.getLogger(); + public static void registerReceiver(NetworkManager.Side side, ResourceLocation id, List packetTransformers, NetworkReceiver receiver) { + Objects.requireNonNull(id, "Cannot register receiver with a null ID!"); + packetTransformers = Objects.requireNonNullElse(packetTransformers, List.of()); + Objects.requireNonNull(receiver, "Cannot register a null receiver!"); if (side == NetworkManager.Side.C2S) { registerC2SReceiver(id, packetTransformers, receiver); } else if (side == NetworkManager.Side.S2C) { @@ -58,6 +66,7 @@ public class NetworkManagerImpl { } private static void registerC2SReceiver(ResourceLocation id, List packetTransformers, NetworkReceiver receiver) { + LOGGER.info("Registering C2S receiver with id {}", id); C2S_RECEIVER.put(id, receiver); PacketTransformer transformer = PacketTransformer.concat(packetTransformers); ServerPlayNetworking.registerGlobalReceiver(id, (server, player, handler, buf, sender) -> { @@ -76,6 +85,7 @@ public class NetworkManagerImpl { @SuppressWarnings("Convert2Lambda") @Environment(EnvType.CLIENT) private static void registerS2CReceiver(ResourceLocation id, List packetTransformers, NetworkReceiver receiver) { + LOGGER.info("Registering S2C receiver with id {}", id); S2C_RECEIVER.put(id, receiver); PacketTransformer transformer = PacketTransformer.concat(packetTransformers); ClientPlayNetworking.registerGlobalReceiver(id, new ClientPlayNetworking.PlayChannelHandler() { diff --git a/forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java b/forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java index a431f038..51db81fc 100644 --- a/forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java +++ b/forge/src/main/java/dev/architectury/networking/forge/NetworkManagerImpl.java @@ -21,6 +21,7 @@ package dev.architectury.networking.forge; import com.google.common.collect.*; +import com.mojang.logging.LogUtils; import dev.architectury.forge.ArchitecturyForge; import dev.architectury.networking.NetworkManager; import dev.architectury.networking.NetworkManager.NetworkReceiver; @@ -47,18 +48,17 @@ import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.event.EventNetworkChannel; import org.apache.commons.lang3.tuple.Pair; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.function.Consumer; @Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID) public class NetworkManagerImpl { public static void registerReceiver(NetworkManager.Side side, ResourceLocation id, List packetTransformers, NetworkReceiver receiver) { + Objects.requireNonNull(id, "Cannot register receiver with a null ID!"); + packetTransformers = Objects.requireNonNullElse(packetTransformers, List.of()); + Objects.requireNonNull(receiver, "Cannot register a null receiver!"); if (side == NetworkManager.Side.C2S) { registerC2SReceiver(id, packetTransformers, receiver); } else if (side == NetworkManager.Side.S2C) { @@ -84,7 +84,7 @@ public class NetworkManagerImpl { } } - private static final Logger LOGGER = LogManager.getLogger(); + private static final Logger LOGGER = LogUtils.getLogger(); private static final ResourceLocation CHANNEL_ID = new ResourceLocation("architectury:network"); static final ResourceLocation SYNC_IDS = new ResourceLocation("architectury:sync_ids"); static final EventNetworkChannel CHANNEL = NetworkRegistry.newEventChannel(CHANNEL_ID, () -> "1", version -> true, version -> true); @@ -159,12 +159,14 @@ public class NetworkManagerImpl { @OnlyIn(Dist.CLIENT) public static void registerS2CReceiver(ResourceLocation id, List packetTransformers, NetworkReceiver receiver) { + LOGGER.info("Registering S2C receiver with id {}", id); S2C.put(id, receiver); PacketTransformer transformer = PacketTransformer.concat(packetTransformers); S2C_TRANSFORMERS.put(id, transformer); } public static void registerC2SReceiver(ResourceLocation id, List packetTransformers, NetworkReceiver receiver) { + LOGGER.info("Registering C2S receiver with id {}", id); C2S.put(id, receiver); PacketTransformer transformer = PacketTransformer.concat(packetTransformers); C2S_TRANSFORMERS.put(id, transformer); From 739359e5b21531d0cfe834c0ea25dec09289056c Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 7 Aug 2022 22:01:46 +0800 Subject: [PATCH 2/5] Add simple interface injection extensions (#257) * Add simple interface injection extensions * Update to only add holders for intrusive registry entries * Add arch$registryName [ci skip] --- .../SimpleArchitecturyFluidAttributes.java | 4 +-- .../core/item/ArchitecturySpawnEggItem.java | 6 ++-- .../injected/InjectedBlockExtension.java | 32 +++++++++++++++++ .../injected/InjectedBucketItemExtension.java | 11 ++++++ .../injected/InjectedEntityTypeExtension.java | 32 +++++++++++++++++ .../injected/InjectedFluidExtension.java | 32 +++++++++++++++++ ...njectedFoodPropertiesBuilderExtension.java | 33 ++++++++++++++++++ .../injected/InjectedGameEventExtension.java | 30 ++++++++++++++++ .../injected/InjectedItemExtension.java | 32 +++++++++++++++++ .../InjectedRegistryEntryExtension.java | 34 +++++++++++++++++++ .../architectury/mixin/inject/MixinBlock.java | 9 +++++ .../mixin/inject/MixinBlockEntityType.java | 9 +++++ .../mixin/inject/MixinBucketItem.java | 9 +++++ .../mixin/inject/MixinEntityType.java | 9 +++++ .../architectury/mixin/inject/MixinFluid.java | 9 +++++ .../architectury/mixin/inject/MixinItem.java | 9 +++++ .../resources/architectury-common.mixins.json | 6 ++++ .../main/resources/architectury.common.json | 25 +++++++++++++- .../item/tool/fabric/HoeItemHooksImpl.java | 19 +++++++++++ .../item/tool/forge/HoeItemHooksImpl.java | 19 +++++++++++ 20 files changed, 361 insertions(+), 8 deletions(-) create mode 100644 common/src/main/java/dev/architectury/extensions/injected/InjectedBlockExtension.java create mode 100644 common/src/main/java/dev/architectury/extensions/injected/InjectedBucketItemExtension.java create mode 100644 common/src/main/java/dev/architectury/extensions/injected/InjectedEntityTypeExtension.java create mode 100644 common/src/main/java/dev/architectury/extensions/injected/InjectedFluidExtension.java create mode 100644 common/src/main/java/dev/architectury/extensions/injected/InjectedFoodPropertiesBuilderExtension.java create mode 100644 common/src/main/java/dev/architectury/extensions/injected/InjectedGameEventExtension.java create mode 100644 common/src/main/java/dev/architectury/extensions/injected/InjectedItemExtension.java create mode 100644 common/src/main/java/dev/architectury/extensions/injected/InjectedRegistryEntryExtension.java create mode 100644 common/src/main/java/dev/architectury/mixin/inject/MixinBlock.java create mode 100644 common/src/main/java/dev/architectury/mixin/inject/MixinBlockEntityType.java create mode 100644 common/src/main/java/dev/architectury/mixin/inject/MixinBucketItem.java create mode 100644 common/src/main/java/dev/architectury/mixin/inject/MixinEntityType.java create mode 100644 common/src/main/java/dev/architectury/mixin/inject/MixinFluid.java create mode 100644 common/src/main/java/dev/architectury/mixin/inject/MixinItem.java diff --git a/common/src/main/java/dev/architectury/core/fluid/SimpleArchitecturyFluidAttributes.java b/common/src/main/java/dev/architectury/core/fluid/SimpleArchitecturyFluidAttributes.java index cd85638e..e99f991f 100644 --- a/common/src/main/java/dev/architectury/core/fluid/SimpleArchitecturyFluidAttributes.java +++ b/common/src/main/java/dev/architectury/core/fluid/SimpleArchitecturyFluidAttributes.java @@ -21,11 +21,9 @@ package dev.architectury.core.fluid; import com.google.common.base.Suppliers; import dev.architectury.fluid.FluidStack; -import dev.architectury.registry.registries.Registries; import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.Util; import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; @@ -66,7 +64,7 @@ public class SimpleArchitecturyFluidAttributes implements ArchitecturyFluidAttri private SoundEvent fillSound = SoundEvents.BUCKET_FILL; @Nullable private SoundEvent emptySound = SoundEvents.BUCKET_EMPTY; - private final Supplier defaultTranslationKey = Suppliers.memoize(() -> Util.makeDescriptionId("fluid", Registries.getId(getSourceFluid(), Registry.FLUID_REGISTRY))); + private final Supplier defaultTranslationKey = Suppliers.memoize(() -> Util.makeDescriptionId("fluid", getSourceFluid().arch$registryName())); public static SimpleArchitecturyFluidAttributes ofSupplier(Supplier> flowingFluid, Supplier> sourceFluid) { return of(() -> flowingFluid.get().get(), () -> sourceFluid.get().get()); diff --git a/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java b/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java index 0b300b20..2a763ae8 100644 --- a/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java +++ b/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java @@ -19,11 +19,9 @@ package dev.architectury.core.item; -import dev.architectury.registry.registries.Registries; import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.core.BlockSource; import net.minecraft.core.Direction; -import net.minecraft.core.Registry; import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; import net.minecraft.core.dispenser.DispenseItemBehavior; import net.minecraft.nbt.CompoundTag; @@ -76,8 +74,8 @@ public class ArchitecturySpawnEggItem extends SpawnEggItem { this.entityType = Objects.requireNonNull(entityType, "entityType"); SpawnEggItem.BY_ID.remove(null); entityType.listen(type -> { - LOGGER.debug("Registering spawn egg {} for {}", Objects.toString(Registries.getId(this, Registry.ITEM_REGISTRY)), - Objects.toString(Registries.getId(type, Registry.ENTITY_TYPE_REGISTRY))); + LOGGER.debug("Registering spawn egg {} for {}", Objects.toString(this.arch$registryName()), + Objects.toString(type.arch$registryName())); SpawnEggItem.BY_ID.put(type, this); this.defaultType = type; diff --git a/common/src/main/java/dev/architectury/extensions/injected/InjectedBlockExtension.java b/common/src/main/java/dev/architectury/extensions/injected/InjectedBlockExtension.java new file mode 100644 index 00000000..70259962 --- /dev/null +++ b/common/src/main/java/dev/architectury/extensions/injected/InjectedBlockExtension.java @@ -0,0 +1,32 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 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.extensions.injected; + +import dev.architectury.registry.registries.Registries; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.world.level.block.Block; + +public interface InjectedBlockExtension extends InjectedRegistryEntryExtension { + @Override + default Holder arch$holder() { + return ((Block) this).builtInRegistryHolder(); + } +} diff --git a/common/src/main/java/dev/architectury/extensions/injected/InjectedBucketItemExtension.java b/common/src/main/java/dev/architectury/extensions/injected/InjectedBucketItemExtension.java new file mode 100644 index 00000000..52656234 --- /dev/null +++ b/common/src/main/java/dev/architectury/extensions/injected/InjectedBucketItemExtension.java @@ -0,0 +1,11 @@ +package dev.architectury.extensions.injected; + +import dev.architectury.hooks.fluid.FluidBucketHooks; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.level.material.Fluid; + +public interface InjectedBucketItemExtension { + default Fluid arch$getFluid() { + return FluidBucketHooks.getFluid((BucketItem) this); + } +} diff --git a/common/src/main/java/dev/architectury/extensions/injected/InjectedEntityTypeExtension.java b/common/src/main/java/dev/architectury/extensions/injected/InjectedEntityTypeExtension.java new file mode 100644 index 00000000..0e33e148 --- /dev/null +++ b/common/src/main/java/dev/architectury/extensions/injected/InjectedEntityTypeExtension.java @@ -0,0 +1,32 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 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.extensions.injected; + +import dev.architectury.registry.registries.Registries; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.world.entity.EntityType; + +public interface InjectedEntityTypeExtension extends InjectedRegistryEntryExtension> { + @Override + default Holder> arch$holder() { + return ((EntityType) this).builtInRegistryHolder(); + } +} diff --git a/common/src/main/java/dev/architectury/extensions/injected/InjectedFluidExtension.java b/common/src/main/java/dev/architectury/extensions/injected/InjectedFluidExtension.java new file mode 100644 index 00000000..15bb9b81 --- /dev/null +++ b/common/src/main/java/dev/architectury/extensions/injected/InjectedFluidExtension.java @@ -0,0 +1,32 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 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.extensions.injected; + +import dev.architectury.registry.registries.Registries; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.world.level.material.Fluid; + +public interface InjectedFluidExtension extends InjectedRegistryEntryExtension { + @Override + default Holder arch$holder() { + return ((Fluid) this).builtInRegistryHolder(); + } +} diff --git a/common/src/main/java/dev/architectury/extensions/injected/InjectedFoodPropertiesBuilderExtension.java b/common/src/main/java/dev/architectury/extensions/injected/InjectedFoodPropertiesBuilderExtension.java new file mode 100644 index 00000000..9a2d6cd0 --- /dev/null +++ b/common/src/main/java/dev/architectury/extensions/injected/InjectedFoodPropertiesBuilderExtension.java @@ -0,0 +1,33 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 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.extensions.injected; + +import dev.architectury.hooks.item.food.FoodPropertiesHooks; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.food.FoodProperties; + +import java.util.function.Supplier; + +public interface InjectedFoodPropertiesBuilderExtension { + default FoodProperties.Builder arch$effect(Supplier effectSupplier, float chance) { + FoodPropertiesHooks.effect((FoodProperties.Builder) this, effectSupplier, chance); + return (FoodProperties.Builder) this; + } +} diff --git a/common/src/main/java/dev/architectury/extensions/injected/InjectedGameEventExtension.java b/common/src/main/java/dev/architectury/extensions/injected/InjectedGameEventExtension.java new file mode 100644 index 00000000..89c50986 --- /dev/null +++ b/common/src/main/java/dev/architectury/extensions/injected/InjectedGameEventExtension.java @@ -0,0 +1,30 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 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.extensions.injected; + +import net.minecraft.core.Holder; +import net.minecraft.world.level.gameevent.GameEvent; + +public interface InjectedGameEventExtension extends InjectedRegistryEntryExtension { + @Override + default Holder arch$holder() { + return ((GameEvent) this).builtInRegistryHolder(); + } +} diff --git a/common/src/main/java/dev/architectury/extensions/injected/InjectedItemExtension.java b/common/src/main/java/dev/architectury/extensions/injected/InjectedItemExtension.java new file mode 100644 index 00000000..b74637b1 --- /dev/null +++ b/common/src/main/java/dev/architectury/extensions/injected/InjectedItemExtension.java @@ -0,0 +1,32 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 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.extensions.injected; + +import dev.architectury.registry.registries.Registries; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.world.item.Item; + +public interface InjectedItemExtension extends InjectedRegistryEntryExtension { + @Override + default Holder arch$holder() { + return ((Item) this).builtInRegistryHolder(); + } +} diff --git a/common/src/main/java/dev/architectury/extensions/injected/InjectedRegistryEntryExtension.java b/common/src/main/java/dev/architectury/extensions/injected/InjectedRegistryEntryExtension.java new file mode 100644 index 00000000..0a2d201d --- /dev/null +++ b/common/src/main/java/dev/architectury/extensions/injected/InjectedRegistryEntryExtension.java @@ -0,0 +1,34 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 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.extensions.injected; + +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; + +public interface InjectedRegistryEntryExtension { + Holder arch$holder(); + + @Nullable + default ResourceLocation arch$registryName() { + return arch$holder().unwrapKey().map(ResourceKey::location).orElse(null); + } +} diff --git a/common/src/main/java/dev/architectury/mixin/inject/MixinBlock.java b/common/src/main/java/dev/architectury/mixin/inject/MixinBlock.java new file mode 100644 index 00000000..341a292f --- /dev/null +++ b/common/src/main/java/dev/architectury/mixin/inject/MixinBlock.java @@ -0,0 +1,9 @@ +package dev.architectury.mixin.inject; + +import dev.architectury.extensions.injected.InjectedBlockExtension; +import net.minecraft.world.level.block.Block; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Block.class) +public class MixinBlock implements InjectedBlockExtension { +} diff --git a/common/src/main/java/dev/architectury/mixin/inject/MixinBlockEntityType.java b/common/src/main/java/dev/architectury/mixin/inject/MixinBlockEntityType.java new file mode 100644 index 00000000..f944b980 --- /dev/null +++ b/common/src/main/java/dev/architectury/mixin/inject/MixinBlockEntityType.java @@ -0,0 +1,9 @@ +package dev.architectury.mixin.inject; + +import dev.architectury.extensions.injected.InjectedGameEventExtension; +import net.minecraft.world.level.block.entity.BlockEntityType; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(BlockEntityType.class) +public class MixinBlockEntityType implements InjectedGameEventExtension { +} diff --git a/common/src/main/java/dev/architectury/mixin/inject/MixinBucketItem.java b/common/src/main/java/dev/architectury/mixin/inject/MixinBucketItem.java new file mode 100644 index 00000000..fba02eea --- /dev/null +++ b/common/src/main/java/dev/architectury/mixin/inject/MixinBucketItem.java @@ -0,0 +1,9 @@ +package dev.architectury.mixin.inject; + +import dev.architectury.extensions.injected.InjectedBucketItemExtension; +import net.minecraft.world.item.BucketItem; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(BucketItem.class) +public class MixinBucketItem implements InjectedBucketItemExtension { +} diff --git a/common/src/main/java/dev/architectury/mixin/inject/MixinEntityType.java b/common/src/main/java/dev/architectury/mixin/inject/MixinEntityType.java new file mode 100644 index 00000000..b4536433 --- /dev/null +++ b/common/src/main/java/dev/architectury/mixin/inject/MixinEntityType.java @@ -0,0 +1,9 @@ +package dev.architectury.mixin.inject; + +import dev.architectury.extensions.injected.InjectedEntityTypeExtension; +import net.minecraft.world.entity.EntityType; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(EntityType.class) +public class MixinEntityType implements InjectedEntityTypeExtension { +} diff --git a/common/src/main/java/dev/architectury/mixin/inject/MixinFluid.java b/common/src/main/java/dev/architectury/mixin/inject/MixinFluid.java new file mode 100644 index 00000000..4782fb3a --- /dev/null +++ b/common/src/main/java/dev/architectury/mixin/inject/MixinFluid.java @@ -0,0 +1,9 @@ +package dev.architectury.mixin.inject; + +import dev.architectury.extensions.injected.InjectedFluidExtension; +import net.minecraft.world.level.material.Fluid; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Fluid.class) +public class MixinFluid implements InjectedFluidExtension { +} diff --git a/common/src/main/java/dev/architectury/mixin/inject/MixinItem.java b/common/src/main/java/dev/architectury/mixin/inject/MixinItem.java new file mode 100644 index 00000000..1ef8b53a --- /dev/null +++ b/common/src/main/java/dev/architectury/mixin/inject/MixinItem.java @@ -0,0 +1,9 @@ +package dev.architectury.mixin.inject; + +import dev.architectury.extensions.injected.InjectedItemExtension; +import net.minecraft.world.item.Item; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(Item.class) +public class MixinItem implements InjectedItemExtension { +} diff --git a/common/src/main/resources/architectury-common.mixins.json b/common/src/main/resources/architectury-common.mixins.json index 989561ab..a301ee3a 100644 --- a/common/src/main/resources/architectury-common.mixins.json +++ b/common/src/main/resources/architectury-common.mixins.json @@ -6,6 +6,12 @@ "client": [ ], "mixins": [ + "inject.MixinBlock", + "inject.MixinBlockEntityType", + "inject.MixinBucketItem", + "inject.MixinEntityType", + "inject.MixinFluid", + "inject.MixinItem", "MixinLightningBolt" ], "injectors": { diff --git a/common/src/main/resources/architectury.common.json b/common/src/main/resources/architectury.common.json index 30ff27f0..1d89a440 100644 --- a/common/src/main/resources/architectury.common.json +++ b/common/src/main/resources/architectury.common.json @@ -1,3 +1,26 @@ { - "accessWidener": "architectury.accessWidener" + "accessWidener": "architectury.accessWidener", + "injected_interfaces": { + "net/minecraft/class_1792": [ + "dev/architectury/extensions/injected/InjectedItemExtension" + ], + "net/minecraft/class_2248": [ + "dev/architectury/extensions/injected/InjectedBlockExtension" + ], + "net/minecraft/class_3611": [ + "dev/architectury/extensions/injected/InjectedFluidExtension" + ], + "net/minecraft/class_1299": [ + "dev/architectury/extensions/injected/InjectedEntityTypeExtension" + ], + "net/minecraft/class_2591": [ + "dev/architectury/extensions/injected/InjectedBlockEntityTypeExtension" + ], + "net/minecraft/class_1755": [ + "dev/architectury/extensions/injected/InjectedBucketItemExtension" + ], + "net/minecraft/class_4174$class_4175": [ + "dev/architectury/extensions/injected/InjectedFoodPropertiesBuilderExtension" + ] + } } \ No newline at end of file diff --git a/fabric/src/main/java/dev/architectury/hooks/item/tool/fabric/HoeItemHooksImpl.java b/fabric/src/main/java/dev/architectury/hooks/item/tool/fabric/HoeItemHooksImpl.java index b1562249..2263be17 100644 --- a/fabric/src/main/java/dev/architectury/hooks/item/tool/fabric/HoeItemHooksImpl.java +++ b/fabric/src/main/java/dev/architectury/hooks/item/tool/fabric/HoeItemHooksImpl.java @@ -1,3 +1,22 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 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.hooks.item.tool.fabric; import com.google.common.collect.ImmutableMap; diff --git a/forge/src/main/java/dev/architectury/hooks/item/tool/forge/HoeItemHooksImpl.java b/forge/src/main/java/dev/architectury/hooks/item/tool/forge/HoeItemHooksImpl.java index 7b25ca60..07329baf 100644 --- a/forge/src/main/java/dev/architectury/hooks/item/tool/forge/HoeItemHooksImpl.java +++ b/forge/src/main/java/dev/architectury/hooks/item/tool/forge/HoeItemHooksImpl.java @@ -1,3 +1,22 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 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.hooks.item.tool.forge; import net.minecraft.world.item.context.UseOnContext; From 48b2494c25a8587d18577a2326cb705f6f443d16 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 7 Aug 2022 16:02:21 +0200 Subject: [PATCH 3/5] Bump minor version for release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 17f53994..f227a4f9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ artifact_type=release archives_base_name=architectury archives_base_name_snapshot=architectury-snapshot -base_version=4.7 +base_version=4.8 maven_group=dev.architectury fabric_loader_version=0.13.3 From 4c280e7d8cbb26c22fa185e444f6804f09c7cc5f Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 7 Aug 2022 21:58:32 +0200 Subject: [PATCH 4/5] Fix toString on RegistryEntryId (used in logging), make it a record --- .../registries/forge/RegistriesImpl.java | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java b/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java index 493dcf9c..cac33836 100644 --- a/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java +++ b/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java @@ -112,26 +112,10 @@ public class RegistriesImpl { } } - public static class RegistryEntryId { - private final ResourceKey registryKey; - private final ResourceLocation id; - - public RegistryEntryId(ResourceKey registryKey, ResourceLocation id) { - this.registryKey = registryKey; - this.id = id; - } - + public record RegistryEntryId(ResourceKey registryKey, ResourceLocation id) { @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof RegistryEntryId)) return false; - RegistryEntryId that = (RegistryEntryId) o; - return java.util.Objects.equals(registryKey, that.registryKey) && java.util.Objects.equals(id, that.id); - } - - @Override - public int hashCode() { - return java.util.Objects.hash(registryKey, id); + public String toString() { + return "Registry Entry [%s / %s]".formatted(registryKey.location(), id); } } From d077b86894ebefea51bb8d87bb8252153facc551 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 8 Aug 2022 18:04:50 +0800 Subject: [PATCH 5/5] Fix #313 --- .../dev/architectury/core/item/ArchitecturySpawnEggItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java b/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java index 2a763ae8..8756f72b 100644 --- a/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java +++ b/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java @@ -74,7 +74,7 @@ public class ArchitecturySpawnEggItem extends SpawnEggItem { this.entityType = Objects.requireNonNull(entityType, "entityType"); SpawnEggItem.BY_ID.remove(null); entityType.listen(type -> { - LOGGER.debug("Registering spawn egg {} for {}", Objects.toString(this.arch$registryName()), + LOGGER.debug("Registering spawn egg {} for {}", toString(), Objects.toString(type.arch$registryName())); SpawnEggItem.BY_ID.put(type, this); this.defaultType = type;