PyvesB / advanced-achievements

:fireworks: Popular plugin that adds unique and challenging achievements to Minecraft servers.
https://www.spigotmc.org/resources/83466
GNU General Public License v3.0
201 stars 212 forks source link

Multiple Requirement Achievements #616

Open Laarryy opened 4 years ago

Laarryy commented 4 years ago

Hello, I may be wrong, but I can't seem to find a way to set up achievements in the config so that several steps must be completed before the achievement is granted. I thought of making several single achievements (with no reward), and then a final achievement with a reward that is completed by unlocking all of the single achievements, but I'm not sure how I can set up one achievement to be unlocked by others. My end goal, for example, could be to give a reward when a player has completed all of the following: -Mine 30 000 stone -Mine 2 048 Coal ore -Mine 1 024 iron ore -Mine 512 Gold ore -Mine 512 Redstone ore -Mine 256 Lapis ore -Mine 64 Diamond ore

I have tried this as follows (replacing values with 1 for easy testing):

Breaks: stone: '1': diamond_ore: '1': gold_ore: '1': coal_ore: '1': redstone_ore: '1': lapis_ore: '1': iron_ore: '1': Goal: [Goal]. Message: ยง1The greatest miner ever! Name: break_everything DisplayName: [name] Reward: Command: Execute: give PLAYER [reward]

When I run this, the plugin works fine and gives no errors on startup, however, the achievement is granted only by breaking iron_ore, and the other blocks have no effect.

Is there any way to set up such an achievement? Thank you.

Laarryy commented 4 years ago

In pondering this further, I've come to the realization that an achievement unlocked by completing other achievements is all that is really necessary in order for this to work. While I can't seem to find this included, is it even possible to add it to the game? I suppose the category would be something like AchievementsReceived and the possible subsets of this would just be a list of all other achievements.

For example:

Breaks: stone: '1': Goal: [Goal] Message: [Message] Name: break_stone DisplayName: [name]

etc.

and then, after all blocktypes inputted as individual achievements:

AchievementsReceived: break_stone | break_diamond | break_redstone | etc. '1': Goal: [Goal] Message: [Message] Name: break_everything DisplayName: [name] Reward: Command: Execute: give player [reward]

I hope this makes sense; would it work? Is this even possible?

Thanks again for taking the time to read all of this and potentially deal with my nonsense xD

PyvesB commented 4 years ago

Hello @larryb11,

You can group multiple sub-categories by following the Wiki or the default configuration file. Doing more complex things such as unlocking achievements by completing other achievements is not currently possible out of the box, see #82. ๐Ÿ˜‰

Hope this helps!

Pyves

Laarryy commented 4 years ago

Thank you so much for you speedy response, @PyvesB!

However, I suppose my question was poorly worded.

I have attempted several different ways to group the sub-categories to my needs. For example, using:

stone|diamond_ore|gold_ore|coal_ore|redstone_ore|lapis_ore|iron_ore: '1':

However, that grants the achievement whenever any one of these blocks is broken.

Is there a way to have it so one sub-categorized achievement is completed only when (for example):

ALL: -30 000 stone mined -2 048 Coal ore mined -1 024 iron ore mined -512 Gold ore mined -512 Redstone ore mined -256 Lapis ore mined -64 Diamond ore mined

and not when only one of these is done?

Thank you so much for your help!

Larry

PyvesB commented 4 years ago

However, I suppose my question was poorly worded.

Or maybe I didn't read carefully enough. ๐Ÿ˜‰

The Wiki section I linked to is in effect "this block OR this other block", rather than "this block with this threshold AND this other block with this other threshold". And unfortunately, there isn't currently a way to award a sub-categorized achievement when all conditions similar to the ones you've listed above are met.

Laarryy commented 4 years ago

Thank you very much @PyvesB!

I was hoping there was, but since there isn't (yet?), I'll share with you a workaround I've been using to accomplish my goal in case anyone else has the same question. I saw on another issue here that there exists a plugin the hooks AdvancedAchievements and Luckperms (AALP). It allows for a luckperms addgroup or addperm command to be run when several (user specified) AACH achievements are completed. So far, it works well!

I'll keep an eye on the update log for when something is added that allows me to streamline the process and eliminate the AALP component. Perhaps a way to award achievements based on specific achievements completed? Maybe a way to replace '|' with ',' to make it AND, (and a way to specify different thresholds) not OR as you described.

I understand that all of this is very complicated and time consuming, and I am in the process of learning Java to be able to contribute, however, there is certainly a lot to learn! If I ever get to the level of technical skill to be able to do it, I will definitely try. If you do have the opportunity to work on it, and beat me to it, I'd really appreciate it for sure!

Thank again for your help,

Larry

PyvesB commented 4 years ago

Maybe a way to replace '|' with ',' to make it AND, (and a way to specify different thresholds)

I like the idea of replacing '|' with ',' (or simply '&'). Though the thresholds is a tricky one to solve without making the config look inconsistent or confusing.

I understand that all of this is very complicated and time consuming, and I am in the process of learning Java to be able to contribute, however, there is certainly a lot to learn! If I ever get to the level of technical skill to be able to do it, I will definitely try.

Help would definitely be appreciated! I've been faithfully maintaining this project since 2015, but my time is limited given that this is just a hobby and that I'm involved in quite a few other side projects. Supportive/friendly people like yourself are also increasingly rare in the Minecraft community nowadays, which doesn't help with motivation. ๐Ÿ˜‰

Laarryy commented 4 years ago

Hey @PyvesB,

Don't worry about the jerks that seem to thrive off of demands and negative feedback. What you're doing out of the goodness of your own heart is more than enough to overshadow them and their negativity!

Just one, unrelated, followup question though:

Is it possible to award an achievement when a specific item is picked up? Not just any amount of things picked up, but for example an achievement when a player picks up or gets elytra?

I feel kinda stupid for asking, but I genuinely have no clue!

Thanks again,

Larry

PyvesB commented 4 years ago

Is it possible to award an achievement when a specific item is picked up? Not just any amount of things picked up, but for example an achievement when a player picks up or gets elytra?

Not currently possible, as ItemPickups is a "normal" achievement category. Issue #56 is related.