New register stuff

This commit is contained in:
Indyuce 2022-03-05 10:31:40 +01:00
parent be22442a78
commit 9727f02051
8 changed files with 150 additions and 43 deletions

View File

@ -45,9 +45,6 @@ import net.Indyuce.mmocore.party.PartyModule;
import net.Indyuce.mmocore.party.PartyModuleType;
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
import net.Indyuce.mmocore.skill.cast.SkillCastingMode;
import net.Indyuce.mmocore.skill.list.Ambers;
import net.Indyuce.mmocore.skill.list.Neptune_Gift;
import net.Indyuce.mmocore.skill.list.Sneaky_Picky;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -65,7 +62,7 @@ public class MMOCore extends LuminePlugin {
public static MMOCore plugin;
public ConfigManager configManager;
public WaypointManager waypointManager;
public final WaypointManager waypointManager = new WaypointManager();
public SoundManager soundManager;
public RequestManager requestManager;
public ConfigItemManager configItems;
@ -82,6 +79,8 @@ public class MMOCore extends LuminePlugin {
public final LootChestManager lootChests = new LootChestManager();
public final MMOLoadManager loadManager = new MMOLoadManager();
public final RestrictionManager restrictionManager = new RestrictionManager();
@Deprecated
public final SkillTreeManager skillTreeManager = new SkillTreeManager();
public VaultEconomy economy;
public RegionHandler regionHandler = new DefaultRegionHandler();
@ -408,8 +407,8 @@ public class MMOCore extends LuminePlugin {
questManager.initialize(clearBefore);
lootChests.initialize(clearBefore);
restrictionManager.initialize(clearBefore);
waypointManager.initialize(clearBefore);
waypointManager = new WaypointManager(new ConfigFile("waypoints").getConfig());
requestManager = new RequestManager();
soundManager = new SoundManager(new ConfigFile("sounds").getConfig());
configItems = new ConfigItemManager(new ConfigFile("items").getConfig());

View File

@ -0,0 +1,21 @@
package net.Indyuce.mmocore.manager;
import net.Indyuce.mmocore.manager.registry.MMOCoreRegister;
import net.Indyuce.mmocore.tree.SkillTree;
@Deprecated
public class SkillTreeManager extends MMOCoreRegister<SkillTree> {
@Override
public String getRegisteredObjectName() {
return "skill tree";
}
@Override
public void initialize(boolean clearBefore) {
if (clearBefore)
registered.clear();
// TODO
}
}

View File

@ -1,48 +1,59 @@
package net.Indyuce.mmocore.manager;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.ConfigFile;
import net.Indyuce.mmocore.waypoint.Waypoint;
import org.apache.commons.lang.Validate;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.logging.Level;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
public class WaypointManager implements MMOCoreManager {
private final Map<String, Waypoint> waypoints = new LinkedHashMap<>();
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.waypoint.Waypoint;
public Collection<Waypoint> getAll() {
return waypoints.values();
}
public class WaypointManager {
private final Map<String, Waypoint> waypoints = new LinkedHashMap<>();
public boolean has(String id) {
return waypoints.containsKey(id);
}
public WaypointManager(FileConfiguration config) {
for (String key : config.getKeys(false))
try {
register(new Waypoint(config.getConfigurationSection(key)));
} catch (IllegalArgumentException exception) {
MMOCore.log(Level.WARNING, "Could not load waypoint '" + key + "': " + exception.getMessage());
}
}
public Waypoint get(String id) {
return waypoints.get(id);
}
public Collection<Waypoint> getAll() {
return waypoints.values();
}
public void register(Waypoint waypoint) {
Validate.isTrue(!waypoints.containsKey(Objects.requireNonNull(waypoint, "Waypoint cannot be null").getId()), "There is already a waypoint with ID '" + waypoint.getId() + "'");
public boolean has(String id) {
return waypoints.containsKey(id);
}
waypoints.put(waypoint.getId(), waypoint);
}
public Waypoint get(String id) {
return waypoints.get(id);
}
@Nullable
public Waypoint getCurrentWaypoint(Player player) {
for (Waypoint waypoint : getAll())
if (waypoint.isOnWaypoint(player))
return waypoint;
return null;
}
public void register(Waypoint waypoint) {
waypoints.put(waypoint.getId(), waypoint);
}
@Override
public void initialize(boolean clearBefore) {
if (clearBefore)
waypoints.clear();
public Waypoint getCurrentWaypoint(Player player) {
for (Waypoint waypoint : getAll())
if (waypoint.isOnWaypoint(player))
return waypoint;
return null;
}
FileConfiguration config = new ConfigFile("waypoints").getConfig();
for (String key : config.getKeys(false))
try {
register(new Waypoint(config.getConfigurationSection(key)));
} catch (RuntimeException exception) {
MMOCore.log(Level.WARNING, "Could not load waypoint '" + key + "': " + exception.getMessage());
}
}
}

View File

@ -0,0 +1,30 @@
package net.Indyuce.mmocore.manager.registry;
import net.Indyuce.mmocore.manager.MMOCoreManager;
import org.apache.commons.lang.Validate;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public abstract class MMOCoreRegister<T extends RegisterObject> implements MMOCoreManager {
protected final Map<String, T> registered = new HashMap<>();
public void register(T t) {
Validate.notNull(t, getRegisteredObjectName() + " cannot be null");
Validate.isTrue(!registered.containsKey(t.getId()), "There is already a " + getRegisteredObjectName() + " registered with ID '" + t.getId() + "'");
registered.put(t.getId(), t);
}
public T get(String id) {
return Objects.requireNonNull(registered.get(id), "Could not find " + getRegisteredObjectName() + " with ID '" + id + "'");
}
public Collection<T> getAll() {
return registered.values();
}
public abstract String getRegisteredObjectName();
}

View File

@ -0,0 +1,9 @@
package net.Indyuce.mmocore.manager.registry;
public interface RegisterObject {
/**
* Identifier used to register an object
*/
public String getId();
}

View File

@ -3,7 +3,12 @@ package net.Indyuce.mmocore.player;
import net.Indyuce.mmocore.api.player.PlayerData;
/**
* Some item that can be unlocked
* Some item that can be unlocked. ALl unlockable are saved in the same list in
* the player data. This useful list can be used for:
* - waypoints
* - skill tree nodes
* - skills using skill books? TODO
* - external plugins that implement other unlockable items
*
* @see {@link PlayerData#unlock(Unlockable)} and {@link PlayerData#hasUnlocked(Unlockable)}
*/
@ -11,7 +16,7 @@ public interface Unlockable {
/**
* Format being used is the minecraft's default
* namespaced key format, e.g skill_tree:strength_1_5
* namespaced key format, e.g "skill_tree:strength_1_5"
*/
String getUnlockNamespacedKey();
}

View File

@ -1,8 +1,10 @@
package net.Indyuce.mmocore.tree;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.manager.registry.RegisterObject;
import org.apache.commons.lang.Validate;
import org.bukkit.configuration.ConfigurationSection;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.HashMap;
@ -25,7 +27,7 @@ import java.util.logging.Level;
* @author jules
* @see {@link SkillTreeNode}
*/
public class SkillTree {
public class SkillTree implements RegisterObject {
private final String id, name;
private final Map<IntegerCoordinates, SkillTreeNode> nodes = new HashMap<>();
@ -44,6 +46,7 @@ public class SkillTree {
}
}
@Override
public String getId() {
return id;
}
@ -56,6 +59,11 @@ public class SkillTree {
return nodes.values();
}
@NotNull
public SkillTreeNode getNode(IntegerCoordinates coords) {
return Objects.requireNonNull(nodes.get(coords), "Could not find node in tree '" + id + "' with coordinates '" + coords.toString() + "'");
}
@Override
public boolean equals(Object o) {
if (this == o) return true;

View File

@ -3,9 +3,11 @@ package net.Indyuce.mmocore.tree;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.player.modifier.PlayerModifier;
import io.lumine.mythic.lib.util.configobject.ConfigSectionObject;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.player.Unlockable;
import org.apache.commons.lang.Validate;
import org.bukkit.configuration.ConfigurationSection;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
import java.util.List;
@ -50,6 +52,11 @@ public class SkillTreeNode implements Unlockable {
return lore;
}
@Override
public String getUnlockNamespacedKey() {
return "skill_tree:" + tree.getId() + "_" + coordinates.getX() + "_" + coordinates.getY();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
@ -63,8 +70,25 @@ public class SkillTreeNode implements Unlockable {
return Objects.hash(tree, coordinates);
}
@Override
public String getUnlockNamespacedKey() {
return "skill_tree:" + tree.getId() + "_" + coordinates.getX() + "_" + coordinates.getY();
/**
* @param namespacedKey Something like "skill_tree:tree_name_1_5"
* @return The corresponding skill tree node
* @throws RuntimeException If the string cannot be parsed, if the specified
* skill tree does not exist or if the skill tree has no such node
*/
@NotNull
public static SkillTreeNode getFromNamespacedKey(String namespacedKey) {
String[] split = namespacedKey.substring(11).split("_");
int n = split.length;
IntegerCoordinates coords = new IntegerCoordinates(Integer.valueOf(split[n - 2]), Integer.valueOf(split[n - 1]));
StringBuilder treeIdBuilder = new StringBuilder();
for (int i = 0; i < n - 2; i++) {
if (i > 0)
treeIdBuilder.append("_");
treeIdBuilder.append(split[i]);
}
String treeId = treeIdBuilder.toString();
return MMOCore.plugin.skillTreeManager.get(treeId).getNode(coords);
}
}