- gui now configurable per rank
- fix item requirement
This commit is contained in:
okx-code
2020-04-10 13:01:05 +01:00
parent 1cd507d836
commit c553ee0462
72 changed files with 499 additions and 226 deletions
@@ -1,7 +1,6 @@
package sh.okx.rankup.requirements;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
public interface DeductibleRequirement {
/**
@@ -1,15 +1,14 @@
package sh.okx.rankup.requirements;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.requirements.Requirement;
import sh.okx.rankup.RankupPlugin;
public abstract class ProgressiveRequirement extends Requirement {
public ProgressiveRequirement(Rankup plugin, String name) {
public ProgressiveRequirement(RankupPlugin plugin, String name) {
super(plugin, name);
}
public ProgressiveRequirement(Rankup plugin, String name, boolean subRequirement) {
public ProgressiveRequirement(RankupPlugin plugin, String name, boolean subRequirement) {
super(plugin, name, subRequirement);
}
@@ -2,10 +2,10 @@ package sh.okx.rankup.requirements;
import lombok.Getter;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
public abstract class Requirement implements Cloneable {
protected final Rankup plugin;
protected final RankupPlugin plugin;
@Getter
protected final String name;
private String value;
@@ -13,11 +13,11 @@ public abstract class Requirement implements Cloneable {
private String sub;
private boolean subRequirement;
public Requirement(Rankup plugin, String name) {
public Requirement(RankupPlugin plugin, String name) {
this(plugin, name, false);
}
public Requirement(Rankup plugin, String name, boolean subRequirement) {
public Requirement(RankupPlugin plugin, String name, boolean subRequirement) {
this.plugin = plugin;
this.name = name;
this.subRequirement = subRequirement;
@@ -2,7 +2,6 @@ package sh.okx.rankup.requirements;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
@@ -28,11 +27,17 @@ public class RequirementRegistry {
return null;
}
public Set<Requirement> getRequirements(List<String> list) {
public Set<Requirement> getRequirements(Iterable<String> list) {
Set<Requirement> requirements = new HashSet<>();
for (String req : list) {
String[] parts = req.split(" ", 2);
if (parts.length < 2) {
throw new IllegalArgumentException("For requirement: '" + req + "'. Requirements must contain a space between" +
" the name of the requirement and the value of the requirement. If it already looks like it has a space, " +
"make sure it is not a tab or has an invisible character.");
}
String name = parts[0];
String value = parts[1];
Requirement requirement = newRequirement(name, value);
@@ -1,12 +1,12 @@
package sh.okx.rankup.requirements;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.requirement.XpLevelRequirement;
public class XpLevelDeductibleRequirement extends XpLevelRequirement implements DeductibleRequirement {
public XpLevelDeductibleRequirement(Rankup plugin, String name) {
public XpLevelDeductibleRequirement(RankupPlugin plugin, String name) {
super(plugin, name);
}
@@ -3,12 +3,12 @@ package sh.okx.rankup.requirements.requirement;
import org.bukkit.Material;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class BlockBreakRequirement extends ProgressiveRequirement {
public BlockBreakRequirement(Rankup plugin) {
public BlockBreakRequirement(RankupPlugin plugin) {
super(plugin, "block-break", true);
}
@@ -3,12 +3,12 @@ package sh.okx.rankup.requirements.requirement;
import org.bukkit.Material;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class CraftItemRequirement extends ProgressiveRequirement {
public CraftItemRequirement(Rankup plugin) {
public CraftItemRequirement(RankupPlugin plugin) {
super(plugin, "craft-item", true);
}
@@ -1,11 +1,11 @@
package sh.okx.rankup.requirements.requirement;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
public class GroupRequirement extends Requirement {
public GroupRequirement(Rankup plugin) {
public GroupRequirement(RankupPlugin plugin) {
super(plugin, "group");
}
@@ -1,15 +1,14 @@
package sh.okx.rankup.requirements.requirement;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.DeductibleRequirement;
import sh.okx.rankup.requirements.Requirement;
public class ItemDeductibleRequirement extends ItemRequirement implements DeductibleRequirement {
public ItemDeductibleRequirement(Rankup plugin, String name) {
public ItemDeductibleRequirement(RankupPlugin plugin, String name) {
super(plugin, name);
}
@@ -19,11 +18,28 @@ public class ItemDeductibleRequirement extends ItemRequirement implements Deduct
@Override
public void apply(Player player, double multiplier) {
Material type = Material.matchMaterial(getSub());
if (type == null) {
throw new IllegalArgumentException("Invalid item " + getSub());
int count = (int) (getTotal(player) * multiplier);
ItemStack[] contents = player.getInventory().getStorageContents();
for (int i = 0; i < contents.length && count > 0; i++) {
ItemStack item = contents[i];
if (matchItem(item)) {
if (count < item.getAmount()) {
item.setAmount(item.getAmount() - count);
count = 0;
} else {
count -= item.getAmount();
contents[i] = null;
}
}
}
player.getInventory().setStorageContents(contents);
if (count > 0) {
throw new IllegalStateException("REPORT THIS ERROR TO THE DEV - COULD NOT DEDUCT ALL ITEMS");
}
player.getInventory().removeItem(new ItemStack(type, (int) (getValueInt() * multiplier)));
}
@Override
@@ -3,15 +3,14 @@ package sh.okx.rankup.requirements.requirement;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.requirements.DeductibleRequirement;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
import java.util.Arrays;
public class ItemRequirement extends ProgressiveRequirement {
public ItemRequirement(Rankup plugin, String name) {
public ItemRequirement(RankupPlugin plugin, String name) {
super(plugin, name, true);
}
@@ -26,9 +25,37 @@ public class ItemRequirement extends ProgressiveRequirement {
@Override
public double getProgress(Player player) {
Material material = Material.matchMaterial(getSub());
return Arrays.stream(player.getInventory().getContents())
.filter(item -> item != null && item.getType() == material)
return Arrays.stream(player.getInventory().getStorageContents())
.filter(this::matchItem)
.mapToInt(ItemStack::getAmount).sum();
}
protected boolean matchItem(ItemStack item) {
if (item == null) {
return false;
}
String sub = getSub();
String[] parts = sub.split(":");
Material material = Material.matchMaterial(parts[0]);
if (material == null) {
throw new IllegalArgumentException("[item requirement] could not find material name: " + parts[0]);
}
if (parts.length > 1) {
int durability;
try {
durability = Integer.parseInt(parts[1]);
} catch (NumberFormatException e) {
throw new IllegalArgumentException("[item requirement] durability '" + parts[1] + "' must be a number in item: '" + sub + "'");
}
if (durability != item.getDurability()) {
return false;
}
}
return material == item.getType();
}
}
@@ -3,14 +3,14 @@ package sh.okx.rankup.requirements.requirement;
import org.bukkit.Statistic;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
import java.util.Objects;
public class MobKillsRequirement extends ProgressiveRequirement {
public MobKillsRequirement(Rankup plugin) {
public MobKillsRequirement(RankupPlugin plugin) {
super(plugin, "mob-kills", true);
}
@@ -2,13 +2,13 @@ package sh.okx.rankup.requirements.requirement;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.DeductibleRequirement;
import sh.okx.rankup.requirements.Requirement;
public class MoneyDeductibleRequirement extends MoneyRequirement implements DeductibleRequirement {
public MoneyDeductibleRequirement(Rankup plugin, String name) {
public MoneyDeductibleRequirement(RankupPlugin plugin, String name) {
super(plugin, name);
}
@@ -1,12 +1,12 @@
package sh.okx.rankup.requirements.requirement;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class MoneyRequirement extends ProgressiveRequirement {
public MoneyRequirement(Rankup plugin, String name) {
public MoneyRequirement(RankupPlugin plugin, String name) {
super(plugin, name);
}
@@ -1,11 +1,11 @@
package sh.okx.rankup.requirements.requirement;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
public class PermissionRequirement extends Requirement {
public PermissionRequirement(Rankup plugin) {
public PermissionRequirement(RankupPlugin plugin) {
super(plugin, "permission");
}
@@ -2,7 +2,7 @@ package sh.okx.rankup.requirements.requirement;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
@@ -10,7 +10,7 @@ public class PlaceholderRequirement extends ProgressiveRequirement {
public static final double DELTA = 0.00001D;
public PlaceholderRequirement(Rankup plugin) {
public PlaceholderRequirement(RankupPlugin plugin) {
super(plugin, "placeholder");
}
@@ -2,12 +2,12 @@ package sh.okx.rankup.requirements.requirement;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class PlayerKillsRequirement extends ProgressiveRequirement {
public PlayerKillsRequirement(Rankup plugin) {
public PlayerKillsRequirement(RankupPlugin plugin) {
super(plugin, "player-kills");
}
@@ -2,7 +2,7 @@ package sh.okx.rankup.requirements.requirement;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
@@ -10,7 +10,7 @@ public class PlaytimeMinutesRequirement extends ProgressiveRequirement {
private static final int TICKS_PER_MINUTE = 20 * 60;
private Statistic playOneTick;
public PlaytimeMinutesRequirement(Rankup plugin) {
public PlaytimeMinutesRequirement(RankupPlugin plugin) {
super(plugin, "playtime-minutes");
try {
playOneTick = Statistic.valueOf("PLAY_ONE_MINUTE");
@@ -1,12 +1,12 @@
package sh.okx.rankup.requirements.requirement;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.DeductibleRequirement;
import sh.okx.rankup.requirements.requirement.tokenmanager.TokensRequirement;
public class TokensDeductibleRequirement extends TokensRequirement implements DeductibleRequirement {
public TokensDeductibleRequirement(Rankup plugin, String name) {
public TokensDeductibleRequirement(RankupPlugin plugin, String name) {
super(plugin, name);
}
@@ -2,12 +2,12 @@ package sh.okx.rankup.requirements.requirement;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class TotalMobKillsRequirement extends ProgressiveRequirement {
public TotalMobKillsRequirement(Rankup plugin) {
public TotalMobKillsRequirement(RankupPlugin plugin) {
super(plugin, "total-mob-kills");
}
@@ -3,12 +3,12 @@ package sh.okx.rankup.requirements.requirement;
import org.bukkit.Material;
import org.bukkit.Statistic;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class UseItemRequirement extends ProgressiveRequirement {
public UseItemRequirement(Rankup plugin) {
public UseItemRequirement(RankupPlugin plugin) {
super(plugin, "use-item", true);
}
@@ -1,11 +1,11 @@
package sh.okx.rankup.requirements.requirement;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
public class WorldRequirement extends Requirement {
public WorldRequirement(Rankup plugin) {
public WorldRequirement(RankupPlugin plugin) {
super(plugin, "world");
}
@@ -1,12 +1,12 @@
package sh.okx.rankup.requirements.requirement;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class XpLevelRequirement extends ProgressiveRequirement {
public XpLevelRequirement(Rankup plugin, String name) {
public XpLevelRequirement(RankupPlugin plugin, String name) {
super(plugin, name);
}
@@ -3,11 +3,11 @@ package sh.okx.rankup.requirements.requirement.advancedachievements;
import com.hm.achievement.api.AdvancedAchievementsAPI;
import com.hm.achievement.api.AdvancedAchievementsAPIFetcher;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
public class AdvancedAchievementsAchievementRequirement extends Requirement {
public AdvancedAchievementsAchievementRequirement(Rankup plugin) {
public AdvancedAchievementsAchievementRequirement(RankupPlugin plugin) {
super(plugin, "advancedachievements-achievement");
}
@@ -2,12 +2,12 @@ package sh.okx.rankup.requirements.requirement.advancedachievements;
import com.hm.achievement.api.AdvancedAchievementsAPIFetcher;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
import sh.okx.rankup.requirements.ProgressiveRequirement;
public class AdvancedAchievementsTotalRequirement extends ProgressiveRequirement {
public AdvancedAchievementsTotalRequirement(Rankup plugin) {
public AdvancedAchievementsTotalRequirement(RankupPlugin plugin) {
super(plugin, "advancedachievements-total");
}
@@ -2,12 +2,12 @@ package sh.okx.rankup.requirements.requirement.mcmmo;
import com.gmail.nossr50.util.player.UserManager;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
import sh.okx.rankup.requirements.ProgressiveRequirement;
public class McMMOPowerLevelRequirement extends ProgressiveRequirement {
public McMMOPowerLevelRequirement(Rankup plugin) {
public McMMOPowerLevelRequirement(RankupPlugin plugin) {
super(plugin, "mcmmo-power-level");
}
@@ -1,12 +1,12 @@
package sh.okx.rankup.requirements.requirement.mcmmo;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
import sh.okx.rankup.requirements.ProgressiveRequirement;
public class McMMOSkillRequirement extends ProgressiveRequirement {
public McMMOSkillRequirement(Rankup plugin) {
public McMMOSkillRequirement(RankupPlugin plugin) {
super(plugin, "mcmmo", true);
}
@@ -4,13 +4,13 @@ import java.util.Objects;
import me.realized.tokenmanager.api.TokenManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
public class TokensRequirement extends ProgressiveRequirement {
protected final TokenManager manager = (TokenManager) Objects.requireNonNull(Bukkit.getPluginManager().getPlugin("TokenManager"));
public TokensRequirement(Rankup plugin, String name) {
public TokensRequirement(RankupPlugin plugin, String name) {
super(plugin, name);
}
@@ -1,12 +1,12 @@
package sh.okx.rankup.requirements.requirement.towny;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class TownyKingNumberResidentsRequirement extends ProgressiveRequirement {
public TownyKingNumberResidentsRequirement(Rankup plugin) {
public TownyKingNumberResidentsRequirement(RankupPlugin plugin) {
super(plugin, "towny-king-residents");
}
@@ -1,12 +1,12 @@
package sh.okx.rankup.requirements.requirement.towny;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class TownyKingNumberTownsRequirement extends ProgressiveRequirement {
public TownyKingNumberTownsRequirement(Rankup plugin) {
public TownyKingNumberTownsRequirement(RankupPlugin plugin) {
super(plugin, "towny-king-towns");
}
@@ -1,11 +1,11 @@
package sh.okx.rankup.requirements.requirement.towny;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
public class TownyKingRequirement extends Requirement {
public TownyKingRequirement(Rankup plugin) {
public TownyKingRequirement(RankupPlugin plugin) {
super(plugin, "towny-king");
}
@@ -1,12 +1,12 @@
package sh.okx.rankup.requirements.requirement.towny;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.ProgressiveRequirement;
import sh.okx.rankup.requirements.Requirement;
public class TownyMayorNumberResidentsRequirement extends ProgressiveRequirement {
public TownyMayorNumberResidentsRequirement(Rankup plugin) {
public TownyMayorNumberResidentsRequirement(RankupPlugin plugin) {
super(plugin, "towny-mayor-residents");
}
@@ -1,11 +1,11 @@
package sh.okx.rankup.requirements.requirement.towny;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
public class TownyMayorRequirement extends Requirement {
public TownyMayorRequirement(Rankup plugin) {
public TownyMayorRequirement(RankupPlugin plugin) {
super(plugin, "towny-mayor");
}
@@ -1,11 +1,11 @@
package sh.okx.rankup.requirements.requirement.towny;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
public class TownyResidentRequirement extends Requirement {
public TownyResidentRequirement(Rankup plugin) {
public TownyResidentRequirement(RankupPlugin plugin) {
super(plugin, "towny-resident");
}
@@ -2,12 +2,12 @@ package sh.okx.rankup.requirements.requirement.votingplugin;
import com.Ben12345rocks.VotingPlugin.UserManager.UserManager;
import org.bukkit.entity.Player;
import sh.okx.rankup.Rankup;
import sh.okx.rankup.RankupPlugin;
import sh.okx.rankup.requirements.Requirement;
import sh.okx.rankup.requirements.ProgressiveRequirement;
public class VotingPluginVotesRequirement extends ProgressiveRequirement {
public VotingPluginVotesRequirement(Rankup plugin) {
public VotingPluginVotesRequirement(RankupPlugin plugin) {
super(plugin, "votingplugin-votes");
}