@@ -31,39 +31,45 @@ public class Trade {
3131 private final transient Trade fallbackTrade ;
3232 private final transient BigDecimal money ;
3333 private final transient ItemStack itemStack ;
34+ private final transient ItemGroupQuery itemGroupQuery ;
3435 private final transient Integer exp ;
3536 private final transient IEssentials ess ;
3637
3738 public Trade (final String command , final IEssentials ess ) {
38- this (command , null , null , null , null , ess );
39+ this (command , null , null , null , null , null , ess );
3940 }
4041
4142 public Trade (final String command , final Trade fallback , final IEssentials ess ) {
42- this (command , fallback , null , null , null , ess );
43+ this (command , fallback , null , null , null , null , ess );
4344 }
4445
4546 @ Deprecated
4647 public Trade (final double money , final com .earth2me .essentials .IEssentials ess ) {
47- this (null , null , BigDecimal .valueOf (money ), null , null , (IEssentials ) ess );
48+ this (null , null , BigDecimal .valueOf (money ), null , null , null , (IEssentials ) ess );
4849 }
4950
5051 public Trade (final BigDecimal money , final IEssentials ess ) {
51- this (null , null , money , null , null , ess );
52+ this (null , null , money , null , null , null , ess );
5253 }
5354
5455 public Trade (final ItemStack items , final IEssentials ess ) {
55- this (null , null , null , items , null , ess );
56+ this (null , null , null , items , null , null , ess );
5657 }
5758
5859 public Trade (final int exp , final IEssentials ess ) {
59- this (null , null , null , null , exp , ess );
60+ this (null , null , null , null , null , exp , ess );
6061 }
6162
62- private Trade (final String command , final Trade fallback , final BigDecimal money , final ItemStack item , final Integer exp , final IEssentials ess ) {
63+ public Trade (final ItemGroupQuery query , final IEssentials ess ){
64+ this (null , null , null , null , query , null , ess );
65+ }
66+
67+ private Trade (final String command , final Trade fallback , final BigDecimal money , final ItemStack item , final ItemGroupQuery groupQuery , final Integer exp , final IEssentials ess ) {
6368 this .command = command ;
6469 this .fallbackTrade = fallback ;
6570 this .money = money ;
6671 this .itemStack = item ;
72+ this .itemGroupQuery = groupQuery ;
6773 this .exp = exp ;
6874 this .ess = ess ;
6975 }
@@ -317,6 +323,17 @@ public void charge(final IUser user, final CompletableFuture<Boolean> future) {
317323 Inventories .removeItemAmount (user .getBase (), getItemStack (), getItemStack ().getAmount ());
318324 user .getBase ().updateInventory ();
319325 }
326+ if (getItemGroupQuery () != null ){
327+ if (ess .getSettings ().isDebug ()) {
328+ ess .getLogger ().log (Level .INFO , "charging user " + user .getName () + " itemgroup " +getItemGroupQuery ().toString ());
329+ }
330+ if (!Inventories .containsAtLeast (user .getBase (), ess , getItemGroupQuery ())) {
331+ future .completeExceptionally (new ChargeException (tl ("missingItems" , getItemGroupQuery ().getAmount (), "~" +getItemGroupQuery ().getItemGroup ().toLowerCase (Locale .ENGLISH ).replace ("_" , " " ))));
332+ return ;
333+ }
334+ Inventories .removeItemAmount (user .getBase (), ess , getItemGroupQuery ());
335+ user .getBase ().updateInventory ();
336+ }
320337 if (command != null ) {
321338 final BigDecimal cost = getCommandCost (user );
322339 if (!user .canAfford (cost ) && cost .signum () > 0 ) {
@@ -349,6 +366,10 @@ public ItemStack getItemStack() {
349366 return itemStack ;
350367 }
351368
369+ public ItemGroupQuery getItemGroupQuery () {
370+ return itemGroupQuery ;
371+ }
372+
352373 public Integer getExperience () {
353374 return exp ;
354375 }
0 commit comments