Skip to content

Commit e652c1f

Browse files
committed
Continue work at applying default components to things
1 parent 42a75c8 commit e652c1f

30 files changed

+198
-161
lines changed

src/main/java/mekanism/common/attachments/containers/ContainerType.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import net.minecraft.core.Direction;
5151
import net.minecraft.core.HolderLookup;
5252
import net.minecraft.core.component.DataComponentMap;
53+
import net.minecraft.core.component.DataComponentPatch;
5354
import net.minecraft.core.component.DataComponentType;
5455
import net.minecraft.core.registries.BuiltInRegistries;
5556
import net.minecraft.nbt.CompoundTag;
@@ -58,6 +59,7 @@
5859
import net.minecraft.resources.ResourceLocation;
5960
import net.minecraft.world.item.Item;
6061
import net.minecraft.world.item.ItemStack;
62+
import net.minecraft.world.level.ItemLike;
6163
import net.minecraft.world.level.block.entity.BlockEntity;
6264
import net.neoforged.bus.api.IEventBus;
6365
import net.neoforged.neoforge.capabilities.ICapabilityProvider;
@@ -256,6 +258,27 @@ public boolean supports(ItemStack stack) {
256258
return stack.has(component) || knownDefaultCreators.containsKey(stack.getItem());
257259
}
258260

261+
public void addDefault(ItemLike item, DataComponentPatch.Builder builder) {
262+
Lazy<? extends IContainerCreator<? extends CONTAINER, ATTACHED>> lazy = knownDefaultCreators.get(item);
263+
if (lazy != null) {
264+
//Supports the type
265+
IContainerCreator<? extends CONTAINER, ATTACHED> containerCreator = lazy.get();
266+
int count = containerCreator.totalContainers();
267+
if (count > 0) {
268+
builder.set(component.get(), containerCreator.initStorage(count));
269+
}
270+
}
271+
}
272+
273+
public static boolean anySupports(ItemLike itemLike) {
274+
for (ContainerType<?, ?, ?> type : TYPES) {
275+
if (type.knownDefaultCreators.containsKey(itemLike.asItem())) {
276+
return true;
277+
}
278+
}
279+
return false;
280+
}
281+
259282
private ListTag save(HolderLookup.Provider provider, List<CONTAINER> containers) {
260283
return DataHandlerUtils.writeContents(provider, containers, containerKey);
261284
}

src/main/java/mekanism/common/attachments/containers/chemical/gas/AttachedGases.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.mojang.serialization.Codec;
44
import com.mojang.serialization.codecs.RecordCodecBuilder;
5+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
6+
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
57
import java.util.Collections;
68
import java.util.List;
79
import mekanism.api.NBTConstants;
@@ -22,13 +24,18 @@ public record AttachedGases(List<GasStack> containers) implements IAttachedConta
2224
public static final StreamCodec<RegistryFriendlyByteBuf, AttachedGases> STREAM_CODEC =
2325
GasStack.OPTIONAL_STREAM_CODEC.<List<GasStack>>apply(ByteBufCodecs.collection(NonNullList::createWithCapacity))
2426
.map(AttachedGases::new, AttachedGases::containers);
27+
private static final Int2ObjectMap<AttachedGases> EMPTY_DEFAULTS = new Int2ObjectOpenHashMap<>();
28+
29+
public static AttachedGases create(int containers) {
30+
return EMPTY_DEFAULTS.computeIfAbsent(containers, AttachedGases::new);
31+
}
2532

2633
public AttachedGases {
2734
//Make the list unmodifiable to ensure we don't accidentally mutate it
2835
containers = Collections.unmodifiableList(containers);
2936
}
3037

31-
public AttachedGases(int containers) {
38+
private AttachedGases(int containers) {
3239
this(NonNullList.withSize(containers, GasStack.EMPTY));
3340
}
3441

src/main/java/mekanism/common/attachments/containers/chemical/gas/GasTanksBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public BaseGasTankBuilder(List<IBasicContainerCreator<? extends ComponentBackedG
5252

5353
@Override
5454
public AttachedGases initStorage(int containers) {
55-
return new AttachedGases(containers);
55+
return AttachedGases.create(containers);
5656
}
5757
}
5858
}

src/main/java/mekanism/common/attachments/containers/chemical/infuse/AttachedInfuseTypes.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.mojang.serialization.Codec;
44
import com.mojang.serialization.codecs.RecordCodecBuilder;
5+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
6+
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
57
import java.util.Collections;
68
import java.util.List;
79
import mekanism.api.NBTConstants;
@@ -22,13 +24,18 @@ public record AttachedInfuseTypes(List<InfusionStack> containers) implements IAt
2224
public static final StreamCodec<RegistryFriendlyByteBuf, AttachedInfuseTypes> STREAM_CODEC =
2325
InfusionStack.OPTIONAL_STREAM_CODEC.<List<InfusionStack>>apply(ByteBufCodecs.collection(NonNullList::createWithCapacity))
2426
.map(AttachedInfuseTypes::new, AttachedInfuseTypes::containers);
27+
private static final Int2ObjectMap<AttachedInfuseTypes> EMPTY_DEFAULTS = new Int2ObjectOpenHashMap<>();
28+
29+
public static AttachedInfuseTypes create(int containers) {
30+
return EMPTY_DEFAULTS.computeIfAbsent(containers, AttachedInfuseTypes::new);
31+
}
2532

2633
public AttachedInfuseTypes {
2734
//Make the list unmodifiable to ensure we don't accidentally mutate it
2835
containers = Collections.unmodifiableList(containers);
2936
}
3037

31-
public AttachedInfuseTypes(int containers) {
38+
private AttachedInfuseTypes(int containers) {
3239
this(NonNullList.withSize(containers, InfusionStack.EMPTY));
3340
}
3441

src/main/java/mekanism/common/attachments/containers/chemical/infuse/InfusionTanksBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public BaseInfusionTankBuilder(List<IBasicContainerCreator<? extends ComponentBa
5252

5353
@Override
5454
public AttachedInfuseTypes initStorage(int containers) {
55-
return new AttachedInfuseTypes(containers);
55+
return AttachedInfuseTypes.create(containers);
5656
}
5757
}
5858
}

src/main/java/mekanism/common/attachments/containers/chemical/pigment/AttachedPigments.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.mojang.serialization.Codec;
44
import com.mojang.serialization.codecs.RecordCodecBuilder;
5+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
6+
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
57
import java.util.Collections;
68
import java.util.List;
79
import mekanism.api.NBTConstants;
@@ -22,13 +24,18 @@ public record AttachedPigments(List<PigmentStack> containers) implements IAttach
2224
public static final StreamCodec<RegistryFriendlyByteBuf, AttachedPigments> STREAM_CODEC =
2325
PigmentStack.OPTIONAL_STREAM_CODEC.<List<PigmentStack>>apply(ByteBufCodecs.collection(NonNullList::createWithCapacity))
2426
.map(AttachedPigments::new, AttachedPigments::containers);
27+
private static final Int2ObjectMap<AttachedPigments> EMPTY_DEFAULTS = new Int2ObjectOpenHashMap<>();
28+
29+
public static AttachedPigments create(int containers) {
30+
return EMPTY_DEFAULTS.computeIfAbsent(containers, AttachedPigments::new);
31+
}
2532

2633
public AttachedPigments {
2734
//Make the list unmodifiable to ensure we don't accidentally mutate it
2835
containers = Collections.unmodifiableList(containers);
2936
}
3037

31-
public AttachedPigments(int containers) {
38+
private AttachedPigments(int containers) {
3239
this(NonNullList.withSize(containers, PigmentStack.EMPTY));
3340
}
3441

src/main/java/mekanism/common/attachments/containers/chemical/pigment/PigmentTanksBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public BasePigmentTankBuilder(List<IBasicContainerCreator<? extends ComponentBac
5252

5353
@Override
5454
public AttachedPigments initStorage(int containers) {
55-
return new AttachedPigments(containers);
55+
return AttachedPigments.create(containers);
5656
}
5757
}
5858
}

src/main/java/mekanism/common/attachments/containers/chemical/slurry/AttachedSlurries.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.mojang.serialization.Codec;
44
import com.mojang.serialization.codecs.RecordCodecBuilder;
5+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
6+
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
57
import java.util.Collections;
68
import java.util.List;
79
import mekanism.api.NBTConstants;
@@ -22,13 +24,18 @@ public record AttachedSlurries(List<SlurryStack> containers) implements IAttache
2224
public static final StreamCodec<RegistryFriendlyByteBuf, AttachedSlurries> STREAM_CODEC =
2325
SlurryStack.OPTIONAL_STREAM_CODEC.<List<SlurryStack>>apply(ByteBufCodecs.collection(NonNullList::createWithCapacity))
2426
.map(AttachedSlurries::new, AttachedSlurries::containers);
27+
private static final Int2ObjectMap<AttachedSlurries> EMPTY_DEFAULTS = new Int2ObjectOpenHashMap<>();
28+
29+
public static AttachedSlurries create(int containers) {
30+
return EMPTY_DEFAULTS.computeIfAbsent(containers, AttachedSlurries::new);
31+
}
2532

2633
public AttachedSlurries {
2734
//Make the list unmodifiable to ensure we don't accidentally mutate it
2835
containers = Collections.unmodifiableList(containers);
2936
}
3037

31-
public AttachedSlurries(int containers) {
38+
private AttachedSlurries(int containers) {
3239
this(NonNullList.withSize(containers, SlurryStack.EMPTY));
3340
}
3441

src/main/java/mekanism/common/attachments/containers/chemical/slurry/SlurryTanksBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public BaseSlurryTankBuilder(List<IBasicContainerCreator<? extends ComponentBack
5252

5353
@Override
5454
public AttachedSlurries initStorage(int containers) {
55-
return new AttachedSlurries(containers);
55+
return AttachedSlurries.create(containers);
5656
}
5757
}
5858
}

src/main/java/mekanism/common/attachments/containers/energy/AttachedEnergy.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.mojang.serialization.Codec;
55
import com.mojang.serialization.codecs.RecordCodecBuilder;
66
import io.netty.buffer.ByteBuf;
7+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
8+
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
79
import java.util.Collections;
810
import java.util.List;
911
import mekanism.api.NBTConstants;
@@ -23,13 +25,18 @@ public record AttachedEnergy(List<FloatingLong> containers) implements IAttached
2325
public static final StreamCodec<ByteBuf, AttachedEnergy> STREAM_CODEC =
2426
FloatingLong.STREAM_CODEC.<List<FloatingLong>>apply(ByteBufCodecs.collection(NonNullList::createWithCapacity))
2527
.map(AttachedEnergy::new, AttachedEnergy::containers);
28+
private static final Int2ObjectMap<AttachedEnergy> EMPTY_DEFAULTS = new Int2ObjectOpenHashMap<>();
29+
30+
public static AttachedEnergy create(int containers) {
31+
return EMPTY_DEFAULTS.computeIfAbsent(containers, AttachedEnergy::new);
32+
}
2633

2734
public AttachedEnergy {
2835
//Make the list unmodifiable to ensure we don't accidentally mutate it
2936
containers = Collections.unmodifiableList(containers);
3037
}
3138

32-
public AttachedEnergy(int containers) {
39+
private AttachedEnergy(int containers) {
3340
this(NonNullList.withSize(containers, FloatingLong.ZERO));
3441
}
3542

0 commit comments

Comments
 (0)