LoMines/src/main/java/dev/loki/lomines/handler/MineRewardHandler.java
loki5512344 8b8b9fee18 refactor(core): update all classes for new config system + add tab completion
BREAKING CHANGE: Core classes updated to use new section-based config

Updated classes:
- Mine.java - uses RegionConfig, BlockConfig, new FillMode
- Mines.java - uses new ConfigLoader.ConfigLoadException
- MineFileManager.java - creates configs with new system
- MineRepository.java - uses new ConfigLoader
- MaskScanService.java - uses BlockKey for markers
- BukkitBlockSetter.java - uses Map<BlockKey, Double>

Handlers updated:
- ActionBarHandler.java - uses UIConfig with MiniMessage
- MineBlockHandler.java - uses ResetConfig
- MineRewardHandler.java - uses RewardConfig
- MineResetHandler.java - uses new config sections

Commands updated:
- MaskCommands.java - updated exception handling

Added:
- LoMinesTabCompleter.java - Bukkit tab completion for all commands
- RegistrationManager.registerTabCompleter() - registers tab completer

Removed:
- Old ConfigLoaderTest.java (uses deprecated config system)

All classes now use:
- Type-safe BlockKey instead of String
- Section-based config (region, blocks, reset, rewards, ui, teleport)
- Duration-based intervals instead of ticks
- MiniMessage formatting for action bar
2026-05-31 22:13:50 +02:00

72 lines
2.3 KiB
Java

package dev.loki.lomines.handler;
import dev.loki.lomines.LoMinesPlugin;
import dev.loki.lomines.data.config.MineConfig;
import dev.loki.lomines.data.config.block.BlockKey;
import dev.loki.lomines.data.config.reward.RewardConfig;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import java.util.Random;
/**
* Handles reward distribution for block breaks in mines.
* Checks configured rewards and gives items/executes commands based on chance.
* Updated for new configuration system (v2).
*/
public final class MineRewardHandler {
private final RewardConfig rewards;
private final LoMinesPlugin plugin;
private final Random random = new Random();
public MineRewardHandler(MineConfig config, LoMinesPlugin plugin) {
this.rewards = config.rewards();
this.plugin = plugin;
}
/**
* Checks and applies rewards for a broken block.
*
* @param player The player who broke the block
* @param block The block that was broken
*/
public void checkRewards(Player player, Block block) {
Material material = block.getType();
BlockKey key = new BlockKey.Vanilla(material);
for (var entry : rewards.forBlock(key)) {
if (entry.roll(random)) {
giveReward(player, entry);
}
}
}
/**
* Gives a reward to the player.
*
* @param player The player to give the reward to
* @param reward The reward entry to give
*/
private void giveReward(Player player, RewardConfig.RewardEntry reward) {
// Give items
for (var item : reward.items()) {
player.getInventory().addItem(item.toItemStack());
}
// Execute commands
for (String command : reward.commands()) {
String parsed = command
.replace("%player%", player.getName())
.replace("%uuid%", player.getUniqueId().toString());
plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), parsed);
}
// Handle vanilla drops prevention if configured
if (reward.preventVanillaDrops()) {
// Note: This would need to be handled in the block break event
// by setting dropItems to false in the event
}
}
}