If one of my args in my command was <time>, how would I make it so if the player does this, /command 4h39m3s it would output hours = 4 mins = 39 seconds = 3 but then if they did it in different orders like 39m4h3s it would output hours = 4 mins = 39 seconds = 3 as well. Also, how could I make it so you dont have to put an hour, mins, or seconds, and I could just do /command 49m3s and it would output hours = 0 mins = 49 seconds = 3 and I could also do stuff like just 5h hours = 5 mins = 0 seconds = 0 thank you for your help
true(plus the code i gave you was wrong). My suggestion would be to still get the index of the letter, but then have a loop that goes thrrough and checks how far the number goes back. Code (Text): String args = "1h3s5m" int last = args.indexOf("h") int first; for(int i = last; i >= 0; i--){ if(isANumber(args[i])) first = i; else break; } int h = args.substring(first, last); But you'd have to make the code to check if it's a number
I reliased what I was talking about Code (Text): String time = args[1]; int h = time.indexOf("h")-1; int m = time.indexOf("m")-1; int s = time.indexOf("s")-1; sender.sendMessage(h + " hours, " + m + " minutes, "+ s + " seconds."); However, this code for some reason doesnt work my args was 5h4m3s my message I got from it was : 0 hours, 2mins, 4secs. No idea why :/ @Bimmr
The code I gave before would return the index not the value, you'd have to args[h], args[m], etc. Although as you said it would only work for single digits. the fact that you're allowing them to switch the hours,minutes, and seconds is what makes it a little tricky.
Ok, how would I make it so its straight forward hours mins seconds, or should I seperate them so you would do it as '03:02:01' then seperate them?
Yes, that'll be much easier. You can just then split it at ":" and youll get hrs, mins and sec respectively.
You could also use the h m s and but in the format 1h.2s so you split it at the "." and iterate through the string you get when split. Then you check to see which letter it ends in and do what u wanna do.
You can try to use this method : Code (Text): public Date parseDate(String date){ int weeks = 0; int days = 0; int hours = 0; int mins = 0; int secs = 0; String nums = ""; for(int j = 0; j < date.length(); j++){ String c = date.substring(j, j + 1); try { Integer.parseInt(c); nums = new StringBuilder().append(nums).append(c).toString(); } catch (Exception e) { int num = Integer.parseInt(nums); if(c.equals("w"))weeks = num; else if(c.equals("d"))days = num; else if(c.equals("h"))hours = num; else if(c.equals("m"))mins = num; else if(c.equals("s"))secs = num; else throw new IllegalArgumentException("Invalid time measurement: " + c); nums = ""; } } long time = 0; time += TimeUnit.SECONDS.toMillis(secs); time += TimeUnit.MINUTES.toMillis(mins); time += TimeUnit.HOURS.toMillis(hours); time += TimeUnit.DAYS.toMillis(days); time += TimeUnit.DAYS.toMillis(weeks*7); return new Date(time); } Command you type : Code (Text): /timetest 5h2s3m Get the argument : Code (Text): String time = args[0]; Parse it Code (Text): Date time = parseDate(time); and finally, you can use the following methods to parse the time with the Date object which was returned with the parse method. Code (Text): long timeMillis = date.getTime(); int days = Math.ceil((int) TimeUnit.MILLISECONDS.toDays(timeMillis)); int weeks = Math.ceil(days / 7); timeMillis -= TimeUnit.DAYS.toMillis(days); int hours = Math.ceil((int) TimeUnit.MILLISECONDS.toHours(timeMillis)); timeMillis -= TimeUnit.HOURS.toMillis(hours); int minutes = Math.ceil((int) TimeUnit.MILLISECONDS.toMinutes(timeMillis)); timeMillis -= TimeUnit.MINUTES.toMillis(minutes); int seconds = Math.ceil((int) TimeUnit.MILLISECONDS.toSeconds(timeMillis)); Edit: Not tested yet, if it don't work, tell me!
I honestly dont really understand that code, so Im jot going to use t. Ive got my sustem working with seperating it with :, so Ill stick with it for now. Tomorrow I need to just translate the seconds into hours minutes seconds again (cba rn 1am). Thanks for the help anyway!
Well, it's just a utility method, so you don't REALLY have to understand it as long as you know the output. You can go over it later and take time to learn the algorithms (I don't always learn the algorithms myself but just find them on the internet, and sometimes I go back later).