From 7f1cb1b36ecd809ea9d33aab1350db7b01ba430c Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 30 Apr 2024 15:16:06 -0700 Subject: [PATCH 01/19] Added GatherItemComponentsEvent.java --- .../net/minecraft/world/item/Item.java.patch | 25 +++++++++++++++- .../event/ForgeEventFactory.java | 5 ++++ .../event/GatherItemComponentsEvent.java | 30 +++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java diff --git a/patches/minecraft/net/minecraft/world/item/Item.java.patch b/patches/minecraft/net/minecraft/world/item/Item.java.patch index 6a596d8c56c..0125868abf1 100644 --- a/patches/minecraft/net/minecraft/world/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/world/item/Item.java.patch @@ -23,7 +23,30 @@ } @Deprecated -@@ -111,6 +_,7 @@ +@@ -100,17 +_,28 @@ + return this.builtInRegistryHolder; + } + ++ @Nullable ++ private DataComponentMap builtComponents = null; ++ + public DataComponentMap components() { +- return this.components; ++ if (builtComponents == null) { ++ builtComponents = DataComponentMap.builder() ++ .addAll(components) ++ .addAll(net.minecraftforge.event.ForgeEventFactory.gatherItemComponents(this).getDataComponentMap()) ++ .build(); ++ } ++ ++ return builtComponents; + } + + public int getDefaultMaxStackSize() { +- return this.components.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); ++ return builtComponents == null ? this.components.getOrDefault(DataComponents.MAX_STACK_SIZE, 1) : this.builtComponents.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); + } + public void onUseTick(Level p_41428_, LivingEntity p_41429_, ItemStack p_41430_, int p_41431_) { } diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 2c920fbe867..264709716cd 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -13,6 +13,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; +import net.minecraft.world.item.Item; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -1053,4 +1054,8 @@ public static NoteBlockEvent.Play onNotePlay(Level world, BlockPos pos, BlockSta public static AnvilRepairEvent onAnvilRepair(Player player, @NotNull ItemStack output, @NotNull ItemStack left, @NotNull ItemStack right) { return fire(new AnvilRepairEvent(player, left, right, output)); } + + public static GatherItemComponentsEvent gatherItemComponents(Item item) { + return fire(new GatherItemComponentsEvent(item)); + } } diff --git a/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java b/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java new file mode 100644 index 00000000000..db8265aec64 --- /dev/null +++ b/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java @@ -0,0 +1,30 @@ +package net.minecraftforge.event; + +import net.minecraft.core.component.DataComponentMap; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.world.item.Item; +import net.minecraftforge.eventbus.api.Event; + +import javax.annotation.Nullable; + +public class GatherItemComponentsEvent extends Event +{ + private final Item item; + private final DataComponentMap.Builder components = DataComponentMap.builder(); + + public GatherItemComponentsEvent(Item item) { + this.item = item; + } + + public void register(DataComponentType componentType, @Nullable T value) { + components.set(componentType, value); + } + + public DataComponentMap getDataComponentMap() { + return components.build(); + } + + public Item getItem() { + return item; + } +} From afe9dc399f12cda94cc11a5434d56e864d2a4889 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 30 Apr 2024 18:19:00 -0700 Subject: [PATCH 02/19] Cleaned up the code for the patch file, moving it into ForgeHooks.java. --- .../net/minecraft/world/item/Item.java.patch | 12 ++++-------- .../net/minecraftforge/common/ForgeHooks.java | 15 +++++++++++++++ .../minecraftforge/event/ForgeEventFactory.java | 5 ----- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/patches/minecraft/net/minecraft/world/item/Item.java.patch b/patches/minecraft/net/minecraft/world/item/Item.java.patch index 0125868abf1..7c7aed017f6 100644 --- a/patches/minecraft/net/minecraft/world/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/world/item/Item.java.patch @@ -23,7 +23,7 @@ } @Deprecated -@@ -100,17 +_,28 @@ +@@ -100,17 +_,25 @@ return this.builtInRegistryHolder; } @@ -33,18 +33,14 @@ public DataComponentMap components() { - return this.components; + if (builtComponents == null) { -+ builtComponents = DataComponentMap.builder() -+ .addAll(components) -+ .addAll(net.minecraftforge.event.ForgeEventFactory.gatherItemComponents(this).getDataComponentMap()) -+ .build(); ++ builtComponents = net.minecraftforge.common.ForgeHooks.gatherItemComponents(this, components); + } -+ + return builtComponents; } public int getDefaultMaxStackSize() { -- return this.components.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); -+ return builtComponents == null ? this.components.getOrDefault(DataComponents.MAX_STACK_SIZE, 1) : this.builtComponents.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); ++ if (builtComponents != null) return this.builtComponents.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); + return this.components.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); } public void onUseTick(Level p_41428_, LivingEntity p_41429_, ItemStack p_41430_, int p_41431_) { diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index aa51c196a7e..0566ad59c6d 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -49,6 +49,7 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.HolderSet; import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponents; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.Connection; @@ -125,6 +126,7 @@ import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.event.GatherItemComponentsEvent; import net.minecraftforge.event.GrindstoneEvent; import net.minecraftforge.event.ModMismatchEvent; import net.minecraftforge.event.ServerChatEvent; @@ -1261,4 +1263,17 @@ public static StreamCodec ingredientStreamC } ); } + + public static GatherItemComponentsEvent gatherItemComponents(Item item) { + var event = new GatherItemComponentsEvent(item); + MinecraftForge.EVENT_BUS.post(event); + return event; + } + + public static DataComponentMap gatherItemComponents(Item item, DataComponentMap dataComponents) { + return DataComponentMap.builder() + .addAll(dataComponents) + .addAll(gatherItemComponents(item).getDataComponentMap()) + .build(); + } } \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 264709716cd..2c920fbe867 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -13,7 +13,6 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; -import net.minecraft.world.item.Item; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -1054,8 +1053,4 @@ public static NoteBlockEvent.Play onNotePlay(Level world, BlockPos pos, BlockSta public static AnvilRepairEvent onAnvilRepair(Player player, @NotNull ItemStack output, @NotNull ItemStack left, @NotNull ItemStack right) { return fire(new AnvilRepairEvent(player, left, right, output)); } - - public static GatherItemComponentsEvent gatherItemComponents(Item item) { - return fire(new GatherItemComponentsEvent(item)); - } } From bfc5640fe05db3357ebb0847ccb71376206f50bd Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Wed, 1 May 2024 14:33:07 -0700 Subject: [PATCH 03/19] Cleaned up the Hooks, moved everything where it belongs. Expanded on GatherComponentsEvent.java to be an abstract class. --- .../net/minecraftforge/common/ForgeHooks.java | 10 +------ .../event/ForgeEventFactory.java | 6 ++++- ...sEvent.java => GatherComponentsEvent.java} | 27 ++++++++++++------- 3 files changed, 24 insertions(+), 19 deletions(-) rename src/main/java/net/minecraftforge/event/{GatherItemComponentsEvent.java => GatherComponentsEvent.java} (55%) diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 0566ad59c6d..23192b8288f 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -115,7 +115,6 @@ import net.minecraft.world.level.biome.MobSpawnSettings; import net.minecraftforge.common.crafting.conditions.ConditionCodec; import net.minecraftforge.common.crafting.conditions.ICondition; -import net.minecraftforge.common.crafting.conditions.ICondition.IContext; import net.minecraftforge.common.crafting.ingredients.IIngredientSerializer; import net.minecraftforge.common.util.BlockSnapshot; import net.minecraftforge.common.util.BrainBuilder; @@ -126,7 +125,6 @@ import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.GatherItemComponentsEvent; import net.minecraftforge.event.GrindstoneEvent; import net.minecraftforge.event.ModMismatchEvent; import net.minecraftforge.event.ServerChatEvent; @@ -1264,16 +1262,10 @@ public static StreamCodec ingredientStreamC ); } - public static GatherItemComponentsEvent gatherItemComponents(Item item) { - var event = new GatherItemComponentsEvent(item); - MinecraftForge.EVENT_BUS.post(event); - return event; - } - public static DataComponentMap gatherItemComponents(Item item, DataComponentMap dataComponents) { return DataComponentMap.builder() .addAll(dataComponents) - .addAll(gatherItemComponents(item).getDataComponentMap()) + .addAll(ForgeEventFactory.gatherItemComponents(item).getDataComponentMap()) .build(); } } \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 2c920fbe867..b3646ffb850 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -13,6 +13,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; +import net.minecraft.world.item.Item; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -152,7 +153,6 @@ import net.minecraftforge.event.entity.living.MobSpawnEvent.PositionCheck; import net.minecraftforge.event.entity.living.MobSpawnEvent.SpawnPlacementCheck; import net.minecraftforge.event.entity.living.ShieldBlockEvent; -import net.minecraftforge.event.entity.living.LivingChangeTargetEvent.ILivingTargetType; import net.minecraftforge.event.entity.living.ZombieEvent.SummonAidEvent; import net.minecraftforge.event.entity.player.AdvancementEvent.AdvancementEarnEvent; import net.minecraftforge.event.entity.player.AdvancementEvent.AdvancementProgressEvent; @@ -1053,4 +1053,8 @@ public static NoteBlockEvent.Play onNotePlay(Level world, BlockPos pos, BlockSta public static AnvilRepairEvent onAnvilRepair(Player player, @NotNull ItemStack output, @NotNull ItemStack left, @NotNull ItemStack right) { return fire(new AnvilRepairEvent(player, left, right, output)); } + + public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponents(Item item) { + return fire(new GatherComponentsEvent.GatherItemComponentsEvent(item)); + } } diff --git a/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java similarity index 55% rename from src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java rename to src/main/java/net/minecraftforge/event/GatherComponentsEvent.java index db8265aec64..d631789f9ef 100644 --- a/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java +++ b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java @@ -4,27 +4,36 @@ import net.minecraft.core.component.DataComponentType; import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.Event; +import org.jetbrains.annotations.ApiStatus; import javax.annotation.Nullable; -public class GatherItemComponentsEvent extends Event -{ - private final Item item; - private final DataComponentMap.Builder components = DataComponentMap.builder(); +/** + Where all the events fore Gathering Components will exist. + */ - public GatherItemComponentsEvent(Item item) { - this.item = item; - } +public abstract class GatherComponentsEvent extends Event { + private final DataComponentMap.Builder components = DataComponentMap.builder(); public void register(DataComponentType componentType, @Nullable T value) { components.set(componentType, value); } + @ApiStatus.Internal public DataComponentMap getDataComponentMap() { return components.build(); } - public Item getItem() { - return item; + + public static class GatherItemComponentsEvent extends GatherComponentsEvent { + private final Item item; + + public GatherItemComponentsEvent(Item item) { + this.item = item; + } + + public Item getItem() { + return item; + } } } From 8a5fe1f6053b80fb84201f9fbccd15b319880017 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Wed, 1 May 2024 14:42:46 -0700 Subject: [PATCH 04/19] Fixed ForgeEventFactory.java --- .../java/net/minecraftforge/event/ForgeEventFactory.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 7ed208dc22f..6c1107a3498 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -13,6 +13,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; +import net.minecraft.world.item.Item; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -1060,4 +1061,8 @@ public static AnvilRepairEvent onAnvilRepair(Player player, @NotNull ItemStack o public static void onPlayerTradeWithVillager(Player player, MerchantOffer offer, AbstractVillager villager) { post(new TradeWithVillagerEvent(player, offer, villager)); } + + public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponentsEvent(Item item) { + return fire(new GatherComponentsEvent.GatherItemComponentsEvent(item)); + } } From cedf3460d5c282bfa69917433ef385ce5b506499 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 7 May 2024 20:23:56 -0700 Subject: [PATCH 05/19] Cleaned up the Event, adding a DataComponentsMap getter for the event, and passing it thru. --- src/main/java/net/minecraftforge/common/ForgeHooks.java | 2 +- .../java/net/minecraftforge/event/ForgeEventFactory.java | 5 +++-- .../net/minecraftforge/event/GatherComponentsEvent.java | 8 +++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 23192b8288f..c3b89b47422 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -1265,7 +1265,7 @@ public static StreamCodec ingredientStreamC public static DataComponentMap gatherItemComponents(Item item, DataComponentMap dataComponents) { return DataComponentMap.builder() .addAll(dataComponents) - .addAll(ForgeEventFactory.gatherItemComponents(item).getDataComponentMap()) + .addAll(ForgeEventFactory.gatherItemComponentsEvent(item, dataComponents).getDataComponentMap()) .build(); } } \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 6c1107a3498..de4c116097f 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -13,6 +13,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.world.item.Item; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -1062,7 +1063,7 @@ public static void onPlayerTradeWithVillager(Player player, MerchantOffer offer, post(new TradeWithVillagerEvent(player, offer, villager)); } - public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponentsEvent(Item item) { - return fire(new GatherComponentsEvent.GatherItemComponentsEvent(item)); + public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponentsEvent(Item item, DataComponentMap dataComponents) { + return fire(new GatherComponentsEvent.GatherItemComponentsEvent(item, dataComponents)); } } diff --git a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java index d631789f9ef..54c6ffe5dd9 100644 --- a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java +++ b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java @@ -27,13 +27,19 @@ public DataComponentMap getDataComponentMap() { public static class GatherItemComponentsEvent extends GatherComponentsEvent { private final Item item; + private final DataComponentMap dataComponents; - public GatherItemComponentsEvent(Item item) { + public GatherItemComponentsEvent(Item item, DataComponentMap dataComponents) { this.item = item; + this.dataComponents = dataComponents; } public Item getItem() { return item; } + + public DataComponentMap getDataComponentMap() { + return dataComponents; + } } } From 3ce878da594828638403d11b52645ad32fc6f2bc Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 7 May 2024 20:26:42 -0700 Subject: [PATCH 06/19] Cleaned up ForgeHooks.gatherItemComponents to use DataComponentsMap.composite --- src/main/java/net/minecraftforge/common/ForgeHooks.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index c3b89b47422..8c1706ebc3c 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -1263,9 +1263,6 @@ public static StreamCodec ingredientStreamC } public static DataComponentMap gatherItemComponents(Item item, DataComponentMap dataComponents) { - return DataComponentMap.builder() - .addAll(dataComponents) - .addAll(ForgeEventFactory.gatherItemComponentsEvent(item, dataComponents).getDataComponentMap()) - .build(); + return DataComponentMap.composite(dataComponents, ForgeEventFactory.gatherItemComponentsEvent(item, dataComponents).getDataComponentMap()); } } \ No newline at end of file From 362f6a6b0cba0199e54424aac6c6dbcb47c91a86 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 30 Apr 2024 15:16:06 -0700 Subject: [PATCH 07/19] Added GatherItemComponentsEvent.java --- .../net/minecraft/world/item/Item.java.patch | 21 +------------ .../event/ForgeEventFactory.java | 6 ---- .../event/GatherItemComponentsEvent.java | 30 +++++++++++++++++++ 3 files changed, 31 insertions(+), 26 deletions(-) create mode 100644 src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java diff --git a/patches/minecraft/net/minecraft/world/item/Item.java.patch b/patches/minecraft/net/minecraft/world/item/Item.java.patch index 7c7aed017f6..6a596d8c56c 100644 --- a/patches/minecraft/net/minecraft/world/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/world/item/Item.java.patch @@ -23,26 +23,7 @@ } @Deprecated -@@ -100,17 +_,25 @@ - return this.builtInRegistryHolder; - } - -+ @Nullable -+ private DataComponentMap builtComponents = null; -+ - public DataComponentMap components() { -- return this.components; -+ if (builtComponents == null) { -+ builtComponents = net.minecraftforge.common.ForgeHooks.gatherItemComponents(this, components); -+ } -+ return builtComponents; - } - - public int getDefaultMaxStackSize() { -+ if (builtComponents != null) return this.builtComponents.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); - return this.components.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); - } - +@@ -111,6 +_,7 @@ public void onUseTick(Level p_41428_, LivingEntity p_41429_, ItemStack p_41430_, int p_41431_) { } diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index de4c116097f..7ed208dc22f 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -13,8 +13,6 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; -import net.minecraft.core.component.DataComponentMap; -import net.minecraft.world.item.Item; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -1062,8 +1060,4 @@ public static AnvilRepairEvent onAnvilRepair(Player player, @NotNull ItemStack o public static void onPlayerTradeWithVillager(Player player, MerchantOffer offer, AbstractVillager villager) { post(new TradeWithVillagerEvent(player, offer, villager)); } - - public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponentsEvent(Item item, DataComponentMap dataComponents) { - return fire(new GatherComponentsEvent.GatherItemComponentsEvent(item, dataComponents)); - } } diff --git a/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java b/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java new file mode 100644 index 00000000000..db8265aec64 --- /dev/null +++ b/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java @@ -0,0 +1,30 @@ +package net.minecraftforge.event; + +import net.minecraft.core.component.DataComponentMap; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.world.item.Item; +import net.minecraftforge.eventbus.api.Event; + +import javax.annotation.Nullable; + +public class GatherItemComponentsEvent extends Event +{ + private final Item item; + private final DataComponentMap.Builder components = DataComponentMap.builder(); + + public GatherItemComponentsEvent(Item item) { + this.item = item; + } + + public void register(DataComponentType componentType, @Nullable T value) { + components.set(componentType, value); + } + + public DataComponentMap getDataComponentMap() { + return components.build(); + } + + public Item getItem() { + return item; + } +} From 055ae7bef28bc4bc9b12527a4abf64af5d804efb Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 30 Apr 2024 18:19:00 -0700 Subject: [PATCH 08/19] Cleaned up the code for the patch file, moving it into ForgeHooks.java. --- .../net/minecraft/world/item/Item.java.patch | 25 ++++++++++++++++++- .../net/minecraftforge/common/ForgeHooks.java | 6 +---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/patches/minecraft/net/minecraft/world/item/Item.java.patch b/patches/minecraft/net/minecraft/world/item/Item.java.patch index 6a596d8c56c..0125868abf1 100644 --- a/patches/minecraft/net/minecraft/world/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/world/item/Item.java.patch @@ -23,7 +23,30 @@ } @Deprecated -@@ -111,6 +_,7 @@ +@@ -100,17 +_,28 @@ + return this.builtInRegistryHolder; + } + ++ @Nullable ++ private DataComponentMap builtComponents = null; ++ + public DataComponentMap components() { +- return this.components; ++ if (builtComponents == null) { ++ builtComponents = DataComponentMap.builder() ++ .addAll(components) ++ .addAll(net.minecraftforge.event.ForgeEventFactory.gatherItemComponents(this).getDataComponentMap()) ++ .build(); ++ } ++ ++ return builtComponents; + } + + public int getDefaultMaxStackSize() { +- return this.components.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); ++ return builtComponents == null ? this.components.getOrDefault(DataComponents.MAX_STACK_SIZE, 1) : this.builtComponents.getOrDefault(DataComponents.MAX_STACK_SIZE, 1); + } + public void onUseTick(Level p_41428_, LivingEntity p_41429_, ItemStack p_41430_, int p_41431_) { } diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 8c1706ebc3c..aa51c196a7e 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -49,7 +49,6 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.HolderSet; import net.minecraft.core.NonNullList; -import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponents; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.Connection; @@ -115,6 +114,7 @@ import net.minecraft.world.level.biome.MobSpawnSettings; import net.minecraftforge.common.crafting.conditions.ConditionCodec; import net.minecraftforge.common.crafting.conditions.ICondition; +import net.minecraftforge.common.crafting.conditions.ICondition.IContext; import net.minecraftforge.common.crafting.ingredients.IIngredientSerializer; import net.minecraftforge.common.util.BlockSnapshot; import net.minecraftforge.common.util.BrainBuilder; @@ -1261,8 +1261,4 @@ public static StreamCodec ingredientStreamC } ); } - - public static DataComponentMap gatherItemComponents(Item item, DataComponentMap dataComponents) { - return DataComponentMap.composite(dataComponents, ForgeEventFactory.gatherItemComponentsEvent(item, dataComponents).getDataComponentMap()); - } } \ No newline at end of file From 66079bd3f421c38de93ab0812f19085aa0ca9110 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Wed, 1 May 2024 14:42:46 -0700 Subject: [PATCH 09/19] Fixed ForgeEventFactory.java --- src/main/java/net/minecraftforge/event/ForgeEventFactory.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 7ed208dc22f..ab5ce5e8f43 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -1060,4 +1060,8 @@ public static AnvilRepairEvent onAnvilRepair(Player player, @NotNull ItemStack o public static void onPlayerTradeWithVillager(Player player, MerchantOffer offer, AbstractVillager villager) { post(new TradeWithVillagerEvent(player, offer, villager)); } + + public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponentsEvent(Item item) { + return fire(new GatherComponentsEvent.GatherItemComponentsEvent(item)); + } } From 6ff478cb9e0cecf3e230ee11f8d9503fca37acbd Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 7 May 2024 20:23:56 -0700 Subject: [PATCH 10/19] Cleaned up the Event, adding a DataComponentsMap getter for the event, and passing it thru. --- src/main/java/net/minecraftforge/common/ForgeHooks.java | 9 ++++++++- .../java/net/minecraftforge/event/ForgeEventFactory.java | 9 +++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index aa51c196a7e..23192b8288f 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -49,6 +49,7 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.HolderSet; import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponents; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.Connection; @@ -114,7 +115,6 @@ import net.minecraft.world.level.biome.MobSpawnSettings; import net.minecraftforge.common.crafting.conditions.ConditionCodec; import net.minecraftforge.common.crafting.conditions.ICondition; -import net.minecraftforge.common.crafting.conditions.ICondition.IContext; import net.minecraftforge.common.crafting.ingredients.IIngredientSerializer; import net.minecraftforge.common.util.BlockSnapshot; import net.minecraftforge.common.util.BrainBuilder; @@ -1261,4 +1261,11 @@ public static StreamCodec ingredientStreamC } ); } + + public static DataComponentMap gatherItemComponents(Item item, DataComponentMap dataComponents) { + return DataComponentMap.builder() + .addAll(dataComponents) + .addAll(ForgeEventFactory.gatherItemComponents(item).getDataComponentMap()) + .build(); + } } \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index ab5ce5e8f43..d7c23b1e908 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -13,6 +13,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; +import net.minecraft.world.item.Item; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -74,7 +75,6 @@ import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.monster.Zombie; -import net.minecraft.world.entity.npc.AbstractVillager; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.FishingHook; import net.minecraft.world.entity.projectile.Projectile; @@ -88,7 +88,6 @@ import net.minecraft.world.item.alchemy.PotionBrewing.Builder; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.item.crafting.RecipeType; -import net.minecraft.world.item.trading.MerchantOffer; import net.minecraft.world.level.BaseSpawner; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Explosion; @@ -154,7 +153,6 @@ import net.minecraftforge.event.entity.living.MobSpawnEvent.PositionCheck; import net.minecraftforge.event.entity.living.MobSpawnEvent.SpawnPlacementCheck; import net.minecraftforge.event.entity.living.ShieldBlockEvent; -import net.minecraftforge.event.entity.living.LivingChangeTargetEvent.ILivingTargetType; import net.minecraftforge.event.entity.living.ZombieEvent.SummonAidEvent; import net.minecraftforge.event.entity.player.AdvancementEvent.AdvancementEarnEvent; import net.minecraftforge.event.entity.player.AdvancementEvent.AdvancementProgressEvent; @@ -180,7 +178,6 @@ import net.minecraftforge.event.entity.player.PlayerXpEvent; import net.minecraftforge.event.entity.player.SleepingLocationCheckEvent; import net.minecraftforge.event.entity.player.SleepingTimeCheckEvent; -import net.minecraftforge.event.entity.player.TradeWithVillagerEvent; import net.minecraftforge.event.furnace.FurnaceFuelBurnTimeEvent; import net.minecraftforge.event.level.AlterGroundEvent; import net.minecraftforge.event.level.BlockEvent; @@ -1057,8 +1054,8 @@ public static AnvilRepairEvent onAnvilRepair(Player player, @NotNull ItemStack o return fire(new AnvilRepairEvent(player, left, right, output)); } - public static void onPlayerTradeWithVillager(Player player, MerchantOffer offer, AbstractVillager villager) { - post(new TradeWithVillagerEvent(player, offer, villager)); + public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponents(Item item) { + return fire(new GatherComponentsEvent.GatherItemComponentsEvent(item)); } public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponentsEvent(Item item) { From d81945ee7af869878a8e2bfe5fc181ff1c716262 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 14 May 2024 11:42:58 -0700 Subject: [PATCH 11/19] Updated --- .../java/net/minecraftforge/event/ForgeEventFactory.java | 5 +++-- .../java/net/minecraftforge/event/GatherComponentsEvent.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index d7c23b1e908..cbd175f036a 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -13,6 +13,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.world.item.Item; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -1058,7 +1059,7 @@ public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponen return fire(new GatherComponentsEvent.GatherItemComponentsEvent(item)); } - public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponentsEvent(Item item) { - return fire(new GatherComponentsEvent.GatherItemComponentsEvent(item)); + public static GatherComponentsEvent.GatherItemComponentsEvent gatherItemComponentsEvent(Item item, DataComponentMap dataComponents) { + return fire(new GatherComponentsEvent.GatherItemComponentsEvent(item, dataComponents)); } } diff --git a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java index 54c6ffe5dd9..2aa163b5d66 100644 --- a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java +++ b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java @@ -25,11 +25,11 @@ public DataComponentMap getDataComponentMap() { } - public static class GatherItemComponentsEvent extends GatherComponentsEvent { + public static class ItemEvent extends GatherComponentsEvent { private final Item item; private final DataComponentMap dataComponents; - public GatherItemComponentsEvent(Item item, DataComponentMap dataComponents) { + public ItemEvent(Item item, DataComponentMap dataComponents) { this.item = item; this.dataComponents = dataComponents; } From 08c634c664aa3e70140c0eb3c265a658adef077e Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 14 May 2024 11:55:55 -0700 Subject: [PATCH 12/19] Updated --- .../net/minecraft/world/item/Item.java.patch | 7 ++--- .../net/minecraftforge/common/ForgeHooks.java | 6 ++++ .../event/ForgeEventFactory.java | 6 ++++ .../event/GatherItemComponentsEvent.java | 30 ------------------- 4 files changed, 14 insertions(+), 35 deletions(-) delete mode 100644 src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java diff --git a/patches/minecraft/net/minecraft/world/item/Item.java.patch b/patches/minecraft/net/minecraft/world/item/Item.java.patch index 0125868abf1..16004b1a8d7 100644 --- a/patches/minecraft/net/minecraft/world/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/world/item/Item.java.patch @@ -23,7 +23,7 @@ } @Deprecated -@@ -100,17 +_,28 @@ +@@ -100,17 +_,25 @@ return this.builtInRegistryHolder; } @@ -33,10 +33,7 @@ public DataComponentMap components() { - return this.components; + if (builtComponents == null) { -+ builtComponents = DataComponentMap.builder() -+ .addAll(components) -+ .addAll(net.minecraftforge.event.ForgeEventFactory.gatherItemComponents(this).getDataComponentMap()) -+ .build(); ++ builtComponents = net.minecraftforge.common.ForgeHooks.gatherItemComponents(this, components); + } + + return builtComponents; diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index f849cc11f2d..7be934c8a4a 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -49,6 +49,7 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.HolderSet; import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponents; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.Connection; @@ -130,6 +131,7 @@ import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.event.GatherComponentsEvent; import net.minecraftforge.event.GrindstoneEvent; import net.minecraftforge.event.ModMismatchEvent; import net.minecraftforge.event.ServerChatEvent; @@ -1299,4 +1301,8 @@ public static DyeColor getDyeColorFromItemStack(ItemStack stack) { return null; } + + public static DataComponentMap gatherItemComponents(Item item, DataComponentMap dataComponents) { + return DataComponentMap.composite(dataComponents, ForgeEventFactory.gatherItemComponentsEvent(item, dataComponents).getDataComponentMap()); + } } \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 350660613c6..494aff27835 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -14,6 +14,8 @@ import java.util.function.BooleanSupplier; import java.util.function.Consumer; +import net.minecraft.core.component.DataComponentMap; +import net.minecraft.world.item.Item; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.Cancelable; import net.minecraftforge.eventbus.api.Event; @@ -1088,4 +1090,8 @@ public static AnvilRepairEvent onAnvilRepair(Player player, @NotNull ItemStack o public static void onPlayerTradeWithVillager(Player player, MerchantOffer offer, AbstractVillager villager) { post(new TradeWithVillagerEvent(player, offer, villager)); } + + public static GatherComponentsEvent.ItemEvent gatherItemComponentsEvent(Item item, DataComponentMap dataComponents) { + return fire(new GatherComponentsEvent.ItemEvent(item, dataComponents)); + } } diff --git a/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java b/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java deleted file mode 100644 index db8265aec64..00000000000 --- a/src/main/java/net/minecraftforge/event/GatherItemComponentsEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.minecraftforge.event; - -import net.minecraft.core.component.DataComponentMap; -import net.minecraft.core.component.DataComponentType; -import net.minecraft.world.item.Item; -import net.minecraftforge.eventbus.api.Event; - -import javax.annotation.Nullable; - -public class GatherItemComponentsEvent extends Event -{ - private final Item item; - private final DataComponentMap.Builder components = DataComponentMap.builder(); - - public GatherItemComponentsEvent(Item item) { - this.item = item; - } - - public void register(DataComponentType componentType, @Nullable T value) { - components.set(componentType, value); - } - - public DataComponentMap getDataComponentMap() { - return components.build(); - } - - public Item getItem() { - return item; - } -} From 51393b5d692578586846bb9d7e9eda1b37e5d3da Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 14 May 2024 12:01:12 -0700 Subject: [PATCH 13/19] Changed event from .ItemEvent to .Item --- .../java/net/minecraftforge/event/ForgeEventFactory.java | 4 ++-- .../net/minecraftforge/event/GatherComponentsEvent.java | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 494aff27835..c019382a1b6 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -1091,7 +1091,7 @@ public static void onPlayerTradeWithVillager(Player player, MerchantOffer offer, post(new TradeWithVillagerEvent(player, offer, villager)); } - public static GatherComponentsEvent.ItemEvent gatherItemComponentsEvent(Item item, DataComponentMap dataComponents) { - return fire(new GatherComponentsEvent.ItemEvent(item, dataComponents)); + public static GatherComponentsEvent.Item gatherItemComponentsEvent(Item item, DataComponentMap dataComponents) { + return fire(new GatherComponentsEvent.Item(item, dataComponents)); } } diff --git a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java index 2aa163b5d66..1b734296cc3 100644 --- a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java +++ b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java @@ -2,7 +2,6 @@ import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponentType; -import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.Event; import org.jetbrains.annotations.ApiStatus; @@ -25,16 +24,16 @@ public DataComponentMap getDataComponentMap() { } - public static class ItemEvent extends GatherComponentsEvent { - private final Item item; + public static class Item extends GatherComponentsEvent { + private final net.minecraft.world.item.Item item; private final DataComponentMap dataComponents; - public ItemEvent(Item item, DataComponentMap dataComponents) { + public Item(net.minecraft.world.item.Item item, DataComponentMap dataComponents) { this.item = item; this.dataComponents = dataComponents; } - public Item getItem() { + public net.minecraft.world.item.Item getItem() { return item; } From 0394d124d3b772f0bc388aba294c41c2f6226e13 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 14 May 2024 12:13:12 -0700 Subject: [PATCH 14/19] Added JavaDoc --- .../java/net/minecraftforge/event/GatherComponentsEvent.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java index 1b734296cc3..5d1b3c0cf38 100644 --- a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java +++ b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java @@ -23,7 +23,9 @@ public DataComponentMap getDataComponentMap() { return components.build(); } - + /** + * Used to get additional Components for any {@link net.minecraft.world.item.Item} + */ public static class Item extends GatherComponentsEvent { private final net.minecraft.world.item.Item item; private final DataComponentMap dataComponents; From d899f72b314df613864ef641bc7eab89ce8f4388 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 14 May 2024 12:33:53 -0700 Subject: [PATCH 15/19] Added JavaDocs & cleanup --- .../event/GatherComponentsEvent.java | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java index 5d1b3c0cf38..2081d843740 100644 --- a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java +++ b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java @@ -2,6 +2,8 @@ import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.Item; import net.minecraftforge.eventbus.api.Event; import org.jetbrains.annotations.ApiStatus; @@ -13,6 +15,13 @@ public abstract class GatherComponentsEvent extends Event { private final DataComponentMap.Builder components = DataComponentMap.builder(); + private final DataComponentMap originalComponents; + private final Object owner; + + protected GatherComponentsEvent(Object owner, DataComponentMap originalComponents) { + this.originalComponents = originalComponents; + this.owner = owner; + } public void register(DataComponentType componentType, @Nullable T value) { components.set(componentType, value); @@ -23,24 +32,29 @@ public DataComponentMap getDataComponentMap() { return components.build(); } + public DataComponentMap getOriginalComponentMap() { + return originalComponents; + } + + public Object getOwner() { + return owner; + } + /** * Used to get additional Components for any {@link net.minecraft.world.item.Item} + * + * Fired once for every {@link net.minecraft.world.item.Item} instance, only once, Lazily. + * + * Recursion is not supported. */ public static class Item extends GatherComponentsEvent { - private final net.minecraft.world.item.Item item; - private final DataComponentMap dataComponents; - public Item(net.minecraft.world.item.Item item, DataComponentMap dataComponents) { - this.item = item; - this.dataComponents = dataComponents; - } - - public net.minecraft.world.item.Item getItem() { - return item; + super(item, dataComponents); } - public DataComponentMap getDataComponentMap() { - return dataComponents; + @Override + public net.minecraft.world.item.Item getOwner() { + return (net.minecraft.world.item.Item) super.getOwner(); } } } From 933918f6e083e5da8d480c0906e95690cef86b2c Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 14 May 2024 12:39:21 -0700 Subject: [PATCH 16/19] Added JavaDocs & cleanup --- .../java/net/minecraftforge/event/GatherComponentsEvent.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java index 2081d843740..011651fa6a0 100644 --- a/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java +++ b/src/main/java/net/minecraftforge/event/GatherComponentsEvent.java @@ -45,7 +45,9 @@ public Object getOwner() { * * Fired once for every {@link net.minecraft.world.item.Item} instance, only once, Lazily. * - * Recursion is not supported. + * Recursion is not supported. Cant call {@link net.minecraft.world.item.Item#components()} as that would cause a loop. + * + * References in {@link net.minecraft.world.item.Items} may not be valid at the current time. */ public static class Item extends GatherComponentsEvent { public Item(net.minecraft.world.item.Item item, DataComponentMap dataComponents) { From 5f5212740e91d21da497785b7360e5c41e1e10a3 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 14 May 2024 12:56:41 -0700 Subject: [PATCH 17/19] Added GameTest --- .../item/GatherComponentsEventTest.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java diff --git a/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java b/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java new file mode 100644 index 00000000000..4b03fadf0d6 --- /dev/null +++ b/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java @@ -0,0 +1,34 @@ +package net.minecraftforge.debug.gameplay.item; + +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Items; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.GatherComponentsEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.test.BaseTestMod; + +import java.util.List; + +@Mod(GatherComponentsEventTest.MOD_ID) +public class GatherComponentsEventTest extends BaseTestMod { + public static final String MOD_ID = "gather_components_test_event"; + + public GatherComponentsEventTest() { + IEventBus bus = MinecraftForge.EVENT_BUS; + bus.addListener(this::onItem); + } + + public void onItem(GatherComponentsEvent.Item itemEvent) { + if (!itemEvent.getOriginalComponentMap().has(DataComponents.FOOD) && itemEvent.getOwner() == Items.IRON_NUGGET) { + itemEvent.register(DataComponents.FOOD, new FoodProperties( + 2, + 7, + true, + 3, + List.of() + )); + } + } +} From b232bd1490afb32f43851b155688e87dbe0a3529 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 14 May 2024 19:03:25 -0700 Subject: [PATCH 18/19] Finished GameTests, Fixed build_forge.gradle, now test runs work. --- build_forge.gradle | 3 +++ .../item/GatherComponentsEventTest.java | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/build_forge.gradle b/build_forge.gradle index f6952705f16..c4089ff7b90 100644 --- a/build_forge.gradle +++ b/build_forge.gradle @@ -180,6 +180,7 @@ patcher { forge_client_test { parent runs.forge_client + source sourceSets.test } forge_server { @@ -188,6 +189,7 @@ patcher { forge_server_test { parent runs.forge_server + source sourceSets.test } forge_server_gametest { @@ -196,6 +198,7 @@ patcher { forge_server_gametest_test { parent runs.forge_server_gametest + source sourceSets.test } forge_data { diff --git a/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java b/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java index 4b03fadf0d6..30e63d4ee5d 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java @@ -1,16 +1,20 @@ package net.minecraftforge.debug.gameplay.item; import net.minecraft.core.component.DataComponents; +import net.minecraft.gametest.framework.GameTest; +import net.minecraft.gametest.framework.GameTestHelper; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.Items; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.GatherComponentsEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.gametest.GameTestHolder; import net.minecraftforge.test.BaseTestMod; import java.util.List; +@GameTestHolder("forge." + GatherComponentsEventTest.MOD_ID) @Mod(GatherComponentsEventTest.MOD_ID) public class GatherComponentsEventTest extends BaseTestMod { public static final String MOD_ID = "gather_components_test_event"; @@ -31,4 +35,20 @@ public void onItem(GatherComponentsEvent.Item itemEvent) { )); } } + + @GameTest(template = "forge:empty3x3x3") + public static void onTestForFood1(GameTestHelper helper) { + if (Items.IRON_NUGGET.components().has(DataComponents.FOOD)) + helper.succeed(); + else + helper.fail("Iron Nugget is not edible, failed to apply DataComponents.FOOD to it"); + } + + @GameTest(template = "forge:empty3x3x3") + public static void onTestForFood2(GameTestHelper helper) { + if (Items.IRON_INGOT.components().has(DataComponents.FOOD)) + helper.fail("Iron Ingot is edible, should not have DataComponents.FOOD"); + else + helper.succeed(); + } } From 5ca461f9a7840f8a176fd2358646c2e3bc5e0d97 Mon Sep 17 00:00:00 2001 From: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Date: Tue, 14 May 2024 23:01:49 -0700 Subject: [PATCH 19/19] Cleaned up GameTest for GatherComponentsEventTest.java --- .../item/GatherComponentsEventTest.java | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java b/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java index 30e63d4ee5d..aaf3d99eea2 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java @@ -37,18 +37,9 @@ public void onItem(GatherComponentsEvent.Item itemEvent) { } @GameTest(template = "forge:empty3x3x3") - public static void onTestForFood1(GameTestHelper helper) { - if (Items.IRON_NUGGET.components().has(DataComponents.FOOD)) - helper.succeed(); - else - helper.fail("Iron Nugget is not edible, failed to apply DataComponents.FOOD to it"); - } - - @GameTest(template = "forge:empty3x3x3") - public static void onTestForFood2(GameTestHelper helper) { - if (Items.IRON_INGOT.components().has(DataComponents.FOOD)) - helper.fail("Iron Ingot is edible, should not have DataComponents.FOOD"); - else - helper.succeed(); + public static void onTestForFood(GameTestHelper helper) { + helper.assertTrue(Items.IRON_NUGGET.components().has(DataComponents.FOOD), "Iron Nugget is not edible, failed to apply DataComponents.FOOD to it."); + helper.assertFalse(Items.IRON_INGOT.components().has(DataComponents.FOOD), "Iron Ingot is edible, should not have DataComponents.FOOD"); + helper.succeed(); } }