Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,7 @@ public class RewardHandler {
private File defaultFolder;

@Getter
private CopyOnWriteArrayList<DirectlyDefinedReward> directlyDefinedRewards = new CopyOnWriteArrayList<DirectlyDefinedReward>();

@Getter
private CopyOnWriteArrayList<SubDirectlyDefinedReward> subDirectlyDefinedRewards = new CopyOnWriteArrayList<SubDirectlyDefinedReward>();
private final RewardRegistry rewardRegistry;

@Getter
private CopyOnWriteArrayList<RequirementInject> injectedRequirements = new CopyOnWriteArrayList<RequirementInject>();
Expand All @@ -61,9 +58,6 @@ public class RewardHandler {
/** The reward folders. */
private ArrayList<File> rewardFolders;

/** The rewards. */
private List<Reward> rewards;

@Getter
private ScheduledExecutorService delayedTimer = Executors.newSingleThreadScheduledExecutor();

Expand All @@ -73,19 +67,13 @@ public class RewardHandler {

public RewardHandler(AdvancedCorePlugin plugin) {
this.plugin = plugin;
rewardRegistry = new RewardRegistry(plugin);
rewardFolders = new ArrayList<>();
setDefaultFolder(new File(plugin.getDataFolder(), "Rewards"));
}

public void addDirectlyDefined(DirectlyDefinedReward directlyDefinedReward) {
if (getDirectlyDefined(directlyDefinedReward.getPath()) != null) {
plugin.extraDebug(
"DirectlyDefinedReward with path already exists, skipping: " + directlyDefinedReward.getPath());
return;
}
plugin.extraDebug("Adding directlydefined reward handle: " + directlyDefinedReward.getPath()
+ ", isdirectlydefined: " + directlyDefinedReward.isDirectlyDefined());
directlyDefinedRewards.add(directlyDefinedReward);
rewardRegistry.addDirectlyDefined(directlyDefinedReward);
}

public void addInjectedRequirements(RequirementInject inject) {
Expand Down Expand Up @@ -131,9 +119,7 @@ public void addRewardFolder(File file, boolean load, boolean create) {
}

public void addSubDirectlyDefined(SubDirectlyDefinedReward subDirectlyDefinedReward) {
plugin.extraDebug("Adding subdirectlydefined reward handle: " + subDirectlyDefinedReward.getFullPath()
+ ", isdirectlydefined: " + subDirectlyDefinedReward.isDirectlyDefined());
subDirectlyDefinedRewards.add(subDirectlyDefinedReward);
rewardRegistry.addSubDirectlyDefined(subDirectlyDefinedReward);
}

public void addValidPath(String path) {
Expand Down Expand Up @@ -172,7 +158,7 @@ public void checkDirectlyDefined() {

public void checkSubRewards() {
plugin.extraDebug("Checking directlydefined rewards for sub rewards");
subDirectlyDefinedRewards = new CopyOnWriteArrayList<SubDirectlyDefinedReward>();
rewardRegistry.resetSubDirectlyDefinedRewards();
for (DirectlyDefinedReward direct : getDirectlyDefinedRewards()) {
checkSubRewards(direct);
}
Expand Down Expand Up @@ -214,12 +200,11 @@ public File getDefaultFolder() {
}

public DirectlyDefinedReward getDirectlyDefined(String path) {
for (DirectlyDefinedReward direct : getDirectlyDefinedRewards()) {
if (direct.getPath().equalsIgnoreCase(path)) {
return direct;
}
}
return null;
return rewardRegistry.getDirectlyDefined(path);
}

public CopyOnWriteArrayList<DirectlyDefinedReward> getDirectlyDefinedRewards() {
return rewardRegistry.getDirectlyDefinedRewards();
}

private String getFileExtension(File file) {
Expand Down Expand Up @@ -265,41 +250,7 @@ public Reward getReward(ConfigurationSection data, String path, RewardOptions re
* @return the reward
*/
public Reward getReward(String reward) {
if (reward == null) {
reward = "";
}
reward = reward.replace(" ", "_");

if (reward.equals("")) {
plugin.getLogger().warning("Tried to get any empty reward file name, renaming to EmptyName");
reward = "EmptyName";
}

if (reward.equalsIgnoreCase("examplebasic") || reward.equalsIgnoreCase("exampleadvanced")) {
plugin.getLogger().warning("Using example rewards as a reward, be carefull");
}

for (DirectlyDefinedReward direct : getDirectlyDefinedRewards()) {
if (direct.getPath().replace(".", "_").equals(reward)) {
plugin.debug("Using directlydefined reward for: " + reward);
return direct.getReward();
}
}

for (SubDirectlyDefinedReward direct : getSubDirectlyDefinedRewards()) {
if (matchesSubDirectlyDefined(direct, reward)) {
plugin.debug("Using subdirectlydefined reward for: " + reward);
return direct.getReward();
}
}

for (Reward rewardFile : getRewards()) {
if (rewardFile.getName().equalsIgnoreCase(reward)) {
return rewardFile;
}
}

return new Reward(reward);
return rewardRegistry.getReward(reward);
}

public Reward getRewardDirectlyDefined(String reward) {
Expand Down Expand Up @@ -382,19 +333,15 @@ public ArrayList<String> getRewardNames(File file) {
* @return the rewards
*/
public List<Reward> getRewards() {
if (rewards == null) {
rewards = Collections.synchronizedList(new ArrayList<Reward>());
}
return rewards;
return rewardRegistry.getRewards();
}

public SubDirectlyDefinedReward getSubDirectlyDefined(String path) {
for (SubDirectlyDefinedReward direct : getSubDirectlyDefinedRewards()) {
if (matchesSubDirectlyDefined(direct, path)) {
return direct;
}
}
return null;
return rewardRegistry.getSubDirectlyDefined(path);
}

public CopyOnWriteArrayList<SubDirectlyDefinedReward> getSubDirectlyDefinedRewards() {
return rewardRegistry.getSubDirectlyDefinedRewards();
}

public void giveChoicesReward(Reward mainReward, AdvancedCoreUser user, String choice) {
Expand Down Expand Up @@ -522,23 +469,7 @@ public void giveReward(AdvancedCoreUser user, String reward, RewardOptions rewar
}

public boolean hasDirectRewardHandle(String reward) {
for (DirectlyDefinedReward direct : getDirectlyDefinedRewards()) {
if (direct.getPath().replace(".", "_").equals(reward)) {
return true;
}
}
for (SubDirectlyDefinedReward direct : getSubDirectlyDefinedRewards()) {
if (matchesSubDirectlyDefined(direct, reward)) {
return true;
}
}
return false;
}

private boolean matchesSubDirectlyDefined(SubDirectlyDefinedReward direct, String reward) {
return direct.getFullPath().equalsIgnoreCase(reward)
|| direct.getFullPath().replace(".", "_").equalsIgnoreCase(reward)
|| direct.getFullPath().equalsIgnoreCase(reward.replaceAll("_", "."));
return rewardRegistry.hasDirectRewardHandle(reward);
}

public boolean hasRewards(FileConfiguration data, String path) {
Expand Down Expand Up @@ -582,7 +513,7 @@ public void loadInjectedRewards() {
* Load rewards.
*/
public void loadRewards() {
rewards = Collections.synchronizedList(new ArrayList<Reward>());
rewardRegistry.resetRewards();
setupExample();
addValidPath("DirectlyDefinedReward");
addValidPath("Delayed");
Expand All @@ -606,7 +537,7 @@ private void loadRewards(File file) {
reward1.validate();
if (!reward1.getConfig().isDirectlyDefinedReward()
|| file.getName().equalsIgnoreCase("DirectlyDefined")) {
rewards.add(reward1);
getRewards().add(reward1);
if (reward1.getConfig().getConfigData().getConfigurationSection("").getKeys(true).size() > 0) {
plugin.extraDebug("Loaded Reward File: " + file.getAbsolutePath() + "/" + reward);
} else {
Expand Down Expand Up @@ -664,15 +595,7 @@ public void setData(String path, Object value) {
* @return true, if successful
*/
public boolean rewardExist(String reward) {
if (reward.equals("")) {
return false;
}
for (Reward rewardName : getRewards()) {
if (rewardName.getName().equalsIgnoreCase(reward)) {
return true;
}
}
return false;
return rewardRegistry.rewardExist(reward);
}

/**
Expand Down Expand Up @@ -780,13 +703,6 @@ public void updateReward(Configuration data, String path, RewardOptions rewardOp
}

public void updateReward(Reward reward) {
reward.validate();
for (int i = getRewards().size() - 1; i >= 0; i--) {
if (getRewards().get(i).getFile().getPath().equals(reward.getFile().getPath())) {
getRewards().set(i, reward);
return;
}
}
getRewards().add(reward);
rewardRegistry.updateReward(reward);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
package com.bencodez.advancedcore.api.rewards;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

import com.bencodez.advancedcore.AdvancedCorePlugin;

/**
* Owns registered reward state and reward lookup behavior.
* <p>
* {@link RewardHandler} remains the compatibility facade for callers while
* registry-specific state and lookup responsibilities live here.
*/
public class RewardRegistry {

private final AdvancedCorePlugin plugin;
private final CopyOnWriteArrayList<DirectlyDefinedReward> directlyDefinedRewards = new CopyOnWriteArrayList<>();
private CopyOnWriteArrayList<SubDirectlyDefinedReward> subDirectlyDefinedRewards = new CopyOnWriteArrayList<>();
private List<Reward> rewards;

public RewardRegistry(AdvancedCorePlugin plugin) {
this.plugin = plugin;
resetRewards();
}

public void addDirectlyDefined(DirectlyDefinedReward directlyDefinedReward) {
if (getDirectlyDefined(directlyDefinedReward.getPath()) != null) {
plugin.extraDebug(
"DirectlyDefinedReward with path already exists, skipping: " + directlyDefinedReward.getPath());
return;
}
plugin.extraDebug("Adding directlydefined reward handle: " + directlyDefinedReward.getPath()
+ ", isdirectlydefined: " + directlyDefinedReward.isDirectlyDefined());
directlyDefinedRewards.add(directlyDefinedReward);
}

public void addSubDirectlyDefined(SubDirectlyDefinedReward subDirectlyDefinedReward) {
plugin.extraDebug("Adding subdirectlydefined reward handle: " + subDirectlyDefinedReward.getFullPath()
+ ", isdirectlydefined: " + subDirectlyDefinedReward.isDirectlyDefined());
subDirectlyDefinedRewards.add(subDirectlyDefinedReward);
}

public DirectlyDefinedReward getDirectlyDefined(String path) {
for (DirectlyDefinedReward direct : directlyDefinedRewards) {
if (direct.getPath().equalsIgnoreCase(path)) {
return direct;
}
}
return null;
}

public CopyOnWriteArrayList<DirectlyDefinedReward> getDirectlyDefinedRewards() {
return directlyDefinedRewards;
}

public Reward getReward(String reward) {
if (reward == null) {
reward = "";
}
reward = reward.replace(" ", "_");

if (reward.equals("")) {
plugin.getLogger().warning("Tried to get any empty reward file name, renaming to EmptyName");
reward = "EmptyName";
}

if (reward.equalsIgnoreCase("examplebasic") || reward.equalsIgnoreCase("exampleadvanced")) {
plugin.getLogger().warning("Using example rewards as a reward, be carefull");
}

for (DirectlyDefinedReward direct : directlyDefinedRewards) {
if (direct.getPath().replace(".", "_").equals(reward)) {
plugin.debug("Using directlydefined reward for: " + reward);
return direct.getReward();
}
}

for (SubDirectlyDefinedReward direct : subDirectlyDefinedRewards) {
if (matchesSubDirectlyDefined(direct, reward)) {
plugin.debug("Using subdirectlydefined reward for: " + reward);
return direct.getReward();
}
}

for (Reward rewardFile : getRewards()) {
if (rewardFile.getName().equalsIgnoreCase(reward)) {
return rewardFile;
}
}

return new Reward(reward);
}

public List<Reward> getRewards() {
if (rewards == null) {
resetRewards();
}
return rewards;
}

public SubDirectlyDefinedReward getSubDirectlyDefined(String path) {
for (SubDirectlyDefinedReward direct : subDirectlyDefinedRewards) {
if (matchesSubDirectlyDefined(direct, path)) {
return direct;
}
}
return null;
}

public CopyOnWriteArrayList<SubDirectlyDefinedReward> getSubDirectlyDefinedRewards() {
return subDirectlyDefinedRewards;
}

public boolean hasDirectRewardHandle(String reward) {
for (DirectlyDefinedReward direct : directlyDefinedRewards) {
if (direct.getPath().replace(".", "_").equals(reward)) {
return true;
}
}
for (SubDirectlyDefinedReward direct : subDirectlyDefinedRewards) {
if (matchesSubDirectlyDefined(direct, reward)) {
return true;
}
}
return false;
}

public boolean rewardExist(String reward) {
if (reward.equals("")) {
return false;
}
for (Reward rewardName : getRewards()) {
if (rewardName.getName().equalsIgnoreCase(reward)) {
return true;
}
}
return false;
}

public void resetRewards() {
rewards = Collections.synchronizedList(new ArrayList<Reward>());
}

public void resetSubDirectlyDefinedRewards() {
subDirectlyDefinedRewards = new CopyOnWriteArrayList<>();
}

public void updateReward(Reward reward) {
reward.validate();
for (int i = getRewards().size() - 1; i >= 0; i--) {
if (getRewards().get(i).getFile().getPath().equals(reward.getFile().getPath())) {
getRewards().set(i, reward);
return;
}
}
getRewards().add(reward);
}

private boolean matchesSubDirectlyDefined(SubDirectlyDefinedReward direct, String reward) {
return direct.getFullPath().equalsIgnoreCase(reward)
|| direct.getFullPath().replace(".", "_").equalsIgnoreCase(reward)
|| direct.getFullPath().equalsIgnoreCase(reward.replaceAll("_", "."));
}
}
Loading
Loading