Skip to content

Commit

Permalink
Fix InventoryAction wrong for Bundles
Browse files Browse the repository at this point in the history
  • Loading branch information
notTamion committed Jan 4, 2025
1 parent edde726 commit 809f896
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 4 deletions.
1 change: 1 addition & 0 deletions build-data/paper.at
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,7 @@ public net.minecraft.world.item.ItemStackLinkedSet TYPE_AND_TAG
public net.minecraft.world.item.JukeboxSongPlayer song
public net.minecraft.world.item.MapItem createNewSavedData(Lnet/minecraft/world/level/Level;IIIZZLnet/minecraft/resources/ResourceKey;)Lnet/minecraft/world/level/saveddata/maps/MapId;
public net.minecraft.world.item.StandingAndWallBlockItem wallBlock
public net.minecraft.world.item.component.BundleContents$Mutable getMaxAmountToAdd(Lnet/minecraft/world/item/ItemStack;)I;
public net.minecraft.world.item.component.ItemContainerContents MAX_SIZE
public net.minecraft.world.item.component.ItemContainerContents items
public net.minecraft.world.item.context.UseOnContext <init>(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,5 +93,37 @@ public enum InventoryAction {
* An unrecognized ClickType.
*/
UNKNOWN,
/**
* The first stack of items in the clicked bundle is moved to the cursor.
*/
PICKUP_FROM_BUNDLE,
/**
* All of the items on the clicked slot are moved into the bundle on the cursor.
*/
PICKUP_ALL_INTO_BUNDLE,
/**
* Some of the items on the clicked slot are moved into the bundle on the cursor.
*/
PICKUP_SOME_INTO_BUNDLE,
/**
* One of the items on the clicked slot is moved into the bundle on the cursor.
*/
PICKUP_ONE_INTO_BUNDLE,
/**
* The first stack of items is moved to the clicked slot.
*/
PLACE_FROM_BUNDLE,
/**
* All of the items on the cursor are moved into the bundle in the clicked slot.
*/
PLACE_ALL_INTO_BUNDLE,
/**
* Some of the items on the cursor are moved into the bundle in the clicked slot.
*/
PLACE_SOME_INTO_BUNDLE,
/**
* One of the items on the cursor is moved into the bundle in the clicked slot.
*/
PLACE_ONE_INTO_BUNDLE,
;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2017,7 +2017,7 @@
this.player.containerMenu.sendAllDataToRemote();
} else if (!this.player.containerMenu.stillValid(this.player)) {
LOGGER.debug("Player {} interacted with invalid menu {}", this.player, this.player.containerMenu);
@@ -1713,7 +_,313 @@
@@ -1713,7 +_,352 @@
} else {
boolean flag = packet.getStateId() != this.player.containerMenu.getStateId();
this.player.containerMenu.suppressRemoteUpdates();
Expand Down Expand Up @@ -2056,11 +2056,23 @@
+ ItemStack cursor = this.player.containerMenu.getCarried();
+ if (clickedItem.isEmpty()) {
+ if (!cursor.isEmpty()) {
+ action = packet.getButtonNum() == 0 ? InventoryAction.PLACE_ALL : InventoryAction.PLACE_ONE;
+ // Paper start - Fix InventoryAction wrong for Bundles
+ if (cursor.is(Items.BUNDLE) && packet.getButtonNum() != 0) {
+ action = cursor.get(DataComponents.BUNDLE_CONTENTS).isEmpty() ? InventoryAction.NOTHING : InventoryAction.PLACE_FROM_BUNDLE;
+ } else {
+ action = packet.getButtonNum() == 0 ? InventoryAction.PLACE_ALL : InventoryAction.PLACE_ONE;
+ }
+ // Paper end - Fix InventoryAction wrong for Bundles
+ }
+ } else if (slot.mayPickup(this.player)) {
+ if (cursor.isEmpty()) {
+ action = packet.getButtonNum() == 0 ? InventoryAction.PICKUP_ALL : InventoryAction.PICKUP_HALF;
+ // Paper start - Fix InventoryAction wrong for Bundles
+ if (slot.getItem().is(Items.BUNDLE) && packet.getButtonNum() != 0) {
+ action = slot.getItem().get(DataComponents.BUNDLE_CONTENTS).isEmpty() ? InventoryAction.NOTHING : InventoryAction.PICKUP_FROM_BUNDLE;
+ } else {
+ action = packet.getButtonNum() == 0 ? InventoryAction.PICKUP_ALL : InventoryAction.PICKUP_HALF;
+ }
+ // Paper end - Fix InventoryAction wrong for Bundles
+ } else if (slot.mayPlace(cursor)) {
+ if (ItemStack.isSameItemSameComponents(clickedItem, cursor)) {
+ int toPlace = packet.getButtonNum() == 0 ? cursor.getCount() : 1;
Expand All @@ -2076,7 +2088,34 @@
+ action = InventoryAction.PLACE_SOME;
+ }
+ } else if (cursor.getCount() <= slot.getMaxStackSize()) {
+ action = InventoryAction.SWAP_WITH_CURSOR;
+ // Paper start - Fix InventoryAction wrong for Bundles
+ if (cursor.is(Items.BUNDLE) && packet.getButtonNum() == 0) {
+ int toPickup = new net.minecraft.world.item.component.BundleContents.Mutable(cursor.get(DataComponents.BUNDLE_CONTENTS)).getMaxAmountToAdd(slot.getItem());
+ if (toPickup >= slot.getItem().getCount()) {
+ action = InventoryAction.PICKUP_ALL_INTO_BUNDLE;
+ } else if (toPickup == 1) {
+ action = InventoryAction.PICKUP_ONE_INTO_BUNDLE;
+ } else if (toPickup == 0) {
+ action = InventoryAction.NOTHING;
+ } else {
+ action = InventoryAction.PICKUP_SOME_INTO_BUNDLE;
+ }
+ } else if (slot.getItem().is(Items.BUNDLE) && packet.getButtonNum() == 0) {
+ int toPickup = new net.minecraft.world.item.component.BundleContents.Mutable(slot.getItem().get(DataComponents.BUNDLE_CONTENTS)).getMaxAmountToAdd(cursor);
+ if (toPickup >= cursor.getCount()) {
+ action = InventoryAction.PLACE_ALL_INTO_BUNDLE;
+ } else if (toPickup == 1) {
+ action = InventoryAction.PLACE_ONE_INTO_BUNDLE;
+ } else if (toPickup == 0) {
+ action = InventoryAction.NOTHING;
+ } else {
+ action = InventoryAction.PLACE_SOME_INTO_BUNDLE;
+ }
+
+ } else {
+ action = InventoryAction.SWAP_WITH_CURSOR;
+ }
+ // Paper end - Fix InventoryAction wrong for Bundles
+ }
+ } else if (ItemStack.isSameItemSameComponents(cursor, clickedItem)) {
+ if (clickedItem.getCount() >= 0) {
Expand Down

0 comments on commit 809f896

Please sign in to comment.