Skip to content

Commit 49fa468

Browse files
Merge pull request #445 from VolmitSoftware/Development
MAJOR Fixes / Changes
2 parents 4e30b83 + 5a33e02 commit 49fa468

19 files changed

+363
-74
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ plugins {
2323
id "de.undercouch.download" version "5.0.1"
2424
}
2525

26-
version '1.11.1-1.20.1'
26+
version '1.12.0-1.20.1'
2727
def nmsVersion = "1.20.1" //[NMS]
2828
def apiVersion = '1.20'
2929
def specialSourceVersion = '1.11.0' //[NMS]

src/main/java/com/volmit/adapt/Adapt.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,8 @@
3131
import com.volmit.adapt.nms.GlowingEntities;
3232
import com.volmit.adapt.nms.NMS;
3333
import com.volmit.adapt.util.*;
34-
import com.volmit.adapt.util.command.AdaptSuggestionProvider;
35-
import com.volmit.adapt.util.command.AdaptSuggestionProviderListing;
36-
import com.volmit.adapt.util.command.ParticleSuggestionProvider;
37-
import com.volmit.adapt.util.command.SoundSuggestionProvider;
34+
import com.volmit.adapt.util.command.*;
35+
import com.volmit.adapt.util.command.suggest.*;
3836
import com.volmit.adapt.util.secret.SecretSplash;
3937
import de.slikey.effectlib.EffectManager;
4038
import io.github.mqzn.commands.SpigotCommandManager;
@@ -84,6 +82,8 @@ public class Adapt extends VolmitPlugin {
8482
@Getter
8583
private Map<String, Window> guiLeftovers = new HashMap<>();
8684

85+
86+
8787

8888

8989
public Adapt() {
@@ -96,10 +96,15 @@ public void start() {
9696
audiences = BukkitAudiences.create(this);
9797
commandManager = new SpigotCommandManager(this, CommandExecutionCoordinator.Type.SYNC);
9898
parser = new AnnotationParser<>(commandManager);
99-
commandManager.suggestionProviderRegistry().register(new AdaptSuggestionProvider());
100-
commandManager.suggestionProviderRegistry().register(new AdaptSuggestionProviderListing());
99+
commandManager.suggestionProviderRegistry().register(new AdaptSkillListingProvider());
100+
commandManager.suggestionProviderRegistry().register(new AdaptSkillProvider());
101+
102+
commandManager.suggestionProviderRegistry().register(new AdaptAdaptationListingProvider());
103+
commandManager.suggestionProviderRegistry().register(new AdaptAdaptationProvider());
104+
101105
commandManager.suggestionProviderRegistry().register(new SoundSuggestionProvider());
102106
commandManager.suggestionProviderRegistry().register(new ParticleSuggestionProvider());
107+
commandManager.suggestionProviderRegistry().register(new BooleanSuggestionProvider());
103108

104109
NMS.init();
105110
Localizer.updateLanguageFile();
@@ -142,7 +147,6 @@ public void start() {
142147
}
143148

144149

145-
146150
public void startSim() {
147151
ticker = new Ticker();
148152
adaptServer = new AdaptServer();
Lines changed: 86 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.volmit.adapt;
22

33
import com.google.common.collect.Maps;
4-
import com.volmit.adapt.api.world.PlayerAdaptation;
4+
import com.volmit.adapt.api.adaptation.Adaptation;
5+
import com.volmit.adapt.api.skill.Skill;
56
import com.volmit.adapt.api.world.PlayerData;
67
import com.volmit.adapt.api.world.PlayerSkillLine;
78
import com.volmit.adapt.util.Localizer;
@@ -10,6 +11,7 @@
1011
import org.jetbrains.annotations.NotNull;
1112
import org.jetbrains.annotations.Nullable;
1213

14+
import java.util.List;
1315
import java.util.Map;
1416
import java.util.function.BiFunction;
1517
import java.util.function.Function;
@@ -18,18 +20,20 @@ public class PapiExpansion extends PlaceholderExpansion {
1820

1921
private final Map<String, Function<PlayerSkillLine, String>> skillMap = Maps.newHashMap();
2022
private final Map<String, Function<PlayerData, String>> playerMap = Maps.newHashMap();
21-
private final Map<String, BiFunction<PlayerSkillLine, PlayerAdaptation, String>> adaptationMap = Maps.newHashMap();
23+
private final Map<String, BiFunction<PlayerData, Adaptation<?>, String>> adaptationMap = Maps.newHashMap();
2224

2325
public PapiExpansion() {
26+
// this should be %adapt_skill_level%, %adapt_skill_knowledge%, %adapt_skill_xp%, %adapt_skill_freshness%, %adapt_skill_multiplier%, %adapt_skill_name%
27+
// where skill is the id of the skill eg: %adapt_herbalism_level%
2428
skillMap.put("level", skill -> String.valueOf(skill.getLevel()).equals("-5000") ? "0" : String.valueOf(skill.getLevel()));
2529
skillMap.put("knowledge", skill -> String.valueOf(skill.getKnowledge()).equals("-5000") ? "0" : String.valueOf(skill.getKnowledge()));
2630
skillMap.put("xp", skill -> String.format("%.2f", skill.getXp()).equals("-5000.00") ? "0" : String.format("%.2f", skill.getXp()));
2731
skillMap.put("freshness", skill -> String.valueOf(skill.getFreshness()).equals("-5000") ? "0" : String.valueOf(skill.getFreshness()));
2832
skillMap.put("multiplier", skill -> String.valueOf(skill.getMultiplier()).equals("-5000") ? "0" : String.valueOf(skill.getMultiplier()));
2933
skillMap.put("name", skill -> Localizer.dLocalize("skill", skill.getLine(), "name"));
3034

31-
//XP.getLevelForXp(adaptPlayer.getData().getMasterXp())
32-
35+
// this should be %adapt_player_level%, %adapt_player_multiplier%, %adapt_player_availablepower%, %adapt_player_maxpower%, %adapt_player_usedpower%, %adapt_player_wisdom%, %adapt_player_masterxp%, %adapt_player_seenthings%
36+
// the player is provided by the ingame context
3337
playerMap.put("level", playerData -> String.valueOf(playerData.getMultiplier()).equals("-5000") ? "0" : String.valueOf(playerData.getLevel()));
3438
playerMap.put("multiplier", playerData -> String.valueOf(playerData.getMultiplier()).equals("-5000") ? "0" : String.valueOf(playerData.getMultiplier()));
3539
playerMap.put("availablepower", playerData -> String.valueOf(playerData.getAvailablePower()).equals("-5000") ? "0" : String.valueOf(playerData.getAvailablePower()));
@@ -48,8 +52,37 @@ public PapiExpansion() {
4852
+ playerData.getSeenPotionEffects().getSeen().size() + playerData.getSeenRecipes().getSeen().size()
4953
+ playerData.getSeenPotionEffects().getSeen().size() + playerData.getSeenWorlds().getSeen().size()));
5054

51-
adaptationMap.put("name", (skillLine, adaptation) -> Localizer.dLocalize(skillLine.getLine(), adaptation.getId(), "name"));
52-
adaptationMap.put("level", (skillLine, adaptation) -> String.valueOf(adaptation.getLevel()).equals("-5000") ? "0" : String.valueOf(adaptation.getLevel()));
55+
// this should be %adapt_adaptation_<ID>_level%, %adapt_adaptation_<ID>_maxlevel%
56+
// where adaptation is the adaptation id (e.g. %adapt_adaptation_stealth-ghost-armor_level%)
57+
adaptationMap.put("maxlevel", (playerData, adaptation) -> String.valueOf(adaptation.getMaxLevel()));
58+
adaptationMap.put("level", (playerData, adaptation) -> String.valueOf(getAdaptionLevel(adaptation, playerData)));
59+
adaptationMap.put("name", (playerData, adaptation) -> String.valueOf(getAdaptionLocalizedName(adaptation)));
60+
}
61+
62+
private Integer getAdaptionLevel(Adaptation<?> adaptation, PlayerData playerData) {
63+
List<Skill<?>> skills = Adapt.instance.getAdaptServer().getSkillRegistry().getSkills();
64+
for (Skill<?> skill : skills) {
65+
List<Adaptation<?>> adaptations = skill.getAdaptations();
66+
for (Adaptation<?> a : adaptations) {
67+
if (a.equals(adaptation)) {
68+
return playerData.getSkillLine(skill.getName()).getAdaptationLevel(adaptation.getName());
69+
}
70+
}
71+
}
72+
return 0;
73+
}
74+
75+
private String getAdaptionLocalizedName(Adaptation<?> adaptation) {
76+
List<Skill<?>> skills = Adapt.instance.getAdaptServer().getSkillRegistry().getSkills();
77+
for (Skill<?> skill : skills) {
78+
List<Adaptation<?>> adaptations = skill.getAdaptations();
79+
for (Adaptation<?> a : adaptations) {
80+
if (a.equals(adaptation)) {
81+
return Localizer.dLocalize(skill.getId(), adaptation.getDisplayName(), "name");
82+
}
83+
}
84+
}
85+
return "Unknown";
5386
}
5487

5588
@Override
@@ -72,42 +105,65 @@ public boolean persist() {
72105
return true;
73106
}
74107

75-
/* %adapt_<command/skill line>_[command/adaption]%
76-
Example for Brian's smooth brain:
77-
- %adapt_multiplier% - Returns the players multiplier
78-
- %adapt_hunter_level% - Returns the level of the players hunter skill
79-
- %adapt_nether_witherresist% - Returns the level of the Wither Armor Adaptation
80-
*/
81108
@Override
82109
public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) {
83110
String[] args = params.split("_");
84111
PlayerData p = Adapt.instance.getAdaptServer().peekData(player.getUniqueId());
112+
String key = args[0];
85113

86-
if (Adapt.instance.getAdaptServer().getSkillRegistry().getSkill(args[0]) == null) {
87-
for (String k : playerMap.keySet()) {
88-
if (k.equalsIgnoreCase(args[0])) {
89-
return playerMap.get(k).apply(p);
90-
}
114+
// Handle player attributes
115+
if (key.equals("player")) {
116+
String playerAttr = args.length > 1 ? args[1] : "";
117+
if (playerMap.containsKey(playerAttr)) {
118+
return playerMap.get(playerAttr).apply(p);
91119
}
92-
} else {
93-
PlayerSkillLine line = p.getSkillLine(args[0]);
94-
for (String k : skillMap.keySet()) {
95-
if (k.equalsIgnoreCase(args[1])) {
96-
return skillMap.get(k).apply(line);
97-
}
120+
}
121+
122+
// Handle skill attributes
123+
if (key.equals("skill")) {
124+
String skillID = args.length > 1 ? args[1] : "";
125+
PlayerSkillLine line = p.getSkillLine(skillID);
126+
String skillAttr = args.length > 2 ? args[2] : "";
127+
if (line != null && skillMap.containsKey(skillAttr)) {
128+
return skillMap.get(skillAttr).apply(line);
98129
}
130+
}
99131

100-
String adaptName = args[0] + "-" + args[1];
101-
if (line.getAdaptations().containsKey(adaptName)) {
102-
PlayerAdaptation adapt = line.getAdaptation(adaptName);
103-
for (String k : adaptationMap.keySet()) {
104-
if (k.equalsIgnoreCase(args[2])) {
105-
return adaptationMap.get(k).apply(line, adapt);
132+
// Handle adaptation attributes
133+
if (key.equals("adaptation")) {
134+
String adaptID = args.length > 1 ? args[1] : "";
135+
String adaptAttr = args.length > 2 ? args[2] : "";
136+
Adapt.verbose("Triggered adaptation Lookup: " + adaptID + " " + adaptAttr);
137+
List<Skill<?>> skill = Adapt.instance.getAdaptServer().getSkillRegistry().getSkills();
138+
for (Skill<?> s : skill) {
139+
List<Adaptation<?>> adaptations = s.getAdaptations();
140+
for (Adaptation<?> a : adaptations) {
141+
Adapt.info(a.getId());
142+
}
143+
}
144+
for (Skill<?> s : skill) {
145+
List<Adaptation<?>> adaptations = s.getAdaptations();
146+
for (Adaptation<?> a : adaptations) {
147+
Adapt.verbose(adaptID + " " + a.getId());
148+
if (a.getId().contains(adaptID)) {
149+
Adapt.verbose("Found adaptation: " + a.getId());
150+
if ("level".equalsIgnoreCase(adaptAttr)) {
151+
Adapt.verbose("Doing Level Lookup");
152+
return adaptationMap.get("level").apply(p, a);
153+
} else if ("maxlevel".equalsIgnoreCase(adaptAttr)) {
154+
Adapt.verbose("Doing MaxLevel Lookup");
155+
return adaptationMap.get("maxlevel").apply(p, a);
156+
} else if ("name".equalsIgnoreCase(adaptAttr)) {
157+
Adapt.verbose("Doing Name Lookup");
158+
return adaptationMap.get("name").apply(p, a);
159+
}
106160
}
107161
}
108162
}
109163
}
110-
111164
return null;
112165
}
166+
167+
113168
}
169+

src/main/java/com/volmit/adapt/api/adaptation/Adaptation.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ default void openGui(Player player) {
431431
.addLore((isPermanent() ? C.RED + "" + C.BOLD + Localizer.dLocalize("snippets", "adaptmenu", "maynotunlearn") : ""))
432432
.onLeftClick((e) -> {
433433
if (mylevel >= lvl) {
434-
unlearn(player, lvl);
434+
unlearn(player, lvl, false);
435435

436436
player.getWorld().playSound(player.getLocation(), Sound.BLOCK_NETHER_GOLD_ORE_PLACE, 0.7f, 1.355f);
437437
player.getWorld().playSound(player.getLocation(), Sound.BLOCK_BEACON_DEACTIVATE, 0.4f, 0.755f);
@@ -504,20 +504,27 @@ private void onGuiClose(Player player, boolean openPrevGui) {
504504
}
505505
}
506506

507-
default void unlearn(Player player, int lvl) {
508-
if (isPermanent()) {
509-
//todo message that this is permanent
507+
default void unlearn(Player player, int lvl, boolean force) {
508+
if (isPermanent() && !force) {
510509
return;
511510
}
512-
int mylevel = getPlayer(player).getSkillLine(getSkill().getName()).getAdaptationLevel(getName());
513-
int rc = getRefundCostFor(lvl - 1, mylevel);
514-
511+
int myLevel = getPlayer(player).getSkillLine(getSkill().getName()).getAdaptationLevel(getName());
512+
int rc = getRefundCostFor(lvl - 1, myLevel);
515513
if (!AdaptConfig.get().isHardcoreNoRefunds()) {
516514
getPlayer(player).getData().getSkillLine(getSkill().getName()).giveKnowledge(rc);
517515
}
518516
getPlayer(player).getData().getSkillLine(getSkill().getName()).setAdaptation(this, lvl - 1);
519517
}
520518

519+
default void learn(Player player, int lvl, boolean force) {
520+
int myLevel = getPlayer(player).getSkillLine(getSkill().getName()).getAdaptationLevel(getName());
521+
int c = getCostFor(lvl, myLevel);
522+
if (getPlayer(player).getData().hasPowerAvailable(c) || force) {
523+
if (getPlayer(player).getData().getSkillLine(getSkill().getName()).spendKnowledge(c) || force) {
524+
getPlayer(player).getData().getSkillLine(getSkill().getName()).setAdaptation(this, lvl);
525+
}
526+
}
527+
}
521528

522529
default boolean isAdaptationRecipe(Recipe recipe) {
523530
if (!this.getSkill().isEnabled()) {
@@ -528,7 +535,6 @@ default boolean isAdaptationRecipe(Recipe recipe) {
528535
return true;
529536
}
530537
}
531-
532538
return false;
533539
}
534540
}

src/main/java/com/volmit/adapt/command/CommandAdapt.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.volmit.adapt.command.gui.CommandGUI;
77
import com.volmit.adapt.command.item.CommandExperience;
88
import com.volmit.adapt.command.item.CommandKnowledge;
9+
import com.volmit.adapt.command.skill.CommandSkillDeterminator;
910
import com.volmit.adapt.util.C;
1011
import com.volmit.adapt.util.command.FConst;
1112
import io.github.mqzn.commands.annotations.base.Command;
@@ -24,6 +25,7 @@
2425
@SubCommand(CommandGUI.class) // GUI
2526
@SubCommand(CommandExperience.class) // GUI
2627
@SubCommand(CommandKnowledge.class) // GUI
28+
@SubCommand(CommandSkillDeterminator.class) // SKILL
2729
public class CommandAdapt {
2830

2931
@Default

src/main/java/com/volmit/adapt/command/gui/CommandGUI.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import com.volmit.adapt.api.skill.SkillRegistry;
2424
import com.volmit.adapt.content.gui.SkillsGui;
2525
import com.volmit.adapt.util.C;
26-
import com.volmit.adapt.util.command.AdaptSuggestionProviderListing;
26+
import com.volmit.adapt.util.command.suggest.AdaptAdaptationListingProvider;
2727
import com.volmit.adapt.util.command.FConst;
2828
import io.github.mqzn.commands.annotations.base.Arg;
2929
import io.github.mqzn.commands.annotations.base.Default;
@@ -43,12 +43,11 @@ public final class CommandGUI {
4343

4444
@SubCommandExecution
4545
public void execute(CommandSender sender,
46-
@Arg(id = "guiTarget") @Suggest(provider = AdaptSuggestionProviderListing.class) String guiTarget,
46+
@Arg(id = "guiTarget") @Suggest(provider = AdaptAdaptationListingProvider.class) String guiTarget,
4747
@Arg(id = "player", optional = true) @Nullable Player player,
4848
@Arg(id = "force", optional = true, defaultValue = "false") boolean force
49-
){
49+
) {
5050
Player targetPlayer = player;
51-
boolean forceOpen = force;
5251
if (targetPlayer == null && sender instanceof ConsoleCommandSender) {
5352
FConst.error("You must specify a player when using this command from console.").send(sender);
5453
} else if (targetPlayer == null) {
@@ -63,7 +62,7 @@ public void execute(CommandSender sender,
6362
if (guiTarget.startsWith("[Skill]")) {
6463
for (Skill<?> skill : SkillRegistry.skills.sortV()) {
6564
if (guiTarget.equals("[Skill]" + skill.getName())) {
66-
if (forceOpen || skill.openGui(targetPlayer, true)) {
65+
if (force || skill.openGui(targetPlayer, true)) {
6766
FConst.success("Opened GUI for " + skill.getName() + " for " + targetPlayer.getName()).send(sender);
6867
} else {
6968
FConst.error("Failed to open GUI for " + skill.getName() + " for " + targetPlayer.getName() + " - No Permission, remove from blacklist!").send(sender);
@@ -77,7 +76,7 @@ public void execute(CommandSender sender,
7776
for (Skill<?> skill : SkillRegistry.skills.sortV()) {
7877
for (Adaptation<?> adaptation : skill.getAdaptations()) {
7978
if (guiTarget.equals("[Adaptation]" + adaptation.getName())) {
80-
if (forceOpen || adaptation.openGui(targetPlayer, true)) {
79+
if (force || adaptation.openGui(targetPlayer, true)) {
8180
FConst.success("Opened GUI for " + adaptation.getName() + " for " + targetPlayer.getName()).send(sender);
8281
} else {
8382
FConst.error("Failed to open GUI for " + adaptation.getName() + " for " + targetPlayer.getName() + " - No Permission, remove from blacklist!").send(sender);
@@ -88,6 +87,7 @@ public void execute(CommandSender sender,
8887
}
8988
}
9089

90+
9191
info(sender);
9292
}
9393

src/main/java/com/volmit/adapt/command/item/CommandExperience.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.volmit.adapt.api.skill.SkillRegistry;
2323
import com.volmit.adapt.content.item.ExperienceOrb;
2424
import com.volmit.adapt.util.C;
25-
import com.volmit.adapt.util.command.AdaptSuggestionProvider;
25+
import com.volmit.adapt.util.command.suggest.AdaptSkillListingProvider;
2626
import com.volmit.adapt.util.command.FConst;
2727
import io.github.mqzn.commands.annotations.base.*;
2828
import io.github.mqzn.commands.annotations.subcommands.SubCommandExecution;
@@ -38,7 +38,7 @@ public final class CommandExperience {
3838

3939
@SubCommandExecution
4040
public void execute(CommandSender sender,
41-
@Arg(id = "skillname") @Suggest(provider = AdaptSuggestionProvider.class) String skillName,
41+
@Arg(id = "skillname") @Suggest(provider = AdaptSkillListingProvider.class) String skillName,
4242
@Arg(id = "amount") @Range(min="1", max="100000") int amount,
4343
@Arg(id = "player", optional = true) @Nullable Player player) {
4444

src/main/java/com/volmit/adapt/command/item/CommandKnowledge.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.volmit.adapt.api.skill.SkillRegistry;
2323
import com.volmit.adapt.content.item.KnowledgeOrb;
2424
import com.volmit.adapt.util.C;
25-
import com.volmit.adapt.util.command.AdaptSuggestionProvider;
25+
import com.volmit.adapt.util.command.suggest.AdaptSkillListingProvider;
2626
import com.volmit.adapt.util.command.FConst;
2727
import io.github.mqzn.commands.annotations.base.*;
2828
import io.github.mqzn.commands.annotations.subcommands.SubCommandExecution;
@@ -38,7 +38,7 @@ public final class CommandKnowledge {
3838

3939
@SubCommandExecution
4040
public void execute(CommandSender sender,
41-
@Arg(id = "skillname") @Suggest(provider = AdaptSuggestionProvider.class) String skillName,
41+
@Arg(id = "skillname") @Suggest(provider = AdaptSkillListingProvider.class) String skillName,
4242
@Arg(id = "amount") @Range(min="1", max="100000") int amount,
4343
@Arg(id = "player", optional = true) @Nullable Player player) {
4444

0 commit comments

Comments
 (0)