Skip to content

Commit 5956d92

Browse files
authored
Disallow replication of container items (#1065)
1 parent 605e2ab commit 5956d92

File tree

3 files changed

+31
-16
lines changed

3 files changed

+31
-16
lines changed

src/generated/resources/data/modern_industrialization/tags/item/replicator_blacklist.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
"values": [
33
"minecraft:bundle",
44
"modern_industrialization:portable_storage_unit",
5-
"#c:shulker_boxes",
6-
"#modern_industrialization:tanks",
75
"#modern_industrialization:barrels"
86
]
97
}

src/main/java/aztech/modern_industrialization/datagen/tag/MIItemTagProvider.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,6 @@ protected void addTags(HolderLookup.Provider provider) {
9393

9494
tag(ReplicatorMachineBlockEntity.BLACKLISTED)
9595
.add(Items.BUNDLE, MIItem.PORTABLE_STORAGE_UNIT.asItem())
96-
.addTag(Tags.Items.SHULKER_BOXES)
97-
.addTag(MITags.TANKS)
9896
.addTag(MITags.BARRELS);
9997

10098
tag(Tags.Items.TOOLS_SHEAR).add(MIItem.DIESEL_CHAINSAW.asItem());

src/main/java/aztech/modern_industrialization/machines/blockentities/ReplicatorMachineBlockEntity.java

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import net.minecraft.nbt.CompoundTag;
4949
import net.minecraft.tags.TagKey;
5050
import net.minecraft.world.item.Item;
51+
import net.minecraft.world.item.ItemStack;
5152
import net.neoforged.neoforge.capabilities.Capabilities;
5253
import net.neoforged.neoforge.fluids.FluidType;
5354

@@ -113,24 +114,42 @@ protected MachineModelClientData getMachineModelData() {
113114
return data;
114115
}
115116

116-
public boolean replicationStep(boolean simulate) {
117+
private static boolean canReplicate(ItemStack stack) {
118+
if (stack.is(BLACKLISTED)) {
119+
return false;
120+
}
121+
122+
// Containers are only allowed if they are empty.
123+
var itemHandler = stack.getCapability(Capabilities.ItemHandler.ITEM);
124+
if (itemHandler != null) {
125+
int slots = itemHandler.getSlots();
126+
for (int i = 0; i < slots; ++i) {
127+
if (!itemHandler.getStackInSlot(i).isEmpty()) {
128+
return false;
129+
}
130+
}
131+
}
132+
133+
// Disallow anything that contains UU Matter
134+
var fluidItem = stack.getCapability(Capabilities.FluidHandler.ITEM);
135+
if (fluidItem != null) {
136+
for (int tank = 0; tank < fluidItem.getTanks(); ++tank) {
137+
if (fluidItem.getFluidInTank(tank).getFluid() == MIFluids.UU_MATER.asFluid()) {
138+
return false;
139+
}
140+
}
141+
}
142+
143+
return true;
144+
}
117145

146+
public boolean replicationStep(boolean simulate) {
118147
ItemVariant itemVariant = inventoryComponent.getItemInputs().get(0).getResource();
119148

120149
if (!itemVariant.isBlank()) {
121-
// check blacklist
122-
if (itemVariant.toStack().is(BLACKLISTED)) {
150+
if (!canReplicate(itemVariant.toStack())) {
123151
return false;
124152
}
125-
// check that the item doesn't contain uu matter
126-
var fluidItem = itemVariant.toStack().getCapability(Capabilities.FluidHandler.ITEM);
127-
if (fluidItem != null) {
128-
for (int tank = 0; tank < fluidItem.getTanks(); ++tank) {
129-
if (fluidItem.getFluidInTank(tank).getFluid() == MIFluids.UU_MATER.asFluid()) {
130-
return false;
131-
}
132-
}
133-
}
134153

135154
try (Transaction tx = Transaction.openOuter()) {
136155
MIItemStorage itemStorage = new MIItemStorage(inventoryComponent.getItemOutputs());

0 commit comments

Comments
 (0)