1.8 support for item requirement

This commit is contained in:
okx-code
2021-06-28 05:20:44 +01:00
parent 9b37409479
commit a8ea917638
2 changed files with 34 additions and 3 deletions
@@ -2,6 +2,7 @@ package sh.okx.rankup.requirements.requirement;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.DeductibleRequirement;
import sh.okx.rankup.requirements.Requirement;
@@ -20,7 +21,13 @@ public class ItemDeductibleRequirement extends ItemRequirement implements Deduct
public void apply(Player player, double multiplier) {
int count = (int) (getTotal(player) * multiplier);
ItemStack[] contents = player.getInventory().getStorageContents();
PlayerInventory inventory = player.getInventory();
ItemStack[] contents;
if (ItemRequirement.USE_STORAGE_CONTENTS) {
contents = inventory.getStorageContents();
} else {
contents = inventory.getContents();
}
for (int i = 0; i < contents.length && count > 0; i++) {
ItemStack item = contents[i];
@@ -35,7 +42,11 @@ public class ItemDeductibleRequirement extends ItemRequirement implements Deduct
}
}
player.getInventory().setStorageContents(contents);
if (ItemRequirement.USE_STORAGE_CONTENTS) {
inventory.setStorageContents(contents);
} else {
inventory.setContents(contents);
}
if (count > 0) {
throw new IllegalStateException("REPORT THIS ERROR TO THE DEV - COULD NOT DEDUCT ALL ITEMS");
@@ -2,7 +2,9 @@ package sh.okx.rankup.requirements.requirement;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
@@ -10,6 +12,17 @@ import sh.okx.rankup.requirements.Requirement;
import java.util.Arrays;
public class ItemRequirement extends ProgressiveRequirement {
public static boolean USE_STORAGE_CONTENTS;
static {
try {
Inventory.class.getMethod("getStorageContents");
USE_STORAGE_CONTENTS = true;
} catch (NoSuchMethodException e) {
USE_STORAGE_CONTENTS = false;
}
}
public ItemRequirement(RankupPlugin plugin, String name) {
super(plugin, name, true);
}
@@ -25,7 +38,14 @@ public class ItemRequirement extends ProgressiveRequirement {
@Override
public double getProgress(Player player) {
return Arrays.stream(player.getInventory().getStorageContents())
PlayerInventory inventory = player.getInventory();
ItemStack[] contents;
if (USE_STORAGE_CONTENTS) {
contents = inventory.getStorageContents();
} else {
contents = inventory.getContents();
}
return Arrays.stream(contents)
.filter(this::matchItem)
.mapToInt(ItemStack::getAmount).sum();
}