@@ -38,21 +38,22 @@ public class ItemContainerComponent implements TooltipData {
3838 public static final Codec <ItemContainerComponent > CODEC = ItemContainerComponentData .CODEC .flatXmap (
3939 ItemContainerComponent ::validateWeight , component -> DataResult .success (
4040 new ItemContainerComponentData (component .getMaxItemCount (),
41- component .getValidItems (), component .getSettings (),
42- component .getStacks ())));
41+ component .getValidItems (), component .isAutoPickupDisabled (),
42+ component .getSettings (), component . getStacks ())));
4343 public static final PacketCodec <RegistryByteBuf , ItemContainerComponent > PACKET_CODEC = ItemContainerComponentData .PACKET_CODEC .xmap (
44- data -> new ItemContainerComponent (data .maxItemCount , data .validItems , data . settings ,
45- data .stacks ),
44+ data -> new ItemContainerComponent (data .maxItemCount , data .validItems ,
45+ data .disableAutoPickup , data . settings , data . stacks ),
4646 component -> new ItemContainerComponentData (component .getMaxItemCount (),
47- component .getValidItems (), component .getSettings (), component .getStacks ()));
47+ component .getValidItems (), component .isAutoPickupDisabled (),
48+ component .getSettings (), component .getStacks ()));
4849
4950 private static DataResult <ItemContainerComponent > validateWeight (
5051 ItemContainerComponentData data ) {
5152 try {
5253 Fraction weight = calculateWeight (data .stacks ());
5354 return DataResult .success (
5455 new ItemContainerComponent (data .maxItemCount (), data .validItems (),
55- data .settings (), data .stacks (), weight , -1 ));
56+ data .disableAutoPickup (), data . settings (), data .stacks (), weight , -1 ));
5657 } catch (ArithmeticException var2 ) {
5758 return DataResult .error (() -> "Excessive total item container weight" );
5859 }
@@ -87,25 +88,30 @@ public static Fraction getStackWeight(ItemStack stack) {
8788
8889 private final int maxItemCount ;
8990 private final TagKey <Item > validItems ;
91+ private final boolean disableAutoPickup ;
9092 private final ItemContainerSettings settings ;
9193 private final List <ItemStack > stacks ;
94+
95+ // These two do not necessarily need to be saved
9296 private final Fraction weight ;
9397 private final int selectedStackIndex ;
9498
9599 protected ItemContainerComponent (int maxItemCount , TagKey <Item > validItems ,
96- ItemContainerSettings settings , List <ItemStack > stacks , Fraction weight ,
97- int selectedStackIndex ) {
100+ boolean disableAutoPickup , ItemContainerSettings settings , List <ItemStack > stacks ,
101+ Fraction weight , int selectedStackIndex ) {
98102 this .maxItemCount = maxItemCount ;
99103 this .validItems = validItems ;
104+ this .disableAutoPickup = disableAutoPickup ;
100105 this .settings = settings ;
101106 this .stacks = stacks ;
102107 this .weight = weight ;
103108 this .selectedStackIndex = selectedStackIndex ;
104109 }
105110
106111 public ItemContainerComponent (int maxItemCount , TagKey <Item > validItems ,
107- ItemContainerSettings settings , List <ItemStack > stacks ) {
108- this (maxItemCount , validItems , settings , stacks , calculateWeight (stacks ), -1 );
112+ boolean disableAutoPickup , ItemContainerSettings settings , List <ItemStack > stacks ) {
113+ this (maxItemCount , validItems , disableAutoPickup , settings , stacks , calculateWeight (stacks ),
114+ -1 );
109115 }
110116
111117 public int getNumberOfStacksShown () {
@@ -170,8 +176,13 @@ public int getSelectedStackIndex() {
170176 return selectedStackIndex ;
171177 }
172178
173- public boolean shouldAutoSort () {
174- return settings .shouldAutoSort ();
179+ public boolean shouldAutoPickup () {
180+ return settings .shouldAutoPickup () && !disableAutoPickup ;
181+ }
182+
183+ // This boolean only matters if it would be enabled by default
184+ public boolean isAutoPickupDisabled () {
185+ return settings .shouldAutoPickup () && disableAutoPickup ;
175186 }
176187
177188 public boolean canBeStored (ItemStack stack ) {
@@ -182,6 +193,7 @@ public static class Builder {
182193
183194 private int maxItemCount ;
184195 private TagKey <Item > validItems ;
196+ private boolean disableAutoPickup ;
185197 private ItemContainerSettings settings ;
186198 private final List <ItemStack > stacks ;
187199 private Fraction weight ;
@@ -289,13 +301,24 @@ public Fraction getWeight() {
289301 return weight ;
290302 }
291303
304+ public boolean toggleAutoPickup () {
305+ disableAutoPickup = !disableAutoPickup ;
306+ return disableAutoPickup ;
307+ }
308+
309+ public boolean isAutoPickupDisabled () {
310+ return disableAutoPickup ;
311+ }
312+
292313 public ItemContainerComponent build () {
293- return new ItemContainerComponent (this .maxItemCount , this .validItems , this .settings ,
294- List .copyOf (this .stacks ), this .weight , this .selectedStackIndex );
314+ return new ItemContainerComponent (this .maxItemCount , this .validItems ,
315+ this .disableAutoPickup , this .settings , List .copyOf (this .stacks ), this .weight ,
316+ this .selectedStackIndex );
295317 }
296318 }
297319
298320 public record ItemContainerComponentData (int maxItemCount , TagKey <Item > validItems ,
321+ boolean disableAutoPickup ,
299322 ItemContainerSettings settings ,
300323 List <ItemStack > stacks ) {
301324
@@ -305,6 +328,8 @@ public record ItemContainerComponentData(int maxItemCount, TagKey<Item> validIte
305328 TagKey .codec (RegistryKeys .ITEM )
306329 .fieldOf ("valid_items" )
307330 .forGetter (ItemContainerComponentData ::validItems ),
331+ Codec .BOOL .optionalFieldOf ("disable_auto_pickup" , false )
332+ .forGetter (ItemContainerComponentData ::disableAutoPickup ),
308333 ItemContainerSettings .CODEC .fieldOf ("settings" )
309334 .forGetter (ItemContainerComponentData ::settings ),
310335 ItemStack .CODEC .listOf ()
@@ -314,6 +339,7 @@ public record ItemContainerComponentData(int maxItemCount, TagKey<Item> validIte
314339 public static final PacketCodec <RegistryByteBuf , ItemContainerComponentData > PACKET_CODEC = PacketCodec .tuple (
315340 PacketCodecs .VAR_INT , ItemContainerComponentData ::maxItemCount ,
316341 TagKey .packetCodec (RegistryKeys .ITEM ), ItemContainerComponentData ::validItems ,
342+ PacketCodecs .BOOLEAN , ItemContainerComponentData ::disableAutoPickup ,
317343 ItemContainerSettings .PACKET_CODEC , ItemContainerComponentData ::settings ,
318344 ItemStack .PACKET_CODEC .collect (PacketCodecs .toList ()),
319345 ItemContainerComponentData ::stacks , ItemContainerComponentData ::new );
0 commit comments