mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-18 17:53:00 +01:00
Compare commits
2388 Commits
1.3.05
...
dev-partym
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
663d54d31f | ||
|
|
9a5f4b638f | ||
|
|
9aa49a09da | ||
|
|
bf8945ac59 | ||
|
|
d9926bab4e | ||
|
|
38ba2c21e5 | ||
|
|
a48fb30edf | ||
|
|
92ec04bd46 | ||
|
|
0b6372a6ea | ||
|
|
4f8b66f94d | ||
|
|
0c52b3016c | ||
|
|
a2f80569e3 | ||
|
|
87df536a1f | ||
|
|
12e70490d8 | ||
|
|
23b1518dc0 | ||
|
|
6dbf2e0d95 | ||
|
|
60304e9643 | ||
|
|
614557e2fa | ||
|
|
e312e95aed | ||
|
|
2ee919b51f | ||
|
|
22f6ae858b | ||
|
|
3c3b4af2c4 | ||
|
|
feb0d1fe5d | ||
|
|
2d66b8ed12 | ||
|
|
483f348403 | ||
|
|
a8a5100f58 | ||
|
|
1f9dc70bb1 | ||
|
|
7f1ef61657 | ||
|
|
2e74c079b0 | ||
|
|
ce4295289a | ||
|
|
7fde04851d | ||
|
|
71d030e5ad | ||
|
|
b08649d0a4 | ||
|
|
0a11a9a2c8 | ||
|
|
068f47b523 | ||
|
|
79aab57abc | ||
|
|
2cf58f1b5b | ||
|
|
9678875b4b | ||
|
|
d1a7ce827a | ||
|
|
9b2f4b7bde | ||
|
|
24e5147a2a | ||
|
|
0423a7831d | ||
|
|
feea22b3a4 | ||
|
|
7f40a9f284 | ||
|
|
bc706109e0 | ||
|
|
a25bddba5e | ||
|
|
ab897724d3 | ||
|
|
a7861fc54b | ||
|
|
936bec8ff5 | ||
|
|
01d10971a1 | ||
|
|
12e388a392 | ||
|
|
fb450671d6 | ||
|
|
fca5f9ec98 | ||
|
|
c9ae6436bd | ||
|
|
b6c4d2b4ad | ||
|
|
27ab2f5b12 | ||
|
|
9b08062a58 | ||
|
|
401bdfa9ac | ||
|
|
68d8d6dd30 | ||
|
|
2a57d7007d | ||
|
|
fd675ac291 | ||
|
|
41f020bbb7 | ||
|
|
00dee500e0 | ||
|
|
36bdb8a63e | ||
|
|
aa9eb0868c | ||
|
|
48aafa9834 | ||
|
|
78f53f294a | ||
|
|
3158c7e3eb | ||
|
|
47d27ebf31 | ||
|
|
bc3773ae75 | ||
|
|
d8ddd27d71 | ||
|
|
8d5696507a | ||
|
|
9ec376a228 | ||
|
|
a05a0da9fb | ||
|
|
5029ad9d93 | ||
|
|
1444be665c | ||
|
|
3dedb94bdc | ||
|
|
c0f6c15a80 | ||
|
|
00626a4893 | ||
|
|
b416a59bb7 | ||
|
|
bf96fb2214 | ||
|
|
2e79c8d770 | ||
|
|
6c9d1c4953 | ||
|
|
df8df192d3 | ||
|
|
e5f43462c8 | ||
|
|
1867a3e040 | ||
|
|
6818f98de3 | ||
|
|
f910c76248 | ||
|
|
975cbf0bf8 | ||
|
|
f10b3cef01 | ||
|
|
ad39c94773 | ||
|
|
f189ab30e5 | ||
|
|
0ad18ee971 | ||
|
|
501f5de55a | ||
|
|
0b18ae8ff2 | ||
|
|
de12970486 | ||
|
|
7550b99aaa | ||
|
|
ed5a43966d | ||
|
|
95ea6703f1 | ||
|
|
55f9092aa6 | ||
|
|
5f50a46603 | ||
|
|
c5e6704530 | ||
|
|
8552192894 | ||
|
|
0261d16140 | ||
|
|
2b414526e5 | ||
|
|
c0b7eb526a | ||
|
|
7b7196a8c4 | ||
|
|
f648289035 | ||
|
|
8a0b1d548d | ||
|
|
1f17d5d11e | ||
|
|
18efd09421 | ||
|
|
18d3b30647 | ||
|
|
7f0243b2df | ||
|
|
33610c8997 | ||
|
|
8e0a1f4f70 | ||
|
|
b07cf6bdde | ||
|
|
7ed218ee7f | ||
|
|
3aedeea220 | ||
|
|
4f9b7b2609 | ||
|
|
09abab1b5d | ||
|
|
499713c8e7 | ||
|
|
cb953a1619 | ||
|
|
3ab4938f3d | ||
|
|
f6e9fd9f3a | ||
|
|
8dab75f3cb | ||
|
|
b36096e54d | ||
|
|
0574de4a29 | ||
|
|
6d6bc3de76 | ||
|
|
5c4c3cf59c | ||
|
|
0033c8864e | ||
|
|
e7c749ee3a | ||
|
|
5c026be0cd | ||
|
|
c465546871 | ||
|
|
3322677d32 | ||
|
|
76cf0ebb01 | ||
|
|
d34a0cca30 | ||
|
|
a77a916fcc | ||
|
|
e1ebb96545 | ||
|
|
d85a6bec43 | ||
|
|
78eb7787e9 | ||
|
|
b55ce30b2d | ||
|
|
14050cf096 | ||
|
|
5930128b7f | ||
|
|
08be78fa35 | ||
|
|
88f43d9a91 | ||
|
|
6cbf960dea | ||
|
|
374d34f76d | ||
|
|
cc486c2dc7 | ||
|
|
724dce07a9 | ||
|
|
1486e2063b | ||
|
|
50c9649b23 | ||
|
|
339a54b0ac | ||
|
|
b97afb85a1 | ||
|
|
15da9d580b | ||
|
|
62aed496cc | ||
|
|
fba131936a | ||
|
|
70601a4560 | ||
|
|
83604ecb6d | ||
|
|
b912f7072c | ||
|
|
7e7e468408 | ||
|
|
748c97f6c1 | ||
|
|
a3aab57cf8 | ||
|
|
5548e26dd9 | ||
|
|
89d2f07c03 | ||
|
|
f42a28f34f | ||
|
|
bdc753f03c | ||
|
|
68a7b540c5 | ||
|
|
b2dd820507 | ||
|
|
612308eb9a | ||
|
|
98dc7b853a | ||
|
|
a2fefd6fb6 | ||
|
|
17a0382283 | ||
|
|
eea5784527 | ||
|
|
1aff2cf9eb | ||
|
|
4fc6349824 | ||
|
|
7a3921eace | ||
|
|
e99599c377 | ||
|
|
e1f6366a00 | ||
|
|
182b01ac2f | ||
|
|
18f3914428 | ||
|
|
bd0a045da3 | ||
|
|
9a4bed8c67 | ||
|
|
ae0cf692cd | ||
|
|
2ca7d139fe | ||
|
|
7e67505dfb | ||
|
|
21100de85d | ||
|
|
d8f799f8b4 | ||
|
|
cb03a98113 | ||
|
|
4b36a11dda | ||
|
|
8099490213 | ||
|
|
6cb2843707 | ||
|
|
e831f0561a | ||
|
|
d57c253b19 | ||
|
|
c8c68ea7d9 | ||
|
|
150fe730bd | ||
|
|
8af425d067 | ||
|
|
c3845abd2a | ||
|
|
eba6820ec6 | ||
|
|
822e40bc1f | ||
|
|
3ffcaae122 | ||
|
|
42a30b4521 | ||
|
|
377ed9e8e5 | ||
|
|
be76fe61d8 | ||
|
|
07ba7a8d9e | ||
|
|
2be3e3b43c | ||
|
|
49bf190895 | ||
|
|
c9a53bdaca | ||
|
|
3a76a111d3 | ||
|
|
e59c7ac34a | ||
|
|
f05b9ae365 | ||
|
|
c60e5a65d6 | ||
|
|
1b4eda713f | ||
|
|
cb133ced80 | ||
|
|
062a3028f4 | ||
|
|
682c2631f0 | ||
|
|
faecb9a439 | ||
|
|
5dc40f3c03 | ||
|
|
569e87847f | ||
|
|
b448315f20 | ||
|
|
2c87ce06eb | ||
|
|
875091a1ce | ||
|
|
5ad7716137 | ||
|
|
8c97399cec | ||
|
|
27e0a9d3b6 | ||
|
|
07f9b287e7 | ||
|
|
fbee4f1b37 | ||
|
|
26542f3d6e | ||
|
|
14630fe956 | ||
|
|
30f5c761d9 | ||
|
|
365abaaa8f | ||
|
|
f4681a282c | ||
|
|
8a14d9ac26 | ||
|
|
0ab1986202 | ||
|
|
e11dc680de | ||
|
|
71249334c3 | ||
|
|
fa41dbce16 | ||
|
|
4246e6c900 | ||
|
|
1b421a24b0 | ||
|
|
9cc9eead52 | ||
|
|
8b21aea9c7 | ||
|
|
4f87cb6446 | ||
|
|
7525de1a72 | ||
|
|
78d2fa7520 | ||
|
|
7fe8122499 | ||
|
|
532c2e7450 | ||
|
|
b391a53c6b | ||
|
|
f3c6346b95 | ||
|
|
dd8984314f | ||
|
|
b82c3f41d3 | ||
|
|
7d6eb65776 | ||
|
|
dc0800e7e1 | ||
|
|
c151366952 | ||
|
|
212137ec3e | ||
|
|
31f36935d3 | ||
|
|
a14fc3e3c9 | ||
|
|
158b3c43f8 | ||
|
|
e31c1e33d9 | ||
|
|
25dfa6d34d | ||
|
|
431429a29c | ||
|
|
d4c8cc28a1 | ||
|
|
ce08405c00 | ||
|
|
da29185b7d | ||
|
|
87feb8c250 | ||
|
|
12797893df | ||
|
|
6d47e43ba9 | ||
|
|
f6b1643378 | ||
|
|
f1c16df63b | ||
|
|
c16e5231f4 | ||
|
|
2365c253dd | ||
|
|
c4e7f2597e | ||
|
|
13fd522bd4 | ||
|
|
b74f6e92dc | ||
|
|
630c3e81e6 | ||
|
|
0f77cf8066 | ||
|
|
52746fca76 | ||
|
|
dae25c2f2d | ||
|
|
a272316301 | ||
|
|
6772f4f169 | ||
|
|
9463e210b8 | ||
|
|
4c44b72f78 | ||
|
|
c849f751bb | ||
|
|
1cde45599e | ||
|
|
f1a22f5f6b | ||
|
|
90d6fbde48 | ||
|
|
802ad84613 | ||
|
|
c4aa9396fd | ||
|
|
f0c937ad47 | ||
|
|
fcc36ee5d7 | ||
|
|
0f023f627c | ||
|
|
fa645b5e00 | ||
|
|
1fb28eeee0 | ||
|
|
d7f67d43b3 | ||
|
|
5a1ec745ce | ||
|
|
6fd599bd31 | ||
|
|
afd706bed8 | ||
|
|
6c3820c747 | ||
|
|
0ebc555136 | ||
|
|
4992c50098 | ||
|
|
4e9322485a | ||
|
|
fc8ad40b00 | ||
|
|
f62e053a84 | ||
|
|
0af3c7ab7d | ||
|
|
7f4efe1775 | ||
|
|
80a5c2f9c4 | ||
|
|
90e13c9562 | ||
|
|
fe89c19969 | ||
|
|
0b6dfad7e5 | ||
|
|
f2b1758439 | ||
|
|
86eaa3b091 | ||
|
|
24153c2fb1 | ||
|
|
5e36683ff2 | ||
|
|
c53563e7d1 | ||
|
|
d778293531 | ||
|
|
7d8888d47d | ||
|
|
6fbfec48b0 | ||
|
|
1f25b0b00b | ||
|
|
0118346aaf | ||
|
|
287842c675 | ||
|
|
61dc77559b | ||
|
|
ca51b2f70f | ||
|
|
3cf01cb6f3 | ||
|
|
16a4b78580 | ||
|
|
94b560ba01 | ||
|
|
3ae9956df9 | ||
|
|
78109eb499 | ||
|
|
da5238878d | ||
|
|
f9a823e4b0 | ||
|
|
eb20da021d | ||
|
|
596f2fa78a | ||
|
|
fa99ebb391 | ||
|
|
9b685be84e | ||
|
|
96f9d2a030 | ||
|
|
2b7178fb00 | ||
|
|
c47bf84493 | ||
|
|
8cf16d4a1c | ||
|
|
5b5b73cde0 | ||
|
|
9f55c25775 | ||
|
|
92c6a7bfcf | ||
|
|
145a47c890 | ||
|
|
70160468c0 | ||
|
|
9730cdb880 | ||
|
|
399bf8e3b9 | ||
|
|
c3a69c8c55 | ||
|
|
db2bf9ee51 | ||
|
|
255dece550 | ||
|
|
d004361836 | ||
|
|
5453b0511d | ||
|
|
42bc5065df | ||
|
|
b0d609e9a3 | ||
|
|
814ffbe800 | ||
|
|
e7ee23b871 | ||
|
|
c14ceab24d | ||
|
|
70e8e534fe | ||
|
|
c4504de1da | ||
|
|
685f901e09 | ||
|
|
d196710a87 | ||
|
|
050f97e088 | ||
|
|
c2fea660e7 | ||
|
|
b2cdf21de5 | ||
|
|
ed09d1b390 | ||
|
|
171026ba23 | ||
|
|
dafa690a09 | ||
|
|
4cd4223ee0 | ||
|
|
3ac5ac385d | ||
|
|
0ae5421d10 | ||
|
|
3f56c8e690 | ||
|
|
c14f3777c0 | ||
|
|
2838a52e0c | ||
|
|
dcfdfa0e62 | ||
|
|
23719ace47 | ||
|
|
33882983e9 | ||
|
|
5aecedc074 | ||
|
|
69bf17a619 | ||
|
|
0292d3eefb | ||
|
|
0cd3e4ed84 | ||
|
|
3a26194a71 | ||
|
|
1313e3fe4b | ||
|
|
b2f400f61a | ||
|
|
9aa676cee1 | ||
|
|
eabf0f7f82 | ||
|
|
d0171809ec | ||
|
|
410c946faf | ||
|
|
3a7d88db4f | ||
|
|
9eba2c683b | ||
|
|
8059636b62 | ||
|
|
d78a1efbf6 | ||
|
|
c0b4a33346 | ||
|
|
2cef6700c7 | ||
|
|
df67bd6720 | ||
|
|
655dcb1c9b | ||
|
|
ce32792668 | ||
|
|
4b384abc51 | ||
|
|
82bccd357b | ||
|
|
12709bcd7f | ||
|
|
0b53f8266a | ||
|
|
a07f14e326 | ||
|
|
3349e9cb05 | ||
|
|
0e2746622d | ||
|
|
d9bd0ace9a | ||
|
|
e31b7d5c48 | ||
|
|
4bddbbf56e | ||
|
|
0654f27599 | ||
|
|
3f71dab0b1 | ||
|
|
bd45fff1b4 | ||
|
|
9618e45a11 | ||
|
|
3839373f5a | ||
|
|
1633617006 | ||
|
|
57e33bbf39 | ||
|
|
cddcf36016 | ||
|
|
dff03109a3 | ||
|
|
c0986a1f89 | ||
|
|
cd4c328320 | ||
|
|
03d0ecd450 | ||
|
|
3a809dab32 | ||
|
|
ade9e20cdd | ||
|
|
29520dc95c | ||
|
|
d40d89f29a | ||
|
|
9377de930f | ||
|
|
3219674678 | ||
|
|
a9438ed52b | ||
|
|
09169bd019 | ||
|
|
c30fdef615 | ||
|
|
109e9725a9 | ||
|
|
44ede5c3f8 | ||
|
|
c1161da6de | ||
|
|
80927417f2 | ||
|
|
91d8cd5da8 | ||
|
|
869d731b81 | ||
|
|
f6a18ef777 | ||
|
|
3e084b3b5d | ||
|
|
2c7f931c4d | ||
|
|
6b18cec7fb | ||
|
|
08960a2dbc | ||
|
|
5f4e269efa | ||
|
|
e5f6da01ec | ||
|
|
ae741a1b99 | ||
|
|
78a3ea4765 | ||
|
|
1a66ff7659 | ||
|
|
df53e2fd4f | ||
|
|
4210920c5f | ||
|
|
3440833af8 | ||
|
|
1e738263bc | ||
|
|
9cf322ca0b | ||
|
|
0c027ca697 | ||
|
|
27ed5f7c38 | ||
|
|
2f83e559a4 | ||
|
|
8b55744447 | ||
|
|
2f491b24e2 | ||
|
|
d2cb55befa | ||
|
|
e3e4cf9884 | ||
|
|
1b461ac96a | ||
|
|
1fc3c8fab2 | ||
|
|
7c28be5e62 | ||
|
|
cbe9cae4ea | ||
|
|
c0b7f8a323 | ||
|
|
f8b4412049 | ||
|
|
10e227a5ac | ||
|
|
077431630a | ||
|
|
37395a70e6 | ||
|
|
b779258d69 | ||
|
|
d3ec976f44 | ||
|
|
79a5732c4d | ||
|
|
12c6bfc2e8 | ||
|
|
31fff0623d | ||
|
|
0d2b87834c | ||
|
|
2feba8f64c | ||
|
|
cf82ae4c66 | ||
|
|
0d7c402c01 | ||
|
|
ae8b70be0f | ||
|
|
a87336b7ee | ||
|
|
7814fa8d46 | ||
|
|
a542d6cf3e | ||
|
|
13111a8d1b | ||
|
|
bbbba12e95 | ||
|
|
fbd016f86d | ||
|
|
10e7fe5560 | ||
|
|
d5bcb4346e | ||
|
|
213b4763e7 | ||
|
|
886515400d | ||
|
|
c900edb261 | ||
|
|
8fb8c67148 | ||
|
|
499411f6a2 | ||
|
|
c3eaec513b | ||
|
|
a7f858ab03 | ||
|
|
5ba4dc7b77 | ||
|
|
bbcc8f918e | ||
|
|
356c97cd67 | ||
|
|
0bdd5b219f | ||
|
|
90368d4ece | ||
|
|
ec12303834 | ||
|
|
294393bd1c | ||
|
|
4aaaf01ab5 | ||
|
|
cbbe436a69 | ||
|
|
18510ba851 | ||
|
|
0201ed332f | ||
|
|
e46ed07b94 | ||
|
|
3db6762531 | ||
|
|
f388948f04 | ||
|
|
4392e6b9ab | ||
|
|
38c3891533 | ||
|
|
a28d673eb7 | ||
|
|
55138f1599 | ||
|
|
0cd07cf2fd | ||
|
|
ae1eda915b | ||
|
|
38cd395171 | ||
|
|
3aec0e5ef4 | ||
|
|
56bd782625 | ||
|
|
d8904827ec | ||
|
|
f767edba93 | ||
|
|
07a0f43825 | ||
|
|
ec8581a835 | ||
|
|
f5290c3256 | ||
|
|
070189a7fd | ||
|
|
d409610a55 | ||
|
|
d46b134dbb | ||
|
|
5026bdcbd4 | ||
|
|
3607d0b9a1 | ||
|
|
21b8626366 | ||
|
|
4c10fdf34a | ||
|
|
8001a928ea | ||
|
|
26c2134484 | ||
|
|
2373ca82ba | ||
|
|
3bd9a30055 | ||
|
|
52467075b4 | ||
|
|
9888fe6e09 | ||
|
|
19068dee03 | ||
|
|
ca8204d8f4 | ||
|
|
35139815a6 | ||
|
|
da1e03cbfc | ||
|
|
219667965f | ||
|
|
ec8221610a | ||
|
|
afe28d54c6 | ||
|
|
1eb225cae1 | ||
|
|
e716e38386 | ||
|
|
1fe471b005 | ||
|
|
5cd542002e | ||
|
|
a485308fca | ||
|
|
9659ef65b9 | ||
|
|
214079a3cd | ||
|
|
e9dcb31002 | ||
|
|
3b05bb96e3 | ||
|
|
54ca6e78f5 | ||
|
|
9759224690 | ||
|
|
20970e430c | ||
|
|
38155e3af4 | ||
|
|
3036d4fa90 | ||
|
|
aba662e3d0 | ||
|
|
301914d94b | ||
|
|
8d16c06739 | ||
|
|
7e1eeb66d6 | ||
|
|
920bdde135 | ||
|
|
1db9a554dc | ||
|
|
62aaad8707 | ||
|
|
2fee9df625 | ||
|
|
6c6ab4c96e | ||
|
|
1d316f9420 | ||
|
|
d2035f1816 | ||
|
|
fd821139bd | ||
|
|
7e6550d147 | ||
|
|
e556b707c9 | ||
|
|
9282b7bd15 | ||
|
|
0d473d232e | ||
|
|
f9ad8ffe93 | ||
|
|
e85a0f6cfc | ||
|
|
63974f3968 | ||
|
|
3b07d4055a | ||
|
|
d052d7a3ce | ||
|
|
513a9212e4 | ||
|
|
84dce845a5 | ||
|
|
0a68b82078 | ||
|
|
3dc1afde7e | ||
|
|
e50eb1963f | ||
|
|
fdd6c0a0d8 | ||
|
|
c589c5556b | ||
|
|
17a85c94c6 | ||
|
|
4284fe1029 | ||
|
|
dec3c10ec1 | ||
|
|
c805a48a87 | ||
|
|
918d81198f | ||
|
|
1d87de0a3e | ||
|
|
fdeadde7f0 | ||
|
|
760432fb41 | ||
|
|
240589e9ea | ||
|
|
400c93fb7d | ||
|
|
1bcf43db63 | ||
|
|
79bcd76aa0 | ||
|
|
8833ceb3b5 | ||
|
|
ccc265edf9 | ||
|
|
b18a4da0d9 | ||
|
|
e956988c60 | ||
|
|
1b6d66d4b0 | ||
|
|
fd47d77800 | ||
|
|
5c76ef312f | ||
|
|
f189907ff8 | ||
|
|
6e32843fb4 | ||
|
|
a99d6eb9f8 | ||
|
|
bb37a5982e | ||
|
|
a43a5a0861 | ||
|
|
4ff1e79cc0 | ||
|
|
d28794a587 | ||
|
|
19292c8007 | ||
|
|
a67dd1d9d7 | ||
|
|
9c0f763949 | ||
|
|
6571864b16 | ||
|
|
701822c69f | ||
|
|
2eab93292e | ||
|
|
29fb8b83c2 | ||
|
|
ad68f50b14 | ||
|
|
519485f155 | ||
|
|
45fbb47ccf | ||
|
|
cf0f075acb | ||
|
|
d9aad67ca5 | ||
|
|
083a89c1a3 | ||
|
|
671be42472 | ||
|
|
add4bc24df | ||
|
|
1da1bb7218 | ||
|
|
d0d9527d39 | ||
|
|
c39827ed59 | ||
|
|
5d6a35d4ef | ||
|
|
0d62688343 | ||
|
|
80b7cc717f | ||
|
|
05a9c8b7e5 | ||
|
|
e78cbcfcc8 | ||
|
|
f7b1aea7e0 | ||
|
|
2744fb122c | ||
|
|
77638bf56a | ||
|
|
57e6e5400b | ||
|
|
f2b03896e2 | ||
|
|
8a795e6091 | ||
|
|
946513cb66 | ||
|
|
1fe182babe | ||
|
|
f61aed9f6c | ||
|
|
08882e58b6 | ||
|
|
4c6f2da78a | ||
|
|
3550310e5c | ||
|
|
cedd8da9ba | ||
|
|
3cb269de4b | ||
|
|
91010f2958 | ||
|
|
f3e823997b | ||
|
|
4ae276d1d7 | ||
|
|
f6b38ab32a | ||
|
|
6f96a5026b | ||
|
|
4071f259ad | ||
|
|
a9ed1a1850 | ||
|
|
72a2e24c98 | ||
|
|
593975a255 | ||
|
|
b16cc87ffb | ||
|
|
c5e8b90d71 | ||
|
|
88a6326f87 | ||
|
|
0603ea0fc4 | ||
|
|
c4aedd5323 | ||
|
|
6eb125c913 | ||
|
|
704f7374d2 | ||
|
|
009396cad9 | ||
|
|
a38b7ca9fa | ||
|
|
c5daaffeb1 | ||
|
|
83debde0a1 | ||
|
|
9c2ab19404 | ||
|
|
ef1a777180 | ||
|
|
77014b03ef | ||
|
|
9143051d9f | ||
|
|
f496ecf7b1 | ||
|
|
fc3afc4340 | ||
|
|
fd138eb0b5 | ||
|
|
6d5835849f | ||
|
|
800ebf5b64 | ||
|
|
9df149c489 | ||
|
|
efcf80899e | ||
|
|
c1b12c027a | ||
|
|
476ea80c4e | ||
|
|
bf4d70e8be | ||
|
|
284002bf8b | ||
|
|
b92b9c6507 | ||
|
|
a8cfcf31ab | ||
|
|
d14821e385 | ||
|
|
5e8b036481 | ||
|
|
27ba4ff800 | ||
|
|
c80bb45cad | ||
|
|
dedcf0469b | ||
|
|
9ec6a6d1aa | ||
|
|
1ce01d2043 | ||
|
|
0701169a7e | ||
|
|
2d0cf6413e | ||
|
|
4cf658b629 | ||
|
|
8d21883c20 | ||
|
|
fca0847929 | ||
|
|
1d19dab71d | ||
|
|
49fe98ac57 | ||
|
|
bc9e946618 | ||
|
|
3d3a1abf7b | ||
|
|
1ef1d53fd9 | ||
|
|
0419dca385 | ||
|
|
11bd473f55 | ||
|
|
5947ad5004 | ||
|
|
894218cac9 | ||
|
|
4ce06de18a | ||
|
|
6c4ea34811 | ||
|
|
34736836cc | ||
|
|
9c09c168f8 | ||
|
|
c61e710341 | ||
|
|
63753b8197 | ||
|
|
20f436c646 | ||
|
|
092b9096e6 | ||
|
|
caa1b0d14c | ||
|
|
d39ff036c7 | ||
|
|
6702256b4c | ||
|
|
110fbe9478 | ||
|
|
128c24c8f6 | ||
|
|
6cc2497182 | ||
|
|
615288e635 | ||
|
|
1b814b937b | ||
|
|
01e26f321d | ||
|
|
e8319aee81 | ||
|
|
ca5bf0bd09 | ||
|
|
88b05cd5aa | ||
|
|
132fcb8c74 | ||
|
|
1492fa473f | ||
|
|
9bd33ab3df | ||
|
|
7d826a0cdb | ||
|
|
ec6fc30f47 | ||
|
|
25a54ea802 | ||
|
|
dda9c82940 | ||
|
|
55b88f0274 | ||
|
|
f4da69a205 | ||
|
|
3a919f3e4c | ||
|
|
6cfd124804 | ||
|
|
0879e1f326 | ||
|
|
8312570825 | ||
|
|
7110e6ec3d | ||
|
|
1455a9b3a4 | ||
|
|
2ad73e9b2c | ||
|
|
b1db0d037d | ||
|
|
776821a988 | ||
|
|
1380e64c0b | ||
|
|
0319e2cbff | ||
|
|
7350fdb99c | ||
|
|
25061e7f71 | ||
|
|
0cd8d2b333 | ||
|
|
28dca6e66f | ||
|
|
491a70ad82 | ||
|
|
aa0acf767b | ||
|
|
e37f5e765e | ||
|
|
fe1cf40bbb | ||
|
|
9be6a7cf3b | ||
|
|
0684b1d425 | ||
|
|
12a2107601 | ||
|
|
163b3d19f9 | ||
|
|
15113ba7e4 | ||
|
|
5e9f01ac57 | ||
|
|
ec718f04d7 | ||
|
|
bb96c00cb9 | ||
|
|
697cfeea64 | ||
|
|
0528139c2c | ||
|
|
cbe68e7879 | ||
|
|
074a798213 | ||
|
|
e9b016903b | ||
|
|
8f4d5442b1 | ||
|
|
2160eef1af | ||
|
|
b66c5d7023 | ||
|
|
b21d5bdcc4 | ||
|
|
574770c289 | ||
|
|
adda85a660 | ||
|
|
92473cc56d | ||
|
|
d7e74b9fe0 | ||
|
|
9db2d50676 | ||
|
|
048a979375 | ||
|
|
761fb3b811 | ||
|
|
505d6e258f | ||
|
|
9f22382506 | ||
|
|
f486492c37 | ||
|
|
6f1ddee0ac | ||
|
|
2fac0170e7 | ||
|
|
56056797bc | ||
|
|
bbc2091b77 | ||
|
|
51493fab48 | ||
|
|
5d693c5d8f | ||
|
|
8cd9942be6 | ||
|
|
b2575c9b8f | ||
|
|
a60a6355d2 | ||
|
|
6acfba1315 | ||
|
|
ab731302e0 | ||
|
|
5a48d5c5f8 | ||
|
|
e92c6b8f26 | ||
|
|
200ac53078 | ||
|
|
288907cfd4 | ||
|
|
c822be4a53 | ||
|
|
70f588cce1 | ||
|
|
e5c7e81b08 | ||
|
|
45ebc2b89b | ||
|
|
76523d2988 | ||
|
|
98a64a0948 | ||
|
|
2d6fb72b9d | ||
|
|
e66ff53ca4 | ||
|
|
e8ac3c812f | ||
|
|
a597a7d281 | ||
|
|
1c0e392552 | ||
|
|
59a52a73bb | ||
|
|
0aeff40aaa | ||
|
|
bcd8906315 | ||
|
|
de9249e523 | ||
|
|
5160f5c380 | ||
|
|
5da51e78cc | ||
|
|
2be57414ad | ||
|
|
c2293396be | ||
|
|
cdbc19570d | ||
|
|
ccedd23342 | ||
|
|
46b5746dcc | ||
|
|
97dafc45fa | ||
|
|
adf62fd332 | ||
|
|
98bb865062 | ||
|
|
d50123085f | ||
|
|
b628b9eb4d | ||
|
|
317a39177b | ||
|
|
73924543df | ||
|
|
457754b6f1 | ||
|
|
c659f8a9a9 | ||
|
|
74df4a4fb6 | ||
|
|
b60d9032be | ||
|
|
a2cbfa2668 | ||
|
|
340c47eebd | ||
|
|
ae5f39253e | ||
|
|
3df5f529eb | ||
|
|
0fae8be816 | ||
|
|
f97e9bd19f | ||
|
|
400d551295 | ||
|
|
4957366beb | ||
|
|
27e4a2c290 | ||
|
|
a424d36e96 | ||
|
|
9c0518f251 | ||
|
|
794071efb8 | ||
|
|
787c4e5b73 | ||
|
|
33d3cd0522 | ||
|
|
e14f8ad93c | ||
|
|
7a357634c7 | ||
|
|
ef5f72f56c | ||
|
|
ae3a95dd34 | ||
|
|
6d9db06305 | ||
|
|
35f243a6e6 | ||
|
|
ea25558ac9 | ||
|
|
1f09cb29f0 | ||
|
|
9e4b06e0b6 | ||
|
|
114858505c | ||
|
|
3da062c4cc | ||
|
|
291393d45d | ||
|
|
3cc5cd4a04 | ||
|
|
70ba4a0f3d | ||
|
|
9de6b4724a | ||
|
|
79b96c380d | ||
|
|
3ccf79cff5 | ||
|
|
02bccf6dc1 | ||
|
|
e397de99df | ||
|
|
911f036723 | ||
|
|
af1288b6f8 | ||
|
|
366940fc14 | ||
|
|
4f45431dd3 | ||
|
|
6c266a8926 | ||
|
|
c3f83302c5 | ||
|
|
57063246fb | ||
|
|
29f47d5ca7 | ||
|
|
e0180881e2 | ||
|
|
7c579a1040 | ||
|
|
59219e3f33 | ||
|
|
b67a308a34 | ||
|
|
d5550c8fd1 | ||
|
|
d0ca2b9d4b | ||
|
|
84fb7eec36 | ||
|
|
c04b5dc4d6 | ||
|
|
4b4fb7fd39 | ||
|
|
215bd0f4a2 | ||
|
|
a13d28a6ec | ||
|
|
bcdd235b9f | ||
|
|
6be0714872 | ||
|
|
7e70c4001b | ||
|
|
9326921e2a | ||
|
|
7a0f8ea2dd | ||
|
|
2799bab206 | ||
|
|
ba4d0451ff | ||
|
|
40773ee6f6 | ||
|
|
cd190eebc9 | ||
|
|
c13593def1 | ||
|
|
bbfbe1e72c | ||
|
|
bb88812668 | ||
|
|
94a9230525 | ||
|
|
c7a0841c2e | ||
|
|
b843970033 | ||
|
|
4931ff6e4a | ||
|
|
b9ef701ff1 | ||
|
|
c07364f775 | ||
|
|
64d3430455 | ||
|
|
7e4188e776 | ||
|
|
3f6c07ba6a | ||
|
|
419937f62e | ||
|
|
ab92aa3ffa | ||
|
|
2d9dc92f83 | ||
|
|
0f214496f2 | ||
|
|
9103914bc9 | ||
|
|
aad14169fb | ||
|
|
3550c25b7d | ||
|
|
2764368089 | ||
|
|
e46dcb69da | ||
|
|
ef7aeb752e | ||
|
|
81ba0404b2 | ||
|
|
9af470536b | ||
|
|
5349b46122 | ||
|
|
0de7e22408 | ||
|
|
03f96daba3 | ||
|
|
f6aca88b36 | ||
|
|
ea32cb9e12 | ||
|
|
1c328e7ac7 | ||
|
|
89eef2ce07 | ||
|
|
433c99e239 | ||
|
|
e2faeac505 | ||
|
|
263cb2823c | ||
|
|
5769c8dea9 | ||
|
|
3cff8aba16 | ||
|
|
e5e19f77b9 | ||
|
|
4d93f3271d | ||
|
|
0683745dd2 | ||
|
|
49ef013152 | ||
|
|
3153bbc973 | ||
|
|
717a258430 | ||
|
|
bb945a765c | ||
|
|
6d486401b5 | ||
|
|
07df5edc86 | ||
|
|
ae5ab13533 | ||
|
|
fc40f545fe | ||
|
|
37e01f992d | ||
|
|
b497853e8a | ||
|
|
85dc6e51d2 | ||
|
|
6d5ce1357e | ||
|
|
ac1d556895 | ||
|
|
4aceadd777 | ||
|
|
49de6614c0 | ||
|
|
cc50428646 | ||
|
|
b60bdc9b17 | ||
|
|
35cdcb62b7 | ||
|
|
458f7f5f5b | ||
|
|
284bab397a | ||
|
|
5f306447a0 | ||
|
|
44b862c0bb | ||
|
|
74c367c069 | ||
|
|
c3db026fd9 | ||
|
|
958095d11b | ||
|
|
b21dc8631a | ||
|
|
03354ed1cb | ||
|
|
1a63fc7638 | ||
|
|
6498c711ba | ||
|
|
57c8c94db7 | ||
|
|
15f212c384 | ||
|
|
dee384c8b9 | ||
|
|
93ffd950e9 | ||
|
|
b01d80b1f4 | ||
|
|
84d01362f9 | ||
|
|
939586ce1a | ||
|
|
2888fdff9e | ||
|
|
b048cc1e55 | ||
|
|
3c94074533 | ||
|
|
2de8962887 | ||
|
|
e37e913f6a | ||
|
|
51305118fa | ||
|
|
52bd48cde7 | ||
|
|
ecf32da760 | ||
|
|
1dbe56b026 | ||
|
|
f51bdad6b4 | ||
|
|
97d47c19b7 | ||
|
|
a1ab6f286b | ||
|
|
6d871c9bdb | ||
|
|
12faebca27 | ||
|
|
c231a68bb2 | ||
|
|
bd3db4a425 | ||
|
|
5801981147 | ||
|
|
727cb029a6 | ||
|
|
dd0933c584 | ||
|
|
e92b57c50c | ||
|
|
2e3c1d53f5 | ||
|
|
a67e0c1433 | ||
|
|
a42a1f4a9f | ||
|
|
8f17ec96f0 | ||
|
|
b11e28c880 | ||
|
|
a16d5b62cf | ||
|
|
e9425625e2 | ||
|
|
12324017d7 | ||
|
|
8aabe1c148 | ||
|
|
76ff0374ce | ||
|
|
09373c45f3 | ||
|
|
d0a5454333 | ||
|
|
9ea693d3ce | ||
|
|
ebca9fc2da | ||
|
|
c43e8f8f19 | ||
|
|
b6b03369f7 | ||
|
|
0b6e854520 | ||
|
|
55b17e7d2b | ||
|
|
c15fdae32e | ||
|
|
0fe232e1f5 | ||
|
|
fc33f27899 | ||
|
|
e40095977a | ||
|
|
d1f499f6fd | ||
|
|
610bc42815 | ||
|
|
2006356ccd | ||
|
|
63e827aefb | ||
|
|
1898537149 | ||
|
|
60033d47ec | ||
|
|
b633f36131 | ||
|
|
749443454d | ||
|
|
d68dfe2a32 | ||
|
|
f3b119b91b | ||
|
|
aca3d5c4c6 | ||
|
|
b0acea3353 | ||
|
|
862f5d73e1 | ||
|
|
52bf73aecc | ||
|
|
54e5be1961 | ||
|
|
7fbf3d4f27 | ||
|
|
2df285fd7c | ||
|
|
a3e9d12f6a | ||
|
|
89e5e16aad | ||
|
|
cec132092f | ||
|
|
01723b2d36 | ||
|
|
b463e4ce6f | ||
|
|
8c7fd7b1a6 | ||
|
|
2762a9d1fd | ||
|
|
137864dc04 | ||
|
|
ef775f1c24 | ||
|
|
56617a1c1c | ||
|
|
77e048471e | ||
|
|
7d83dd8283 | ||
|
|
d0c0b9a089 | ||
|
|
75894c4419 | ||
|
|
d3c8a5565a | ||
|
|
bd2cd07f46 | ||
|
|
cd35df17ec | ||
|
|
a1d710fe3d | ||
|
|
c34d269f33 | ||
|
|
01c8b8ad4a | ||
|
|
fc5dda78f5 | ||
|
|
d6e78beb72 | ||
|
|
f324181190 | ||
|
|
5c13661c47 | ||
|
|
8b514d631c | ||
|
|
13a65e875f | ||
|
|
a1d4a4b3f8 | ||
|
|
610b87f462 | ||
|
|
374b758700 | ||
|
|
d32e0962b0 | ||
|
|
1cb9f93f0e | ||
|
|
4a24ade442 | ||
|
|
3f6bd7894d | ||
|
|
cbb941116f | ||
|
|
bcaa7ecacb | ||
|
|
b8eb6186ed | ||
|
|
6d5cf2b139 | ||
|
|
5e6b1fe362 | ||
|
|
1c0cafc6c8 | ||
|
|
8eee0cb0b0 | ||
|
|
bfe8403d75 | ||
|
|
8a852ce22e | ||
|
|
64fc7bcaf8 | ||
|
|
599bbe73b4 | ||
|
|
852872f55c | ||
|
|
62a037a4fd | ||
|
|
637442149c | ||
|
|
9a89c7c49f | ||
|
|
c6ef053aac | ||
|
|
d3b0da4186 | ||
|
|
d09cd49f01 | ||
|
|
bfa29cbf02 | ||
|
|
74d9fa422f | ||
|
|
b43538ee78 | ||
|
|
755b9bc2a1 | ||
|
|
ae49f0b6e4 | ||
|
|
063de93eb8 | ||
|
|
ec997bd2b6 | ||
|
|
20aa312173 | ||
|
|
48b0050451 | ||
|
|
c04b14c751 | ||
|
|
3d8aa29b52 | ||
|
|
ac7ed67d91 | ||
|
|
20f6a55df2 | ||
|
|
60041a1253 | ||
|
|
1e7b54ef0d | ||
|
|
d2cb88d93b | ||
|
|
659e982c47 | ||
|
|
5bf1e49e43 | ||
|
|
5b862a4cee | ||
|
|
2aec202e6d | ||
|
|
f5259decab | ||
|
|
0a17bf69c0 | ||
|
|
6db78d3cda | ||
|
|
0692dd82ad | ||
|
|
088d4ac14a | ||
|
|
92262d0e47 | ||
|
|
1549f66fd7 | ||
|
|
1118cd8ca1 | ||
|
|
d744c6a46d | ||
|
|
765199eba3 | ||
|
|
cb46040309 | ||
|
|
abd8223e41 | ||
|
|
e061acb44a | ||
|
|
cc6850b37d | ||
|
|
a3c92b07cb | ||
|
|
e61581c4e6 | ||
|
|
43dbb94a7f | ||
|
|
d43e61a49c | ||
|
|
7ccadae489 | ||
|
|
251c152efa | ||
|
|
a8fa625b5c | ||
|
|
5151be05b9 | ||
|
|
3f44bd8eac | ||
|
|
2eb593e163 | ||
|
|
2356fda67a | ||
|
|
bff7919c21 | ||
|
|
f1075f800f | ||
|
|
473b9e8bbe | ||
|
|
00c84e775f | ||
|
|
a1a630bad2 | ||
|
|
b91b88a74b | ||
|
|
56e16acce4 | ||
|
|
4692a461eb | ||
|
|
3e04bacf73 | ||
|
|
a0a52a3433 | ||
|
|
188ad359fe | ||
|
|
d601496173 | ||
|
|
85b909a7ab | ||
|
|
18a4f5ed40 | ||
|
|
c4ec9a6df9 | ||
|
|
a4aebdc643 | ||
|
|
b61410b6eb | ||
|
|
51d681974c | ||
|
|
071f7edade | ||
|
|
46f1157030 | ||
|
|
3cca6d9ab4 | ||
|
|
91e8051cee | ||
|
|
c220f0dee5 | ||
|
|
a7be57241c | ||
|
|
a35af4dbe6 | ||
|
|
329f779781 | ||
|
|
95fa688306 | ||
|
|
3d275a4f53 | ||
|
|
06cf0ff2c2 | ||
|
|
ba7ebe1319 | ||
|
|
3efc2138d6 | ||
|
|
9b0cba9dbe | ||
|
|
62a5d2db5c | ||
|
|
96d59a2e81 | ||
|
|
f5179cdcea | ||
|
|
4639b8b939 | ||
|
|
9cdfebda9a | ||
|
|
7c59621c9e | ||
|
|
8736aae2ef | ||
|
|
76a987e1e0 | ||
|
|
9dac898c1c | ||
|
|
ab677e941d | ||
|
|
29d796b6af | ||
|
|
276800f999 | ||
|
|
8d22df0411 | ||
|
|
8d077ff4f2 | ||
|
|
58b01021c1 | ||
|
|
5a6dc8511f | ||
|
|
b7bb3f4487 | ||
|
|
bba23de31c | ||
|
|
973279ed40 | ||
|
|
a4494f0873 | ||
|
|
121354e489 | ||
|
|
531e92bda3 | ||
|
|
135bfc2627 | ||
|
|
a01882aea5 | ||
|
|
a8b5b438bf | ||
|
|
8ccaf3caf2 | ||
|
|
1337c45f1d | ||
|
|
a968019799 | ||
|
|
0a9e1ba42e | ||
|
|
7e91776cfb | ||
|
|
9689c50603 | ||
|
|
bb2eb053da | ||
|
|
de5110310f | ||
|
|
64137995c2 | ||
|
|
6f45e479bd | ||
|
|
53ac857b43 | ||
|
|
6f0e2437e0 | ||
|
|
56d27c3d78 | ||
|
|
7919e591cb | ||
|
|
aabbc2f238 | ||
|
|
fb31cef68b | ||
|
|
2a89e912f8 | ||
|
|
ee91ed8708 | ||
|
|
69475f92c7 | ||
|
|
dc2452231d | ||
|
|
1bbb245e32 | ||
|
|
1548863a21 | ||
|
|
9169f53465 | ||
|
|
b5542effc2 | ||
|
|
6b0e7a9c61 | ||
|
|
00d50953ad | ||
|
|
397dd96383 | ||
|
|
cac5f15a37 | ||
|
|
74c32c4e59 | ||
|
|
e048a6d0d0 | ||
|
|
65d71db72f | ||
|
|
b4fffe154d | ||
|
|
716c4d3783 | ||
|
|
5a9ca96a0f | ||
|
|
cedfb1a538 | ||
|
|
176ffcc3d1 | ||
|
|
91b318e8f7 | ||
|
|
3cc9672ff3 | ||
|
|
946d845987 | ||
|
|
eef5df33b3 | ||
|
|
f0f7dee3c2 | ||
|
|
ddbf5a559a | ||
|
|
67fd45ef25 | ||
|
|
7f8beca33c | ||
|
|
0fcf033ecc | ||
|
|
ea4048dce9 | ||
|
|
0a295f7738 | ||
|
|
0711454e31 | ||
|
|
900623461a | ||
|
|
9512879cc7 | ||
|
|
299c7ff804 | ||
|
|
0276294569 | ||
|
|
06b75386b9 | ||
|
|
16bc359f99 | ||
|
|
c8013421e6 | ||
|
|
c1e82b566e | ||
|
|
f7aba26be2 | ||
|
|
77ffc9c3c2 | ||
|
|
9a6ebb0b9a | ||
|
|
57d1cd5f63 | ||
|
|
b7354779d4 | ||
|
|
0cdb50e538 | ||
|
|
37469232b0 | ||
|
|
0c52260a89 | ||
|
|
a85c9679a9 | ||
|
|
d625edf53e | ||
|
|
643af1c32b | ||
|
|
e7ceef479e | ||
|
|
0545ed434d | ||
|
|
b9bf3f96d2 | ||
|
|
f184e7bd01 | ||
|
|
e1804cded4 | ||
|
|
09eabe98c4 | ||
|
|
173cb001cb | ||
|
|
7d6a4d11fd | ||
|
|
11ea6b269e | ||
|
|
372950071a | ||
|
|
b424ecfd3e | ||
|
|
fc38bbd179 | ||
|
|
00f24fd5bd | ||
|
|
50de88a0a0 | ||
|
|
ca2673f258 | ||
|
|
7d416a90de | ||
|
|
d09526e470 | ||
|
|
ed68f227ac | ||
|
|
f72b1e7eec | ||
|
|
bbd756f0d3 | ||
|
|
87a9c12827 | ||
|
|
ebd83e1f19 | ||
|
|
5b4b99f44e | ||
|
|
d153e3e25c | ||
|
|
e3b3b7cfdb | ||
|
|
2c78bac8f7 | ||
|
|
db1c0647ed | ||
|
|
2f16dbc9b5 | ||
|
|
7e7ab249c2 | ||
|
|
1d2298e5f6 | ||
|
|
b53b5bbc6c | ||
|
|
0dfd2fe9ef | ||
|
|
c0b3a4e929 | ||
|
|
5830bf461d | ||
|
|
857bb00c8a | ||
|
|
c5ae4ca615 | ||
|
|
abb0184e49 | ||
|
|
b11762da99 | ||
|
|
946d00cce6 | ||
|
|
0262255bea | ||
|
|
38a8a6f2ff | ||
|
|
a6446563d8 | ||
|
|
225adb5cce | ||
|
|
a9c722de67 | ||
|
|
49610e372f | ||
|
|
a33768de1b | ||
|
|
790b31c60e | ||
|
|
37c92b8d7c | ||
|
|
07211611a6 | ||
|
|
ea7fee2a53 | ||
|
|
89da8b832f | ||
|
|
5f4c83b6a1 | ||
|
|
2e751b1438 | ||
|
|
1a888d3116 | ||
|
|
2a4fe4aa48 | ||
|
|
4c81eb3058 | ||
|
|
64c20d0e24 | ||
|
|
ff186d5d9d | ||
|
|
734d691e00 | ||
|
|
51777dbe85 | ||
|
|
fb1d48fcae | ||
|
|
41ae8cbbf3 | ||
|
|
9717be3da8 | ||
|
|
67a4efa03e | ||
|
|
fd4f0f4096 | ||
|
|
957605d46b | ||
|
|
55f824e0c8 | ||
|
|
faa22002e3 | ||
|
|
5d0e85452a | ||
|
|
8c61e35fde | ||
|
|
bdfdc61e7f | ||
|
|
b333916f56 | ||
|
|
737d4e2d65 | ||
|
|
c0dfcfd9f6 | ||
|
|
c073c7ed3a | ||
|
|
7fa1a8c6c7 | ||
|
|
037fd890dc | ||
|
|
d673676a8a | ||
|
|
793538d4ef | ||
|
|
92fc00bb0a | ||
|
|
9d70a2a9a6 | ||
|
|
46a5245a1d | ||
|
|
9b94fba3a6 | ||
|
|
a6144f6dee | ||
|
|
615eb9666e | ||
|
|
94a4f628c7 | ||
|
|
d440876bbb | ||
|
|
32c62fd7eb | ||
|
|
65f78ba447 | ||
|
|
9c9a097ff3 | ||
|
|
ff6cdc3e9d | ||
|
|
24367b350d | ||
|
|
e0da44b34a | ||
|
|
ea13ce09c9 | ||
|
|
ef69217b81 | ||
|
|
7e297ac884 | ||
|
|
e6e8470851 | ||
|
|
89a36ae47e | ||
|
|
137c46b8ce | ||
|
|
5512bd7df6 | ||
|
|
96e2cfaad6 | ||
|
|
f7d482e7bc | ||
|
|
6c67308a1f | ||
|
|
6bbdbee669 | ||
|
|
9204b23d51 | ||
|
|
7203a0fcad | ||
|
|
5bdf4b5dcc | ||
|
|
105f088576 | ||
|
|
f40433fc99 | ||
|
|
bbbd12d461 | ||
|
|
81dae8c43d | ||
|
|
ec6a7e79d6 | ||
|
|
630b64462e | ||
|
|
72b8eb85b0 | ||
|
|
a92843533b | ||
|
|
83855268d5 | ||
|
|
67e1defdb8 | ||
|
|
724aad8504 | ||
|
|
5b1337ed07 | ||
|
|
a64e177c21 | ||
|
|
e7aafb7242 | ||
|
|
75e52bbe66 | ||
|
|
348887f799 | ||
|
|
8915a535c6 | ||
|
|
0587741437 | ||
|
|
dd766d5363 | ||
|
|
8e2707d33e | ||
|
|
3390c2dbf2 | ||
|
|
268db10361 | ||
|
|
ed5120eead | ||
|
|
aab532f475 | ||
|
|
00ee75bb29 | ||
|
|
e7e680fd8e | ||
|
|
7b334601c6 | ||
|
|
050cb8c5f4 | ||
|
|
cb8af637e1 | ||
|
|
c1bbc685e6 | ||
|
|
d5d6f7e860 | ||
|
|
c2738d247a | ||
|
|
f73d0dbc40 | ||
|
|
395e243730 | ||
|
|
4d1bcf1cc0 | ||
|
|
eb2c552316 | ||
|
|
664239c567 | ||
|
|
06df8e7f7b | ||
|
|
21a0849a5b | ||
|
|
1f660c8c5b | ||
|
|
14f5a25633 | ||
|
|
606195c78a | ||
|
|
6a7f92b4e2 | ||
|
|
0e1646e3a7 | ||
|
|
ea5af0397e | ||
|
|
6ed0038b1e | ||
|
|
00640fe39b | ||
|
|
4fb7d60eee | ||
|
|
c54755b9c1 | ||
|
|
07c9b614bc | ||
|
|
7bea8f5120 | ||
|
|
ea97dcdb55 | ||
|
|
931bafe962 | ||
|
|
a3a6509410 | ||
|
|
5e26f2e707 | ||
|
|
54ef85e1a3 | ||
|
|
6f29e475ee | ||
|
|
e6607783e9 | ||
|
|
2021a0b065 | ||
|
|
0871a96399 | ||
|
|
2ed5e8e717 | ||
|
|
0c61cc8bdc | ||
|
|
c2bad4419b | ||
|
|
d0e2358fab | ||
|
|
db95085b26 | ||
|
|
08592cbacf | ||
|
|
487e67d208 | ||
|
|
a8abfdae5e | ||
|
|
6496816692 | ||
|
|
364c18b842 | ||
|
|
e20098d462 | ||
|
|
d25a314d3a | ||
|
|
3dde331f9d | ||
|
|
f7e56d9833 | ||
|
|
b554fb342a | ||
|
|
6d9ef91315 | ||
|
|
ce42da5806 | ||
|
|
5b5413c1a2 | ||
|
|
6cdb27aef0 | ||
|
|
2205ad0772 | ||
|
|
637e826c1b | ||
|
|
b19395b40d | ||
|
|
085a25306c | ||
|
|
88c39dbb72 | ||
|
|
91670d3945 | ||
|
|
bdfd7d9839 | ||
|
|
e01b6f175c | ||
|
|
3f899380d9 | ||
|
|
2513b4ca23 | ||
|
|
93180ccd06 | ||
|
|
f43b4ebdc5 | ||
|
|
ff4832a6a2 | ||
|
|
8267a10f41 | ||
|
|
771ef6e16e | ||
|
|
f7ef2b768f | ||
|
|
74c3ce0552 | ||
|
|
67b63f84f1 | ||
|
|
f8c5c380b1 | ||
|
|
2708449089 | ||
|
|
bcfec56300 | ||
|
|
ec6b9d4387 | ||
|
|
621f739831 | ||
|
|
607d2b8bd7 | ||
|
|
c1463c3257 | ||
|
|
e036b7ac70 | ||
|
|
4a4db675f1 | ||
|
|
e193da2cd7 | ||
|
|
c60cbe824c | ||
|
|
8b9432d1d9 | ||
|
|
75a5ffcb10 | ||
|
|
6cc2fc7a6e | ||
|
|
4bb6f68e6f | ||
|
|
00e1521d46 | ||
|
|
1055186e86 | ||
|
|
fc17448473 | ||
|
|
1839f6ce8c | ||
|
|
39e9e426ef | ||
|
|
7c2d590951 | ||
|
|
551b73ea74 | ||
|
|
fca095689e | ||
|
|
e76078fc89 | ||
|
|
2b6b7b899e | ||
|
|
4e6086e8ed | ||
|
|
97a59cd21e | ||
|
|
9ef0ed8516 | ||
|
|
3c919c3af7 | ||
|
|
fbe3c70b85 | ||
|
|
46bf22e36b | ||
|
|
003c89c3a4 | ||
|
|
793bd04afe | ||
|
|
0249ae2724 | ||
|
|
32e0be481a | ||
|
|
e5592c5da8 | ||
|
|
b0500332bc | ||
|
|
78b8ac663e | ||
|
|
e41ab3ac18 | ||
|
|
36d97bbcaf | ||
|
|
f3c89fe48b | ||
|
|
9b31520684 | ||
|
|
660e68b0a3 | ||
|
|
08b46e1a7c | ||
|
|
b78299bbbd | ||
|
|
c8687bfc74 | ||
|
|
a5219055ef | ||
|
|
f79a9e5182 | ||
|
|
3904b172ad | ||
|
|
e0da506d1a | ||
|
|
d2f6191615 | ||
|
|
7c211fa50c | ||
|
|
fadec1a846 | ||
|
|
d2aa19e31f | ||
|
|
ccfe1181be | ||
|
|
85fb12a4ec | ||
|
|
84994c2b2f | ||
|
|
1a2dfb9b19 | ||
|
|
753652dcf9 | ||
|
|
b99d261084 | ||
|
|
aee4bcd65e | ||
|
|
159ec3f04d | ||
|
|
57ff84cd4d | ||
|
|
2933f80d69 | ||
|
|
3d38892f7e | ||
|
|
1d990979ac | ||
|
|
d69cf09d4e | ||
|
|
b8d346d890 | ||
|
|
5d58d85eae | ||
|
|
bc4d34f2fc | ||
|
|
6565d84cf9 | ||
|
|
95ed33b2ce | ||
|
|
e8f6d4107b | ||
|
|
deb0b211b4 | ||
|
|
83888f80d4 | ||
|
|
974862a60a | ||
|
|
2965f35d6d | ||
|
|
6aa300dac0 | ||
|
|
00020a9cbb | ||
|
|
99c6c46d54 | ||
|
|
d183b1b940 | ||
|
|
49fc2a93fa | ||
|
|
1c3066aaf7 | ||
|
|
cdd9745341 | ||
|
|
d0c051a9c2 | ||
|
|
d444e088c4 | ||
|
|
9ae74e0fba | ||
|
|
447aafd106 | ||
|
|
376b79cab3 | ||
|
|
b95ac44a4c | ||
|
|
4161952566 | ||
|
|
5b18abbea0 | ||
|
|
66cc9bc6db | ||
|
|
4f8337c11a | ||
|
|
3aee334fbd | ||
|
|
6d76a14ed0 | ||
|
|
48150e2002 | ||
|
|
d741d9a11e | ||
|
|
3194baffd7 | ||
|
|
7a49fbb0bb | ||
|
|
1ff1704697 | ||
|
|
aeaad41c45 | ||
|
|
15cdf3bfd6 | ||
|
|
146fa474a1 | ||
|
|
11468abc98 | ||
|
|
ef6d47b801 | ||
|
|
bfdb825e0b | ||
|
|
707a388c51 | ||
|
|
d33334708d | ||
|
|
0e853d44b7 | ||
|
|
c598f202f8 | ||
|
|
e607e04af4 | ||
|
|
802d1dfa8e | ||
|
|
00279502e4 | ||
|
|
cc18794a93 | ||
|
|
905e92fa4d | ||
|
|
7a503ea76c | ||
|
|
eed8a57ff9 | ||
|
|
2968803f29 | ||
|
|
6cf6e8ab54 | ||
|
|
3668249267 | ||
|
|
28b092a4e3 | ||
|
|
c0bba7dead | ||
|
|
7fc8d432b5 | ||
|
|
34027ee7c4 | ||
|
|
dc675162c9 | ||
|
|
db370418f8 | ||
|
|
43de871392 | ||
|
|
5e9c483892 | ||
|
|
17169903b4 | ||
|
|
aa70c82824 | ||
|
|
73a5143a17 | ||
|
|
d35e56fd37 | ||
|
|
cafed2d98c | ||
|
|
cd5df82d72 | ||
|
|
5404371b35 | ||
|
|
899bbfee40 | ||
|
|
b9f2aa5eff | ||
|
|
0a028afe7f | ||
|
|
6f1ee88b78 | ||
|
|
e5cc06e822 | ||
|
|
e13ba010bf | ||
|
|
f6bc473eb4 | ||
|
|
b491090037 | ||
|
|
0416f5f4a8 | ||
|
|
5177bf6c1f | ||
|
|
fcd2fb0f12 | ||
|
|
37115d238b | ||
|
|
2c8bfd6573 | ||
|
|
de3bae41ae | ||
|
|
bd1850db69 | ||
|
|
11b5c54c69 | ||
|
|
6f081eb1e4 | ||
|
|
d367dbf767 | ||
|
|
8237bd52b5 | ||
|
|
71471d3bbc | ||
|
|
34169aebaf | ||
|
|
07e98ab79f | ||
|
|
9af66a8e69 | ||
|
|
5e965aec2c | ||
|
|
ecb38693db | ||
|
|
36d5344ded | ||
|
|
6b3bde585d | ||
|
|
f7ea25be61 | ||
|
|
9136530618 | ||
|
|
f4e7e6c74a | ||
|
|
c4766ad3fb | ||
|
|
894a78c0f9 | ||
|
|
c082290cf1 | ||
|
|
4cac324e9f | ||
|
|
493353e774 | ||
|
|
3289215e19 | ||
|
|
cdb5fed5a5 | ||
|
|
bb1dbab984 | ||
|
|
8a97718dd4 | ||
|
|
01142b67c6 | ||
|
|
e0bba80f55 | ||
|
|
34276539fa | ||
|
|
4511dd79fa | ||
|
|
7500685115 | ||
|
|
658e7d64c2 | ||
|
|
569079fed0 | ||
|
|
b042d78186 | ||
|
|
abd051d07b | ||
|
|
8c5b22a8fb | ||
|
|
de93b11c25 | ||
|
|
7f16339bd9 | ||
|
|
42dc6e7c4f | ||
|
|
3153973c2b | ||
|
|
cc044fe41b | ||
|
|
fd5de7b218 | ||
|
|
0037524cfd | ||
|
|
082fa2ca0d | ||
|
|
b1cf9d139a | ||
|
|
9854360ab7 | ||
|
|
b8755b808e | ||
|
|
139812b3bc | ||
|
|
6adbe9a29b | ||
|
|
52f7120392 | ||
|
|
0d2abb95b5 | ||
|
|
6b2adc9359 | ||
|
|
325f89a80d | ||
|
|
e8152a3475 | ||
|
|
6d42d14575 | ||
|
|
2b269ebf54 | ||
|
|
d2493e89ca | ||
|
|
a61423aa99 | ||
|
|
506efec858 | ||
|
|
8e3320ad72 | ||
|
|
ff279bf633 | ||
|
|
a582b07549 | ||
|
|
1e7fef4557 | ||
|
|
f8b44cd8ce | ||
|
|
b0681c10b9 | ||
|
|
1bf0cd1d15 | ||
|
|
01f38537de | ||
|
|
adbb20d7c9 | ||
|
|
c3c7fe08b6 | ||
|
|
4a52135a0b | ||
|
|
a56f805787 | ||
|
|
3a467b3da4 | ||
|
|
4500c4d407 | ||
|
|
eebda74bb7 | ||
|
|
e6e8c12735 | ||
|
|
212b42c8b9 | ||
|
|
9c4ff30ce7 | ||
|
|
d7510b83c8 | ||
|
|
9a9e0cc7de | ||
|
|
a8a90ee815 | ||
|
|
7859660ece | ||
|
|
b93dafee63 | ||
|
|
a1a61e9d4a | ||
|
|
464d6bdd35 | ||
|
|
2c613d5b99 | ||
|
|
d1f683b8a5 | ||
|
|
f4bb8ccb7d | ||
|
|
00364afd8f | ||
|
|
f5f07f7016 | ||
|
|
2bdeeb2d6e | ||
|
|
f023529d37 | ||
|
|
b8d37cb223 | ||
|
|
88ed14fe5c | ||
|
|
cd30771775 | ||
|
|
00a5bc5cf3 | ||
|
|
a17d58fe32 | ||
|
|
c21286dbc3 | ||
|
|
7fc99630e0 | ||
|
|
69a5cd1017 | ||
|
|
3129acfc19 | ||
|
|
c3dd777e44 | ||
|
|
c5120b9c72 | ||
|
|
91a18fe7a2 | ||
|
|
62f5185a1b | ||
|
|
f4cb83319e | ||
|
|
c7b3b7a826 | ||
|
|
01fb245da3 | ||
|
|
83e072dad1 | ||
|
|
eb5ac80714 | ||
|
|
b57cc7bd59 | ||
|
|
d532164cd6 | ||
|
|
61ae4826d1 | ||
|
|
be4e62fe9d | ||
|
|
d9346ab260 | ||
|
|
87c4f318a4 | ||
|
|
30b87e8035 | ||
|
|
26a85846fc | ||
|
|
cd40507609 | ||
|
|
a9ea2e0137 | ||
|
|
6964f7adfc | ||
|
|
70231b6ae0 | ||
|
|
9354831729 | ||
|
|
ab7a83b37e | ||
|
|
8dfa8c20f3 | ||
|
|
67499eeff7 | ||
|
|
d43ff6263f | ||
|
|
058dc8c611 | ||
|
|
8871964be0 | ||
|
|
42aa426991 | ||
|
|
7cee94e0b8 | ||
|
|
fa96a6beec | ||
|
|
efc0edf3ef | ||
|
|
f1d785777c | ||
|
|
db0168205d | ||
|
|
2a20ed95fa | ||
|
|
11f1889f1f | ||
|
|
703b5b2f3f | ||
|
|
58a15e61dd | ||
|
|
896f57f0b4 | ||
|
|
34ae64706e | ||
|
|
43fe92fe3f | ||
|
|
31513d52d7 | ||
|
|
70a16fe344 | ||
|
|
4570ffb8f5 | ||
|
|
22f6ed324d | ||
|
|
e29484e14b | ||
|
|
7e21fdd862 | ||
|
|
01e69cdf5e | ||
|
|
9ad7840236 | ||
|
|
e97ec36094 | ||
|
|
ef318eeaec | ||
|
|
3314b18318 | ||
|
|
5f04ecfdd4 | ||
|
|
91d294acff | ||
|
|
283cdeed6c | ||
|
|
a283fce4ec | ||
|
|
f8d525d797 | ||
|
|
80dabad10e | ||
|
|
8181989e98 | ||
|
|
0f7bf13834 | ||
|
|
c1d6e79a41 | ||
|
|
6f073250f4 | ||
|
|
c084ccde40 | ||
|
|
b73a06b9ab | ||
|
|
740c1131ea | ||
|
|
0a798aec30 | ||
|
|
9089e70155 | ||
|
|
f532630d1b | ||
|
|
7b47d32a96 | ||
|
|
3934392219 | ||
|
|
ed6f48b5fe | ||
|
|
729e4a6eac | ||
|
|
9a39dead4f | ||
|
|
cb1eabc3fa | ||
|
|
b30002948c | ||
|
|
d528f11082 | ||
|
|
42a1fdf2df | ||
|
|
394ddd4e51 | ||
|
|
8c7d95f9ea | ||
|
|
422550abfd | ||
|
|
ca9ce1ba1b | ||
|
|
ac1c420cb5 | ||
|
|
05a9e85529 | ||
|
|
ca6ed76e8f | ||
|
|
3d04da39e3 | ||
|
|
127908f104 | ||
|
|
686bcd5308 | ||
|
|
07c66378c0 | ||
|
|
4e7107c8a8 | ||
|
|
3c2d658b37 | ||
|
|
f0b2cc1bab | ||
|
|
d038cbf357 | ||
|
|
c3ea632cb9 | ||
|
|
a31d50924d | ||
|
|
c567e2714a | ||
|
|
a2e342b4fc | ||
|
|
4469637f27 | ||
|
|
f4ecbe7f65 | ||
|
|
dbaab4efe1 | ||
|
|
8c178869b7 | ||
|
|
3c7bcb990e | ||
|
|
f7a5678814 | ||
|
|
646bb32965 | ||
|
|
dce7d8fdd3 | ||
|
|
6dd17312f4 | ||
|
|
9c64f40ea1 | ||
|
|
da6b461408 | ||
|
|
77dce75108 | ||
|
|
37308917d1 | ||
|
|
21d2229572 | ||
|
|
7d372af51e | ||
|
|
a3e0753076 | ||
|
|
a728d1f9c8 | ||
|
|
b893e86f3c | ||
|
|
63cf6e9b3a | ||
|
|
67738d811e | ||
|
|
4d77f6d04d | ||
|
|
3702495038 | ||
|
|
ede08ce5ac | ||
|
|
5571e0bc0c | ||
|
|
73bb73c8ca | ||
|
|
54011fdeb7 | ||
|
|
5b8811bd09 | ||
|
|
c460eec0ab | ||
|
|
bc6233541a | ||
|
|
18aef9d526 | ||
|
|
ccc6fd30f8 | ||
|
|
1ba498c443 | ||
|
|
64f31f2b5a | ||
|
|
b94085c5f4 | ||
|
|
62b90ad552 | ||
|
|
d6d1e0ffed | ||
|
|
ccd103cd88 | ||
|
|
0606f16a11 | ||
|
|
c9e3ea005b | ||
|
|
f009f5803f | ||
|
|
3f8268d848 | ||
|
|
cefec723d0 | ||
|
|
124aa72fd9 | ||
|
|
dbc7277ba9 | ||
|
|
24d8769b5b | ||
|
|
4aecb9756e | ||
|
|
51ca29ab9f | ||
|
|
c6e5264b7b | ||
|
|
73203ce869 | ||
|
|
b80a29ca04 | ||
|
|
5ee440d9a5 | ||
|
|
cda3675dc5 | ||
|
|
caf9c07ba3 | ||
|
|
96e70aa4d2 | ||
|
|
9f1b77a007 | ||
|
|
946b5bb006 | ||
|
|
bebcc40987 | ||
|
|
d6d7f5099f | ||
|
|
bdcc2f644b | ||
|
|
c3ba54a0ce | ||
|
|
1443e2f6b8 | ||
|
|
7799acec05 | ||
|
|
1bbc1f28aa | ||
|
|
8257fd8e7c | ||
|
|
bc58aff362 | ||
|
|
1073954550 | ||
|
|
c3d7a4e3de | ||
|
|
92ae92c116 | ||
|
|
3c10be6d1a | ||
|
|
f18a9bdcc7 | ||
|
|
87f59cd3eb | ||
|
|
819b6fcacb | ||
|
|
246961887e | ||
|
|
54e21333a3 | ||
|
|
c45beec59d | ||
|
|
c88ada489a | ||
|
|
189f23f407 | ||
|
|
9789143c6d | ||
|
|
f4dd7ff483 | ||
|
|
50e05c6320 | ||
|
|
9ba5360bfc | ||
|
|
565ef693ce | ||
|
|
0c1a8eff85 | ||
|
|
32e9de6e9a | ||
|
|
533955a9c7 | ||
|
|
2faa0356a5 | ||
|
|
ee2a5c199a | ||
|
|
bdcc522897 | ||
|
|
71b20bdeaa | ||
|
|
0e85b4776a | ||
|
|
24d2c1bc7a | ||
|
|
1610e932c6 | ||
|
|
31d7bb2332 | ||
|
|
3d9c03c0c8 | ||
|
|
dd94343d92 | ||
|
|
4b93dede33 | ||
|
|
61205989cc | ||
|
|
2559ea61d8 | ||
|
|
eae665c1c5 | ||
|
|
d73521e0a0 | ||
|
|
e8deb0384a | ||
|
|
881f2c023e | ||
|
|
5057a8a7a3 | ||
|
|
b8e9269488 | ||
|
|
76afd5a7ca | ||
|
|
dc48d467f5 | ||
|
|
0b0390620e | ||
|
|
24eb34c182 | ||
|
|
1a5bd1b6a2 | ||
|
|
ab7b6ce460 | ||
|
|
c4cd677021 | ||
|
|
6b84d39dda | ||
|
|
e61342177d | ||
|
|
d51fa92b46 | ||
|
|
3e20dc7de6 | ||
|
|
dce1d7ba39 | ||
|
|
adffea1d52 | ||
|
|
20b73dcc84 | ||
|
|
b331fa353b | ||
|
|
9fe14609af | ||
|
|
f6973b8907 | ||
|
|
8738036f6f | ||
|
|
fce02dc0e5 | ||
|
|
2bef0e833f | ||
|
|
9040a2a2e3 | ||
|
|
4407ed0a6f | ||
|
|
09721518b0 | ||
|
|
8ad6337dde | ||
|
|
271740d2ac | ||
|
|
48dd537257 | ||
|
|
77b4aaa50d | ||
|
|
1014316581 | ||
|
|
739cd83155 | ||
|
|
df08bc4da0 | ||
|
|
55e832d4f6 | ||
|
|
032472dcb3 | ||
|
|
68bf93d1ac | ||
|
|
ba133f94fc | ||
|
|
064c16f4d7 | ||
|
|
5a394ee744 | ||
|
|
3bc2f5dc55 | ||
|
|
6f63818e5f | ||
|
|
a5d7bee939 | ||
|
|
9d396162f1 | ||
|
|
4a0d9a96ab | ||
|
|
9f65e5a9ab | ||
|
|
c71f4e438b | ||
|
|
14d13eb4c7 | ||
|
|
29c629eb22 | ||
|
|
050b794b42 | ||
|
|
89b5f8c275 | ||
|
|
f589197321 | ||
|
|
09575a68f0 | ||
|
|
c1b838e356 | ||
|
|
8ed2696315 | ||
|
|
ab138bdba2 | ||
|
|
5ba9fb78fd | ||
|
|
2d47447375 | ||
|
|
d9eaede4c2 | ||
|
|
c6db11a10b | ||
|
|
2225e542ad | ||
|
|
975e13d45f | ||
|
|
534a165c45 | ||
|
|
5cff6ed67b | ||
|
|
3448733834 | ||
|
|
c382c95d24 | ||
|
|
0034226fa7 | ||
|
|
5f067a6bb5 | ||
|
|
6ab1996440 | ||
|
|
5bff6d63f2 | ||
|
|
5fe227b874 | ||
|
|
cbaf2f8370 | ||
|
|
393ac886e2 | ||
|
|
c9082083d1 | ||
|
|
5d0d89e74d | ||
|
|
e9c3583fd8 | ||
|
|
81eadc1418 | ||
|
|
dfff0efc0b | ||
|
|
3732db2226 | ||
|
|
e9ccdcfbbe | ||
|
|
01345a5dc4 | ||
|
|
90c8e57ed7 | ||
|
|
d644b4c331 | ||
|
|
2f15c71412 | ||
|
|
0a44a74f59 | ||
|
|
f876fe8d25 | ||
|
|
290032646f | ||
|
|
e5d2ed4bb2 | ||
|
|
e9ea0e0389 | ||
|
|
35565bb021 | ||
|
|
56aff1d191 | ||
|
|
b8be1d1866 | ||
|
|
1d7d2cd52e | ||
|
|
71446a12af | ||
|
|
ca6cafaebd | ||
|
|
c97be335ee | ||
|
|
fd1227b87e | ||
|
|
7ef72c501e | ||
|
|
f7ee96aa99 | ||
|
|
b84478898d | ||
|
|
6afe0e8a34 | ||
|
|
6e4f4b5c8d | ||
|
|
f86fe4a138 | ||
|
|
63c663b8c1 | ||
|
|
a1296596fa | ||
|
|
1cca4de9e5 | ||
|
|
7ada587df3 | ||
|
|
1e58c32a5f | ||
|
|
2a27048174 | ||
|
|
2b291954cf | ||
|
|
8f8bfc62ca | ||
|
|
38d4d448a9 | ||
|
|
d5d11ca4bd | ||
|
|
e3e400f376 | ||
|
|
6637758ad0 | ||
|
|
41e9bd3cb5 | ||
|
|
c2d1909379 | ||
|
|
77688f297f | ||
|
|
714f665cc7 | ||
|
|
ec138d5741 | ||
|
|
560e5aa19a | ||
|
|
ad162f3366 | ||
|
|
5d07830339 | ||
|
|
b310d25ee3 | ||
|
|
443ccbd807 | ||
|
|
8cdecf80c7 | ||
|
|
a16d5435de | ||
|
|
ec02422226 | ||
|
|
cc5d438550 | ||
|
|
806d116501 | ||
|
|
066c9d9fec | ||
|
|
5b3b9fbc30 | ||
|
|
d15e189b7c | ||
|
|
1bd9974f89 | ||
|
|
90296d87df | ||
|
|
75b287771a | ||
|
|
5765504796 | ||
|
|
dda8c0c9e0 | ||
|
|
ce9d668602 | ||
|
|
39c2c5f25f | ||
|
|
12a7d794b4 | ||
|
|
ff8b0300ae | ||
|
|
f882df4cb7 | ||
|
|
e1300005cb | ||
|
|
e599ab9214 | ||
|
|
92acf62884 | ||
|
|
c2fb57fce9 | ||
|
|
3699d26e5d | ||
|
|
6eb0159ea1 | ||
|
|
433913c77a | ||
|
|
d955feef61 | ||
|
|
5377b9b618 | ||
|
|
5c9371c575 | ||
|
|
23d916f191 | ||
|
|
35d4914518 | ||
|
|
eb2ec71d2b | ||
|
|
dc50758dc9 | ||
|
|
9775d71c28 | ||
|
|
c40e4ee9ee | ||
|
|
2b469c385c | ||
|
|
a104fe45aa | ||
|
|
257df25a67 | ||
|
|
2a977557c2 | ||
|
|
d0e9f03311 | ||
|
|
97ca699170 | ||
|
|
702537e8fd | ||
|
|
83a3488d0d | ||
|
|
450e938092 | ||
|
|
b88e076f27 | ||
|
|
0fe90df01e | ||
|
|
66ad909908 | ||
|
|
77d74717d2 | ||
|
|
63f683982f | ||
|
|
9525ce8299 | ||
|
|
d7b8ec1274 | ||
|
|
96cd16faf7 | ||
|
|
9ddc7501fe | ||
|
|
301c496fb2 | ||
|
|
3eb265c5f7 | ||
|
|
049338e83b | ||
|
|
a336e9f460 | ||
|
|
0294cf8c4a | ||
|
|
c5183309ae | ||
|
|
0a15cb1e13 | ||
|
|
9546cc42b2 | ||
|
|
ac01262655 | ||
|
|
6ea962c1fa | ||
|
|
9e35283273 | ||
|
|
9c8e1d9c9f | ||
|
|
7d324b3fd4 | ||
|
|
badc5738ff | ||
|
|
8feaf4410f | ||
|
|
4e224d761e | ||
|
|
e775abdc5a | ||
|
|
60754c9380 | ||
|
|
c890ff5605 | ||
|
|
9f9c0059a5 | ||
|
|
4eabd417b9 | ||
|
|
c218de9567 | ||
|
|
4b5ca5ecf4 | ||
|
|
edbf46a751 | ||
|
|
c9c90bb86a | ||
|
|
437a608d2b | ||
|
|
b638eef1c6 | ||
|
|
b7cec8a0c4 | ||
|
|
28578bd6b0 | ||
|
|
160004fa7e | ||
|
|
f4332761f9 | ||
|
|
a4d1a18850 | ||
|
|
c3e1e55e9c | ||
|
|
e20bcd19b9 | ||
|
|
1fbf213ada | ||
|
|
c2d2359a8c | ||
|
|
586a2a065e | ||
|
|
adf43b7e35 | ||
|
|
45a4cddeef | ||
|
|
69f62551c7 | ||
|
|
f1bdf502be | ||
|
|
e89b3795f8 | ||
|
|
20b169e8eb | ||
|
|
1480ee2779 | ||
|
|
41c9741b72 | ||
|
|
f9e5096ceb | ||
|
|
a9b2a4940e | ||
|
|
f66c6ab8fc | ||
|
|
73902d5f92 | ||
|
|
0bb5f9f297 | ||
|
|
16ad8502d2 | ||
|
|
ad68e6057e | ||
|
|
54b4faeeff | ||
|
|
a7f69545f2 | ||
|
|
93ea558ec3 | ||
|
|
d0cdc208e3 | ||
|
|
0d7c483bd5 | ||
|
|
3f211c6277 | ||
|
|
79e93edfef | ||
|
|
44e8efda36 | ||
|
|
9726ac6f12 | ||
|
|
898d8c6449 | ||
|
|
01006ed76d | ||
|
|
2936823d03 | ||
|
|
7d05d53f9e | ||
|
|
f3074461ed | ||
|
|
146f832919 | ||
|
|
a622707608 | ||
|
|
6da43b15c8 | ||
|
|
d0bb7b075e | ||
|
|
c1ecd74644 | ||
|
|
a1aada0777 | ||
|
|
c55a8eeccd | ||
|
|
73cc8adcab | ||
|
|
7bb05f7f26 | ||
|
|
7f0803c3f6 | ||
|
|
1185ea4f96 | ||
|
|
43db51a664 | ||
|
|
d35cdc91f8 | ||
|
|
8d643277c0 | ||
|
|
5be1858b45 | ||
|
|
13d6e16630 | ||
|
|
dcb1cbbdb7 | ||
|
|
f7f077be3e | ||
|
|
3d79416520 | ||
|
|
c559e70270 | ||
|
|
efcc15d89d | ||
|
|
d17fe6bb7a | ||
|
|
01235ff398 | ||
|
|
3d6e490505 | ||
|
|
bd3491d210 | ||
|
|
d139146e0b | ||
|
|
b36da06fad | ||
|
|
d20c5e1773 | ||
|
|
0afc0d59a4 | ||
|
|
26481c547a | ||
|
|
45fe8c182b | ||
|
|
c25ddd0dbc | ||
|
|
efc9a10fdf | ||
|
|
a8eb9dfedf | ||
|
|
87cf5cb932 | ||
|
|
e1ca2c0b98 | ||
|
|
a9295751c8 | ||
|
|
2a46a5c00a | ||
|
|
d3b7af3c5f | ||
|
|
db59f24873 | ||
|
|
5645bf7982 | ||
|
|
6cbf87b52c | ||
|
|
bc642deebd | ||
|
|
e84a9643f8 | ||
|
|
e9af0ebdc5 | ||
|
|
29ee8a035b | ||
|
|
81ac4e8d01 | ||
|
|
ecc68d373f | ||
|
|
3032572f18 | ||
|
|
bcee6abb65 | ||
|
|
7e0b8ddf50 | ||
|
|
91dcb508b3 | ||
|
|
d549e2722d | ||
|
|
3bb29c8308 | ||
|
|
0121228d88 | ||
|
|
cbafa7110a | ||
|
|
06791beabd | ||
|
|
68b9857409 | ||
|
|
112a0df8c2 | ||
|
|
73717278ff | ||
|
|
5fa79926db | ||
|
|
06f97ac2f1 | ||
|
|
c2b4961b8d | ||
|
|
9b3838b912 | ||
|
|
946ea19371 | ||
|
|
419e011d0b | ||
|
|
b0157c9bd2 | ||
|
|
37d146e8fa | ||
|
|
063d982750 | ||
|
|
fbfeaa0f95 | ||
|
|
9b11b02658 | ||
|
|
3e435c419a | ||
|
|
1b37ba8daa | ||
|
|
b529219a0e | ||
|
|
d9b3eff18f | ||
|
|
cb5ada6ec9 | ||
|
|
baf7ffd441 | ||
|
|
2b4ca80a95 | ||
|
|
b5963936fd | ||
|
|
354ed9ede0 | ||
|
|
7ad9b8ff3e | ||
|
|
6dc522a044 | ||
|
|
3e91bc8c1e | ||
|
|
3218c544dc | ||
|
|
1ae11da036 | ||
|
|
84e36d758e | ||
|
|
06ede80435 | ||
|
|
dbc57060ee | ||
|
|
798bd46d0a | ||
|
|
c95f388d8d | ||
|
|
a9024ebc6b | ||
|
|
33bc2d8a6b | ||
|
|
cc60f2f308 | ||
|
|
edaa51593b | ||
|
|
e2265dd6f7 | ||
|
|
e1cf89c3bf | ||
|
|
8cd1541893 | ||
|
|
9d510815b4 | ||
|
|
44d22d93da | ||
|
|
f7405a82e6 | ||
|
|
04f3e44c3a | ||
|
|
6cc207a10c | ||
|
|
6b5e615a23 | ||
|
|
46268a7cf3 | ||
|
|
3682fbf531 | ||
|
|
0928b54d90 | ||
|
|
5a10339adc | ||
|
|
7c412cbec8 | ||
|
|
d235ca8ed8 | ||
|
|
97511be64a | ||
|
|
3bd5aaa251 | ||
|
|
ae2d9d8387 | ||
|
|
33c9694d26 | ||
|
|
dbede7f81a | ||
|
|
c8ad2bb454 | ||
|
|
18c52a5e23 | ||
|
|
ca1954ff80 | ||
|
|
5a3574734c | ||
|
|
5c6d10b2db | ||
|
|
7e96ced4c4 | ||
|
|
8da259cabc | ||
|
|
f978d739bb | ||
|
|
7b2d50e93e | ||
|
|
8bec50663f | ||
|
|
f4f5063efe | ||
|
|
11782ac34d | ||
|
|
bfec3fff36 | ||
|
|
d8c0a56577 | ||
|
|
ff1326a44f | ||
|
|
1fa4fccbcc | ||
|
|
323b41fd58 | ||
|
|
3d2b881b0e | ||
|
|
def41af469 | ||
|
|
4750aba763 | ||
|
|
5a9249dee1 | ||
|
|
064fc0a8e2 | ||
|
|
67de70432c | ||
|
|
facd71bd71 | ||
|
|
96e6270520 | ||
|
|
51c45e86ce | ||
|
|
445214f0b5 | ||
|
|
859d4f5372 | ||
|
|
0541280b20 | ||
|
|
ec7ced9fd3 | ||
|
|
4840b435f5 | ||
|
|
3acee3a686 | ||
|
|
d849a249c2 | ||
|
|
38656eca72 | ||
|
|
9b438d0caa | ||
|
|
f30debd1b3 | ||
|
|
d32b32842a | ||
|
|
2fad8f2ad7 | ||
|
|
7d17bd7dd1 | ||
|
|
357eded2c3 | ||
|
|
f7532cf5b4 | ||
|
|
bd7203dd9c | ||
|
|
9e98351923 | ||
|
|
b46997bc1a | ||
|
|
477d698eac | ||
|
|
96ab3d1c7e | ||
|
|
0dd41ab18a | ||
|
|
47b7780c96 | ||
|
|
ac35f002f1 | ||
|
|
8dec24693c | ||
|
|
e3803702c5 | ||
|
|
b9c8fed01f | ||
|
|
e97fec802c | ||
|
|
0234b0f6ce | ||
|
|
4fa3708c2f | ||
|
|
bede658d94 | ||
|
|
6f85e4506b | ||
|
|
9d21aa36de | ||
|
|
3c02286a08 | ||
|
|
6f2a2fd9e6 | ||
|
|
22169c64db | ||
|
|
b8e128e0a9 | ||
|
|
2729b37b76 | ||
|
|
0a5b0eb6d5 | ||
|
|
295b7a0701 | ||
|
|
fea3bd6aa4 | ||
|
|
05724ae64f | ||
|
|
8d7afe4f46 | ||
|
|
77c716bd6c | ||
|
|
f6c5aa9f84 | ||
|
|
945e5ca11c | ||
|
|
2f58e593e5 | ||
|
|
32fad08ef5 | ||
|
|
9606dd3501 | ||
|
|
f09b055872 | ||
|
|
4433da1e4a | ||
|
|
e3f02d02a2 | ||
|
|
a4ff2c7701 | ||
|
|
de510129bc | ||
|
|
ed171e5761 | ||
|
|
747d8a6031 | ||
|
|
36a5039c12 | ||
|
|
ac075c5bae | ||
|
|
e650c2f534 | ||
|
|
48b3998443 | ||
|
|
ef17da48c7 | ||
|
|
c97fff320b | ||
|
|
255954dd56 | ||
|
|
3c748bca39 | ||
|
|
c18b3e9114 | ||
|
|
66b4388e64 | ||
|
|
116adb1167 | ||
|
|
3db83db5d2 | ||
|
|
efc63b5230 | ||
|
|
c45cd56c78 | ||
|
|
f94a617d94 | ||
|
|
153ecf4d13 | ||
|
|
825bc87ca3 | ||
|
|
d1b652b013 | ||
|
|
46d7212d1b | ||
|
|
ea350c30c8 | ||
|
|
45871aa1c8 | ||
|
|
d3dedca4a8 | ||
|
|
1177263c8f | ||
|
|
a82b63e88b | ||
|
|
2f66c93bfd | ||
|
|
6991fa4907 | ||
|
|
b86d76fcd4 | ||
|
|
4f1ee03fe8 | ||
|
|
e3267f2e0c | ||
|
|
c265aad6d7 | ||
|
|
b512fe2003 | ||
|
|
46648e2547 | ||
|
|
54e945bf14 | ||
|
|
7c01fced68 | ||
|
|
64871b4c37 | ||
|
|
e3e2def809 | ||
|
|
ea7d1ce0e2 | ||
|
|
f5ddf1bc0e | ||
|
|
f6a6316b7a | ||
|
|
35f62d4e45 | ||
|
|
77efbe39a9 | ||
|
|
fcdf538368 | ||
|
|
248f24d4b9 | ||
|
|
32422646e4 | ||
|
|
a90e4e9c8d | ||
|
|
74188415dd | ||
|
|
11a4fdfcd5 | ||
|
|
7a119facdf | ||
|
|
4e6cc5ffa0 | ||
|
|
5a37e3e275 | ||
|
|
1edc32c6b0 | ||
|
|
a01a5a737b | ||
|
|
0c22064a94 | ||
|
|
9ef68d226a | ||
|
|
bf361f6824 | ||
|
|
74ee210514 | ||
|
|
2b7f21fee4 | ||
|
|
6ad32e487f | ||
|
|
97fd3eaf64 | ||
|
|
d9b4647cf5 | ||
|
|
03e0c02640 | ||
|
|
398f8c4318 | ||
|
|
1c7709a18b | ||
|
|
06c3a588bf | ||
|
|
80526c0e06 | ||
|
|
86528334d1 | ||
|
|
1cc4f7eaaa | ||
|
|
af2a05d0b5 |
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
* text=auto
|
||||||
|
|
||||||
|
*.png binary
|
||||||
|
*.wav binary
|
||||||
84
.gitignore
vendored
84
.gitignore
vendored
@@ -1,42 +1,42 @@
|
|||||||
# Eclipse stuff
|
# Eclipse stuff
|
||||||
/.classpath
|
/.classpath
|
||||||
/.project
|
/.project
|
||||||
/.settings
|
/.settings
|
||||||
|
|
||||||
# netbeans
|
# netbeans
|
||||||
/nbproject
|
/nbproject
|
||||||
|
|
||||||
# we use maven!
|
# we use maven!
|
||||||
/build.xml
|
/build.xml
|
||||||
|
|
||||||
# maven
|
# maven
|
||||||
/target
|
/target
|
||||||
|
|
||||||
# vim
|
# vim
|
||||||
.*.sw[a-p]
|
.*.sw[a-p]
|
||||||
|
|
||||||
# various other potential build files
|
# various other potential build files
|
||||||
/build
|
/build
|
||||||
/bin
|
/bin
|
||||||
/dist
|
/dist
|
||||||
/manifest.mf
|
/manifest.mf
|
||||||
|
|
||||||
/world
|
/world
|
||||||
|
|
||||||
# Mac filesystem dust
|
# Mac filesystem dust
|
||||||
/.DS_Store
|
*.DS_Store
|
||||||
|
|
||||||
# intellij
|
# intellij
|
||||||
*.iml
|
*.iml
|
||||||
*.ipr
|
*.ipr
|
||||||
*.iws
|
*.iws
|
||||||
.idea/
|
.idea/
|
||||||
|
|
||||||
# Project Stuff
|
# Project Stuff
|
||||||
/src/main/resources/mcMMO
|
/src/main/resources/mcMMO
|
||||||
|
|
||||||
# Other Libraries
|
# Other Libraries
|
||||||
*.jar
|
*.jar
|
||||||
|
|
||||||
# Atlassian Stuff
|
# Atlassian Stuff
|
||||||
/atlassian-ide-plugin.xml
|
/atlassian-ide-plugin.xml
|
||||||
|
|||||||
3082
Changelog.txt
3082
Changelog.txt
File diff suppressed because it is too large
Load Diff
@@ -1,24 +0,0 @@
|
|||||||
== mcMMO
|
|
||||||
**The RPG lovers mod**
|
|
||||||
|
|
||||||
=== Brief Description
|
|
||||||
mcMMO takes core Minecraft game mechanics and expands them to add an extensive RPG experience, the goal of the project has always been a quality RPG experience. Everything in mcMMO is carefully thought out and is constantly improving. mcMMO adds eleven skills to train in and level in, while also offering a high level of customization for server admins. There are countless features, including custom sounds, graphical elements, and more added when running mcMMO in conjunction with Spout. I carefully read feedback and evaluate the mechanics of mcMMO in every update to provide an ever-evolving experience.
|
|
||||||
|
|
||||||
If you want an original RPG experience like no other mod out there, mcMMO is for you.
|
|
||||||
|
|
||||||
=== About the Developer
|
|
||||||
I've always wanted to make games and in the last year I decided to take a swing at developing Minecraft mods as a platform to teach myself programming, the biggest project I have made to date is mcMMO. I went from knowing nothing about Java to what I know now purely from modding Minecraft, and I plan to move onto game development in the not so distant future.
|
|
||||||
|
|
||||||
I take design very seriously, I am not the kind of person who can be satisfied giving a project anything less than my all. As you will see reflected in the quality of the mods I make, I take great care in my work.
|
|
||||||
|
|
||||||
Hearing that people enjoy mcMMO and seeing the daily youtube videos about my mod has become a joy, I really can't believe how popular my mod has gotten!
|
|
||||||
|
|
||||||
=== Compiling
|
|
||||||
|
|
||||||
Required Libraries:
|
|
||||||
* Spout API
|
|
||||||
|
|
||||||
Required to Run:
|
|
||||||
* Bukkit
|
|
||||||
|
|
||||||
http://dev.bukkit.org/server-mods/mcmmo for more up to date information.
|
|
||||||
47
README.md
Normal file
47
README.md
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# mcMMO
|
||||||
|
## The RPG lovers mod
|
||||||
|
|
||||||
|
### Dev builds
|
||||||
|
Our latest development builds are available [here](http://ci.mcmmo.info).
|
||||||
|
|
||||||
|
### Brief Description
|
||||||
|
mcMMO takes core Minecraft game mechanics and expands them to add an extensive RPG experience, the goal of the project has always been a quality RPG experience. Everything in mcMMO is carefully thought out and is constantly improving. mcMMO adds eleven skills to train in and level in, while also offering a high level of customization for server admins. There are countless features, including custom sounds, graphical elements, and more added when running mcMMO in conjunction with Spout. I carefully read feedback and evaluate the mechanics of mcMMO in every update to provide an ever-evolving experience.
|
||||||
|
|
||||||
|
If you want an original RPG experience like no other mod out there, mcMMO is for you.
|
||||||
|
|
||||||
|
## About the Team
|
||||||
|
|
||||||
|
mcMMO is currently developed by a team of individuals from all over the world.
|
||||||
|
### Glorious Leader
|
||||||
|
[]
|
||||||
|
(https://github.com/gmcferrin)
|
||||||
|
|
||||||
|
### Developers
|
||||||
|
[]
|
||||||
|
(https://github.com/bm01)
|
||||||
|
[]
|
||||||
|
(https://github.com/Glitchfinder)
|
||||||
|
[]
|
||||||
|
(https://github.com/nossr50)
|
||||||
|
[]
|
||||||
|
(https://github.com/NuclearW)
|
||||||
|
[]
|
||||||
|
(https://github.com/shatteredbeam)
|
||||||
|
[]
|
||||||
|
(https://github.com/TfT-02)
|
||||||
|
[]
|
||||||
|
(https://github.com/t00thpick1)
|
||||||
|
|
||||||
|
## Compiling
|
||||||
|
|
||||||
|
mcMMO uses Maven 3 to manage dependancies, packaging, and shading of necessary classes; Maven 3 is required to compile mcMMO.
|
||||||
|
|
||||||
|
The typical command used to build mcMMO is: mvn clean package install
|
||||||
|
|
||||||
|
Required Libraries:
|
||||||
|
* Spout API
|
||||||
|
* JUnit
|
||||||
|
* Metrics
|
||||||
|
* Bukkit
|
||||||
|
|
||||||
|
http://dev.bukkit.org/server-mods/mcmmo for more up to date information.
|
||||||
73
extras/repair.chain.yml
Normal file
73
extras/repair.chain.yml
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
#
|
||||||
|
# Any file named repair.*.yml in the mcmmmo folder will be loaded as a repair config
|
||||||
|
# All repair configs have a main section titled "Repairables"
|
||||||
|
# Afterwards, all sub-items are considered a Repairable to be loaded
|
||||||
|
# The bare minimum of a Repairable is that it have an ItemId, a RepairMaterialId, and a MaximumDurability
|
||||||
|
#
|
||||||
|
# ItemId: This is the id of the item to be repairable.
|
||||||
|
## This is required to be set.
|
||||||
|
#
|
||||||
|
# ItemType: This is the type of item to be repaired, this is only important to permissions.
|
||||||
|
## Valid values are ARMOR, TOOL, and OTHER.
|
||||||
|
## This defaults to OTHER.
|
||||||
|
#
|
||||||
|
# MaterialType: This is the type of the material of the item to be repaired, this is only important for permissions.
|
||||||
|
## Valid values are STRING, LEATHER, WOOD, STONE, IRON, GOLD, DIAMOND, and OTHER
|
||||||
|
## This defaults to OTHER.
|
||||||
|
#
|
||||||
|
# RepairMaterialId: This is the id of the item used to repair this repairable.
|
||||||
|
## This is required to be set.
|
||||||
|
#
|
||||||
|
# RepairMaterialMetadata: This is the metadata of the item used to repair this repairable.
|
||||||
|
## A value of -1 means to ignore all metadata when repairing.
|
||||||
|
## This defaults to -1
|
||||||
|
#
|
||||||
|
# MaximumDurability: This is the maximum durability of the item.
|
||||||
|
## This is required to be set.
|
||||||
|
#
|
||||||
|
# MinimumLevel: This is the minimum repair level needed to repair this item.
|
||||||
|
## Valid values are > 0
|
||||||
|
## This defaults to 0
|
||||||
|
#
|
||||||
|
# MinimumQuantity: This is the minimum number of items needed to repair this item ignoring all other repair bonuses.
|
||||||
|
## This is typically the number of the repair material needed to create a new item, for example for a sword it is 2, for an axe it is 3
|
||||||
|
## This defaults to 2
|
||||||
|
#
|
||||||
|
# XpMultiplier: This is the amount to multiply the xp bonus by.
|
||||||
|
## This defaults to 1
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# The following is an example of a repair.*.yml config which adds the ability to repair Chainmail armor using fire.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
###
|
||||||
|
Repairables:
|
||||||
|
ChainHelmet:
|
||||||
|
ItemId: 302
|
||||||
|
ItemType: ARMOR
|
||||||
|
RepairMaterialId: 51
|
||||||
|
MaximumDurability: 165
|
||||||
|
MinimumQuantity: 5
|
||||||
|
XpMultiplier: 2
|
||||||
|
ChainChest:
|
||||||
|
ItemId: 303
|
||||||
|
ItemType: ARMOR
|
||||||
|
RepairMaterialId: 51
|
||||||
|
MaximumDurability: 240
|
||||||
|
MinimumQuantity: 8
|
||||||
|
XpMultiplier: 2
|
||||||
|
ChainLegs:
|
||||||
|
ItemId: 304
|
||||||
|
ItemType: ARMOR
|
||||||
|
RepairMaterialId: 51
|
||||||
|
MaximumDurability: 225
|
||||||
|
MinimumQuantity: 7
|
||||||
|
XpMultiplier: 2
|
||||||
|
ChainBoots:
|
||||||
|
ItemId: 305
|
||||||
|
ItemType: ARMOR
|
||||||
|
RepairMaterialId: 51
|
||||||
|
RepairMaterialMetadata: -1
|
||||||
|
MaximumDurability: 195
|
||||||
|
MinimumQuantity: 4
|
||||||
|
XpMultiplier: 2
|
||||||
319
pom.xml
Normal file → Executable file
319
pom.xml
Normal file → Executable file
@@ -1,135 +1,184 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
||||||
<artifactId>mcMMO</artifactId>
|
<artifactId>mcMMO</artifactId>
|
||||||
<version>1.3.05</version>
|
<version>1.4.06-dev6</version>
|
||||||
<name>mcMMO</name>
|
<name>mcMMO</name>
|
||||||
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
||||||
<issueManagement>
|
<issueManagement>
|
||||||
<url>http://issues.mcmmo.org</url>
|
<url>https://github.com/mcMMO-Dev/mcMMO/issues</url>
|
||||||
<system>JIRA</system>
|
<system>GitHub</system>
|
||||||
</issueManagement>
|
</issueManagement>
|
||||||
<build>
|
<build>
|
||||||
<finalName>mcMMO</finalName>
|
<finalName>mcMMO</finalName>
|
||||||
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
|
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
|
||||||
<resources>
|
<resources>
|
||||||
<resource>
|
<resource>
|
||||||
<targetPath>.</targetPath>
|
<targetPath>.</targetPath>
|
||||||
<filtering>true</filtering>
|
<filtering>true</filtering>
|
||||||
<directory>${basedir}/src/main/resources/</directory>
|
<directory>${basedir}/src/main/resources/</directory>
|
||||||
<includes>
|
<includes>
|
||||||
<include>*.yml</include>
|
<include>*.yml</include>
|
||||||
</includes>
|
<include>.jenkins</include>
|
||||||
</resource>
|
</includes>
|
||||||
<resource>
|
</resource>
|
||||||
<targetPath>resources</targetPath>
|
<resource>
|
||||||
<filtering>false</filtering>
|
<targetPath>resources</targetPath>
|
||||||
<directory>${basedir}/src/main/resources/xpbar/</directory>
|
<filtering>false</filtering>
|
||||||
<includes>
|
<directory>${basedir}/src/main/resources/xpbar/</directory>
|
||||||
<include>xpbar*.png</include>
|
<includes>
|
||||||
</includes>
|
<include>xpbar*.png</include>
|
||||||
</resource>
|
</includes>
|
||||||
<resource>
|
</resource>
|
||||||
<targetPath>resources</targetPath>
|
<resource>
|
||||||
<filtering>false</filtering>
|
<targetPath>resources</targetPath>
|
||||||
<directory>${basedir}/src/main/resources/healthbar/</directory>
|
<filtering>false</filtering>
|
||||||
<includes>
|
<directory>${basedir}/src/main/resources/healthbar/</directory>
|
||||||
<include>health*.png</include>
|
<includes>
|
||||||
</includes>
|
<include>health*.png</include>
|
||||||
</resource>
|
</includes>
|
||||||
<resource>
|
</resource>
|
||||||
<targetPath>resources</targetPath>
|
<resource>
|
||||||
<filtering>false</filtering>
|
<targetPath>resources</targetPath>
|
||||||
<directory>${basedir}/src/main/resources/skillicon/</directory>
|
<filtering>false</filtering>
|
||||||
<includes>
|
<directory>${basedir}/src/main/resources/skillicon/</directory>
|
||||||
<include>*.png</include>
|
<includes>
|
||||||
</includes>
|
<include>*.png</include>
|
||||||
</resource>
|
</includes>
|
||||||
<resource>
|
</resource>
|
||||||
<targetPath>resources</targetPath>
|
<resource>
|
||||||
<filtering>false</filtering>
|
<targetPath>resources</targetPath>
|
||||||
<directory>${basedir}/src/main/resources/sound/</directory>
|
<filtering>false</filtering>
|
||||||
<includes>
|
<directory>${basedir}/src/main/resources/sound/</directory>
|
||||||
<include>*.wav</include>
|
<includes>
|
||||||
</includes>
|
<include>*.wav</include>
|
||||||
</resource>
|
</includes>
|
||||||
<resource>
|
</resource>
|
||||||
<targetPath>com/gmail/nossr50/locale</targetPath>
|
<resource>
|
||||||
<filtering>true</filtering>
|
<targetPath>com/gmail/nossr50/locale</targetPath>
|
||||||
<directory>${basedir}/src/main/resources/locale/</directory>
|
<filtering>true</filtering>
|
||||||
<includes>
|
<directory>${basedir}/src/main/resources/locale/</directory>
|
||||||
<include>locale*.properties</include>
|
<includes>
|
||||||
</includes>
|
<include>locale*.properties</include>
|
||||||
</resource>
|
</includes>
|
||||||
</resources>
|
</resource>
|
||||||
<plugins>
|
</resources>
|
||||||
<plugin>
|
<plugins>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<plugin>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<version>2.3.2</version>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<configuration>
|
<version>2.3.2</version>
|
||||||
<source>1.6</source>
|
<configuration>
|
||||||
<target>1.6</target>
|
<source>1.6</source>
|
||||||
<excludes>
|
<target>1.6</target>
|
||||||
</excludes>
|
<excludes>
|
||||||
</configuration>
|
</excludes>
|
||||||
</plugin>
|
</configuration>
|
||||||
<plugin>
|
</plugin>
|
||||||
<artifactId>maven-assembly-plugin</artifactId>
|
<plugin>
|
||||||
<configuration>
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
<descriptors>
|
<configuration>
|
||||||
<descriptor>src/main/assembly/package.xml</descriptor>
|
<descriptors>
|
||||||
</descriptors>
|
<descriptor>src/main/assembly/package.xml</descriptor>
|
||||||
</configuration>
|
</descriptors>
|
||||||
<executions>
|
</configuration>
|
||||||
<execution>
|
<executions>
|
||||||
<id>build</id>
|
<execution>
|
||||||
<phase>package</phase>
|
<id>build</id>
|
||||||
<goals>
|
<phase>package</phase>
|
||||||
<goal>single</goal>
|
<goals>
|
||||||
</goals>
|
<goal>single</goal>
|
||||||
</execution>
|
</goals>
|
||||||
</executions>
|
</execution>
|
||||||
</plugin>
|
</executions>
|
||||||
</plugins>
|
</plugin>
|
||||||
</build>
|
<plugin>
|
||||||
<repositories>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<repository>
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
<snapshots>
|
<version>1.5</version>
|
||||||
<enabled>true</enabled>
|
<configuration>
|
||||||
<updatePolicy>always</updatePolicy>
|
<artifactSet>
|
||||||
<checksumPolicy>fail</checksumPolicy>
|
<includes>
|
||||||
</snapshots>
|
<include>com.turt2live.metrics:MetricsExtension</include>
|
||||||
<id>bukkit-repo</id>
|
</includes>
|
||||||
<url>http://repo.bukkit.org/content/groups/public/</url>
|
</artifactSet>
|
||||||
</repository>
|
<relocations>
|
||||||
<repository>
|
<relocation>
|
||||||
<snapshots>
|
<pattern>com.turt2live.metrics</pattern>
|
||||||
<enabled>true</enabled>
|
<shadedPattern>com.gmail.nossr50.metrics.mcstats</shadedPattern>
|
||||||
<updatePolicy>always</updatePolicy>
|
</relocation>
|
||||||
<checksumPolicy>fail</checksumPolicy>
|
</relocations>
|
||||||
</snapshots>
|
</configuration>
|
||||||
<id>spout-repo</id>
|
<executions>
|
||||||
<url>http://nexus.spout.org/content/groups/public/</url>
|
<execution>
|
||||||
</repository>
|
<phase>package</phase>
|
||||||
</repositories>
|
<goals>
|
||||||
<dependencies>
|
<goal>shade</goal>
|
||||||
<dependency>
|
</goals>
|
||||||
<groupId>org.bukkit</groupId>
|
</execution>
|
||||||
<artifactId>bukkit</artifactId>
|
</executions>
|
||||||
<version>LATEST</version>
|
</plugin>
|
||||||
<type>jar</type>
|
</plugins>
|
||||||
<scope>compile</scope>
|
<extensions>
|
||||||
</dependency>
|
<extension>
|
||||||
<dependency>
|
<groupId>org.apache.maven.wagon</groupId>
|
||||||
<groupId>org.getspout</groupId>
|
<artifactId>wagon-file</artifactId>
|
||||||
<artifactId>spoutpluginapi</artifactId>
|
<version>2.2</version>
|
||||||
<version>dev-SNAPSHOT</version>
|
</extension>
|
||||||
<type>jar</type>
|
</extensions>
|
||||||
<scope>compile</scope>
|
</build>
|
||||||
</dependency>
|
<repositories>
|
||||||
</dependencies>
|
<repository>
|
||||||
<properties>
|
<id>bukkit-repo</id>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<url>http://repo.bukkit.org/content/groups/public/</url>
|
||||||
</properties>
|
</repository>
|
||||||
</project>
|
<repository>
|
||||||
|
<id>spout-repo</id>
|
||||||
|
<url>http://nexus.spout.org/content/groups/public/</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>Plugin MetricsExtension</id>
|
||||||
|
<url>http://repo.turt2live.com</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bukkit</groupId>
|
||||||
|
<artifactId>bukkit</artifactId>
|
||||||
|
<version>LATEST</version>
|
||||||
|
<type>jar</type>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.getspout</groupId>
|
||||||
|
<artifactId>spoutplugin</artifactId>
|
||||||
|
<version>LATEST</version>
|
||||||
|
<type>jar</type>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit-dep</artifactId>
|
||||||
|
<version>4.10</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.turt2live.metrics</groupId>
|
||||||
|
<artifactId>MetricsExtension</artifactId>
|
||||||
|
<version>0.0.4-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<distributionManagement>
|
||||||
|
<repository>
|
||||||
|
<id>mcmmo-repo</id>
|
||||||
|
<url>file:///var/lib/jenkins/repo</url>
|
||||||
|
</repository>
|
||||||
|
</distributionManagement>
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
<ciManagement>
|
||||||
|
<system>Jenkins</system>
|
||||||
|
<url>ci.mcmmo.org</url>
|
||||||
|
</ciManagement>
|
||||||
|
</project>
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
||||||
<id>bin</id>
|
<id>bin</id>
|
||||||
<includeBaseDirectory>false</includeBaseDirectory>
|
<includeBaseDirectory>false</includeBaseDirectory>
|
||||||
<formats>
|
<formats>
|
||||||
<format>zip</format>
|
<format>zip</format>
|
||||||
</formats>
|
</formats>
|
||||||
<files>
|
<files>
|
||||||
<file>
|
<file>
|
||||||
<source>${project.build.directory}/${artifactId}.jar</source>
|
<source>${project.build.directory}/${artifactId}.jar</source>
|
||||||
<outputDirectory>/</outputDirectory>
|
<outputDirectory>/</outputDirectory>
|
||||||
<destName>mcMMO.jar</destName>
|
<destName>mcMMO.jar</destName>
|
||||||
</file>
|
</file>
|
||||||
</files>
|
</files>
|
||||||
</assembly>
|
</assembly>
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
package com.gmail.nossr50;
|
|
||||||
|
|
||||||
import org.bukkit.Material;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
|
|
||||||
public class BlockChecks {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if a block type awards XP.
|
|
||||||
*
|
|
||||||
* @param material The type of Block to check
|
|
||||||
* @return true if the block type awards XP, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean shouldBeWatched(Material material) {
|
|
||||||
switch (material) {
|
|
||||||
case BROWN_MUSHROOM:
|
|
||||||
case CACTUS:
|
|
||||||
case CLAY:
|
|
||||||
case COAL_ORE:
|
|
||||||
case DIAMOND_ORE:
|
|
||||||
case DIRT:
|
|
||||||
case ENDER_STONE:
|
|
||||||
case GLOWING_REDSTONE_ORE:
|
|
||||||
case GLOWSTONE:
|
|
||||||
case GOLD_ORE:
|
|
||||||
case GRASS:
|
|
||||||
case GRAVEL:
|
|
||||||
case IRON_ORE:
|
|
||||||
case JACK_O_LANTERN:
|
|
||||||
case LAPIS_ORE:
|
|
||||||
case LOG:
|
|
||||||
case MELON_BLOCK:
|
|
||||||
case MOSSY_COBBLESTONE:
|
|
||||||
case MYCEL:
|
|
||||||
case NETHERRACK:
|
|
||||||
case OBSIDIAN:
|
|
||||||
case PUMPKIN:
|
|
||||||
case RED_MUSHROOM:
|
|
||||||
case RED_ROSE:
|
|
||||||
case REDSTONE_ORE:
|
|
||||||
case SAND:
|
|
||||||
case SANDSTONE:
|
|
||||||
case SOUL_SAND:
|
|
||||||
case STONE:
|
|
||||||
case SUGAR_CANE_BLOCK:
|
|
||||||
case VINE:
|
|
||||||
case WATER_LILY:
|
|
||||||
case YELLOW_FLOWER:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if a block should allow for the activation of abilities.
|
|
||||||
*
|
|
||||||
* @param material The type of Block to check
|
|
||||||
* @return true if the block should allow ability activation, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean abilityBlockCheck(Material material) {
|
|
||||||
switch (material) {
|
|
||||||
case BED_BLOCK:
|
|
||||||
case BREWING_STAND:
|
|
||||||
case BOOKSHELF:
|
|
||||||
case BURNING_FURNACE:
|
|
||||||
case CAKE_BLOCK:
|
|
||||||
case CHEST:
|
|
||||||
case DISPENSER:
|
|
||||||
case ENCHANTMENT_TABLE:
|
|
||||||
case FENCE_GATE:
|
|
||||||
case FURNACE:
|
|
||||||
case IRON_DOOR_BLOCK:
|
|
||||||
case JUKEBOX:
|
|
||||||
case LEVER:
|
|
||||||
case NOTE_BLOCK:
|
|
||||||
case STONE_BUTTON:
|
|
||||||
case TRAP_DOOR:
|
|
||||||
case WALL_SIGN:
|
|
||||||
case WOODEN_DOOR:
|
|
||||||
case WORKBENCH:
|
|
||||||
return false;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Material.getMaterial(LoadProperties.anvilID).equals(material)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if a block type is an ore.
|
|
||||||
*
|
|
||||||
* @param material The type of Block to check
|
|
||||||
* @return true if the Block is an ore, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isOre(Material material) {
|
|
||||||
switch (material) {
|
|
||||||
case COAL_ORE:
|
|
||||||
case DIAMOND_ORE:
|
|
||||||
case GLOWING_REDSTONE_ORE:
|
|
||||||
case GOLD_ORE:
|
|
||||||
case IRON_ORE:
|
|
||||||
case LAPIS_ORE:
|
|
||||||
case REDSTONE_ORE:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,482 +0,0 @@
|
|||||||
package com.gmail.nossr50;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.AnimalTamer;
|
|
||||||
import org.bukkit.entity.Animals;
|
|
||||||
import org.bukkit.entity.Arrow;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.entity.Wolf;
|
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.datatypes.AbilityType;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
|
||||||
import com.gmail.nossr50.datatypes.ToolType;
|
|
||||||
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
|
|
||||||
import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.party.Party;
|
|
||||||
import com.gmail.nossr50.runnables.GainXp;
|
|
||||||
import com.gmail.nossr50.runnables.mcBleedTimer;
|
|
||||||
import com.gmail.nossr50.skills.Acrobatics;
|
|
||||||
import com.gmail.nossr50.skills.Archery;
|
|
||||||
import com.gmail.nossr50.skills.Axes;
|
|
||||||
import com.gmail.nossr50.skills.Skills;
|
|
||||||
import com.gmail.nossr50.skills.Swords;
|
|
||||||
import com.gmail.nossr50.skills.Taming;
|
|
||||||
import com.gmail.nossr50.skills.Unarmed;
|
|
||||||
|
|
||||||
public class Combat {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Apply combat modifiers and process and XP gain.
|
|
||||||
*
|
|
||||||
* @param event The event to run the combat checks on.
|
|
||||||
* @param plugin mcMMO plugin instance
|
|
||||||
*/
|
|
||||||
public static void combatChecks(EntityDamageByEntityEvent event, mcMMO plugin) {
|
|
||||||
if (event.getDamage() == 0 || event.getEntity().isDead()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity damager = event.getDamager();
|
|
||||||
LivingEntity target = (LivingEntity) event.getEntity();
|
|
||||||
EntityType damagerType = damager.getType();
|
|
||||||
EntityType targetType = target.getType();
|
|
||||||
|
|
||||||
switch (damagerType) {
|
|
||||||
case PLAYER:
|
|
||||||
Player attacker = (Player) event.getDamager();
|
|
||||||
ItemStack itemInHand = attacker.getItemInHand();
|
|
||||||
PlayerProfile PPa = Users.getProfile(attacker);
|
|
||||||
|
|
||||||
combatAbilityChecks(attacker);
|
|
||||||
|
|
||||||
if (ItemChecks.isSword(itemInHand) && mcPermissions.getInstance().swords(attacker)) {
|
|
||||||
if (!mcBleedTimer.contains(target) && mcPermissions.getInstance().swordsBleed(attacker)) {
|
|
||||||
Swords.bleedCheck(attacker, target, plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PPa.getAbilityMode(AbilityType.SERRATED_STRIKES) && mcPermissions.getInstance().serratedStrikes(attacker)) {
|
|
||||||
applyAbilityAoE(attacker, target, event.getDamage(), plugin, SkillType.SWORDS);
|
|
||||||
}
|
|
||||||
|
|
||||||
startGainXp(attacker, PPa, target, SkillType.SWORDS, plugin);
|
|
||||||
}
|
|
||||||
else if (ItemChecks.isAxe(itemInHand) && mcPermissions.getInstance().axes(attacker)) {
|
|
||||||
if (mcPermissions.getInstance().axeBonus(attacker)) {
|
|
||||||
Axes.axesBonus(attacker, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().criticalHit(attacker)) {
|
|
||||||
Axes.axeCriticalCheck(attacker, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().impact(attacker)) {
|
|
||||||
Axes.impact(attacker, target, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PPa.getAbilityMode(AbilityType.SKULL_SPLIITER) && mcPermissions.getInstance().skullSplitter(attacker)) {
|
|
||||||
applyAbilityAoE(attacker, target, event.getDamage(), plugin, SkillType.AXES);
|
|
||||||
}
|
|
||||||
|
|
||||||
startGainXp(attacker, PPa, target, SkillType.AXES, plugin);
|
|
||||||
}
|
|
||||||
else if (itemInHand.getType().equals(Material.AIR) && mcPermissions.getInstance().unarmed(attacker)) {
|
|
||||||
if (mcPermissions.getInstance().unarmedBonus(attacker)) {
|
|
||||||
Unarmed.unarmedBonus(PPa, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PPa.getAbilityMode(AbilityType.BERSERK) && mcPermissions.getInstance().berserk(attacker)) {
|
|
||||||
event.setDamage((int) (event.getDamage() * 1.5));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (targetType.equals(EntityType.PLAYER) && mcPermissions.getInstance().disarm(attacker)) {
|
|
||||||
Unarmed.disarmProcCheck(PPa, (Player) target);
|
|
||||||
}
|
|
||||||
|
|
||||||
startGainXp(attacker, PPa, target, SkillType.UNARMED, plugin);
|
|
||||||
}
|
|
||||||
else if (itemInHand.getType().equals(Material.BONE) && mcPermissions.getInstance().beastLore(attacker)) {
|
|
||||||
Taming.beastLore(event, target, attacker);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WOLF:
|
|
||||||
Wolf wolf = (Wolf) damager;
|
|
||||||
|
|
||||||
if (wolf.isTamed() && wolf.getOwner() instanceof Player) {
|
|
||||||
Player master = (Player) wolf.getOwner();
|
|
||||||
PlayerProfile PPo = Users.getProfile(master);
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().taming(master)) {
|
|
||||||
if (mcPermissions.getInstance().fastFoodService(master)) {
|
|
||||||
Taming.fastFoodService(PPo, wolf, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().sharpenedclaws(master)) {
|
|
||||||
Taming.sharpenedClaws(PPo, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().gore(master)) {
|
|
||||||
Taming.gore(PPo, event, master, plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
startGainXp(master, PPo, target, SkillType.TAMING, plugin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ARROW:
|
|
||||||
archeryCheck((EntityDamageByEntityEvent) event, plugin);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (targetType.equals(EntityType.PLAYER)) {
|
|
||||||
Swords.counterAttackChecks(event);
|
|
||||||
Acrobatics.dodgeChecks(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Process combat abilities based on weapon preparation modes.
|
|
||||||
*
|
|
||||||
* @param attacker The player attacking
|
|
||||||
*/
|
|
||||||
public static void combatAbilityChecks(Player attacker) {
|
|
||||||
PlayerProfile PPa = Users.getProfile(attacker);
|
|
||||||
|
|
||||||
if (PPa.getToolPreparationMode(ToolType.AXE)) {
|
|
||||||
Skills.abilityCheck(attacker, SkillType.AXES);
|
|
||||||
}
|
|
||||||
else if (PPa.getToolPreparationMode(ToolType.SWORD)) {
|
|
||||||
Skills.abilityCheck(attacker, SkillType.SWORDS);
|
|
||||||
}
|
|
||||||
else if (PPa.getToolPreparationMode(ToolType.FISTS)) {
|
|
||||||
Skills.abilityCheck(attacker, SkillType.UNARMED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Process archery abilities.
|
|
||||||
*
|
|
||||||
* @param event The event to run the archery checks on.
|
|
||||||
* @param pluginx mcMMO plugin instance
|
|
||||||
*/
|
|
||||||
public static void archeryCheck(EntityDamageByEntityEvent event, mcMMO pluginx) {
|
|
||||||
Arrow arrow = (Arrow) event.getDamager();
|
|
||||||
LivingEntity shooter = arrow.getShooter();
|
|
||||||
LivingEntity target = (LivingEntity) event.getEntity();
|
|
||||||
|
|
||||||
if (target instanceof Player) {
|
|
||||||
Player defender = (Player) target;
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().unarmed(defender) && defender.getItemInHand().getType().equals(Material.AIR)) {
|
|
||||||
Unarmed.deflectCheck(defender, event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (shooter instanceof Player) {
|
|
||||||
Player attacker = (Player) shooter;
|
|
||||||
PlayerProfile PPa = Users.getProfile(attacker);
|
|
||||||
int damage = event.getDamage();
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().archery(attacker) && damage > 0) {
|
|
||||||
|
|
||||||
/*Archery needs a damage bonus to be viable in PVP*/
|
|
||||||
int skillLvl = Users.getProfile(attacker).getSkillLevel(SkillType.ARCHERY);
|
|
||||||
double dmgBonusPercent = ((skillLvl / 50) * 0.1D);
|
|
||||||
|
|
||||||
/* Cap maximum bonus at 200% */
|
|
||||||
if(dmgBonusPercent > 2)
|
|
||||||
dmgBonusPercent = 2;
|
|
||||||
|
|
||||||
/* Every 100 skill levels Archery gains 20% damage bonus, set that here */
|
|
||||||
//TODO: Work in progress for balancing out Archery, will work on it more later...
|
|
||||||
//System.out.println("DEBUG 0: "+event.getDamage());
|
|
||||||
int archeryBonus = (int)(event.getDamage() * dmgBonusPercent);
|
|
||||||
event.setDamage(event.getDamage() + archeryBonus);
|
|
||||||
//System.out.println("DEBUG 1: "+event.getDamage());
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().trackArrows(attacker)) {
|
|
||||||
Archery.trackArrows(pluginx, target, PPa);
|
|
||||||
}
|
|
||||||
|
|
||||||
startGainXp(attacker, PPa, target, SkillType.ARCHERY, pluginx);
|
|
||||||
|
|
||||||
if (target instanceof Player) {
|
|
||||||
Player defender = (Player) target;
|
|
||||||
PlayerProfile PPd = Users.getProfile(defender);
|
|
||||||
|
|
||||||
if (PPa.inParty() && PPd.inParty() && Party.getInstance().inSameParty(defender, attacker)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Archery.dazeCheck(defender, attacker);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to damage target for value dmg with reason CUSTOM
|
|
||||||
*
|
|
||||||
* @param target LivingEntity which to attempt to damage
|
|
||||||
* @param dmg Amount of damage to attempt to do
|
|
||||||
*/
|
|
||||||
public static void dealDamage(LivingEntity target, int dmg) {
|
|
||||||
dealDamage(target, dmg, EntityDamageEvent.DamageCause.CUSTOM);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to damage target for value dmg with reason cause
|
|
||||||
*
|
|
||||||
* @param target LivingEntity which to attempt to damage
|
|
||||||
* @param dmg Amount of damage to attempt to do
|
|
||||||
* @param cause DamageCause to pass to damage event
|
|
||||||
*/
|
|
||||||
private static void dealDamage(LivingEntity target, int dmg, DamageCause cause) {
|
|
||||||
if (LoadProperties.eventCallback) {
|
|
||||||
EntityDamageEvent ede = (EntityDamageEvent) new FakeEntityDamageEvent(target, cause, dmg);
|
|
||||||
Bukkit.getPluginManager().callEvent(ede);
|
|
||||||
|
|
||||||
if (ede.isCancelled()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
target.damage(ede.getDamage());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
target.damage(dmg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to damage target for value dmg with reason ENTITY_ATTACK with damager attacker
|
|
||||||
*
|
|
||||||
* @param target LivingEntity which to attempt to damage
|
|
||||||
* @param dmg Amount of damage to attempt to do
|
|
||||||
* @param attacker Player to pass to event as damager
|
|
||||||
*/
|
|
||||||
private static void dealDamage(LivingEntity target, int dmg, Player attacker) {
|
|
||||||
if (LoadProperties.eventCallback) {
|
|
||||||
EntityDamageEvent ede = (EntityDamageByEntityEvent) new FakeEntityDamageByEntityEvent(attacker, target, EntityDamageEvent.DamageCause.ENTITY_ATTACK, dmg);
|
|
||||||
Bukkit.getPluginManager().callEvent(ede);
|
|
||||||
|
|
||||||
if (ede.isCancelled()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
target.damage(ede.getDamage());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
target.damage(dmg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Apply Area-of-Effect ability actions.
|
|
||||||
*
|
|
||||||
* @param attacker The attacking player
|
|
||||||
* @param target The defending entity
|
|
||||||
* @param damage The initial damage amount
|
|
||||||
* @param plugin mcMMO plugin instance
|
|
||||||
* @param type The type of skill being used
|
|
||||||
*/
|
|
||||||
private static void applyAbilityAoE(Player attacker, LivingEntity target, int damage, mcMMO plugin, SkillType type) {
|
|
||||||
int numberOfTargets = m.getTier(attacker.getItemInHand()); //The higher the weapon tier, the more targets you hit
|
|
||||||
int damageAmount = 0;
|
|
||||||
|
|
||||||
if (type.equals(SkillType.AXES)) {
|
|
||||||
damageAmount = damage / 2;
|
|
||||||
}
|
|
||||||
else if (type.equals(SkillType.SWORDS)) {
|
|
||||||
damageAmount = damage / 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (damageAmount < 1) {
|
|
||||||
damageAmount = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Entity entity : target.getNearbyEntities(2.5, 2.5, 2.5)) {
|
|
||||||
EntityType entityType = entity.getType();
|
|
||||||
|
|
||||||
if (entityType.equals(EntityType.WOLF)) {
|
|
||||||
Wolf wolf = (Wolf) entity;
|
|
||||||
AnimalTamer tamer = wolf.getOwner();
|
|
||||||
|
|
||||||
if (tamer instanceof Player) {
|
|
||||||
Player owner = (Player) tamer;
|
|
||||||
|
|
||||||
if (owner.equals(attacker) || Party.getInstance().inSameParty(attacker, owner)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entity instanceof LivingEntity && numberOfTargets >= 1) {
|
|
||||||
if (entityType.equals(EntityType.PLAYER)) {
|
|
||||||
Player defender = (Player) entity;
|
|
||||||
PlayerProfile PP = Users.getProfile(defender);
|
|
||||||
|
|
||||||
//Reasons why the target shouldn't be hit
|
|
||||||
if (PP.getGodMode()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (defender.getName().equals(attacker.getName())) { //Is this even possible?
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Party.getInstance().inSameParty(attacker, defender)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (defender.isDead()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Apply effect to players only if PVP is enabled
|
|
||||||
if (target.getWorld().getPVP()) {
|
|
||||||
String message = "";
|
|
||||||
|
|
||||||
if (type.equals(SkillType.AXES)) {
|
|
||||||
message = mcLocale.getString("Axes.HitByCleave");
|
|
||||||
}
|
|
||||||
else if (type.equals(SkillType.SWORDS)) {
|
|
||||||
message = mcLocale.getString("Swords.HitBySerratedStrikes");
|
|
||||||
}
|
|
||||||
|
|
||||||
dealDamage(defender, damageAmount, attacker);
|
|
||||||
defender.sendMessage(message);
|
|
||||||
|
|
||||||
if (type.equals(SkillType.SWORDS)) {
|
|
||||||
PP.addBleedTicks(5);
|
|
||||||
}
|
|
||||||
|
|
||||||
numberOfTargets--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
LivingEntity livingEntity = (LivingEntity) entity;
|
|
||||||
|
|
||||||
if (type.equals(SkillType.SWORDS)) {
|
|
||||||
mcBleedTimer.add(livingEntity);
|
|
||||||
}
|
|
||||||
|
|
||||||
dealDamage(livingEntity, damageAmount, attacker);
|
|
||||||
numberOfTargets--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start the task that gives combat XP.
|
|
||||||
*
|
|
||||||
* @param attacker The attacking player
|
|
||||||
* @param PP The player's PlayerProfile
|
|
||||||
* @param target The defending entity
|
|
||||||
* @param skillType The skill being used
|
|
||||||
* @param plugin mcMMO plugin instance
|
|
||||||
*/
|
|
||||||
public static void startGainXp(Player attacker, PlayerProfile PP, LivingEntity target, SkillType skillType, mcMMO pluginx) {
|
|
||||||
double baseXP = 0;
|
|
||||||
|
|
||||||
if (target instanceof Player) {
|
|
||||||
if (!LoadProperties.pvpxp) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player defender = (Player) target;
|
|
||||||
PlayerProfile PPd = Users.getProfile(defender);
|
|
||||||
|
|
||||||
if (System.currentTimeMillis() >= (PPd.getRespawnATS() * 1000) + 5000 && ((PPd.getLastLogin() + 5) * 1000) < System.currentTimeMillis() && defender.getHealth() >= 1) {
|
|
||||||
baseXP = 20 * LoadProperties.pvpxprewardmodifier;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!target.hasMetadata("mcmmoFromMobSpawner")) {
|
|
||||||
if (target instanceof Animals && !target.hasMetadata("mcmmoSummoned")) {
|
|
||||||
baseXP = LoadProperties.animalXP;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
EntityType type = target.getType();
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case BLAZE:
|
|
||||||
baseXP = LoadProperties.blazeXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CAVE_SPIDER:
|
|
||||||
baseXP = LoadProperties.cavespiderXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CREEPER:
|
|
||||||
baseXP = LoadProperties.creeperXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ENDER_DRAGON:
|
|
||||||
baseXP = LoadProperties.enderdragonXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ENDERMAN:
|
|
||||||
baseXP = LoadProperties.endermanXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GHAST:
|
|
||||||
baseXP = LoadProperties.ghastXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MAGMA_CUBE:
|
|
||||||
baseXP = LoadProperties.magmacubeXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PIG_ZOMBIE:
|
|
||||||
baseXP = LoadProperties.pigzombieXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SILVERFISH:
|
|
||||||
baseXP = LoadProperties.silverfishXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SKELETON:
|
|
||||||
baseXP = LoadProperties.skeletonXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SLIME:
|
|
||||||
baseXP = LoadProperties.slimeXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SPIDER:
|
|
||||||
baseXP = LoadProperties.spiderXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ZOMBIE:
|
|
||||||
baseXP = LoadProperties.zombieXP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
baseXP *= 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (baseXP != 0) {
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(pluginx, new GainXp(attacker, PP, skillType, baseXP, target), 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,313 +0,0 @@
|
|||||||
package com.gmail.nossr50;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.DriverManager;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.datatypes.DatabaseUpdate;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
|
|
||||||
public class Database {
|
|
||||||
|
|
||||||
private String connectionString = "jdbc:mysql://" + LoadProperties.MySQLserverName + ":" + LoadProperties.MySQLport + "/" + LoadProperties.MySQLdbName + "?user=" + LoadProperties.MySQLuserName + "&password=" + LoadProperties.MySQLdbPass;
|
|
||||||
private Connection conn = null;
|
|
||||||
private mcMMO plugin = null;
|
|
||||||
private long reconnectTimestamp = 0;
|
|
||||||
|
|
||||||
public Database(mcMMO instance) {
|
|
||||||
plugin = instance;
|
|
||||||
connect(); //Connect to MySQL
|
|
||||||
|
|
||||||
// Load the driver instance
|
|
||||||
try {
|
|
||||||
Class.forName("com.mysql.jdbc.Driver");
|
|
||||||
DriverManager.getConnection(connectionString);
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException e) {
|
|
||||||
Bukkit.getLogger().warning(e.getLocalizedMessage());
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
Bukkit.getLogger().warning(ex.getLocalizedMessage());
|
|
||||||
printErrors(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to connect to the mySQL database.
|
|
||||||
*/
|
|
||||||
public void connect() {
|
|
||||||
try {
|
|
||||||
System.out.println("[mcMMO] Attempting connection to MySQL...");
|
|
||||||
Properties conProperties = new Properties();
|
|
||||||
conProperties.put("autoReconnect", "false");
|
|
||||||
conProperties.put("maxReconnects", "0");
|
|
||||||
conn = DriverManager.getConnection(connectionString, conProperties);
|
|
||||||
System.out.println("[mcMMO] Connection to MySQL was a success!");
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
System.out.println("[mcMMO] Connection to MySQL failed!");
|
|
||||||
ex.printStackTrace();
|
|
||||||
printErrors(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to create the database structure.
|
|
||||||
*/
|
|
||||||
public void createStructure() {
|
|
||||||
write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "huds` (`user_id` int(10) unsigned NOT NULL,"
|
|
||||||
+ "`hudtype` varchar(50) NOT NULL DEFAULT '',"
|
|
||||||
+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
|
||||||
write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,"
|
|
||||||
+ "`user` varchar(40) NOT NULL,"
|
|
||||||
+ "`lastlogin` int(32) unsigned NOT NULL,"
|
|
||||||
+ "`party` varchar(100) NOT NULL DEFAULT '',"
|
|
||||||
+ "PRIMARY KEY (`id`),"
|
|
||||||
+ "UNIQUE KEY `user` (`user`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;");
|
|
||||||
write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "cooldowns` (`user_id` int(10) unsigned NOT NULL,"
|
|
||||||
+ "`taming` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`mining` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`woodcutting` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`repair` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`unarmed` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`herbalism` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`excavation` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`archery` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`swords` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`axes` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`acrobatics` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`blast_mining` int(32) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
|
||||||
write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "skills` (`user_id` int(10) unsigned NOT NULL,"
|
|
||||||
+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
|
||||||
write("CREATE TABLE IF NOT EXISTS `" + LoadProperties.MySQLtablePrefix + "experience` (`user_id` int(10) unsigned NOT NULL,"
|
|
||||||
+ "`taming` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`mining` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`repair` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`unarmed` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`herbalism` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`excavation` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`archery` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`swords` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`axes` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0',"
|
|
||||||
+ "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
|
||||||
|
|
||||||
checkDatabaseStructure(DatabaseUpdate.FISHING);
|
|
||||||
checkDatabaseStructure(DatabaseUpdate.BLAST_MINING);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check database structure for missing values.
|
|
||||||
*
|
|
||||||
* @param update Type of data to check updates for
|
|
||||||
*/
|
|
||||||
public void checkDatabaseStructure(DatabaseUpdate update) {
|
|
||||||
String sql = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
|
|
||||||
|
|
||||||
switch (update) {
|
|
||||||
case BLAST_MINING:
|
|
||||||
sql = "SELECT * FROM `"+LoadProperties.MySQLtablePrefix+"cooldowns` ORDER BY `"+LoadProperties.MySQLtablePrefix+"cooldowns`.`blast_mining` ASC LIMIT 0 , 30";
|
|
||||||
break;
|
|
||||||
case FISHING:
|
|
||||||
sql = "SELECT * FROM `"+LoadProperties.MySQLtablePrefix+"experience` ORDER BY `"+LoadProperties.MySQLtablePrefix+"experience`.`fishing` ASC LIMIT 0 , 30";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
|
||||||
if (stmt.executeQuery() != null) {
|
|
||||||
stmt.executeQuery();
|
|
||||||
rs = stmt.getResultSet();
|
|
||||||
while (rs.next()) {
|
|
||||||
ArrayList<String> Col = new ArrayList<String>();
|
|
||||||
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
|
|
||||||
Col.add(rs.getString(i));
|
|
||||||
}
|
|
||||||
Rows.put(rs.getRow(), Col);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
if (update.equals(DatabaseUpdate.BLAST_MINING)) {
|
|
||||||
System.out.println("Updating mcMMO MySQL tables for Blast Mining...");
|
|
||||||
write("ALTER TABLE `"+LoadProperties.MySQLtablePrefix + "cooldowns` ADD `blast_mining` int(32) NOT NULL DEFAULT '0' ;");
|
|
||||||
}
|
|
||||||
else if (update.equals(DatabaseUpdate.FISHING)) {
|
|
||||||
System.out.println("Updating mcMMO MySQL tables for Fishing...");
|
|
||||||
write("ALTER TABLE `"+LoadProperties.MySQLtablePrefix + "skills` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
|
|
||||||
write("ALTER TABLE `"+LoadProperties.MySQLtablePrefix + "experience` ADD `fishing` int(10) NOT NULL DEFAULT '0' ;");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to write the SQL query.
|
|
||||||
*
|
|
||||||
* @param sql Query to write.
|
|
||||||
* @return true if the query was successfully written, false otherwise.
|
|
||||||
*/
|
|
||||||
public boolean write(String sql) {
|
|
||||||
if (isConnected()) {
|
|
||||||
try {
|
|
||||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.executeUpdate();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
printErrors(ex);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
attemptReconnect();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Integer. Only return first row / first field.
|
|
||||||
*
|
|
||||||
* @param sql SQL query to execute
|
|
||||||
* @return the value in the first row / first field
|
|
||||||
*/
|
|
||||||
public Integer getInt(String sql) {
|
|
||||||
ResultSet rs = null;
|
|
||||||
Integer result = 0;
|
|
||||||
|
|
||||||
if (isConnected()) {
|
|
||||||
try {
|
|
||||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
if (stmt.executeQuery() != null) {
|
|
||||||
stmt.executeQuery();
|
|
||||||
rs = stmt.getResultSet();
|
|
||||||
if (rs.next()) {
|
|
||||||
result = rs.getInt(1);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
printErrors(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
attemptReconnect();
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get connection status
|
|
||||||
*
|
|
||||||
* @return the boolean value for whether or not we are connected
|
|
||||||
*/
|
|
||||||
public boolean isConnected() {
|
|
||||||
if(conn == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
try {
|
|
||||||
return conn.isValid(3);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Schedules a Sync Delayed Task with the Bukkit Scheduler to attempt reconnection after a minute has elapsed
|
|
||||||
* This will check for a connection being present or not to prevent unneeded reconnection attempts
|
|
||||||
*/
|
|
||||||
public void attemptReconnect() {
|
|
||||||
if(reconnectTimestamp+60000 < System.currentTimeMillis()) //Only reconnect if another attempt hasn't been made recently
|
|
||||||
{
|
|
||||||
System.out.println("[mcMMO] Connection to MySQL was lost! Attempting to reconnect in 60 seconds...");
|
|
||||||
reconnectTimestamp = System.currentTimeMillis();
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin,
|
|
||||||
new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
if (!isConnected()) {
|
|
||||||
connect();
|
|
||||||
if(isConnected()) {
|
|
||||||
for(PlayerProfile x : Users.players.values()) {
|
|
||||||
x.save(); //Save all profiles
|
|
||||||
}
|
|
||||||
Users.players.clear(); //Clear the profiles
|
|
||||||
for(Player x : Bukkit.getOnlinePlayers()) {
|
|
||||||
Users.addUser(x); //Add in new profiles, forcing them to 'load' again from MySQL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 20*60);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read SQL query.
|
|
||||||
*
|
|
||||||
* @param sql SQL query to read
|
|
||||||
* @return the rows in this SQL query
|
|
||||||
*/
|
|
||||||
public HashMap<Integer, ArrayList<String>> read(String sql) {
|
|
||||||
ResultSet rs = null;
|
|
||||||
HashMap<Integer, ArrayList<String>> Rows = new HashMap<Integer, ArrayList<String>>();
|
|
||||||
|
|
||||||
if (isConnected()) {
|
|
||||||
try {
|
|
||||||
PreparedStatement stmt = conn.prepareStatement(sql);
|
|
||||||
if (stmt.executeQuery() != null) {
|
|
||||||
stmt.executeQuery();
|
|
||||||
rs = stmt.getResultSet();
|
|
||||||
while (rs.next()) {
|
|
||||||
ArrayList<String> Col = new ArrayList<String>();
|
|
||||||
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
|
|
||||||
Col.add(rs.getString(i));
|
|
||||||
}
|
|
||||||
Rows.put(rs.getRow(), Col);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException ex) {
|
|
||||||
printErrors(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
attemptReconnect();
|
|
||||||
}
|
|
||||||
return Rows;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void printErrors(SQLException ex) {
|
|
||||||
System.out.println("SQLException: " + ex.getMessage());
|
|
||||||
System.out.println("SQLState: " + ex.getSQLState());
|
|
||||||
System.out.println("VendorError: " + ex.getErrorCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
package com.gmail.nossr50;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.skills.Skills;
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
|
|
||||||
public class Item {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check for item usage.
|
|
||||||
*
|
|
||||||
* @param player Player whose item usage to check
|
|
||||||
*/
|
|
||||||
public static void itemchecks(Player player) {
|
|
||||||
ItemStack inhand = player.getItemInHand();
|
|
||||||
|
|
||||||
if (LoadProperties.chimaeraWingEnable && inhand.getTypeId() == LoadProperties.chimaeraId) {
|
|
||||||
chimaerawing(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void chimaerawing(Player player) {
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
ItemStack is = player.getItemInHand();
|
|
||||||
Block block = player.getLocation().getBlock();
|
|
||||||
int amount = is.getAmount();
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().chimaeraWing(player) && is.getTypeId() == LoadProperties.chimaeraId) {
|
|
||||||
if (Skills.cooldownOver(PP.getRecentlyHurt(), 60) && amount >= LoadProperties.feathersConsumedByChimaeraWing) {
|
|
||||||
player.setItemInHand(new ItemStack(LoadProperties.chimaeraId, amount - LoadProperties.feathersConsumedByChimaeraWing));
|
|
||||||
|
|
||||||
for (int y = 0; block.getY() + y < player.getWorld().getMaxHeight(); y++) {
|
|
||||||
if (!block.getRelative(0, y, 0).getType().equals(Material.AIR)) {
|
|
||||||
player.sendMessage(mcLocale.getString("Item.ChimaeraWingFail"));
|
|
||||||
player.teleport(block.getRelative(0, y - 1, 0).getLocation());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.getBedSpawnLocation() != null && player.getBedSpawnLocation().getBlock().getType().equals(Material.BED_BLOCK)) {
|
|
||||||
player.teleport(player.getBedSpawnLocation());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
player.teleport(player.getWorld().getSpawnLocation());
|
|
||||||
}
|
|
||||||
|
|
||||||
player.sendMessage(mcLocale.getString("Item.ChimaeraWingPass"));
|
|
||||||
}
|
|
||||||
else if (!Skills.cooldownOver(PP.getRecentlyHurt(), 60) && is.getAmount() >= LoadProperties.feathersConsumedByChimaeraWing) {
|
|
||||||
player.sendMessage(mcLocale.getString("Item.InjuredWait", new Object[] {Skills.calculateTimeLeft(PP.getRecentlyHurt(), 60)}));
|
|
||||||
}
|
|
||||||
else if (is.getAmount() <= LoadProperties.feathersConsumedByChimaeraWing) {
|
|
||||||
player.sendMessage(mcLocale.getString("Skills.NeedMore")+ " " + ChatColor.GRAY + m.prettyItemString(LoadProperties.chimaeraId));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,380 +0,0 @@
|
|||||||
package com.gmail.nossr50;
|
|
||||||
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
public class ItemChecks {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the item is a sword.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a sword, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isSword(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_SWORD:
|
|
||||||
case GOLD_SWORD:
|
|
||||||
case IRON_SWORD:
|
|
||||||
case STONE_SWORD:
|
|
||||||
case WOOD_SWORD:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the item is a hoe.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a hoe, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isHoe(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_HOE:
|
|
||||||
case GOLD_HOE:
|
|
||||||
case IRON_HOE:
|
|
||||||
case STONE_HOE:
|
|
||||||
case WOOD_HOE:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the item is a shovel.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a shovel, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isShovel(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_SPADE:
|
|
||||||
case GOLD_SPADE:
|
|
||||||
case IRON_SPADE:
|
|
||||||
case STONE_SPADE:
|
|
||||||
case WOOD_SPADE:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the item is an axe.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is an axe, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isAxe(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_AXE:
|
|
||||||
case GOLD_AXE:
|
|
||||||
case IRON_AXE:
|
|
||||||
case STONE_AXE:
|
|
||||||
case WOOD_AXE:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the item is a pickaxe.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a pickaxe, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isMiningPick(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_PICKAXE:
|
|
||||||
case GOLD_PICKAXE:
|
|
||||||
case IRON_PICKAXE:
|
|
||||||
case STONE_PICKAXE:
|
|
||||||
case WOOD_PICKAXE:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the item is a helmet.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a helmet, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isHelmet(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_HELMET:
|
|
||||||
case GOLD_HELMET:
|
|
||||||
case IRON_HELMET:
|
|
||||||
case LEATHER_HELMET:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the item is a chestplate.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a chestplate, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isChestplate(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_CHESTPLATE:
|
|
||||||
case GOLD_CHESTPLATE:
|
|
||||||
case IRON_CHESTPLATE:
|
|
||||||
case LEATHER_CHESTPLATE:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the item is a pair of pants.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a pair of pants, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isPants(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_LEGGINGS:
|
|
||||||
case GOLD_LEGGINGS:
|
|
||||||
case IRON_LEGGINGS:
|
|
||||||
case LEATHER_LEGGINGS:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the item is a pair of boots.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a pair of boots, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isBoots(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_BOOTS:
|
|
||||||
case GOLD_BOOTS:
|
|
||||||
case IRON_BOOTS:
|
|
||||||
case LEATHER_BOOTS:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is a wearable armor piece.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is armor, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isArmor(ItemStack is) {
|
|
||||||
return isLeatherArmor(is) || isGoldArmor(is) || isIronArmor(is) || isDiamondArmor(is);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is a leather armor piece.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is leather armor, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isLeatherArmor(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case LEATHER_BOOTS:
|
|
||||||
case LEATHER_CHESTPLATE:
|
|
||||||
case LEATHER_HELMET:
|
|
||||||
case LEATHER_LEGGINGS:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is a gold armor piece.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is gold armor, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isGoldArmor(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case GOLD_BOOTS:
|
|
||||||
case GOLD_CHESTPLATE:
|
|
||||||
case GOLD_HELMET:
|
|
||||||
case GOLD_LEGGINGS:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is an iron armor piece.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is iron armor, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isIronArmor(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case IRON_BOOTS:
|
|
||||||
case IRON_CHESTPLATE:
|
|
||||||
case IRON_HELMET:
|
|
||||||
case IRON_LEGGINGS:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is a diamond armor piece.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is diamond armor, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isDiamondArmor(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_BOOTS:
|
|
||||||
case DIAMOND_CHESTPLATE:
|
|
||||||
case DIAMOND_HELMET:
|
|
||||||
case DIAMOND_LEGGINGS:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is a tool.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a tool, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isTool(ItemStack is) {
|
|
||||||
return isStoneTool(is) || isWoodTool(is) || isGoldTool(is) || isIronTool(is) || isDiamondTool(is) || is.getType().equals(Material.BOW);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is a stone tool.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a stone tool, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isStoneTool(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case STONE_AXE:
|
|
||||||
case STONE_HOE:
|
|
||||||
case STONE_PICKAXE:
|
|
||||||
case STONE_SPADE:
|
|
||||||
case STONE_SWORD:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is a wooden tool.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a wooden tool, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isWoodTool(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case WOOD_AXE:
|
|
||||||
case WOOD_HOE:
|
|
||||||
case WOOD_PICKAXE:
|
|
||||||
case WOOD_SPADE:
|
|
||||||
case WOOD_SWORD:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is a gold tool.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a stone tool, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isGoldTool(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case GOLD_AXE:
|
|
||||||
case GOLD_HOE:
|
|
||||||
case GOLD_PICKAXE:
|
|
||||||
case GOLD_SPADE:
|
|
||||||
case GOLD_SWORD:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is an iron tool.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is an iron tool, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isIronTool(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case IRON_AXE:
|
|
||||||
case IRON_HOE:
|
|
||||||
case IRON_PICKAXE:
|
|
||||||
case IRON_SPADE:
|
|
||||||
case IRON_SWORD:
|
|
||||||
case SHEARS:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to see if an item is a diamond tool.
|
|
||||||
*
|
|
||||||
* @param is Item to check
|
|
||||||
* @return true if the item is a diamond tool, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean isDiamondTool(ItemStack is) {
|
|
||||||
switch (is.getType()) {
|
|
||||||
case DIAMOND_AXE:
|
|
||||||
case DIAMOND_HOE:
|
|
||||||
case DIAMOND_PICKAXE:
|
|
||||||
case DIAMOND_SPADE:
|
|
||||||
case DIAMOND_SWORD:
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,291 +0,0 @@
|
|||||||
package com.gmail.nossr50;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileReader;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerStat;
|
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
|
||||||
import com.gmail.nossr50.datatypes.Tree;
|
|
||||||
|
|
||||||
public class Leaderboard {
|
|
||||||
static String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the leaderboards.
|
|
||||||
*/
|
|
||||||
public static void makeLeaderboards() {
|
|
||||||
//Make Trees
|
|
||||||
Tree Mining = new Tree();
|
|
||||||
Tree WoodCutting = new Tree();
|
|
||||||
Tree Herbalism = new Tree();
|
|
||||||
Tree Excavation = new Tree();
|
|
||||||
Tree Acrobatics = new Tree();
|
|
||||||
Tree Repair = new Tree();
|
|
||||||
Tree Swords = new Tree();
|
|
||||||
Tree Axes = new Tree();
|
|
||||||
Tree Archery = new Tree();
|
|
||||||
Tree Unarmed = new Tree();
|
|
||||||
Tree Taming = new Tree();
|
|
||||||
Tree Fishing = new Tree();
|
|
||||||
Tree PowerLevel = new Tree();
|
|
||||||
|
|
||||||
//Add Data To Trees
|
|
||||||
try {
|
|
||||||
FileReader file = new FileReader(location);
|
|
||||||
BufferedReader in = new BufferedReader(file);
|
|
||||||
String line = "";
|
|
||||||
ArrayList<String> players = new ArrayList<String>();
|
|
||||||
|
|
||||||
while ((line = in.readLine()) != null) {
|
|
||||||
String[] character = line.split(":");
|
|
||||||
String p = character[0];
|
|
||||||
int powerLevel = 0;
|
|
||||||
|
|
||||||
//Prevent the same player from being added multiple times
|
|
||||||
if (players.contains(p)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
players.add(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 1 && m.isInt(character[1])) {
|
|
||||||
Mining.add(p, Integer.valueOf(character[1]));
|
|
||||||
powerLevel += Integer.valueOf(character[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 5 && m.isInt(character[5])) {
|
|
||||||
WoodCutting.add(p, Integer.valueOf(character[5]));
|
|
||||||
powerLevel += Integer.valueOf(character[5]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 7 && m.isInt(character[7])) {
|
|
||||||
Repair.add(p, Integer.valueOf(character[7]));
|
|
||||||
powerLevel += Integer.valueOf(character[7]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 8 && m.isInt(character[8])) {
|
|
||||||
Unarmed.add(p, Integer.valueOf(character[8]));
|
|
||||||
powerLevel += Integer.valueOf(character[8]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 9 && m.isInt(character[9])) {
|
|
||||||
Herbalism.add(p, Integer.valueOf(character[9]));
|
|
||||||
powerLevel += Integer.valueOf(character[9]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 10 && m.isInt(character[10])) {
|
|
||||||
Excavation.add(p, Integer.valueOf(character[10]));
|
|
||||||
powerLevel += Integer.valueOf(character[10]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 11 && m.isInt(character[11])) {
|
|
||||||
Archery.add(p, Integer.valueOf(character[11]));
|
|
||||||
powerLevel += Integer.valueOf(character[11]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 12 && m.isInt(character[12])) {
|
|
||||||
Swords.add(p, Integer.valueOf(character[12]));
|
|
||||||
powerLevel += Integer.valueOf(character[12]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 13 && m.isInt(character[13])) {
|
|
||||||
Axes.add(p, Integer.valueOf(character[13]));
|
|
||||||
powerLevel += Integer.valueOf(character[13]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 14 && m.isInt(character[14])) {
|
|
||||||
Acrobatics.add(p, Integer.valueOf(character[14]));
|
|
||||||
powerLevel += Integer.valueOf(character[14]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 24 && m.isInt(character[24])) {
|
|
||||||
Taming.add(p, Integer.valueOf(character[24]));
|
|
||||||
powerLevel += Integer.valueOf(character[24]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (character.length > 34 && m.isInt(character[34])) {
|
|
||||||
Fishing.add(p, Integer.valueOf(character[34]));
|
|
||||||
powerLevel += Integer.valueOf(character[34]);
|
|
||||||
}
|
|
||||||
|
|
||||||
PowerLevel.add(p, powerLevel);
|
|
||||||
}
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
Bukkit.getLogger().severe(("Exception while reading " + location + " (Are you sure you formatted it correctly?)" + e.toString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
//Write the leader board files
|
|
||||||
leaderWrite(Mining.inOrder(), SkillType.MINING);
|
|
||||||
leaderWrite(WoodCutting.inOrder(), SkillType.WOODCUTTING);
|
|
||||||
leaderWrite(Repair.inOrder(), SkillType.REPAIR);
|
|
||||||
leaderWrite(Unarmed.inOrder(), SkillType.UNARMED);
|
|
||||||
leaderWrite(Herbalism.inOrder(), SkillType.HERBALISM);
|
|
||||||
leaderWrite(Excavation.inOrder(), SkillType.EXCAVATION);
|
|
||||||
leaderWrite(Archery.inOrder(), SkillType.ARCHERY);
|
|
||||||
leaderWrite(Swords.inOrder(), SkillType.SWORDS);
|
|
||||||
leaderWrite(Axes.inOrder(), SkillType.AXES);
|
|
||||||
leaderWrite(Acrobatics.inOrder(), SkillType.ACROBATICS);
|
|
||||||
leaderWrite(Taming.inOrder(), SkillType.TAMING);
|
|
||||||
leaderWrite(Fishing.inOrder(), SkillType.FISHING);
|
|
||||||
leaderWrite(PowerLevel.inOrder(), SkillType.ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write to the leaderboards.
|
|
||||||
*
|
|
||||||
* @param ps Stats to write to the leaderboard
|
|
||||||
* @param skillType Skill type to write the leaderboard of
|
|
||||||
*/
|
|
||||||
private static void leaderWrite(PlayerStat[] ps, SkillType skillType) {
|
|
||||||
String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillType + ".mcmmo";
|
|
||||||
File theDir = new File(theLocation);
|
|
||||||
|
|
||||||
//CHECK IF THE FILE EXISTS
|
|
||||||
if (!theDir.exists()) {
|
|
||||||
FileWriter writer = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
writer = new FileWriter(theLocation);
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
Bukkit.getLogger().severe(("Exception while creating " + theLocation + e.toString()));
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
try {
|
|
||||||
if (writer != null) {
|
|
||||||
writer.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
Bukkit.getLogger().severe("Exception while closing writer for " + theLocation + e.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
FileReader file = new FileReader(theLocation);
|
|
||||||
BufferedReader in = new BufferedReader(file);
|
|
||||||
StringBuilder writer = new StringBuilder();
|
|
||||||
|
|
||||||
for (PlayerStat p : ps) {
|
|
||||||
if (p.name.equals("$mcMMO_DummyInfo")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p.statVal == 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.append(p.name + ":" + p.statVal);
|
|
||||||
writer.append("\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
in.close();
|
|
||||||
FileWriter out = new FileWriter(theLocation);
|
|
||||||
out.write(writer.toString());
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
Bukkit.getLogger().severe("Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)" + e.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve leaderboard info.
|
|
||||||
*
|
|
||||||
* @param skillName Skill to retrieve info on.
|
|
||||||
* @param pagenumber Which page in the leaderboards to retrieve
|
|
||||||
* @return the requested leaderboard information
|
|
||||||
*/
|
|
||||||
public static String[] retrieveInfo(String skillName, int pagenumber) {
|
|
||||||
String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillName + ".mcmmo"; //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
|
|
||||||
try {
|
|
||||||
FileReader file = new FileReader(theLocation);
|
|
||||||
BufferedReader in = new BufferedReader(file);
|
|
||||||
int destination = (pagenumber - 1) * 10; //How many lines to skip through
|
|
||||||
int x = 0; //how many lines we've gone through
|
|
||||||
int y = 0; //going through the lines
|
|
||||||
String line = "";
|
|
||||||
String[] info = new String[10]; //what to return
|
|
||||||
|
|
||||||
while ((line = in.readLine()) != null && y < 10) {
|
|
||||||
x++;
|
|
||||||
|
|
||||||
if (x >= destination && y < 10) {
|
|
||||||
info[y] = line.toString();
|
|
||||||
y++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
in.close();
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
Bukkit.getLogger().severe("Exception while reading " + theLocation + " (Are you sure you formatted it correctly?)" + e.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
return null; //Shouldn't get here
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the leaderboards.
|
|
||||||
*
|
|
||||||
* @param ps Stats to update the leaderboard with.
|
|
||||||
* @param skillType Skill whose leaderboard is being updated.
|
|
||||||
*/
|
|
||||||
public static void updateLeaderboard(PlayerStat ps, SkillType skillType) {
|
|
||||||
if (LoadProperties.useMySQL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String theLocation = "plugins/mcMMO/FlatFileStuff/Leaderboards/" + skillType + ".mcmmo";
|
|
||||||
|
|
||||||
try {
|
|
||||||
FileReader file = new FileReader(theLocation);
|
|
||||||
BufferedReader in = new BufferedReader(file);
|
|
||||||
StringBuilder writer = new StringBuilder();
|
|
||||||
String line = "";
|
|
||||||
Boolean inserted = false;
|
|
||||||
|
|
||||||
while ((line = in.readLine()) != null) {
|
|
||||||
|
|
||||||
//Insert the player into the line before it finds a smaller one
|
|
||||||
if (Integer.valueOf(line.split(":")[1]) < ps.statVal && !inserted) {
|
|
||||||
writer.append(ps.name + ":" + ps.statVal).append("\r\n");
|
|
||||||
inserted = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Write anything that isn't the player already in the file so we remove the duplicate
|
|
||||||
if (!line.split(":")[0].equalsIgnoreCase(ps.name)) {
|
|
||||||
writer.append(line).append("\r\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!inserted) {
|
|
||||||
writer.append(ps.name + ":" + ps.statVal).append("\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
in.close();
|
|
||||||
|
|
||||||
//Write the new file
|
|
||||||
FileWriter out = new FileWriter(theLocation);
|
|
||||||
out.write(writer.toString());
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
Bukkit.getLogger().severe("Exception while writing to " + theLocation + " (Are you sure you formatted it correctly?)" + e.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,541 +0,0 @@
|
|||||||
package com.gmail.nossr50;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
import org.bukkit.plugin.PluginDescriptionFile;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.OutputStreamWriter;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.net.Proxy;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLConnection;
|
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class Metrics {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The current revision number
|
|
||||||
*/
|
|
||||||
private final static int REVISION = 5;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The base url of the metrics domain
|
|
||||||
*/
|
|
||||||
private static final String BASE_URL = "http://metrics.griefcraft.com";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The url used to report a server's status
|
|
||||||
*/
|
|
||||||
private static final String REPORT_URL = "/report/%s";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The file where guid and opt out is stored in
|
|
||||||
*/
|
|
||||||
private static final String CONFIG_FILE = "plugins/PluginMetrics/config.yml";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The separator to use for custom data. This MUST NOT change unless you are hosting your own
|
|
||||||
* version of metrics and want to change it.
|
|
||||||
*/
|
|
||||||
private static final String CUSTOM_DATA_SEPARATOR = "~~";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interval of time to ping (in minutes)
|
|
||||||
*/
|
|
||||||
private final static int PING_INTERVAL = 10;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A map of all of the graphs for each plugin
|
|
||||||
*/
|
|
||||||
private Map<Plugin, Set<Graph>> graphs = Collections.synchronizedMap(new HashMap<Plugin, Set<Graph>>());
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A convenient map of the default Graph objects (used by addCustomData mainly)
|
|
||||||
*/
|
|
||||||
private Map<Plugin, Graph> defaultGraphs = Collections.synchronizedMap(new HashMap<Plugin, Graph>());
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The plugin configuration file
|
|
||||||
*/
|
|
||||||
private final YamlConfiguration configuration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unique server id
|
|
||||||
*/
|
|
||||||
private String guid;
|
|
||||||
|
|
||||||
public Metrics() throws IOException {
|
|
||||||
// load the config
|
|
||||||
File file = new File(CONFIG_FILE);
|
|
||||||
configuration = YamlConfiguration.loadConfiguration(file);
|
|
||||||
|
|
||||||
// add some defaults
|
|
||||||
configuration.addDefault("opt-out", false);
|
|
||||||
configuration.addDefault("guid", UUID.randomUUID().toString());
|
|
||||||
|
|
||||||
// Do we need to create the file?
|
|
||||||
if (configuration.get("guid", null) == null) {
|
|
||||||
configuration.options().header("http://metrics.griefcraft.com").copyDefaults(true);
|
|
||||||
configuration.save(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load the guid then
|
|
||||||
guid = configuration.getString("guid");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct and create a Graph that can be used to separate specific plotters to their own graphs
|
|
||||||
* on the metrics website. Plotters can be added to the graph object returned.
|
|
||||||
*
|
|
||||||
* @param plugin
|
|
||||||
* @param type
|
|
||||||
* @param name
|
|
||||||
* @return Graph object created. Will never return NULL under normal circumstances unless bad parameters are given
|
|
||||||
*/
|
|
||||||
public Graph createGraph(Plugin plugin, Graph.Type type, String name) {
|
|
||||||
if (plugin == null || type == null || name == null) {
|
|
||||||
throw new IllegalArgumentException("All arguments must not be null");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Construct the graph object
|
|
||||||
Graph graph = new Graph(type, name);
|
|
||||||
|
|
||||||
// Get the graphs for the plugin
|
|
||||||
Set<Graph> graphs = getOrCreateGraphs(plugin);
|
|
||||||
|
|
||||||
// Now we can add our graph
|
|
||||||
graphs.add(graph);
|
|
||||||
|
|
||||||
// and return back
|
|
||||||
return graph;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a custom data plotter for a given plugin
|
|
||||||
*
|
|
||||||
* @param plugin
|
|
||||||
* @param plotter
|
|
||||||
*/
|
|
||||||
public void addCustomData(Plugin plugin, Plotter plotter) {
|
|
||||||
// The default graph for the plugin
|
|
||||||
Graph graph = getOrCreateDefaultGraph(plugin);
|
|
||||||
|
|
||||||
// Add the plotter to the graph o/
|
|
||||||
graph.addPlotter(plotter);
|
|
||||||
|
|
||||||
// Ensure the default graph is included in the submitted graphs
|
|
||||||
getOrCreateGraphs(plugin).add(graph);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Begin measuring a plugin
|
|
||||||
*
|
|
||||||
* @param plugin
|
|
||||||
*/
|
|
||||||
public void beginMeasuringPlugin(final Plugin plugin) {
|
|
||||||
// Did we opt out?
|
|
||||||
if (configuration.getBoolean("opt-out", false)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Begin hitting the server with glorious data
|
|
||||||
plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, new Runnable() {
|
|
||||||
private boolean firstPost = true;
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
// We use the inverse of firstPost because if it is the first time we are posting,
|
|
||||||
// it is not a interval ping, so it evaluates to FALSE
|
|
||||||
// Each time thereafter it will evaluate to TRUE, i.e PING!
|
|
||||||
postPlugin(plugin, !firstPost);
|
|
||||||
|
|
||||||
// After the first post we set firstPost to false
|
|
||||||
// Each post thereafter will be a ping
|
|
||||||
firstPost = false;
|
|
||||||
} catch (IOException e) {
|
|
||||||
System.out.println("[Metrics] " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 0, PING_INTERVAL * 1200);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generic method that posts a plugin to the metrics website
|
|
||||||
*
|
|
||||||
* @param plugin
|
|
||||||
*/
|
|
||||||
private void postPlugin(Plugin plugin, boolean isPing) throws IOException {
|
|
||||||
// The plugin's description file containg all of the plugin data such as name, version, author, etc
|
|
||||||
PluginDescriptionFile description = plugin.getDescription();
|
|
||||||
|
|
||||||
// The author string, created with description.getAuthors()
|
|
||||||
// Authors are separated by a comma
|
|
||||||
String authors = "";
|
|
||||||
|
|
||||||
// Add each author to the string
|
|
||||||
for (String author : description.getAuthors()) {
|
|
||||||
authors += author + ", ";
|
|
||||||
}
|
|
||||||
|
|
||||||
// If there were any authors at all, we need to remove the last 2 characters
|
|
||||||
// the last 2 characters are the last comma and space
|
|
||||||
if (!authors.isEmpty()) {
|
|
||||||
authors = authors.substring(0, authors.length() - 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Construct the post data
|
|
||||||
String data = encode("guid") + '=' + encode(guid)
|
|
||||||
+ encodeDataPair("authors", authors)
|
|
||||||
+ encodeDataPair("version", description.getVersion())
|
|
||||||
+ encodeDataPair("server", Bukkit.getVersion())
|
|
||||||
+ encodeDataPair("players", Integer.toString(Bukkit.getServer().getOnlinePlayers().length))
|
|
||||||
+ encodeDataPair("revision", String.valueOf(REVISION));
|
|
||||||
|
|
||||||
// If we're pinging, append it
|
|
||||||
if (isPing) {
|
|
||||||
data += encodeDataPair("ping", "true");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add any custom data available for the plugin
|
|
||||||
Set<Graph> graphs = getOrCreateGraphs(plugin);
|
|
||||||
|
|
||||||
// Acquire a lock on the graphs, which lets us make the assumption we also lock everything
|
|
||||||
// inside of the graph (e.g plotters)
|
|
||||||
synchronized(graphs) {
|
|
||||||
Iterator<Graph> iter = graphs.iterator();
|
|
||||||
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
Graph graph = iter.next();
|
|
||||||
|
|
||||||
// Because we have a lock on the graphs set already, it is reasonable to assume
|
|
||||||
// that our lock transcends down to the individual plotters in the graphs also.
|
|
||||||
// Because our methods are private, no one but us can reasonably access this list
|
|
||||||
// without reflection so this is a safe assumption without adding more code.
|
|
||||||
for (Plotter plotter : graph.getPlotters()) {
|
|
||||||
// The key name to send to the metrics server
|
|
||||||
// The format is C-GRAPHNAME-PLOTTERNAME where separator - is defined at the top
|
|
||||||
// Legacy (R4) submitters use the format Custom%s, or CustomPLOTTERNAME
|
|
||||||
String key = String.format("C%s%s%s%s", CUSTOM_DATA_SEPARATOR, graph.getName(), CUSTOM_DATA_SEPARATOR, plotter.getColumnName());
|
|
||||||
|
|
||||||
// The value to send, which for the foreseeable future is just the string
|
|
||||||
// value of plotter.getValue()
|
|
||||||
String value = Integer.toString(plotter.getValue());
|
|
||||||
|
|
||||||
// Add it to the http post data :)
|
|
||||||
data += encodeDataPair(key, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the url
|
|
||||||
URL url = new URL(BASE_URL + String.format(REPORT_URL, plugin.getDescription().getName()));
|
|
||||||
|
|
||||||
// Connect to the website
|
|
||||||
URLConnection connection;
|
|
||||||
|
|
||||||
// Mineshafter creates a socks proxy, so we can safely bypass it
|
|
||||||
// It does not reroute POST requests so we need to go around it
|
|
||||||
if (isMineshafterPresent()) {
|
|
||||||
connection = url.openConnection(Proxy.NO_PROXY);
|
|
||||||
} else {
|
|
||||||
connection = url.openConnection();
|
|
||||||
}
|
|
||||||
|
|
||||||
connection.setDoOutput(true);
|
|
||||||
|
|
||||||
// Write the data
|
|
||||||
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
|
|
||||||
writer.write(data);
|
|
||||||
writer.flush();
|
|
||||||
|
|
||||||
// Now read the response
|
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
|
||||||
String response = reader.readLine();
|
|
||||||
|
|
||||||
// close resources
|
|
||||||
writer.close();
|
|
||||||
reader.close();
|
|
||||||
|
|
||||||
if (response.startsWith("ERR")) {
|
|
||||||
throw new IOException(response); //Throw the exception
|
|
||||||
} else {
|
|
||||||
// Is this the first update this hour?
|
|
||||||
if (response.contains("OK This is your first update this hour")) {
|
|
||||||
synchronized (graphs) {
|
|
||||||
Iterator<Graph> iter = graphs.iterator();
|
|
||||||
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
Graph graph = iter.next();
|
|
||||||
|
|
||||||
for (Plotter plotter : graph.getPlotters()) {
|
|
||||||
plotter.reset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//if (response.startsWith("OK")) - We should get "OK" followed by an optional description if everything goes right
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get or create the Set of graphs for a specific plugin
|
|
||||||
*
|
|
||||||
* @param plugin
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private Set<Graph> getOrCreateGraphs(Plugin plugin) {
|
|
||||||
Set<Graph> theGraphs = graphs.get(plugin);
|
|
||||||
|
|
||||||
// Create the Set if it does not already exist
|
|
||||||
if (theGraphs == null) {
|
|
||||||
theGraphs = Collections.synchronizedSet(new HashSet<Graph>());
|
|
||||||
graphs.put(plugin, theGraphs);
|
|
||||||
}
|
|
||||||
|
|
||||||
return theGraphs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the default graph for a plugin and if it does not exist, create one
|
|
||||||
*
|
|
||||||
* @param plugin
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private Graph getOrCreateDefaultGraph(Plugin plugin) {
|
|
||||||
Graph graph = defaultGraphs.get(plugin);
|
|
||||||
|
|
||||||
// Not yet created :(
|
|
||||||
if (graph == null) {
|
|
||||||
graph = new Graph(Graph.Type.Line, "Default");
|
|
||||||
defaultGraphs.put(plugin, graph);
|
|
||||||
}
|
|
||||||
|
|
||||||
return graph;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if mineshafter is present. If it is, we need to bypass it to send POST requests
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private boolean isMineshafterPresent() {
|
|
||||||
try {
|
|
||||||
Class.forName("mineshafter.MineServer");
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encode a key/value data pair to be used in a HTTP post request. This INCLUDES a & so the first
|
|
||||||
* key/value pair MUST be included manually, e.g:
|
|
||||||
* <p>
|
|
||||||
* String httpData = encode("guid") + "=" + encode("1234") + encodeDataPair("authors") + "..";
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private static String encodeDataPair(String key, String value) throws UnsupportedEncodingException {
|
|
||||||
return "&" + encode(key) + "=" + encode(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encode text as UTF-8
|
|
||||||
*
|
|
||||||
* @param text
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private static String encode(String text) throws UnsupportedEncodingException {
|
|
||||||
return URLEncoder.encode(text, "UTF-8");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom graph on the website
|
|
||||||
*/
|
|
||||||
public static class Graph {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The graph's type that will be visible on the website
|
|
||||||
*/
|
|
||||||
public static enum Type {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A simple line graph which also includes a scrollable timeline viewer to view
|
|
||||||
* as little or as much of the data as possible.
|
|
||||||
*/
|
|
||||||
Line,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An area graph. This is the same as a line graph except the area under the curve is shaded
|
|
||||||
*/
|
|
||||||
Area,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A column graph, which is a graph where the data is represented by columns on the vertical axis,
|
|
||||||
* i.e they go up and down.
|
|
||||||
*/
|
|
||||||
Column,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A pie graph. The graph is generated by taking the data for the last hour and summing it
|
|
||||||
* together. Then the percentage for each plotter is calculated via round( (plot / total) * 100, 2 )
|
|
||||||
*/
|
|
||||||
Pie
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* What the graph should be plotted as
|
|
||||||
*/
|
|
||||||
private final Type type;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The graph's name, alphanumeric and spaces only :)
|
|
||||||
* If it does not comply to the above when submitted, it is rejected
|
|
||||||
*/
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The set of plotters that are contained within this graph
|
|
||||||
*/
|
|
||||||
private final Set<Plotter> plotters = new LinkedHashSet<Plotter>();
|
|
||||||
|
|
||||||
private Graph(Type type, String name) {
|
|
||||||
this.type = type;
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the graph's name
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a plotter to the graph, which will be used to plot entries
|
|
||||||
*
|
|
||||||
* @param plotter
|
|
||||||
*/
|
|
||||||
public void addPlotter(Plotter plotter) {
|
|
||||||
plotters.add(plotter);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove a plotter from the graph
|
|
||||||
*
|
|
||||||
* @param plotter
|
|
||||||
*/
|
|
||||||
public void removePlotter(Plotter plotter) {
|
|
||||||
plotters.remove(plotter);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets an <b>unmodifiable</b> set of the plotter objects in the graph
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Set<Plotter> getPlotters() {
|
|
||||||
return Collections.unmodifiableSet(plotters);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return (type.hashCode() * 17) ^ name.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object object) {
|
|
||||||
if (!(object instanceof Graph)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Graph graph = (Graph) object;
|
|
||||||
return graph.type == type && graph.name.equals(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface used to collect custom data for a plugin
|
|
||||||
*/
|
|
||||||
public static abstract class Plotter {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The plot's name
|
|
||||||
*/
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct a plotter with the default plot name
|
|
||||||
*/
|
|
||||||
public Plotter() {
|
|
||||||
this("Default");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct a plotter with a specific plot name
|
|
||||||
*
|
|
||||||
* @param name
|
|
||||||
*/
|
|
||||||
public Plotter(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the current value for the plotted point
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public abstract int getValue();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the column name for the plotted point
|
|
||||||
*
|
|
||||||
* @return the plotted point's column name
|
|
||||||
*/
|
|
||||||
public String getColumnName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called after the website graphs have been updated
|
|
||||||
*/
|
|
||||||
public void reset() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return getColumnName().hashCode() + getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object object) {
|
|
||||||
if (!(object instanceof Plotter)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Plotter plotter = (Plotter) object;
|
|
||||||
return plotter.name.equals(name) && plotter.getValue() == getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
package com.gmail.nossr50;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
import org.bukkit.OfflinePlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
|
|
||||||
public class Users {
|
|
||||||
private static volatile Users instance;
|
|
||||||
|
|
||||||
String location = "plugins/mcMMO/FlatFileStuff/mcmmo.users";
|
|
||||||
String directory = "plugins/mcMMO/FlatFileStuff/";
|
|
||||||
String directoryb = "plugins/mcMMO/FlatFileStuff/Leaderboards/";
|
|
||||||
|
|
||||||
public static HashMap<String, PlayerProfile> players = new HashMap<String, PlayerProfile>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load users.
|
|
||||||
*/
|
|
||||||
public void loadUsers() {
|
|
||||||
new File(directory).mkdir();
|
|
||||||
new File(directoryb).mkdir();
|
|
||||||
File theDir = new File(location);
|
|
||||||
|
|
||||||
if (!theDir.exists()) {
|
|
||||||
try {
|
|
||||||
FileWriter writer = new FileWriter(theDir);
|
|
||||||
writer.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new user.
|
|
||||||
*
|
|
||||||
* @param player The player to create a user record for
|
|
||||||
*/
|
|
||||||
public static void addUser(Player player) {
|
|
||||||
if (!players.containsKey(player.getName().toLowerCase())) {
|
|
||||||
players.put(player.getName().toLowerCase(), new PlayerProfile(player.getName()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear all users.
|
|
||||||
*/
|
|
||||||
public static void clearUsers() {
|
|
||||||
players.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all PlayerProfiles.
|
|
||||||
*
|
|
||||||
* @return a HashMap containing the PlayerProfile of everyone in the database
|
|
||||||
*/
|
|
||||||
public static HashMap<String, PlayerProfile> getProfiles() {
|
|
||||||
return players;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove a user from the database.
|
|
||||||
*
|
|
||||||
* @param player The player to remove
|
|
||||||
*/
|
|
||||||
public static void removeUser(Player player) {
|
|
||||||
|
|
||||||
//Only remove PlayerProfile if user is offline and we have it in memory
|
|
||||||
if (!player.isOnline() && players.containsKey(player.getName().toLowerCase())) {
|
|
||||||
players.get(player.getName().toLowerCase()).save();
|
|
||||||
players.remove(player.getName().toLowerCase());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove a user from the DB by name.
|
|
||||||
*
|
|
||||||
* @param playerName The name of the player to remove
|
|
||||||
*/
|
|
||||||
public static void removeUserByName(String playerName) {
|
|
||||||
players.remove(playerName.toLowerCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the profile of an online player.
|
|
||||||
*
|
|
||||||
* @param player The player whose profile to retrieve
|
|
||||||
* @return the player's profile
|
|
||||||
*/
|
|
||||||
public static PlayerProfile getProfile(Player player) {
|
|
||||||
return getProfile(player.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the profile of an online player.
|
|
||||||
*
|
|
||||||
* @param player The player whose profile to retrieve
|
|
||||||
* @return the player's profile
|
|
||||||
*/
|
|
||||||
public static PlayerProfile getProfile(String playerName) {
|
|
||||||
if (players.get(playerName.toLowerCase()) != null) {
|
|
||||||
return players.get(playerName.toLowerCase());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
players.put(playerName.toLowerCase(), new PlayerProfile(playerName));
|
|
||||||
return players.get(playerName.toLowerCase());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the profile of an offline player.
|
|
||||||
*
|
|
||||||
* @param player The player whose profile to retrieve
|
|
||||||
* @return the player's profile
|
|
||||||
*/
|
|
||||||
public static PlayerProfile getOfflineProfile(OfflinePlayer player) {
|
|
||||||
return getOfflineProfile(player.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the profile of an offline player.
|
|
||||||
*
|
|
||||||
* @param playerName Name of the player whose profile to retrieve
|
|
||||||
* @return the player's profile
|
|
||||||
*/
|
|
||||||
public static PlayerProfile getOfflineProfile(String playerName) {
|
|
||||||
return new PlayerProfile(playerName, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get an instance of this class.
|
|
||||||
*
|
|
||||||
* @return an instance of this class
|
|
||||||
*/
|
|
||||||
public static Users getInstance() {
|
|
||||||
if (instance == null) {
|
|
||||||
instance = new Users();
|
|
||||||
}
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
83
src/main/java/com/gmail/nossr50/api/AbilityAPI.java
Normal file
83
src/main/java/com/gmail/nossr50/api/AbilityAPI.java
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
package com.gmail.nossr50.api;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public final class AbilityAPI {
|
||||||
|
private AbilityAPI() {}
|
||||||
|
|
||||||
|
public static boolean berserkEnabled(Player player) {
|
||||||
|
return UserManager.getPlayer(player).getAbilityMode(AbilityType.BERSERK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean gigaDrillBreakerEnabled(Player player) {
|
||||||
|
return UserManager.getPlayer(player).getAbilityMode(AbilityType.GIGA_DRILL_BREAKER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean greenTerraEnabled(Player player) {
|
||||||
|
return UserManager.getPlayer(player).getAbilityMode(AbilityType.GREEN_TERRA);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean serratedStrikesEnabled(Player player) {
|
||||||
|
return UserManager.getPlayer(player).getAbilityMode(AbilityType.SERRATED_STRIKES);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean skullSplitterEnabled(Player player) {
|
||||||
|
return UserManager.getPlayer(player).getAbilityMode(AbilityType.SKULL_SPLITTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean superBreakerEnabled(Player player) {
|
||||||
|
return UserManager.getPlayer(player).getAbilityMode(AbilityType.SUPER_BREAKER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean treeFellerEnabled(Player player) {
|
||||||
|
return UserManager.getPlayer(player).getAbilityMode(AbilityType.TREE_FELLER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isAnyAbilityEnabled(Player player) {
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
|
for (AbilityType ability : AbilityType.values()) {
|
||||||
|
if (mcMMOPlayer.getAbilityMode(ability)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void resetCooldowns(Player player) {
|
||||||
|
UserManager.getPlayer(player).getProfile().resetCooldowns();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setBerserkCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.BERSERK, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setGigaDrillBreakerCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.GIGA_DRILL_BREAKER, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setGreenTerraCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.GREEN_TERRA, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSerratedStrikesCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.SERRATED_STRIKES, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSkullSplitterCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.SKULL_SPLITTER, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setSuperBreakerCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.SUPER_BREAKER, cooldown);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setTreeFellerCooldown(Player player, long cooldown) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.TREE_FELLER, cooldown);
|
||||||
|
}
|
||||||
|
}
|
||||||
145
src/main/java/com/gmail/nossr50/api/ChatAPI.java
Normal file
145
src/main/java/com/gmail/nossr50/api/ChatAPI.java
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
package com.gmail.nossr50.api;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.chat.ChatManager;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public final class ChatAPI {
|
||||||
|
private ChatAPI() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to all members of a party
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param plugin The plugin sending the message
|
||||||
|
* @param sender The name of the sender
|
||||||
|
* @param displayName The display name of the sender
|
||||||
|
* @param party The name of the party to send to
|
||||||
|
* @param message The message to send
|
||||||
|
*/
|
||||||
|
public static void sendPartyChat(Plugin plugin, String sender, String displayName, String party, String message) {
|
||||||
|
ChatManager.handlePartyChat(plugin, mcMMO.getPartyManager().getParty(party), sender, displayName, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to all members of a party
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param plugin The plugin sending the message
|
||||||
|
* @param sender The name of the sender to display in the chat
|
||||||
|
* @param party The name of the party to send to
|
||||||
|
* @param message The message to send
|
||||||
|
*/
|
||||||
|
public static void sendPartyChat(Plugin plugin, String sender, String party, String message) {
|
||||||
|
ChatManager.handlePartyChat(plugin, mcMMO.getPartyManager().getParty(party), sender, sender, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to administrators
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param plugin The plugin sending the message
|
||||||
|
* @param sender The name of the sender
|
||||||
|
* @param displayName The display name of the sender
|
||||||
|
* @param message The message to send
|
||||||
|
*/
|
||||||
|
public static void sendAdminChat(Plugin plugin, String sender, String displayName, String message) {
|
||||||
|
ChatManager.handleAdminChat(plugin, sender, displayName, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to administrators
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param plugin The plugin sending the message
|
||||||
|
* @param sender The name of the sender to display in the chat
|
||||||
|
* @param message The message to send
|
||||||
|
*/
|
||||||
|
public static void sendAdminChat(Plugin plugin, String sender, String message) {
|
||||||
|
ChatManager.handleAdminChat(plugin, sender, sender, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a player is currently talking in party chat.
|
||||||
|
*
|
||||||
|
* @param player The player to check
|
||||||
|
* @return true if the player is using party chat, false otherwise
|
||||||
|
*/
|
||||||
|
public static boolean isUsingPartyChat(Player player) {
|
||||||
|
return isUsingPartyChat(player.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a player is currently talking in party chat.
|
||||||
|
*
|
||||||
|
* @param playerName The name of the player to check
|
||||||
|
* @return true if the player is using party chat, false otherwise
|
||||||
|
*/
|
||||||
|
public static boolean isUsingPartyChat(String playerName) {
|
||||||
|
return UserManager.getPlayer(playerName).getPartyChatMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a player is currently talking in admin chat.
|
||||||
|
*
|
||||||
|
* @param player The player to check
|
||||||
|
* @return true if the player is using admin chat, false otherwise
|
||||||
|
*/
|
||||||
|
public static boolean isUsingAdminChat(Player player) {
|
||||||
|
return isUsingAdminChat(player.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a player is currently talking in admin chat.
|
||||||
|
*
|
||||||
|
* @param playerName The name of the player to check
|
||||||
|
* @return true if the player is using admin chat, false otherwise
|
||||||
|
*/
|
||||||
|
public static boolean isUsingAdminChat(String playerName) {
|
||||||
|
return UserManager.getPlayer(playerName).getAdminChatMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle the party chat mode of a player.
|
||||||
|
*
|
||||||
|
* @param player The player to toggle party chat on.
|
||||||
|
*/
|
||||||
|
public static void togglePartyChat(Player player) {
|
||||||
|
togglePartyChat(player.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle the party chat mode of a player.
|
||||||
|
*
|
||||||
|
* @param playerName The name of the player to toggle party chat on.
|
||||||
|
*/
|
||||||
|
public static void togglePartyChat(String playerName) {
|
||||||
|
UserManager.getPlayer(playerName).setPartyChat(!isUsingPartyChat(playerName));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle the admin chat mode of a player.
|
||||||
|
*
|
||||||
|
* @param player The player to toggle admin chat on.
|
||||||
|
*/
|
||||||
|
public static void toggleAdminChat(Player player) {
|
||||||
|
toggleAdminChat(player.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle the admin chat mode of a player.
|
||||||
|
*
|
||||||
|
* @param playerName The name of the player to toggle party chat on.
|
||||||
|
*/
|
||||||
|
public static void toggleAdminChat(String playerName) {
|
||||||
|
UserManager.getPlayer(playerName).setAdminChat(!isUsingAdminChat(playerName));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,136 +1,730 @@
|
|||||||
package com.gmail.nossr50.api;
|
package com.gmail.nossr50.api;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
import org.bukkit.entity.Player;
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
|
||||||
import com.gmail.nossr50.skills.Skills;
|
import com.gmail.nossr50.api.exceptions.InvalidPlayerException;
|
||||||
|
import com.gmail.nossr50.api.exceptions.InvalidSkillException;
|
||||||
public class ExperienceAPI {
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
/**
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
* Check the XP of a player. This should be called after giving XP to process level-ups.
|
import com.gmail.nossr50.skills.child.FamilyTree;
|
||||||
*
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
* @param player The player to check
|
|
||||||
* @param skillType The skill to check
|
public final class ExperienceAPI {
|
||||||
*/
|
private ExperienceAPI() {}
|
||||||
private void checkXP(Player player, SkillType skillType) {
|
|
||||||
if (skillType.equals(SkillType.ALL)) {
|
/**
|
||||||
Skills.XpCheckAll(player);
|
* Adds raw XP to the player.
|
||||||
}
|
* </br>
|
||||||
else {
|
* This function is designed for API usage.
|
||||||
Skills.XpCheckSkill(skillType, player);
|
*
|
||||||
}
|
* @param player The player to add XP to
|
||||||
}
|
* @param skillType The skill to add XP to
|
||||||
|
* @param XP The amount of XP to add
|
||||||
/**
|
*
|
||||||
* Adds XP to the player, doesn't calculate for XP Rate or other modifiers.
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* </br>
|
*/
|
||||||
* This function is designed for API usage.
|
public static void addRawXP(Player player, String skillType, int XP) {
|
||||||
*
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
* @param player The player to add XP to
|
|
||||||
* @param skillType The skill to add XP to
|
if (skill == null) {
|
||||||
* @param XP The amount of XP to add
|
throw new InvalidSkillException();
|
||||||
*/
|
}
|
||||||
public void addRawXP(Player player, SkillType skillType, int XP) {
|
|
||||||
Users.getProfile(player).addXPOverride(skillType, XP);
|
UserManager.getPlayer(player).applyXpGain(skill, XP);
|
||||||
checkXP(player, skillType);
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Adds raw XP to an offline player.
|
||||||
* Adds XP to the player, calculates for XP Rate but not skill modifiers.
|
* </br>
|
||||||
* </br>
|
* This function is designed for API usage.
|
||||||
* This function is designed for API usage.
|
*
|
||||||
*
|
* @param playerName The player to add XP to
|
||||||
* @param player The player to add XP to
|
* @param skillType The skill to add XP to
|
||||||
* @param skillType The skill to add XP to
|
* @param XP The amount of XP to add
|
||||||
* @param XP The amount of XP to add
|
*
|
||||||
*/
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
public void addMultipliedXP(Player player, SkillType skillType, int XP) {
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
Users.getProfile(player).addXPOverrideBonus(skillType, XP);
|
*/
|
||||||
checkXP(player, skillType);
|
public static void addRawXPOffline(String playerName, String skillType, int XP) {
|
||||||
}
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
/**
|
if (skill == null) {
|
||||||
* Adds XP to the player, calculates for XP Rate and skill modifiers.
|
throw new InvalidSkillException();
|
||||||
* </br>
|
}
|
||||||
* This function is designed for API usage.
|
|
||||||
*
|
addOfflineXP(playerName, skill, XP);
|
||||||
* @param player The player to add XP to
|
}
|
||||||
* @param skillType The skill to add XP to
|
|
||||||
* @param XP The amount of XP to add
|
/**
|
||||||
*/
|
* Adds XP to the player, calculates for XP Rate only.
|
||||||
public void addXP(Player player, SkillType skillType, int XP) {
|
* </br>
|
||||||
Users.getProfile(player).addXP(skillType, XP);
|
* This function is designed for API usage.
|
||||||
checkXP(player, skillType);
|
*
|
||||||
}
|
* @param player The player to add XP to
|
||||||
|
* @param skillType The skill to add XP to
|
||||||
/**
|
* @param XP The amount of XP to add
|
||||||
* Get the amount of XP a player has in a specific skill.
|
*
|
||||||
* </br>
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* This function is designed for API usage.
|
*/
|
||||||
*
|
public static void addMultipliedXP(Player player, String skillType, int XP) {
|
||||||
* @param player The player to get XP for
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
* @param skillType The skill to get XP for
|
|
||||||
* @return the amount of XP in a given skill
|
if (skill == null) {
|
||||||
*/
|
throw new InvalidSkillException();
|
||||||
public int getXP(Player player, SkillType skillType) {
|
}
|
||||||
return Users.getProfile(player).getSkillXpLevel(skillType);
|
|
||||||
}
|
UserManager.getPlayer(player).applyXpGain(skill, (int) (XP * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
|
}
|
||||||
/**
|
|
||||||
* Get the amount of XP left before leveling up.
|
/**
|
||||||
* </br>
|
* Adds XP to an offline player, calculates for XP Rate only.
|
||||||
* This function is designed for API usage.
|
* </br>
|
||||||
*
|
* This function is designed for API usage.
|
||||||
* @param player The player to get the XP amount for
|
*
|
||||||
* @param skillType The skill to get the XP amount for
|
* @param playerName The player to add XP to
|
||||||
* @return the amount of XP left before leveling up a specifc skill
|
* @param skillType The skill to add XP to
|
||||||
*/
|
* @param XP The amount of XP to add
|
||||||
public int getXPToNextLevel(Player player, SkillType skillType) {
|
*
|
||||||
return Users.getProfile(player).getXpToLevel(skillType);
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
}
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
*/
|
||||||
/**
|
public static void addMultipliedXPOffline(String playerName, String skillType, int XP) {
|
||||||
* Add levels to a skill.
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
* </br>
|
|
||||||
* This function is designed for API usage.
|
if (skill == null) {
|
||||||
*
|
throw new InvalidSkillException();
|
||||||
* @param player The player to add levels to
|
}
|
||||||
* @param skillType Type of skill to add levels to
|
|
||||||
* @param levels Number of levels to add
|
addOfflineXP(playerName, skill, (int) (XP * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
* @param notify True if this should fire a level up notification, false otherwise.
|
}
|
||||||
*/
|
|
||||||
public void addLevel(Player player, SkillType skillType, int levels, boolean notify) {
|
/**
|
||||||
Users.getProfile(player).addLevels(skillType, levels);
|
* Adds XP to the player, calculates for XP Rate and skill modifier.
|
||||||
|
* </br>
|
||||||
if (notify) {
|
* This function is designed for API usage.
|
||||||
checkXP(player, skillType);
|
*
|
||||||
}
|
* @param player The player to add XP to
|
||||||
}
|
* @param skillType The skill to add XP to
|
||||||
|
* @param XP The amount of XP to add
|
||||||
/**
|
*
|
||||||
* Get the level a player has in a specific skill.
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* </br>
|
*/
|
||||||
* This function is designed for API usage.
|
public static void addModifiedXP(Player player, String skillType, int XP) {
|
||||||
*
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
* @param player The player to get the level for
|
|
||||||
* @param skillType The skill to get the level for
|
if (skill == null) {
|
||||||
* @return the level of a given skill
|
throw new InvalidSkillException();
|
||||||
*/
|
}
|
||||||
public int getLevel(Player player, SkillType skillType) {
|
|
||||||
return Users.getProfile(player).getSkillLevel(skillType);
|
UserManager.getPlayer(player).applyXpGain(skill, (int) (XP / skill.getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the power level of a player.
|
* Adds XP to an offline player, calculates for XP Rate and skill modifier.
|
||||||
* </br>
|
* </br>
|
||||||
* This function is designed for API usage.
|
* This function is designed for API usage.
|
||||||
*
|
*
|
||||||
* @param player The player to get the power level for
|
* @param playerName The player to add XP to
|
||||||
* @return the power level of the player
|
* @param skillType The skill to add XP to
|
||||||
*/
|
* @param XP The amount of XP to add
|
||||||
public int getPowerLevel(Player player) {
|
*
|
||||||
return Users.getProfile(player).getPowerLevel();
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
}
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
}
|
*/
|
||||||
|
public static void addModifiedXPOffline(String playerName, String skillType, int XP) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
addOfflineXP(playerName, skill, (int) (XP / skill.getXpModifier() * Config.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds XP to the player, calculates for XP Rate, skill modifiers and perks. May be shared with the party.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to add XP to
|
||||||
|
* @param skillType The skill to add XP to
|
||||||
|
* @param XP The amount of XP to add
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
*/
|
||||||
|
public static void addXP(Player player, String skillType, int XP) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).beginXpGain(skill, XP);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the amount of XP a player has in a specific skill.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to get XP for
|
||||||
|
* @param skillType The skill to get XP for
|
||||||
|
* @return the amount of XP in a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static int getXP(Player player, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return UserManager.getPlayer(player).getProfile().getSkillXpLevel(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the amount of XP an offline player has in a specific skill.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to get XP for
|
||||||
|
* @param skillType The skill to get XP for
|
||||||
|
* @return the amount of XP in a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static int getOfflineXP(String playerName, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return getOfflineProfile(playerName).getSkillXpLevel(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the raw amount of XP a player has in a specific skill.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to get XP for
|
||||||
|
* @param skillType The skill to get XP for
|
||||||
|
* @return the amount of XP in a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static float getXPRaw(Player player, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return UserManager.getPlayer(player).getProfile().getSkillXpLevelRaw(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the raw amount of XP an offline player has in a specific skill.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to get XP for
|
||||||
|
* @param skillType The skill to get XP for
|
||||||
|
* @return the amount of XP in a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static float getOfflineXPRaw(String playerName, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return getOfflineProfile(playerName).getSkillXpLevelRaw(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the total amount of XP needed to reach the next level.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to get the XP amount for
|
||||||
|
* @param skillType The skill to get the XP amount for
|
||||||
|
* @return the total amount of XP needed to reach the next level
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static int getXPToNextLevel(Player player, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return UserManager.getPlayer(player).getProfile().getXpToLevel(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the total amount of XP an offline player needs to reach the next level.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to get XP for
|
||||||
|
* @param skillType The skill to get XP for
|
||||||
|
* @return the total amount of XP needed to reach the next level
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static int getOfflineXPToNextLevel(String playerName, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
return getOfflineProfile(playerName).getXpToLevel(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the amount of XP remaining until the next level.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to get the XP amount for
|
||||||
|
* @param skillType The skill to get the XP amount for
|
||||||
|
* @return the amount of XP remaining until the next level
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static int getXPRemaining(Player player, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerProfile profile = UserManager.getPlayer(player).getProfile();
|
||||||
|
|
||||||
|
return profile.getXpToLevel(skill) - profile.getSkillXpLevel(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the amount of XP an offline player has left before leveling up.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to get XP for
|
||||||
|
* @param skillType The skill to get XP for
|
||||||
|
* @return the amount of XP needed to reach the next level
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static int getOfflineXPRemaining(String playerName, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
|
|
||||||
|
return profile.getXpToLevel(skill) - profile.getSkillXpLevel(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add levels to a skill.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to add levels to
|
||||||
|
* @param skillType Type of skill to add levels to
|
||||||
|
* @param levels Number of levels to add
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
*/
|
||||||
|
public static void addLevel(Player player, String skillType, int levels) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).getProfile().addLevels(skill, levels);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add levels to a skill for an offline player.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to add levels to
|
||||||
|
* @param skillType Type of skill to add levels to
|
||||||
|
* @param levels Number of levels to add
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
*/
|
||||||
|
public static void addLevelOffline(String playerName, String skillType, int levels) {
|
||||||
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
Set<SkillType> parentSkills = FamilyTree.getParents(skill);
|
||||||
|
|
||||||
|
for (SkillType parentSkill : parentSkills) {
|
||||||
|
profile.addLevels(parentSkill, (levels / parentSkills.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
profile.save();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
profile.addLevels(skill, levels);
|
||||||
|
profile.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the level a player has in a specific skill.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to get the level for
|
||||||
|
* @param skillType The skill to get the level for
|
||||||
|
* @return the level of a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
*/
|
||||||
|
public static int getLevel(Player player, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return UserManager.getPlayer(player).getProfile().getSkillLevel(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the level an offline player has in a specific skill.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to get the level for
|
||||||
|
* @param skillType The skill to get the level for
|
||||||
|
* @return the level of a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
*/
|
||||||
|
public static int getLevelOffline(String playerName, String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return getOfflineProfile(playerName).getSkillLevel(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the power level of a player.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to get the power level for
|
||||||
|
* @return the power level of the player
|
||||||
|
*/
|
||||||
|
public static int getPowerLevel(Player player) {
|
||||||
|
return UserManager.getPlayer(player).getPowerLevel();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the power level of an offline player.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to get the power level for
|
||||||
|
* @return the power level of the player
|
||||||
|
*
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
*/
|
||||||
|
public static int getPowerLevelOffline(String playerName) {
|
||||||
|
int powerLevel = 0;
|
||||||
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
|
|
||||||
|
for (SkillType type : SkillType.nonChildSkills()) {
|
||||||
|
powerLevel += profile.getSkillLevel(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
return powerLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the level cap of a specific skill.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param skillType The skill to get the level cap for
|
||||||
|
* @return the level cap of a given skill
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
*/
|
||||||
|
public static int getLevelCap(String skillType) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Config.getInstance().getLevelCap(skill);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the power level cap.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @return the overall power level cap
|
||||||
|
*/
|
||||||
|
public static int getPowerLevelCap() {
|
||||||
|
return Config.getInstance().getPowerLevelCap();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the level of a player in a specific skill type.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to set the level of
|
||||||
|
* @param skillType The skill to set the level for
|
||||||
|
* @param skillLevel The value to set the level to
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
*/
|
||||||
|
public static void setLevel(Player player, String skillType, int skillLevel) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).getProfile().modifySkill(skill, skillLevel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the level of an offline player in a specific skill type.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to set the level of
|
||||||
|
* @param skillType The skill to set the level for
|
||||||
|
* @param skillLevel The value to set the level to
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
*/
|
||||||
|
public static void setLevelOffline(String playerName, String skillType, int skillLevel) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
getOfflineProfile(playerName).modifySkill(skill, skillLevel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the XP of a player in a specific skill type.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to set the XP of
|
||||||
|
* @param skillType The skill to set the XP for
|
||||||
|
* @param newValue The value to set the XP to
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static void setXP(Player player, String skillType, int newValue) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).getProfile().setSkillXpLevel(skill, newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the XP of an offline player in a specific skill type.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to set the XP of
|
||||||
|
* @param skillType The skill to set the XP for
|
||||||
|
* @param newValue The value to set the XP to
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static void setXPOffline(String playerName, String skillType, int newValue) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
getOfflineProfile(playerName).setSkillXpLevel(skill, newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes XP from a player in a specific skill type.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to change the XP of
|
||||||
|
* @param skillType The skill to change the XP for
|
||||||
|
* @param xp The amount of XP to remove
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static void removeXP(Player player, String skillType, int xp) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(player).getProfile().removeXp(skill, xp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes XP from an offline player in a specific skill type.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param playerName The player to change the XP of
|
||||||
|
* @param skillType The skill to change the XP for
|
||||||
|
* @param xp The amount of XP to remove
|
||||||
|
*
|
||||||
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
|
*/
|
||||||
|
public static void removeXPOffline(String playerName, String skillType, int xp) {
|
||||||
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
|
if (skill == null) {
|
||||||
|
throw new InvalidSkillException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
throw new UnsupportedOperationException("Child skills do not have XP");
|
||||||
|
}
|
||||||
|
|
||||||
|
getOfflineProfile(playerName).removeXp(skill, xp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add XP to an offline player.
|
||||||
|
*
|
||||||
|
* @param playerName The player to check
|
||||||
|
* @param skillType The skill to check
|
||||||
|
* @param XP The amount of XP to award.
|
||||||
|
*/
|
||||||
|
private static void addOfflineXP(String playerName, SkillType skill, int XP) {
|
||||||
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
|
|
||||||
|
if (skill.isChildSkill()) {
|
||||||
|
Set<SkillType> parentSkills = FamilyTree.getParents(skill);
|
||||||
|
|
||||||
|
for (SkillType parentSkill : parentSkills) {
|
||||||
|
profile.setSkillXpLevel(parentSkill, profile.getSkillLevel(parentSkill) + (XP / parentSkills.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
profile.save();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
profile.setSkillXpLevel(skill, profile.getSkillXpLevel(skill) + XP);
|
||||||
|
profile.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PlayerProfile getOfflineProfile(String playerName) {
|
||||||
|
PlayerProfile profile = new PlayerProfile(playerName, false);
|
||||||
|
|
||||||
|
if (!profile.isLoaded()) {
|
||||||
|
throw new InvalidPlayerException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return profile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,125 +1,179 @@
|
|||||||
package com.gmail.nossr50.api;
|
package com.gmail.nossr50.api;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.util.ArrayList;
|
||||||
import java.io.FileReader;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.ArrayList;
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
public class PartyAPI {
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
/**
|
public final class PartyAPI {
|
||||||
* Get the name of the party a player is in.
|
private PartyAPI() {}
|
||||||
* </br>
|
|
||||||
* This function is designed for API usage.
|
/**
|
||||||
*
|
* Get the name of the party a player is in.
|
||||||
* @param player The player to check the party name of
|
* </br>
|
||||||
* @return the name of the player's party
|
* This function is designed for API usage.
|
||||||
*/
|
*
|
||||||
public String getPartyName(Player player) {
|
* @param player The player to check the party name of
|
||||||
return Users.getProfile(player).getParty();
|
* @return the name of the player's party, or null if not in a party
|
||||||
}
|
*/
|
||||||
|
public static String getPartyName(Player player) {
|
||||||
/**
|
if (!inParty(player)) {
|
||||||
* Checks if a player is in a party.
|
return null;
|
||||||
* </br>
|
}
|
||||||
* This function is designed for API usage.
|
|
||||||
*
|
return UserManager.getPlayer(player).getParty().getName();
|
||||||
* @param player The player to check
|
}
|
||||||
* @return true if the player is in a party, false otherwise
|
|
||||||
*/
|
/**
|
||||||
public boolean inParty(Player player) {
|
* Checks if a player is in a party.
|
||||||
return Users.getProfile(player).inParty();
|
* </br>
|
||||||
}
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
/**
|
* @param player The player to check
|
||||||
* Check if two players are in the same party.
|
* @return true if the player is in a party, false otherwise
|
||||||
* </br>
|
*/
|
||||||
* This function is designed for API usage.
|
public static boolean inParty(Player player) {
|
||||||
*
|
return UserManager.getPlayer(player).inParty();
|
||||||
* @param playera The first player to check
|
}
|
||||||
* @param playerb The second player to check
|
|
||||||
* @return true if the two players are in the same party, false otherwise
|
/**
|
||||||
*/
|
* Check if two players are in the same party.
|
||||||
public boolean inSameParty(Player playera, Player playerb) {
|
* </br>
|
||||||
return Party.getInstance().inSameParty(playera, playerb);
|
* This function is designed for API usage.
|
||||||
}
|
*
|
||||||
|
* @param playera The first player to check
|
||||||
/**
|
* @param playerb The second player to check
|
||||||
* Get a list of all current party names.
|
* @return true if the two players are in the same party, false otherwise
|
||||||
* </br>
|
*/
|
||||||
* This function is designed for API usage.
|
public static boolean inSameParty(Player playera, Player playerb) {
|
||||||
*
|
return mcMMO.getPartyManager().inSameParty(playera, playerb);
|
||||||
* @return the list of parties.
|
}
|
||||||
*/
|
|
||||||
public ArrayList<String> getParties() {
|
/**
|
||||||
String location = "plugins/mcMMO/mcmmo.users";
|
* Get a list of all current parties.
|
||||||
ArrayList<String> parties = new ArrayList<String>();
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
try {
|
*
|
||||||
|
* @return the list of parties.
|
||||||
//Open the users file
|
*/
|
||||||
FileReader file = new FileReader(location);
|
public static List<Party> getParties() {
|
||||||
BufferedReader in = new BufferedReader(file);
|
return mcMMO.getPartyManager().getParties();
|
||||||
String line = "";
|
}
|
||||||
|
|
||||||
while((line = in.readLine()) != null) {
|
/**
|
||||||
String[] character = line.split(":");
|
* Add a player to a party.
|
||||||
String theparty = null;
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
//Party
|
*
|
||||||
if (character.length > 3) {
|
* @param player The player to add to the party
|
||||||
theparty = character[3];
|
* @param partyName The party to add the player to
|
||||||
}
|
*/
|
||||||
|
public static void addToParty(Player player, String partyName) {
|
||||||
if (!parties.contains(theparty)) {
|
Party party = mcMMO.getPartyManager().getParty(partyName);
|
||||||
parties.add(theparty);
|
|
||||||
}
|
if (party == null) {
|
||||||
}
|
party = new Party();
|
||||||
in.close();
|
party.setName(partyName);
|
||||||
}
|
party.setLeader(player.getName());
|
||||||
catch (Exception e) {
|
}
|
||||||
Bukkit.getLogger().severe("Exception while reading " + location + " (Are you sure you formatted it correctly?)" + e.toString());
|
|
||||||
}
|
mcMMO.getPartyManager().addToParty(player, party);
|
||||||
return parties;
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Remove a player from a party.
|
||||||
* Get a list of all players in this player's party.
|
* </br>
|
||||||
* </br>
|
* This function is designed for API usage.
|
||||||
* This function is designed for API usage.
|
*
|
||||||
*
|
* @param player The player to remove
|
||||||
* @param player The player to check
|
*/
|
||||||
* @return all the players in the player's party
|
public static void removeFromParty(Player player) {
|
||||||
*/
|
mcMMO.getPartyManager().removeFromParty(player, UserManager.getPlayer(player).getParty());
|
||||||
public ArrayList<Player> getPartyMembers(Player player) {
|
}
|
||||||
return Party.getInstance().getPartyMembers(player);
|
|
||||||
}
|
/**
|
||||||
|
* Get the leader of a party.
|
||||||
/**
|
* </br>
|
||||||
* Add a player to a party.
|
* This function is designed for API usage.
|
||||||
* </br>
|
*
|
||||||
* This function is designed for API usage.
|
* @param partyName The party name
|
||||||
*
|
* @return the leader of the party
|
||||||
* @param player The player to add to the party
|
*/
|
||||||
* @param partyName The party to add the player to
|
public static String getPartyLeader(String partyName) {
|
||||||
*/
|
return mcMMO.getPartyManager().getPartyLeader(partyName);
|
||||||
public void addToParty(Player player, String partyName) {
|
}
|
||||||
Party.getInstance().addToParty(player, Users.getProfile(player), partyName, false, null);
|
|
||||||
}
|
/**
|
||||||
|
* Set the leader of a party.
|
||||||
/**
|
* </br>
|
||||||
* Remove a player from a party.
|
* This function is designed for API usage.
|
||||||
* </br>
|
*
|
||||||
* This function is designed for API usage.
|
* @param partyName The name of the party to set the leader of
|
||||||
*
|
* @param player The player to set as leader
|
||||||
* @param player The player to remove
|
*/
|
||||||
*/
|
public static void setPartyLeader(String partyName, String player) {
|
||||||
public void removeFromParty(Player player) {
|
mcMMO.getPartyManager().setPartyLeader(player, mcMMO.getPartyManager().getParty(partyName));
|
||||||
Party.getInstance().removeFromParty(player, Users.getProfile(player));
|
}
|
||||||
}
|
|
||||||
}
|
/**
|
||||||
|
* Get a list of all players in this player's party.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to check
|
||||||
|
* @return all the players in the player's party
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public static List<OfflinePlayer> getOnlineAndOfflineMembers(Player player) {
|
||||||
|
List<OfflinePlayer> members = new ArrayList<OfflinePlayer>();
|
||||||
|
|
||||||
|
for (String memberName : mcMMO.getPartyManager().getAllMembers(UserManager.getPlayer(player).getParty())) {
|
||||||
|
OfflinePlayer member = mcMMO.p.getServer().getOfflinePlayer(memberName);
|
||||||
|
members.add(member);
|
||||||
|
}
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of all player names in this player's party.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to check
|
||||||
|
* @return all the player names in the player's party
|
||||||
|
*/
|
||||||
|
public static LinkedHashSet<String> getMembers(Player player) {
|
||||||
|
return mcMMO.getPartyManager().getAllMembers(UserManager.getPlayer(player).getParty());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of all online players in this party.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param partyName The party to check
|
||||||
|
* @return all online players in this party
|
||||||
|
*/
|
||||||
|
public static List<Player> getOnlineMembers(String partyName) {
|
||||||
|
return mcMMO.getPartyManager().getOnlineMembers(partyName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of all online players in this player's party.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param player The player to check
|
||||||
|
* @return all online players in the player's party
|
||||||
|
*/
|
||||||
|
public static List<Player> getOnlineMembers(Player player) {
|
||||||
|
return mcMMO.getPartyManager().getOnlineMembers(UserManager.getPlayer(player).getParty().getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
29
src/main/java/com/gmail/nossr50/api/SpoutHudAPI.java
Normal file
29
src/main/java/com/gmail/nossr50/api/SpoutHudAPI.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package com.gmail.nossr50.api;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.spout.SpoutConfig;
|
||||||
|
import com.gmail.nossr50.datatypes.spout.huds.HudType;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class SpoutHudAPI {
|
||||||
|
private SpoutHudAPI() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable the mcMMO XP bar for a player.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*/
|
||||||
|
public static void disableXpBar(Player player) {
|
||||||
|
UserManager.getPlayer(player).getProfile().setHudType(HudType.DISABLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable the mcMMO XP bar for the server.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*/
|
||||||
|
public static void disableXpBar() {
|
||||||
|
SpoutConfig.getInstance().setXPBarEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
53
src/main/java/com/gmail/nossr50/api/SpoutToolsAPI.java
Normal file
53
src/main/java/com/gmail/nossr50/api/SpoutToolsAPI.java
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
package com.gmail.nossr50.api;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.skills.ToolType;
|
||||||
|
|
||||||
|
public final class SpoutToolsAPI {
|
||||||
|
public static final List<ItemStack> spoutSwords = new ArrayList<ItemStack>();
|
||||||
|
public static final List<ItemStack> spoutAxes = new ArrayList<ItemStack>();
|
||||||
|
public static final List<ItemStack> spoutPickaxes = new ArrayList<ItemStack>();
|
||||||
|
public static final List<ItemStack> spoutHoes = new ArrayList<ItemStack>();
|
||||||
|
public static final List<ItemStack> spoutShovels = new ArrayList<ItemStack>();
|
||||||
|
|
||||||
|
private SpoutToolsAPI() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a custom Spout tool to mcMMO for XP gain & ability use.
|
||||||
|
* </br>
|
||||||
|
* This function is designed for API usage.
|
||||||
|
*
|
||||||
|
* @param spoutTool The tool to add
|
||||||
|
* @param type The type of tool to add
|
||||||
|
*/
|
||||||
|
public static void addCustomTool(ItemStack spoutTool, ToolType type) {
|
||||||
|
switch (type) {
|
||||||
|
case AXE:
|
||||||
|
spoutAxes.add(spoutTool);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HOE:
|
||||||
|
spoutHoes.add(spoutTool);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PICKAXE:
|
||||||
|
spoutPickaxes.add(spoutTool);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHOVEL:
|
||||||
|
spoutShovels.add(spoutTool);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SWORD:
|
||||||
|
spoutSwords.add(spoutTool);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.gmail.nossr50.api.exceptions;
|
||||||
|
|
||||||
|
public class InvalidPlayerException extends RuntimeException {
|
||||||
|
private static final long serialVersionUID = 907213002618581385L;
|
||||||
|
|
||||||
|
public InvalidPlayerException() {
|
||||||
|
super("That player does not exist in the database.");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.gmail.nossr50.api.exceptions;
|
||||||
|
|
||||||
|
public class InvalidSkillException extends RuntimeException {
|
||||||
|
private static final long serialVersionUID = 942705284195791157L;
|
||||||
|
|
||||||
|
public InvalidSkillException() {
|
||||||
|
super("That is not a valid skill.");
|
||||||
|
}
|
||||||
|
}
|
||||||
78
src/main/java/com/gmail/nossr50/chat/ChatManager.java
Normal file
78
src/main/java/com/gmail/nossr50/chat/ChatManager.java
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
package com.gmail.nossr50.chat;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.events.chat.McMMOAdminChatEvent;
|
||||||
|
import com.gmail.nossr50.events.chat.McMMOPartyChatEvent;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
|
||||||
|
public final class ChatManager {
|
||||||
|
public ChatManager() {}
|
||||||
|
|
||||||
|
public static void handleAdminChat(Plugin plugin, String playerName, String displayName, String message, boolean isAsync) {
|
||||||
|
McMMOAdminChatEvent chatEvent = new McMMOAdminChatEvent(plugin, playerName, displayName, message, isAsync);
|
||||||
|
mcMMO.p.getServer().getPluginManager().callEvent(chatEvent);
|
||||||
|
|
||||||
|
if (chatEvent.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Config.getInstance().getAdminDisplayNames()) {
|
||||||
|
displayName = chatEvent.getDisplayName();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
displayName = chatEvent.getSender();
|
||||||
|
}
|
||||||
|
|
||||||
|
String adminMessage = chatEvent.getMessage();
|
||||||
|
|
||||||
|
mcMMO.p.getServer().broadcast(LocaleLoader.getString("Commands.AdminChat.Prefix", displayName) + adminMessage, "mcmmo.chat.adminchat");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handleAdminChat(Plugin plugin, String senderName, String message) {
|
||||||
|
handleAdminChat(plugin, senderName, senderName, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handleAdminChat(Plugin plugin, String playerName, String displayName, String message) {
|
||||||
|
handleAdminChat(plugin, playerName, displayName, message, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handlePartyChat(Plugin plugin, Party party, String playerName, String displayName, String message, boolean isAsync) {
|
||||||
|
String partyName = party.getName();
|
||||||
|
|
||||||
|
McMMOPartyChatEvent chatEvent = new McMMOPartyChatEvent(plugin, playerName, displayName, partyName, message, isAsync);
|
||||||
|
mcMMO.p.getServer().getPluginManager().callEvent(chatEvent);
|
||||||
|
|
||||||
|
if (chatEvent.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Config.getInstance().getPartyDisplayNames()) {
|
||||||
|
displayName = chatEvent.getDisplayName();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
displayName = chatEvent.getSender();
|
||||||
|
}
|
||||||
|
|
||||||
|
String partyMessage = chatEvent.getMessage();
|
||||||
|
|
||||||
|
for (Player member : party.getOnlineMembers()) {
|
||||||
|
member.sendMessage(LocaleLoader.getString("Commands.Party.Chat.Prefix", displayName) + partyMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMO.p.getLogger().info("[P](" + partyName + ")" + "<" + ChatColor.stripColor(displayName) + "> " + partyMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handlePartyChat(Plugin plugin, Party party, String senderName, String message) {
|
||||||
|
handlePartyChat(plugin, party, senderName, senderName, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handlePartyChat(Plugin plugin, Party party, String playerName, String displayName, String message) {
|
||||||
|
handlePartyChat(plugin, party, playerName, displayName, message, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
70
src/main/java/com/gmail/nossr50/chat/ChatMode.java
Normal file
70
src/main/java/com/gmail/nossr50/chat/ChatMode.java
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
package com.gmail.nossr50.chat;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
|
||||||
|
public enum ChatMode {
|
||||||
|
ADMIN(LocaleLoader.getString("Commands.AdminChat.On"), LocaleLoader.getString("Commands.AdminChat.Off")),
|
||||||
|
PARTY(LocaleLoader.getString("Commands.Party.Chat.On"), LocaleLoader.getString("Commands.Party.Chat.Off"));
|
||||||
|
|
||||||
|
private String enabledMessage;
|
||||||
|
private String disabledMessage;
|
||||||
|
|
||||||
|
private ChatMode(String enabledMessage, String disabledMessage) {
|
||||||
|
this.enabledMessage = enabledMessage;
|
||||||
|
this.disabledMessage = disabledMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled(McMMOPlayer mcMMOPlayer) {
|
||||||
|
switch (this) {
|
||||||
|
case ADMIN:
|
||||||
|
return mcMMOPlayer.getAdminChatMode();
|
||||||
|
|
||||||
|
case PARTY:
|
||||||
|
return mcMMOPlayer.getPartyChatMode();
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disable(McMMOPlayer mcMMOPlayer) {
|
||||||
|
switch (this) {
|
||||||
|
case ADMIN:
|
||||||
|
mcMMOPlayer.setAdminChat(false);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case PARTY:
|
||||||
|
mcMMOPlayer.setPartyChat(false);
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void enable(McMMOPlayer mcMMOPlayer) {
|
||||||
|
switch (this) {
|
||||||
|
case ADMIN:
|
||||||
|
mcMMOPlayer.setAdminChat(true);
|
||||||
|
mcMMOPlayer.setPartyChat(false);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case PARTY:
|
||||||
|
mcMMOPlayer.setPartyChat(true);
|
||||||
|
mcMMOPlayer.setAdminChat(false);
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEnabledMessage() {
|
||||||
|
return enabledMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisabledMessage() {
|
||||||
|
return disabledMessage;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,138 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands;
|
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.skills.Skills;
|
|
||||||
|
|
||||||
public class CommandHelper {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks for command permissions.
|
|
||||||
*
|
|
||||||
* @param sender The command sender
|
|
||||||
* @param permission The permission to check
|
|
||||||
* @return true if the sender is a player without permissions, false otherwise
|
|
||||||
*/
|
|
||||||
public static boolean noCommandPermissions(CommandSender sender, String permission) {
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (player != null && !mcPermissions.getInstance().permission(player, permission)) {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print out details on Gathering skills. Only for online players.
|
|
||||||
*
|
|
||||||
* @param inspect The player to retrieve stats for
|
|
||||||
* @param display The sender to display stats to
|
|
||||||
* @param online true if the player to retrieve stats for is online, false otherwise
|
|
||||||
*/
|
|
||||||
public static void printGatheringSkills(Player inspect, CommandSender display) {
|
|
||||||
if (Skills.hasGatheringSkills(inspect)) {
|
|
||||||
PlayerProfile PP = Users.getProfile(inspect);
|
|
||||||
|
|
||||||
display.sendMessage(mcLocale.getString("Stats.GatheringHeader"));
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().excavation(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.ExcavationSkill"), PP.getSkillLevel(SkillType.EXCAVATION), PP.getSkillXpLevel(SkillType.EXCAVATION), PP.getXpToLevel(SkillType.EXCAVATION) }));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().fishing(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.FishingSkill"), PP.getSkillLevel(SkillType.FISHING), PP.getSkillXpLevel(SkillType.FISHING), PP.getXpToLevel(SkillType.FISHING) }));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().herbalism(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.HerbalismSkill"), PP.getSkillLevel(SkillType.HERBALISM), PP.getSkillXpLevel(SkillType.HERBALISM), PP.getXpToLevel(SkillType.HERBALISM) }));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().mining(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.MiningSkill"), PP.getSkillLevel(SkillType.MINING), PP.getSkillXpLevel(SkillType.MINING), PP.getXpToLevel(SkillType.MINING) }));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().woodcutting(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PP.getSkillLevel(SkillType.WOODCUTTING), PP.getSkillXpLevel(SkillType.WOODCUTTING), PP.getXpToLevel(SkillType.WOODCUTTING) }));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void printGatheringSkills(Player player) {
|
|
||||||
printGatheringSkills(player, player);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print out details on Combat skills. Only for online players.
|
|
||||||
*
|
|
||||||
* @param inspect The player to retrieve stats for
|
|
||||||
* @param display The sender to display stats to
|
|
||||||
* @param online true if the player to retrieve stats for is online, false otherwise
|
|
||||||
*/
|
|
||||||
public static void printCombatSkills(Player inspect, CommandSender display) {
|
|
||||||
if (Skills.hasCombatSkills(inspect)) {
|
|
||||||
PlayerProfile PP = Users.getProfile(inspect);
|
|
||||||
|
|
||||||
display.sendMessage(mcLocale.getString("Stats.CombatHeader"));
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().axes(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.AxesSkill"), PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES) }));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().archery(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.ArcherySkill"), PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY) }));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().swords(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.SwordsSkill"), PP.getSkillLevel(SkillType.SWORDS), PP.getSkillXpLevel(SkillType.SWORDS), PP.getXpToLevel(SkillType.SWORDS) }));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().taming(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.TamingSkill"), PP.getSkillLevel(SkillType.TAMING), PP.getSkillXpLevel(SkillType.TAMING), PP.getXpToLevel(SkillType.TAMING) }));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().unarmed(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.UnarmedSkill"), PP.getSkillLevel(SkillType.UNARMED), PP.getSkillXpLevel(SkillType.UNARMED), PP.getXpToLevel(SkillType.UNARMED) }));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void printCombatSkills(Player player) {
|
|
||||||
printCombatSkills(player, player);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print out details on Misc skills. Only for online players.
|
|
||||||
*
|
|
||||||
* @param inspect The player to retrieve stats for
|
|
||||||
* @param display The sender to display stats to
|
|
||||||
* @param online true if the player to retrieve stats for is online, false otherwise
|
|
||||||
*/
|
|
||||||
public static void printMiscSkills(Player inspect, CommandSender display) {
|
|
||||||
if (Skills.hasMiscSkills(inspect)) {
|
|
||||||
PlayerProfile PP = Users.getProfile(inspect);
|
|
||||||
display.sendMessage(mcLocale.getString("Stats.MiscHeader"));
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().acrobatics(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS) }));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().repair(inspect)) {
|
|
||||||
display.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.RepairSkill"), PP.getSkillLevel(SkillType.REPAIR), PP.getSkillXpLevel(SkillType.REPAIR), PP.getXpToLevel(SkillType.REPAIR) }));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void printMiscSkills(Player player) {
|
|
||||||
printMiscSkills(player, player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
65
src/main/java/com/gmail/nossr50/commands/KrakenCommand.java
Normal file
65
src/main/java/com/gmail/nossr50/commands/KrakenCommand.java
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class KrakenCommand implements TabExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Permissions.kraken(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager.getPlayer(sender.getName()).getFishingManager().unleashTheKraken();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (!Permissions.krakenOthers(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||||
|
|
||||||
|
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer.getFishingManager().unleashTheKraken();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
|
||||||
|
public class McabilityCommand extends ToggleCommand {
|
||||||
|
@Override
|
||||||
|
protected boolean hasOtherPermission(CommandSender sender) {
|
||||||
|
return Permissions.mcabilityOthers(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasSelfPermission(CommandSender sender) {
|
||||||
|
return Permissions.mcability(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void applyCommandAction() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Ability." + (mcMMOPlayer.getAbilityUse() ? "Off" : "On")));
|
||||||
|
mcMMOPlayer.toggleAbilityUse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void sendSuccessMessage(CommandSender sender) {
|
||||||
|
sender.sendMessage("Ability use has been toggled for " + player.getName()); // TODO: Localize
|
||||||
|
}
|
||||||
|
}
|
||||||
29
src/main/java/com/gmail/nossr50/commands/McgodCommand.java
Normal file
29
src/main/java/com/gmail/nossr50/commands/McgodCommand.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
|
||||||
|
public class McgodCommand extends ToggleCommand {
|
||||||
|
@Override
|
||||||
|
protected boolean hasOtherPermission(CommandSender sender) {
|
||||||
|
return Permissions.mcgodOthers(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasSelfPermission(CommandSender sender) {
|
||||||
|
return Permissions.mcgod(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void applyCommandAction() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.GodMode." + (mcMMOPlayer.getGodMode() ? "Disabled" : "Enabled")));
|
||||||
|
mcMMOPlayer.toggleGodMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void sendSuccessMessage(CommandSender sender) {
|
||||||
|
sender.sendMessage("God mode has been toggled for " + player.getName()); // TODO: Localize
|
||||||
|
}
|
||||||
|
}
|
||||||
113
src/main/java/com/gmail/nossr50/commands/McmmoCommand.java
Normal file
113
src/main/java/com/gmail/nossr50/commands/McmmoCommand.java
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.commands.party.PartySubcommandType;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.spout.SpoutUtils;
|
||||||
|
|
||||||
|
public class McmmoCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
if (!Permissions.mcmmoDescription(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
String description = LocaleLoader.getString("mcMMO.Description");
|
||||||
|
String[] mcSplit = description.split(",");
|
||||||
|
sender.sendMessage(mcSplit);
|
||||||
|
|
||||||
|
if (Config.getInstance().getDonateMessageEnabled()) {
|
||||||
|
if (mcMMO.isSpoutEnabled() && sender instanceof Player) {
|
||||||
|
SpoutUtils.sendDonationNotification((Player) sender);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("MOTD.Donate"));
|
||||||
|
sender.sendMessage(ChatColor.GOLD + " - " + ChatColor.GREEN + "gjmcferrin@gmail.com" + ChatColor.GOLD + " Paypal");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("MOTD.Version", mcMMO.p.getDescription().getVersion()));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (args[0].equalsIgnoreCase("?") || args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("commands")) {
|
||||||
|
if (!Permissions.mcmmoHelp(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.mcc.Header"));
|
||||||
|
displayPartyCommands(sender);
|
||||||
|
displayOtherCommands(sender);
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void displayPartyCommands(CommandSender sender) {
|
||||||
|
if (Permissions.party(sender)) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Party.Commands"));
|
||||||
|
sender.sendMessage(" /party create <" + LocaleLoader.getString("Commands.Usage.PartyName") + "> " + LocaleLoader.getString("Commands.Party1"));
|
||||||
|
sender.sendMessage(" /party join <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party2"));
|
||||||
|
sender.sendMessage(" /party quit " + LocaleLoader.getString("Commands.Party.Quit"));
|
||||||
|
|
||||||
|
if (Permissions.partyChat(sender)) {
|
||||||
|
sender.sendMessage(" /party chat " + LocaleLoader.getString("Commands.Party.Toggle"));
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(" /party invite <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party.Invite"));
|
||||||
|
sender.sendMessage(" /party accept " + LocaleLoader.getString("Commands.Party.Accept"));
|
||||||
|
|
||||||
|
if (Permissions.partySubcommand(sender, PartySubcommandType.TELEPORT)) {
|
||||||
|
sender.sendMessage(" /party teleport " + LocaleLoader.getString("Commands.Party.Teleport"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void displayOtherCommands(CommandSender sender) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Other"));
|
||||||
|
sender.sendMessage(" /mcstats " + LocaleLoader.getString("Commands.Stats"));
|
||||||
|
sender.sendMessage(" /mctop " + LocaleLoader.getString("Commands.Leaderboards"));
|
||||||
|
|
||||||
|
if (Permissions.skillreset(sender)) {
|
||||||
|
sender.sendMessage(" /skillreset <skill|all> " + LocaleLoader.getString("Commands.Reset"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Permissions.mcability(sender)) {
|
||||||
|
sender.sendMessage(" /mcability " + LocaleLoader.getString("Commands.ToggleAbility"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Permissions.adminChat(sender)) {
|
||||||
|
sender.sendMessage(" /adminchat " + LocaleLoader.getString("Commands.AdminToggle"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Permissions.inspect(sender)) {
|
||||||
|
sender.sendMessage(" /inspect " + LocaleLoader.getString("Commands.Inspect"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Permissions.mmoedit(sender)) {
|
||||||
|
sender.sendMessage(" /mmoedit " + LocaleLoader.getString("Commands.mmoedit"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Permissions.mcgod(sender)) {
|
||||||
|
sender.sendMessage(" /mcgod " + LocaleLoader.getString("Commands.mcgod"));
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(" /<skill>" + LocaleLoader.getString("Commands.SkillInfo"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class McnotifyCommand implements TabExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Notifications." + (mcMMOPlayer.useChatNotifications() ? "Off" : "On")));
|
||||||
|
mcMMOPlayer.toggleChatNotifications();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
|
||||||
|
public class McrefreshCommand extends ToggleCommand {
|
||||||
|
@Override
|
||||||
|
protected boolean hasOtherPermission(CommandSender sender) {
|
||||||
|
return Permissions.mcrefreshOthers(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasSelfPermission(CommandSender sender) {
|
||||||
|
return Permissions.mcrefresh(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void applyCommandAction() {
|
||||||
|
mcMMOPlayer.setRecentlyHurt(0);
|
||||||
|
mcMMOPlayer.getProfile().resetCooldowns();
|
||||||
|
mcMMOPlayer.resetToolPrepMode();
|
||||||
|
mcMMOPlayer.resetAbilityMode();
|
||||||
|
|
||||||
|
player.sendMessage(LocaleLoader.getString("Ability.Generic.Refresh"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void sendSuccessMessage(CommandSender sender) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.mcrefresh.Success", player.getName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,141 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class McscoreboardCommand implements TabExecutor {
|
||||||
|
private static final List<String> SCOREBOARD_TYPES = ImmutableList.of("clear", "rank", "stats", "top");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = (Player) sender;
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
clearScoreboard(player);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (args[0].equalsIgnoreCase("clear")) {
|
||||||
|
clearScoreboard(player);
|
||||||
|
}
|
||||||
|
else if (args[0].equalsIgnoreCase("rank")) {
|
||||||
|
if (!Config.getInstance().getMcrankScoreboardEnabled()) {
|
||||||
|
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScoreboardManager.setupPlayerScoreboard(player.getName());
|
||||||
|
ScoreboardManager.enablePlayerRankScoreboard(player);
|
||||||
|
}
|
||||||
|
else if (args[0].equalsIgnoreCase("stats")) {
|
||||||
|
if (!Config.getInstance().getMcstatsScoreboardsEnabled()) {
|
||||||
|
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScoreboardManager.setupPlayerScoreboard(player.getName());
|
||||||
|
ScoreboardManager.enablePlayerStatsScoreboard(UserManager.getPlayer(player));
|
||||||
|
}
|
||||||
|
else if (args[0].equalsIgnoreCase("top")) {
|
||||||
|
if (!Config.getInstance().getMctopScoreboardEnabled()) {
|
||||||
|
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScoreboardManager.enableGlobalStatsScoreboard(player, "all", 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if (!args[0].equalsIgnoreCase("top")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Config.getInstance().getMctopScoreboardEnabled()) {
|
||||||
|
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isInt(args[1])) {
|
||||||
|
ScoreboardManager.enableGlobalStatsScoreboard(player, "all", Math.abs(Integer.parseInt(args[1])));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommandUtils.isInvalidSkill(sender, args[1])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScoreboardManager.enableGlobalStatsScoreboard(player, args[1], 1);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
if (!args[0].equalsIgnoreCase("top")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Config.getInstance().getMctopScoreboardEnabled()) {
|
||||||
|
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommandUtils.isInvalidSkill(sender, args[1])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommandUtils.isInvalidInteger(sender, args[2])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScoreboardManager.enableGlobalStatsScoreboard(player, args[1], Math.abs(Integer.parseInt(args[2])));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return StringUtil.copyPartialMatches(args[0], SCOREBOARD_TYPES, new ArrayList<String>(SCOREBOARD_TYPES.size()));
|
||||||
|
case 2:
|
||||||
|
if (args[0].equalsIgnoreCase("top")) {
|
||||||
|
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||||
|
}
|
||||||
|
// Fallthrough
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearScoreboard(Player player) {
|
||||||
|
player.setScoreboard(mcMMO.p.getServer().getScoreboardManager().getMainScoreboard());
|
||||||
|
player.sendMessage("Your scoreboard has been cleared!"); //TODO: Locale
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||||
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class MobhealthCommand implements TabExecutor {
|
||||||
|
private static final List<String> MOB_HEALTHBAR_TYPES;
|
||||||
|
|
||||||
|
static {
|
||||||
|
ArrayList<String> types = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (MobHealthbarType type : MobHealthbarType.values()) {
|
||||||
|
types.add(type.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(types);
|
||||||
|
MOB_HEALTHBAR_TYPES = ImmutableList.copyOf(types);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
PlayerProfile playerProfile = UserManager.getPlayer(sender.getName()).getProfile();
|
||||||
|
|
||||||
|
try {
|
||||||
|
MobHealthbarType type = MobHealthbarType.valueOf(args[0].toUpperCase().trim());
|
||||||
|
playerProfile.setMobHealthbarType(type);
|
||||||
|
sender.sendMessage("Display type changed to: " + type); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ex) {
|
||||||
|
sender.sendMessage("Invalid type!"); //TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return StringUtil.copyPartialMatches(args[0], MOB_HEALTHBAR_TYPES, new ArrayList<String>(MOB_HEALTHBAR_TYPES.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
84
src/main/java/com/gmail/nossr50/commands/ToggleCommand.java
Normal file
84
src/main/java/com/gmail/nossr50/commands/ToggleCommand.java
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public abstract class ToggleCommand implements TabExecutor {
|
||||||
|
protected McMMOPlayer mcMMOPlayer;
|
||||||
|
protected Player player;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasSelfPermission(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
applyCommandAction();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (!hasOtherPermission(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||||
|
|
||||||
|
if (!CommandUtils.checkPlayerExistence(sender, args[0], mcMMOPlayer)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
if (CommandUtils.isOffline(sender, player)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
applyCommandAction();
|
||||||
|
sendSuccessMessage(sender);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract boolean hasOtherPermission(CommandSender sender);
|
||||||
|
protected abstract boolean hasSelfPermission(CommandSender sender);
|
||||||
|
protected abstract void applyCommandAction();
|
||||||
|
protected abstract void sendSuccessMessage(CommandSender sender);
|
||||||
|
}
|
||||||
101
src/main/java/com/gmail/nossr50/commands/XprateCommand.java
Normal file
101
src/main/java/com/gmail/nossr50/commands/XprateCommand.java
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
package com.gmail.nossr50.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class XprateCommand implements TabExecutor {
|
||||||
|
private double originalRate;
|
||||||
|
|
||||||
|
public XprateCommand() {
|
||||||
|
originalRate = Config.getInstance().getExperienceGainsGlobalMultiplier();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
if (!args[0].equalsIgnoreCase("reset")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Permissions.xprateReset(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mcMMO.p.isXPEventEnabled()) {
|
||||||
|
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Commands.xprate.over"));
|
||||||
|
mcMMO.p.toggleXpEventEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
Config.getInstance().setExperienceGainsGlobalMultiplier(originalRate);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if (CommandUtils.isInvalidInteger(sender, args[0])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Permissions.xprateSet(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommandUtils.shouldDisableToggle(args[1])) {
|
||||||
|
mcMMO.p.setXPEventEnabled(false);
|
||||||
|
}
|
||||||
|
else if (CommandUtils.shouldEnableToggle(args[1])) {
|
||||||
|
mcMMO.p.setXPEventEnabled(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int newXpRate = Integer.parseInt(args[0]);
|
||||||
|
Config.getInstance().setExperienceGainsGlobalMultiplier(newXpRate);
|
||||||
|
|
||||||
|
if (mcMMO.p.isXPEventEnabled()) {
|
||||||
|
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Commands.xprate.started.0"));
|
||||||
|
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Commands.xprate.started.1", newXpRate));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.xprate.modified", newXpRate));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
if (StringUtils.isInt(args[0])) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringUtil.copyPartialMatches(args[0], CommandUtils.RESET_OPTIONS, new ArrayList<String>(CommandUtils.RESET_OPTIONS.size()));
|
||||||
|
case 2:
|
||||||
|
return StringUtil.copyPartialMatches(args[1], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.gmail.nossr50.commands.chat;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.chat.ChatManager;
|
||||||
|
import com.gmail.nossr50.chat.ChatMode;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
|
||||||
|
public class AdminChatCommand extends ChatCommand {
|
||||||
|
public AdminChatCommand() {
|
||||||
|
super(ChatMode.ADMIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handleChatSending(CommandSender sender, String[] args) {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
Player player = (Player) sender;
|
||||||
|
ChatManager.handleAdminChat(mcMMO.p, player.getName(), player.getDisplayName(), buildChatMessage(args, 0));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ChatManager.handleAdminChat(mcMMO.p, LocaleLoader.getString("Commands.Chat.Console"), buildChatMessage(args, 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
src/main/java/com/gmail/nossr50/commands/chat/ChatCommand.java
Normal file
120
src/main/java/com/gmail/nossr50/commands/chat/ChatCommand.java
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
package com.gmail.nossr50.commands.chat;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.chat.ChatMode;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public abstract class ChatCommand implements TabExecutor {
|
||||||
|
protected ChatMode chatMode;
|
||||||
|
private McMMOPlayer mcMMOPlayer;
|
||||||
|
|
||||||
|
public ChatCommand(ChatMode chatMode) {
|
||||||
|
this.chatMode = chatMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
|
||||||
|
if (chatMode.isEnabled(mcMMOPlayer)) {
|
||||||
|
disableChatMode(sender);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
enableChatMode(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (CommandUtils.shouldEnableToggle(args[0])) {
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
|
||||||
|
enableChatMode(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommandUtils.shouldDisableToggle(args[0])) {
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
|
||||||
|
disableChatMode(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallthrough
|
||||||
|
|
||||||
|
default:
|
||||||
|
handleChatSending(sender, args);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return StringUtil.copyPartialMatches(args[0], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String buildChatMessage(String[] args, int index) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append(args[index]);
|
||||||
|
|
||||||
|
for (int i = index + 1; i < args.length; i++) {
|
||||||
|
builder.append(" ");
|
||||||
|
builder.append(args[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract void handleChatSending(CommandSender sender, String[] args);
|
||||||
|
|
||||||
|
private void enableChatMode(CommandSender sender) {
|
||||||
|
if (chatMode == ChatMode.PARTY && mcMMOPlayer.getParty() == null) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
chatMode.enable(mcMMOPlayer);
|
||||||
|
sender.sendMessage(chatMode.getEnabledMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disableChatMode(CommandSender sender) {
|
||||||
|
if (chatMode == ChatMode.PARTY && mcMMOPlayer.getParty() == null) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
chatMode.disable(mcMMOPlayer);
|
||||||
|
sender.sendMessage(chatMode.getDisabledMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.gmail.nossr50.commands.chat;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.chat.ChatManager;
|
||||||
|
import com.gmail.nossr50.chat.ChatMode;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyChatCommand extends ChatCommand {
|
||||||
|
public PartyChatCommand() {
|
||||||
|
super(ChatMode.PARTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handleChatSending(CommandSender sender, String[] args) {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
Player player = (Player) sender;
|
||||||
|
Party party = UserManager.getPlayer(player).getParty();
|
||||||
|
|
||||||
|
if (party == null) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChatManager.handlePartyChat(mcMMO.p, party, player.getName(), player.getDisplayName(), buildChatMessage(args, 0));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (args.length < 2) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Specify"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Party party = mcMMO.getPartyManager().getParty(args[0]);
|
||||||
|
|
||||||
|
if (party == null) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.InvalidName"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChatManager.handlePartyChat(mcMMO.p, party, LocaleLoader.getString("Commands.Chat.Console"), buildChatMessage(args, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.gmail.nossr50.commands.database;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class McpurgeCommand implements TabExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
mcMMO.getDatabaseManager().purgePowerlessUsers();
|
||||||
|
|
||||||
|
if (Config.getInstance().getOldUsersCutoff() != -1) {
|
||||||
|
mcMMO.getDatabaseManager().purgeOldUsers();
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.mcpurge.Success"));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package com.gmail.nossr50.commands.database;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class McremoveCommand implements TabExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
if (UserManager.getPlayer(args[0]) == null && CommandUtils.unloadedProfile(sender, new PlayerProfile(args[0], false))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mcMMO.getDatabaseManager().removeUser(args[0])) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.mcremove.Success", args[0]));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sender.sendMessage(args[0] + " could not be removed from the database."); // Pretty sure this should NEVER happen.
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.gmail.nossr50.commands.database;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.runnables.database.SQLConversionTask;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class MmoupdateCommand implements TabExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (!Config.getInstance().getUseMySQL()) {
|
||||||
|
sender.sendMessage("SQL Mode is not enabled."); // TODO: Localize
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.mmoupdate.Start"));
|
||||||
|
UserManager.saveAll();
|
||||||
|
UserManager.clearAll();
|
||||||
|
new SQLConversionTask().runTaskLaterAsynchronously(mcMMO.p, 1);
|
||||||
|
|
||||||
|
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
||||||
|
UserManager.addUser(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.mmoupdate.Finish"));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.gmail.nossr50.commands.experience;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
|
||||||
|
public class AddlevelsCommand extends ExperienceCommand {
|
||||||
|
@Override
|
||||||
|
protected boolean permissionsCheckSelf(CommandSender sender) {
|
||||||
|
return Permissions.addlevels(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean permissionsCheckOthers(CommandSender sender) {
|
||||||
|
return Permissions.addlevelsOthers(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handleCommand(SkillType skill) {
|
||||||
|
profile.addLevels(skill, value);
|
||||||
|
|
||||||
|
if (player != null) {
|
||||||
|
mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerLevelUpEvent(player, skill, value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handlePlayerMessageAll() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardAll.1", value));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handlePlayerMessageSkill() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.1", value, SkillUtils.getSkillName(skill)));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package com.gmail.nossr50.commands.experience;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
|
||||||
|
public class AddxpCommand extends ExperienceCommand {
|
||||||
|
@Override
|
||||||
|
protected boolean permissionsCheckSelf(CommandSender sender) {
|
||||||
|
return Permissions.addxp(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean permissionsCheckOthers(CommandSender sender) {
|
||||||
|
return Permissions.addxpOthers(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handleCommand(SkillType skill) {
|
||||||
|
if (player != null) {
|
||||||
|
mcMMOPlayer.applyXpGain(skill, value);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
profile.addExperience(skill, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handlePlayerMessageAll() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.addxp.AwardAll", value));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handlePlayerMessageSkill() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.addxp.AwardSkill", value, SkillUtils.getSkillName(skill)));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,171 @@
|
|||||||
|
package com.gmail.nossr50.commands.experience;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public abstract class ExperienceCommand implements TabExecutor {
|
||||||
|
protected McMMOPlayer mcMMOPlayer;
|
||||||
|
protected Player player;
|
||||||
|
protected PlayerProfile profile;
|
||||||
|
|
||||||
|
protected boolean allSkills;
|
||||||
|
protected SkillType skill;
|
||||||
|
protected int value;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 2:
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!permissionsCheckSelf(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!validateArguments(sender, args[0], args[1])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
profile = mcMMOPlayer.getProfile();
|
||||||
|
|
||||||
|
editValues();
|
||||||
|
allSkills = false;
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
if (!permissionsCheckOthers(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!validateArguments(sender, args[1], args[2])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||||
|
|
||||||
|
// If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
|
||||||
|
if (mcMMOPlayer == null) {
|
||||||
|
profile = new PlayerProfile(args[0], false);
|
||||||
|
|
||||||
|
if (CommandUtils.unloadedProfile(sender, profile)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
editValues();
|
||||||
|
profile.save(); // Since this is a temporary profile, we save it here.
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
profile = mcMMOPlayer.getProfile();
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
editValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
handleSenderMessage(sender, args[0]);
|
||||||
|
allSkills = false;
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
case 2:
|
||||||
|
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract boolean permissionsCheckSelf(CommandSender sender);
|
||||||
|
protected abstract boolean permissionsCheckOthers(CommandSender sender);
|
||||||
|
protected abstract void handleCommand(SkillType skill);
|
||||||
|
protected abstract void handlePlayerMessageAll();
|
||||||
|
protected abstract void handlePlayerMessageSkill();
|
||||||
|
|
||||||
|
private boolean validateArguments(CommandSender sender, String skillName, String value) {
|
||||||
|
if (isInvalidInteger(sender, value) || isInvalidSkill(sender, skillName)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isInvalidInteger(CommandSender sender, String value) {
|
||||||
|
if (CommandUtils.isInvalidInteger(sender, value)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.value = Integer.parseInt(value);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean isInvalidSkill(CommandSender sender, String skillName) {
|
||||||
|
if (skillName.equalsIgnoreCase("all")) {
|
||||||
|
allSkills = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (CommandUtils.isInvalidSkill(sender, skillName)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
skill = SkillType.getSkill(skillName);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void handleSenderMessage(CommandSender sender, String playerName) {
|
||||||
|
if (allSkills) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardAll.2", playerName));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.2", SkillUtils.getSkillName(skill), playerName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void editValues() {
|
||||||
|
if (allSkills) {
|
||||||
|
for (SkillType skillType : SkillType.values()) {
|
||||||
|
handleCommand(skillType);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player != null) {
|
||||||
|
handlePlayerMessageAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
handleCommand(skill);
|
||||||
|
|
||||||
|
if (player != null) {
|
||||||
|
handlePlayerMessageSkill();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.gmail.nossr50.commands.experience;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
|
||||||
|
public class MmoeditCommand extends ExperienceCommand {
|
||||||
|
@Override
|
||||||
|
protected boolean permissionsCheckSelf(CommandSender sender) {
|
||||||
|
return Permissions.mmoedit(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean permissionsCheckOthers(CommandSender sender) {
|
||||||
|
return Permissions.mmoeditOthers(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handleCommand(SkillType skill) {
|
||||||
|
profile.modifySkill(skill, value);
|
||||||
|
|
||||||
|
if (player != null) {
|
||||||
|
mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerLevelUpEvent(player, skill, value - profile.getSkillLevel(skill)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handlePlayerMessageAll() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.mmoedit.AllSkills.1", value));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handlePlayerMessageSkill() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.mmoedit.Modified.1", SkillUtils.getSkillName(skill), value));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
package com.gmail.nossr50.commands.experience;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
|
||||||
|
public class SkillresetCommand extends ExperienceCommand {
|
||||||
|
private CommandSender sender;
|
||||||
|
private Command command;
|
||||||
|
private int argsLength;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
this.command = command;
|
||||||
|
this.sender = sender;
|
||||||
|
argsLength = args.length;
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Permissions.skillreset(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isInvalidSkill(sender, args[0])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
profile = mcMMOPlayer.getProfile();
|
||||||
|
|
||||||
|
editValues();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if (!Permissions.skillresetOthers(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isInvalidSkill(sender, args[1])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||||
|
|
||||||
|
// If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
|
||||||
|
if (mcMMOPlayer == null) {
|
||||||
|
profile = new PlayerProfile(args[0], false);
|
||||||
|
|
||||||
|
if (CommandUtils.unloadedProfile(sender, profile)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
editValues();
|
||||||
|
profile.save(); // Since this is a temporary profile, we save it here.
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
profile = mcMMOPlayer.getProfile();
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
editValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
handleSenderMessage(sender, args[0]);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean permissionsCheckSelf(CommandSender sender) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean permissionsCheckOthers(CommandSender sender) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handleCommand(SkillType skill) {
|
||||||
|
if (argsLength == 1 && !Permissions.skillreset(sender, skill) || (argsLength == 2 && !Permissions.skillresetOthers(sender, skill))) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
profile.modifySkill(skill, 0);
|
||||||
|
|
||||||
|
if (player != null) {
|
||||||
|
mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerLevelUpEvent(player, skill, 0 - profile.getSkillLevel(skill)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handlePlayerMessageAll() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Reset.All"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handlePlayerMessageSkill() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Reset.Single", SkillUtils.getSkillName(skill)));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.general;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.m;
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.gmail.nossr50.commands.CommandHelper;
|
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
|
||||||
import com.gmail.nossr50.skills.Skills;
|
|
||||||
|
|
||||||
public class AddlevelsCommand implements CommandExecutor{
|
|
||||||
private final mcMMO plugin;
|
|
||||||
|
|
||||||
public AddlevelsCommand(mcMMO instance) {
|
|
||||||
this.plugin = instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
Player modifiedPlayer;
|
|
||||||
int levels;
|
|
||||||
SkillType skill;
|
|
||||||
String skillName;
|
|
||||||
String usage = ChatColor.RED + "Proper usage is /addlevels <playername> <skillname> <levels>"; //TODO: Needs more locale.
|
|
||||||
|
|
||||||
if (CommandHelper.noCommandPermissions(sender, "mcmmo.tools.mmoedit")) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (args.length) {
|
|
||||||
case 2:
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
if (m.isInt(args[1]) && Skills.isSkill(args[0])) {
|
|
||||||
modifiedPlayer = (Player) sender;
|
|
||||||
levels = Integer.valueOf(args[1]);
|
|
||||||
skill = Skills.getSkillType(args[0]);
|
|
||||||
|
|
||||||
if (skill.equals(SkillType.ALL)) {
|
|
||||||
skillName = "all skills";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
skillName = m.getCapitalized(skill.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
Users.getProfile(modifiedPlayer).addLevels(skill, levels);
|
|
||||||
sender.sendMessage(ChatColor.GREEN + "You were awarded " + levels + " levels in " + skillName + "!"); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(usage);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
modifiedPlayer = plugin.getServer().getPlayer(args[0]);
|
|
||||||
String playerName = modifiedPlayer.getName();
|
|
||||||
|
|
||||||
if (modifiedPlayer != null && m.isInt(args[2]) && Skills.isSkill(args[1])) {
|
|
||||||
levels = Integer.valueOf(args[2]);
|
|
||||||
skill = Skills.getSkillType(args[1]);
|
|
||||||
String message;
|
|
||||||
|
|
||||||
Users.getProfile(modifiedPlayer).addLevels(skill, levels);
|
|
||||||
|
|
||||||
if (skill.equals(SkillType.ALL)) {
|
|
||||||
skillName = "all skills";
|
|
||||||
message = ChatColor.RED + "All skills have been modified for " + playerName + "."; //TODO: Use locale
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
skillName = m.getCapitalized(skill.toString());
|
|
||||||
message = ChatColor.RED + skillName + " has been modified for " + playerName + "."; //TODO: Use locale
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage(message);
|
|
||||||
modifiedPlayer.sendMessage(ChatColor.GREEN + "You were awarded " + levels + " levels in " + skillName + "!"); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
sender.sendMessage(usage);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.general;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.m;
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.gmail.nossr50.commands.CommandHelper;
|
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
|
||||||
import com.gmail.nossr50.skills.Skills;
|
|
||||||
|
|
||||||
public class AddxpCommand implements CommandExecutor {
|
|
||||||
private final mcMMO plugin;
|
|
||||||
|
|
||||||
public AddxpCommand(mcMMO instance) {
|
|
||||||
this.plugin = instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
Player modifiedPlayer;
|
|
||||||
int xp;
|
|
||||||
SkillType skill;
|
|
||||||
String skillName;
|
|
||||||
String usage = ChatColor.RED + "Proper usage is /addxp <playername> <skillname> <xp>"; //TODO: Needs more locale.
|
|
||||||
|
|
||||||
if (CommandHelper.noCommandPermissions(sender, "mcmmo.tools.mmoedit")) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (args.length) {
|
|
||||||
case 2:
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
if (m.isInt(args[1]) && Skills.isSkill(args[0])) {
|
|
||||||
modifiedPlayer = (Player) sender;
|
|
||||||
xp = Integer.valueOf(args[1]);
|
|
||||||
skill = Skills.getSkillType(args[0]);
|
|
||||||
|
|
||||||
Users.getProfile(modifiedPlayer).addXPOverride(skill, xp);
|
|
||||||
|
|
||||||
if (skill.equals(SkillType.ALL)) {
|
|
||||||
skillName = "all skills";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
skillName = m.getCapitalized(skill.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
modifiedPlayer.sendMessage(ChatColor.GREEN + "You were awarded " + xp + " experience in " + skillName + "!"); //TODO: Needs more locale.
|
|
||||||
|
|
||||||
if (skill.equals(SkillType.ALL)) {
|
|
||||||
Skills.XpCheckAll(modifiedPlayer);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Skills.XpCheckSkill(skill, modifiedPlayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
sender.sendMessage(usage);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
modifiedPlayer = plugin.getServer().getPlayer(args[0]);
|
|
||||||
String playerName = modifiedPlayer.getName();
|
|
||||||
|
|
||||||
if (modifiedPlayer != null && m.isInt(args[2]) && Skills.isSkill(args[1])) {
|
|
||||||
xp = Integer.valueOf(args[2]);
|
|
||||||
skill = Skills.getSkillType(args[1]);
|
|
||||||
String message;
|
|
||||||
|
|
||||||
Users.getProfile(modifiedPlayer).addXPOverride(skill, xp);
|
|
||||||
|
|
||||||
if (skill.equals(SkillType.ALL)) {
|
|
||||||
skillName = "all skills";
|
|
||||||
message = ChatColor.RED + "All skills have been modified for " + playerName + "."; //TODO: Use locale
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
skillName = m.getCapitalized(skill.toString());
|
|
||||||
message = ChatColor.RED + skillName + " has been modified for " + playerName + "."; //TODO: Use locale
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage(message);
|
|
||||||
modifiedPlayer.sendMessage(ChatColor.GREEN + "You were awarded " + xp + " experience in " + skillName + "!"); //TODO: Needs more locale.
|
|
||||||
|
|
||||||
if (skill.equals(SkillType.ALL)) {
|
|
||||||
Skills.XpCheckAll(modifiedPlayer);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Skills.XpCheckSkill(skill, modifiedPlayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
sender.sendMessage(usage);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.general;
|
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.m;
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.gmail.nossr50.commands.CommandHelper;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
|
|
||||||
public class InspectCommand implements CommandExecutor {
|
|
||||||
private final mcMMO plugin;
|
|
||||||
|
|
||||||
public InspectCommand(mcMMO instance) {
|
|
||||||
this.plugin = instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
Player target;
|
|
||||||
PlayerProfile PP;
|
|
||||||
String usage = "Proper usage is /inspect <playername>"; //TODO: Needs more locale.
|
|
||||||
|
|
||||||
if (CommandHelper.noCommandPermissions(sender, "mcmmo.commands.inspect")) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (args.length) {
|
|
||||||
case 1:
|
|
||||||
target = plugin.getServer().getPlayer(args[0]);
|
|
||||||
|
|
||||||
if (target != null) {
|
|
||||||
PP = Users.getProfile(target);
|
|
||||||
|
|
||||||
if (sender instanceof Player && !sender.isOp() && !m.isNear(((Player) sender).getLocation(), target.getLocation(), 5.0)) {
|
|
||||||
sender.sendMessage(mcLocale.getString("Inspect.TooFar"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage(mcLocale.getString("Inspect.Stats", new Object[] { target.getName() }));
|
|
||||||
CommandHelper.printGatheringSkills(target, sender);
|
|
||||||
CommandHelper.printCombatSkills(target, sender);
|
|
||||||
CommandHelper.printMiscSkills(target, sender);
|
|
||||||
sender.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevel", new Object[] { PP.getPowerLevel() }));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
PP = Users.getOfflineProfile(args[0]);
|
|
||||||
|
|
||||||
if (sender instanceof Player && !sender.isOp()) {
|
|
||||||
sender.sendMessage(mcLocale.getString("Inspect.Offline"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!PP.isLoaded()) {
|
|
||||||
sender.sendMessage(mcLocale.getString("Inspect.DoesNotExist"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage(mcLocale.getString("Inspect.OfflineStats", new Object[] { args[0] }));
|
|
||||||
|
|
||||||
sender.sendMessage(mcLocale.getString("Stats.GatheringHeader"));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.ExcavationSkill"), PP.getSkillLevel(SkillType.EXCAVATION), PP.getSkillXpLevel(SkillType.EXCAVATION), PP.getXpToLevel(SkillType.EXCAVATION) }));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.FishingSkill"), PP.getSkillLevel(SkillType.FISHING), PP.getSkillXpLevel(SkillType.FISHING), PP.getXpToLevel(SkillType.FISHING) }));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.HerbalismSkill"), PP.getSkillLevel(SkillType.HERBALISM), PP.getSkillXpLevel(SkillType.HERBALISM), PP.getXpToLevel(SkillType.HERBALISM) }));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.MiningSkill"), PP.getSkillLevel(SkillType.MINING), PP.getSkillXpLevel(SkillType.MINING), PP.getXpToLevel(SkillType.MINING) }));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PP.getSkillLevel(SkillType.WOODCUTTING), PP.getSkillXpLevel(SkillType.WOODCUTTING), PP.getXpToLevel(SkillType.WOODCUTTING) }));
|
|
||||||
|
|
||||||
sender.sendMessage(mcLocale.getString("Stats.CombatHeader"));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.AxesSkill"), PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES) }));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.ArcherySkill"), PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY) }));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.SwordsSkill"), PP.getSkillLevel(SkillType.SWORDS), PP.getSkillXpLevel(SkillType.SWORDS), PP.getXpToLevel(SkillType.SWORDS) }));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.TamingSkill"), PP.getSkillLevel(SkillType.TAMING), PP.getSkillXpLevel(SkillType.TAMING), PP.getXpToLevel(SkillType.TAMING) }));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.UnarmedSkill"), PP.getSkillLevel(SkillType.UNARMED), PP.getSkillXpLevel(SkillType.UNARMED), PP.getXpToLevel(SkillType.UNARMED) }));
|
|
||||||
|
|
||||||
sender.sendMessage(mcLocale.getString("Stats.MiscHeader"));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS) }));
|
|
||||||
sender.sendMessage(mcLocale.getString("m.SkillStats", new Object[] { mcLocale.getString("mcPlayerListener.RepairSkill"), PP.getSkillLevel(SkillType.REPAIR), PP.getSkillXpLevel(SkillType.REPAIR), PP.getXpToLevel(SkillType.REPAIR) }));
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
sender.sendMessage(usage);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.general;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.skills.Skills;
|
|
||||||
|
|
||||||
public class McstatsCommand implements CommandExecutor {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
Player player = null;
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
player = (Player) sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.YourStats"));
|
|
||||||
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.NoSkillNote"));
|
|
||||||
|
|
||||||
ChatColor header = ChatColor.GOLD;
|
|
||||||
|
|
||||||
if (Skills.hasGatheringSkills(player)) {
|
|
||||||
player.sendMessage(header + "-=GATHERING SKILLS=-"); //TODO: Needs more locale.
|
|
||||||
if (mcPermissions.getInstance().excavation(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ExcavationSkill"), PP.getSkillLevel(SkillType.EXCAVATION), PP.getSkillXpLevel(SkillType.EXCAVATION), PP.getXpToLevel(SkillType.EXCAVATION)));
|
|
||||||
if (mcPermissions.getInstance().fishing(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.FishingSkill"), PP.getSkillLevel(SkillType.FISHING), PP.getSkillXpLevel(SkillType.FISHING), PP.getXpToLevel(SkillType.FISHING)));
|
|
||||||
if (mcPermissions.getInstance().herbalism(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.HerbalismSkill"), PP.getSkillLevel(SkillType.HERBALISM), PP.getSkillXpLevel(SkillType.HERBALISM), PP.getXpToLevel(SkillType.HERBALISM)));
|
|
||||||
if (mcPermissions.getInstance().mining(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.MiningSkill"), PP.getSkillLevel(SkillType.MINING), PP.getSkillXpLevel(SkillType.MINING), PP.getXpToLevel(SkillType.MINING)));
|
|
||||||
if (mcPermissions.getInstance().woodcutting(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PP.getSkillLevel(SkillType.WOODCUTTING), PP.getSkillXpLevel(SkillType.WOODCUTTING), PP.getXpToLevel(SkillType.WOODCUTTING)));
|
|
||||||
}
|
|
||||||
if (Skills.hasCombatSkills(player)) {
|
|
||||||
player.sendMessage(header + "-=COMBAT SKILLS=-"); //TODO: Needs more locale.
|
|
||||||
if (mcPermissions.getInstance().axes(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES)));
|
|
||||||
if (mcPermissions.getInstance().archery(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY)));
|
|
||||||
if (mcPermissions.getInstance().swords(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PP.getSkillLevel(SkillType.SWORDS), PP.getSkillXpLevel(SkillType.SWORDS), PP.getXpToLevel(SkillType.SWORDS)));
|
|
||||||
if (mcPermissions.getInstance().taming(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.TamingSkill"), PP.getSkillLevel(SkillType.TAMING), PP.getSkillXpLevel(SkillType.TAMING), PP.getXpToLevel(SkillType.TAMING)));
|
|
||||||
if (mcPermissions.getInstance().unarmed(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.UnarmedSkill"), PP.getSkillLevel(SkillType.UNARMED), PP.getSkillXpLevel(SkillType.UNARMED), PP.getXpToLevel(SkillType.UNARMED)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Skills.hasMiscSkills(player)) {
|
|
||||||
player.sendMessage(header + "-=MISC SKILLS=-"); //TODO: Needs more locale.
|
|
||||||
if (mcPermissions.getInstance().acrobatics(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS)));
|
|
||||||
if (mcPermissions.getInstance().repair(player))
|
|
||||||
player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PP.getSkillLevel(SkillType.REPAIR), PP.getSkillXpLevel(SkillType.REPAIR), PP.getXpToLevel(SkillType.REPAIR)));
|
|
||||||
}
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevel") + ChatColor.GREEN + (PP.getPowerLevel()));
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.general;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.m;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.skills.Skills;
|
|
||||||
|
|
||||||
public class MmoeditCommand implements CommandExecutor {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
Player player = null;
|
|
||||||
if (sender instanceof Player)
|
|
||||||
{
|
|
||||||
player = (Player) sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player != null && !mcPermissions.getInstance().mmoedit(player)) {
|
|
||||||
sender.sendMessage("This command requires permissions."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(sender instanceof Player))
|
|
||||||
{
|
|
||||||
if (args.length < 2)
|
|
||||||
{
|
|
||||||
System.out.println("Usage is /mmoedit playername skillname newvalue"); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
} else if (args.length == 3)
|
|
||||||
{
|
|
||||||
PlayerProfile PPt = null;
|
|
||||||
|
|
||||||
if(Users.players.containsKey(args[0].toLowerCase())) {
|
|
||||||
PPt = Users.players.get(args[0].toLowerCase());
|
|
||||||
} else
|
|
||||||
PPt = Users.getOfflineProfile(args[0]); //Only grab offline profile if the above failed
|
|
||||||
|
|
||||||
if(!PPt.isLoaded())
|
|
||||||
{
|
|
||||||
sender.sendMessage("Player does not exist in the database!"); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m.isInt(args[2]) && Skills.isSkill(args[1]))
|
|
||||||
{
|
|
||||||
int newvalue = Integer.valueOf(args[2]);
|
|
||||||
Users.getOfflineProfile(args[0]).modifyskill(Skills.getSkillType(args[1]), newvalue);
|
|
||||||
System.out.println(args[1] + " has been modified for " + args[0] + "."); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
System.out.println("Usage is /mmoedit playername skillname newvalue"); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mcPermissions.getInstance().mmoedit(player))
|
|
||||||
{
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length < 2)
|
|
||||||
{
|
|
||||||
player.sendMessage(ChatColor.RED + "Usage is /mmoedit playername skillname newvalue"); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (args.length == 3)
|
|
||||||
{
|
|
||||||
PlayerProfile PPt = null;
|
|
||||||
|
|
||||||
if(Users.players.containsKey(args[0].toLowerCase())) {
|
|
||||||
PPt = Users.players.get(args[0].toLowerCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(PPt == null)
|
|
||||||
Users.getOfflineProfile(args[0]); //Only grab offline profile if the above failed
|
|
||||||
|
|
||||||
if(!PPt.isLoaded())
|
|
||||||
{
|
|
||||||
sender.sendMessage("Player does not exist in the database!"); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m.isInt(args[2]) && Skills.isSkill(args[1]))
|
|
||||||
{
|
|
||||||
int newvalue = Integer.valueOf(args[2]);
|
|
||||||
PPt.modifyskill(Skills.getSkillType(args[1]), newvalue);
|
|
||||||
player.sendMessage(ChatColor.RED + args[1] + " has been modified for "+args[0]); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
} else if (args.length == 2)
|
|
||||||
{
|
|
||||||
if (m.isInt(args[1]) && Skills.isSkill(args[0]))
|
|
||||||
{
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
int newvalue = Integer.valueOf(args[1]);
|
|
||||||
PP.modifyskill(Skills.getSkillType(args[0]), newvalue);
|
|
||||||
player.sendMessage(ChatColor.RED + args[0] + " has been modified."); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
player.sendMessage(ChatColor.RED + "Usage is /mmoedit playername skillname newvalue"); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.general;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.runnables.SQLConversionTask;
|
|
||||||
|
|
||||||
public class MmoupdateCommand implements CommandExecutor {
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (!mcPermissions.getInstance().admin(player)) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
player.sendMessage(ChatColor.GRAY + "Starting conversion..."); //TODO: Needs more locale.
|
|
||||||
Users.clearUsers();
|
|
||||||
convertToMySQL();
|
|
||||||
for (Player x : Bukkit.getServer().getOnlinePlayers()) {
|
|
||||||
Users.addUser(x);
|
|
||||||
}
|
|
||||||
player.sendMessage(ChatColor.GREEN + "Conversion finished!"); //TODO: Needs more locale.
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert FlatFile data to MySQL data.
|
|
||||||
*/
|
|
||||||
private void convertToMySQL() {
|
|
||||||
if (!LoadProperties.useMySQL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleAsyncDelayedTask(Bukkit.getPluginManager().getPlugin("mcMMO"), new SQLConversionTask(), 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.general;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.m;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
|
|
||||||
public class XprateCommand implements CommandExecutor {
|
|
||||||
private static int oldrate = LoadProperties.xpGainMultiplier;
|
|
||||||
|
|
||||||
public static boolean xpevent = false;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
if(args.length <= 0)
|
|
||||||
{
|
|
||||||
System.out.println(mcLocale.getString("Commands.xprate.proper", new Object[] {"xprate"}));
|
|
||||||
System.out.println(mcLocale.getString("Commands.xprate.proper2", new Object[] {"xprate"}));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length == 1 && args[0].equalsIgnoreCase("reset"))
|
|
||||||
{
|
|
||||||
if(xpevent)
|
|
||||||
{
|
|
||||||
for(Player x : Bukkit.getServer().getOnlinePlayers())
|
|
||||||
x.sendMessage(mcLocale.getString("Commands.xprate.over"));
|
|
||||||
xpevent = !xpevent;
|
|
||||||
LoadProperties.xpGainMultiplier = oldrate;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
LoadProperties.xpGainMultiplier = oldrate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length >= 1 && m.isInt(args[0]))
|
|
||||||
{
|
|
||||||
oldrate = LoadProperties.xpGainMultiplier;
|
|
||||||
|
|
||||||
if(args.length >= 2 && (args[1].equalsIgnoreCase("true") || args[1].equalsIgnoreCase("false")))
|
|
||||||
{
|
|
||||||
if(args[1].equalsIgnoreCase("true"))
|
|
||||||
xpevent = true;
|
|
||||||
else
|
|
||||||
xpevent = false;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
System.out.println(mcLocale.getString("Commands.xprate.proper3"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
LoadProperties.xpGainMultiplier = m.getInt(args[0]);
|
|
||||||
if(xpevent = true)
|
|
||||||
for(Player x : Bukkit.getServer().getOnlinePlayers())
|
|
||||||
{
|
|
||||||
x.sendMessage(ChatColor.GOLD+"XP EVENT FOR mcMMO HAS STARTED!"); //TODO: Needs more locale.
|
|
||||||
x.sendMessage(ChatColor.GOLD+"mcMMO XP RATE IS NOW "+LoadProperties.xpGainMultiplier+"x!!"); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("The XP RATE was modified to "+LoadProperties.xpGainMultiplier); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if(!mcPermissions.getInstance().admin(player))
|
|
||||||
{
|
|
||||||
player.sendMessage(ChatColor.YELLOW+"[mcMMO] "+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if(args.length <= 0)
|
|
||||||
{
|
|
||||||
player.sendMessage(mcLocale.getString("Commands.xprate.proper", new Object[] {"xprate"}));
|
|
||||||
player.sendMessage(mcLocale.getString("Commands.xprate.proper2", new Object[] {"xprate"}));
|
|
||||||
}
|
|
||||||
if(args.length == 1 && args[0].equalsIgnoreCase("reset"))
|
|
||||||
{
|
|
||||||
if(xpevent)
|
|
||||||
{
|
|
||||||
for(Player x : Bukkit.getServer().getOnlinePlayers())
|
|
||||||
x.sendMessage(mcLocale.getString("Commands.xprate.over"));
|
|
||||||
xpevent = !xpevent;
|
|
||||||
LoadProperties.xpGainMultiplier = oldrate;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
LoadProperties.xpGainMultiplier = oldrate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(args.length >= 1 && m.isInt(args[0]))
|
|
||||||
{
|
|
||||||
oldrate = LoadProperties.xpGainMultiplier;
|
|
||||||
|
|
||||||
if(args.length >= 2 && (args[1].equalsIgnoreCase("true") || args[1].equalsIgnoreCase("false")))
|
|
||||||
{
|
|
||||||
if(args[1].equalsIgnoreCase("true"))
|
|
||||||
xpevent = true;
|
|
||||||
else
|
|
||||||
xpevent = false;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
player.sendMessage(mcLocale.getString("Commands.xprate.proper3"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
LoadProperties.xpGainMultiplier = m.getInt(args[0]);
|
|
||||||
if(xpevent = true)
|
|
||||||
for(Player x : Bukkit.getServer().getOnlinePlayers())
|
|
||||||
{
|
|
||||||
x.sendMessage(mcLocale.getString("Commands.xprate.started"));
|
|
||||||
x.sendMessage(mcLocale.getString("Commands.xprate.started2", new Object[] {LoadProperties.xpGainMultiplier}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.gmail.nossr50.commands.hardcore;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
|
||||||
|
public class HardcoreCommand extends HardcoreModeCommand {
|
||||||
|
@Override
|
||||||
|
protected void disable() {
|
||||||
|
Config.getInstance().setHardcoreEnabled(false);
|
||||||
|
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Hardcore.Disabled"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void enable() {
|
||||||
|
Config.getInstance().setHardcoreEnabled(true);
|
||||||
|
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Hardcore.Enabled"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean checkTogglePermissions() {
|
||||||
|
return Permissions.hardcoreToggle(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean checkModifyPermissions() {
|
||||||
|
return Permissions.hardcoreModify(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean checkEnabled() {
|
||||||
|
return Config.getInstance().getHardcoreEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void modify() {
|
||||||
|
Config.getInstance().setHardcoreDeathStatPenaltyPercentage(newPercent);
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Hardcore.PercentageChanged", percent.format(newPercent / 100D)));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
package com.gmail.nossr50.commands.hardcore;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public abstract class HardcoreModeCommand implements TabExecutor {
|
||||||
|
protected CommandSender sender;
|
||||||
|
protected double newPercent;
|
||||||
|
protected DecimalFormat percent;
|
||||||
|
|
||||||
|
public HardcoreModeCommand() {
|
||||||
|
percent = new DecimalFormat("##0.00%");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
this.sender = sender;
|
||||||
|
|
||||||
|
if (!checkTogglePermissions()) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checkEnabled()) {
|
||||||
|
disable();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (CommandUtils.shouldEnableToggle(args[0])) {
|
||||||
|
if (!Permissions.hardcoreToggle(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
enable();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommandUtils.shouldDisableToggle(args[0])) {
|
||||||
|
if (!Permissions.hardcoreToggle(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
disable();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isInvalidPercentage(sender, args[0])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Permissions.hardcoreModify(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
modify();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
if (StringUtils.isDouble(args[0])) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
return StringUtil.copyPartialMatches(args[0], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract boolean checkTogglePermissions();
|
||||||
|
protected abstract boolean checkModifyPermissions();
|
||||||
|
protected abstract boolean checkEnabled();
|
||||||
|
protected abstract void enable();
|
||||||
|
protected abstract void disable();
|
||||||
|
protected abstract void modify();
|
||||||
|
|
||||||
|
private boolean isInvalidPercentage(CommandSender sender, String value) {
|
||||||
|
if (CommandUtils.isInvalidDouble(sender, value)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
newPercent = Double.parseDouble(value);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.gmail.nossr50.commands.hardcore;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
|
||||||
|
public class VampirismCommand extends HardcoreModeCommand {
|
||||||
|
@Override
|
||||||
|
protected boolean checkTogglePermissions() {
|
||||||
|
return Permissions.vampirismToggle(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean checkModifyPermissions() {
|
||||||
|
return Permissions.vampirismModify(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean checkEnabled() {
|
||||||
|
return Config.getInstance().getHardcoreVampirismEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void enable() {
|
||||||
|
Config.getInstance().setHardcoreVampirismEnabled(true);
|
||||||
|
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Vampirism.Enabled"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void disable() {
|
||||||
|
Config.getInstance().setHardcoreVampirismEnabled(false);
|
||||||
|
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Vampirism.Disabled"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void modify() {
|
||||||
|
Config.getInstance().setHardcoreVampirismStatLeechPercentage(newPercent);
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Vampirism.PercentageChanged", percent.format(newPercent / 100D)));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.mc;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
|
|
||||||
public class McabilityCommand implements CommandExecutor {
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
Player player = null;
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
player = (Player) sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player != null && !mcPermissions.getInstance().mcAbility(player)) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
|
|
||||||
if (PP.getAbilityUse()) {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesOff"));
|
|
||||||
PP.toggleAbilityUse();
|
|
||||||
} else {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesOn"));
|
|
||||||
PP.toggleAbilityUse();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.mc;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
|
|
||||||
public class MccCommand implements CommandExecutor {
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
player.sendMessage(ChatColor.RED + "---[]" + ChatColor.YELLOW + "mcMMO Commands" + ChatColor.RED + "[]---"); //TODO: Needs more locale.
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().party(player)) {
|
|
||||||
player.sendMessage(mcLocale.getString("m.mccPartyCommands"));
|
|
||||||
player.sendMessage("/party " + mcLocale.getString("m.mccParty"));
|
|
||||||
player.sendMessage("/party q " + mcLocale.getString("m.mccPartyQ"));
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().partyChat(player))
|
|
||||||
player.sendMessage("/p " + mcLocale.getString("m.mccPartyToggle"));
|
|
||||||
|
|
||||||
player.sendMessage("/invite " + mcLocale.getString("m.mccPartyInvite"));
|
|
||||||
player.sendMessage("/invite " + mcLocale.getString("m.mccPartyAccept"));
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().partyTeleport(player))
|
|
||||||
player.sendMessage("/ptp " + mcLocale.getString("m.mccPartyTeleport"));
|
|
||||||
}
|
|
||||||
player.sendMessage(mcLocale.getString("m.mccOtherCommands"));
|
|
||||||
player.sendMessage("/mcstats " + ChatColor.RED + mcLocale.getString("m.mccStats"));
|
|
||||||
player.sendMessage("/mctop <skillname> <page> " + ChatColor.RED + mcLocale.getString("m.mccLeaderboards"));
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().mcAbility(player))
|
|
||||||
player.sendMessage("/mcability " + ChatColor.RED + mcLocale.getString("m.mccToggleAbility"));
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().adminChat(player))
|
|
||||||
player.sendMessage("/a " + ChatColor.RED + mcLocale.getString("m.mccAdminToggle"));
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().inspect(player))
|
|
||||||
player.sendMessage("/inspect " + mcLocale.getString("m.mccInspect"));
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().mmoedit(player))
|
|
||||||
player.sendMessage("/mmoedit " + mcLocale.getString("m.mccMmoedit"));
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().mcgod(player))
|
|
||||||
player.sendMessage("/mcgod " + ChatColor.RED + mcLocale.getString("m.mccMcGod"));
|
|
||||||
|
|
||||||
player.sendMessage(mcLocale.getString("m.mccSkillInfo"));
|
|
||||||
player.sendMessage("/mcmmo " + mcLocale.getString("m.mccModDescription"));
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.mc;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
|
|
||||||
public class McgodCommand implements CommandExecutor {
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
|
|
||||||
if (!mcPermissions.getInstance().mcgod(player)) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mcPermissions.getInstance().mcgod(player)) {
|
|
||||||
if (PP.getGodMode()) {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.GodModeDisabled"));
|
|
||||||
PP.toggleGodMode();
|
|
||||||
} else {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.GodModeEnabled"));
|
|
||||||
PP.toggleGodMode();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.mc;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.getspout.spoutapi.player.SpoutPlayer;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
|
|
||||||
public class McmmoCommand implements CommandExecutor {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
String description = mcLocale.getString("mcMMO.Description", new Object[] { "mcc" });
|
|
||||||
String[] mcSplit = description.split(",");
|
|
||||||
|
|
||||||
for (String x : mcSplit) {
|
|
||||||
player.sendMessage(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LoadProperties.spoutEnabled && player instanceof SpoutPlayer) {
|
|
||||||
SpoutPlayer sPlayer = (SpoutPlayer) player;
|
|
||||||
if (LoadProperties.donateMessage)
|
|
||||||
sPlayer.sendMessage(ChatColor.YELLOW + "[mcMMO]"+ChatColor.GOLD+" Donate! Paypal "+ChatColor.GREEN+"nossr50@gmail.com"); //Where'd our notification go?
|
|
||||||
} else {
|
|
||||||
if (LoadProperties.donateMessage)
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO]"+ChatColor.GOLD+" Donate! Paypal "+ChatColor.GREEN+"nossr50@gmail.com");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.mc;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.datatypes.AbilityType;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.datatypes.ToolType;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
|
|
||||||
public class McrefreshCommand implements CommandExecutor {
|
|
||||||
private final mcMMO plugin;
|
|
||||||
|
|
||||||
public McrefreshCommand(mcMMO instance) {
|
|
||||||
this.plugin = instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
|
|
||||||
if (!mcPermissions.getInstance().mcrefresh(player)) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (args.length >= 1 && (plugin.getServer().getPlayer(args[0]) != null)) {
|
|
||||||
player.sendMessage("You have refreshed " + args[0] + "'s cooldowns!"); //TODO: Needs more locale.
|
|
||||||
player = plugin.getServer().getPlayer(args[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PREP MODES
|
|
||||||
*/
|
|
||||||
PP = Users.getProfile(player);
|
|
||||||
PP.setRecentlyHurt((long) 0);
|
|
||||||
PP.setToolPreparationMode(ToolType.AXE, false);
|
|
||||||
PP.setToolPreparationMode(ToolType.FISTS, false);
|
|
||||||
PP.setToolPreparationMode(ToolType.HOE, false);
|
|
||||||
PP.setToolPreparationMode(ToolType.PICKAXE, false);
|
|
||||||
PP.setToolPreparationMode(ToolType.SWORD, false);
|
|
||||||
|
|
||||||
//RESET COOLDOWNS
|
|
||||||
PP.resetCooldowns();
|
|
||||||
PP.setAbilityMode(AbilityType.GREEN_TERRA, false);
|
|
||||||
PP.setAbilityMode(AbilityType.GIGA_DRILL_BREAKER, false);
|
|
||||||
PP.setAbilityMode(AbilityType.SERRATED_STRIKES, false);
|
|
||||||
PP.setAbilityMode(AbilityType.SUPER_BREAKER, false);
|
|
||||||
PP.setAbilityMode(AbilityType.TREE_FELLER, false);
|
|
||||||
PP.setAbilityMode(AbilityType.BERSERK, false);
|
|
||||||
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesRefreshed"));
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.mc;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
|
|
||||||
public class McremoveCommand implements CommandExecutor {
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
Player player = null;
|
|
||||||
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
player = (Player) sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player != null && !mcPermissions.getInstance().mcremove(player)) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.length == 0)
|
|
||||||
{
|
|
||||||
sender.sendMessage("Correct usage is /mcremove [Player Name]"); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
String playerName = args[0]; //Player that we are going to remove
|
|
||||||
|
|
||||||
//If the server is using MySQL
|
|
||||||
if(LoadProperties.useMySQL)
|
|
||||||
{
|
|
||||||
int userId = mcMMO.database.getInt("SELECT id FROM "+LoadProperties.MySQLtablePrefix+"users WHERE user = '" + playerName + "'");
|
|
||||||
|
|
||||||
//Remove user from tables
|
|
||||||
mcMMO.database.write("DELETE FROM "
|
|
||||||
+LoadProperties.MySQLdbName+"."
|
|
||||||
+LoadProperties.MySQLtablePrefix+"users WHERE "
|
|
||||||
+LoadProperties.MySQLtablePrefix+"users.id="+userId);
|
|
||||||
|
|
||||||
mcMMO.database.write("DELETE FROM "
|
|
||||||
+LoadProperties.MySQLdbName+"."
|
|
||||||
+LoadProperties.MySQLtablePrefix+"cooldowns WHERE "
|
|
||||||
+LoadProperties.MySQLtablePrefix+"cooldowns.user_id="+userId);
|
|
||||||
|
|
||||||
mcMMO.database.write("DELETE FROM "
|
|
||||||
+LoadProperties.MySQLdbName+"."
|
|
||||||
+LoadProperties.MySQLtablePrefix+"huds WHERE "
|
|
||||||
+LoadProperties.MySQLtablePrefix+"huds.user_id="+userId);
|
|
||||||
|
|
||||||
mcMMO.database.write("DELETE FROM "
|
|
||||||
+LoadProperties.MySQLdbName+"."
|
|
||||||
+LoadProperties.MySQLtablePrefix+"skills WHERE "
|
|
||||||
+LoadProperties.MySQLtablePrefix+"skills.user_id="+userId);
|
|
||||||
|
|
||||||
mcMMO.database.write("DELETE FROM "
|
|
||||||
+LoadProperties.MySQLdbName+"."
|
|
||||||
+LoadProperties.MySQLtablePrefix+"experience WHERE "
|
|
||||||
+LoadProperties.MySQLtablePrefix+"experience.user_id="+userId);
|
|
||||||
|
|
||||||
sender.sendMessage("User "+playerName+" removed from MySQL DB!"); //TODO: Needs more locale.
|
|
||||||
} else {
|
|
||||||
//FlatFile removal
|
|
||||||
//TODO: Properly remove users from FlatFile, it's going to be a huge bitch with how our FlatFile system works. Let's adopt SQLite support.
|
|
||||||
if(Bukkit.getServer().getPlayer(playerName) != null)
|
|
||||||
{
|
|
||||||
Player targetPlayer = Bukkit.getServer().getPlayer(playerName);
|
|
||||||
if(targetPlayer.isOnline())
|
|
||||||
{
|
|
||||||
Users.getProfile(targetPlayer).resetAllData();
|
|
||||||
sender.sendMessage("User "+playerName+" removed from FlatFile DB!"); //TODO: Needs more locale.
|
|
||||||
} else {
|
|
||||||
sender.sendMessage("[mcMMO] This command is not fully functional for FlatFile yet, the player needs to be online."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
sender.sendMessage("[mcMMO] This command is not fully functional for FlatFile yet, the player needs to be online."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Force PlayerProfile stuff to update
|
|
||||||
if(Bukkit.getServer().getPlayer(playerName) != null)
|
|
||||||
{
|
|
||||||
Player targetPlayer = Bukkit.getServer().getPlayer(playerName);
|
|
||||||
if(targetPlayer.isOnline())
|
|
||||||
{
|
|
||||||
targetPlayer.kickPlayer("[mcMMO] Stats have been reset! Rejoin!"); //TODO: Needs more locale.
|
|
||||||
Users.removeUserByName(playerName);
|
|
||||||
} else {
|
|
||||||
Users.removeUser(targetPlayer);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Users.removeUserByName(playerName);
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage("[mcMMO] mcremove operation completed."); //TODO: Needs more locale.
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,186 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.mc;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import com.gmail.nossr50.Leaderboard;
|
|
||||||
import com.gmail.nossr50.m;
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.skills.Skills;
|
|
||||||
|
|
||||||
public class MctopCommand implements CommandExecutor {
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
if (LoadProperties.useMySQL == false) {
|
|
||||||
/*
|
|
||||||
* POWER LEVEL INFO RETRIEVAL
|
|
||||||
*/
|
|
||||||
if (args.length == 0) {
|
|
||||||
int p = 1;
|
|
||||||
String[] info = Leaderboard.retrieveInfo(SkillType.ALL.toString(), p);
|
|
||||||
sender.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
|
|
||||||
int n = 1 * p; // Position
|
|
||||||
for (String x : info) {
|
|
||||||
if (x != null) {
|
|
||||||
String digit = String.valueOf(n);
|
|
||||||
if (n < 10)
|
|
||||||
digit = "0" + String.valueOf(n);
|
|
||||||
String[] splitx = x.split(":");
|
|
||||||
// Format: 1. Playername - skill value
|
|
||||||
sender.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (args.length >= 1 && m.isInt(args[0])) {
|
|
||||||
int p = 1;
|
|
||||||
// Grab page value if specified
|
|
||||||
if (args.length >= 1) {
|
|
||||||
if (m.isInt(args[0])) {
|
|
||||||
p = Integer.valueOf(args[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int pt = p;
|
|
||||||
if (p > 1) {
|
|
||||||
pt -= 1;
|
|
||||||
pt += (pt * 10);
|
|
||||||
pt = 10;
|
|
||||||
}
|
|
||||||
String[] info = Leaderboard.retrieveInfo(SkillType.ALL.toString(), p);
|
|
||||||
sender.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
|
|
||||||
int n = 1 * pt; // Position
|
|
||||||
for (String x : info) {
|
|
||||||
if (x != null) {
|
|
||||||
String digit = String.valueOf(n);
|
|
||||||
if (n < 10)
|
|
||||||
digit = "0" + String.valueOf(n);
|
|
||||||
String[] splitx = x.split(":");
|
|
||||||
// Format: 1. Playername - skill value
|
|
||||||
sender.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* SKILL SPECIFIED INFO RETRIEVAL
|
|
||||||
*/
|
|
||||||
if (args.length >= 1 && Skills.isSkill(args[0])) {
|
|
||||||
int p = 1;
|
|
||||||
// Grab page value if specified
|
|
||||||
if (args.length >= 2) {
|
|
||||||
if (m.isInt(args[1])) {
|
|
||||||
p = Integer.valueOf(args[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int pt = p;
|
|
||||||
if (p > 1) {
|
|
||||||
pt -= 1;
|
|
||||||
pt += (pt * 10);
|
|
||||||
pt = 10;
|
|
||||||
}
|
|
||||||
String firstLetter = args[0].substring(0, 1); // Get first letter
|
|
||||||
String remainder = args[0].substring(1); // Get remainder of word.
|
|
||||||
String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
|
|
||||||
|
|
||||||
String[] info = Leaderboard.retrieveInfo(args[0].toUpperCase(), p);
|
|
||||||
sender.sendMessage(mcLocale.getString("mcPlayerListener.SkillLeaderboard", new Object[] { capitalized }));
|
|
||||||
int n = 1 * pt; // Position
|
|
||||||
for (String x : info) {
|
|
||||||
if (x != null) {
|
|
||||||
String digit = String.valueOf(n);
|
|
||||||
if (n < 10)
|
|
||||||
digit = "0" + String.valueOf(n);
|
|
||||||
String[] splitx = x.split(":");
|
|
||||||
// Format: 1. Playername - skill value
|
|
||||||
sender.sendMessage(digit + ". " + ChatColor.GREEN + splitx[1] + " - " + ChatColor.WHITE + splitx[0]);
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
* MYSQL LEADERBOARDS
|
|
||||||
*/
|
|
||||||
String powerlevel = "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics+fishing";
|
|
||||||
if (args.length >= 1 && Skills.isSkill(args[0])) {
|
|
||||||
/*
|
|
||||||
* Create a nice consistent capitalized leaderboard name
|
|
||||||
*/
|
|
||||||
String lowercase = args[0].toLowerCase(); // For the query
|
|
||||||
String firstLetter = args[0].substring(0, 1); // Get first letter
|
|
||||||
String remainder = args[0].substring(1); // Get remainder of word.
|
|
||||||
String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
|
|
||||||
|
|
||||||
sender.sendMessage(mcLocale.getString("mcPlayerListener.SkillLeaderboard", new Object[] { capitalized }));
|
|
||||||
if (args.length >= 2 && m.isInt(args[1])) {
|
|
||||||
int n = 1; // For the page number
|
|
||||||
int n2 = Integer.valueOf(args[1]);
|
|
||||||
if (n2 > 1) {
|
|
||||||
// Figure out the 'page' here
|
|
||||||
n = 10;
|
|
||||||
n = n * (n2 - 1);
|
|
||||||
}
|
|
||||||
// If a page number is specified
|
|
||||||
HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.read("SELECT " + lowercase + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + lowercase + " > 0 ORDER BY `" + LoadProperties.MySQLtablePrefix + "skills`.`" + lowercase + "` DESC ");
|
|
||||||
|
|
||||||
for (int i = n; i <= n + 10; i++) {
|
|
||||||
if (i > userslist.size() || mcMMO.database.read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
|
|
||||||
break;
|
|
||||||
HashMap<Integer, ArrayList<String>> username = mcMMO.database.read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
|
|
||||||
sender.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// If no page number is specified
|
|
||||||
HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.read("SELECT " + lowercase + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + lowercase + " > 0 ORDER BY `" + LoadProperties.MySQLtablePrefix + "skills`.`" + lowercase + "` DESC ");
|
|
||||||
for (int i = 1; i <= 10; i++) { // i<=userslist.size()
|
|
||||||
if (i > userslist.size() || mcMMO.database.read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
|
|
||||||
break;
|
|
||||||
HashMap<Integer, ArrayList<String>> username = mcMMO.database.read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
|
|
||||||
sender.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (args.length >= 0) {
|
|
||||||
sender.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
|
|
||||||
if (args.length >= 1 && m.isInt(args[0])) {
|
|
||||||
int n = 1; // For the page number
|
|
||||||
int n2 = Integer.valueOf(args[0]);
|
|
||||||
if (n2 > 1) {
|
|
||||||
// Figure out the 'page' here
|
|
||||||
n = 10;
|
|
||||||
n = n * (n2 - 1);
|
|
||||||
}
|
|
||||||
// If a page number is specified
|
|
||||||
HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.read("SELECT " + powerlevel + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + powerlevel + " > 0 ORDER BY " + powerlevel + " DESC ");
|
|
||||||
for (int i = n; i <= n + 10; i++) {
|
|
||||||
if (i > userslist.size() || mcMMO.database.read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
|
|
||||||
break;
|
|
||||||
HashMap<Integer, ArrayList<String>> username = mcMMO.database.read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
|
|
||||||
sender.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.read("SELECT " + powerlevel + ", user_id FROM " + LoadProperties.MySQLtablePrefix + "skills WHERE " + powerlevel + " > 0 ORDER BY " + powerlevel + " DESC ");
|
|
||||||
for (int i = 1; i <= 10; i++) {
|
|
||||||
if (i > userslist.size() || mcMMO.database.read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
|
|
||||||
break;
|
|
||||||
HashMap<Integer, ArrayList<String>> username = mcMMO.database.read("SELECT user FROM " + LoadProperties.MySQLtablePrefix + "users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
|
|
||||||
sender.sendMessage(String.valueOf(i) + ". " + ChatColor.GREEN + userslist.get(i).get(0) + " - " + ChatColor.WHITE + username.get(1).get(0));
|
|
||||||
// System.out.println(username.get(1).get(0));
|
|
||||||
// System.out.println("Mining : " + userslist.get(i).get(0) + ", User id : " + userslist.get(i).get(1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.party;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
|
|
||||||
public class ACommand implements CommandExecutor {
|
|
||||||
|
|
||||||
public ACommand() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
// Console message?
|
|
||||||
if (!(sender instanceof Player) && args.length >= 1) {
|
|
||||||
String aMessage = args[0];
|
|
||||||
for (int i = 1; i <= args.length - 1; i++) {
|
|
||||||
aMessage = aMessage + " " + args[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
String aPrefix = ChatColor.AQUA + "{" + ChatColor.WHITE + "*Console*" + ChatColor.AQUA + "} ";
|
|
||||||
|
|
||||||
Bukkit.getLogger().info("[A]<*Console*> " + aMessage);
|
|
||||||
|
|
||||||
for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
|
|
||||||
if (mcPermissions.getInstance().adminChat(herp) || herp.isOp())
|
|
||||||
herp.sendMessage(aPrefix + aMessage);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = null;
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
player = (Player) sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player != null && !mcPermissions.getInstance().adminChat(player) && !player.isOp()) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Not a toggle, a message
|
|
||||||
|
|
||||||
if (args.length >= 1) {
|
|
||||||
String aMessage = args[0];
|
|
||||||
for (int i = 1; i <= args.length - 1; i++) {
|
|
||||||
aMessage = aMessage + " " + args[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
String name = (LoadProperties.aDisplayNames) ? player.getDisplayName() : player.getName();
|
|
||||||
String aPrefix = ChatColor.AQUA + "{" + ChatColor.WHITE + name + ChatColor.AQUA + "} ";
|
|
||||||
Bukkit.getLogger().info("[A]<" + name + "> " + aMessage);
|
|
||||||
for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
|
|
||||||
if (mcPermissions.getInstance().adminChat(herp) || herp.isOp())
|
|
||||||
herp.sendMessage(aPrefix + aMessage);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(player != null)
|
|
||||||
{
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
|
|
||||||
if (PP.getPartyChatMode())
|
|
||||||
PP.togglePartyChat();
|
|
||||||
|
|
||||||
PP.toggleAdminChat();
|
|
||||||
|
|
||||||
if (PP.getAdminChatMode()) {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.AdminChatOn"));
|
|
||||||
} else {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.AdminChatOff"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.party;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent;
|
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.party.Party;
|
|
||||||
|
|
||||||
public class AcceptCommand implements CommandExecutor {
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
|
|
||||||
if (!mcPermissions.getInstance().party(player)) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PP.hasPartyInvite()) {
|
|
||||||
Party Pinstance = Party.getInstance();
|
|
||||||
|
|
||||||
if (PP.inParty()) {
|
|
||||||
McMMOPartyChangeEvent event = new McMMOPartyChangeEvent(player, PP.getParty(), PP.getInvite(), EventReason.CHANGED_PARTIES);
|
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
if (event.isCancelled()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Pinstance.removeFromParty(player, PP);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
McMMOPartyChangeEvent event = new McMMOPartyChangeEvent(player, null, PP.getInvite(), EventReason.JOINED_PARTY);
|
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
if (event.isCancelled()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PP.acceptInvite();
|
|
||||||
Pinstance.addToParty(player, PP, PP.getParty(), true, null);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.NoInvites"));
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.party;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.party.Party;
|
|
||||||
|
|
||||||
public class InviteCommand implements CommandExecutor {
|
|
||||||
private final mcMMO plugin;
|
|
||||||
|
|
||||||
public InviteCommand(mcMMO instance) {
|
|
||||||
this.plugin = instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
|
|
||||||
if (!mcPermissions.getInstance().party(player)) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Party Pinstance = Party.getInstance();
|
|
||||||
|
|
||||||
if (!PP.inParty()) {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.NotInParty"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (args.length < 1) {
|
|
||||||
player.sendMessage(ChatColor.RED + "Usage is /invite <playername>"); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (PP.inParty() && args.length >= 1 && (plugin.getServer().getPlayer(args[0]) != null)) {
|
|
||||||
if (Pinstance.canInvite(player, PP)) {
|
|
||||||
Player target = plugin.getServer().getPlayer(args[0]);
|
|
||||||
PlayerProfile PPt = Users.getProfile(target);
|
|
||||||
PPt.modifyInvite(PP.getParty());
|
|
||||||
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.InviteSuccess"));
|
|
||||||
target.sendMessage(mcLocale.getString("mcPlayerListener.ReceivedInvite1", new Object[] { PPt.getInvite(), player.getName() }));
|
|
||||||
target.sendMessage(mcLocale.getString("mcPlayerListener.ReceivedInvite2", new Object[] { "accept" }));
|
|
||||||
} else {
|
|
||||||
player.sendMessage(mcLocale.getString("Party.Locked"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.party;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.party.Party;
|
|
||||||
|
|
||||||
public class PCommand implements CommandExecutor {
|
|
||||||
public PCommand() {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
// Console message?
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
if (args.length < 2)
|
|
||||||
return true;
|
|
||||||
String pMessage = args[1];
|
|
||||||
for (int i = 2; i <= args.length - 1; i++) {
|
|
||||||
pMessage = pMessage + " " + args[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
String pPrefix = ChatColor.GREEN + "(" + ChatColor.WHITE + "*Console*" + ChatColor.GREEN + ") ";
|
|
||||||
|
|
||||||
Bukkit.getLogger().info("[P](" + args[0] + ")" + "<*Console*> " + pMessage);
|
|
||||||
|
|
||||||
for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
|
|
||||||
if (Users.getProfile(herp).inParty()) {
|
|
||||||
if (Users.getProfile(herp).getParty().equalsIgnoreCase(args[0])) {
|
|
||||||
herp.sendMessage(pPrefix + pMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
|
|
||||||
if (!mcPermissions.getInstance().party(player)) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Not a toggle, a message
|
|
||||||
|
|
||||||
if (args.length >= 1) {
|
|
||||||
if(!PP.inParty()) {
|
|
||||||
player.sendMessage("You're not in a party."); //TODO: Use mcLocale
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
String pMessage = args[0];
|
|
||||||
for (int i = 1; i <= args.length - 1; i++) {
|
|
||||||
pMessage = pMessage + " " + args[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
String name = (LoadProperties.pDisplayNames) ? player.getDisplayName() : player.getName();
|
|
||||||
String pPrefix = ChatColor.GREEN + "(" + ChatColor.WHITE + name + ChatColor.GREEN + ") ";
|
|
||||||
Bukkit.getLogger().info("[P](" + PP.getParty() + ")<" + name + "> " + pMessage);
|
|
||||||
|
|
||||||
for (Player herp : Bukkit.getServer().getOnlinePlayers()) {
|
|
||||||
if (Users.getProfile(herp).inParty()) {
|
|
||||||
if (Party.getInstance().inSameParty(herp, player))
|
|
||||||
herp.sendMessage(pPrefix + pMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PP.getAdminChatMode())
|
|
||||||
PP.toggleAdminChat();
|
|
||||||
|
|
||||||
PP.togglePartyChat();
|
|
||||||
|
|
||||||
if (PP.getPartyChatMode()) {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.PartyChatOn"));
|
|
||||||
} else {
|
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.PartyChatOff"));
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyAcceptCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
if (!mcMMOPlayer.hasPartyInvite()) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("mcMMO.NoInvites"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Changing parties
|
||||||
|
if (!mcMMO.getPartyManager().changeOrJoinParty(mcMMOPlayer, mcMMOPlayer.getPartyInvite().getName())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMO.getPartyManager().joinInvitedParty(player);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "accept"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyChangeOwnerCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 2:
|
||||||
|
Party playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
|
|
||||||
|
if (!playerParty.getMembers().contains(args[1])) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", args[1]));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMO.getPartyManager().setPartyLeader(args[1], playerParty);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "owner", "<" + LocaleLoader.getString("Commands.Usage.Player") + ">"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyChangePasswordCommand implements CommandExecutor {
|
||||||
|
private Party playerParty;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
unprotectParty(sender);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if (args[1].equalsIgnoreCase("clear") || args[1].equalsIgnoreCase("reset")) {
|
||||||
|
unprotectParty(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protectParty(sender, args[1]);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "password", "[clear|reset]"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "password", "<" + LocaleLoader.getString("Commands.Usage.Password") + ">"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void unprotectParty(CommandSender sender) {
|
||||||
|
playerParty.setLocked(true);
|
||||||
|
playerParty.setPassword(null);
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Password.Removed"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void protectParty(CommandSender sender, String password) {
|
||||||
|
playerParty.setLocked(true);
|
||||||
|
playerParty.setPassword(password);
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Password.Set", password));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,269 +1,234 @@
|
|||||||
package com.gmail.nossr50.commands.party;
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import java.util.ArrayList;
|
||||||
import org.bukkit.ChatColor;
|
import java.util.Collections;
|
||||||
import org.bukkit.command.Command;
|
import java.util.List;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import java.util.Set;
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
import com.gmail.nossr50.Users;
|
import org.bukkit.command.CommandSender;
|
||||||
import com.gmail.nossr50.mcPermissions;
|
import org.bukkit.command.TabExecutor;
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
import org.bukkit.entity.Player;
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent;
|
import org.bukkit.util.StringUtil;
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.party.Party;
|
import com.gmail.nossr50.commands.chat.PartyChatCommand;
|
||||||
|
import com.gmail.nossr50.commands.party.teleport.PtpCommand;
|
||||||
public class PartyCommand implements CommandExecutor {
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
@Override
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
if (!(sender instanceof Player)) {
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
import com.google.common.collect.ImmutableList;
|
||||||
return true;
|
|
||||||
}
|
public class PartyCommand implements TabExecutor {
|
||||||
|
private McMMOPlayer mcMMOPlayer;
|
||||||
Player player = (Player) sender;
|
private Player player;
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
|
private static final List<String> PARTY_SUBCOMMANDS;
|
||||||
if (!mcPermissions.getInstance().party(player)) {
|
private static final List<String> EXPSHARE_COMPLETIONS = ImmutableList.of("none", "equal");
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
private static final List<String> ITEMSHARE_COMPLETIONS = ImmutableList.of("none", "equal", "random", "loot", "mining", "herbalism", "woodcutting", "misc");
|
||||||
return true;
|
|
||||||
}
|
static {
|
||||||
|
ArrayList<String> subcommands = new ArrayList<String>();
|
||||||
Party Pinstance = Party.getInstance();
|
|
||||||
|
for (PartySubcommandType subcommand : PartySubcommandType.values()) {
|
||||||
if (PP.inParty() && (!Pinstance.isParty(PP.getParty()) || !Pinstance.isInParty(player, PP))) {
|
subcommands.add(subcommand.toString());
|
||||||
Pinstance.addToParty(player, PP, PP.getParty(), false, null);
|
}
|
||||||
}
|
|
||||||
|
Collections.sort(subcommands);
|
||||||
if (args.length == 0 && !PP.inParty()) {
|
PARTY_SUBCOMMANDS = ImmutableList.copyOf(subcommands);
|
||||||
player.sendMessage(mcLocale.getString("Party.Help1", new Object[] { "party "}));
|
}
|
||||||
player.sendMessage(mcLocale.getString("Party.Help2", new Object[] { "party "}));
|
|
||||||
player.sendMessage(mcLocale.getString("Party.Help3", new Object[] { "party " }));
|
private CommandExecutor partyJoinCommand = new PartyJoinCommand();
|
||||||
return true;
|
private CommandExecutor partyAcceptCommand = new PartyAcceptCommand();
|
||||||
} else if (args.length == 0 && PP.inParty()) {
|
private CommandExecutor partyCreateCommand = new PartyCreateCommand();
|
||||||
String tempList = "";
|
private CommandExecutor partyQuitCommand = new PartyQuitCommand();
|
||||||
int x = 0;
|
private CommandExecutor partyExpShareCommand = new PartyExpShareCommand();
|
||||||
for (Player p : Bukkit.getServer().getOnlinePlayers()) {
|
private CommandExecutor partyItemShareCommand = new PartyItemShareCommand();
|
||||||
if (PP.getParty().equals(Users.getProfile(p).getParty())) {
|
private CommandExecutor partyInviteCommand = new PartyInviteCommand();
|
||||||
if (p != null && x + 1 >= Pinstance.partyCount(player)) {
|
private CommandExecutor partyKickCommand = new PartyKickCommand();
|
||||||
if (Pinstance.isPartyLeader(p.getName(), PP.getParty())) {
|
private CommandExecutor partyDisbandCommand = new PartyDisbandCommand();
|
||||||
tempList += ChatColor.GOLD + p.getName();
|
private CommandExecutor partyChangeOwnerCommand = new PartyChangeOwnerCommand();
|
||||||
x++;
|
private CommandExecutor partyLockCommand = new PartyLockCommand();
|
||||||
} else {
|
private CommandExecutor partyChangePasswordCommand = new PartyChangePasswordCommand();
|
||||||
tempList += ChatColor.WHITE + p.getName();
|
private CommandExecutor partyRenameCommand = new PartyRenameCommand();
|
||||||
x++;
|
private CommandExecutor partyInfoCommand = new PartyInfoCommand();
|
||||||
}
|
private CommandExecutor partyHelpCommand = new PartyHelpCommand();
|
||||||
}
|
private CommandExecutor partyTeleportCommand = mcMMO.p.getCommand("ptp").getExecutor();
|
||||||
if (p != null && x < Pinstance.partyCount(player)) {
|
private CommandExecutor partyChatCommand = new PartyChatCommand();
|
||||||
if (Pinstance.isPartyLeader(p.getName(), PP.getParty())) {
|
|
||||||
tempList += ChatColor.GOLD + p.getName() + ", ";
|
@Override
|
||||||
x++;
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
} else {
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
tempList += ChatColor.WHITE + p.getName() + ", ";
|
return true;
|
||||||
x++;
|
}
|
||||||
}
|
|
||||||
}
|
if (!Permissions.party(sender)) {
|
||||||
}
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
}
|
return true;
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.YouAreInParty", new Object[] { PP.getParty() }));
|
}
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.PartyMembers") + " (" + tempList + ChatColor.GREEN + ")");
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
//Master Apprentice Stuff
|
player = mcMMOPlayer.getPlayer();
|
||||||
//Show the player all their bonuses when they type /party
|
|
||||||
|
if (args.length < 1) {
|
||||||
/*
|
if (!mcMMOPlayer.inParty()) {
|
||||||
for(Player a : Party.getInstance().getPartyMembers(player))
|
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
|
||||||
{
|
return printUsage();
|
||||||
if(Party.getInstance().isPartyLeader(a.getName(), PP.getParty()) && !a.getName().equals(player.getName()))
|
}
|
||||||
{
|
|
||||||
PlayerProfile LP = Users.getProfile(a);
|
return partyInfoCommand.onCommand(sender, command, label, args);
|
||||||
for(SkillType type : SkillType.values())
|
}
|
||||||
{
|
|
||||||
//Skip this one
|
PartySubcommandType subcommand = PartySubcommandType.getSubcommand(args[0]);
|
||||||
if(type == SkillType.ALL)
|
|
||||||
continue;
|
if (subcommand == null) {
|
||||||
|
return printUsage();
|
||||||
if(LP.getSkillLevel(type) > PP.getSkillLevel(type))
|
}
|
||||||
{
|
|
||||||
//Tell them what their skill bonus is for this skill
|
// Can't use this for lock/unlock since they're handled by the same command
|
||||||
int leaderLevel = LP.getSkillLevel(type);
|
if (subcommand != PartySubcommandType.LOCK && subcommand != PartySubcommandType.UNLOCK && !Permissions.partySubcommand(sender, subcommand)) {
|
||||||
int difference = leaderLevel - PP.getSkillLevel(type);
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
double bonusModifier = (difference*0.75D)/100D;
|
}
|
||||||
double trueBonus = bonusModifier * 100;
|
|
||||||
player.sendMessage("You get "+trueBonus+"% more XP from "+type.toString());
|
switch (subcommand) {
|
||||||
//double percent = (trueBonus/100)*100;
|
case JOIN:
|
||||||
} else
|
return partyJoinCommand.onCommand(sender, command, label, args);
|
||||||
{
|
case ACCEPT:
|
||||||
//Tell them they have no bonus.. or not
|
return partyAcceptCommand.onCommand(sender, command, label, args);
|
||||||
}
|
case CREATE:
|
||||||
}
|
return partyCreateCommand.onCommand(sender, command, label, args);
|
||||||
} else if(Party.getInstance().isPartyLeader(a.getName(), PP.getParty()) && a.getName().equals(player.getName()))
|
case HELP:
|
||||||
{
|
return partyHelpCommand.onCommand(sender, command, label, args);
|
||||||
//Tell them they are providing bonuses
|
default:
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
// Party member commands
|
||||||
return true;
|
if (!mcMMOPlayer.inParty()) {
|
||||||
} else if (args.length == 1) {
|
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
|
||||||
if (args[0].equals("q") && PP.inParty()) {
|
return printUsage();
|
||||||
|
}
|
||||||
McMMOPartyChangeEvent event = new McMMOPartyChangeEvent(player, PP.getParty(), null, EventReason.LEFT_PARTY);
|
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
switch (subcommand) {
|
||||||
|
case INFO:
|
||||||
if (event.isCancelled()) {
|
return partyInfoCommand.onCommand(sender, command, label, args);
|
||||||
return true;
|
case QUIT:
|
||||||
}
|
return partyQuitCommand.onCommand(sender, command, label, args);
|
||||||
|
case INVITE:
|
||||||
Pinstance.removeFromParty(player, PP);
|
return partyInviteCommand.onCommand(sender, command, label, args);
|
||||||
player.sendMessage(mcLocale.getString("mcPlayerListener.LeftParty"));
|
case TELEPORT:
|
||||||
return true;
|
return partyTeleportCommand.onCommand(sender, command, label, extractArgs(args));
|
||||||
|
case CHAT:
|
||||||
} else if (args[0].equalsIgnoreCase("?")) {
|
return partyChatCommand.onCommand(sender, command, label, extractArgs(args));
|
||||||
player.sendMessage(mcLocale.getString("Party.Help4", new Object[] { "party " }));
|
default:
|
||||||
player.sendMessage(mcLocale.getString("Party.Help2", new Object[] { "party " }));
|
break;
|
||||||
player.sendMessage(mcLocale.getString("Party.Help5", new Object[] { "party " }));
|
}
|
||||||
player.sendMessage(mcLocale.getString("Party.Help6", new Object[] { "party " }));
|
|
||||||
player.sendMessage(mcLocale.getString("Party.Help7", new Object[] { "party " }));
|
// Party leader commands
|
||||||
player.sendMessage(mcLocale.getString("Party.Help8", new Object[] { "party " }));
|
if (!mcMMOPlayer.getParty().getLeader().equalsIgnoreCase(player.getName())) {
|
||||||
player.sendMessage(mcLocale.getString("Party.Help9", new Object[] { "party " }));
|
sender.sendMessage(LocaleLoader.getString("Party.NotOwner"));
|
||||||
} else if (args[0].equalsIgnoreCase("lock")) {
|
return true;
|
||||||
if (PP.inParty()) {
|
}
|
||||||
if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
|
|
||||||
Pinstance.lockParty(PP.getParty());
|
switch (subcommand) {
|
||||||
player.sendMessage(mcLocale.getString("Party.Locked"));
|
case EXPSHARE:
|
||||||
} else {
|
return partyExpShareCommand.onCommand(sender, command, label, args);
|
||||||
player.sendMessage(mcLocale.getString("Party.NotOwner"));
|
case ITEMSHARE:
|
||||||
}
|
return partyItemShareCommand.onCommand(sender, command, label, args);
|
||||||
} else {
|
case KICK:
|
||||||
player.sendMessage(mcLocale.getString("Party.InvalidName"));
|
return partyKickCommand.onCommand(sender, command, label, args);
|
||||||
}
|
case DISBAND:
|
||||||
} else if (args[0].equalsIgnoreCase("unlock")) {
|
return partyDisbandCommand.onCommand(sender, command, label, args);
|
||||||
if (PP.inParty()) {
|
case OWNER:
|
||||||
if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
|
return partyChangeOwnerCommand.onCommand(sender, command, label, args);
|
||||||
Pinstance.unlockParty(PP.getParty());
|
case LOCK:
|
||||||
player.sendMessage(mcLocale.getString("Party.Unlocked"));
|
case UNLOCK:
|
||||||
} else {
|
return partyLockCommand.onCommand(sender, command, label, args);
|
||||||
player.sendMessage(mcLocale.getString("Party.NotOwner"));
|
case PASSWORD:
|
||||||
}
|
return partyChangePasswordCommand.onCommand(sender, command, label, args);
|
||||||
} else {
|
case RENAME:
|
||||||
player.sendMessage(mcLocale.getString("Party.InvalidName"));
|
return partyRenameCommand.onCommand(sender, command, label, args);
|
||||||
}
|
default:
|
||||||
// Party debugging command.
|
break;
|
||||||
// } else if (args[0].equalsIgnoreCase("dump")) {
|
}
|
||||||
// Pinstance.dump(player);
|
|
||||||
} else {
|
return true;
|
||||||
if (PP.inParty()) {
|
}
|
||||||
McMMOPartyChangeEvent event = new McMMOPartyChangeEvent(player, PP.getParty(), args[0], EventReason.CHANGED_PARTIES);
|
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
if (event.isCancelled()) {
|
switch (args.length) {
|
||||||
return true;
|
case 1:
|
||||||
}
|
return StringUtil.copyPartialMatches(args[0], PARTY_SUBCOMMANDS, new ArrayList<String>(PARTY_SUBCOMMANDS.size()));
|
||||||
|
case 2:
|
||||||
Pinstance.removeFromParty(player, PP);
|
PartySubcommandType subcommand = PartySubcommandType.getSubcommand(args[0]);
|
||||||
}
|
|
||||||
else {
|
if (subcommand == null) {
|
||||||
McMMOPartyChangeEvent event = new McMMOPartyChangeEvent(player, null, args[0], EventReason.JOINED_PARTY);
|
return ImmutableList.of();
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
}
|
||||||
|
|
||||||
if (event.isCancelled()) {
|
switch (subcommand) {
|
||||||
return true;
|
case JOIN:
|
||||||
}
|
case INVITE:
|
||||||
}
|
case KICK:
|
||||||
Pinstance.addToParty(player, PP, args[0], false, null);
|
case OWNER:
|
||||||
return true;
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
}
|
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
} else if (args.length == 2 && PP.inParty()) {
|
case EXPSHARE:
|
||||||
if (args[0].equalsIgnoreCase("password")) {
|
return StringUtil.copyPartialMatches(args[1], EXPSHARE_COMPLETIONS, new ArrayList<String>(EXPSHARE_COMPLETIONS.size()));
|
||||||
if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
|
case ITEMSHARE:
|
||||||
if (Pinstance.isPartyLocked(PP.getParty())) {
|
return StringUtil.copyPartialMatches(args[1], ITEMSHARE_COMPLETIONS, new ArrayList<String>(ITEMSHARE_COMPLETIONS.size()));
|
||||||
Pinstance.setPartyPassword(PP.getParty(), args[1]);
|
case LOCK:
|
||||||
player.sendMessage(mcLocale.getString("Party.PasswordSet", new Object[] { args[1] }));
|
case CHAT:
|
||||||
} else {
|
return StringUtil.copyPartialMatches(args[1], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
player.sendMessage(mcLocale.getString("Party.IsntLocked"));
|
case PASSWORD:
|
||||||
}
|
return StringUtil.copyPartialMatches(args[1], CommandUtils.RESET_OPTIONS, new ArrayList<String>(CommandUtils.RESET_OPTIONS.size()));
|
||||||
} else {
|
case TELEPORT:
|
||||||
player.sendMessage(mcLocale.getString("Party.NotOwner"));
|
List<String> matches = StringUtil.copyPartialMatches(args[1], PtpCommand.TELEPORT_SUBCOMMANDS, new ArrayList<String>(PtpCommand.TELEPORT_SUBCOMMANDS.size()));
|
||||||
}
|
|
||||||
} else if (args[0].equalsIgnoreCase("kick")) {
|
if (matches.size() == 0) {
|
||||||
if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
|
playerNames = UserManager.getPlayers().keySet();
|
||||||
if (Pinstance.isPartyLocked(PP.getParty())) {
|
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
Player tPlayer = null;
|
}
|
||||||
if (Bukkit.getServer().getPlayer(args[1]) != null)
|
|
||||||
tPlayer = Bukkit.getServer().getPlayer(args[1]);
|
return matches;
|
||||||
if (tPlayer == null) {
|
default:
|
||||||
player.sendMessage(mcLocale.getString("Party.CouldNotKick", new Object[] { args[1] }));
|
return ImmutableList.of();
|
||||||
}
|
}
|
||||||
if (!Pinstance.inSameParty(player, tPlayer)) {
|
case 3:
|
||||||
player.sendMessage(mcLocale.getString("Party.NotInYourParty", new Object[] { tPlayer.getName() }));
|
if (PartySubcommandType.getSubcommand(args[0]) == PartySubcommandType.ITEMSHARE && isItemShareCategory(args[1])) {
|
||||||
} else {
|
return StringUtil.copyPartialMatches(args[2], CommandUtils.TRUE_FALSE_OPTIONS, new ArrayList<String>(CommandUtils.TRUE_FALSE_OPTIONS.size()));
|
||||||
// Not an admin
|
}
|
||||||
if (!mcPermissions.getInstance().admin(player)) {
|
|
||||||
// Can't kick an admin
|
return ImmutableList.of();
|
||||||
if (mcPermissions.getInstance().admin(tPlayer)) {
|
default:
|
||||||
player.sendMessage(mcLocale.getString("Party.CouldNotKick", new Object[] { tPlayer.getName() }));
|
return ImmutableList.of();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PlayerProfile tPP = Users.getProfile(tPlayer);
|
|
||||||
|
private boolean printUsage() {
|
||||||
McMMOPartyChangeEvent event = new McMMOPartyChangeEvent(player, tPP.getParty(), null, EventReason.KICKED_FROM_PARTY);
|
player.sendMessage(LocaleLoader.getString("Party.Help.0", "/party join"));
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
player.sendMessage(LocaleLoader.getString("Party.Help.1", "/party create"));
|
||||||
|
player.sendMessage(LocaleLoader.getString("Party.Help.2", "/party ?"));
|
||||||
if (event.isCancelled()) {
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
|
private String[] extractArgs(String[] args) {
|
||||||
Pinstance.removeFromParty(tPlayer, tPP);
|
String[] newArgs = new String[args.length - 1];
|
||||||
|
|
||||||
tPlayer.sendMessage(mcLocale.getString("mcPlayerListener.LeftParty"));
|
for (int i = 1; i < args.length; i++) {
|
||||||
}
|
newArgs[i - 1] = args[i];
|
||||||
} else {
|
}
|
||||||
player.sendMessage(mcLocale.getString("Party.IsntLocked"));
|
|
||||||
}
|
return newArgs;
|
||||||
} else {
|
}
|
||||||
player.sendMessage(mcLocale.getString("Party.NotOwner"));
|
|
||||||
}
|
private boolean isItemShareCategory(String category) {
|
||||||
} else if (args[0].equalsIgnoreCase("owner")) {
|
return category.equalsIgnoreCase("loot") || category.equalsIgnoreCase("mining") || category.equalsIgnoreCase("herbalism") || category.equalsIgnoreCase("woodcutting") || category.equalsIgnoreCase("misc");
|
||||||
if (Pinstance.isPartyLeader(player.getName(), PP.getParty())) {
|
}
|
||||||
Player tPlayer = null;
|
}
|
||||||
if (Bukkit.getServer().getPlayer(args[1]) != null)
|
|
||||||
tPlayer = Bukkit.getServer().getPlayer(args[1]);
|
|
||||||
if (tPlayer == null) {
|
|
||||||
player.sendMessage(mcLocale.getString("Party.CouldNotSetOwner", new Object[] { args[1] }));
|
|
||||||
}
|
|
||||||
if (!Pinstance.inSameParty(player, tPlayer)) {
|
|
||||||
player.sendMessage(mcLocale.getString("Party.CouldNotSetOwner", new Object[] { tPlayer.getName() }));
|
|
||||||
} else {
|
|
||||||
Pinstance.setPartyLeader(PP.getParty(), tPlayer.getName());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
player.sendMessage(mcLocale.getString("Party.NotOwner"));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
McMMOPartyChangeEvent event = new McMMOPartyChangeEvent(player, PP.getParty(), args[0], EventReason.CHANGED_PARTIES);
|
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
if (event.isCancelled()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Pinstance.removeFromParty(player, PP);
|
|
||||||
Pinstance.addToParty(player, PP, args[0], false, args[1]);
|
|
||||||
}
|
|
||||||
} else if (args.length == 2 && !PP.inParty()) {
|
|
||||||
McMMOPartyChangeEvent event = new McMMOPartyChangeEvent(player, null, args[0], EventReason.JOINED_PARTY);
|
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
if (event.isCancelled()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Pinstance.addToParty(player, PP, args[0], false, args[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyCreateCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
// Check to see if the party exists, and if it does cancel creating a new party
|
||||||
|
if (mcMMO.getPartyManager().checkPartyExistence(player, args[1])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Changing parties
|
||||||
|
if (!mcMMO.getPartyManager().changeOrJoinParty(mcMMOPlayer, args[1])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMO.getPartyManager().createParty(player, args[1], getPassword(args));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.3", "party", "create", "<" + LocaleLoader.getString("Commands.Usage.PartyName") + ">", "[" + LocaleLoader.getString("Commands.Usage.Password") + "]"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getPassword(String[] args) {
|
||||||
|
if (args.length == 3) {
|
||||||
|
return args[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyDisbandCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Party playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
|
String partyName = playerParty.getName();
|
||||||
|
|
||||||
|
for (Player member : playerParty.getOnlineMembers()) {
|
||||||
|
if (!mcMMO.getPartyManager().handlePartyChangeEvent(member, partyName, null, EventReason.KICKED_FROM_PARTY)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
member.sendMessage(LocaleLoader.getString("Party.Disband"));
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMO.getPartyManager().disbandParty(playerParty);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "disband"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.ShareHandler;
|
||||||
|
import com.gmail.nossr50.party.ShareHandler.ShareMode;
|
||||||
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyExpShareCommand implements CommandExecutor {
|
||||||
|
private Party playerParty;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (!Config.getInstance().getExpShareEnabled()) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.ExpShare.Disabled"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 2:
|
||||||
|
playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
|
|
||||||
|
if (args[1].equalsIgnoreCase("none") || CommandUtils.shouldDisableToggle(args[1])) {
|
||||||
|
handleChangingShareMode(ShareMode.NONE);
|
||||||
|
}
|
||||||
|
else if (args[1].equalsIgnoreCase("equal") || args[1].equalsIgnoreCase("even") || CommandUtils.shouldEnableToggle(args[1])) {
|
||||||
|
handleChangingShareMode(ShareMode.EQUAL);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "expshare", "<NONE | EQUAL>"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "expshare", "<NONE | EQUAL>"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleChangingShareMode(ShareHandler.ShareMode mode) {
|
||||||
|
playerParty.setXpShareMode(mode);
|
||||||
|
|
||||||
|
String changeModeMessage = LocaleLoader.getString("Commands.Party.SetSharing", LocaleLoader.getString("Party.ShareType.Exp"), LocaleLoader.getString("Party.ShareMode." + StringUtils.getCapitalized(mode.toString())));
|
||||||
|
|
||||||
|
for (Player member : playerParty.getOnlineMembers()) {
|
||||||
|
member.sendMessage(changeModeMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
|
||||||
|
public class PartyHelpCommand implements CommandExecutor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.3", "/party join", "/party quit"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.1", "/party create"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.4", "/party <lock|unlock>"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.5", "/party password"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.6", "/party kick"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.7", "/party leader"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.8", "/party disband"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.9", "/party itemshare"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Help.10", "/party expshare"));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "help"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.party.ShareHandler;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyInfoCommand implements CommandExecutor {
|
||||||
|
private Player player;
|
||||||
|
private Party playerParty;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
playerParty = mcMMOPlayer.getParty();
|
||||||
|
|
||||||
|
displayPartyHeader();
|
||||||
|
displayShareModeInfo();
|
||||||
|
displayMemberInfo();
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "info"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String createMembersList() {
|
||||||
|
StringBuilder memberList = new StringBuilder();
|
||||||
|
|
||||||
|
for (String memberName : playerParty.getMembers()) {
|
||||||
|
OfflinePlayer member = mcMMO.p.getServer().getOfflinePlayer(memberName);
|
||||||
|
|
||||||
|
if (playerParty.getLeader().equalsIgnoreCase(memberName)) {
|
||||||
|
memberList.append(ChatColor.GOLD);
|
||||||
|
}
|
||||||
|
else if (member.isOnline()) {
|
||||||
|
memberList.append(ChatColor.WHITE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
memberList.append(ChatColor.GRAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
memberList.append(memberName).append(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
return memberList.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void displayShareModeInfo() {
|
||||||
|
boolean xpShareEnabled = Config.getInstance().getExpShareEnabled();
|
||||||
|
boolean itemShareEnabled = Config.getInstance().getItemShareEnabled();
|
||||||
|
boolean itemSharingActive = (playerParty.getItemShareMode() != ShareHandler.ShareMode.NONE);
|
||||||
|
|
||||||
|
if (!xpShareEnabled && !itemShareEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String expShareInfo = "";
|
||||||
|
String itemShareInfo = "";
|
||||||
|
String separator = "";
|
||||||
|
|
||||||
|
if (xpShareEnabled) {
|
||||||
|
expShareInfo = LocaleLoader.getString("Commands.Party.ExpShare", playerParty.getXpShareMode().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemShareEnabled) {
|
||||||
|
itemShareInfo = LocaleLoader.getString("Commands.Party.ItemShare", playerParty.getItemShareMode().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xpShareEnabled && itemShareEnabled) {
|
||||||
|
separator = ChatColor.DARK_GRAY + " || ";
|
||||||
|
}
|
||||||
|
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Party.ShareMode") + expShareInfo + separator + itemShareInfo);
|
||||||
|
if (itemSharingActive) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Party.ItemShareCategories", playerParty.getItemShareCategories()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void displayPartyHeader() {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Party.Header"));
|
||||||
|
|
||||||
|
if (playerParty.isLocked()) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Party.Status", playerParty.getName(), LocaleLoader.getString("Party.Status.Locked")));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Party.Status", playerParty.getName(), LocaleLoader.getString("Party.Status.Unlocked")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void displayMemberInfo() {
|
||||||
|
int membersNear = mcMMO.getPartyManager().getNearbyPartyMembers(player, Config.getInstance().getPartyShareRange()).size();
|
||||||
|
int membersOnline = playerParty.getOnlineMembers().size() - 1;
|
||||||
|
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Party.Members.Header"));
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Party.MembersNear", membersNear, membersOnline));
|
||||||
|
player.sendMessage(createMembersList());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyInviteCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 2:
|
||||||
|
McMMOPlayer mcMMOTarget = UserManager.getPlayer(args[1]);
|
||||||
|
|
||||||
|
if (!CommandUtils.checkPlayerExistence(sender, args[1], mcMMOTarget)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player target = mcMMOTarget.getPlayer();
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
if (player.equals(target)) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Invite.Self"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mcMMO.getPartyManager().inSameParty(player, target)) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Player.InSameParty", target.getName()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Party playerParty = mcMMOPlayer.getParty();
|
||||||
|
|
||||||
|
if (!mcMMO.getPartyManager().canInvite(player)) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Party.Locked"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOTarget.setPartyInvite(playerParty);
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Invite.Success"));
|
||||||
|
target.sendMessage(LocaleLoader.getString("Commands.Party.Invite.0", playerParty.getName(), player.getName()));
|
||||||
|
target.sendMessage(LocaleLoader.getString("Commands.Party.Invite.1"));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "invite", "<" + LocaleLoader.getString("Commands.Usage.Player") + ">"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.party.ItemShareType;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.ShareHandler.ShareMode;
|
||||||
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyItemShareCommand implements CommandExecutor {
|
||||||
|
private Party playerParty;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (!Config.getInstance().getItemShareEnabled()) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.ItemShare.Disabled"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 2:
|
||||||
|
playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
|
ShareMode mode = ShareMode.getShareMode(args[1].toUpperCase());
|
||||||
|
|
||||||
|
if (mode == null) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<NONE | EQUAL | RANDOM>"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
handleChangingShareMode(mode);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
|
boolean toggle = false;
|
||||||
|
|
||||||
|
if (CommandUtils.shouldEnableToggle(args[2])) {
|
||||||
|
toggle = true;
|
||||||
|
}
|
||||||
|
else if (CommandUtils.shouldDisableToggle(args[2])) {
|
||||||
|
toggle = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting | misc> <true | false>"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
handleToggleItemShareCategory(ItemShareType.valueOf(args[1].toUpperCase()), toggle);
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ex) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting | misc> <true | false>"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<NONE | EQUAL | RANDOM>"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting | misc> <true | false>"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleChangingShareMode(ShareMode mode) {
|
||||||
|
playerParty.setItemShareMode(mode);
|
||||||
|
|
||||||
|
String changeModeMessage = LocaleLoader.getString("Commands.Party.SetSharing", LocaleLoader.getString("Party.ShareType.Item"), LocaleLoader.getString("Party.ShareMode." + StringUtils.getCapitalized(mode.toString())));
|
||||||
|
|
||||||
|
for (Player member : playerParty.getOnlineMembers()) {
|
||||||
|
member.sendMessage(changeModeMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleToggleItemShareCategory(ItemShareType type, boolean toggle) {
|
||||||
|
playerParty.setSharingDrops(type, toggle);
|
||||||
|
|
||||||
|
String toggleMessage = LocaleLoader.getString("Commands.Party.ToggleShareCategory", StringUtils.getCapitalized(type.toString()), toggle ? "enabled" : "disabled");
|
||||||
|
|
||||||
|
for (Player member : playerParty.getOnlineMembers()) {
|
||||||
|
member.sendMessage(toggleMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyJoinCommand implements CommandExecutor {
|
||||||
|
private McMMOPlayer mcMMOTarget;
|
||||||
|
private Player target;
|
||||||
|
private Party targetParty;
|
||||||
|
|
||||||
|
private McMMOPlayer mcMMOPlayer;
|
||||||
|
private Player player;
|
||||||
|
private Party playerParty;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
// Verify target exists and is in a different party than the player
|
||||||
|
if (!canJoinParty(sender, args[1])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer((Player) sender);
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
String password = getPassword(args);
|
||||||
|
|
||||||
|
// Make sure party passwords match
|
||||||
|
if (!mcMMO.getPartyManager().checkPartyPassword(player, targetParty, password)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Changing parties
|
||||||
|
if (!mcMMO.getPartyManager().changeOrJoinParty(mcMMOPlayer, targetParty.getName())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMO.getPartyManager().joinParty(player, targetParty, password);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.3", "party", "join", "<" + LocaleLoader.getString("Commands.Usage.Player") + ">", "[" + LocaleLoader.getString("Commands.Usage.Password") + "]"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getPassword(String[] args) {
|
||||||
|
if (args.length == 3) {
|
||||||
|
return args[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean canJoinParty(CommandSender sender, String targetName) {
|
||||||
|
mcMMOTarget = UserManager.getPlayer(targetName);
|
||||||
|
|
||||||
|
if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
target = mcMMOTarget.getPlayer();
|
||||||
|
|
||||||
|
if (!mcMMOTarget.inParty()) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.PlayerNotInParty", targetName));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
playerParty = mcMMOPlayer.getParty();
|
||||||
|
targetParty = mcMMOTarget.getParty();
|
||||||
|
|
||||||
|
if (player.equals(target) || (mcMMOPlayer.inParty() && playerParty.equals(targetParty))) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Join.Self"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyKickCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 2:
|
||||||
|
Party playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
|
OfflinePlayer target = mcMMO.p.getServer().getOfflinePlayer(args[1]);
|
||||||
|
|
||||||
|
if (!playerParty.getMembers().contains(target.getName())) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", args[1]));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target.isOnline()) {
|
||||||
|
Player onlineTarget = target.getPlayer();
|
||||||
|
String partyName = playerParty.getName();
|
||||||
|
|
||||||
|
if (!mcMMO.getPartyManager().handlePartyChangeEvent(onlineTarget, partyName, null, EventReason.KICKED_FROM_PARTY)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
onlineTarget.sendMessage(LocaleLoader.getString("Commands.Party.Kick", partyName));
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMO.getPartyManager().removeFromParty(target, playerParty);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "kick", "<" + LocaleLoader.getString("Commands.Usage.Player") + ">"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyLockCommand implements CommandExecutor {
|
||||||
|
private Party playerParty;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
playerParty = UserManager.getPlayer(sender.getName()).getParty();
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
if (args[0].equalsIgnoreCase("lock")) {
|
||||||
|
lockParty(sender, command.getPermissionMessage());
|
||||||
|
}
|
||||||
|
else if (args[0].equalsIgnoreCase("unlock")) {
|
||||||
|
unlockParty(sender, command.getPermissionMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if (!args[0].equalsIgnoreCase("lock")) {
|
||||||
|
sendUsageStrings(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CommandUtils.shouldEnableToggle(args[1])) {
|
||||||
|
lockParty(sender, command.getPermissionMessage());
|
||||||
|
}
|
||||||
|
else if (CommandUtils.shouldDisableToggle(args[1])) {
|
||||||
|
unlockParty(sender, command.getPermissionMessage());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sendUsageStrings(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sendUsageStrings(sender);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle locking a party.
|
||||||
|
*/
|
||||||
|
private void lockParty(CommandSender sender, String permissionMessage) {
|
||||||
|
if (!Permissions.partySubcommand(sender, PartySubcommandType.LOCK)) {
|
||||||
|
sender.sendMessage(permissionMessage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (playerParty.isLocked()) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.IsLocked"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
playerParty.setLocked(true);
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Locked"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle unlocking a party.
|
||||||
|
*
|
||||||
|
* @return true if party is successfully unlocked, false otherwise.
|
||||||
|
*/
|
||||||
|
private void unlockParty(CommandSender sender, String permissionMessage) {
|
||||||
|
if (!Permissions.partySubcommand(sender, PartySubcommandType.UNLOCK)) {
|
||||||
|
sender.sendMessage(permissionMessage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!playerParty.isLocked()) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.IsntLocked"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
playerParty.setLocked(false);
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Unlocked"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendUsageStrings(CommandSender sender) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "lock", "[on|off]"));
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "unlock"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyQuitCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Player player = (Player) sender;
|
||||||
|
Party playerParty = UserManager.getPlayer(player).getParty();
|
||||||
|
|
||||||
|
if (!mcMMO.getPartyManager().handlePartyChangeEvent(player, playerParty.getName(), null, EventReason.LEFT_PARTY)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMO.getPartyManager().removeFromParty(player, playerParty);
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Party.Leave"));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "quit"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PartyRenameCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 2:
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
Party playerParty = mcMMOPlayer.getParty();
|
||||||
|
|
||||||
|
String oldPartyName = playerParty.getName();
|
||||||
|
String newPartyName = args[1];
|
||||||
|
|
||||||
|
// This is to prevent party leaders from spamming other players with the rename message
|
||||||
|
if (oldPartyName.equalsIgnoreCase(newPartyName)) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Party.Rename.Same"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
// Check to see if the party exists, and if it does cancel renaming the party
|
||||||
|
if (mcMMO.getPartyManager().checkPartyExistence(player, newPartyName)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
String leaderName = playerParty.getLeader();
|
||||||
|
|
||||||
|
for (Player member : playerParty.getOnlineMembers()) {
|
||||||
|
if (!mcMMO.getPartyManager().handlePartyChangeEvent(member, oldPartyName, newPartyName, EventReason.CHANGED_PARTIES)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!member.getName().equalsIgnoreCase(leaderName)) {
|
||||||
|
member.sendMessage(LocaleLoader.getString("Party.InformedOnNameChange", leaderName, newPartyName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
playerParty.setName(newPartyName);
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Party.Rename", newPartyName));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "rename", "<" + LocaleLoader.getString("Commands.Usage.PartyName") + ">"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
|
public enum PartySubcommandType {
|
||||||
|
JOIN,
|
||||||
|
ACCEPT,
|
||||||
|
CREATE,
|
||||||
|
HELP,
|
||||||
|
INFO,
|
||||||
|
QUIT,
|
||||||
|
EXPSHARE,
|
||||||
|
ITEMSHARE,
|
||||||
|
INVITE,
|
||||||
|
KICK,
|
||||||
|
DISBAND,
|
||||||
|
OWNER,
|
||||||
|
LOCK,
|
||||||
|
UNLOCK,
|
||||||
|
PASSWORD,
|
||||||
|
RENAME,
|
||||||
|
TELEPORT,
|
||||||
|
CHAT;
|
||||||
|
|
||||||
|
public static PartySubcommandType getSubcommand(String commandName) {
|
||||||
|
for (PartySubcommandType command : values()) {
|
||||||
|
if (command.name().equalsIgnoreCase(commandName)) {
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commandName.equalsIgnoreCase("?")) {
|
||||||
|
return HELP;
|
||||||
|
}
|
||||||
|
else if (commandName.equalsIgnoreCase("q") || commandName.equalsIgnoreCase("leave")) {
|
||||||
|
return QUIT;
|
||||||
|
}
|
||||||
|
else if (commandName.equalsIgnoreCase("leader")) {
|
||||||
|
return OWNER;
|
||||||
|
}
|
||||||
|
else if (commandName.equalsIgnoreCase("xpshare") || commandName.equalsIgnoreCase("shareexp") || commandName.equalsIgnoreCase("sharexp")) {
|
||||||
|
return EXPSHARE;
|
||||||
|
}
|
||||||
|
else if (commandName.equalsIgnoreCase("shareitem") || commandName.equalsIgnoreCase("shareitems")) {
|
||||||
|
return ITEMSHARE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.party;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.gmail.nossr50.mcPermissions;
|
|
||||||
import com.gmail.nossr50.config.LoadProperties;
|
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent;
|
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.party.Party;
|
|
||||||
|
|
||||||
public class PtpCommand implements CommandExecutor {
|
|
||||||
private final mcMMO plugin;
|
|
||||||
|
|
||||||
public PtpCommand(mcMMO instance) {
|
|
||||||
this.plugin = instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
|
||||||
|
|
||||||
if (!mcPermissions.getInstance().partyTeleport(player)) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "[mcMMO] " + ChatColor.DARK_RED + mcLocale.getString("mcPlayerListener.NoPermission"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!Party.getInstance().isParty(PP.getParty()))
|
|
||||||
{
|
|
||||||
player.sendMessage(ChatColor.RED+"You are not in a party!"); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(PP.getRecentlyHurt()+(LoadProperties.ptpCommandCooldown*1000) > System.currentTimeMillis())
|
|
||||||
{
|
|
||||||
player.sendMessage(ChatColor.RED+"You've been hurt in the last " + LoadProperties.ptpCommandCooldown + " seconds and cannnot teleport."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length < 1) {
|
|
||||||
player.sendMessage(ChatColor.RED + "Usage is /ptp <playername>"); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin.getServer().getPlayer(args[0]) == null) {
|
|
||||||
player.sendMessage("That is not a valid player"); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin.getServer().getPlayer(args[0]) != null) {
|
|
||||||
Player target = plugin.getServer().getPlayer(args[0]);
|
|
||||||
PlayerProfile PPt = Users.getProfile(target);
|
|
||||||
|
|
||||||
if (target.isDead()) {
|
|
||||||
player.sendMessage(ChatColor.RED + "You can't teleport to dead players."); //TODO: Needs more locale.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PP.getParty().equals(PPt.getParty())) {
|
|
||||||
McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(player, target, PP.getParty());
|
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
|
||||||
|
|
||||||
if (!event.isCancelled()) {
|
|
||||||
player.teleport(target);
|
|
||||||
player.sendMessage(ChatColor.GREEN + "You have teleported to " + target.getName()); //TODO: Needs more locale.
|
|
||||||
target.sendMessage(ChatColor.GREEN + player.getName() + " has teleported to you."); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.RED + "That player is in a different party than you."); //TODO: Needs more locale.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.gmail.nossr50.commands.party.teleport;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PtpAcceptAnyCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (!Permissions.partyTeleportAcceptAll(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
if (mcMMOPlayer.getPtpConfirmRequired()) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.ptp.AcceptAny.Disabled"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.ptp.AcceptAny.Enabled"));
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer.togglePtpConfirmRequired();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
package com.gmail.nossr50.commands.party.teleport;
|
||||||
|
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PtpAcceptCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (!Permissions.partyTeleportAccept(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
if (!mcMMOPlayer.hasPtpRequest()) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.ptp.NoRequests"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((mcMMOPlayer.getPtpTimeout() + Config.getInstance().getPTPCommandTimeout()) * Misc.TIME_CONVERSION_FACTOR < System.currentTimeMillis()) {
|
||||||
|
mcMMOPlayer.removePtpRequest();
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.ptp.RequestExpired"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player target = mcMMOPlayer.getPtpRequest();
|
||||||
|
mcMMOPlayer.removePtpRequest();
|
||||||
|
|
||||||
|
if (!PtpCommand.canTeleport(sender, player, target.getName())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Config.getInstance().getPTPCommandWorldPermissions()) {
|
||||||
|
World targetWorld = target.getWorld();
|
||||||
|
World playerWorld = player.getWorld();
|
||||||
|
|
||||||
|
if (!Permissions.partyTeleportAllWorlds(target)) {
|
||||||
|
if (!Permissions.partyTeleportWorld(target, targetWorld)) {
|
||||||
|
target.sendMessage(LocaleLoader.getString("Commands.ptp.NoWorldPermissions", targetWorld.getName()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (targetWorld != playerWorld && !Permissions.partyTeleportWorld(target, playerWorld)) {
|
||||||
|
target.sendMessage(LocaleLoader.getString("Commands.ptp.NoWorldPermissions", playerWorld.getName()));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PtpCommand.handleTeleportWarmup(target, player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
package com.gmail.nossr50.commands.party.teleport;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.events.party.McMMOPartyTeleportEvent;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.runnables.items.TeleportationWarmup;
|
||||||
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class PtpCommand implements TabExecutor {
|
||||||
|
private static Player target;
|
||||||
|
private static McMMOPlayer mcMMOTarget;
|
||||||
|
|
||||||
|
public static final List<String> TELEPORT_SUBCOMMANDS = ImmutableList.of("toggle", "accept", "acceptany", "acceptall");
|
||||||
|
|
||||||
|
private CommandExecutor ptpToggleCommand = new PtpToggleCommand();
|
||||||
|
private CommandExecutor ptpAcceptAnyCommand = new PtpAcceptAnyCommand();
|
||||||
|
private CommandExecutor ptpAcceptCommand = new PtpAcceptCommand();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
if (args[0].equalsIgnoreCase("toggle")) {
|
||||||
|
return ptpToggleCommand.onCommand(sender, command, label, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args[0].equalsIgnoreCase("acceptany") || args[0].equalsIgnoreCase("acceptall")) {
|
||||||
|
return ptpAcceptAnyCommand.onCommand(sender, command, label, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
long recentlyHurt = mcMMOPlayer.getRecentlyHurt();
|
||||||
|
int hurtCooldown = Config.getInstance().getPTPCommandRecentlyHurtCooldown();
|
||||||
|
|
||||||
|
if (hurtCooldown > 0) {
|
||||||
|
int timeRemaining = SkillUtils.calculateTimeLeft(recentlyHurt * Misc.TIME_CONVERSION_FACTOR, hurtCooldown, player);
|
||||||
|
|
||||||
|
if (timeRemaining > 0) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Item.Injured.Wait", timeRemaining));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args[0].equalsIgnoreCase("accept")) {
|
||||||
|
return ptpAcceptCommand.onCommand(sender, command, label, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Permissions.partyTeleportSend(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ptpCooldown = Config.getInstance().getPTPCommandCooldown();
|
||||||
|
long lastTeleport = mcMMOPlayer.getLastTeleport();
|
||||||
|
|
||||||
|
if (ptpCooldown > 0) {
|
||||||
|
int timeRemaining = SkillUtils.calculateTimeLeft(lastTeleport * Misc.TIME_CONVERSION_FACTOR, ptpCooldown, player);
|
||||||
|
|
||||||
|
if (timeRemaining > 0) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Item.Generic.Wait", timeRemaining));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sendTeleportRequest(sender, player, args[0]);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
List<String> matches = StringUtil.copyPartialMatches(args[0], TELEPORT_SUBCOMMANDS, new ArrayList<String>(TELEPORT_SUBCOMMANDS.size()));
|
||||||
|
|
||||||
|
if (matches.size() == 0) {
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return matches;
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendTeleportRequest(CommandSender sender, Player player, String targetName) {
|
||||||
|
if (!canTeleport(sender, player, targetName)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mcMMOTarget.getPtpConfirmRequired()) {
|
||||||
|
handleTeleportWarmup(player, target);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOTarget.setPtpRequest(player);
|
||||||
|
mcMMOTarget.actualizePtpTimeout();
|
||||||
|
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.Invite.Success"));
|
||||||
|
|
||||||
|
target.sendMessage(LocaleLoader.getString("Commands.ptp.Request1", player.getName()));
|
||||||
|
target.sendMessage(LocaleLoader.getString("Commands.ptp.Request2", Config.getInstance().getPTPCommandTimeout()));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static boolean canTeleport(CommandSender sender, Player player, String targetName) {
|
||||||
|
mcMMOTarget = UserManager.getPlayer(targetName);
|
||||||
|
|
||||||
|
if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
target = mcMMOTarget.getPlayer();
|
||||||
|
targetName = target.getName();
|
||||||
|
|
||||||
|
if (player.equals(target)) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Party.Teleport.Self"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mcMMO.getPartyManager().inSameParty(player, target)) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Party.NotInYourParty", targetName));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mcMMOTarget.getPtpEnabled()) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Party.Teleport.Disabled", targetName));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!target.isValid()) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Party.Teleport.Dead"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static void handleTeleportWarmup(Player teleportingPlayer, Player targetPlayer) {
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(teleportingPlayer);
|
||||||
|
mcMMOTarget = UserManager.getPlayer(targetPlayer);
|
||||||
|
|
||||||
|
long warmup = Config.getInstance().getPTPCommandWarmup();
|
||||||
|
|
||||||
|
mcMMOPlayer.actualizeTeleportCommenceLocation(teleportingPlayer);
|
||||||
|
|
||||||
|
if (warmup > 0) {
|
||||||
|
teleportingPlayer.sendMessage(LocaleLoader.getString("Teleport.Commencing", warmup));
|
||||||
|
new TeleportationWarmup(mcMMOPlayer, mcMMOTarget).runTaskLater(mcMMO.p, 20 * warmup);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
handlePartyTeleportEvent(teleportingPlayer, targetPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handlePartyTeleportEvent(Player teleportingPlayer, Player targetPlayer) {
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(teleportingPlayer);
|
||||||
|
McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(teleportingPlayer, targetPlayer, mcMMOPlayer.getParty().getName());
|
||||||
|
|
||||||
|
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||||
|
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
teleportingPlayer.teleport(targetPlayer);
|
||||||
|
|
||||||
|
teleportingPlayer.sendMessage(LocaleLoader.getString("Party.Teleport.Player", targetPlayer.getName()));
|
||||||
|
targetPlayer.sendMessage(LocaleLoader.getString("Party.Teleport.Target", teleportingPlayer.getName()));
|
||||||
|
|
||||||
|
mcMMOPlayer.actualizeRecentlyHurt();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.gmail.nossr50.commands.party.teleport;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
|
public class PtpToggleCommand implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (!Permissions.partyTeleportToggle(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
if (mcMMOPlayer.getPtpEnabled()) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.ptp.Disabled"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.ptp.Enabled"));
|
||||||
|
}
|
||||||
|
|
||||||
|
mcMMOPlayer.togglePtpUse();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
package com.gmail.nossr50.commands.player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class InspectCommand implements TabExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
if (sender instanceof Player && Config.getInstance().getInspectScoreboardEnabled()) {
|
||||||
|
ScoreboardManager.setupPlayerScoreboard(sender.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(args[0]);
|
||||||
|
|
||||||
|
// If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
|
||||||
|
if (mcMMOPlayer == null) {
|
||||||
|
PlayerProfile profile = new PlayerProfile(args[0], false); // Temporary Profile
|
||||||
|
|
||||||
|
if (CommandUtils.inspectOffline(sender, profile, Permissions.inspectOffline(sender))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sender instanceof Player && Config.getInstance().getInspectScoreboardEnabled()) {
|
||||||
|
ScoreboardManager.enablePlayerInspectScoreboardOffline((Player) sender, profile);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Inspect.OfflineStats", args[0]));
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Stats.Header.Gathering"));
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.EXCAVATION);
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.FISHING);
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.HERBALISM);
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.MINING);
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.WOODCUTTING);
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Stats.Header.Combat"));
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.AXES);
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.ARCHERY);
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.SWORDS);
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.TAMING);
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.UNARMED);
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Stats.Header.Misc"));
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.ACROBATICS);
|
||||||
|
CommandUtils.displaySkill(sender, profile, SkillType.REPAIR);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Player target = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
if (CommandUtils.tooFar(sender, target, Permissions.inspectFar(sender))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sender instanceof Player && Config.getInstance().getInspectScoreboardEnabled()) {
|
||||||
|
ScoreboardManager.enablePlayerInspectScoreboardOnline((Player) sender, mcMMOPlayer);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Inspect.Stats", target.getName()));
|
||||||
|
CommandUtils.printGatheringSkills(target, sender);
|
||||||
|
CommandUtils.printCombatSkills(target, sender);
|
||||||
|
CommandUtils.printMiscSkills(target, sender);
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel", mcMMOPlayer.getPowerLevel()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
package com.gmail.nossr50.commands.player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
|
import com.gmail.nossr50.runnables.commands.McrankCommandAsyncTask;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class McrankCommand implements TabExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Permissions.mcrank(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Config.getInstance().getMcrankScoreboardEnabled()) {
|
||||||
|
ScoreboardManager.setupPlayerScoreboard(sender.getName());
|
||||||
|
ScoreboardManager.enablePlayerRankScoreboard((Player) sender);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
display(sender, sender.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (!Permissions.mcrankOthers(sender)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
String playerName = args[0];
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(playerName);
|
||||||
|
|
||||||
|
if (mcMMOPlayer != null) {
|
||||||
|
playerName = mcMMOPlayer.getPlayer().getName();
|
||||||
|
|
||||||
|
if (CommandUtils.tooFar(sender, mcMMOPlayer.getPlayer(), Permissions.mcrankFar(sender))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (CommandUtils.inspectOffline(sender, new PlayerProfile(playerName, false), Permissions.mcrankOffline(sender))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sender instanceof Player && Config.getInstance().getMcrankScoreboardEnabled()) {
|
||||||
|
ScoreboardManager.setupPlayerScoreboard(sender.getName());
|
||||||
|
ScoreboardManager.enablePlayerRankScoreboardOthers((Player) sender, playerName);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
display(sender, playerName);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
Set<String> playerNames = UserManager.getPlayers().keySet();
|
||||||
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void display(CommandSender sender, String playerName) {
|
||||||
|
new McrankCommandAsyncTask(playerName, sender).runTaskAsynchronously(mcMMO.p);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package com.gmail.nossr50.commands.player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class McstatsCommand implements TabExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (CommandUtils.noConsoleUsage(sender)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
|
if (Config.getInstance().getMcstatsScoreboardsEnabled()) {
|
||||||
|
ScoreboardManager.setupPlayerScoreboard(player.getName());
|
||||||
|
ScoreboardManager.enablePlayerStatsScoreboard(mcMMOPlayer);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Stats.Own.Stats"));
|
||||||
|
player.sendMessage(LocaleLoader.getString("mcMMO.NoSkillNote"));
|
||||||
|
|
||||||
|
CommandUtils.printGatheringSkills(player);
|
||||||
|
CommandUtils.printCombatSkills(player);
|
||||||
|
CommandUtils.printMiscSkills(player);
|
||||||
|
|
||||||
|
int powerLevelCap = Config.getInstance().getPowerLevelCap();
|
||||||
|
|
||||||
|
if (powerLevelCap != Integer.MAX_VALUE) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Capped", UserManager.getPlayer(player).getPowerLevel(), powerLevelCap));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", UserManager.getPlayer(player).getPowerLevel()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
package com.gmail.nossr50.commands.player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabExecutor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.database.FlatfileDatabaseManager;
|
||||||
|
import com.gmail.nossr50.datatypes.database.PlayerStat;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.runnables.commands.MctopCommandAsyncTask;
|
||||||
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
|
public class MctopCommand implements TabExecutor {
|
||||||
|
private SkillType skill;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 0:
|
||||||
|
display(1, "ALL", sender, command);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
if (StringUtils.isInt(args[0])) {
|
||||||
|
display(Math.abs(Integer.parseInt(args[0])), "ALL", sender, command);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!extractSkill(sender, args[0])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
display(1, skill.toString(), sender, command);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if (CommandUtils.isInvalidInteger(sender, args[1])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!extractSkill(sender, args[0])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
display(Math.abs(Integer.parseInt(args[1])), skill.toString(), sender, command);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
|
switch (args.length) {
|
||||||
|
case 1:
|
||||||
|
return StringUtil.copyPartialMatches(args[0], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||||
|
default:
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void display(int page, String skill, CommandSender sender, Command command) {
|
||||||
|
if (!skill.equalsIgnoreCase("all") && !Permissions.mctop(sender, this.skill)) {
|
||||||
|
sender.sendMessage(command.getPermissionMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sender instanceof Player && Config.getInstance().getMctopScoreboardEnabled()) {
|
||||||
|
ScoreboardManager.enableGlobalStatsScoreboard((Player) sender, skill, page);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (Config.getInstance().getUseMySQL()) {
|
||||||
|
sqlDisplay(page, skill, sender);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
flatfileDisplay(page, skill, sender);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void flatfileDisplay(int page, String skill, CommandSender sender) {
|
||||||
|
FlatfileDatabaseManager.updateLeaderboards(); // Make sure we have the latest information
|
||||||
|
|
||||||
|
if (skill.equalsIgnoreCase("all")) {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Leaderboard"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.Skill.Leaderboard", StringUtils.getCapitalized(skill)));
|
||||||
|
}
|
||||||
|
|
||||||
|
int position = (page * 10) - 9;
|
||||||
|
|
||||||
|
for (PlayerStat stat : FlatfileDatabaseManager.retrieveInfo(skill, page, 10)) {
|
||||||
|
String digit = (position < 10) ? "0" : "" + String.valueOf(position);
|
||||||
|
|
||||||
|
// Format: 1. Playername - skill value
|
||||||
|
sender.sendMessage(digit + ". " + ChatColor.GREEN + stat.name + " - " + ChatColor.WHITE + stat.statVal);
|
||||||
|
position++;
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(LocaleLoader.getString("Commands.mctop.Tip"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sqlDisplay(int page, String query, CommandSender sender) {
|
||||||
|
new MctopCommandAsyncTask(page, query, sender).runTaskAsynchronously(mcMMO.p);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean extractSkill(CommandSender sender, String skillName) {
|
||||||
|
if (CommandUtils.isInvalidSkill(sender, skillName)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
skill = SkillType.getSkill(skillName);
|
||||||
|
|
||||||
|
if (CommandUtils.isChildSkill(sender, skill)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,56 +1,96 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import org.bukkit.command.CommandSender;
|
import com.gmail.nossr50.skills.acrobatics.Acrobatics;
|
||||||
import org.bukkit.entity.Player;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
public class AcrobaticsCommand extends SkillCommand {
|
||||||
import com.gmail.nossr50.mcPermissions;
|
private String dodgeChance;
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
private String dodgeChanceLucky;
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
private String rollChance;
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
private String rollChanceLucky;
|
||||||
import com.gmail.nossr50.util.Page;
|
private String gracefulRollChance;
|
||||||
|
private String gracefulRollChanceLucky;
|
||||||
public class AcrobaticsCommand implements CommandExecutor {
|
|
||||||
@Override
|
private boolean canDodge;
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
private boolean canRoll;
|
||||||
if (!(sender instanceof Player))
|
private boolean canGracefulRoll;
|
||||||
{
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
public AcrobaticsCommand() {
|
||||||
return true;
|
super(SkillType.ACROBATICS);
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = (Player) sender;
|
@Override
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
protected void dataCalculations() {
|
||||||
|
// DODGE
|
||||||
String dodgepercentage;
|
if (canDodge) {
|
||||||
float skillvalue = (float) PP.getSkillLevel(SkillType.ACROBATICS);
|
String[] dodgeStrings = calculateAbilityDisplayValues(Acrobatics.dodgeMaxBonusLevel, Acrobatics.dodgeMaxChance);
|
||||||
String percentage = String.valueOf((skillvalue / 1000) * 100);
|
dodgeChance = dodgeStrings[0];
|
||||||
String gracepercentage = String.valueOf(((skillvalue / 1000) * 100) * 2);
|
dodgeChanceLucky = dodgeStrings[1];
|
||||||
|
}
|
||||||
if (PP.getSkillLevel(SkillType.ACROBATICS) <= 800)
|
|
||||||
dodgepercentage = String.valueOf((skillvalue / 4000 * 100));
|
// ROLL
|
||||||
else
|
if (canRoll) {
|
||||||
dodgepercentage = "20";
|
String[] rollStrings = calculateAbilityDisplayValues(Acrobatics.rollMaxBonusLevel, Acrobatics.rollMaxChance);
|
||||||
|
rollChance = rollStrings[0];
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillAcrobatics") }));
|
rollChanceLucky = rollStrings[1];
|
||||||
player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainAcrobatics") }));
|
}
|
||||||
|
|
||||||
if (mcPermissions.getInstance().acrobatics(player))
|
// GRACEFUL ROLL
|
||||||
player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS) }));
|
if (canGracefulRoll) {
|
||||||
|
String[] gracefulRollStrings = calculateAbilityDisplayValues(Acrobatics.gracefulRollMaxBonusLevel, Acrobatics.gracefulRollMaxChance);
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
|
gracefulRollChance = gracefulRollStrings[0];
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAcrobatics1_0"), mcLocale.getString("m.EffectsAcrobatics1_1") }));
|
gracefulRollChanceLucky = gracefulRollStrings[1];
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAcrobatics2_0"), mcLocale.getString("m.EffectsAcrobatics2_1") }));
|
}
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAcrobatics3_0"), mcLocale.getString("m.EffectsAcrobatics3_1") }));
|
}
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
|
||||||
player.sendMessage(mcLocale.getString("m.AcrobaticsRollChance", new Object[] { percentage }));
|
@Override
|
||||||
player.sendMessage(mcLocale.getString("m.AcrobaticsGracefulRollChance", new Object[] { gracepercentage }));
|
protected void permissionsCheck() {
|
||||||
player.sendMessage(mcLocale.getString("m.AcrobaticsDodgeChance", new Object[] { dodgepercentage }));
|
canDodge = Permissions.dodge(player);
|
||||||
|
canRoll = Permissions.roll(player);
|
||||||
Page.grabGuidePageForSkill(SkillType.ACROBATICS, player, args);
|
canGracefulRoll = Permissions.gracefulRoll(player);
|
||||||
|
}
|
||||||
return true;
|
|
||||||
}
|
@Override
|
||||||
}
|
protected boolean effectsHeaderPermissions() {
|
||||||
|
return canDodge || canGracefulRoll || canRoll;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void effectsDisplay() {
|
||||||
|
luckyEffectsDisplay();
|
||||||
|
|
||||||
|
if (canRoll) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Acrobatics.Effect.0"), LocaleLoader.getString("Acrobatics.Effect.1")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canGracefulRoll) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Acrobatics.Effect.2"), LocaleLoader.getString("Acrobatics.Effect.3")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canDodge) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Acrobatics.Effect.4"), LocaleLoader.getString("Acrobatics.Effect.5")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean statsHeaderPermissions() {
|
||||||
|
return canDodge || canGracefulRoll || canRoll;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void statsDisplay() {
|
||||||
|
if (canRoll) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.Chance", rollChance) + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", rollChanceLucky) : ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canGracefulRoll) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.GraceChance", gracefulRollChance) + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", gracefulRollChanceLucky) : ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canDodge) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Acrobatics.DodgeChance", dodgeChance) + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", dodgeChanceLucky) : ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,62 +1,94 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import org.bukkit.command.CommandSender;
|
import com.gmail.nossr50.skills.archery.Archery;
|
||||||
import org.bukkit.entity.Player;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
public class ArcheryCommand extends SkillCommand {
|
||||||
import com.gmail.nossr50.mcPermissions;
|
private String skillShotBonus;
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
private String dazeChance;
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
private String dazeChanceLucky;
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
private String retrieveChance;
|
||||||
import com.gmail.nossr50.util.Page;
|
private String retrieveChanceLucky;
|
||||||
|
|
||||||
public class ArcheryCommand implements CommandExecutor {
|
private boolean canSkillShot;
|
||||||
@Override
|
private boolean canDaze;
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
private boolean canRetrieve;
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
public ArcheryCommand() {
|
||||||
return true;
|
super(SkillType.ARCHERY);
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = (Player) sender;
|
@Override
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
protected void dataCalculations() {
|
||||||
|
// SKILL SHOT
|
||||||
float skillvalue = (float) PP.getSkillLevel(SkillType.ARCHERY);
|
if (canSkillShot) {
|
||||||
String percentage = String.valueOf((skillvalue / 1000) * 100);
|
double bonus = (skillValue / Archery.skillShotIncreaseLevel) * Archery.skillShotIncreasePercentage;
|
||||||
|
skillShotBonus = percent.format(Math.min(bonus, Archery.skillShotMaxBonusPercentage));
|
||||||
double dmgBonusPercent = ((PP.getSkillLevel(SkillType.ARCHERY) / 50) * 0.1D);
|
}
|
||||||
|
|
||||||
/* Cap maximum bonus at 200% */
|
// DAZE
|
||||||
if(dmgBonusPercent > 2)
|
if (canDaze) {
|
||||||
dmgBonusPercent = 2;
|
String[] dazeStrings = calculateAbilityDisplayValues(Archery.dazeMaxBonusLevel, Archery.dazeMaxBonus);
|
||||||
|
dazeChance = dazeStrings[0];
|
||||||
dmgBonusPercent = dmgBonusPercent * 100; //Convert to percentage
|
dazeChanceLucky = dazeStrings[1];
|
||||||
|
}
|
||||||
String percentagedaze;
|
|
||||||
if (PP.getSkillLevel(SkillType.ARCHERY) < 1000)
|
// RETRIEVE
|
||||||
percentagedaze = String.valueOf((skillvalue / 2000) * 100);
|
if (canRetrieve) {
|
||||||
else
|
String[] retrieveStrings = calculateAbilityDisplayValues(Archery.retrieveMaxBonusLevel, Archery.retrieveMaxChance);
|
||||||
percentagedaze = "50";
|
retrieveChance = retrieveStrings[0];
|
||||||
|
retrieveChanceLucky = retrieveStrings[1];
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillArchery") }));
|
}
|
||||||
player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainArchery") }));
|
}
|
||||||
|
|
||||||
if (mcPermissions.getInstance().archery(player))
|
@Override
|
||||||
player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY) }));
|
protected void permissionsCheck() {
|
||||||
|
canSkillShot = Permissions.bonusDamage(player, skill);
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
|
canDaze = Permissions.daze(player);
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsArchery1_0"), mcLocale.getString("m.EffectsArchery1_1") }));
|
canRetrieve = Permissions.arrowRetrieval(player);
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsArchery2_0"), mcLocale.getString("m.EffectsArchery2_1") }));
|
}
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsArchery4_0"), mcLocale.getString("m.EffectsArchery4_1") }));
|
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
@Override
|
||||||
player.sendMessage(mcLocale.getString("m.ArcherySkillShot", new Object[] { dmgBonusPercent }));
|
protected boolean effectsHeaderPermissions() {
|
||||||
player.sendMessage(mcLocale.getString("m.ArcheryDazeChance", new Object[] { percentagedaze }));
|
return canSkillShot || canDaze || canRetrieve;
|
||||||
player.sendMessage(mcLocale.getString("m.ArcheryRetrieveChance", new Object[] { percentage }));
|
}
|
||||||
|
|
||||||
Page.grabGuidePageForSkill(SkillType.ARCHERY, player, args);
|
@Override
|
||||||
|
protected void effectsDisplay() {
|
||||||
return true;
|
luckyEffectsDisplay();
|
||||||
}
|
|
||||||
}
|
if (canSkillShot) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Archery.Effect.0"), LocaleLoader.getString("Archery.Effect.1")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canDaze) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Archery.Effect.2"), LocaleLoader.getString("Archery.Effect.3", Archery.dazeModifier)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canRetrieve) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Archery.Effect.4"), LocaleLoader.getString("Archery.Effect.5")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean statsHeaderPermissions() {
|
||||||
|
return canSkillShot || canDaze || canRetrieve;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void statsDisplay() {
|
||||||
|
if (canSkillShot) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Archery.Combat.SkillshotBonus", skillShotBonus));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canDaze) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Archery.Combat.DazeChance", dazeChance) + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", dazeChanceLucky) : ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canRetrieve) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Archery.Combat.RetrieveChance", retrieveChance) + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", retrieveChanceLucky) : ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,68 +1,119 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import org.bukkit.command.CommandSender;
|
import com.gmail.nossr50.skills.axes.Axes;
|
||||||
import org.bukkit.entity.Player;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
|
|
||||||
import com.gmail.nossr50.Users;
|
public class AxesCommand extends SkillCommand {
|
||||||
import com.gmail.nossr50.mcPermissions;
|
private String critChance;
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
private String critChanceLucky;
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
private float bonusDamage;
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
private float impactDamage;
|
||||||
|
private String skullSplitterLength;
|
||||||
public class AxesCommand implements CommandExecutor {
|
private String skullSplitterLengthEndurance;
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
private boolean canSkullSplitter;
|
||||||
if (!(sender instanceof Player)) {
|
private boolean canCritical;
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
private boolean canBonusDamage;
|
||||||
return true;
|
private boolean canImpact;
|
||||||
}
|
private boolean canGreaterImpact;
|
||||||
|
|
||||||
Player player = (Player) sender;
|
public AxesCommand() {
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
super(SkillType.AXES);
|
||||||
|
}
|
||||||
String percentage;
|
|
||||||
|
@Override
|
||||||
float skillvalue = (float) PP.getSkillLevel(SkillType.AXES);
|
protected void dataCalculations() {
|
||||||
if (PP.getSkillLevel(SkillType.AXES) < 750)
|
// IMPACT
|
||||||
percentage = String.valueOf((skillvalue / 2000) * 100);
|
if (canImpact) {
|
||||||
else
|
impactDamage = 1 + (skillValue / Axes.impactIncreaseLevel);
|
||||||
percentage = "37.5";
|
}
|
||||||
|
|
||||||
int bonusDmg = Users.getProfile(player).getSkillLevel(SkillType.AXES)/50;
|
// SKULL SPLITTER
|
||||||
if(bonusDmg > 4)
|
if (canSkullSplitter) {
|
||||||
bonusDmg = 4;
|
String[] skullSplitterStrings = calculateLengthDisplayValues();
|
||||||
|
skullSplitterLength = skullSplitterStrings[0];
|
||||||
int ticks = 2;
|
skullSplitterLengthEndurance = skullSplitterStrings[1];
|
||||||
short durDmg = 5;
|
}
|
||||||
durDmg+=Users.getProfile(player).getSkillLevel(SkillType.AXES)/30;
|
|
||||||
int x = PP.getSkillLevel(SkillType.AXES);
|
// CRITICAL STRIKES
|
||||||
while (x >= 50) {
|
if (canCritical) {
|
||||||
x -= 50;
|
String[] criticalStrikeStrings = calculateAbilityDisplayValues(Axes.criticalHitMaxBonusLevel, Axes.criticalHitMaxChance);
|
||||||
ticks++;
|
critChance = criticalStrikeStrings[0];
|
||||||
}
|
critChanceLucky = criticalStrikeStrings[1];
|
||||||
|
}
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillAxes") }));
|
|
||||||
player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainAxes") }));
|
// AXE MASTERY
|
||||||
|
if (canBonusDamage) {
|
||||||
if (mcPermissions.getInstance().axes(player))
|
bonusDamage = Math.min(skillValue / (Axes.bonusDamageMaxBonusLevel / Axes.bonusDamageMaxBonus), Axes.bonusDamageMaxBonus);
|
||||||
player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES) }));
|
}
|
||||||
|
}
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
|
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes1_0"), mcLocale.getString("m.EffectsAxes1_1") }));
|
@Override
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes2_0"), mcLocale.getString("m.EffectsAxes2_1") }));
|
protected void permissionsCheck() {
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes3_0"), mcLocale.getString("m.EffectsAxes3_1") }));
|
canSkullSplitter = Permissions.skullSplitter(player);
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes4_0"), mcLocale.getString("m.EffectsAxes4_1") }));
|
canCritical = Permissions.criticalStrikes(player);
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsAxes5_0"), mcLocale.getString("m.EffectsAxes5_1") }));
|
canBonusDamage = Permissions.bonusDamage(player, skill);
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
canImpact = Permissions.armorImpact(player);
|
||||||
player.sendMessage(mcLocale.getString("m.AxesCritChance", new Object[] { percentage }));
|
canGreaterImpact = Permissions.greaterImpact(player);
|
||||||
|
}
|
||||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusAxes1_0"), mcLocale.getString("m.AbilBonusAxes1_1", new Object[] {bonusDmg}) }));
|
|
||||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusAxes2_0"), mcLocale.getString("m.AbilBonusAxes2_1", new Object[] {durDmg}) }));
|
@Override
|
||||||
player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] { mcLocale.getString("m.AbilBonusAxes3_0"), mcLocale.getString("m.AbilBonusAxes3_1", new Object[] {2}) }));
|
protected boolean effectsHeaderPermissions() {
|
||||||
player.sendMessage(mcLocale.getString("m.AxesSkullLength", new Object[] { ticks }));
|
return canSkullSplitter || canCritical || canBonusDamage || canImpact || canGreaterImpact;
|
||||||
|
}
|
||||||
return true;
|
|
||||||
}
|
@Override
|
||||||
}
|
protected void effectsDisplay() {
|
||||||
|
luckyEffectsDisplay();
|
||||||
|
|
||||||
|
if (canSkullSplitter) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Axes.Effect.0"), LocaleLoader.getString("Axes.Effect.1")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canCritical) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Axes.Effect.2"), LocaleLoader.getString("Axes.Effect.3")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canBonusDamage) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Axes.Effect.4"), LocaleLoader.getString("Axes.Effect.5")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canImpact) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Axes.Effect.6"), LocaleLoader.getString("Axes.Effect.7")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canGreaterImpact) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Axes.Effect.8"), LocaleLoader.getString("Axes.Effect.9")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean statsHeaderPermissions() {
|
||||||
|
return canSkullSplitter || canCritical || canBonusDamage || canImpact || canGreaterImpact;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void statsDisplay() {
|
||||||
|
if (canBonusDamage) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Ability.Generic.Template", LocaleLoader.getString("Axes.Ability.Bonus.0"), LocaleLoader.getString("Axes.Ability.Bonus.1", bonusDamage)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canImpact) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Ability.Generic.Template", LocaleLoader.getString("Axes.Ability.Bonus.2"), LocaleLoader.getString("Axes.Ability.Bonus.3", impactDamage)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canGreaterImpact) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Ability.Generic.Template", LocaleLoader.getString("Axes.Ability.Bonus.4"), LocaleLoader.getString("Axes.Ability.Bonus.5", Axes.greaterImpactBonusDamage)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canCritical) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Axes.Combat.CritChance", critChance) + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", critChanceLucky) : ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canSkullSplitter) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Axes.Combat.SS.Length", skullSplitterLength) + (hasEndurance ? LocaleLoader.getString("Perks.activationtime.bonus", skullSplitterLengthEndurance) : ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,50 +1,63 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import org.bukkit.command.CommandSender;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
public class ExcavationCommand extends SkillCommand {
|
||||||
import com.gmail.nossr50.Users;
|
private String gigaDrillBreakerLength;
|
||||||
import com.gmail.nossr50.mcPermissions;
|
private String gigaDrillBreakerLengthEndurance;
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
private boolean canGigaDrill;
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
private boolean canTreasureHunt;
|
||||||
import com.gmail.nossr50.util.Page;
|
|
||||||
|
public ExcavationCommand() {
|
||||||
public class ExcavationCommand implements CommandExecutor {
|
super(SkillType.EXCAVATION);
|
||||||
@Override
|
}
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
if (!(sender instanceof Player)) {
|
@Override
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
protected void dataCalculations() {
|
||||||
return true;
|
// GIGA DRILL BREAKER
|
||||||
}
|
if (canGigaDrill) {
|
||||||
|
String gigaDrillStrings[] = calculateLengthDisplayValues();
|
||||||
Player player = (Player) sender;
|
gigaDrillBreakerLength = gigaDrillStrings[0];
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
gigaDrillBreakerLengthEndurance = gigaDrillStrings[1];
|
||||||
|
}
|
||||||
int ticks = 2;
|
}
|
||||||
int x = PP.getSkillLevel(SkillType.EXCAVATION);
|
|
||||||
while (x >= 50) {
|
@Override
|
||||||
x -= 50;
|
protected void permissionsCheck() {
|
||||||
ticks++;
|
canGigaDrill = Permissions.gigaDrillBreaker(player);
|
||||||
}
|
canTreasureHunt = Permissions.excavationTreasureHunter(player);
|
||||||
|
}
|
||||||
player.sendMessage("");
|
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillExcavation") }));
|
@Override
|
||||||
player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainExcavation") }));
|
protected boolean effectsHeaderPermissions() {
|
||||||
|
return canGigaDrill || canTreasureHunt;
|
||||||
if (mcPermissions.getInstance().excavation(player))
|
}
|
||||||
player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.EXCAVATION), PP.getSkillXpLevel(SkillType.EXCAVATION), PP.getXpToLevel(SkillType.EXCAVATION) }));
|
|
||||||
|
@Override
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
|
protected void effectsDisplay() {
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsExcavation1_0"), mcLocale.getString("m.EffectsExcavation1_1") }));
|
luckyEffectsDisplay();
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsExcavation2_0"), mcLocale.getString("m.EffectsExcavation2_1") }));
|
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
if (canGigaDrill) {
|
||||||
player.sendMessage(mcLocale.getString("m.ExcavationGigaDrillBreakerLength", new Object[] { ticks }));
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Excavation.Effect.0"), LocaleLoader.getString("Excavation.Effect.1")));
|
||||||
|
}
|
||||||
Page.grabGuidePageForSkill(SkillType.EXCAVATION, player, args);
|
|
||||||
|
if (canTreasureHunt) {
|
||||||
return true;
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Excavation.Effect.2"), LocaleLoader.getString("Excavation.Effect.3")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean statsHeaderPermissions() {
|
||||||
|
return canGigaDrill;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void statsDisplay() {
|
||||||
|
if (canGigaDrill) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Excavation.Effect.Length", gigaDrillBreakerLength) + (hasEndurance ? LocaleLoader.getString("Perks.activationtime.bonus", gigaDrillBreakerLengthEndurance) : ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,50 +1,171 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
package com.gmail.nossr50.commands.skills;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
import com.gmail.nossr50.config.AdvancedConfig;
|
||||||
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.Users;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcPermissions;
|
import com.gmail.nossr50.skills.fishing.Fishing;
|
||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.datatypes.SkillType;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import com.gmail.nossr50.locale.mcLocale;
|
|
||||||
import com.gmail.nossr50.skills.Fishing;
|
public class FishingCommand extends SkillCommand {
|
||||||
import com.gmail.nossr50.util.Page;
|
private int lootTier;
|
||||||
|
private String magicChance;
|
||||||
public class FishingCommand implements CommandExecutor {
|
private String magicChanceLucky;
|
||||||
@Override
|
private String chanceRaining = "";
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
private String shakeChance;
|
||||||
if (!(sender instanceof Player)) {
|
private String shakeChanceLucky;
|
||||||
sender.sendMessage("This command does not support console useage."); //TODO: Needs more locale.
|
private int fishermansDietRank;
|
||||||
return true;
|
private String biteChance;
|
||||||
}
|
|
||||||
|
private boolean canTreasureHunt;
|
||||||
Player player = (Player) sender;
|
private boolean canMagicHunt;
|
||||||
PlayerProfile PP = Users.getProfile(player);
|
private boolean canShake;
|
||||||
|
private boolean canFishermansDiet;
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.SkillFishing") }));
|
private boolean canMasterAngler;
|
||||||
player.sendMessage(mcLocale.getString("m.XPGain", new Object[] { mcLocale.getString("m.XPGainFishing") }));
|
private boolean canIceFish;
|
||||||
|
|
||||||
if (mcPermissions.getInstance().fishing(player))
|
public FishingCommand() {
|
||||||
player.sendMessage(mcLocale.getString("m.LVL", new Object[] { PP.getSkillLevel(SkillType.FISHING), PP.getSkillXpLevel(SkillType.FISHING), PP.getXpToLevel(SkillType.FISHING) }));
|
super(SkillType.FISHING);
|
||||||
|
}
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.Effects") }));
|
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsFishing1_0"), mcLocale.getString("m.EffectsFishing1_1") }));
|
@Override
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsFishing2_0"), mcLocale.getString("m.EffectsFishing2_1") }));
|
protected void dataCalculations() {
|
||||||
player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] { mcLocale.getString("m.EffectsFishing3_0"), mcLocale.getString("m.EffectsFishing3_1") }));
|
boolean isStorming = player.getWorld().hasStorm();
|
||||||
player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] { mcLocale.getString("m.YourStats") }));
|
|
||||||
player.sendMessage(mcLocale.getString("m.FishingRank", new Object[] { Fishing.getFishingLootTier(PP) }));
|
// TREASURE HUNTER
|
||||||
player.sendMessage(mcLocale.getString("m.FishingMagicInfo"));
|
if (canTreasureHunt) {
|
||||||
|
lootTier = mcMMOPlayer.getFishingManager().getLootTier();
|
||||||
if (PP.getSkillLevel(SkillType.FISHING) < 150)
|
double enchantChance = lootTier * AdvancedConfig.getInstance().getFishingMagicMultiplier();
|
||||||
player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] { mcLocale.getString("m.AbilLockFishing1") }));
|
|
||||||
else
|
if (isStorming) {
|
||||||
player.sendMessage(mcLocale.getString("m.ShakeInfo", new Object[] { Fishing.getFishingLootTier(PP) }));
|
chanceRaining = LocaleLoader.getString("Fishing.Chance.Raining");
|
||||||
|
enchantChance *= 1.1D;
|
||||||
Page.grabGuidePageForSkill(SkillType.FISHING, player, args);
|
}
|
||||||
|
|
||||||
return true;
|
String[] treasureHunterStrings = calculateAbilityDisplayValues(enchantChance);
|
||||||
}
|
magicChance = treasureHunterStrings[0];
|
||||||
}
|
magicChanceLucky = treasureHunterStrings[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// SHAKE
|
||||||
|
if (canShake) {
|
||||||
|
String[] shakeStrings = calculateAbilityDisplayValues(UserManager.getPlayer(player).getFishingManager().getShakeProbability());
|
||||||
|
shakeChance = shakeStrings[0];
|
||||||
|
shakeChanceLucky = shakeStrings[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// FISHERMAN'S DIET
|
||||||
|
if (canFishermansDiet) {
|
||||||
|
fishermansDietRank = calculateRank(Fishing.fishermansDietMaxLevel, Fishing.fishermansDietRankLevel1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// MASTER ANGLER
|
||||||
|
if (canMasterAngler) {
|
||||||
|
double rawBiteChance = ((Math.max((skillValue / 200.0), 1.0)) / (isStorming ? 300 : 500));
|
||||||
|
Biome biome = player.getLocation().getBlock().getBiome();
|
||||||
|
|
||||||
|
if (biome == Biome.RIVER || biome == Biome.OCEAN) {
|
||||||
|
rawBiteChance = rawBiteChance * 2.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player.isInsideVehicle() && player.getVehicle().getType() == EntityType.BOAT) {
|
||||||
|
rawBiteChance = rawBiteChance * 2.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
biteChance = calculateAbilityDisplayValues(rawBiteChance * 100.0)[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void permissionsCheck() {
|
||||||
|
canTreasureHunt = Permissions.fishingTreasureHunter(player);
|
||||||
|
canMagicHunt = Permissions.magicHunter(player);
|
||||||
|
canShake = Permissions.shake(player);
|
||||||
|
canFishermansDiet = Permissions.fishermansDiet(player);
|
||||||
|
canMasterAngler = Permissions.masterAngler(player);
|
||||||
|
canIceFish = Permissions.iceFishing(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean effectsHeaderPermissions() {
|
||||||
|
return canTreasureHunt || canMagicHunt || canShake || canMasterAngler || canFishermansDiet || canIceFish;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void effectsDisplay() {
|
||||||
|
luckyEffectsDisplay();
|
||||||
|
|
||||||
|
if (canTreasureHunt) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.0"), LocaleLoader.getString("Fishing.Effect.1")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canMagicHunt) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.2"), LocaleLoader.getString("Fishing.Effect.3")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canShake) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.4"), LocaleLoader.getString("Fishing.Effect.5")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canFishermansDiet) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.6"), LocaleLoader.getString("Fishing.Effect.7")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canMasterAngler) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.8"), LocaleLoader.getString("Fishing.Effect.9")));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canIceFish) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.10"), LocaleLoader.getString("Fishing.Effect.11")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean statsHeaderPermissions() {
|
||||||
|
return canTreasureHunt || canMagicHunt || canShake || canMasterAngler || canFishermansDiet || canIceFish;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void statsDisplay() {
|
||||||
|
if (canMasterAngler) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Fishing.Ability.Chance", biteChance));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canTreasureHunt) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Fishing.Ability.Rank", lootTier));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canMagicHunt) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Fishing.Enchant.Chance", magicChance) + chanceRaining + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", magicChanceLucky) : ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canShake) {
|
||||||
|
int unlockLevel = AdvancedConfig.getInstance().getShakeUnlockLevel();
|
||||||
|
|
||||||
|
if (skillValue < unlockLevel) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Fishing.Ability.Locked.0", unlockLevel)));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Fishing.Ability.Shake", shakeChance) + (isLucky ? LocaleLoader.getString("Perks.lucky.bonus", shakeChanceLucky) : ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canFishermansDiet) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Fishing.Ability.FD", fishermansDietRank));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canIceFish) {
|
||||||
|
int unlockLevel = AdvancedConfig.getInstance().getIceFishingUnlockLevel();
|
||||||
|
|
||||||
|
if (skillValue < unlockLevel) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Fishing.Ability.Locked.1", unlockLevel)));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Fishing.Ability.IceFishing"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user