Skip to content

Commit 330fd27

Browse files
committed
Beta 20220422-SNAPSHOT
Changelog: - Added a configuration with editable rarity values and rarity types for the different events that can occur, to give the end user more control over how often players receive the effects. - Modified listeners to use the respective Configuration values. - Added the ability to reload a specific player configuration with /luck reload -p <player_name> - Added the ability to reload the main configuration using /luck reload -m - Added an integrity checker to validate the main configuration on boot.
1 parent 6119180 commit 330fd27

18 files changed

+280
-93
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package io.github.simplex.luck;
2+
3+
import io.github.simplex.lib.MiniComponent;
4+
import io.github.simplex.luck.listener.AbstractListener;
5+
import io.github.simplex.luck.util.SneakyWorker;
6+
import org.bukkit.configuration.file.YamlConfiguration;
7+
8+
import java.io.File;
9+
import java.nio.file.Files;
10+
import java.nio.file.Path;
11+
import java.util.ArrayList;
12+
import java.util.Iterator;
13+
import java.util.List;
14+
15+
public class Config extends YamlConfiguration {
16+
private final FeelingLucky plugin;
17+
private File configFile;
18+
19+
public Config(FeelingLucky plugin) {
20+
this.plugin = plugin;
21+
22+
File dataFolder = plugin.getDataFolder();
23+
if (!dataFolder.exists()) dataFolder.mkdirs();
24+
File configFile = new File(dataFolder, "config.yml");
25+
if (!configFile.exists()) {
26+
SneakyWorker.sneakyTry(configFile::createNewFile);
27+
plugin.saveResource("config.yml", true);
28+
}
29+
30+
this.configFile = configFile;
31+
load();
32+
33+
if (validateIntegrity()) {
34+
File newFile = new File(plugin.getDataFolder(), "config.yml");
35+
SneakyWorker.sneakyTry(() -> {
36+
Files.delete(Path.of(plugin.getDataFolder().getPath()));
37+
newFile.createNewFile();
38+
plugin.saveResource("config.yml", true);
39+
});
40+
this.configFile = newFile;
41+
load();
42+
}
43+
}
44+
45+
public void save() {
46+
SneakyWorker.sneakyTry(() -> save(configFile));
47+
}
48+
49+
public void load() {
50+
SneakyWorker.sneakyTry(() -> load(configFile));
51+
}
52+
53+
public void reload() {
54+
save();
55+
load();
56+
}
57+
58+
public boolean validateIntegrity() {
59+
for (String key : getKeys(false)) {
60+
if (!configEntries.contains(key)) {
61+
plugin.getLogger().severe("The contents of your configuration file is corrupted! Regenerating a new configuration file...");
62+
return true;
63+
}
64+
}
65+
return false;
66+
}
67+
68+
public AbstractListener.Rarity getRarity(String name) {
69+
return AbstractListener.Rarity.valueOf(getString(name));
70+
}
71+
72+
public double getChance(String path) {
73+
return getDouble(path);
74+
}
75+
76+
private List<String> configEntries = new ArrayList<>() {{
77+
add("high_rarity_chance");
78+
add("medium_rarity_chance");
79+
add("low_rarity_chance");
80+
add("block_drops");
81+
add("bonemeal");
82+
add("cheat_death");
83+
add("enchanting");
84+
add("experience");
85+
add("item_drops");
86+
add("random_effect");
87+
add("restore_hunger");
88+
add("take_damage");
89+
add("unbreakable");
90+
}};
91+
}

src/main/java/io/github/simplex/luck/FeelingLucky.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
import io.github.simplex.luck.listener.*;
44
import io.github.simplex.luck.player.PlayerConfig;
55
import io.github.simplex.luck.player.PlayerHandler;
6-
import io.github.simplex.luck.util.CooldownTimer;
76
import io.github.simplex.luck.util.LuckCMD;
8-
import org.bukkit.Bukkit;
97
import org.bukkit.plugin.java.JavaPlugin;
8+
import org.jetbrains.annotations.NotNull;
109

1110
import java.io.File;
1211
import java.util.Arrays;
@@ -18,6 +17,7 @@ public final class FeelingLucky extends JavaPlugin {
1817
private final Map<UUID, PlayerConfig> configMap = new HashMap<>();
1918

2019
private PlayerHandler handler;
20+
private Config config;
2121

2222
public Map<UUID, PlayerConfig> getConfigMap() {
2323
return configMap;
@@ -30,21 +30,26 @@ public void onEnable() {
3030
getLogger().info("Initialization complete! Attempting to register the Listeners...");
3131
registerListeners();
3232
getLogger().info("Registration complete! Attempting to load all player configuration files...");
33-
loadConfigurations();
34-
Bukkit.getLogger().info("Attempting to load the Luck command...");
33+
loadPlayerConfigurations();
34+
getLogger().info("Attempting to load the main configuration...");
35+
config = new Config(this);
36+
getLogger().info("Main Config loaded successfully! Attempting to load the Luck command...");
3537
new LuckCMD(this);
36-
Bukkit.getLogger().info("Successfully loaded the Luck command!");
38+
getLogger().info("Successfully loaded the Luck command!");
3739

38-
Bukkit.getLogger().info("Successfully initialized!");
40+
getLogger().info("Successfully initialized!");
3941
}
4042

4143
@Override
4244
public void onDisable() {
43-
Bukkit.getLogger().info("Saving all player configurations...");
45+
getLogger().info("Saving all player configurations...");
4446
configMap.values().forEach(PlayerConfig::save);
47+
getLogger().info("Complete! Saving the main config...");
48+
config.save();
49+
getLogger().info("Complete! Goodbye! :)");
4550
}
4651

47-
private void loadConfigurations() {
52+
private void loadPlayerConfigurations() {
4853
File[] files = getDataFolder().listFiles();
4954
if (files != null) {
5055
Arrays.stream(files).forEach(file -> {
@@ -76,4 +81,10 @@ private void registerListeners() {
7681
public PlayerHandler getHandler() {
7782
return handler;
7883
}
84+
85+
@Override
86+
@NotNull
87+
public Config getConfig() {
88+
return config;
89+
}
7990
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package io.github.simplex.luck.listener;
2+
3+
import io.github.simplex.luck.Config;
4+
import io.github.simplex.luck.FeelingLucky;
5+
import io.github.simplex.luck.player.PlayerHandler;
6+
import org.bukkit.event.Listener;
7+
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
11+
public abstract class AbstractListener implements Listener {
12+
protected final FeelingLucky plugin;
13+
protected final Map<AbstractListener, Rarity> listenerRarityMap = new HashMap<>();
14+
protected final Config config;
15+
16+
public AbstractListener(FeelingLucky plugin) {
17+
this.plugin = plugin;
18+
this.config = plugin.getConfig();
19+
plugin.getServer().getPluginManager().registerEvents(this, plugin);
20+
}
21+
22+
protected PlayerHandler getHandler() {
23+
return plugin.getHandler();
24+
}
25+
26+
public enum Rarity {
27+
HIGH,
28+
MED,
29+
LOW,
30+
NONE
31+
}
32+
33+
public boolean doesQualify(String name, double luck) {
34+
switch (config.getRarity(name)) {
35+
case HIGH:
36+
if (luck < config.getChance("high_rarity_chance")) return false;
37+
case MED:
38+
if (luck < config.getChance("medium_rarity_chance")) return false;
39+
case LOW:
40+
if (luck < config.getChance("low_rarity_chance")) return false;
41+
case NONE:
42+
return true;
43+
}
44+
throw new IllegalArgumentException("The value for the listener rarity is not a recognized rarity value.");
45+
}
46+
}

src/main/java/io/github/simplex/luck/listener/BlockDrops.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,21 @@
66
import org.bukkit.entity.Item;
77
import org.bukkit.entity.Player;
88
import org.bukkit.event.EventHandler;
9-
import org.bukkit.event.Listener;
109
import org.bukkit.event.block.BlockDropItemEvent;
1110

1211
import java.util.List;
1312

14-
public record BlockDrops(FeelingLucky plugin) implements Listener {
15-
public BlockDrops {
16-
plugin.getServer().getPluginManager().registerEvents(this, plugin);
13+
public final class BlockDrops extends AbstractListener {
14+
public BlockDrops(FeelingLucky plugin) {
15+
super(plugin);
1716
}
1817

1918
@EventHandler
2019
public void extraBlockDrops(BlockDropItemEvent event) {
2120
Player player = event.getPlayer();
22-
Luck luck = plugin.getHandler().getLuckContainer(player);
21+
Luck luck = getHandler().getLuckContainer(player);
2322
List<Item> items = event.getItems();
24-
if (luck.quickRNG(luck.getPercentage())) {
23+
if (luck.quickRNG(luck.getPercentage()) && doesQualify("block_drops", luck.getPercentage())) {
2524
items.forEach(SneakyWorker::move);
2625
}
2726
}

src/main/java/io/github/simplex/luck/listener/BonemealFullCrop.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,21 @@
1010
import org.bukkit.block.data.BlockData;
1111
import org.bukkit.entity.Player;
1212
import org.bukkit.event.EventHandler;
13-
import org.bukkit.event.Listener;
1413
import org.bukkit.event.block.Action;
1514
import org.bukkit.event.player.PlayerInteractEvent;
1615
import org.bukkit.inventory.ItemStack;
1716

18-
public record BonemealFullCrop(FeelingLucky plugin) implements Listener {
19-
public BonemealFullCrop {
20-
plugin.getServer().getPluginManager().registerEvents(this, plugin);
17+
public final class BonemealFullCrop extends AbstractListener {
18+
public BonemealFullCrop(FeelingLucky plugin) {
19+
super(plugin);
2120
}
2221

2322
@EventHandler
2423
public void bonemealFullCrop(PlayerInteractEvent event) {
2524
Player player = event.getPlayer();
2625
Action action = event.getAction();
2726
ItemStack bonemeal = ItemBuilder.of(Material.BONE_MEAL).build();
28-
Luck luck = plugin.getHandler().getLuckContainer(player);
27+
Luck luck = getHandler().getLuckContainer(player);
2928

3029
ItemStack handItem = event.getItem();
3130
if (handItem == null) return;
@@ -38,12 +37,12 @@ public void bonemealFullCrop(PlayerInteractEvent event) {
3837
if (action.isRightClick()
3938
&& handItem.isSimilar(bonemeal)
4039
&& (data instanceof Ageable crop)
41-
&& luck.quickRNG(luck.getPercentage())) {
40+
&& luck.quickRNG(luck.getPercentage())
41+
&& doesQualify("bonemeal", luck.getPercentage())) {
4242
crop.setAge(crop.getMaximumAge());
4343
data.merge(crop);
4444
block.setBlockData(data);
4545
player.sendMessage(MiniComponent.info("You got lucky and your crops grew to maturity."));
4646
}
4747
}
48-
4948
}

src/main/java/io/github/simplex/luck/listener/CheatDeath.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,23 @@
55
import io.github.simplex.luck.player.Luck;
66
import org.bukkit.entity.Player;
77
import org.bukkit.event.EventHandler;
8-
import org.bukkit.event.Listener;
98
import org.bukkit.event.entity.PlayerDeathEvent;
109

11-
public record CheatDeath(FeelingLucky plugin) implements Listener {
10+
public final class CheatDeath extends AbstractListener {
1211
public CheatDeath(FeelingLucky plugin) {
13-
this.plugin = plugin;
14-
plugin.getServer().getPluginManager().registerEvents(this, plugin);
12+
super(plugin);
1513
}
1614

1715
@EventHandler
1816
public void cheatDeath(PlayerDeathEvent event) {
1917
Player player = event.getPlayer();
20-
Luck luck = plugin.getHandler().getLuckContainer(player);
18+
Luck luck = getHandler().getLuckContainer(player);
2119
double absorption = Math.round(Luck.RNG().nextDouble(5.0, 10.0));
22-
if (luck.quickRNG(luck.getPercentage())) {
20+
if (luck.quickRNG(luck.getPercentage()) && doesQualify("cheat_death", luck.getPercentage())) {
2321
event.setCancelled(true);
2422
player.setHealth(1.0);
2523
player.setAbsorptionAmount(absorption);
2624
player.sendMessage(MiniComponent.of("You got lucky and cheated death!").send());
2725
}
28-
2926
}
3027
}

src/main/java/io/github/simplex/luck/listener/EnchantmentBoost.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,23 @@
55
import org.bukkit.enchantments.Enchantment;
66
import org.bukkit.entity.Player;
77
import org.bukkit.event.EventHandler;
8-
import org.bukkit.event.Listener;
98
import org.bukkit.event.enchantment.EnchantItemEvent;
109

1110
import java.util.List;
1211
import java.util.Map;
1312

14-
public record EnchantmentBoost(FeelingLucky plugin) implements Listener {
13+
public final class EnchantmentBoost extends AbstractListener {
1514
public EnchantmentBoost(FeelingLucky plugin) {
16-
this.plugin = plugin;
17-
plugin.getServer().getPluginManager().registerEvents(this, plugin);
15+
super(plugin);
1816
}
1917

2018
@EventHandler
2119
public void enchantItem(EnchantItemEvent event) {
2220
Map<Enchantment, Integer> enchMap = event.getEnchantsToAdd();
2321
List<Enchantment> enchList = enchMap.keySet().stream().toList();
2422
Player player = event.getEnchanter();
25-
Luck luck = plugin.getHandler().getLuckContainer(player);
26-
if (luck.quickRNG(luck.getPercentage())) {
23+
Luck luck = getHandler().getLuckContainer(player);
24+
if (luck.quickRNG(luck.getPercentage()) && doesQualify("enchanting", luck.getPercentage())) {
2725
Enchantment particular = enchList.get(Luck.RNG().nextInt(enchList.size()));
2826
int rng = Luck.RNG().nextInt(1, 5);
2927

@@ -34,4 +32,8 @@ public void enchantItem(EnchantItemEvent event) {
3432
enchMap.replace(particular, enchMap.get(particular) + rng);
3533
}
3634
}
35+
36+
public FeelingLucky plugin() {
37+
return plugin;
38+
}
3739
}

src/main/java/io/github/simplex/luck/listener/ExpBoost.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@
66
import org.bukkit.entity.ExperienceOrb;
77
import org.bukkit.entity.Player;
88
import org.bukkit.event.EventHandler;
9-
import org.bukkit.event.Listener;
109

11-
public record ExpBoost(FeelingLucky plugin) implements Listener {
10+
public final class ExpBoost extends AbstractListener {
1211
public ExpBoost(FeelingLucky plugin) {
13-
this.plugin = plugin;
14-
plugin.getServer().getPluginManager().registerEvents(this, plugin);
12+
super(plugin);
1513
}
1614

1715
@EventHandler
@@ -22,7 +20,7 @@ public void boostExperienceGain(PlayerPickupExperienceEvent event) {
2220
int rounded = Math.round(math);
2321
Player player = event.getPlayer();
2422
Luck luck = plugin.getHandler().getLuckContainer(player);
25-
if (luck.quickRNG(luck.getPercentage())) {
23+
if (luck.quickRNG(luck.getPercentage()) && doesQualify("experience", luck.getPercentage())) {
2624
orb.setExperience(rounded);
2725
}
2826
}

src/main/java/io/github/simplex/luck/listener/IllOmen.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,22 @@
55
import io.github.simplex.luck.player.Luck;
66
import org.bukkit.entity.Player;
77
import org.bukkit.event.EventHandler;
8-
import org.bukkit.event.Listener;
98
import org.bukkit.event.entity.EntityPotionEffectEvent;
109
import org.bukkit.event.player.PlayerJoinEvent;
1110
import org.bukkit.event.player.PlayerQuitEvent;
1211
import org.bukkit.potion.PotionEffect;
1312
import org.bukkit.potion.PotionEffectType;
1413

15-
public record IllOmen(FeelingLucky plugin) implements Listener {
16-
public IllOmen {
17-
plugin.getServer().getPluginManager().registerEvents(this, plugin);
14+
public class IllOmen extends AbstractListener {
15+
public IllOmen(FeelingLucky plugin) {
16+
super(plugin);
1817
}
1918

2019
@EventHandler
2120
public void reconnectCheck(PlayerJoinEvent event) {
2221
Player player = event.getPlayer();
2322
PotionEffectType type = PotionEffectType.BAD_OMEN;
24-
Luck luck = plugin.getHandler().getLuckContainer(player);
23+
Luck luck = getHandler().getLuckContainer(player);
2524

2625
if (player.hasPotionEffect(type)) {
2726
luck.cache();

0 commit comments

Comments
 (0)