Rewards: delivery on Paper/Fabric, admin bundle editor, launcher chips

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DjMbLQujBHunCCu5GpsHaT
This commit is contained in:
Claude committed 2026-10-01 00:59:08 +00:00
1 parent 209ade0119
commit 0dc948caa4
18 files changed
+496 -2

No files matched your search

@@ -30,6 +30,7 @@ final class ClientLinkBridge implements PluginMessageListener {
private final Integration integration;
private final ShopPoints shops;
private ActionPoller poller;
private net.scopenet.core.RewardPoller rewards;
private MapService mapService;
private EconomyHandler economy;
@@ -82,7 +83,12 @@ final class ClientLinkBridge implements PluginMessageListener {
mapService = new MapService(env, integration.client().claims(), source, cache, integration.settings().panel().toString(),
plugin.getConfig().getBoolean("map.show-homes", false), Bukkit.getServer().getName());
integration.setMapOverlay(() -> net.scopenet.core.map.MapOverlay.toJson(mapService.snapshot()).toString());
Bukkit.getScheduler().runTaskTimer(plugin, () -> { poller.tick(); mapService.tick(); }, 60, 20);
var cfg = plugin.getConfig();
var defaults = net.scopenet.core.RewardRules.defaults();
rewards = new net.scopenet.core.RewardPoller(env, new net.scopenet.core.RewardRules(cfg.getBoolean("rewards.enabled", true), cfg.getBoolean("rewards.allow-commands", false),
cfg.getString("rewards.permission-command", defaults.permissionCommand()), cfg.getString("rewards.permission-deny-command", defaults.permissionDenyCommand()),
cfg.getString("rewards.permission-temp-command", defaults.permissionTempCommand()), cfg.getString("rewards.group-command", defaults.groupCommand())));
Bukkit.getScheduler().runTaskTimer(plugin, () -> { poller.tick(); rewards.tick(); mapService.tick(); }, 60, 20);
}
/** /market point add|remove|list, on the block the player is looking at (or standing on). */
@@ -150,6 +156,22 @@ final class ClientLinkBridge implements PluginMessageListener {
}
@Override public void runAsync(Runnable task) { Bukkit.getScheduler().runTaskAsynchronously(plugin, task); }
@Override public boolean giveItem(UUID id, String item, int amount) {
Player p = Bukkit.getPlayer(id);
if (p == null) return false;
Material m = Material.matchMaterial(item);
if (m == null && item.startsWith("minecraft:")) m = Material.matchMaterial(item.substring(10));
if (m == null || !m.isItem() || m == Material.AIR) return false;
for (int left = amount; left > 0; ) {
int n = Math.min(left, m.getMaxStackSize());
for (ItemStack over : p.getInventory().addItem(new ItemStack(m, n)).values()) p.getWorld().dropItemNaturally(p.getLocation(), over);
left -= n;
}
return true;
}
@Override public boolean console(String command) { return Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); }
record PaperPlayer(Player p) implements CorePlayer {
@Override public UUID uuid() { return p.getUniqueId(); }
@Override public String name() { return p.getName(); }