Make setChanged be more robust
This commit is contained in:
parent
86f2e98df3
commit
33a2000705
@ -9,6 +9,7 @@ import net.minecraft.world.inventory.MenuType;
|
||||
import net.minecraft.world.inventory.Slot;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import ru.dbotthepony.mc.otm.menu.slot.MatterySlot;
|
||||
import ru.dbotthepony.mc.otm.menu.widget.AbstractWidget;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
@ -106,6 +107,22 @@ public abstract class MatteryMenu extends AbstractContainerMenu {
|
||||
abstract protected int getWorkingSlotStart();
|
||||
abstract protected int getWorkingSlotEnd();
|
||||
|
||||
protected void notifySlotsWatchCurrentStack() {
|
||||
for (var slot : slots) {
|
||||
if (slot instanceof MatterySlot slot1) {
|
||||
slot1.watchCurrentStack();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void notifySlotsUnwatchCurrentStack() {
|
||||
for (var slot : slots) {
|
||||
if (slot instanceof MatterySlot slot1) {
|
||||
slot1.unwatchCurrentStack();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This method receive Player interactor and slot_index where Shift + Right click occurred
|
||||
// It shall return item stack that got moved
|
||||
@Override
|
||||
@ -126,6 +143,7 @@ public abstract class MatteryMenu extends AbstractContainerMenu {
|
||||
|
||||
ItemStack moved = ItemStack.EMPTY;
|
||||
Slot get_slot = this.slots.get(slot_index);
|
||||
notifySlotsWatchCurrentStack();
|
||||
|
||||
if (get_slot.hasItem()) {
|
||||
ItemStack slot_item = get_slot.getItem();
|
||||
@ -135,10 +153,12 @@ public abstract class MatteryMenu extends AbstractContainerMenu {
|
||||
// Moving FROM machine TO inventory
|
||||
|
||||
if (!moveItemStackTo(slot_item, inventory_slot_index_start, inventory_slot_index_end + 1, false)) {
|
||||
notifySlotsUnwatchCurrentStack();
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
} else if (!moveItemStackTo(slot_item, start, end, false)) {
|
||||
// Moving FROM inventory TO machine
|
||||
notifySlotsUnwatchCurrentStack();
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@ -147,8 +167,11 @@ public abstract class MatteryMenu extends AbstractContainerMenu {
|
||||
} else {
|
||||
get_slot.setChanged();
|
||||
}
|
||||
|
||||
notifySlotsWatchCurrentStack();
|
||||
}
|
||||
|
||||
notifySlotsUnwatchCurrentStack();
|
||||
return moved;
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import net.minecraft.world.Container;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.inventory.Slot;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
||||
import ru.dbotthepony.mc.otm.container.MatteryContainer;
|
||||
|
||||
// Just a sign that this slot needs auto draw
|
||||
@ -20,6 +21,15 @@ public class MatterySlot extends Slot {
|
||||
}
|
||||
|
||||
private ItemStack last_stack;
|
||||
private ItemStack watching_stack;
|
||||
|
||||
public void watchCurrentStack() {
|
||||
watching_stack = super.getItem().copy();
|
||||
}
|
||||
|
||||
public void unwatchCurrentStack() {
|
||||
watching_stack = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItem() {
|
||||
@ -31,7 +41,7 @@ public class MatterySlot extends Slot {
|
||||
@Override
|
||||
public void setChanged() {
|
||||
if (container instanceof MatteryContainer container1) {
|
||||
ItemStack old = last_stack.copy();
|
||||
ItemStack old = watching_stack != null ? watching_stack.copy() : last_stack.copy();
|
||||
container1.setChanged(getSlotIndex(), super.getItem(), old);
|
||||
} else {
|
||||
super.setChanged();
|
||||
@ -41,7 +51,7 @@ public class MatterySlot extends Slot {
|
||||
@Override
|
||||
public void set(ItemStack p_40240_) {
|
||||
if (container instanceof MatteryContainer container1) {
|
||||
ItemStack old = container1.getItem(getSlotIndex()).copy();
|
||||
ItemStack old = watching_stack != null ? watching_stack.copy() : container1.getItem(getSlotIndex()).copy();
|
||||
container1.startIgnore();
|
||||
container1.setItem(getSlotIndex(), p_40240_);
|
||||
container1.stopIgnore();
|
||||
@ -54,7 +64,7 @@ public class MatterySlot extends Slot {
|
||||
@Override
|
||||
public void onTake(Player p_150645_, ItemStack p_150646_) {
|
||||
if (container instanceof MatteryContainer container1) {
|
||||
ItemStack old = last_stack.copy();
|
||||
ItemStack old = watching_stack != null ? watching_stack.copy() : last_stack.copy();
|
||||
container1.setChanged(getSlotIndex(), p_150646_.copy(), old);
|
||||
last_stack = ItemStack.EMPTY;
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user