Registers the block break listener and adds some small improvements

This commit is contained in:
Kristian Knarvik 2022-02-28 15:06:58 +01:00
parent a1b1a5d112
commit 15426a46f3
4 changed files with 31 additions and 8 deletions

View File

@ -76,3 +76,15 @@ Removes a registered paid sign
* paidsigns.manage - Grants the permission to add/remove a paid sign * paidsigns.manage - Grants the permission to add/remove a paid sign
* paidsigns.reload - Grants the permissions to reload the plugin * paidsigns.reload - Grants the permissions to reload the plugin
* paidsigns.paymentexempt - Makes this player exempt from the cost of paid signs * paidsigns.paymentexempt - Makes this player exempt from the cost of paid signs
## Configuration options
* ignoreCase - Whether to ignore the case (lowercase/uppercase) of the paid sign text. The option can be set on a
per-sign basis, but this value is used if not specified. The correct value depends on whether the plugin signs it
should match are case-sensitive or not.
* ignoreColor - Whether to ignore any color or formatting applied to the text when trying to match a paid sign's text.
The option can be set on a per-sign basis, but this value is used if not specified. The correct value depends on
whether the plugin signs it should match allow coloring or not.
* enableRefunds - Whether to enable refunds to the sign creator when a sign detected as a paid sign is broken (payment
will always go to the original creator)
* refundPercentage - The percentage of the paid sign cost to refund (0-100)

View File

@ -10,6 +10,7 @@ import net.knarcraft.paidsigns.command.ReloadTabCommand;
import net.knarcraft.paidsigns.command.RemoveConditionCommand; import net.knarcraft.paidsigns.command.RemoveConditionCommand;
import net.knarcraft.paidsigns.command.RemoveConditionTabCompleter; import net.knarcraft.paidsigns.command.RemoveConditionTabCompleter;
import net.knarcraft.paidsigns.command.RemoveTabCommand; import net.knarcraft.paidsigns.command.RemoveTabCommand;
import net.knarcraft.paidsigns.listener.BlockBreakListener;
import net.knarcraft.paidsigns.listener.SignListener; import net.knarcraft.paidsigns.listener.SignListener;
import net.knarcraft.paidsigns.manager.EconomyManager; import net.knarcraft.paidsigns.manager.EconomyManager;
import net.knarcraft.paidsigns.manager.PaidSignManager; import net.knarcraft.paidsigns.manager.PaidSignManager;
@ -63,6 +64,7 @@ public final class PaidSigns extends JavaPlugin {
PluginManager pluginManager = getServer().getPluginManager(); PluginManager pluginManager = getServer().getPluginManager();
pluginManager.registerEvents(new SignListener(), this); pluginManager.registerEvents(new SignListener(), this);
pluginManager.registerEvents(new BlockBreakListener(), this);
registerCommands(); registerCommands();
} }

View File

@ -18,7 +18,8 @@ public class ReloadTabCommand implements TabExecutor {
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label,
@NotNull String[] args) { @NotNull String[] args) {
PaidSigns.getInstance().reload(); PaidSigns.getInstance().reload();
return false; sender.sendMessage("PaidSigns reloaded");
return true;
} }
@Override @Override

View File

@ -8,6 +8,7 @@ import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -20,11 +21,15 @@ import java.util.logging.Level;
/** /**
* A manager for keeping track of plugin-signs created by players * A manager for keeping track of plugin-signs created by players
*/ */
public class TrackedSignManager { public final class TrackedSignManager {
private static Map<Location, TrackedSign> trackedSigns = new HashMap<>(); private static Map<Location, TrackedSign> trackedSigns = new HashMap<>();
private static final File signsFile = new File(PaidSigns.getInstance().getDataFolder(), "data.yml"); private static final File signsFile = new File(PaidSigns.getInstance().getDataFolder(), "data.yml");
private TrackedSignManager() {
}
/** /**
* Adds a tracked sign to the manager * Adds a tracked sign to the manager
* *
@ -47,15 +52,18 @@ public class TrackedSignManager {
if (!trackedSigns.containsKey(signLocation)) { if (!trackedSigns.containsKey(signLocation)) {
return; return;
} }
TrackedSign trackedSign = trackedSigns.get(signLocation);
trackedSigns.remove(signLocation); trackedSigns.remove(signLocation);
saveTrackedSigns(); saveTrackedSigns();
if (!PaidSigns.getInstance().areRefundsEnabled()) { if (!PaidSigns.getInstance().areRefundsEnabled()) {
return; return;
} }
TrackedSign trackedSign = trackedSigns.get(signLocation); OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(trackedSign.getPlayerId());
OfflinePlayer player = Bukkit.getOfflinePlayer(trackedSign.getPlayerId());
double refundSum = trackedSign.getCost() / 100 * PaidSigns.getInstance().getRefundPercentage(); double refundSum = trackedSign.getCost() / 100 * PaidSigns.getInstance().getRefundPercentage();
EconomyManager.withdraw(player, refundSum); EconomyManager.withdraw(offlinePlayer, -refundSum);
if (offlinePlayer instanceof Player player) {
player.sendMessage("You were refunded " + refundSum + " for your broken sign");
}
} }
/** /**
@ -67,7 +75,7 @@ public class TrackedSignManager {
trackedSigns = new HashMap<>(); trackedSigns = new HashMap<>();
if (signSection == null) { if (signSection == null) {
PaidSigns.getInstance().getLogger().log(Level.WARNING, "Signs section not found in data.yml"); PaidSigns.getInstance().getLogger().log(Level.WARNING, "Tracked signs section not found in data.yml");
return; return;
} }
@ -120,7 +128,7 @@ public class TrackedSignManager {
String locationString = Objects.requireNonNull(signLocation.getWorld()).getUID() + "," + String locationString = Objects.requireNonNull(signLocation.getWorld()).getUID() + "," +
signLocation.getBlockX() + "," + signLocation.getBlockY() + "," + signLocation.getBlockZ(); signLocation.getBlockX() + "," + signLocation.getBlockY() + "," + signLocation.getBlockZ();
signSection.set(locationString + ".cost", sign.getCost()); signSection.set(locationString + ".cost", sign.getCost());
signSection.set(locationString + ".playerId", sign.getPlayerId()); signSection.set(locationString + ".playerId", sign.getPlayerId().toString());
} }
configuration.save(signsFile); configuration.save(signsFile);
} }