Modifications to make UnlockSkillTrigger work with the rest of MMOCore.

This commit is contained in:
Ka0rX 2023-03-21 20:41:30 +01:00
parent b1b1a6eddd
commit e518cafc85
4 changed files with 17 additions and 6 deletions

View File

@ -21,6 +21,8 @@ public class DefaultMMOLoader extends MMOLoader {
return new FromTrigger(config); return new FromTrigger(config);
if (config.getKey().equals("stat")) if (config.getKey().equals("stat"))
return new StatTrigger(config); return new StatTrigger(config);
if (config.getKey().equals("unlock_skill"))
return new UnlockSkillTrigger(config);
if (config.getKey().equals("message")) if (config.getKey().equals("message"))
return new MessageTrigger(config); return new MessageTrigger(config);
if (config.getKey().equals("sound") || config.getKey().equals("playsound")) if (config.getKey().equals("sound") || config.getKey().equals("playsound"))

View File

@ -550,6 +550,14 @@ public class PlayerData extends OfflinePlayerData implements Closable, Experienc
return unlockedItems.add(unlockable.getUnlockNamespacedKey()); return unlockedItems.add(unlockable.getUnlockNamespacedKey());
} }
/**
* Locks an item for the player by removing it from the unlocked items map if it is present.
* This is mainly used to remove unlocked items when changing class or reallocating a skill tree.
*/
public void lock(Unlockable unlockable){
unlockedItems.remove(unlockable.getUnlockNamespacedKey());
}
public void setLevel(int level) { public void setLevel(int level) {
this.level = Math.max(1, level); this.level = Math.max(1, level);

View File

@ -5,6 +5,7 @@ import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.quest.trigger.StatTrigger; import net.Indyuce.mmocore.api.quest.trigger.StatTrigger;
import net.Indyuce.mmocore.api.quest.trigger.Trigger; import net.Indyuce.mmocore.api.quest.trigger.Trigger;
import net.Indyuce.mmocore.api.quest.trigger.api.Removable;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
@ -105,15 +106,16 @@ public class ExperienceItem {
* Used when the player level is reset to 0 ( reallocate point in skill tree for instance) * Used when the player level is reset to 0 ( reallocate point in skill tree for instance)
* Creates an opposite playerModifier to compensate all the effect that existed before. * Creates an opposite playerModifier to compensate all the effect that existed before.
*/ */
public void removeStatTriggers(PlayerData playerData) { public void removeTriggers(PlayerData playerData) {
for (Trigger trigger : triggers) { for (Trigger trigger : triggers) {
if (trigger instanceof StatTrigger statTrigger) if (trigger instanceof Removable)
statTrigger.remove(playerData); ((Removable) trigger).remove(playerData);
} }
} }
/** /**
* Used when a player connects back to give back all the stats that he should have. * Used when a player connects back to give back all the stats that he should have.
*
* @param playerData * @param playerData
*/ */
public void applyStatTriggers(PlayerData playerData) { public void applyStatTriggers(PlayerData playerData) {

View File

@ -4,7 +4,6 @@ import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.experience.ExperienceObject; import net.Indyuce.mmocore.experience.ExperienceObject;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import java.util.ArrayList; import java.util.ArrayList;
@ -62,7 +61,7 @@ public class ExperienceTable {
for (ExperienceItem item : items) { for (ExperienceItem item : items) {
int timesClaimed = playerData.getClaims(object, this, item); int timesClaimed = playerData.getClaims(object, this, item);
for (int i = 0; i < timesClaimed; i++) for (int i = 0; i < timesClaimed; i++)
item.removeStatTriggers(playerData); item.removeTriggers(playerData);
} }
} }
@ -74,7 +73,7 @@ public class ExperienceTable {
int timesClaimed = playerData.getClaims(object, this, item); int timesClaimed = playerData.getClaims(object, this, item);
playerData.setClaims(object, this, item, 0); playerData.setClaims(object, this, item, 0);
for (int i = 0; i < timesClaimed; i++) for (int i = 0; i < timesClaimed; i++)
item.removeStatTriggers(playerData); item.removeTriggers(playerData);
} }
} }