GPAddons / ClaimClassifier

Addon for GriefPrevention that provides classification for claims, such as sorting and naming
http://r.robomwm.com/patreon
MIT License
4 stars 3 forks source link

Command request: /claimtop to display claimblock balances like /baltop #15

Closed NullCase closed 4 years ago

NullCase commented 4 years ago

The command /baltop or /balancetop (essentials) will display all $ balances for players. I want to build /claimtop (alternatives /claimblocktop, /claimlisttop, other suggestions welcome).

/claimtop will display player balances using the same format as essentials /baltop but instead of $ it shows claim block balances.

Questions: Is there anything about this update which causes unexpected problems? Do you already have plans to build this into GriefPrevention? What does essentials do well/poorly when getting /baltop data? (because it takes a while when you run the command, even for just 1000 players).

Funding is available

RoboMWM commented 4 years ago

As for names to UUIDs: it is not safe to run Bukkit#getOfflinePlayer asynchronously. From what I've read, it was (originally?) intended to be thread safe, but it is not. So here are some options:

NullCase commented 4 years ago

I don't know how the local server cache works. Do all MC servers have this? How do names get into the cache? How long are they held for? What's the downside of using the easy route (beside possibly incomplete name lists)

RoboMWM commented 4 years ago

Downside of easy route is just that, may be incomplete.

The local user cache exists in all servers, and its file can be found in your server's root directory as usercache.json. I'm not sure of the specifics, but I do know that all players who have logged in to the server are have their UUID->name info stored, within some determined range of time, in this file.

NullCase commented 4 years ago

ok awesome. The easy route sounds best. Let's try that. (edit: it looks like Usernames survive for one month in usercache.json I like it).

For the 'someone' part let's have that specified in the configuration. Because then it doesn't have to be decided in advance.

Also, this might be annoying but I want to add one thing to this feature. What if we set up /claimtop as a permissioned command? 'claimclassifier.claimtop' or something. I don't know how the format works.

Because i'd like to specify in GroupManager what groups have /claimtop

NullCase commented 4 years ago

It seems like this claimtop feature was more complicated than it appeared at first glance.

Is it a problem on your end? Like, if this kind of thing happens where you want to do one thing and end up having to do ten things.. I don't know if that's normal for coding work.

RoboMWM commented 4 years ago

It seems like this claimtop feature was more complicated than it appeared at first glance.

That's how things usually happen, but overall we're on track with what you posted here https://github.com/RoboMWM/ClaimClassifier/issues/15#issuecomment-635059696. Your steps don't fully account for technical "hurdles" e.g. converting offline players UUIDs to names (it does for some, if you consider the calculations happening asynchronously to avoid performance impact), but that's fine and not really something you need to know 100% about as the client/customer - just the complexity, as you state. (And I kinda did review the options and did an informal grading of complexity in that comment earlier, so no problems there.)

Idk the official agile methodologies, but I prefer doing little releases and seeing if the stuff is progressing to your liking instead of doing something all at once and then going back to change all sorts of things afterwards. I don't feel overwhelmed with this feature at all.

As for the 3 day delay that's just because I get busy and forget sometimes, especially after a weekend/beginning of the week. So it's ok to ping me on this from time to time if there's no activity, especially since you're a reliable client and nowhere near impatient. I do wish there was a better way for me to track stuff across all of my projects on GitHub - the new Notifications stuff is a bit closer - but if there was a way to have me view/sort all issues across all my projects would help me remember/attend to the stuff I'd like to finish instead of just visiting the various repos issues or going through my past notifications.

NullCase commented 4 years ago

will test tmr. Thanks @RoboMWM

it sounds like little releases are best. Because I too don't want to go back and redo all sorts.

Enjoy your time. There's no rush on my end. As you say, no where near impatient. You were very clear at the outset 3-odd years ago that flexible time was critical.

Tracking on github... yeah it seems like a common problem. I sometimes also miss issue updates/posts and have to manually visit. Especially for older issues. Or closed issues..

NullCase commented 4 years ago

when executing /claimtop it threw an exception.

[17:45:47 INFO]: NullCase issued server command: /claimtop
[17:45:48 ERROR]: [global] TaskChain Exception on com.robomwm.claimslistclassifier.command.ClaimTopCommand$$Lambda$5304/1318572203: java.lang.NoClassDefFoundError: org/apache/commons/io/FilenameUtils
[17:45:48 ERROR]: [global] Current Action Index was: 0
[17:45:48 WARN]: java.lang.Exception: java.lang.NoClassDefFoundError: org/apache/commons/io/FilenameUtils
[17:45:48 WARN]:        at com.robomwm.midnightportal.taskchain.TaskChain.handleError(TaskChain.java:1203)
[17:45:48 WARN]:        at com.robomwm.midnightportal.taskchain.TaskChain.access$600(TaskChain.java:57)
[17:45:48 WARN]:        at com.robomwm.midnightportal.taskchain.TaskChain$TaskHolder.run(TaskChain.java:1320)
[17:45:48 WARN]:        at com.robomwm.midnightportal.taskchain.TaskChain$TaskHolder.access$100(TaskChain.java:1266)
[17:45:48 WARN]:        at com.robomwm.midnightportal.taskchain.TaskChain.lambda$nextTask$18(TaskChain.java:1187)
[17:45:48 WARN]:        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[17:45:48 WARN]:        at java.util.concurrent.FutureTask.run(Unknown Source)
[17:45:48 WARN]:        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
[17:45:48 WARN]:        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
[17:45:48 WARN]:        at java.lang.Thread.run(Unknown Source)
[17:45:48 WARN]: Caused by: java.lang.NoClassDefFoundError: org/apache/commons/io/FilenameUtils
[17:45:48 WARN]:        at com.robomwm.claimslistclassifier.command.ClaimTopCommand.lambda$onCommand$1(ClaimTopCommand.java:86)
[17:45:48 WARN]:        at com.robomwm.midnightportal.taskchain.TaskChainTasks$GenericTask.run(TaskChainTasks.java:83)
[17:45:48 WARN]:        at com.robomwm.midnightportal.taskchain.TaskChain$TaskHolder.run(TaskChain.java:1312)
[17:45:48 WARN]:        ... 7 more
[17:45:48 WARN]: Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.FilenameUtils
[17:45:48 WARN]:        at java.net.URLClassLoader.findClass(Unknown Source)
[17:45:48 WARN]:        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:171)
[17:45:48 WARN]:        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:100)
[17:45:48 WARN]:        at java.lang.ClassLoader.loadClass(Unknown Source)
[17:45:48 WARN]:        at java.lang.ClassLoader.loadClass(Unknown Source)
[17:45:48 WARN]:        ... 10 more
RoboMWM commented 4 years ago

It's actually easy to see issues you opened - the topmost bar menu link Issues will provide you that view. I just wish there was an option in that view to view all issues on all repos I'm the owner of/a member of.

For the error - I guess I do have to shade in the dependency... the other plugin I use this in I don't shade it, or at least I thought I didn't, so I guess I'll doublecheck that.

NullCase commented 4 years ago

@RoboMWM it looks like ClaimTop is done! $ sent.

Is there anything I'm forgetting here?

RoboMWM commented 4 years ago

Not aware of anything else to do for this. Thanks!

NullCase commented 4 years ago

claimtop with names

NullCase commented 4 years ago

Alright! It might be a little bit before I have more dev work, or the next job might be a smaller one. It's just because I had to replace my computer and will have to be more careful about future projects. Just a heads up.