mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-12-14 20:20:30 +00:00
Copy pocket upgrades items before dropping them
We were modifying the stack, meaning the crafting item would end up empty!
This commit is contained in:
parent
b21e2f4e63
commit
1e3a930543
@ -69,7 +69,7 @@ public class PocketAPI implements ILuaAPI {
|
|||||||
if (newUpgrade == null) return new Object[]{ false, "Cannot find a valid upgrade" };
|
if (newUpgrade == null) return new Object[]{ false, "Cannot find a valid upgrade" };
|
||||||
|
|
||||||
// Remove the current upgrade
|
// Remove the current upgrade
|
||||||
if (previousUpgrade != null) storeItem(player, previousUpgrade.getCraftingItem());
|
if (previousUpgrade != null) storeItem(player, previousUpgrade.getCraftingItem().copy());
|
||||||
|
|
||||||
// Set the new upgrade
|
// Set the new upgrade
|
||||||
computer.setUpgrade(newUpgrade);
|
computer.setUpgrade(newUpgrade);
|
||||||
@ -88,14 +88,13 @@ public class PocketAPI implements ILuaAPI {
|
|||||||
public final Object[] unequipBack() {
|
public final Object[] unequipBack() {
|
||||||
var entity = computer.getEntity();
|
var entity = computer.getEntity();
|
||||||
if (!(entity instanceof Player player)) return new Object[]{ false, "Cannot find player" };
|
if (!(entity instanceof Player player)) return new Object[]{ false, "Cannot find player" };
|
||||||
var inventory = player.getInventory();
|
|
||||||
var previousUpgrade = computer.getUpgrade();
|
var previousUpgrade = computer.getUpgrade();
|
||||||
|
|
||||||
if (previousUpgrade == null) return new Object[]{ false, "Nothing to unequip" };
|
if (previousUpgrade == null) return new Object[]{ false, "Nothing to unequip" };
|
||||||
|
|
||||||
computer.setUpgrade(null);
|
computer.setUpgrade(null);
|
||||||
|
|
||||||
storeItem(player, previousUpgrade.getCraftingItem());
|
storeItem(player, previousUpgrade.getCraftingItem().copy());
|
||||||
|
|
||||||
return new Object[]{ true };
|
return new Object[]{ true };
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ package dan200.computercraft.shared.turtle.core;
|
|||||||
import dan200.computercraft.api.turtle.*;
|
import dan200.computercraft.api.turtle.*;
|
||||||
import dan200.computercraft.impl.TurtleUpgrades;
|
import dan200.computercraft.impl.TurtleUpgrades;
|
||||||
import dan200.computercraft.shared.turtle.TurtleUtil;
|
import dan200.computercraft.shared.turtle.TurtleUtil;
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
|
|
||||||
public class TurtleEquipCommand implements TurtleCommand {
|
public class TurtleEquipCommand implements TurtleCommand {
|
||||||
private final TurtleSide side;
|
private final TurtleSide side;
|
||||||
@ -19,32 +18,22 @@ public class TurtleEquipCommand implements TurtleCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TurtleCommandResult execute(ITurtleAccess turtle) {
|
public TurtleCommandResult execute(ITurtleAccess turtle) {
|
||||||
|
// Determine the upgrade to replace
|
||||||
|
var oldUpgrade = turtle.getUpgrade(side);
|
||||||
|
|
||||||
// Determine the upgrade to equipLeft
|
// Determine the upgrade to equipLeft
|
||||||
ITurtleUpgrade newUpgrade;
|
ITurtleUpgrade newUpgrade;
|
||||||
ItemStack newUpgradeStack;
|
|
||||||
var selectedStack = turtle.getInventory().getItem(turtle.getSelectedSlot());
|
var selectedStack = turtle.getInventory().getItem(turtle.getSelectedSlot());
|
||||||
if (!selectedStack.isEmpty()) {
|
if (!selectedStack.isEmpty()) {
|
||||||
newUpgradeStack = selectedStack.copy();
|
newUpgrade = TurtleUpgrades.instance().get(selectedStack);
|
||||||
newUpgrade = TurtleUpgrades.instance().get(newUpgradeStack);
|
|
||||||
if (newUpgrade == null) return TurtleCommandResult.failure("Not a valid upgrade");
|
if (newUpgrade == null) return TurtleCommandResult.failure("Not a valid upgrade");
|
||||||
} else {
|
} else {
|
||||||
newUpgradeStack = null;
|
|
||||||
newUpgrade = null;
|
newUpgrade = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine the upgrade to replace
|
|
||||||
ItemStack oldUpgradeStack;
|
|
||||||
var oldUpgrade = turtle.getUpgrade(side);
|
|
||||||
if (oldUpgrade != null) {
|
|
||||||
var craftingItem = oldUpgrade.getCraftingItem();
|
|
||||||
oldUpgradeStack = !craftingItem.isEmpty() ? craftingItem.copy() : null;
|
|
||||||
} else {
|
|
||||||
oldUpgradeStack = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the swapping:
|
// Do the swapping:
|
||||||
if (newUpgradeStack != null) turtle.getInventory().removeItem(turtle.getSelectedSlot(), 1);
|
if (newUpgrade != null) turtle.getInventory().removeItem(turtle.getSelectedSlot(), 1);
|
||||||
if (oldUpgradeStack != null) TurtleUtil.storeItemOrDrop(turtle, oldUpgradeStack);
|
if (oldUpgrade != null) TurtleUtil.storeItemOrDrop(turtle, oldUpgrade.getCraftingItem().copy());
|
||||||
turtle.setUpgrade(side, newUpgrade);
|
turtle.setUpgrade(side, newUpgrade);
|
||||||
|
|
||||||
// Animate
|
// Animate
|
||||||
|
Loading…
Reference in New Issue
Block a user