9
0
mirror of https://gitlab.com/SamB440/rpgregions-2.git synced 2026-01-04 15:31:38 +00:00

feature: Add PlaceholderConsoleCommandReward

This commit is contained in:
SamB440
2022-05-28 17:28:24 +01:00
parent 44bb28757d
commit 9e47c3a6b5
3 changed files with 116 additions and 13 deletions

View File

@@ -3,13 +3,14 @@ package net.islandearth.rpgregions.requirements;
import me.clip.placeholderapi.PlaceholderAPI;
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
import net.islandearth.rpgregions.gui.GuiEditable;
import net.islandearth.rpgregions.utils.PlaceholderCompareType;
import org.bukkit.Material;
import org.bukkit.entity.Player;
public class PlaceholderRequirement extends RegionRequirement {
@GuiEditable(value = "Compare type", icon = Material.COMMAND_BLOCK)
private final CompareType integerCompareType;
private final PlaceholderCompareType integerCompareType;
@GuiEditable(value = "The Placeholder", icon = Material.PAPER)
private final String placeholder;
@GuiEditable(value = "Value to equal, or compare (e.g 5-10). Supports doubles.", icon = Material.JUNGLE_SIGN)
@@ -21,7 +22,7 @@ public class PlaceholderRequirement extends RegionRequirement {
public PlaceholderRequirement(IRPGRegionsAPI api, String placeholder, String equal) {
super(api);
this.integerCompareType = CompareType.GREATER_THAN_OR_EQUAL_TO;
this.integerCompareType = PlaceholderCompareType.GREATER_THAN_OR_EQUAL_TO;
this.placeholder = placeholder;
this.equal = equal;
}
@@ -30,7 +31,7 @@ public class PlaceholderRequirement extends RegionRequirement {
public boolean meetsRequirements(Player player) {
try {
double parsedNumber = Double.parseDouble(PlaceholderAPI.setPlaceholders(player, placeholder));
if (integerCompareType == CompareType.RANGE) {
if (integerCompareType == PlaceholderCompareType.RANGE) {
double lower = Double.parseDouble(equal.split("-")[0]);
double upper = Double.parseDouble(equal.split("-")[1]);
return parsedNumber >= lower && parsedNumber <= upper;
@@ -69,7 +70,12 @@ public class PlaceholderRequirement extends RegionRequirement {
}
return false;
}
@Override
public String getPluginRequirement() {
return "PlaceholderAPI";
}
@Override
public String getName() {
return "Placeholder";
@@ -87,13 +93,4 @@ public class PlaceholderRequirement extends RegionRequirement {
public String getEqual() {
return equal;
}
public enum CompareType {
GREATER_THAN,
EQUAL_TO,
GREATER_THAN_OR_EQUAL_TO,
LESS_THAN,
LESS_THAN_OR_EQUAL_TO,
RANGE
}
}

View File

@@ -0,0 +1,96 @@
package net.islandearth.rpgregions.rewards;
import me.clip.placeholderapi.PlaceholderAPI;
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
import net.islandearth.rpgregions.gui.GuiEditable;
import net.islandearth.rpgregions.utils.PlaceholderCompareType;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
public class PlaceholderConsoleCommandReward extends DiscoveryReward {
@GuiEditable(value = "Command", icon = Material.STICK)
private final String command;
@GuiEditable(value = "Compare type", icon = Material.COMMAND_BLOCK)
private final PlaceholderCompareType integerCompareType;
@GuiEditable(value = "The Placeholder", icon = Material.PAPER)
private final String placeholder;
@GuiEditable(value = "Value to equal, or compare (e.g 5-10). Supports doubles.", icon = Material.JUNGLE_SIGN)
private final String equal;
public PlaceholderConsoleCommandReward(IRPGRegionsAPI api) {
this(api, "", "");
}
public PlaceholderConsoleCommandReward(IRPGRegionsAPI api, String placeholder, String equal) {
super(api);
this.integerCompareType = PlaceholderCompareType.GREATER_THAN_OR_EQUAL_TO;
this.placeholder = placeholder;
this.equal = equal;
this.command = "say example";
}
@Override
public void award(Player player) {
if (hasPlaceholder(player)) {
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), PlaceholderAPI.setPlaceholders(player, command.replace("%player%", player.getName())));
}
}
private boolean hasPlaceholder(Player player) {
try {
double parsedNumber = Double.parseDouble(PlaceholderAPI.setPlaceholders(player, placeholder));
if (integerCompareType == PlaceholderCompareType.RANGE) {
double lower = Double.parseDouble(equal.split("-")[0]);
double upper = Double.parseDouble(equal.split("-")[1]);
return parsedNumber >= lower && parsedNumber <= upper;
}
double number = Double.parseDouble(equal);
switch (integerCompareType) {
case GREATER_THAN:
if (parsedNumber > number) {
return true;
}
break;
case GREATER_THAN_OR_EQUAL_TO:
if (parsedNumber >= number) {
return true;
}
break;
case EQUAL_TO:
if (parsedNumber == number) {
return true;
}
break;
case LESS_THAN:
if (parsedNumber < number) {
return true;
}
break;
case LESS_THAN_OR_EQUAL_TO:
if (parsedNumber <= number) {
return true;
}
break;
}
} catch (NumberFormatException e) {
return PlaceholderAPI.setPlaceholders(player, placeholder).equals(equal);
}
return false;
}
@Override
public String getPluginRequirement() {
return "PlaceholderAPI";
}
@Override
public String getName() {
return "Placeholder Console Command Reward";
}
}

View File

@@ -0,0 +1,10 @@
package net.islandearth.rpgregions.utils;
public enum PlaceholderCompareType {
GREATER_THAN,
EQUAL_TO,
GREATER_THAN_OR_EQUAL_TO,
LESS_THAN,
LESS_THAN_OR_EQUAL_TO,
RANGE
}