Add GatherComponentsEvent (#9944)

This commit is contained in:
RealMangoRage authored and GitHub committed 2024-05-14 23:02:58 -07:00
1 parent f0a82d79a6
commit 5da16e6719
6 files changed
+143 -1

No files matched your search

@@ -49,6 +49,7 @@ import net.minecraft.core.Holder;
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.entity.IEntityAdditionalSpawnData;
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 final class ForgeHooks {
return null;
}
public static DataComponentMap gatherItemComponents(Item item, DataComponentMap dataComponents) {
return DataComponentMap.composite(dataComponents, ForgeEventFactory.gatherItemComponentsEvent(item, dataComponents).getDataComponentMap());
}
}
@@ -14,6 +14,8 @@ import java.util.Optional;
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 final class ForgeEventFactory {
public static void onPlayerTradeWithVillager(Player player, MerchantOffer offer, AbstractVillager villager) {
post(new TradeWithVillagerEvent(player, offer, villager));
}
public static GatherComponentsEvent.Item gatherItemComponentsEvent(Item item, DataComponentMap dataComponents) {
return fire(new GatherComponentsEvent.Item(item, dataComponents));
}
}
@@ -0,0 +1,62 @@
package net.minecraftforge.event;
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;
import javax.annotation.Nullable;
/**
Where all the events fore Gathering Components will exist.
*/
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 <T> void register(DataComponentType<T> componentType, @Nullable T value) {
components.set(componentType, value);
}
@ApiStatus.Internal
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. 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) {
super(item, dataComponents);
}
@Override
public net.minecraft.world.item.Item getOwner() {
return (net.minecraft.world.item.Item) super.getOwner();
}
}
}