mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 16:27:47 +00:00
Add GatherComponentsEvent (#9944)
This commit is contained in:
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user