feature/d01-component-system #5

Merged
NotEvil merged 20 commits from feature/d01-component-system into develop 2026-04-14 00:54:17 +00:00
Showing only changes of commit 1b70041c36 - Show all commits

View File

@@ -0,0 +1,70 @@
package com.tiedup.remake.v2.bondage.component;
import java.util.Collections;
import java.util.EnumMap;
import java.util.Map;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;
public final class ComponentHolder {
public static final ComponentHolder EMPTY = new ComponentHolder(Map.of());
private final Map<ComponentType, IItemComponent> components;
public ComponentHolder(Map<ComponentType, IItemComponent> components) {
this.components = components.isEmpty()
? Map.of()
: Collections.unmodifiableMap(new EnumMap<>(components));
}
@Nullable
public IItemComponent get(ComponentType type) {
return components.get(type);
}
@Nullable
@SuppressWarnings("unchecked")
public <T extends IItemComponent> T get(
ComponentType type,
Class<T> clazz
) {
IItemComponent component = components.get(type);
if (clazz.isInstance(component)) return (T) component;
return null;
}
public boolean has(ComponentType type) {
return components.containsKey(type);
}
public void onEquipped(ItemStack stack, LivingEntity entity) {
for (IItemComponent c : components.values()) {
c.onEquipped(stack, entity);
}
}
public void onUnequipped(ItemStack stack, LivingEntity entity) {
for (IItemComponent c : components.values()) {
c.onUnequipped(stack, entity);
}
}
public void onWornTick(ItemStack stack, LivingEntity entity) {
for (IItemComponent c : components.values()) {
c.onWornTick(stack, entity);
}
}
public boolean blocksUnequip(ItemStack stack, LivingEntity entity) {
for (IItemComponent c : components.values()) {
if (c.blocksUnequip(stack, entity)) return true;
}
return false;
}
public boolean isEmpty() {
return components.isEmpty();
}
}