Performs some minor changes
Changes some warning messages to info Displays sign creation cost when unable to create a paid sign Changes spigot dependency to 1.19 Refunds the player during reload/startup when a tracked sign's physical sign has been destroyed
This commit is contained in:
parent
b1aefdd9d9
commit
35e0666a1d
2
pom.xml
2
pom.xml
@ -73,7 +73,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.18.1-R0.1-SNAPSHOT</version>
|
<version>1.19-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -87,7 +87,7 @@ public final class Translator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
PaidSigns.getInstance().getLogger().log(Level.WARNING, "Loading custom strings...");
|
PaidSigns.getInstance().getLogger().log(Level.INFO, "Loading custom strings...");
|
||||||
return loadTranslatableMessages(language, new BufferedReader(new InputStreamReader(new FileInputStream(strings))));
|
return loadTranslatableMessages(language, new BufferedReader(new InputStreamReader(new FileInputStream(strings))));
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
PaidSigns.getInstance().getLogger().log(Level.WARNING, "Unable to load custom messages");
|
PaidSigns.getInstance().getLogger().log(Level.WARNING, "Unable to load custom messages");
|
||||||
|
@ -71,14 +71,13 @@ public class SignListener implements Listener {
|
|||||||
double cost = paidSign.getCost();
|
double cost = paidSign.getCost();
|
||||||
boolean canAfford = EconomyManager.canAfford(player, cost);
|
boolean canAfford = EconomyManager.canAfford(player, cost);
|
||||||
if (!canAfford) {
|
if (!canAfford) {
|
||||||
player.sendMessage(StringFormatter.getTranslatedErrorMessage(TranslatableMessage.ERROR_CANNOT_AFFORD));
|
player.sendMessage(replaceCost(cost, StringFormatter.getTranslatedErrorMessage(
|
||||||
|
TranslatableMessage.ERROR_CANNOT_AFFORD)));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else {
|
} else {
|
||||||
String unit = EconomyManager.getCurrency(cost != 1);
|
|
||||||
EconomyManager.withdraw(player, cost);
|
EconomyManager.withdraw(player, cost);
|
||||||
player.sendMessage(String.format(StringFormatter.replacePlaceholders(
|
player.sendMessage(replaceCost(cost, StringFormatter.getTranslatedInfoMessage(
|
||||||
StringFormatter.getTranslatedInfoMessage(TranslatableMessage.SUCCESS_PAID_FOR_SIGN),
|
TranslatableMessage.SUCCESS_PAID_FOR_SIGN)));
|
||||||
new String[]{"{cost}", "{unit}"}, new String[]{"%.2f", "%s"}), cost, unit));
|
|
||||||
try {
|
try {
|
||||||
TrackedSignManager.addTrackedSign(event.getBlock().getLocation(), player.getUniqueId(), cost);
|
TrackedSignManager.addTrackedSign(event.getBlock().getLocation(), player.getUniqueId(), cost);
|
||||||
} catch (IOException ignored) {
|
} catch (IOException ignored) {
|
||||||
@ -86,4 +85,17 @@ public class SignListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces cost and unit placeholders in the given message
|
||||||
|
*
|
||||||
|
* @param cost <p>The cost to insert</p>
|
||||||
|
* @param message <p>The original message to replace the cost placeholder for</p>
|
||||||
|
* @return <p>The message with the cost instead of the cost placeholder</p>
|
||||||
|
*/
|
||||||
|
private String replaceCost(double cost, String message) {
|
||||||
|
String unit = EconomyManager.getCurrency(cost != 1);
|
||||||
|
return String.format(StringFormatter.replacePlaceholders(message, new String[]{"{cost}", "{unit}"},
|
||||||
|
new String[]{"%.2f", "%s"}), cost, unit);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ public final class PaidSignManager {
|
|||||||
YamlConfiguration configuration = YamlConfiguration.loadConfiguration(signsFile);
|
YamlConfiguration configuration = YamlConfiguration.loadConfiguration(signsFile);
|
||||||
ConfigurationSection signSection = configuration.getConfigurationSection("paidSigns");
|
ConfigurationSection signSection = configuration.getConfigurationSection("paidSigns");
|
||||||
if (signSection == null) {
|
if (signSection == null) {
|
||||||
PaidSigns.getInstance().getLogger().log(Level.WARNING, "Signs section not found in data.yml");
|
PaidSigns.getInstance().getLogger().log(Level.INFO, "Signs section not found in data.yml");
|
||||||
return new HashMap<>();
|
return new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.InvalidConfigurationException;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -59,18 +58,7 @@ public final class TrackedSignManager {
|
|||||||
TrackedSign trackedSign = trackedSigns.get(signLocation);
|
TrackedSign trackedSign = trackedSigns.get(signLocation);
|
||||||
trackedSigns.remove(signLocation);
|
trackedSigns.remove(signLocation);
|
||||||
saveTrackedSigns();
|
saveTrackedSigns();
|
||||||
if (!PaidSigns.getInstance().areRefundsEnabled() || !refund) {
|
refund(trackedSign, refund);
|
||||||
return;
|
|
||||||
}
|
|
||||||
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(trackedSign.getPlayerId());
|
|
||||||
double refundSum = trackedSign.getCost() / 100 * PaidSigns.getInstance().getRefundPercentage();
|
|
||||||
EconomyManager.deposit(offlinePlayer, refundSum);
|
|
||||||
if (offlinePlayer instanceof Player player) {
|
|
||||||
player.sendMessage(String.format(StringFormatter.replacePlaceholders(
|
|
||||||
StringFormatter.getTranslatedInfoMessage(TranslatableMessage.SUCCESS_REFUNDED),
|
|
||||||
new String[]{"{cost}", "{unit}"}, new String[]{"%.2f", "%s"}), refundSum,
|
|
||||||
EconomyManager.getCurrency(refundSum != 1)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -82,17 +70,12 @@ public final class TrackedSignManager {
|
|||||||
trackedSigns = new HashMap<>();
|
trackedSigns = new HashMap<>();
|
||||||
|
|
||||||
if (signSection == null) {
|
if (signSection == null) {
|
||||||
PaidSigns.getInstance().getLogger().log(Level.WARNING, "Tracked signs section not found in data.yml");
|
PaidSigns.getInstance().getLogger().log(Level.INFO, "Tracked signs section not found in data.yml");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String key : signSection.getKeys(false)) {
|
for (String key : signSection.getKeys(false)) {
|
||||||
try {
|
|
||||||
loadSign(signSection, key);
|
loadSign(signSection, key);
|
||||||
} catch (InvalidConfigurationException e) {
|
|
||||||
PaidSigns.getInstance().getLogger().log(Level.SEVERE, "Unable to load sign " + key + ": " +
|
|
||||||
e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,9 +84,8 @@ public final class TrackedSignManager {
|
|||||||
*
|
*
|
||||||
* @param signSection <p>The configuration section containing signs</p>
|
* @param signSection <p>The configuration section containing signs</p>
|
||||||
* @param key <p>The sign key which is also the sign's location</p>
|
* @param key <p>The sign key which is also the sign's location</p>
|
||||||
* @throws InvalidConfigurationException <p>If unable to load the sign</p>
|
|
||||||
*/
|
*/
|
||||||
private static void loadSign(ConfigurationSection signSection, String key) throws InvalidConfigurationException {
|
private static void loadSign(ConfigurationSection signSection, String key) {
|
||||||
String[] locationParts = key.split(",");
|
String[] locationParts = key.split(",");
|
||||||
Location signLocation;
|
Location signLocation;
|
||||||
try {
|
try {
|
||||||
@ -111,20 +93,23 @@ public final class TrackedSignManager {
|
|||||||
Double.parseDouble(locationParts[1]), Double.parseDouble(locationParts[2]),
|
Double.parseDouble(locationParts[1]), Double.parseDouble(locationParts[2]),
|
||||||
Double.parseDouble(locationParts[3]));
|
Double.parseDouble(locationParts[3]));
|
||||||
} catch (NumberFormatException exception) {
|
} catch (NumberFormatException exception) {
|
||||||
throw new InvalidConfigurationException("Invalid sign coordinates");
|
PaidSigns.getInstance().getLogger().log(Level.SEVERE, "Unable to load tracked sign " + key + ": " +
|
||||||
}
|
exception.getMessage());
|
||||||
|
|
||||||
//Prevent destroyed signs from being tracked indefinitely
|
|
||||||
if (!(signLocation.getBlock().getState() instanceof Sign)) {
|
|
||||||
PaidSigns.getInstance().getLogger().log(Level.WARNING, "The sign at " + signLocation + " no longer " +
|
|
||||||
"exists. Removing from sign tracker.");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
double cost = signSection.getDouble(key + ".cost");
|
double cost = signSection.getDouble(key + ".cost");
|
||||||
UUID playerId = UUID.fromString(Objects.requireNonNull(signSection.getString(key + ".playerId")));
|
UUID playerId = UUID.fromString(Objects.requireNonNull(signSection.getString(key + ".playerId")));
|
||||||
|
|
||||||
TrackedSign trackedSign = new TrackedSign(playerId, cost);
|
TrackedSign trackedSign = new TrackedSign(playerId, cost);
|
||||||
|
|
||||||
|
//Prevent destroyed signs from being tracked indefinitely
|
||||||
|
if (!(signLocation.getBlock().getState() instanceof Sign)) {
|
||||||
|
PaidSigns.getInstance().getLogger().log(Level.WARNING, "The sign at " + signLocation + " no longer " +
|
||||||
|
"exists. Removing from sign tracker. Refunding the player.");
|
||||||
|
refund(trackedSign, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
trackedSigns.put(signLocation, trackedSign);
|
trackedSigns.put(signLocation, trackedSign);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,4 +132,25 @@ public final class TrackedSignManager {
|
|||||||
configuration.save(signsFile);
|
configuration.save(signsFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refunds the player for the sign if refunds are enabled and refund is set to true
|
||||||
|
*
|
||||||
|
* @param trackedSign <p>The tracked sign to refund for</p>
|
||||||
|
* @param refund <p>Whether to actually refund</p>
|
||||||
|
*/
|
||||||
|
private static void refund(TrackedSign trackedSign, boolean refund) {
|
||||||
|
if (!PaidSigns.getInstance().areRefundsEnabled() || !refund) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(trackedSign.getPlayerId());
|
||||||
|
double refundSum = trackedSign.getCost() / 100 * PaidSigns.getInstance().getRefundPercentage();
|
||||||
|
EconomyManager.deposit(offlinePlayer, refundSum);
|
||||||
|
if (offlinePlayer instanceof Player player) {
|
||||||
|
player.sendMessage(String.format(StringFormatter.replacePlaceholders(
|
||||||
|
StringFormatter.getTranslatedInfoMessage(TranslatableMessage.SUCCESS_REFUNDED),
|
||||||
|
new String[]{"{cost}", "{unit}"}, new String[]{"%.2f", "%s"}), refundSum,
|
||||||
|
EconomyManager.getCurrency(refundSum != 1)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,6 @@ en:
|
|||||||
ERROR_INVALID_INPUT: "&bInvalid input: {input}"
|
ERROR_INVALID_INPUT: "&bInvalid input: {input}"
|
||||||
ERROR_PAID_SIGN_NOT_FOUND: "&bNo such paid sign exists"
|
ERROR_PAID_SIGN_NOT_FOUND: "&bNo such paid sign exists"
|
||||||
ERROR_NO_SUCH_CONDITION: "&bThe paid sign you specified has no condition for line {line}"
|
ERROR_NO_SUCH_CONDITION: "&bThe paid sign you specified has no condition for line {line}"
|
||||||
ERROR_CANNOT_AFFORD: "&bYou cannot afford to create this sign"
|
ERROR_CANNOT_AFFORD: "&bYou cannot afford to create this sign. The cost is {cost} {unit}"
|
||||||
ERROR_INVALID_REGULAR_EXPRESSION: "&bThe provided regular expression is invalid"
|
ERROR_INVALID_REGULAR_EXPRESSION: "&bThe provided regular expression is invalid"
|
||||||
ERROR_PROPERTY_NOT_RECOGNIZED: "&bThe property you tried to change was not recognized"
|
ERROR_PROPERTY_NOT_RECOGNIZED: "&bThe property you tried to change was not recognized"
|
Loading…
Reference in New Issue
Block a user