mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-09-27 06:42:57 +02:00
Add a helper method to NPCShopAction to save the inventory properly
This commit is contained in:
parent
c683b752a5
commit
3c314c1d3e
@ -101,19 +101,19 @@ public class CommandTrait extends Trait {
|
|||||||
return Transaction.success();
|
return Transaction.success();
|
||||||
if (nonZeroOrNegativeOne(cost) && !player.hasPermission("citizens.npc.command.ignoreerrors.cost")) {
|
if (nonZeroOrNegativeOne(cost) && !player.hasPermission("citizens.npc.command.ignoreerrors.cost")) {
|
||||||
action = new MoneyAction(cost);
|
action = new MoneyAction(cost);
|
||||||
if (!action.take(player, null, 1).isPossible()) {
|
if (!action.take(player, 1).isPossible()) {
|
||||||
sendErrorMessage(player, CommandTraitError.MISSING_MONEY, null, cost);
|
sendErrorMessage(player, CommandTraitError.MISSING_MONEY, null, cost);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (experienceCost > 0 && !player.hasPermission("citizens.npc.command.ignoreerrors.expcost")) {
|
if (experienceCost > 0 && !player.hasPermission("citizens.npc.command.ignoreerrors.expcost")) {
|
||||||
action = new ExperienceAction(experienceCost);
|
action = new ExperienceAction(experienceCost);
|
||||||
if (!action.take(player, null, 1).isPossible()) {
|
if (!action.take(player, 1).isPossible()) {
|
||||||
sendErrorMessage(player, CommandTraitError.MISSING_EXPERIENCE, null, experienceCost);
|
sendErrorMessage(player, CommandTraitError.MISSING_EXPERIENCE, null, experienceCost);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (itemRequirements.size() > 0 && !player.hasPermission("citizens.npc.command.ignoreerrors.itemcost")) {
|
if (itemRequirements.size() > 0 && !player.hasPermission("citizens.npc.command.ignoreerrors.itemcost")) {
|
||||||
action = new ItemAction(itemRequirements);
|
action = new ItemAction(itemRequirements);
|
||||||
if (!action.take(player, null, 1).isPossible()) {
|
if (!action.take(player, 1).isPossible()) {
|
||||||
ItemStack stack = itemRequirements.get(0);
|
ItemStack stack = itemRequirements.get(0);
|
||||||
sendErrorMessage(player, CommandTraitError.MISSING_ITEM, null, Util.prettyEnum(stack.getType()),
|
sendErrorMessage(player, CommandTraitError.MISSING_ITEM, null, Util.prettyEnum(stack.getType()),
|
||||||
stack.getAmount());
|
stack.getAmount());
|
||||||
@ -121,26 +121,26 @@ public class CommandTrait extends Trait {
|
|||||||
}
|
}
|
||||||
if (nonZeroOrNegativeOne(command.cost) && !player.hasPermission("citizens.npc.command.ignoreerrors.cost")) {
|
if (nonZeroOrNegativeOne(command.cost) && !player.hasPermission("citizens.npc.command.ignoreerrors.cost")) {
|
||||||
action = new MoneyAction(command.cost);
|
action = new MoneyAction(command.cost);
|
||||||
if (!action.take(player, null, 1).isPossible()) {
|
if (!action.take(player, 1).isPossible()) {
|
||||||
sendErrorMessage(player, CommandTraitError.MISSING_MONEY, null, command.cost);
|
sendErrorMessage(player, CommandTraitError.MISSING_MONEY, null, command.cost);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (command.experienceCost != -1 && !player.hasPermission("citizens.npc.command.ignoreerrors.expcost")) {
|
if (command.experienceCost != -1 && !player.hasPermission("citizens.npc.command.ignoreerrors.expcost")) {
|
||||||
action = new ExperienceAction(command.experienceCost);
|
action = new ExperienceAction(command.experienceCost);
|
||||||
if (!action.take(player, null, 1).isPossible()) {
|
if (!action.take(player, 1).isPossible()) {
|
||||||
sendErrorMessage(player, CommandTraitError.MISSING_EXPERIENCE, null, command.experienceCost);
|
sendErrorMessage(player, CommandTraitError.MISSING_EXPERIENCE, null, command.experienceCost);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (command.itemCost != null && command.itemCost.size() > 0
|
if (command.itemCost != null && command.itemCost.size() > 0
|
||||||
&& !player.hasPermission("citizens.npc.command.ignoreerrors.itemcost")) {
|
&& !player.hasPermission("citizens.npc.command.ignoreerrors.itemcost")) {
|
||||||
action = new ItemAction(command.itemCost);
|
action = new ItemAction(command.itemCost);
|
||||||
if (!action.take(player, null, 1).isPossible()) {
|
if (!action.take(player, 1).isPossible()) {
|
||||||
ItemStack stack = command.itemCost.get(0);
|
ItemStack stack = command.itemCost.get(0);
|
||||||
sendErrorMessage(player, CommandTraitError.MISSING_ITEM, null, Util.prettyEnum(stack.getType()),
|
sendErrorMessage(player, CommandTraitError.MISSING_ITEM, null, Util.prettyEnum(stack.getType()),
|
||||||
stack.getAmount());
|
stack.getAmount());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return action == null ? Transaction.success() : action.take(player, null, 1);
|
return action == null ? Transaction.success() : action.take(player, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clear() {
|
public void clear() {
|
||||||
|
@ -5,6 +5,7 @@ import java.util.function.Consumer;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
@ -12,6 +13,7 @@ import com.google.common.collect.Lists;
|
|||||||
import net.citizensnpcs.api.gui.InventoryMenuPage;
|
import net.citizensnpcs.api.gui.InventoryMenuPage;
|
||||||
import net.citizensnpcs.api.persistence.PersistenceLoader;
|
import net.citizensnpcs.api.persistence.PersistenceLoader;
|
||||||
import net.citizensnpcs.api.persistence.PersisterRegistry;
|
import net.citizensnpcs.api.persistence.PersisterRegistry;
|
||||||
|
import net.citizensnpcs.util.InventoryMultiplexer;
|
||||||
|
|
||||||
public abstract class NPCShopAction implements Cloneable {
|
public abstract class NPCShopAction implements Cloneable {
|
||||||
@Override
|
@Override
|
||||||
@ -29,8 +31,32 @@ public abstract class NPCShopAction implements Cloneable {
|
|||||||
|
|
||||||
public abstract Transaction grant(Entity entity, ItemStack[] inventory, int repeats);
|
public abstract Transaction grant(Entity entity, ItemStack[] inventory, int repeats);
|
||||||
|
|
||||||
|
public Transaction grant(Player entity, int repeats) {
|
||||||
|
InventoryMultiplexer im = new InventoryMultiplexer(entity.getInventory());
|
||||||
|
Transaction tx = grant(entity, im.getInventory(), repeats);
|
||||||
|
return Transaction.create(tx::isPossible, () -> {
|
||||||
|
tx.run();
|
||||||
|
im.save();
|
||||||
|
}, () -> {
|
||||||
|
tx.rollback();
|
||||||
|
im.save();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public abstract Transaction take(Entity entity, ItemStack[] inventory, int repeats);
|
public abstract Transaction take(Entity entity, ItemStack[] inventory, int repeats);
|
||||||
|
|
||||||
|
public Transaction take(Player entity, int repeats) {
|
||||||
|
InventoryMultiplexer im = new InventoryMultiplexer(entity.getInventory());
|
||||||
|
Transaction tx = take(entity, im.getInventory(), repeats);
|
||||||
|
return Transaction.create(tx::isPossible, () -> {
|
||||||
|
tx.run();
|
||||||
|
im.save();
|
||||||
|
}, () -> {
|
||||||
|
tx.rollback();
|
||||||
|
im.save();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public static interface GUI {
|
public static interface GUI {
|
||||||
public InventoryMenuPage createEditor(NPCShopAction previous, Consumer<NPCShopAction> callback);
|
public InventoryMenuPage createEditor(NPCShopAction previous, Consumer<NPCShopAction> callback);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user