Merge remote-tracking branch 'refs/remotes/origin/develop' into update/hub-makeover

This commit is contained in:
Sam 2017-09-09 09:19:46 +01:00
commit c729857a00
95 changed files with 1300 additions and 587 deletions

View File

@ -78,6 +78,7 @@ public class SkinData
public static final SkinData LARISSA = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTc0NjE0MTUxMzQsInByb2ZpbGVJZCI6Ijg1MmE4YWNmNzMzNzQwZDc5OWVjYjA4ZmQ5OTY1MGI1IiwicHJvZmlsZU5hbWUiOiJLaW5nQ3JhenlfIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9jYThjNDRhOWVmZTY3NzExMDYzMjM5ODEwNDRmOTdjYmM1OWJmZmRlOGI1ODdlMGQzMWE4N2ViMDhhMmExZiJ9fX0=", "Lyac51CrnMK/CI2dWgGQLowAm/ZnQMpf0Ict/gqVrUgJVlGWDIVG77Rd1JyMQDEeESvTmoyivH+usiO0ePW95qjisqT3R43YEmLi85CqctGYqLKeSYpGYwYRz8Euw57LwJAALKOMLhVc2s4h2Or9nTecunG8KSmkCuZc4H1qh3frU+ltuV4HLqgdFUULbIHTggyvqiINov2tBqkkXeEjT7sOcTJCJNgNYU2O7//qg5kJmhso2CKHlRLpmy9LsaUK/Z+BzUmoRbwQgSwr3mz7dFAdlVWWKvKNcgX3nt1et0DIig3JKYmrnQX2Fprg+kWcr3nuizzLgjVwAlADC48P3DN0s/VBty2AYoWie16VNPIM+CV4BF2JRQ34GxZ8XceXbCKURrOjoCBgLGHvIhRW35eicoh26xp3/mwLvk5anPi5StJ/qEuzWJALeWcNbLsnt21m2MZp9h/MxaY6ftWOTzjTr5CYVd/teJyscMnGK4+lcV1dlt12lhbDMv6I+iz8iG9NIzuW5OvGkax90dA/Gq+Cd9FXVThPY4ufxWttHcTqgPB64GfMn6rywRm1B0eO1pJpYc/KlJZlW/PuaO8L1assyJs5KkOypBSy3zc6TO6pzgeOZv+VpQfA/UWpogv6ofmTpgdtwpjLFGSzIKTDXvF6FftALKVlYypG0fYbssA="); public static final SkinData LARISSA = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTc0NjE0MTUxMzQsInByb2ZpbGVJZCI6Ijg1MmE4YWNmNzMzNzQwZDc5OWVjYjA4ZmQ5OTY1MGI1IiwicHJvZmlsZU5hbWUiOiJLaW5nQ3JhenlfIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9jYThjNDRhOWVmZTY3NzExMDYzMjM5ODEwNDRmOTdjYmM1OWJmZmRlOGI1ODdlMGQzMWE4N2ViMDhhMmExZiJ9fX0=", "Lyac51CrnMK/CI2dWgGQLowAm/ZnQMpf0Ict/gqVrUgJVlGWDIVG77Rd1JyMQDEeESvTmoyivH+usiO0ePW95qjisqT3R43YEmLi85CqctGYqLKeSYpGYwYRz8Euw57LwJAALKOMLhVc2s4h2Or9nTecunG8KSmkCuZc4H1qh3frU+ltuV4HLqgdFUULbIHTggyvqiINov2tBqkkXeEjT7sOcTJCJNgNYU2O7//qg5kJmhso2CKHlRLpmy9LsaUK/Z+BzUmoRbwQgSwr3mz7dFAdlVWWKvKNcgX3nt1et0DIig3JKYmrnQX2Fprg+kWcr3nuizzLgjVwAlADC48P3DN0s/VBty2AYoWie16VNPIM+CV4BF2JRQ34GxZ8XceXbCKURrOjoCBgLGHvIhRW35eicoh26xp3/mwLvk5anPi5StJ/qEuzWJALeWcNbLsnt21m2MZp9h/MxaY6ftWOTzjTr5CYVd/teJyscMnGK4+lcV1dlt12lhbDMv6I+iz8iG9NIzuW5OvGkax90dA/Gq+Cd9FXVThPY4ufxWttHcTqgPB64GfMn6rywRm1B0eO1pJpYc/KlJZlW/PuaO8L1assyJs5KkOypBSy3zc6TO6pzgeOZv+VpQfA/UWpogv6ofmTpgdtwpjLFGSzIKTDXvF6FftALKVlYypG0fYbssA=");
public static final SkinData ROWENA = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTc0Njk1MTcxOTgsInByb2ZpbGVJZCI6Ijg1MmE4YWNmNzMzNzQwZDc5OWVjYjA4ZmQ5OTY1MGI1IiwicHJvZmlsZU5hbWUiOiJLaW5nQ3JhenlfIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9jNDY1OGExODY4YzNhNjhhZWVhZmZkOTUxZDQyYmZkN2QxYTRjNGZjNDJjZDI2YTlmYzhkNTNmOTkxMTM1ZCJ9fX0=", "OqXMyH9SMmQ/Pwmb21In29YnCxbsN6yqUxfudN6KNgDwRUK6y072XhW6TIoTh9JQLAUKftpeVB53tk0LxHIxnsuBMrIHvETPDQFysIc/6xq3ABogs+zqFzcp5jk6S73HiD78JxLq5pzfUzhgDPMPuZP5Q/u2q1rYbe6B9lVEJ5sUcxBLUTossgucoR4qXYAlWVQdHRhq85Ol8a+OU7ruw3HackNGto6wt6u2MigCtiHVTt9XhJ/AJE4ScodQ3XwW4L6urpl/lV2OMCsr3mCjjjEz2EMhDbCWxrAorQ9aPpMbDkHBS+4TC1tbMGUlKhj5n+EZBYVaeLr4NGPACPSdT35p/2Zra49+DXn9Xn+681yNEB0ghTdsnsgwXg76+HVPHPqRHQMuTBQGQyGZaaTX/zE0tFjH+osMElLdb8dmz3dC7kQA4A13B2phj3YbMSF1FoU4GvnPKIQn6JIuEd6hd+pRLUW7Y+mgYIHHX1FT0ihrXAyVO6lQQ6rs92gSQr7sxC7tnhPSMFcmh7OcJYcbRpn97GMubthPLanOhVy7CKqjmwIkEVtYgP28idigKwNJ+sJuUONrOu7nMKl1UTD5EEapOacc/np6UhdSw8yW+LnWD/x9ueYz9ksnyRrJgcOa41izo/WCbjPK/j3JVezr9Q3x1yveWuFmdl7CGYdXngw="); public static final SkinData ROWENA = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTc0Njk1MTcxOTgsInByb2ZpbGVJZCI6Ijg1MmE4YWNmNzMzNzQwZDc5OWVjYjA4ZmQ5OTY1MGI1IiwicHJvZmlsZU5hbWUiOiJLaW5nQ3JhenlfIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9jNDY1OGExODY4YzNhNjhhZWVhZmZkOTUxZDQyYmZkN2QxYTRjNGZjNDJjZDI2YTlmYzhkNTNmOTkxMTM1ZCJ9fX0=", "OqXMyH9SMmQ/Pwmb21In29YnCxbsN6yqUxfudN6KNgDwRUK6y072XhW6TIoTh9JQLAUKftpeVB53tk0LxHIxnsuBMrIHvETPDQFysIc/6xq3ABogs+zqFzcp5jk6S73HiD78JxLq5pzfUzhgDPMPuZP5Q/u2q1rYbe6B9lVEJ5sUcxBLUTossgucoR4qXYAlWVQdHRhq85Ol8a+OU7ruw3HackNGto6wt6u2MigCtiHVTt9XhJ/AJE4ScodQ3XwW4L6urpl/lV2OMCsr3mCjjjEz2EMhDbCWxrAorQ9aPpMbDkHBS+4TC1tbMGUlKhj5n+EZBYVaeLr4NGPACPSdT35p/2Zra49+DXn9Xn+681yNEB0ghTdsnsgwXg76+HVPHPqRHQMuTBQGQyGZaaTX/zE0tFjH+osMElLdb8dmz3dC7kQA4A13B2phj3YbMSF1FoU4GvnPKIQn6JIuEd6hd+pRLUW7Y+mgYIHHX1FT0ihrXAyVO6lQQ6rs92gSQr7sxC7tnhPSMFcmh7OcJYcbRpn97GMubthPLanOhVy7CKqjmwIkEVtYgP28idigKwNJ+sJuUONrOu7nMKl1UTD5EEapOacc/np6UhdSw8yW+LnWD/x9ueYz9ksnyRrJgcOa41izo/WCbjPK/j3JVezr9Q3x1yveWuFmdl7CGYdXngw=");
public static final SkinData BIFF = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTc0NjEzMDQzNjYsInByb2ZpbGVJZCI6Ijg1MmE4YWNmNzMzNzQwZDc5OWVjYjA4ZmQ5OTY1MGI1IiwicHJvZmlsZU5hbWUiOiJLaW5nQ3JhenlfIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9mOWMyMTE3ZDY0ZWE0ZmUxMWZiY2NhZmE2YzU5YzhlZjY3NDVkZjVkMTZjM2QwMmI4NmI2OTlmZWJjNTA0OGI1In19fQ==", "mJMpEvQ4A02z0S/chgLm5bKrrrd+zmp7A0012AB7b3KlyIHoLKEDDz+ZJgJtvN6skOqed3P+yNVqkxitugXaZZP8Af9J+/TseHn+vOy6CTK5tykRSY3Zb8Zmw1kn36v/SARAVtDIHD53yuPgJayYSAbVB7aknj1Q8XBQGUmZRMRxWWxeD7rQTOwgRYI4YJeKFf4UL9i6zxvOJuHsOAouJ7scu7VohG8vgR77Js/Z8rSu8/aSG+O9AQdzP6h9ixYNFkkQOHm7DseK/5tsWKHM4FYBgjIDKt3ApQokSbhThzGB55BA1qjXZkfCoOb13y1nOMC8WoIL6Ees1qzxG3VloGx2WAZLh+Q+/irwrFDMxk1zeU5fIRuj1c/UIM2HKdxxWgoRdrZ8ww/Jrll6maiOBx7geMn/0aOUbJ2U7gkTif6RG6YNS5YN9ZQDLh72l/akJMxF3SlmuAPmLs2kBghQ6eD2YQKuxWR/Hf1yS1YXtogFVNsGnzC1nda7F48EGL3zI+kCajbDlAGQ32aRt0btbEQ+Gj575kir3Aa53qiZ0YOIYQlhgZdOsTN2NE2s8uuy/15Rgc6K3ydgEmSZfdqyMyW0Dy7pE5TfVL8DumKRVRXdOceT5WfnW7MyqSmdorP5ab1fw2wLOnAVzhJmW8oXXNSs77WJ1/PURclxOWB4IF8="); public static final SkinData BIFF = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTc0NjEzMDQzNjYsInByb2ZpbGVJZCI6Ijg1MmE4YWNmNzMzNzQwZDc5OWVjYjA4ZmQ5OTY1MGI1IiwicHJvZmlsZU5hbWUiOiJLaW5nQ3JhenlfIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9mOWMyMTE3ZDY0ZWE0ZmUxMWZiY2NhZmE2YzU5YzhlZjY3NDVkZjVkMTZjM2QwMmI4NmI2OTlmZWJjNTA0OGI1In19fQ==", "mJMpEvQ4A02z0S/chgLm5bKrrrd+zmp7A0012AB7b3KlyIHoLKEDDz+ZJgJtvN6skOqed3P+yNVqkxitugXaZZP8Af9J+/TseHn+vOy6CTK5tykRSY3Zb8Zmw1kn36v/SARAVtDIHD53yuPgJayYSAbVB7aknj1Q8XBQGUmZRMRxWWxeD7rQTOwgRYI4YJeKFf4UL9i6zxvOJuHsOAouJ7scu7VohG8vgR77Js/Z8rSu8/aSG+O9AQdzP6h9ixYNFkkQOHm7DseK/5tsWKHM4FYBgjIDKt3ApQokSbhThzGB55BA1qjXZkfCoOb13y1nOMC8WoIL6Ees1qzxG3VloGx2WAZLh+Q+/irwrFDMxk1zeU5fIRuj1c/UIM2HKdxxWgoRdrZ8ww/Jrll6maiOBx7geMn/0aOUbJ2U7gkTif6RG6YNS5YN9ZQDLh72l/akJMxF3SlmuAPmLs2kBghQ6eD2YQKuxWR/Hf1yS1YXtogFVNsGnzC1nda7F48EGL3zI+kCajbDlAGQ32aRt0btbEQ+Gj575kir3Aa53qiZ0YOIYQlhgZdOsTN2NE2s8uuy/15Rgc6K3ydgEmSZfdqyMyW0Dy7pE5TfVL8DumKRVRXdOceT5WfnW7MyqSmdorP5ab1fw2wLOnAVzhJmW8oXXNSs77WJ1/PURclxOWB4IF8=");
public static final SkinData IVY = new SkinData("eyJ0aW1lc3RhbXAiOjE1MDQ5MTg0MTMxNTksInByb2ZpbGVJZCI6IjI2YTVmMDc5ZTNkOTRkZGY5YzdjMjc4NTcxNGIzZWU2IiwicHJvZmlsZU5hbWUiOiJFMDgiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifSwidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9hYjM0N2NhZWI0OTZlMTc0NDZiNjhlNGFmYmFjN2Y5YTNiMGE5ZTBhODI0MjAxNTM1ZGY3NDc4YmNkNzJjYSJ9fX0=", "rtQw9X3Xzekqfqiy/L7/2YH8+fLdH1jzGoDoKd2nC0c/h7IK/FfQOqC6odwDrW5liPf/VKrCTgl6uUWchOczmBeR4la6lvJMIY3Lz59qAWEfm7VHYSqiu6wYMfHWQpDU4N1Ethy4oridsavr3EAiGrONZmlGoGtZkMWt1/IEMJaH5SwVnFPkYaHVDiHrQkQ1Izlr5ZBG9SkpdhSnnviHq3swMhw6WKoBxS7jb6WXSzdwVQE5Bt0z4J2iWjZosJRKssd47T10w7Me/F+8kbgNozIp98ga99iC/moRrQxDuvrCpxdGAmjw5xq0TXprrZW04PdU2SFiZwyKgtpVpr9lDNNUCfMkkSzpaHiLXlrNvHK4M9BBo6mn2RerpA1ABBryPCcniAvPB8OEx7ktWSDN+708ZJ6u+9DelEzxfK7MTcJQkKln0T7ktxKXDafX0ALYkCLFMWKInuDSXsIgklCH/vtGLbYXdDdpwvTRMsKt+QCb7K/xMMqLgRylc4ae6i3MYCWJxi9KGRhZclrjsMacpAl8a+kS+RJdfJa8HKl7yKpEGClblQQ6vKfCNVok4neLzVJ+6OpPiHUcX6S66Lqt2cJ/aaKuouRLB7/gy+bCTT7SLxboLxw7EQkakBd2BXa3hK3LHKqoYkAmJAUrr/jl7Z/gjXzASvrak2kzR9ZNVqg=");
public static final SkinData CANADA_HAT = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTg2MDE5MDYwNzYsInByb2ZpbGVJZCI6IjdkYTJhYjNhOTNjYTQ4ZWU4MzA0OGFmYzNiODBlNjhlIiwicHJvZmlsZU5hbWUiOiJHb2xkYXBmZWwiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2M2MTExNTNmODdmMjZjMzRmOTdkODIxM2ZmOTk1ZGJlNjcyZWJkNGM0NjRkNGFkNzM5MWFlNDNjMWU3YTllIn19fQ", "QMw6e1FXl/Xrt+BbfPKsz3OHyOxL9CEPffS9grxRLD6gbLbMD84OT3+bge5V9lBFn9PPnTyID+WTF24qHj4ADTTgK94ykNedCEO6R1wS0FZKPI1UjwOxMhIG5ZeVr7+HxITgGU4Xz94IigBkvW//f2ZGelMvS0GLCrm4iCovEBMUzyYJ2dZ4xgzFSH6v+9efK4/SBAJaj8mHjXpDxU58/vskTGI3T9t5sWlZLXgId9vHcMj0GH3Un6yvUXiMkh38V/rAEM8/R8q08xUVyW0e2R38qWQV2+eKvsG8GmJmgkU/78wA9cKGZdrEz0pnr80eGNCbvXqQvC/czYhEhDapgxfndcHLX8q/Zk3I8msNr340E4ZrQL61Yl7KcVC1qEUQVu3cosq5A6ckXLGvv//HSwXVO8M9ThUbuEC8QjiS/fMFufnVa18lHrVulnfb/2KQ4yPsoCHK/zvGtRkWtD1sLOIfehN+sxCLiaz80ILBiwN0oHITfNHpJzoa4kF/OrxxCualp4Sv5o5TXBv7aWsO18v9ixb9o9CmJKKE8MUl5xmRVz4HQD4dyOfcwtPuxmfcYjJrxqBijdQMrcgLzqqMs+DUqcZZlxM7M5GaNUoEvL9tJNGpZaB2OrBw0DTk5wx15XfANCH4egx8X4+Iy2RUoFthHX3BsVazG7fjSiDnUtI="); public static final SkinData CANADA_HAT = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTg2MDE5MDYwNzYsInByb2ZpbGVJZCI6IjdkYTJhYjNhOTNjYTQ4ZWU4MzA0OGFmYzNiODBlNjhlIiwicHJvZmlsZU5hbWUiOiJHb2xkYXBmZWwiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2M2MTExNTNmODdmMjZjMzRmOTdkODIxM2ZmOTk1ZGJlNjcyZWJkNGM0NjRkNGFkNzM5MWFlNDNjMWU3YTllIn19fQ", "QMw6e1FXl/Xrt+BbfPKsz3OHyOxL9CEPffS9grxRLD6gbLbMD84OT3+bge5V9lBFn9PPnTyID+WTF24qHj4ADTTgK94ykNedCEO6R1wS0FZKPI1UjwOxMhIG5ZeVr7+HxITgGU4Xz94IigBkvW//f2ZGelMvS0GLCrm4iCovEBMUzyYJ2dZ4xgzFSH6v+9efK4/SBAJaj8mHjXpDxU58/vskTGI3T9t5sWlZLXgId9vHcMj0GH3Un6yvUXiMkh38V/rAEM8/R8q08xUVyW0e2R38qWQV2+eKvsG8GmJmgkU/78wA9cKGZdrEz0pnr80eGNCbvXqQvC/czYhEhDapgxfndcHLX8q/Zk3I8msNr340E4ZrQL61Yl7KcVC1qEUQVu3cosq5A6ckXLGvv//HSwXVO8M9ThUbuEC8QjiS/fMFufnVa18lHrVulnfb/2KQ4yPsoCHK/zvGtRkWtD1sLOIfehN+sxCLiaz80ILBiwN0oHITfNHpJzoa4kF/OrxxCualp4Sv5o5TXBv7aWsO18v9ixb9o9CmJKKE8MUl5xmRVz4HQD4dyOfcwtPuxmfcYjJrxqBijdQMrcgLzqqMs+DUqcZZlxM7M5GaNUoEvL9tJNGpZaB2OrBw0DTk5wx15XfANCH4egx8X4+Iy2RUoFthHX3BsVazG7fjSiDnUtI=");
public static final SkinData AMERICA_HAT = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTg2MDI3MjMyODgsInByb2ZpbGVJZCI6IjNlMjZiMDk3MWFjZDRjNmQ5MzVjNmFkYjE1YjYyMDNhIiwicHJvZmlsZU5hbWUiOiJOYWhlbGUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzYzMjI0MDhkYzBiZjMxNjU4N2RiNDJiN2Q5ZmViZTUwYWQ4MGY0OGU4Njc5YzI0NTFkOTk3MTdjZmVjNTdkYWQifX19","oRo6DIuhOTaXDkFsgwJ488LWqx5d1QpwtglwG1SdEvkbX1aCMGdZyDm9YIopQRjfBg0uYKQFetOZ1ZkdMmc/aKC5/dm0+Ema7g8AUzjwf4OaSLH1r4C1UJ4ruaNG5diBxNTkYnMa7yT8zvyEr22CA7lUOIgTh8ymBfSGK35RPhsn8jM0hDjdhjemBAlxKpiioByfmAQbwokNBOrXfh/PnKq+iJYg4WpMSZ1zo5Rr0CzLXwu+/T3dvrb6mg7qry7J3Lj5/qn6iIdBcjJBeyvy1sCo45jQ3Rzc6oL/84Vu5Dpn395EqUK8Sa7mdpVpATTcj56TCjkNNtDapXNqyO/IIQuzU4wnBKNQmZefaxRl6LV0DhZ8n8YQaPj6hH/mr2oDsd23+jejjqu6Y95ReTyukp06mIGqgekmrdZV2etML2oMAOTv9ieVvqtfo5gEomYs+NFAL7rMmzjAlhd17VOgqNRMpmJazAHWOYKl8KdOH99wGDe5XcyKHysh+qyHKMvhPJztIeAEaosynF/aGHghH2PM354KCuUVNmdR5G7UZUoG9ZA5ZU3EzZ854jeqxcqw3jzb6qL7A83QNuFqOsb87ugL/jO3QEDdQ9drdf3WAQauQGkU3nYBrls5wxoMrQ+Ceth+FtZw9a1v7dc+DEWOeJKCtOAIskb29pv6OcRe0Wk="); public static final SkinData AMERICA_HAT = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTg2MDI3MjMyODgsInByb2ZpbGVJZCI6IjNlMjZiMDk3MWFjZDRjNmQ5MzVjNmFkYjE1YjYyMDNhIiwicHJvZmlsZU5hbWUiOiJOYWhlbGUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzYzMjI0MDhkYzBiZjMxNjU4N2RiNDJiN2Q5ZmViZTUwYWQ4MGY0OGU4Njc5YzI0NTFkOTk3MTdjZmVjNTdkYWQifX19","oRo6DIuhOTaXDkFsgwJ488LWqx5d1QpwtglwG1SdEvkbX1aCMGdZyDm9YIopQRjfBg0uYKQFetOZ1ZkdMmc/aKC5/dm0+Ema7g8AUzjwf4OaSLH1r4C1UJ4ruaNG5diBxNTkYnMa7yT8zvyEr22CA7lUOIgTh8ymBfSGK35RPhsn8jM0hDjdhjemBAlxKpiioByfmAQbwokNBOrXfh/PnKq+iJYg4WpMSZ1zo5Rr0CzLXwu+/T3dvrb6mg7qry7J3Lj5/qn6iIdBcjJBeyvy1sCo45jQ3Rzc6oL/84Vu5Dpn395EqUK8Sa7mdpVpATTcj56TCjkNNtDapXNqyO/IIQuzU4wnBKNQmZefaxRl6LV0DhZ8n8YQaPj6hH/mr2oDsd23+jejjqu6Y95ReTyukp06mIGqgekmrdZV2etML2oMAOTv9ieVvqtfo5gEomYs+NFAL7rMmzjAlhd17VOgqNRMpmJazAHWOYKl8KdOH99wGDe5XcyKHysh+qyHKMvhPJztIeAEaosynF/aGHghH2PM354KCuUVNmdR5G7UZUoG9ZA5ZU3EzZ854jeqxcqw3jzb6qL7A83QNuFqOsb87ugL/jO3QEDdQ9drdf3WAQauQGkU3nYBrls5wxoMrQ+Ceth+FtZw9a1v7dc+DEWOeJKCtOAIskb29pv6OcRe0Wk=");
public static final SkinData REVOLUTIONARY = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTg3ODQ5Mzk3NjAsInByb2ZpbGVJZCI6ImIwZDRiMjhiYzFkNzQ4ODlhZjBlODY2MWNlZTk2YWFiIiwicHJvZmlsZU5hbWUiOiJZZWxlaGEiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2I4NTBkZDNkYWQ0MjkxYzFhYmU4NGU2OTM2ZmQ3MDM0ZWVlZTk1OTk2MWI3YjE5NDZhODIxYWRlMTFiODI2YjIifX19","U2xBG+ryUacvZq3WreWF2J4QnQERuvp1okqdlkAYECqvVHz0cars78usPuZYD4s3HyOM0eGASzS4zkQERF6Hk8crnG+ZtqvML5kL+TkxK8gEbn2j5qB+YDG0qTx635mYGC77sGaqE/CsZAlhRYU6lyXILW2616Af8B8orOlpyCMRytijp/OfJREK0bC4I1QnB7AJ2QmBYuZJ9l8473858fJOlCVHjbsC/WRcUvepPSYYxvl8Z5NwayyIVnnz3tGVN6hnM7tzil/gQmsmDwGhlSyify/MEGssvd0sHLTlccA7XX98tyUFHXU84L5MJuNKg/uXTYz+9cRPIgJaptJNfqCoEa/ape+YHlOlK2lm5qRvubvp931X+VwFbcrEuaIFgbqr9cof5JW6DYfpVKvcngi9+K9IzgtPG59Jro5kxb70IfQhZcDkcHGo1pz5Tj7cdJdD7crBeIBaE/EoKU6iaSOrUFoILEdpcWQfaToRnk4L/JMet7zPXBNE/D/vEgQLGLNX7byofdCXSD9njtjLWmHg4rCzwuUqaiWnTCYIkkdg/mFuRQ3oTRRTzdlLXsK90Pz0XU9N6gBhWA9pxhzDJR7YK+mdXODALuMXE6zcCsbVuWhqbnN+EByGdjT9X1QPSN+/5iV9d5JyweiJrF7arf2PmxgEIb9OSjePNKRmHoo="); public static final SkinData REVOLUTIONARY = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTg3ODQ5Mzk3NjAsInByb2ZpbGVJZCI6ImIwZDRiMjhiYzFkNzQ4ODlhZjBlODY2MWNlZTk2YWFiIiwicHJvZmlsZU5hbWUiOiJZZWxlaGEiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2I4NTBkZDNkYWQ0MjkxYzFhYmU4NGU2OTM2ZmQ3MDM0ZWVlZTk1OTk2MWI3YjE5NDZhODIxYWRlMTFiODI2YjIifX19","U2xBG+ryUacvZq3WreWF2J4QnQERuvp1okqdlkAYECqvVHz0cars78usPuZYD4s3HyOM0eGASzS4zkQERF6Hk8crnG+ZtqvML5kL+TkxK8gEbn2j5qB+YDG0qTx635mYGC77sGaqE/CsZAlhRYU6lyXILW2616Af8B8orOlpyCMRytijp/OfJREK0bC4I1QnB7AJ2QmBYuZJ9l8473858fJOlCVHjbsC/WRcUvepPSYYxvl8Z5NwayyIVnnz3tGVN6hnM7tzil/gQmsmDwGhlSyify/MEGssvd0sHLTlccA7XX98tyUFHXU84L5MJuNKg/uXTYz+9cRPIgJaptJNfqCoEa/ape+YHlOlK2lm5qRvubvp931X+VwFbcrEuaIFgbqr9cof5JW6DYfpVKvcngi9+K9IzgtPG59Jro5kxb70IfQhZcDkcHGo1pz5Tj7cdJdD7crBeIBaE/EoKU6iaSOrUFoILEdpcWQfaToRnk4L/JMet7zPXBNE/D/vEgQLGLNX7byofdCXSD9njtjLWmHg4rCzwuUqaiWnTCYIkkdg/mFuRQ3oTRRTzdlLXsK90Pz0XU9N6gBhWA9pxhzDJR7YK+mdXODALuMXE6zcCsbVuWhqbnN+EByGdjT9X1QPSN+/5iV9d5JyweiJrF7arf2PmxgEIb9OSjePNKRmHoo=");

View File

@ -42,7 +42,7 @@ public class AccountRepository extends MinecraftRepository
private static String CREATE_RANKS_TABLE = "CREATE TABLE IF NOT EXISTS accountRanks (id INT NOT NULL AUTO_INCREMENT, accountId INT NOT NULL, rankIdentifier VARCHAR(40), primaryGroup BOOL, PRIMARY KEY(id), INDEX accountIndex (accountId), INDEX rankIndex (rankIdentifier), UNIQUE INDEX additionalIndex (accountId, rankIdentifier, primaryGroup), FOREIGN KEY (accountId) REFERENCES accounts(id));"; private static String CREATE_RANKS_TABLE = "CREATE TABLE IF NOT EXISTS accountRanks (id INT NOT NULL AUTO_INCREMENT, accountId INT NOT NULL, rankIdentifier VARCHAR(40), primaryGroup BOOL, PRIMARY KEY(id), INDEX accountIndex (accountId), INDEX rankIndex (rankIdentifier), UNIQUE INDEX additionalIndex (accountId, rankIdentifier, primaryGroup), FOREIGN KEY (accountId) REFERENCES accounts(id));";
private static String UPDATE_PRIMARY_RANK = "UPDATE accountRanks SET rankIdentifier=? WHERE accountId=? AND primaryGroup=true;"; private static String UPDATE_PRIMARY_RANK = "UPDATE accountRanks SET rankIdentifier=? WHERE accountId=? AND primaryGroup=true;";
private static String ADD_PRIMARY_RANK = "INSERT INTO accountRanks (accountId, rankIdentifier, primaryGroup) VALUES (?, NULL, true);"; private static String ADD_PRIMARY_RANK = "INSERT INTO accountRanks (accountId, rankIdentifier, primaryGroup) VALUES (?, 'NULL', true);";
private static String ADD_ADDITIONAL_RANK = "INSERT INTO accountRanks (accountId, rankIdentifier, primaryGroup) VALUES (?, ?, false);"; private static String ADD_ADDITIONAL_RANK = "INSERT INTO accountRanks (accountId, rankIdentifier, primaryGroup) VALUES (?, ?, false);";
private static String REMOVE_ADDITIONAL_RANK = "DELETE FROM accountRanks WHERE accountId=? AND rankIdentifier=? AND primaryGroup=false;"; private static String REMOVE_ADDITIONAL_RANK = "DELETE FROM accountRanks WHERE accountId=? AND rankIdentifier=? AND primaryGroup=false;";
private static String REMOVE_ADDITIONAL_RANKS = "DELETE FROM accountRanks WHERE accountId=? AND primaryGroup=false;"; private static String REMOVE_ADDITIONAL_RANKS = "DELETE FROM accountRanks WHERE accountId=? AND primaryGroup=false;";
@ -100,11 +100,10 @@ public class AccountRepository extends MinecraftRepository
statement.execute("SELECT * FROM accountRanks WHERE accountId=" + accountId + ";"); statement.execute("SELECT * FROM accountRanks WHERE accountId=" + accountId + ";");
try (ResultSet rankSet = statement.getResultSet()) try (ResultSet rankSet = statement.getResultSet())
{ {
boolean anyRows = false;
while (rankSet.next()) while (rankSet.next())
{ {
anyRows = true; String identifier = rankSet.getString("rankIdentifier");
PermissionGroup group = PermissionGroup.valueOf(rankSet.getString("rankIdentifier")); PermissionGroup group = identifier.equals("NULL") ? null : PermissionGroup.valueOf(identifier);
boolean primary = rankSet.getBoolean("primaryGroup"); boolean primary = rankSet.getBoolean("primaryGroup");
if (primary) if (primary)
@ -113,14 +112,12 @@ public class AccountRepository extends MinecraftRepository
} }
else else
{ {
extraRanks.add(group); if (group != null)
{
extraRanks.add(group);
}
} }
} }
if (!anyRows)
{
statement.execute(UPDATE_PRIMARY_RANK.replace("?", "" + accountId));
}
} }
final int finalId = accountId; final int finalId = accountId;
@ -239,7 +236,7 @@ public class AccountRepository extends MinecraftRepository
{ {
if (!rs.next() || rs.getInt(1) == 0) if (!rs.next() || rs.getInt(1) == 0)
{ {
s.execute(ADD_PRIMARY_RANK.replace("?", "" + accountId)); s.execute(ADD_PRIMARY_RANK.replace("?", String.valueOf(accountId)));
} }
} }
@ -341,13 +338,7 @@ public class AccountRepository extends MinecraftRepository
{ {
try (Statement s = c.createStatement()) try (Statement s = c.createStatement())
{ {
try (ResultSet rs = s.executeQuery("SELECT COUNT(*) FROM accountRanks WHERE accountId=" + accountId + " AND primaryGroup=true;")) int primaryFound = 0;
{
if (!rs.next())
{
s.execute(ADD_PRIMARY_RANK.replace("?", "" + accountId));
}
}
try (ResultSet rs = s.executeQuery("SELECT * FROM accountRanks WHERE accountId=" + accountId + ";")) try (ResultSet rs = s.executeQuery("SELECT * FROM accountRanks WHERE accountId=" + accountId + ";"))
{ {
while (rs.next()) while (rs.next())
@ -356,11 +347,19 @@ public class AccountRepository extends MinecraftRepository
{ {
removed.add(PermissionGroup.valueOf(rs.getString("rankIdentifier"))); removed.add(PermissionGroup.valueOf(rs.getString("rankIdentifier")));
} }
else
{
primaryFound++;
}
} }
} }
if (primaryFound < 1)
{
s.execute(ADD_PRIMARY_RANK.replace("?", String.valueOf(accountId)));
}
} }
executeUpdate(c, UPDATE_PRIMARY_RANK, () -> {}, new ColumnVarChar("rankIdentifier", 255, "PLAYER"), new ColumnInt("accountId", accountId)); executeUpdate(c, UPDATE_PRIMARY_RANK, () -> {}, new ColumnVarChar("rankIdentifier", 255, PermissionGroup.PLAYER.name()), new ColumnInt("accountId", accountId));
executeUpdate(c, REMOVE_ADDITIONAL_RANKS, () -> success.set(false), new ColumnInt("accountId", accountId)); executeUpdate(c, REMOVE_ADDITIONAL_RANKS, () -> success.set(false), new ColumnInt("accountId", accountId));
} }
catch (SQLException e) catch (SQLException e)
@ -406,7 +405,14 @@ public class AccountRepository extends MinecraftRepository
{ {
if (rs.getBoolean("primaryGroup")) if (rs.getBoolean("primaryGroup"))
{ {
primary.set(PermissionGroup.valueOf(rs.getString("rankIdentifier"))); if (rs.getString("rankIdentifier").equals("NULL"))
{
primary.set(null);
}
else
{
primary.set(PermissionGroup.valueOf(rs.getString("rankIdentifier")));
}
} }
else else
{ {

View File

@ -108,10 +108,15 @@ public class AntiHack extends MiniPlugin
.put(FastBow.class, new CheckThresholds("FastBow", 10, 20, 30)) .put(FastBow.class, new CheckThresholds("FastBow", 10, 20, 30))
.build(); .build();
public static final Map<Class<? extends Check>, CheckThresholds> STRICT_CHECKS = ImmutableMap.<Class<? extends Check>, CheckThresholds>builder()
.put(Glide.class, new CheckThresholds("Flying", 600, 1200, 1600))
.put(Speed.class, new CheckThresholds("Speed", 600, 1200, 1600))
.build();
private static final CheckThresholds NOOP_THRESHOLD = new CheckThresholds("Unknown", Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE); private static final CheckThresholds NOOP_THRESHOLD = new CheckThresholds("Unknown", Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE);
public static final Map<Class<? extends Check>, AntiHackAction> ACTIONS = ImmutableMap.<Class<? extends Check>, AntiHackAction>builder() public static final Map<Class<? extends Check>, AntiHackAction> ACTIONS = ImmutableMap.<Class<? extends Check>, AntiHackAction>builder()
.put(KillauraTypeA.class, new ImmediateBanAction(200)) .put(KillauraTypeA.class, new ImmediateBanAction(150))
.put(KillauraTypeD.class, new BanwaveAction(1500)) .put(KillauraTypeD.class, new BanwaveAction(1500))
.put(KillauraTypeF.class, new BanwaveAction(600)) .put(KillauraTypeF.class, new BanwaveAction(600))
.put(Glide.class, new ImmediateBanAction(7500)) .put(Glide.class, new ImmediateBanAction(7500))
@ -123,6 +128,11 @@ public class AntiHack extends MiniPlugin
.put(KillauraTypeB.class, new GEPBanAction(100)) .put(KillauraTypeB.class, new GEPBanAction(100))
.build(); .build();
public static final Map<Class<? extends Check>, AntiHackAction> STRICT_ACTIONS = ImmutableMap.<Class<? extends Check>, AntiHackAction>builder()
.put(Glide.class, new ImmediateBanAction(2200))
.put(Speed.class, new ImmediateBanAction(2200))
.build();
private static final AntiHackAction NOOP_ACTION = new NoopAction(); private static final AntiHackAction NOOP_ACTION = new NoopAction();
private static final String NAME = "Chiss"; private static final String NAME = "Chiss";
@ -475,9 +485,15 @@ public class AntiHack extends MiniPlugin
return; return;
} }
ACTIONS.getOrDefault(event.getCheckClass(), NOOP_ACTION).handle(event);
CheckThresholds thresholds = CHECKS.getOrDefault(event.getCheckClass(), NOOP_THRESHOLD); CheckThresholds thresholds = CHECKS.getOrDefault(event.getCheckClass(), NOOP_THRESHOLD);
AntiHackAction action = ACTIONS.getOrDefault(event.getCheckClass(), NOOP_ACTION);
if (_strict)
{
thresholds = STRICT_CHECKS.getOrDefault(event.getCheckClass(), thresholds);
action = STRICT_ACTIONS.getOrDefault(event.getCheckClass(), action);
}
action.handle(event);
CheckThresholds.Severity severity = thresholds.getSeverity(event.getViolations()); CheckThresholds.Severity severity = thresholds.getSeverity(event.getViolations());
if (severity == CheckThresholds.Severity.NONE) if (severity == CheckThresholds.Severity.NONE)

View File

@ -69,12 +69,6 @@ public class CosmeticManager extends MiniPlugin
_shop = new CosmeticShop(this, clientManager, donationManager, _moduleName); _shop = new CosmeticShop(this, clientManager, donationManager, _moduleName);
} }
/*@Override
public void addCommands()
{
addCommand(new CosmeticsSlackCommand(this));
}*/
public void showInterface(boolean showInterface) public void showInterface(boolean showInterface)
{ {
boolean changed = _showInterface == showInterface; boolean changed = _showInterface == showInterface;
@ -244,9 +238,9 @@ public class CosmeticManager extends MiniPlugin
return _punish; return _punish;
} }
public void displayUI(Player player) public CosmeticShop getShop()
{ {
_shop.attemptShopOpen(player); return _shop;
} }
public void disableTeamArmor() public void disableTeamArmor()

View File

@ -3,10 +3,8 @@ package mineplex.core.cosmetic.ui.page;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import mineplex.core.account.CoreClientManager; import mineplex.core.account.CoreClientManager;
import mineplex.core.common.currency.GlobalCurrency;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.cosmetic.CosmeticManager;
import mineplex.core.cosmetic.ui.CosmeticShop; import mineplex.core.cosmetic.ui.CosmeticShop;
@ -17,9 +15,7 @@ import mineplex.core.gadget.gadgets.outfit.spacesuit.OutfitSpaceSuit;
import mineplex.core.gadget.gadgets.outfit.stpatricks.OutfitStPatricksSuit; import mineplex.core.gadget.gadgets.outfit.stpatricks.OutfitStPatricksSuit;
import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.Gadget;
import mineplex.core.gadget.types.GadgetType; import mineplex.core.gadget.types.GadgetType;
import mineplex.core.gadget.types.ItemGadget;
import mineplex.core.gadget.types.OutfitGadget; import mineplex.core.gadget.types.OutfitGadget;
import mineplex.core.shop.item.IButton;
import mineplex.core.shop.item.ShopItem; import mineplex.core.shop.item.ShopItem;
public class CostumePage extends GadgetPage public class CostumePage extends GadgetPage
@ -92,21 +88,4 @@ public class CostumePage extends GadgetPage
addBackButton(); addBackButton();
} }
public void activateGadget(Player player, Gadget gadget)
{
if (gadget instanceof ItemGadget)
{
if (getPlugin().getInventoryManager().Get(player).getItemCount(gadget.getName()) <= 0)
{
purchaseGadget(player, gadget);
return;
}
}
playAcceptSound(player);
gadget.enable(player);
buildPage();
}
} }

View File

@ -122,15 +122,10 @@ public class GadgetPage extends ShopPageBase<CosmeticManager, CosmeticShop>
protected void addBackButton(int slot) protected void addBackButton(int slot)
{ {
addButton(4, new ShopItem(Material.BED, C.cGreen + "Go Back", new String[0], 1, false), (player, clickType) -> getShop().openPageForPlayer(getPlayer(), new Menu(getPlugin(), getShop(), getClientManager(), getDonationManager(), player))); addButton(slot, new ShopItem(Material.BED, C.cGreen + "Go Back", new String[0], 1, false), (player, clickType) -> getShop().openPageForPlayer(getPlayer(), new Menu(getPlugin(), getShop(), getClientManager(), getDonationManager(), player)));
} }
protected void addGadget(Gadget gadget, int slot) protected void addGadget(Gadget gadget, int slot)
{
addGadget(gadget, slot, false);
}
protected void addGadget(Gadget gadget, int slot, boolean locked)
{ {
boolean owns = gadget.ownsGadget(getPlayer()); boolean owns = gadget.ownsGadget(getPlayer());
int shardCost = gadget.getCost(GlobalCurrency.TREASURE_SHARD); int shardCost = gadget.getCost(GlobalCurrency.TREASURE_SHARD);
@ -161,7 +156,7 @@ public class GadgetPage extends ShopPageBase<CosmeticManager, CosmeticShop>
} }
} }
if (!owns || locked) if (!owns)
{ {
int displayedShardCost = shardCost; int displayedShardCost = shardCost;
@ -300,7 +295,7 @@ public class GadgetPage extends ShopPageBase<CosmeticManager, CosmeticShop>
addCustomLore(gadget, itemLore); addCustomLore(gadget, itemLore);
if (owns && !locked) if (owns)
{ {
ItemStack gadgetItemStack; ItemStack gadgetItemStack;
@ -421,7 +416,6 @@ public class GadgetPage extends ShopPageBase<CosmeticManager, CosmeticShop>
public void handleRightClick(Player player, Gadget gadget) public void handleRightClick(Player player, Gadget gadget)
{ {
player.sendMessage("Preview?");
} }
public void deactivateGadget(Player player, Gadget gadget) public void deactivateGadget(Player player, Gadget gadget)

View File

@ -36,11 +36,6 @@ public class ItemGadgetPage extends GadgetPage
@Override @Override
public void purchaseGadget(Player player, Gadget gadget) public void purchaseGadget(Player player, Gadget gadget)
{ {
if (gadget.getCost(GlobalCurrency.TREASURE_SHARD) <= 0)
{
return;
}
ItemGadget itemGadget = (ItemGadget) gadget; ItemGadget itemGadget = (ItemGadget) gadget;
if (itemGadget.getAmmo() != null && itemGadget.getAmmo().getCost(GlobalCurrency.TREASURE_SHARD) <= 0) if (itemGadget.getAmmo() != null && itemGadget.getAmmo().getCost(GlobalCurrency.TREASURE_SHARD) <= 0)

View File

@ -1,7 +1,5 @@
package mineplex.core.cosmetic.ui.page; package mineplex.core.cosmetic.ui.page;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -14,7 +12,6 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BannerMeta; import org.bukkit.inventory.meta.BannerMeta;
import mineplex.core.account.CoreClientManager; import mineplex.core.account.CoreClientManager;
import mineplex.core.common.currency.GlobalCurrency;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.LineFormat;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
@ -58,21 +55,10 @@ public class Menu extends ShopPageBase<CosmeticManager, CosmeticShop>
@Override @Override
protected void buildPage() protected void buildPage()
{ {
// Treasure Shards
int treasureShards = getDonationManager().Get(getPlayer()).getBalance(GlobalCurrency.TREASURE_SHARD);
List<String> shardLore = new ArrayList<>();
shardLore.add(" ");
shardLore.add(C.cGray + "These seem like they might come in");
shardLore.add(C.cGray + "handy. Maybe I should collect more!");
ShopItem shards = new ShopItem(Material.PRISMARINE_SHARD, C.cAqua + C.Bold + treasureShards + " Treasure Shards", shardLore.toArray(new String[0]), 0, false);
int deathSlot = 19; int deathSlot = 19;
int jumpSlot = 28; int jumpSlot = 28;
int particleSlot = 1; int particleSlot = 1;
int winEffectSlot = 13; int winEffectSlot = 13;
int shardSlot = 22;
int arrowSlot = 10; int arrowSlot = 10;
int tauntSlot = 31; int tauntSlot = 31;
int gameModifierSlot = 21; int gameModifierSlot = 21;
@ -86,9 +72,7 @@ public class Menu extends ShopPageBase<CosmeticManager, CosmeticShop>
int flagSlot = 34; int flagSlot = 34;
int morphSlot = 25; int morphSlot = 25;
int costumeSlot = 16; int costumeSlot = 16;
int powerPlaySlot = 40; int powerPlaySlot = 22;
addItem(shardSlot, shards);
EnumMap<GadgetType, Integer> ownedCount = new EnumMap<>(GadgetType.class); EnumMap<GadgetType, Integer> ownedCount = new EnumMap<>(GadgetType.class);
EnumMap<GadgetType, Integer> maxCount = new EnumMap<>(GadgetType.class); EnumMap<GadgetType, Integer> maxCount = new EnumMap<>(GadgetType.class);

View File

@ -1,5 +1,11 @@
package mineplex.core.cosmetic.ui.page.gamemodifiers; package mineplex.core.cosmetic.ui.page.gamemodifiers;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import mineplex.core.account.CoreClientManager; import mineplex.core.account.CoreClientManager;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.cosmetic.CosmeticManager;
@ -7,10 +13,8 @@ import mineplex.core.cosmetic.ui.CosmeticShop;
import mineplex.core.cosmetic.ui.page.GadgetPage; import mineplex.core.cosmetic.ui.page.GadgetPage;
import mineplex.core.donation.DonationManager; import mineplex.core.donation.DonationManager;
import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticCategory; import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticCategory;
import mineplex.core.gadget.types.GameModifierGadget; import mineplex.core.gadget.types.Gadget;
import mineplex.core.shop.item.ShopItem; import mineplex.core.shop.item.ShopItem;
import org.bukkit.Material;
import org.bukkit.entity.Player;
public class GameCosmeticGadgetPage extends GadgetPage public class GameCosmeticGadgetPage extends GadgetPage
{ {
@ -20,7 +24,7 @@ public class GameCosmeticGadgetPage extends GadgetPage
public GameCosmeticGadgetPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player, GameCosmeticCategoryPage previousMenu, GameCosmeticCategory category) public GameCosmeticGadgetPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player, GameCosmeticCategoryPage previousMenu, GameCosmeticCategory category)
{ {
super(plugin, shop, clientManager, donationManager, name, player, null); super(plugin, shop, clientManager, donationManager, name, player);
_previousMenu = previousMenu; _previousMenu = previousMenu;
_category = category; _category = category;
@ -31,18 +35,21 @@ public class GameCosmeticGadgetPage extends GadgetPage
@Override @Override
protected void buildPage() protected void buildPage()
{ {
int slot = 10; super.buildPage();
for (GameModifierGadget gadget : _category.getGadgets()) if (_previousMenu != null)
{ {
addGadget(gadget, slot); addButton(4, new ShopItem(Material.BED, C.cGreen + "Go Back", new String[0], 1, false), (player, clickType) -> getShop().openPageForPlayer(getPlayer(), _previousMenu));
if (++slot % 9 == 8)
{
slot += 2;
}
} }
else
{
removeButton(4);
}
}
addButton(4, new ShopItem(Material.BED, C.cGreen + " Go Back", new String[]{}, 1, false), (player, clickType) -> getShop().openPageForPlayer(getPlayer(), _previousMenu)); @Override
protected List<Gadget> getGadgetsToDisplay()
{
return new ArrayList<>(_category.getGadgets());
} }
} }

View File

@ -53,7 +53,7 @@ public class HeroSkinCategoryPage extends GadgetPage
public HeroSkinCategoryPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player, GameCosmeticCategoryPage previousMenu) public HeroSkinCategoryPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player, GameCosmeticCategoryPage previousMenu)
{ {
super(plugin, shop, clientManager, donationManager, name, player, null); super(plugin, shop, clientManager, donationManager, name, player);
_previousMenu = previousMenu; _previousMenu = previousMenu;
@ -99,6 +99,6 @@ public class HeroSkinCategoryPage extends GadgetPage
addButton(slots[index++], itemStack, (player, clickType) -> getShop().openPageForPlayer(player, new HeroSkinGadgetPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), name, getPlayer(), this, gadgetDataList))); addButton(slots[index++], itemStack, (player, clickType) -> getShop().openPageForPlayer(player, new HeroSkinGadgetPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), name, getPlayer(), this, gadgetDataList)));
} }
addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[0], 1, false), (player, clickType) -> getShop().openPageForPlayer(getPlayer(), _previousMenu)); addButton(4, new ShopItem(Material.BED, C.cGreen + "Go Back", new String[0], 1, false), (player, clickType) -> getShop().openPageForPlayer(getPlayer(), _previousMenu));
} }
} }

View File

@ -22,7 +22,7 @@ public class HeroSkinGadgetPage extends GadgetPage
HeroSkinGadgetPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player, GadgetPage previousMenu, List<HeroSkinGadgetData> gadgetData) HeroSkinGadgetPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player, GadgetPage previousMenu, List<HeroSkinGadgetData> gadgetData)
{ {
super(plugin, shop, clientManager, donationManager, name, player, null); super(plugin, shop, clientManager, donationManager, name, player);
_previousMenu = previousMenu; _previousMenu = previousMenu;
_gadgetData = gadgetData; _gadgetData = gadgetData;
@ -45,6 +45,6 @@ public class HeroSkinGadgetPage extends GadgetPage
} }
} }
addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[0], 1, false), (player, clickType) -> getShop().openPageForPlayer(getPlayer(), _previousMenu)); addButton(4, new ShopItem(Material.BED, C.cGreen + "Go Back", new String[0], 1, false), (player, clickType) -> getShop().openPageForPlayer(getPlayer(), _previousMenu));
} }
} }

View File

@ -46,6 +46,7 @@ import mineplex.core.gadget.commands.AmmoCommand;
import mineplex.core.gadget.commands.LockCosmeticsCommand; import mineplex.core.gadget.commands.LockCosmeticsCommand;
import mineplex.core.gadget.commands.UnlockCosmeticsCommand; import mineplex.core.gadget.commands.UnlockCosmeticsCommand;
import mineplex.core.gadget.event.GadgetChangeEvent; import mineplex.core.gadget.event.GadgetChangeEvent;
import mineplex.core.gadget.event.GadgetChangeEvent.GadgetState;
import mineplex.core.gadget.event.GadgetCollideEntityEvent; import mineplex.core.gadget.event.GadgetCollideEntityEvent;
import mineplex.core.gadget.event.GadgetEnableEvent; import mineplex.core.gadget.event.GadgetEnableEvent;
import mineplex.core.gadget.event.PlayerToggleSwimEvent; import mineplex.core.gadget.event.PlayerToggleSwimEvent;
@ -105,8 +106,6 @@ import mineplex.core.gadget.gadgets.gamemodifiers.gemhunters.GemHuntersMountGadg
import mineplex.core.gadget.gadgets.gamemodifiers.gemhunters.GemHuntersMountType; import mineplex.core.gadget.gadgets.gamemodifiers.gemhunters.GemHuntersMountType;
import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.GameModifierMineStrikeSkin; import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.GameModifierMineStrikeSkin;
import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.MineStrikeSkin; import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.MineStrikeSkin;
import mineplex.core.gadget.gadgets.gamemodifiers.moba.emblems.EmblemGadget;
import mineplex.core.gadget.gadgets.gamemodifiers.moba.emblems.EmblemType;
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphGadget; import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphGadget;
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphType; import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphType;
import mineplex.core.gadget.gadgets.gamemodifiers.moba.skins.HeroSkinGadget; import mineplex.core.gadget.gadgets.gamemodifiers.moba.skins.HeroSkinGadget;
@ -170,6 +169,7 @@ import mineplex.core.gadget.gadgets.morph.managers.SwimManager;
import mineplex.core.gadget.gadgets.morph.moba.MorphAnath; import mineplex.core.gadget.gadgets.morph.moba.MorphAnath;
import mineplex.core.gadget.gadgets.morph.moba.MorphBardolf; import mineplex.core.gadget.gadgets.morph.moba.MorphBardolf;
import mineplex.core.gadget.gadgets.morph.moba.MorphBiff; import mineplex.core.gadget.gadgets.morph.moba.MorphBiff;
import mineplex.core.gadget.gadgets.morph.moba.MorphIvy;
import mineplex.core.gadget.gadgets.morph.moba.MorphDana; import mineplex.core.gadget.gadgets.morph.moba.MorphDana;
import mineplex.core.gadget.gadgets.morph.moba.MorphDevon; import mineplex.core.gadget.gadgets.morph.moba.MorphDevon;
import mineplex.core.gadget.gadgets.morph.moba.MorphHattori; import mineplex.core.gadget.gadgets.morph.moba.MorphHattori;
@ -422,7 +422,8 @@ public class GadgetManager extends MiniPlugin
{ {
PermissionGroup.QA.setPermission(Perm.LOCK_COSMETICS_COMMAND, true, true); PermissionGroup.QA.setPermission(Perm.LOCK_COSMETICS_COMMAND, true, true);
PermissionGroup.QA.setPermission(Perm.UNLOCK_COSMETICS_COMMAND, true, true); PermissionGroup.QA.setPermission(Perm.UNLOCK_COSMETICS_COMMAND, true, true);
} else }
else
{ {
PermissionGroup.ADMIN.setPermission(Perm.LOCK_COSMETICS_COMMAND, true, true); PermissionGroup.ADMIN.setPermission(Perm.LOCK_COSMETICS_COMMAND, true, true);
PermissionGroup.ADMIN.setPermission(Perm.UNLOCK_COSMETICS_COMMAND, true, true); PermissionGroup.ADMIN.setPermission(Perm.UNLOCK_COSMETICS_COMMAND, true, true);
@ -564,6 +565,7 @@ public class GadgetManager extends MiniPlugin
addGadget(new MorphRowena(this)); addGadget(new MorphRowena(this));
addGadget(new MorphLarissa(this)); addGadget(new MorphLarissa(this));
addGadget(new MorphBiff(this)); addGadget(new MorphBiff(this));
addGadget(new MorphIvy(this));
// Mounts // Mounts
addGadget(new MountUndead(this)); addGadget(new MountUndead(this));
@ -850,17 +852,17 @@ public class GadgetManager extends MiniPlugin
} }
} }
}; };
new GameCosmeticCategory(this, "Emblems", new ItemStack(Material.NETHER_STAR), false) // new GameCosmeticCategory(this, "Emblems", new ItemStack(Material.NETHER_STAR), false)
{ // {
@Override // @Override
public void addGadgets() // public void addGadgets()
{ // {
for (EmblemType type : EmblemType.values()) // for (EmblemType type : EmblemType.values())
{ // {
addGameGadget(new EmblemGadget(getManager(), this, type)); // addGameGadget(new EmblemGadget(getManager(), this, type));
} // }
} // }
}; // };
} }
}; };
@ -1475,55 +1477,10 @@ public class GadgetManager extends MiniPlugin
private void saveGadget(GadgetChangeEvent event) private void saveGadget(GadgetChangeEvent event)
{ {
Gadget gadget = event.getGadget(); Gadget gadget = event.getGadget();
if (gadget != null) if (gadget != null)
{ {
String value = "disabled", key; _userGadgetPersistence.save(event.getPlayer(), gadget, event.getGadgetState() == GadgetState.ENABLED);
GadgetType gadgetType = gadget.getGadgetType();
switch (gadgetType)
{
case MUSIC_DISC:
case ITEM:
case MORPH:
case BALLOON:
case MOUNT:
return;
case COSTUME:
OutfitGadget outfitGadget = (OutfitGadget) gadget;
key = "activeCostume" + outfitGadget.getSlot().getDatabaseKey();
if (event.getGadgetState() == GadgetChangeEvent.GadgetState.ENABLED)
{
value = outfitGadget.getName();
}
break;
case GAME_MODIFIER:
GameModifierGadget gameModifierGadget = (GameModifierGadget) gadget;
GameCosmeticCategory category = gameModifierGadget.getCategory();
if (category.isAllowingMultiple())
{
key = gameModifierGadget.getName();
if (event.getGadgetState() == GadgetChangeEvent.GadgetState.ENABLED)
{
value = "enabled";
}
}
else
{
key = "active" + category.getType().getName().replace(" ", "");
if (event.getGadgetState() == GadgetChangeEvent.GadgetState.ENABLED)
{
value = gameModifierGadget.getName();
}
}
break;
default:
key = gadgetType.getDatabaseKey();
if (event.getGadgetState() == GadgetChangeEvent.GadgetState.ENABLED)
{
value = gadget.getName();
}
}
_userGadgetPersistence.save(event.getPlayer(), key, value);
} }
} }

View File

@ -15,14 +15,11 @@ import mineplex.core.pet.PetType;
public class LockCosmeticsCommand extends CommandBase<GadgetManager> public class LockCosmeticsCommand extends CommandBase<GadgetManager>
{ {
private GadgetManager _plugin;
public LockCosmeticsCommand(GadgetManager plugin) public LockCosmeticsCommand(GadgetManager plugin)
{ {
super(plugin, GadgetManager.Perm.LOCK_COSMETICS_COMMAND, "lockCosmetics"); super(plugin, GadgetManager.Perm.LOCK_COSMETICS_COMMAND, "lockCosmetics");
}
_plugin = plugin;
}
@Override @Override
public void Execute(Player caller, String[] args) public void Execute(Player caller, String[] args)
@ -38,7 +35,7 @@ public class LockCosmeticsCommand extends CommandBase<GadgetManager>
if (player != null) if (player != null)
{ {
removeCosmetics(null, player); removeCosmetics(null, player);
UtilPlayer.message(caller, F.main("Unlock Cosmetics", "Removed all the cosmetics to " + F.name(player.getName()) + "!")); UtilPlayer.message(caller, F.main(Plugin.getName(), "Removed all the cosmetics to " + F.name(player.getName()) + "!"));
} }
} }
} }
@ -54,9 +51,9 @@ public class LockCosmeticsCommand extends CommandBase<GadgetManager>
removePets(caller); removePets(caller);
return; return;
} }
Donor donor = _plugin.getDonationManager().Get(caller); Donor donor = Plugin.getDonationManager().Get(caller);
int removed = 0; int removed = 0;
for (Gadget gadget : _plugin.getGadgets(gadgetType)) for (Gadget gadget : Plugin.getGadgets(gadgetType))
{ {
if (gadget != null) if (gadget != null)
{ {
@ -77,7 +74,7 @@ public class LockCosmeticsCommand extends CommandBase<GadgetManager>
} }
} }
} }
UtilPlayer.message(caller, F.main("Lock Cosmetics", "Removed " + removed + F.elem(" " + gadgetType.getCategoryType()) + UtilText.plural(" item", removed) + "!")); UtilPlayer.message(caller, F.main(Plugin.getName(), "Removed " + removed + F.elem(" " + gadgetType.getCategoryType()) + UtilText.plural(" item", removed) + "!"));
} }
private void removePets(Player caller) private void removePets(Player caller)
@ -85,11 +82,11 @@ public class LockCosmeticsCommand extends CommandBase<GadgetManager>
int removed = 0; int removed = 0;
for (PetType pet : PetType.values()) for (PetType pet : PetType.values())
{ {
if (_plugin.getPetManager().Get(caller).getPets().remove(pet) != null) if (Plugin.getPetManager().Get(caller).getPets().remove(pet) != null)
{ {
removed++; removed++;
} }
} }
UtilPlayer.message(caller, F.main("Lock Cosmetics", "Removed " + removed + UtilText.plural(" pet", removed) + "!")); UtilPlayer.message(caller, F.main(Plugin.getName(), "Removed " + removed + UtilText.plural(" pet", removed) + "!"));
} }
} }

View File

@ -16,14 +16,10 @@ import mineplex.core.pet.PetType;
public class UnlockCosmeticsCommand extends CommandBase<GadgetManager> public class UnlockCosmeticsCommand extends CommandBase<GadgetManager>
{ {
private GadgetManager _plugin;
public UnlockCosmeticsCommand(GadgetManager plugin) public UnlockCosmeticsCommand(GadgetManager plugin)
{ {
super(plugin, GadgetManager.Perm.UNLOCK_COSMETICS_COMMAND, "unlockCosmetics"); super(plugin, GadgetManager.Perm.UNLOCK_COSMETICS_COMMAND, "unlockCosmetics");
_plugin = plugin;
} }
@Override @Override
@ -43,7 +39,7 @@ public class UnlockCosmeticsCommand extends CommandBase<GadgetManager>
if (player != null) if (player != null)
{ {
addCosmetics(null, player); addCosmetics(null, player);
UtilPlayer.message(caller, F.main("Unlock Cosmetics", "Added all the cosmetics to " + F.name(player.getName()) + "!")); UtilPlayer.message(caller, F.main(Plugin.getName(), "Added all the cosmetics to " + F.name(player.getName()) + "!"));
} }
} }
} }
@ -55,7 +51,7 @@ public class UnlockCosmeticsCommand extends CommandBase<GadgetManager>
if (player != null) if (player != null)
{ {
addCosmetics(null, player); addCosmetics(null, player);
UtilPlayer.message(caller, F.main("Unlock Cosmetics", "Added all the cosmetics to " + F.name(player.getName()) + "!")); UtilPlayer.message(caller, F.main(Plugin.getName(), "Added all the cosmetics to " + F.name(player.getName()) + "!"));
} }
} }
} }
@ -73,9 +69,9 @@ public class UnlockCosmeticsCommand extends CommandBase<GadgetManager>
addPets(caller); addPets(caller);
return; return;
} }
Donor donor = _plugin.getDonationManager().Get(caller); Donor donor = Plugin.getDonationManager().Get(caller);
int added = 0; int added = 0;
for (Gadget gadget : _plugin.getGadgets(gadgetType)) for (Gadget gadget : Plugin.getGadgets(gadgetType))
{ {
if (gadget.isHidden()) if (gadget.isHidden())
{ {
@ -103,7 +99,7 @@ public class UnlockCosmeticsCommand extends CommandBase<GadgetManager>
added++; added++;
} }
} }
UtilPlayer.message(caller, F.main("Unlock Cosmetics", "Added " + added + F.elem(" " + gadgetType.getCategoryType()) + UtilText.plural(" item", added) + "!")); UtilPlayer.message(caller, F.main(Plugin.getName(), "Added " + added + F.elem(" " + gadgetType.getCategoryType()) + UtilText.plural(" item", added) + "!"));
} }
private void addPets(Player caller) private void addPets(Player caller)
@ -111,12 +107,12 @@ public class UnlockCosmeticsCommand extends CommandBase<GadgetManager>
int added = 0; int added = 0;
for (PetType pet : PetType.values()) for (PetType pet : PetType.values())
{ {
if (!_plugin.getPetManager().Get(caller).getPets().containsKey(pet)) if (!Plugin.getPetManager().Get(caller).getPets().containsKey(pet))
{ {
_plugin.getPetManager().Get(caller).getPets().put(pet, pet.getName()); Plugin.getPetManager().Get(caller).getPets().put(pet, pet.getName());
added++; added++;
} }
} }
UtilPlayer.message(caller, F.main("Unlock Cosmetics", "Added " + added + UtilText.plural(" pet", added) + "!")); UtilPlayer.message(caller, F.main(Plugin.getName(), "Added " + added + UtilText.plural(" pet", added) + "!"));
} }
} }

View File

@ -3,8 +3,10 @@ package mineplex.core.gadget.gadgets.gamemodifiers;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import mineplex.core.cosmetic.CosmeticManager;
import mineplex.core.cosmetic.ui.page.GadgetPage; import mineplex.core.cosmetic.ui.page.GadgetPage;
import mineplex.core.cosmetic.ui.page.gamemodifiers.GameCosmeticCategoryPage; import mineplex.core.cosmetic.ui.page.gamemodifiers.GameCosmeticCategoryPage;
import mineplex.core.cosmetic.ui.page.gamemodifiers.GameCosmeticGadgetPage; import mineplex.core.cosmetic.ui.page.gamemodifiers.GameCosmeticGadgetPage;
@ -43,6 +45,11 @@ public abstract class GameCosmeticCategory
_manager.addGadget(gadget); _manager.addGadget(gadget);
} }
public GadgetPage getGadgetPage(CosmeticManager manager, Player player)
{
return new GameCosmeticGadgetPage(manager, manager.getShop(), _manager.getClientManager(), _manager.getDonationManager(), _categoryName, player, null, this);
}
public GadgetPage getGadgetPage(GameCosmeticCategoryPage parent) public GadgetPage getGadgetPage(GameCosmeticCategoryPage parent)
{ {
return new GameCosmeticGadgetPage(parent.getPlugin(), parent.getShop(), parent.getClientManager(), parent.getDonationManager(), _categoryName, parent.getClient().GetPlayer(), parent, this); return new GameCosmeticGadgetPage(parent.getPlugin(), parent.getShop(), parent.getClientManager(), parent.getDonationManager(), _categoryName, parent.getClient().GetPlayer(), parent, this);

View File

@ -19,6 +19,7 @@ import mineplex.core.gadget.types.GameModifierGadget;
import mineplex.core.game.GameDisplay; import mineplex.core.game.GameDisplay;
@ReflectivelyCreateMiniPlugin @ReflectivelyCreateMiniPlugin
// TODO Remove all the string literals for cosmetic categories
public class GameCosmeticManager extends MiniPlugin public class GameCosmeticManager extends MiniPlugin
{ {
@ -133,7 +134,7 @@ public class GameCosmeticManager extends MiniPlugin
return gadgetsCloned; return gadgetsCloned;
} }
private GameCosmeticCategory getCategoryFrom(GameDisplay gameType, String categoryName) public GameCosmeticCategory getCategoryFrom(GameDisplay gameType, String categoryName)
{ {
if (gameType == null || categoryName == null) if (gameType == null || categoryName == null)
{ {

View File

@ -12,12 +12,13 @@ public class GemHuntersMountGadget extends GameModifierGadget
private final GemHuntersMountType _type; private final GemHuntersMountType _type;
// An alternative package name of "Clans " + name is due to mounts from the store originally just for clans being available on more platforms.
public GemHuntersMountGadget(GadgetManager manager, GameCosmeticCategory category, GemHuntersMountType type) public GemHuntersMountGadget(GadgetManager manager, GameCosmeticCategory category, GemHuntersMountType type)
{ {
super(manager, category, type.getName() + " Mount", new String[] { super(manager, category, type.getName(), new String[]{
C.cGray + "Changed your active Mount", C.cGray + "Changed your active Mount",
C.cGray + "in " + F.greenElem("Gem Hunters") + " to " + type.getName() + ".", C.cGray + "in " + F.greenElem("Gem Hunters") + " to " + type.getName() + ".",
}, CostConstants.PURCHASED_FROM_STORE, type.getMaterial(), type.getMaterialData()); }, CostConstants.PURCHASED_FROM_STORE, type.getMaterial(), type.getMaterialData(), "Clans " + type.getName());
_type = type; _type = type;
} }

View File

@ -1,26 +1,235 @@
package mineplex.core.gadget.gadgets.gamemodifiers.gemhunters; package mineplex.core.gadget.gadgets.gamemodifiers.gemhunters;
import org.bukkit.DyeColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Horse; import org.bukkit.entity.Horse;
import org.bukkit.entity.Horse.Color;
import org.bukkit.entity.Horse.Style;
import org.bukkit.entity.Horse.Variant; import org.bukkit.entity.Horse.Variant;
import mineplex.core.Managers;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.disguise.DisguiseManager; import mineplex.core.disguise.DisguiseManager;
import mineplex.core.disguise.disguises.DisguiseBase;
import mineplex.core.disguise.disguises.DisguiseCow;
import mineplex.core.disguise.disguises.DisguiseSheep;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.utils.UtilVariant; import mineplex.core.utils.UtilVariant;
public enum GemHuntersMountType public enum GemHuntersMountType
{ {
DONKEY("Donkey", Material.CHEST) INFERNAL_HORROR("Infernal Horror Mount Skin", Material.BONE)
{
@Override
public Horse spawn(Location location, DisguiseManager manager)
{
return UtilVariant.spawnHorse(location, Variant.SKELETON_HORSE);
}
@Override
public void onUpdate(UpdateEvent event, Horse horse)
{
if (event.getType() != UpdateType.TICK)
{
return;
}
UtilParticle.PlayParticleToAll(ParticleType.FLAME, horse.getLocation().add(0, 1, 0), 0.25F, 0.25F, 0.25F, 0, 2, ViewDist.NORMAL);
}
},
GLACIAL_STEED("Glacial Steed Mount Skin", Material.SNOW_BALL)
{
@Override
public Horse spawn(Location location, DisguiseManager manager)
{
Horse horse = UtilVariant.spawnHorse(location, Variant.HORSE);
horse.setColor(Color.WHITE);
horse.setStyle(Style.WHITE);
return horse;
}
@Override
public void onUpdate(UpdateEvent event, Horse horse)
{
if (event.getType() != UpdateType.TICK)
{
return;
}
UtilParticle.PlayParticleToAll(ParticleType.SNOW_SHOVEL, horse.getLocation().add(0, 1, 0), 0.25F, 0.25F, 0.25F, 0.1F, 4, ViewDist.NORMAL);
}
},
ZOMBIE_HORSE("Zombie Horse Mount Skin", Material.ROTTEN_FLESH)
{
@Override
public Horse spawn(Location location, DisguiseManager manager)
{
return UtilVariant.spawnHorse(location, Variant.UNDEAD_HORSE);
}
@Override
public void onUpdate(UpdateEvent event, Horse horse)
{
if (event.getType() != UpdateType.TICK)
{
return;
}
UtilParticle.PlayParticleToAll(ParticleType.FOOTSTEP, horse.getLocation().add(0, 0.2, 0), null, 0, 1, ViewDist.NORMAL);
}
},
RAINBOW_SHEEP("Rainbow Sheep Mount Skin", Material.WOOL, 14)
{
private DisguiseManager _disguise = Managers.get(DisguiseManager.class);
@Override
public Horse spawn(Location location, DisguiseManager manager)
{
Horse horse = UtilVariant.spawnHorse(location, Variant.HORSE);
manager.disguise(new DisguiseSheep(horse));
return horse;
}
@Override
public void onUpdate(UpdateEvent event, Horse horse)
{
if (event.getType() != UpdateType.FAST)
{
return;
}
DisguiseBase base = _disguise.getActiveDisguise(horse);
if (base == null || !(base instanceof DisguiseSheep))
{
return;
}
DisguiseSheep sheep = (DisguiseSheep) base;
int mod = horse.getTicksLived() % 40;
if (mod == 0) sheep.setColor(DyeColor.RED);
else if (mod == 1) sheep.setColor(DyeColor.YELLOW);
else if (mod == 2) sheep.setColor(DyeColor.GREEN);
else if (mod == 3) sheep.setColor(DyeColor.BLUE);
}
},
ROYAL_STEED("Royal Steed Mount Skin", Material.GOLD_BARDING)
{
@Override
public Horse spawn(Location location, DisguiseManager manager)
{
Horse horse = UtilVariant.spawnHorse(location, Variant.HORSE);
horse.setColor(Color.WHITE);
horse.setStyle(Style.WHITE);
return horse;
}
@Override
public void onUpdate(UpdateEvent event, Horse horse)
{
if (event.getType() != UpdateType.TICK)
{
return;
}
UtilParticle.PlayParticleToAll(ParticleType.BLOCK_DUST.getParticle(Material.GOLD_BLOCK, 0), horse.getLocation().add(0, 1, 0), 0.25F, 0.25F, 0.25F, 0, 3, ViewDist.NORMAL);
}
},
ROYAL_GUARD_STEED("Royal Guard Steed Mount Skin", Material.DIAMOND_BARDING)
{
@Override
public Horse spawn(Location location, DisguiseManager manager)
{
Horse horse = UtilVariant.spawnHorse(location, Variant.HORSE);
horse.setColor(Color.WHITE);
horse.setStyle(Style.WHITE);
return horse;
}
@Override
public void onUpdate(UpdateEvent event, Horse horse)
{
if (event.getType() != UpdateType.TICK)
{
return;
}
UtilParticle.PlayParticleToAll(ParticleType.BLOCK_DUST.getParticle(Material.IRON_BLOCK, 0), horse.getLocation().add(0, 1, 0), 0.25F, 0.25F, 0.25F, 0, 3, ViewDist.NORMAL);
}
},
KNIGHT_STEED("Knight Steed Mount Skin", Material.DIAMOND_BARDING)
{
@Override
public Horse spawn(Location location, DisguiseManager manager)
{
Horse horse = UtilVariant.spawnHorse(location, Variant.HORSE);
horse.setColor(Color.GRAY);
horse.setStyle(Style.NONE);
return horse;
}
@Override
public void onUpdate(UpdateEvent event, Horse horse)
{
if (event.getType() != UpdateType.TICK)
{
return;
}
UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.APPLE, 0), horse.getLocation().add(0, 1, 0), 0.25F, 0.25F, 0.25F, 0, 3, ViewDist.NORMAL);
}
},
COW("Cow Mount Skin", Material.MILK_BUCKET)
{
@Override
public Horse spawn(Location location, DisguiseManager manager)
{
Horse horse = UtilVariant.spawnHorse(location, Variant.HORSE);
manager.disguise(new DisguiseCow(horse));
return horse;
}
},
SHEEP("Sheep Mount Skin", Material.WOOL)
{
@Override
public Horse spawn(Location location, DisguiseManager manager)
{
Horse horse = UtilVariant.spawnHorse(location, Variant.HORSE);
manager.disguise(new DisguiseSheep(horse));
return horse;
}
},
TRUSTY_MULE("Trusty Mule Mount Skin", Material.APPLE)
{ {
@Override @Override
public Horse spawn(Location location, DisguiseManager manager) public Horse spawn(Location location, DisguiseManager manager)
{ {
return UtilVariant.spawnHorse(location, Variant.DONKEY); return UtilVariant.spawnHorse(location, Variant.DONKEY);
} }
},
}; ;
private final String _name; private final String _name;
private final Material _material; private final Material _material;

View File

@ -33,7 +33,7 @@ public enum EmblemType
public String getName() public String getName()
{ {
return _name; return _name + " Emblem";
} }
public String getSchematic() public String getSchematic()

View File

@ -109,7 +109,7 @@ public enum ShopMorphType
public String getName() public String getName()
{ {
return _name; return _name + " Shop Skin";
} }
public Material getMaterial() public Material getMaterial()

View File

@ -59,6 +59,22 @@ public class HeroSkinGadget extends GameModifierGadget
return skinData; return skinData;
} }
private static String[] getDescription(HeroSkinGadgetData skinData)
{
boolean hasDescription = !skinData.getDescription().isEmpty();
String[] description = new String[hasDescription ? 3 : 2];
description[0] = C.cGray + "Rarity: " + skinData.getRarity().getColor() + skinData.getRarity().getName();
description[1] = "";
if (hasDescription)
{
description[2] = C.cGray + ChatColor.translateAlternateColorCodes('&', skinData.getDescription());
}
return description;
}
private final HeroSkinGadgetData _gadgetData; private final HeroSkinGadgetData _gadgetData;
public HeroSkinGadget(GadgetManager manager, GameCosmeticCategory category, HeroSkinGadgetData skinData) public HeroSkinGadget(GadgetManager manager, GameCosmeticCategory category, HeroSkinGadgetData skinData)
@ -68,7 +84,7 @@ public class HeroSkinGadget extends GameModifierGadget
public HeroSkinGadget(GadgetManager manager, GameCosmeticCategory category, HeroSkinGadgetData skinData, int cost) public HeroSkinGadget(GadgetManager manager, GameCosmeticCategory category, HeroSkinGadgetData skinData, int cost)
{ {
super(manager, category, skinData.getName(), new String[]{C.cGray + "Rarity: " + skinData.getRarity().getColor() + skinData.getRarity().getName(), "", C.cGray + ChatColor.translateAlternateColorCodes('&', skinData.getDescription())}, cost, Material.GLASS, (byte) 0); super(manager, category, skinData.getName() + " (" + skinData.getHero() + ")", getDescription(skinData), cost, Material.GLASS, (byte) 0);
setDisplayItem(skinData.getSkinData().getSkull()); setDisplayItem(skinData.getSkinData().getSkull());
skinData.setGadget(this); skinData.setGadget(this);

View File

@ -40,12 +40,6 @@ public class ItemEtherealPearl extends ItemGadget
Material.ENDER_PEARL, (byte)0, Material.ENDER_PEARL, (byte)0,
500, new Ammo("Ethereal Pearl", "50 Pearls", Material.ENDER_PEARL, (byte)0, new String[] { C.cWhite + "50 Pearls to get around with!" }, 500, 50)); 500, new Ammo("Ethereal Pearl", "50 Pearls", Material.ENDER_PEARL, (byte)0, new String[] { C.cWhite + "50 Pearls to get around with!" }, 500, 50));
} }
@Override
public void disableCustom(Player player, boolean message)
{
super.disableCustom(player, message);
}
@Override @Override
public void ActivateCustom(Player player) public void ActivateCustom(Player player)

View File

@ -14,6 +14,7 @@ import mineplex.core.common.util.F;
import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.LineFormat;
import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilText;
import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.GadgetManager;
@ -70,6 +71,6 @@ public class ItemFirework extends ItemGadget
UtilFirework.launchFirework(loc, UtilFirework.launchFirework(loc,
FireworkEffect.builder().flicker(Math.random() > 0.5).withColor(color).with(type).trail(Math.random() > 0.5).build(), FireworkEffect.builder().flicker(Math.random() > 0.5).withColor(color).with(type).trail(Math.random() > 0.5).build(),
new Vector(0,0,0), 0 + (int)(Math.random()*3)); new Vector(0,0,0), UtilMath.r(3) + 1);
} }
} }

View File

@ -54,8 +54,8 @@ public class MorphAnath extends MorphGadget
public MorphAnath(GadgetManager manager) public MorphAnath(GadgetManager manager)
{ {
super(manager, "Anath", UtilText.splitLinesToArray(new String[]{ super(manager, "Anath Morph", UtilText.splitLinesToArray(new String[]{
C.cGray + "TODO make a description", C.cGray + "BURN BEAM!!!!",
"", "",
C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Fireball" + C.cWhite + " to", C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Fireball" + C.cWhite + " to",
C.cWhite + "fire out a huge wave of", C.cWhite + "fire out a huge wave of",

View File

@ -65,8 +65,8 @@ public class MorphBardolf extends MorphGadget
public MorphBardolf(GadgetManager manager) public MorphBardolf(GadgetManager manager)
{ {
super(manager, "Bardolf", UtilText.splitLinesToArray(new String[]{ super(manager, "Bardolf Morph", UtilText.splitLinesToArray(new String[]{
C.cGray + "TODO make a description", C.cGray + "Play fetch with 5 puppers of your very own!",
"", "",
C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Bone" + C.cWhite + " to", C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Bone" + C.cWhite + " to",
C.cWhite + "play " + C.cYellow + "Fetch" + C.cWhite + " with your wolves!" C.cWhite + "play " + C.cYellow + "Fetch" + C.cWhite + " with your wolves!"

View File

@ -50,8 +50,8 @@ public class MorphBiff extends MorphGadget
public MorphBiff(GadgetManager manager) public MorphBiff(GadgetManager manager)
{ {
super(manager, "Biff", UtilText.splitLinesToArray(new String[]{ super(manager, "Biff Morph", UtilText.splitLinesToArray(new String[]{
C.cGray + "TODO make description", C.cGray + "REEEEEEEEEEEEEEEE",
"", "",
C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Nether Star" + C.cWhite + " to", C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Nether Star" + C.cWhite + " to",
C.cWhite + "mount your " + C.cYellow + "Horse" + C.cWhite + " and", C.cWhite + "mount your " + C.cYellow + "Horse" + C.cWhite + " and",

View File

@ -67,8 +67,8 @@ public class MorphDana extends MorphGadget
public MorphDana(GadgetManager manager) public MorphDana(GadgetManager manager)
{ {
super(manager, "Dana", UtilText.splitLinesToArray(new String[]{ super(manager, "Dana Morph", UtilText.splitLinesToArray(new String[]{
C.cGray + "TODO make a description", C.cGray + "Get pranked chest opener.",
"", "",
C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Nether Star" + C.cWhite + " to", C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Nether Star" + C.cWhite + " to",
C.cWhite + "deploy your " + C.cYellow + "Rally" + C.cWhite + ".", C.cWhite + "deploy your " + C.cYellow + "Rally" + C.cWhite + ".",

View File

@ -50,7 +50,7 @@ public class MorphDevon extends MorphGadget
public MorphDevon(GadgetManager manager) public MorphDevon(GadgetManager manager)
{ {
super(manager, "Devon", UtilText.splitLinesToArray(new String[]{ super(manager, "Devon Morph", UtilText.splitLinesToArray(new String[]{
C.cGray + "You thought this was overpowered in game?", C.cGray + "You thought this was overpowered in game?",
C.cGray + "Well now you shoot TNT", C.cGray + "Well now you shoot TNT",
C.cGray + "at unsuspecting players in the hub!", C.cGray + "at unsuspecting players in the hub!",
@ -108,7 +108,7 @@ public class MorphDevon extends MorphGadget
return; return;
} }
if (!Recharge.Instance.use(player, "TNT Infusion", 1000, false, true, "Cosmetics")) if (!Recharge.Instance.use(player, "TNT Infusion", 2000, false, true, "Cosmetics"))
{ {
event.setCancelled(true); event.setCancelled(true);
return; return;

View File

@ -46,7 +46,7 @@ public class MorphHattori extends MorphGadget
public MorphHattori(GadgetManager manager) public MorphHattori(GadgetManager manager)
{ {
super(manager, "Hattori", UtilText.splitLinesToArray(new String[]{ super(manager, "Hattori Morph", UtilText.splitLinesToArray(new String[]{
C.cGray + "Ever wanted to dash around", C.cGray + "Ever wanted to dash around",
C.cGray + "the hub like a Ninja?", C.cGray + "the hub like a Ninja?",
C.cGray + "Well now you can!", C.cGray + "Well now you can!",

View File

@ -0,0 +1,131 @@
package mineplex.core.gadget.gadgets.morph.moba;
import java.util.concurrent.TimeUnit;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import com.mojang.authlib.GameProfile;
import mineplex.core.common.skin.SkinData;
import mineplex.core.common.util.C;
import mineplex.core.common.util.LineFormat;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilText;
import mineplex.core.disguise.disguises.DisguisePlayer;
import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.gadgets.morph.managers.UtilMorph;
import mineplex.core.gadget.types.MorphGadget;
import mineplex.core.gadget.util.CostConstants;
import mineplex.core.itemstack.ItemBuilder;
import mineplex.core.recharge.Recharge;
import mineplex.core.utils.UtilGameProfile;
public class MorphIvy extends MorphGadget
{
private static final ItemStack ACTIVE_ITEM = new ItemBuilder(Material.VINE)
.setTitle(C.cGreenB + "Ivy's Flower Display")
.addLore("Click to fire out a beam of water that knocks back", "players that it hits.")
.build();
private static final int ACTIVE_SLOT = 2;
private static final int RADIUS = 5;
private static final long DURATION = TimeUnit.SECONDS.toMillis(8);
public MorphIvy(GadgetManager manager)
{
super(manager, "Ivy Morph", UtilText.splitLinesToArray(new String[]{
C.cGray + "Roses are red, violets are violet.",
"",
C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Vines" + C.cWhite + " to",
C.cWhite + "create a " + C.cYellow + "Flower" + C.cWhite + " display.",
}, LineFormat.LORE), CostConstants.FOUND_IN_MOBA_CHESTS, Material.GLASS, (byte) 0);
setDisplayItem(SkinData.IVY.getSkull());
}
@Override
public void enableCustom(Player player, boolean message)
{
applyArmor(player, message);
GameProfile gameProfile = UtilGameProfile.getGameProfile(player);
gameProfile.getProperties().clear();
gameProfile.getProperties().put("textures", SkinData.IVY.getProperty());
DisguisePlayer disguisePlayer = new DisguisePlayer(player, gameProfile);
disguisePlayer.showInTabList(true, 0);
UtilMorph.disguise(player, disguisePlayer, Manager);
player.getInventory().setItem(ACTIVE_SLOT, ACTIVE_ITEM);
}
@Override
public void disableCustom(Player player, boolean message)
{
removeArmor(player);
UtilMorph.undisguise(player, Manager.getDisguiseManager());
player.getInventory().setItem(ACTIVE_SLOT, null);
}
@EventHandler
public void interact(PlayerInteractEvent event)
{
if (event.getAction() == Action.PHYSICAL)
{
return;
}
Player player = event.getPlayer();
ItemStack itemStack = event.getItem();
if (!isActive(player) || itemStack == null || !itemStack.equals(ACTIVE_ITEM))
{
return;
}
event.setCancelled(true);
if (!Recharge.Instance.use(player, "Floral Display", 16000, true, true, "Cosmetics"))
{
return;
}
Location location = player.getLocation();
for (Block block : UtilBlock.getInRadius(location, RADIUS).keySet())
{
if (block.getType() != Material.AIR || UtilBlock.airFoliage(block.getRelative(BlockFace.DOWN)))
{
continue;
}
Manager.getBlockRestore().add(block, Material.RED_ROSE.getId(), (byte) (UtilMath.r(8) + 1), DURATION + (UtilMath.rRange(-500, 500)));
if (Math.random() > 0.7)
{
block.getWorld().playEffect(block.getLocation().add(0.5, 0.5, 0.5), Effect.STEP_SOUND, Material.RED_ROSE);
}
}
}
@EventHandler
public void blockPhysics(BlockPhysicsEvent event)
{
if (event.getChangedType() == Material.RED_ROSE)
{
event.setCancelled(true);
}
}
}

View File

@ -42,8 +42,8 @@ public class MorphLarissa extends MorphGadget
public MorphLarissa(GadgetManager manager) public MorphLarissa(GadgetManager manager)
{ {
super(manager, "Larissa", UtilText.splitLinesToArray(new String[]{ super(manager, "Larissa Morph", UtilText.splitLinesToArray(new String[]{
C.cGray + "TODO make description", C.cGray + "Become a water mage and splash your enemies away!",
"", "",
C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Wand" + C.cWhite + " to fire", C.cGreen + "Click" + C.cWhite + " your " + C.cYellow + "Wand" + C.cWhite + " to fire",
C.cWhite + "a beam of " + C.cWhite + "Water" + C.cWhite + " that", C.cWhite + "a beam of " + C.cWhite + "Water" + C.cWhite + " that",
@ -96,7 +96,7 @@ public class MorphLarissa extends MorphGadget
event.setCancelled(true); event.setCancelled(true);
if (!Recharge.Instance.use(player, "Aqua Cannon", 4000,true, true, "Cosmetics")) if (!Recharge.Instance.use(player, "Aqua Cannon", 4000, true, true, "Cosmetics"))
{ {
return; return;
} }

View File

@ -43,8 +43,8 @@ public class MorphRowena extends MorphGadget
public MorphRowena(GadgetManager manager) public MorphRowena(GadgetManager manager)
{ {
super(manager, "Rowena", UtilText.splitLinesToArray(new String[]{ super(manager, "Rowena Morph", UtilText.splitLinesToArray(new String[]{
C.cGray + "TODO make description", C.cGray + "Make the hub a little brighter with Rowena's Light Arrows.",
"", "",
C.cGreen + "Shoot" + C.cWhite + " your " + C.cYellow + "Bow" + C.cWhite + " to fire", C.cGreen + "Shoot" + C.cWhite + " your " + C.cYellow + "Bow" + C.cWhite + " to fire",
C.cWhite + "arrows to be imbued with " + C.cYellow + "Light" + C.cWhite + ".", C.cWhite + "arrows to be imbued with " + C.cYellow + "Light" + C.cWhite + ".",
@ -99,7 +99,7 @@ public class MorphRowena extends MorphGadget
event.setCancelled(true); event.setCancelled(true);
if (!Recharge.Instance.use(player, "Light Arrows", 1000, false, true, "Cosmetics")) if (!Recharge.Instance.use(player, "Light Arrows", 500, false, true, "Cosmetics"))
{ {
return; return;
} }

View File

@ -155,7 +155,8 @@ public abstract class Mount<T extends MountData> extends Gadget
UtilAction.velocity(part, direction, 1.2, false, 0, 0.8, 10, true); UtilAction.velocity(part, direction, 1.2, false, 0, 0.8, 10, true);
} }
direction.multiply(-1); direction.setX(-direction.getX());
direction.setZ(-direction.getZ());
for (Entity part : otherParts) for (Entity part : otherParts)
{ {

View File

@ -1,19 +1,15 @@
package mineplex.core.gadget.persistence; package mineplex.core.gadget.persistence;
import java.sql.PreparedStatement; import org.bukkit.entity.Player;
import java.sql.ResultSet;
import java.util.*;
import mineplex.core.common.util.BukkitFuture; import mineplex.core.common.util.BukkitFuture;
import mineplex.core.common.util.F;
import mineplex.core.database.PlayerKeyValueRepository; import mineplex.core.database.PlayerKeyValueRepository;
import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticCategory; import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticCategory;
import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.Gadget;
import mineplex.core.gadget.types.GameModifierGadget;
import mineplex.core.gadget.types.GadgetType; import mineplex.core.gadget.types.GadgetType;
import mineplex.core.gadget.types.GameModifierGadget;
import mineplex.core.gadget.types.OutfitGadget; import mineplex.core.gadget.types.OutfitGadget;
import org.bukkit.entity.Player;
public class UserGadgetPersistence public class UserGadgetPersistence
{ {
@ -24,19 +20,22 @@ public class UserGadgetPersistence
public UserGadgetPersistence(GadgetManager manager) public UserGadgetPersistence(GadgetManager manager)
{ {
_manager = manager; _manager = manager;
_repository = new PlayerKeyValueRepository<>("gadgets", PreparedStatement::setString, ResultSet::getString); _repository = new PlayerKeyValueRepository<>("gadgets", String.class);
} }
public void load(Player player) public void load(Player player)
{ {
_repository.getAll(player.getUniqueId()).thenCompose(BukkitFuture.accept(values -> { _repository.getAll(player.getUniqueId()).thenCompose(BukkitFuture.accept(values ->
{
if (player.isOnline()) if (player.isOnline())
{ {
boolean enabledGadget = false;
for (Gadget gadget : _manager.getAllGadgets()) for (Gadget gadget : _manager.getAllGadgets())
{ {
if (!gadget.ownsGadget(player)) if (!gadget.ownsGadget(player))
{
continue; continue;
}
GadgetType gadgetType = gadget.getGadgetType(); GadgetType gadgetType = gadget.getGadgetType();
switch (gadgetType) switch (gadgetType)
{ {
@ -54,7 +53,6 @@ public class UserGadgetPersistence
if (values.get(key).equals(gadget.getName())) if (values.get(key).equals(gadget.getName()))
{ {
gadget.enable(player, false); gadget.enable(player, false);
enabledGadget = true;
} }
break; break;
case GAME_MODIFIER: case GAME_MODIFIER:
@ -68,48 +66,95 @@ public class UserGadgetPersistence
if (values.get(gadget.getName()).equals("enabled")) if (values.get(gadget.getName()).equals("enabled"))
{ {
gadget.enable(player, false); gadget.enable(player, false);
enabledGadget = true;
} }
} }
else else
{ {
String dataKey = "active" + category.getType().getName().replace(" ", ""); key = "active" + category.getType().getName().replace(" ", "") + category.getCategoryName().replace(" ", "");
if (!values.containsKey(dataKey)) if (!values.containsKey(key))
continue; continue;
if (values.get(dataKey).equals(gadget.getName())) if (values.get(key).equals(gadget.getName()))
{ {
gadget.enable(player, false); gadget.enable(player, false);
enabledGadget = true;
} }
} }
break; break;
default: default:
if (!values.containsKey(gadgetType.getDatabaseKey())) if (!values.containsKey(gadgetType.getDatabaseKey()))
{
continue; continue;
}
if (values.get(gadgetType.getDatabaseKey()).equals(gadget.getName())) if (values.get(gadgetType.getDatabaseKey()).equals(gadget.getName()))
{ {
gadget.enable(player, false); gadget.enable(player, false);
enabledGadget = true;
} }
break; break;
} }
} }
if (enabledGadget)
{
player.sendMessage(F.main("Cosmetics", "You enabled all your previously enabled cosmetics!"));
}
} }
})); }));
} }
public void save(Player player, Map<String, String> values) public void save(Player player, Gadget gadget, boolean enabled)
{ {
_repository.putAll(player.getUniqueId(), values); String value = "disabled", key;
} GadgetType gadgetType = gadget.getGadgetType();
public void save(Player player, String key, String value) switch (gadgetType)
{ {
_repository.put(player.getUniqueId(), key, value); case MUSIC_DISC:
case ITEM:
case MORPH:
case BALLOON:
case MOUNT:
return;
case COSTUME:
OutfitGadget outfitGadget = (OutfitGadget) gadget;
key = "activeCostume" + outfitGadget.getSlot().getDatabaseKey();
if (enabled)
{
value = outfitGadget.getName();
}
break;
case GAME_MODIFIER:
GameModifierGadget gameModifierGadget = (GameModifierGadget) gadget;
GameCosmeticCategory category = gameModifierGadget.getCategory();
if (category.isAllowingMultiple())
{
key = gameModifierGadget.getName();
if (enabled)
{
value = "enabled";
}
}
else
{
key = "active" + category.getType().getName().replace(" ", "") + category.getCategoryName().replace(" ", "");
if (enabled)
{
value = gameModifierGadget.getName();
}
}
break;
default:
key = gadgetType.getDatabaseKey();
if (enabled)
{
value = gadget.getName();
}
}
if (!enabled)
{
_repository.remove(player.getUniqueId(), key);
}
else
{
_repository.put(player.getUniqueId(), key, value);
}
} }
} }

View File

@ -13,9 +13,9 @@ public class GameModifierGadget extends Gadget
private final GameCosmeticCategory _category; private final GameCosmeticCategory _category;
public GameModifierGadget(GadgetManager manager, GameCosmeticCategory category, String name, String[] desc, int cost, Material mat, byte data) public GameModifierGadget(GadgetManager manager, GameCosmeticCategory category, String name, String[] desc, int cost, Material mat, byte data, String... alternativePackageNames)
{ {
super(manager, GadgetType.GAME_MODIFIER, name, desc, cost, mat, data); super(manager, GadgetType.GAME_MODIFIER, name, desc, cost, mat, data, 1, alternativePackageNames);
_category = category; _category = category;
} }
@ -23,14 +23,21 @@ public class GameModifierGadget extends Gadget
@Override @Override
public void enableCustom(Player player, boolean message) public void enableCustom(Player player, boolean message)
{ {
_active.add(player); if (_active.add(player) && message)
if (message)
{ {
UtilPlayer.message(player, F.main("Gadget", "You enabled " + F.name(getName()) + " (" + F.name(_category.getCategoryName()) + ").")); UtilPlayer.message(player, F.main("Gadget", "You enabled " + F.name(getName()) + " (" + F.name(_category.getCategoryName()) + ")."));
} }
} }
@Override
public void disableCustom(Player player, boolean message)
{
if (_active.remove(player) && message)
{
UtilPlayer.message(player, F.main(Manager.getName(), "You disabled " + F.name(getName()) + " (" + F.name(_category.getCategoryName()) + ")."));
}
}
public GameCosmeticCategory getCategory() public GameCosmeticCategory getCategory()
{ {
return _category; return _category;

View File

@ -62,6 +62,7 @@ import mineplex.core.gadget.gadgets.flag.FlagType;
import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.MineStrikeSkin; import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.MineStrikeSkin;
import mineplex.core.gadget.gadgets.gamemodifiers.moba.skins.HeroSkinGadget; import mineplex.core.gadget.gadgets.gamemodifiers.moba.skins.HeroSkinGadget;
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphType; import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphType;
import mineplex.core.gadget.gadgets.gamemodifiers.moba.skins.HeroSkinGadgetData;
import mineplex.core.gadget.gadgets.hat.HatType; import mineplex.core.gadget.gadgets.hat.HatType;
import mineplex.core.gadget.gadgets.item.ItemBatGun; import mineplex.core.gadget.gadgets.item.ItemBatGun;
import mineplex.core.gadget.gadgets.item.ItemBow; import mineplex.core.gadget.gadgets.item.ItemBow;
@ -99,6 +100,7 @@ import mineplex.core.gadget.gadgets.morph.MorphVillager;
import mineplex.core.gadget.gadgets.morph.moba.MorphAnath; import mineplex.core.gadget.gadgets.morph.moba.MorphAnath;
import mineplex.core.gadget.gadgets.morph.moba.MorphBardolf; import mineplex.core.gadget.gadgets.morph.moba.MorphBardolf;
import mineplex.core.gadget.gadgets.morph.moba.MorphBiff; import mineplex.core.gadget.gadgets.morph.moba.MorphBiff;
import mineplex.core.gadget.gadgets.morph.moba.MorphIvy;
import mineplex.core.gadget.gadgets.morph.moba.MorphDana; import mineplex.core.gadget.gadgets.morph.moba.MorphDana;
import mineplex.core.gadget.gadgets.morph.moba.MorphDevon; import mineplex.core.gadget.gadgets.morph.moba.MorphDevon;
import mineplex.core.gadget.gadgets.morph.moba.MorphHattori; import mineplex.core.gadget.gadgets.morph.moba.MorphHattori;
@ -377,31 +379,33 @@ public class RewardManager
// INFUSED CHESTS // INFUSED CHESTS
// for (ShopMorphType shopMorphType : ShopMorphType.values()) for (ShopMorphType shopMorphType : ShopMorphType.values())
// { {
// if (shopMorphType.getRarity() == rarity) if (shopMorphType.getRarity() == rarity)
// { {
// addMOBAShopSkin(Type.MOBA, shopMorphType, rarity, 1); addMOBAShopSkin(Type.MOBA, shopMorphType, rarity, 1);
// } }
// } }
addMOBAShopSkin(Type.MOBA, ShopMorphType.SHEEP, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.SHEEP, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.COW, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.COW, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.MOOSHROOM, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.MOOSHROOM, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.PIG, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.PIG, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.HORSE, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.HORSE, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.SNOW_GOLEM, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.SNOW_GOLEM, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.IRON_GOLEM, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.IRON_GOLEM, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.ZOMBIE, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.ZOMBIE, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.SKELETON, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.SKELETON, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.SPIDER, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.SPIDER, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.SLIME, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.SLIME, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.MAGMA_SLIME, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.MAGMA_SLIME, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.WITHER_SKELETON, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.WITHER_SKELETON, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.PIG_ZOMBIE, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.PIG_ZOMBIE, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.WITCH, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.WITCH, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.BLAZE, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.BLAZE, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.GUARDIAN, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.GUARDIAN, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.ENDERMAN, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.ENDERMAN, rarity, 1);
addAllMOBASkins(rarity);
} }
public void addRare() public void addRare()
@ -702,16 +706,18 @@ public class RewardManager
addGadget(Type.ILLUMINATED, getSingleParticleKitSelector(SingleParticleKitSelector.SingleParticleSelectors.FLAMES_OF_FURY), rarity, 150); addGadget(Type.ILLUMINATED, getSingleParticleKitSelector(SingleParticleKitSelector.SingleParticleSelectors.FLAMES_OF_FURY), rarity, 150);
addGadget(Type.MYTHICAL, getSingleParticleKitSelector(SingleParticleKitSelector.SingleParticleSelectors.FLAMES_OF_FURY), rarity, 150); addGadget(Type.MYTHICAL, getSingleParticleKitSelector(SingleParticleKitSelector.SingleParticleSelectors.FLAMES_OF_FURY), rarity, 150);
// for (ShopMorphType shopMorphType : ShopMorphType.values()) for (ShopMorphType shopMorphType : ShopMorphType.values())
// { {
// if (shopMorphType.getRarity() == rarity) if (shopMorphType.getRarity() == rarity)
// { {
// addMOBAShopSkin(Type.MOBA, shopMorphType, rarity, 1); addMOBAShopSkin(Type.MOBA, shopMorphType, rarity, 1);
// } }
// } }
addMOBAShopSkin(Type.MOBA, ShopMorphType.SANTA, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.SANTA, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.BOB_ROSS, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.BOB_ROSS, rarity, 1);
addMOBAShopSkin(Type.MOBA, ShopMorphType.REVOLUTIONARY, rarity, 1); // addMOBAShopSkin(Type.MOBA, ShopMorphType.REVOLUTIONARY, rarity, 1);
addAllMOBASkins(rarity);
} }
public void addLegendary() public void addLegendary()
@ -1029,6 +1035,9 @@ public class RewardManager
addGadget(Type.MOBA, getGadget(MorphRowena.class), rarity, 1); addGadget(Type.MOBA, getGadget(MorphRowena.class), rarity, 1);
addGadget(Type.MOBA, getGadget(MorphLarissa.class), rarity, 1); addGadget(Type.MOBA, getGadget(MorphLarissa.class), rarity, 1);
addGadget(Type.MOBA, getGadget(MorphBiff.class), rarity, 1); addGadget(Type.MOBA, getGadget(MorphBiff.class), rarity, 1);
addGadget(Type.MOBA, getGadget(MorphIvy.class), rarity, 1);
addAllMOBASkins(rarity);
} }
public UnknownPackageReward addMount(Type type, Mount<?> mount, RewardRarity rarity, int weight) public UnknownPackageReward addMount(Type type, Mount<?> mount, RewardRarity rarity, int weight)
@ -1114,6 +1123,27 @@ public class RewardManager
return addGadget(type, gadget, gadget.getDisplayName() + " (Minestrike Weapon Skin)", rarity, weight, shards); return addGadget(type, gadget, gadget.getDisplayName() + " (Minestrike Weapon Skin)", rarity, weight, shards);
} }
private void addAllMOBASkins(RewardRarity rarity)
{
HeroSkinGadget.getSkins().forEach((name, dataList) ->
{
if (name.equals("Bardolf-Werewolf"))
{
return;
}
dataList.forEach(data ->
{
if (data.getRarity() != rarity)
{
return;
}
addMOBASkin(Type.MOBA, data.getGadget(), rarity, 1);
});
});
}
public UnknownPackageReward addMOBASkin(Type type, HeroSkinGadget gadget, RewardRarity rarity, int weight) public UnknownPackageReward addMOBASkin(Type type, HeroSkinGadget gadget, RewardRarity rarity, int weight)
{ {
return addMOBASkin(type, gadget, rarity, weight, getShards(rarity)); return addMOBASkin(type, gadget, rarity, weight, getShards(rarity));

View File

@ -23,7 +23,7 @@ public enum RewardType
VALENTINES_GIFT( 0, 7, 20, 20), VALENTINES_GIFT( 0, 7, 20, 20),
ST_PATRICKS( 0, 6, 18, 0), ST_PATRICKS( 0, 6, 18, 0),
SPRING( 0, 6, 18, 0), SPRING( 0, 6, 18, 0),
MOBA( 0, 5, 25, 40), MOBA( 0, 5, 20, 30),
SPINNER_FILLER( 0.1, 1, 4, 20), SPINNER_FILLER( 0.1, 1, 4, 20),
SPINNER_REAL( 0.000001, 0.05, 0.4, 5); SPINNER_REAL( 0.000001, 0.05, 0.4, 5);

View File

@ -33,7 +33,8 @@ public class CastleSiegeTesterTrack extends Track
"7b133339-2e02-48ef-9dd4-692415933dc5", // Kreshyy "7b133339-2e02-48ef-9dd4-692415933dc5", // Kreshyy
"4e941b23-6e36-48cb-97c4-24f56ea128c1", // DooDooBug25 "4e941b23-6e36-48cb-97c4-24f56ea128c1", // DooDooBug25
"0a4b6d83-8eb0-46aa-bc0f-9b7f04046d52", // Livicus "0a4b6d83-8eb0-46aa-bc0f-9b7f04046d52", // Livicus
"4f8f5380-ffe1-418d-97a4-0737c6edf352" // Hils "4f8f5380-ffe1-418d-97a4-0737c6edf352", // Hils
"e873e1c7-8e7d-4489-84e1-74b86e1b4ba7" // Dutty
); );
public CastleSiegeTesterTrack() public CastleSiegeTesterTrack()

View File

@ -39,7 +39,7 @@ public enum TreasureType
SPRING(C.cGreen + "Spring Treasure", "Spring Chest", "SpringChest", RewardType.SPRING, Material.CHEST, TreasureStyle.SPRING, RewardPool.Type.SPRING, true, 20000), SPRING(C.cGreen + "Spring Treasure", "Spring Chest", "SpringChest", RewardType.SPRING, Material.CHEST, TreasureStyle.SPRING, RewardPool.Type.SPRING, true, 20000),
MOBA(C.cAqua + "Heroes of GWEN Treasure", "HOG Chest", "HOGChest", RewardType.MOBA, Material.ENDER_CHEST, TreasureStyle.MOBA, RewardPool.Type.MOBA, false, -1), MOBA(C.cAqua + "Heroes of GWEN Treasure", "HOG Chest", "HOGChest", RewardType.MOBA, Material.ENDER_CHEST, TreasureStyle.MOBA, RewardPool.Type.MOBA, true, 12000),
; ;
private final String _name; private final String _name;

View File

@ -504,7 +504,9 @@ public class TreasurePage extends ShopPageBase<TreasureManager, TreasureShop>
} }
else else
{ {
mobaLore.add(C.cAqua + "Earn HOG Chests by leveling up Roles with in Heroes of GWEN."); mobaLore.add(ChatColor.RESET + "Click to craft for " + C.cAqua + TreasureType.MOBA.getPurchasePrice() + " Treasure Shards");
mobaLore.add(" ");
mobaLore.add(C.cAqua + "or Earn HOG Chests by leveling up Roles with in Heroes of GWEN.");
} }
ShopItem shards = new ShopItem(Material.PRISMARINE_SHARD, C.cAqua + C.Bold + treasureShards + " Treasure Shards", shardLore.toArray(new String[0]), 0, false); ShopItem shards = new ShopItem(Material.PRISMARINE_SHARD, C.cAqua + C.Bold + treasureShards + " Treasure Shards", shardLore.toArray(new String[0]), 0, false);

View File

@ -179,9 +179,6 @@ public class ArcadeManager extends MiniPlugin implements IRelation
KIT_UNLOCK_COMMAND, KIT_UNLOCK_COMMAND,
TAUNT_COMMAND, TAUNT_COMMAND,
GAME_COMMAND, GAME_COMMAND,
SET_GAME_COMMAND,
START_GAME_COMMAND,
STOP_GAME_COMMAND,
AUTO_OP, AUTO_OP,
KIT_ACCESS, KIT_ACCESS,
FEATURED_SERVER, FEATURED_SERVER,
@ -627,19 +624,10 @@ public class ArcadeManager extends MiniPlugin implements IRelation
PermissionGroup.CONTENT.setPermission(Perm.KIT_UNLOCK_COMMAND, true, true); PermissionGroup.CONTENT.setPermission(Perm.KIT_UNLOCK_COMMAND, true, true);
PermissionGroup.PLAYER.setPermission(Perm.TAUNT_COMMAND, true, true); PermissionGroup.PLAYER.setPermission(Perm.TAUNT_COMMAND, true, true);
PermissionGroup.ADMIN.setPermission(Perm.GAME_COMMAND, true, true); PermissionGroup.ADMIN.setPermission(Perm.GAME_COMMAND, true, true);
PermissionGroup.ADMIN.setPermission(Perm.SET_GAME_COMMAND, true, true);
PermissionGroup.ADMIN.setPermission(Perm.START_GAME_COMMAND, true, true);
PermissionGroup.ADMIN.setPermission(Perm.STOP_GAME_COMMAND, true, true);
if (UtilServer.isTestServer()) if (UtilServer.isTestServer())
{ {
PermissionGroup.QA.setPermission(Perm.GAME_COMMAND, true, true); PermissionGroup.QA.setPermission(Perm.GAME_COMMAND, true, true);
PermissionGroup.QA.setPermission(Perm.SET_GAME_COMMAND, true, true);
PermissionGroup.QA.setPermission(Perm.START_GAME_COMMAND, true, true);
PermissionGroup.QA.setPermission(Perm.STOP_GAME_COMMAND, true, true);
PermissionGroup.MAPLEAD.setPermission(Perm.GAME_COMMAND, false, true); PermissionGroup.MAPLEAD.setPermission(Perm.GAME_COMMAND, false, true);
PermissionGroup.MAPLEAD.setPermission(Perm.SET_GAME_COMMAND, false, true);
PermissionGroup.MAPLEAD.setPermission(Perm.START_GAME_COMMAND, false, true);
PermissionGroup.MAPLEAD.setPermission(Perm.STOP_GAME_COMMAND, false, true);
} }
if (UtilServer.isTestServer() || UtilServer.isDevServer()) if (UtilServer.isTestServer() || UtilServer.isDevServer())
{ {
@ -925,6 +913,17 @@ public class ArcadeManager extends MiniPlugin implements IRelation
return true; return true;
} }
public boolean canPlayerUseGameCmd(Player player)
{
if (!GetClients().Get(player).hasPermission(Perm.GAME_COMMAND) && !(_gameHostManager.isEventServer() && _gameHostManager.isAdmin(player, false)))
{
player.sendMessage(F.main("Game", "You are not allowed to use game commands."));
return false;
}
return true;
}
@EventHandler @EventHandler
public void StaffIncognito(IncognitoStatusChangeEvent event) public void StaffIncognito(IncognitoStatusChangeEvent event)
{ {

View File

@ -3,6 +3,8 @@ package nautilus.game.arcade.command;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.command.MultiCommandBase; import mineplex.core.command.MultiCommandBase;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
@ -14,21 +16,31 @@ import static nautilus.game.arcade.command.SetCommand.SOURCE_PREFIX;
public class GameCommand extends MultiCommandBase<ArcadeManager> public class GameCommand extends MultiCommandBase<ArcadeManager>
{ {
public enum Perm implements Permission
{
GAME_COMMAND_DUMMY_PERM,
}
public GameCommand(ArcadeManager plugin) public GameCommand(ArcadeManager plugin)
{ {
super(plugin, ArcadeManager.Perm.GAME_COMMAND, "game"); super(plugin, Perm.GAME_COMMAND_DUMMY_PERM, "game");
AddCommand(new StartCommand(Plugin)); AddCommand(new StartCommand(Plugin));
AddCommand(new StopCommand(Plugin)); AddCommand(new StopCommand(Plugin));
AddCommand(new SetCommand(Plugin)); AddCommand(new SetCommand(Plugin));
PermissionGroup.PLAYER.setPermission(Perm.GAME_COMMAND_DUMMY_PERM, true, true);
} }
@Override @Override
protected void Help(Player caller, String[] args) protected void Help(Player caller, String[] args)
{ {
UtilPlayer.message(caller, F.main("Game", "Available Commands")); if (!Plugin.canPlayerUseGameCmd(caller))
UtilPlayer.message(caller, F.help("/game start", "Start the current game", ChatColor.DARK_RED)); {
UtilPlayer.message(caller, F.help("/game stop", "Stop the current game", ChatColor.DARK_RED)); UtilPlayer.message(caller, F.main("Game", "Available Commands"));
caller.sendMessage(F.help(String.format("/game set <gametype> [%s(gamemode)] [%s(mapsource)] [%s(mapname)]", MODE_PREFIX, SOURCE_PREFIX, MAP_PREFIX), "Set the current game or next game", ChatColor.DARK_RED)); UtilPlayer.message(caller, F.help("/game start", "Start the current game", ChatColor.DARK_RED));
UtilPlayer.message(caller, F.help("/game stop", "Stop the current game", ChatColor.DARK_RED));
caller.sendMessage(F.help(String.format("/game set <gametype> [%s(gamemode)] [%s(mapsource)] [%s(mapname)]", MODE_PREFIX, SOURCE_PREFIX, MAP_PREFIX), "Set the current game or next game", ChatColor.DARK_RED));
}
} }
} }

View File

@ -26,12 +26,17 @@ public class SetCommand extends CommandBase<ArcadeManager>
public SetCommand(ArcadeManager plugin) public SetCommand(ArcadeManager plugin)
{ {
super(plugin, ArcadeManager.Perm.SET_GAME_COMMAND, "set"); super(plugin, GameCommand.Perm.GAME_COMMAND_DUMMY_PERM, "set");
} }
@Override @Override
public void Execute(Player caller, String[] args) public void Execute(Player caller, String[] args)
{ {
if (!Plugin.canPlayerUseGameCmd(caller))
{
return;
}
if (Plugin.GetGame() == null) if (Plugin.GetGame() == null)
return; return;

View File

@ -13,12 +13,17 @@ public class StartCommand extends CommandBase<ArcadeManager>
{ {
public StartCommand(ArcadeManager plugin) public StartCommand(ArcadeManager plugin)
{ {
super(plugin, ArcadeManager.Perm.START_GAME_COMMAND, "start"); super(plugin, GameCommand.Perm.GAME_COMMAND_DUMMY_PERM, "start");
} }
@Override @Override
public void Execute(Player caller, String[] args) public void Execute(Player caller, String[] args)
{ {
if (!Plugin.canPlayerUseGameCmd(caller))
{
return;
}
if (Plugin.GetGame() == null || Plugin.GetGame().GetState() == GameState.Loading) if (Plugin.GetGame() == null || Plugin.GetGame().GetState() == GameState.Loading)
{ {
UtilPlayer.message(caller, F.main("Game", "The game is currently loading, it cannot be started!")); UtilPlayer.message(caller, F.main("Game", "The game is currently loading, it cannot be started!"));

View File

@ -14,12 +14,17 @@ public class StopCommand extends CommandBase<ArcadeManager>
{ {
public StopCommand(ArcadeManager plugin) public StopCommand(ArcadeManager plugin)
{ {
super(plugin, ArcadeManager.Perm.STOP_GAME_COMMAND, "stop"); super(plugin, GameCommand.Perm.GAME_COMMAND_DUMMY_PERM, "stop");
} }
@Override @Override
public void Execute(Player caller, String[] args) public void Execute(Player caller, String[] args)
{ {
if (!Plugin.canPlayerUseGameCmd(caller))
{
return;
}
if (Plugin.GetGame() == null) if (Plugin.GetGame() == null)
{ {
UtilPlayer.message(caller, F.main("Game", "There is no game to stop!")); UtilPlayer.message(caller, F.main("Game", "There is no game to stop!"));

View File

@ -5,7 +5,6 @@ import org.bukkit.entity.Player;
import mineplex.core.Managers; import mineplex.core.Managers;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.command.CommandBase; import mineplex.core.command.CommandBase;
import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.ArcadeManager;
public class DebugCommand extends CommandBase<ArcadeManager> public class DebugCommand extends CommandBase<ArcadeManager>

View File

@ -537,9 +537,13 @@ public abstract class Game extends ListenerComponent implements Lifetimed
} }
} }
public <T extends Enum<T> & Permission> void registerDebugCommand(String commandName, T permission, DebugCommandExecutor executor) public <T extends Enum<T> & Permission> void registerDebugCommand(String commandName, T permission, PermissionGroup defaultRank, DebugCommandExecutor executor)
{ {
DebugCommand command = new DebugCommand(commandName, permission, executor); DebugCommand command = new DebugCommand(commandName, permission, executor);
if (defaultRank != null)
{
defaultRank.setPermission(permission, true, true);
}
if (UtilServer.isTestServer()) if (UtilServer.isTestServer())
{ {
PermissionGroup.QA.setPermission(permission, true, true); PermissionGroup.QA.setPermission(permission, true, true);
@ -2418,6 +2422,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed
cleanupModules(); cleanupModules();
cleanupCommands(); cleanupCommands();
Managers.get(AntiHack.class).resetIgnoredChecks(); Managers.get(AntiHack.class).resetIgnoredChecks();
Managers.get(AntiHack.class).setStrict(false);
getLifetime().end(); getLifetime().end();
getStatTrackers().forEach(HandlerList::unregisterAll); getStatTrackers().forEach(HandlerList::unregisterAll);
getQuestTrackers().forEach(HandlerList::unregisterAll); getQuestTrackers().forEach(HandlerList::unregisterAll);

View File

@ -8,6 +8,7 @@ import mineplex.core.common.util.UtilPlayer;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType; import nautilus.game.arcade.GameType;
import nautilus.game.arcade.game.SoloGame; import nautilus.game.arcade.game.SoloGame;
@ -55,6 +56,8 @@ public class BaconBrawl extends SoloGame
.setGiveCompassToSpecs(true) .setGiveCompassToSpecs(true)
.setGiveCompassToAlive(false) .setGiveCompassToAlive(false)
.register(this); .register(this);
StrictAntiHack = true;
} }
@EventHandler @EventHandler

View File

@ -46,6 +46,7 @@ import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.NautHashMap;
@ -274,13 +275,13 @@ public class Bridge extends TeamGame implements OreObsfucation
} }
} }
registerDebugCommand("bridge", Perm.DEBUG_BRIDGE_COMMAND, (caller, args) -> registerDebugCommand("bridge", Perm.DEBUG_BRIDGE_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
caller.sendMessage(F.main("Debug", "Spawning the bridges.")); caller.sendMessage(F.main("Debug", "Spawning the bridges."));
_bridgeTime = 3000; _bridgeTime = 3000;
}); });
registerDebugCommand("bridgeinfo", Perm.DEBUG_BRIDGEINFO_COMMAND, (caller, args) -> registerDebugCommand("bridgeinfo", Perm.DEBUG_BRIDGEINFO_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
if (_animation == null || !(_animation instanceof CustomBridgeAnimation)) if (_animation == null || !(_animation instanceof CustomBridgeAnimation))
{ {

View File

@ -198,7 +198,6 @@ public class Build extends Game
new ChatStatData("BlocksBroken", "Blocks Broken", true) new ChatStatData("BlocksBroken", "Blocks Broken", true)
); );
this.StrictAntiHack = true;
this.Damage = false; this.Damage = false;
this.HungerSet = 20; this.HungerSet = 20;
this.HealthSet = 20; this.HealthSet = 20;

View File

@ -2,11 +2,19 @@ package nautilus.game.arcade.game.games.cards;
import java.util.ArrayList; import java.util.ArrayList;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType; import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.PlayerPrepareTeleportEvent; import nautilus.game.arcade.events.PlayerPrepareTeleportEvent;
@ -16,13 +24,6 @@ import nautilus.game.arcade.game.games.cards.kits.KitPlayer;
import nautilus.game.arcade.game.modules.compass.CompassModule; import nautilus.game.arcade.game.modules.compass.CompassModule;
import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.Kit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack;
public class Cards extends SoloGame public class Cards extends SoloGame
{ {
private CardFactory _cardFactory; private CardFactory _cardFactory;
@ -61,7 +62,6 @@ public class Cards extends SoloGame
"based on the build theme!" "based on the build theme!"
}); });
this.StrictAntiHack = true;
this.Damage = false; this.Damage = false;
this.HungerSet = 20; this.HungerSet = 20;
this.HealthSet = 20; this.HealthSet = 20;

View File

@ -171,7 +171,6 @@ public class CastleAssault extends TeamGame
"Chests refill every 2 minutes with potions, golden applegates, fishing rods, and other useful PvP items!" "Chests refill every 2 minutes with potions, golden applegates, fishing rods, and other useful PvP items!"
}; };
this.StrictAntiHack = true;
this.HungerSet = 20; this.HungerSet = 20;
this.DeathOut = false; this.DeathOut = false;
this.DeathSpectateSecs = 5; this.DeathSpectateSecs = 5;

View File

@ -144,7 +144,6 @@ public class CastleAssaultTDM extends TeamGame
"Chests refill every 2 minutes with potions, golden applegates, fishing rods, and other useful PvP items!" "Chests refill every 2 minutes with potions, golden applegates, fishing rods, and other useful PvP items!"
}; };
this.StrictAntiHack = true;
this.HungerSet = 20; this.HungerSet = 20;
this.DeathOut = false; this.DeathOut = false;
this.DeathSpectateSecs = 5; this.DeathSpectateSecs = 5;

View File

@ -1,11 +1,19 @@
package nautilus.game.arcade.game.games.champions; package nautilus.game.arcade.game.games.champions;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.inventory.InventoryType;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.combat.DeathMessageType; import mineplex.minecraft.game.core.combat.DeathMessageType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType; import nautilus.game.arcade.GameType;
import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.GameTeam;
@ -26,13 +34,6 @@ import nautilus.game.arcade.stats.SeismicSlamStatTracker;
import nautilus.game.arcade.stats.SpecialWinStatTracker; import nautilus.game.arcade.stats.SpecialWinStatTracker;
import nautilus.game.arcade.stats.TheLongestShotStatTracker; import nautilus.game.arcade.stats.TheLongestShotStatTracker;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.inventory.InventoryType;
public class ChampionsCTF extends CaptureTheFlag public class ChampionsCTF extends CaptureTheFlag
{ {
public ChampionsCTF(ArcadeManager manager) public ChampionsCTF(ArcadeManager manager)
@ -65,8 +66,6 @@ public class ChampionsCTF extends CaptureTheFlag
Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6);
this.StrictAntiHack = true;
InventoryOpenChest = true; InventoryOpenChest = true;
EloStart = 1000; EloStart = 1000;

View File

@ -1,11 +1,18 @@
package nautilus.game.arcade.game.games.champions; package nautilus.game.arcade.game.games.champions;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.inventory.InventoryType;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.combat.DeathMessageType; import mineplex.minecraft.game.core.combat.DeathMessageType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType; import nautilus.game.arcade.GameType;
import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.GameTeam;
@ -21,12 +28,6 @@ import nautilus.game.arcade.stats.ElectrocutionStatTracker;
import nautilus.game.arcade.stats.KillReasonStatTracker; import nautilus.game.arcade.stats.KillReasonStatTracker;
import nautilus.game.arcade.stats.SeismicSlamStatTracker; import nautilus.game.arcade.stats.SeismicSlamStatTracker;
import nautilus.game.arcade.stats.TheLongestShotStatTracker; import nautilus.game.arcade.stats.TheLongestShotStatTracker;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.inventory.InventoryType;
public class ChampionsDominate extends Domination public class ChampionsDominate extends Domination
{ {
@ -62,8 +63,6 @@ public class ChampionsDominate extends Domination
Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6);
this.StrictAntiHack = true;
InventoryOpenChest = true; InventoryOpenChest = true;
EloStart = 1000; EloStart = 1000;

View File

@ -1,11 +1,18 @@
package nautilus.game.arcade.game.games.champions; package nautilus.game.arcade.game.games.champions;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.inventory.InventoryType;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.combat.DeathMessageType; import mineplex.minecraft.game.core.combat.DeathMessageType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType; import nautilus.game.arcade.GameType;
import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.GameTeam;
@ -23,12 +30,6 @@ import nautilus.game.arcade.stats.SeismicSlamStatTracker;
import nautilus.game.arcade.stats.TheLongestShotStatTracker; import nautilus.game.arcade.stats.TheLongestShotStatTracker;
import nautilus.game.arcade.stats.WinWithoutLosingTeammateStatTracker; import nautilus.game.arcade.stats.WinWithoutLosingTeammateStatTracker;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.inventory.InventoryType;
public class ChampionsTDM extends TeamDeathmatch public class ChampionsTDM extends TeamDeathmatch
{ {
public ChampionsTDM(ArcadeManager manager) public ChampionsTDM(ArcadeManager manager)
@ -62,8 +63,6 @@ public class ChampionsTDM extends TeamDeathmatch
Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6);
this.StrictAntiHack = true;
InventoryOpenChest = true; InventoryOpenChest = true;
this.DisableKillCommand = false; this.DisableKillCommand = false;

View File

@ -73,8 +73,6 @@ public class SmashDom extends Domination
Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6);
Manager.getClassManager().deregisterSelf(); Manager.getClassManager().deregisterSelf();
StrictAntiHack = true;
InventoryOpenChest = true; InventoryOpenChest = true;
EnableSupply = false; EnableSupply = false;

View File

@ -153,6 +153,8 @@ public class DragonEscape extends SoloGame
.setGiveCompassToSpecs(true) .setGiveCompassToSpecs(true)
.setGiveCompassToAlive(false) .setGiveCompassToAlive(false)
.register(this); .register(this);
StrictAntiHack = true;
} }
@Override @Override

View File

@ -108,7 +108,7 @@ public class EventModule extends MiniPlugin
PermissionGroup.ADMIN.setPermission(Perm.SET_HOST_COMMAND, true, true); PermissionGroup.ADMIN.setPermission(Perm.SET_HOST_COMMAND, true, true);
if (_plugin.getConfig().getString("serverstatus.name").equals("SMTestServer-1")) if (_plugin.getConfig().getString("serverstatus.name").equals("SMTestServer-1"))
{ {
PermissionGroup.QA.setPermission(Perm.SET_HOST_COMMAND, true, true); PermissionGroup.SRMOD.setPermission(Perm.SET_HOST_COMMAND, true, true);
} }
} }

View File

@ -1,38 +1,12 @@
package nautilus.game.arcade.game.games.evolution; package nautilus.game.arcade.game.games.evolution;
import com.google.common.collect.Maps; import java.util.AbstractMap.SimpleEntry;
import mineplex.core.common.Pair; import java.util.ArrayList;
import mineplex.core.common.util.*; import java.util.Arrays;
import mineplex.core.common.util.UtilEvent.ActionType; import java.util.Collections;
import mineplex.core.common.util.UtilParticle.ParticleType; import java.util.Iterator;
import mineplex.core.common.util.UtilParticle.ViewDist; import java.util.List;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.combat.CombatComponent;
import mineplex.minecraft.game.core.combat.CombatManager.AttackReason;
import mineplex.minecraft.game.core.combat.DeathMessageType;
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
import mineplex.minecraft.game.core.condition.Condition.ConditionType;
import mineplex.minecraft.game.core.condition.ConditionActive;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.events.PlayerPrepareTeleportEvent;
import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.SoloGame;
import nautilus.game.arcade.game.games.evolution.events.*;
import nautilus.game.arcade.game.games.evolution.evolve.EvolveManager;
import nautilus.game.arcade.game.games.evolution.kits.KitAbility;
import nautilus.game.arcade.game.games.evolution.kits.KitEvolveSpeed;
import nautilus.game.arcade.game.games.evolution.kits.KitHealth;
import nautilus.game.arcade.game.games.evolution.mobs.*;
import nautilus.game.arcade.game.games.evolution.trackers.*;
import nautilus.game.arcade.game.modules.compass.CompassModule;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.ProgressingKit;
import nautilus.game.arcade.stats.KillFastStatTracker;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -49,8 +23,61 @@ import org.bukkit.event.player.PlayerItemHeldEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.AbstractMap.SimpleEntry; import mineplex.core.common.Pair;
import java.util.*; import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTextMiddle;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.combat.CombatComponent;
import mineplex.minecraft.game.core.combat.CombatManager.AttackReason;
import mineplex.minecraft.game.core.combat.DeathMessageType;
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
import mineplex.minecraft.game.core.condition.Condition.ConditionType;
import mineplex.minecraft.game.core.condition.ConditionActive;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.events.PlayerPrepareTeleportEvent;
import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.SoloGame;
import nautilus.game.arcade.game.games.evolution.events.EvolutionAbilityUseEvent;
import nautilus.game.arcade.game.games.evolution.events.EvolutionAttemptingTickEvent;
import nautilus.game.arcade.game.games.evolution.events.EvolutionBeginEvent;
import nautilus.game.arcade.game.games.evolution.events.EvolutionEndEvent;
import nautilus.game.arcade.game.games.evolution.events.EvolutionPostEvolveEvent;
import nautilus.game.arcade.game.games.evolution.evolve.EvolveManager;
import nautilus.game.arcade.game.games.evolution.kits.KitAbility;
import nautilus.game.arcade.game.games.evolution.kits.KitEvolveSpeed;
import nautilus.game.arcade.game.games.evolution.kits.KitHealth;
import nautilus.game.arcade.game.games.evolution.mobs.KitBlaze;
import nautilus.game.arcade.game.games.evolution.mobs.KitChicken;
import nautilus.game.arcade.game.games.evolution.mobs.KitCreeper;
import nautilus.game.arcade.game.games.evolution.mobs.KitGolem;
import nautilus.game.arcade.game.games.evolution.mobs.KitSlime;
import nautilus.game.arcade.game.games.evolution.mobs.KitSpider;
import nautilus.game.arcade.game.games.evolution.trackers.EvoWinWithoutDyingTracker;
import nautilus.game.arcade.game.games.evolution.trackers.KillsWhileEvolvingTracker;
import nautilus.game.arcade.game.games.evolution.trackers.NoAbilityTracker;
import nautilus.game.arcade.game.games.evolution.trackers.NoDamageWhileEvolvingTracker;
import nautilus.game.arcade.game.games.evolution.trackers.NoMeleeTracker;
import nautilus.game.arcade.game.modules.compass.CompassModule;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.stats.KillFastStatTracker;
public class Evolution extends SoloGame public class Evolution extends SoloGame
{ {
@ -152,6 +179,8 @@ public class Evolution extends SoloGame
DamageDealt, DamageDealt,
DamageTaken DamageTaken
); );
StrictAntiHack = true;
} }
public EvolveManager getEvolve() public EvolveManager getEvolve()

View File

@ -46,8 +46,6 @@ public class ChampionsGladiators extends Gladiators
Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6);
StrictAntiHack = true;
new ChampionsFixes(this); new ChampionsFixes(this);
manager.enableChampionsModules(); manager.enableChampionsModules();

View File

@ -1,64 +1,17 @@
package nautilus.game.arcade.game.games.hideseek; package nautilus.game.arcade.game.games.hideseek;
import mineplex.core.common.util.C; import java.util.ArrayList;
import mineplex.core.common.util.F; import java.util.HashMap;
import mineplex.core.common.util.UtilAlg; import java.util.HashSet;
import mineplex.core.common.util.UtilBlock; import java.util.Iterator;
import mineplex.core.common.util.UtilEnt; import java.util.Map.Entry;
import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.disguise.disguises.DisguiseBase;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.packethandler.IPacketHandler;
import mineplex.core.packethandler.PacketInfo;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.visibility.VisibilityManager;
import mineplex.minecraft.game.core.combat.DeathMessageType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.events.PlayerPrepareTeleportEvent;
import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.GameTeam.PlayerState;
import nautilus.game.arcade.game.TeamGame;
import nautilus.game.arcade.game.games.hideseek.forms.BlockForm;
import nautilus.game.arcade.game.games.hideseek.forms.CreatureForm;
import nautilus.game.arcade.game.games.hideseek.forms.Form;
import nautilus.game.arcade.game.games.hideseek.forms.InfestedData;
import nautilus.game.arcade.game.games.hideseek.kits.KitHider;
import nautilus.game.arcade.game.games.hideseek.kits.KitHiderInfestor;
import nautilus.game.arcade.game.games.hideseek.kits.KitHiderQuick;
import nautilus.game.arcade.game.games.hideseek.kits.KitHiderShocker;
import nautilus.game.arcade.game.games.hideseek.kits.KitHiderSwapper;
import nautilus.game.arcade.game.games.hideseek.kits.KitSeekerLeaper;
import nautilus.game.arcade.game.games.hideseek.kits.KitSeekerRadar;
import nautilus.game.arcade.game.games.hideseek.kits.KitSeekerTNT;
import nautilus.game.arcade.game.games.hideseek.quests.DisguiseQuestTracker;
import nautilus.game.arcade.game.modules.compass.CompassModule;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.NullKit;
import nautilus.game.arcade.stats.BadHiderStatTracker;
import nautilus.game.arcade.stats.HunterKillerStatTracker;
import nautilus.game.arcade.stats.HunterOfTheYearStatTracker;
import nautilus.game.arcade.stats.MeowStatTracker;
import net.minecraft.server.v1_8_R3.EntityCreature; import net.minecraft.server.v1_8_R3.EntityCreature;
import net.minecraft.server.v1_8_R3.NavigationAbstract; import net.minecraft.server.v1_8_R3.NavigationAbstract;
import net.minecraft.server.v1_8_R3.PacketPlayInUseEntity; import net.minecraft.server.v1_8_R3.PacketPlayInUseEntity;
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityDestroy; import net.minecraft.server.v1_8_R3.PacketPlayOutEntityDestroy;
import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving; import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Color; import org.bukkit.Color;
@ -105,11 +58,61 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkMeta; import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.ArrayList; import mineplex.core.common.util.C;
import java.util.HashMap; import mineplex.core.common.util.F;
import java.util.HashSet; import mineplex.core.common.util.UtilAlg;
import java.util.Iterator; import mineplex.core.common.util.UtilBlock;
import java.util.Map.Entry; import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.disguise.disguises.DisguiseBase;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.packethandler.IPacketHandler;
import mineplex.core.packethandler.PacketInfo;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.visibility.VisibilityManager;
import mineplex.minecraft.game.core.combat.DeathMessageType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.events.PlayerPrepareTeleportEvent;
import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.GameTeam.PlayerState;
import nautilus.game.arcade.game.TeamGame;
import nautilus.game.arcade.game.games.hideseek.forms.BlockForm;
import nautilus.game.arcade.game.games.hideseek.forms.CreatureForm;
import nautilus.game.arcade.game.games.hideseek.forms.Form;
import nautilus.game.arcade.game.games.hideseek.forms.InfestedData;
import nautilus.game.arcade.game.games.hideseek.kits.KitHider;
import nautilus.game.arcade.game.games.hideseek.kits.KitHiderInfestor;
import nautilus.game.arcade.game.games.hideseek.kits.KitHiderQuick;
import nautilus.game.arcade.game.games.hideseek.kits.KitHiderShocker;
import nautilus.game.arcade.game.games.hideseek.kits.KitHiderSwapper;
import nautilus.game.arcade.game.games.hideseek.kits.KitSeekerLeaper;
import nautilus.game.arcade.game.games.hideseek.kits.KitSeekerRadar;
import nautilus.game.arcade.game.games.hideseek.kits.KitSeekerTNT;
import nautilus.game.arcade.game.games.hideseek.quests.DisguiseQuestTracker;
import nautilus.game.arcade.game.modules.compass.CompassModule;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.NullKit;
import nautilus.game.arcade.stats.BadHiderStatTracker;
import nautilus.game.arcade.stats.HunterKillerStatTracker;
import nautilus.game.arcade.stats.HunterOfTheYearStatTracker;
import nautilus.game.arcade.stats.MeowStatTracker;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class HideSeek extends TeamGame public class HideSeek extends TeamGame
@ -361,6 +364,8 @@ public class HideSeek extends TeamGame
.setGiveCompassToSpecs(true) .setGiveCompassToSpecs(true)
.setGiveCompassToAlive(false) .setGiveCompassToAlive(false)
.register(this); .register(this);
StrictAntiHack = true;
} }
@EventHandler @EventHandler

View File

@ -41,7 +41,6 @@ public class TinyWinners extends Micro
Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6);
StrictAntiHack = true;
getModule(TeamArmorModule.class) getModule(TeamArmorModule.class)
.dontGiveTeamArmor(); .dontGiveTeamArmor();

View File

@ -124,8 +124,6 @@ public class ChallengeArrowRampage extends Challenge
@Override @Override
public void onStart() public void onStart()
{ {
Host.StrictAntiHack = false;
ItemStack bow = new ItemBuilder(Material.BOW) ItemStack bow = new ItemBuilder(Material.BOW)
.setUnbreakable(true) .setUnbreakable(true)
.addEnchantment(Enchantment.ARROW_INFINITE, 1) .addEnchantment(Enchantment.ARROW_INFINITE, 1)
@ -141,7 +139,6 @@ public class ChallengeArrowRampage extends Challenge
@Override @Override
public void onEnd() public void onEnd()
{ {
Host.StrictAntiHack = true;
remove(EntityType.FALLING_BLOCK); remove(EntityType.FALLING_BLOCK);
} }

View File

@ -119,8 +119,6 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker
@Override @Override
public void onStart() public void onStart()
{ {
Host.StrictAntiHack = false;
addEffect(PotionEffectType.JUMP, JUMP_EFFECT_MULTIPLIER); addEffect(PotionEffectType.JUMP, JUMP_EFFECT_MULTIPLIER);
for (Player player : getPlayersAlive()) for (Player player : getPlayersAlive())
@ -132,8 +130,6 @@ public class ChallengeBouncingBlock extends Challenge implements LogicTracker
@Override @Override
public void onEnd() public void onEnd()
{ {
Host.StrictAntiHack = true;
_stepTracker.clear(); _stepTracker.clear();
for (Block woolBlock : _blocks) for (Block woolBlock : _blocks)

View File

@ -27,6 +27,7 @@ import com.mineplex.anticheat.checks.move.Speed;
import mineplex.core.Managers; import mineplex.core.Managers;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.antihack.AntiHack; import mineplex.core.antihack.AntiHack;
import mineplex.core.common.Pair; import mineplex.core.common.Pair;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
@ -91,16 +92,17 @@ public class Moba extends TeamGame
} }
private static final String[] ITEM_IMAGES = private static final String[] ITEM_IMAGES =
{ {
"Anath_the_Burnt.png", "Ivy.png",
"Bardolf.png", "Anath_the_Burnt.png",
"Biff.png", "Bardolf.png",
"Dana.png", "Biff.png",
"Devon.png", "Dana.png",
"Hattori.png", "Devon.png",
"Larissa.png", "Hattori.png",
"Rowena.png" "Larissa.png",
}; "Rowena.png"
};
private final HeroKit[] _kits; private final HeroKit[] _kits;
@ -173,7 +175,7 @@ public class Moba extends TeamGame
.setGiveCompassToAlive(false) .setGiveCompassToAlive(false)
.register(this); .register(this);
registerDebugCommand("kit", Perm.DEBUG_KIT_COMMAND, (caller, args) -> registerDebugCommand("kit", Perm.DEBUG_KIT_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();

View File

@ -0,0 +1,73 @@
package nautilus.game.arcade.game.games.moba.buff.buffs;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import mineplex.core.common.events.EntityVelocityChangeEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.common.util.UtilTextMiddle;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.game.games.moba.Moba;
import nautilus.game.arcade.game.games.moba.buff.Buff;
import nautilus.game.arcade.game.games.moba.kit.HeroSkillUseEvent;
public class BuffCrippled extends Buff<Player>
{
public BuffCrippled(Moba host, Player entity, long duration)
{
super(host, entity, duration);
}
@Override
public void onApply()
{
_entity.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, (int) (_duration / 50D), 1));
UtilTextMiddle.display("", C.cRed + "Crippled", 10, 20, 10, (Player) _entity);
}
@Override
public void onExpire()
{
}
@EventHandler
public void update(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTEST)
{
return;
}
UtilParticle.PlayParticleToAll(ParticleType.PORTAL, _entity.getLocation().add(0, 1, 0), 0.5F, 0.2F, 0.5F, 0.1F, 5, ViewDist.LONG);
}
@EventHandler
public void velocityApply(EntityVelocityChangeEvent event)
{
if (event.getEntity().equals(_entity))
{
event.setCancelled(true);
}
}
@EventHandler
public void useMovementSkill(HeroSkillUseEvent event)
{
Player player = event.getPlayer();
if (player.equals(_entity) && event.getSkill().isSneakActivate())
{
player.sendMessage(F.main("Game", "You cannot use movement abilities while " + F.name("Crippled") + "."));
event.setCancelled(true);
}
}
}

View File

@ -1,7 +1,13 @@
package nautilus.game.arcade.game.games.moba.buff.buffs; package nautilus.game.arcade.game.games.moba.buff.buffs;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import mineplex.core.common.events.EntityVelocityChangeEvent; import mineplex.core.common.events.EntityVelocityChangeEvent;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ParticleType;
@ -9,12 +15,10 @@ import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTextMiddle;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.game.games.moba.Moba; import nautilus.game.arcade.game.games.moba.Moba;
import nautilus.game.arcade.game.games.moba.buff.Buff; import nautilus.game.arcade.game.games.moba.buff.Buff;
import org.bukkit.Location; import nautilus.game.arcade.game.games.moba.kit.HeroSkillUseEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerMoveEvent;
public class BuffRooting extends Buff<Player> public class BuffRooting extends Buff<Player>
{ {
@ -28,6 +32,7 @@ public class BuffRooting extends Buff<Player>
public void onApply() public void onApply()
{ {
UtilAction.zeroVelocity(_entity); UtilAction.zeroVelocity(_entity);
_entity.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, Integer.MAX_VALUE, 3));
UtilTextMiddle.display("", C.cRed + "Rooted", 10, 20, 10, (Player) _entity); UtilTextMiddle.display("", C.cRed + "Rooted", 10, 20, 10, (Player) _entity);
} }
@ -45,7 +50,7 @@ public class BuffRooting extends Buff<Player>
return; return;
} }
UtilParticle.PlayParticleToAll(ParticleType.HAPPY_VILLAGER, _entity.getLocation().add(0, 0.5, 0), 0.5F, 0.2F, 0.5F, 0.1F, 5, ViewDist.LONG); UtilParticle.PlayParticleToAll(ParticleType.HAPPY_VILLAGER, _entity.getLocation().add(0, 1, 0), 0.5F, 0.2F, 0.5F, 0.1F, 3, ViewDist.LONG);
} }
@EventHandler @EventHandler
@ -58,21 +63,14 @@ public class BuffRooting extends Buff<Player>
} }
@EventHandler @EventHandler
public void move(PlayerMoveEvent event) public void useMovementSkill(HeroSkillUseEvent event)
{ {
if (!event.getPlayer().equals(_entity)) Player player = event.getPlayer();
if (player.equals(_entity) && event.getSkill().isSneakActivate())
{ {
return; player.sendMessage(F.main("Game", "You cannot use movement abilities while " + F.name("Rooted") + "."));
event.setCancelled(true);
} }
Location from = event.getFrom();
Location to = event.getTo();
if (from.getX() == to.getX() && from.getZ() == to.getZ())
{
return;
}
event.setTo(from);
} }
} }

View File

@ -9,6 +9,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
@ -44,7 +45,7 @@ public class GoldManager implements Listener
_playerGold = new HashMap<>(); _playerGold = new HashMap<>();
host.registerDebugCommand("gold", Perm.DEBUG_GOLD_COMMAND, (caller, args) -> host.registerDebugCommand("gold", Perm.DEBUG_GOLD_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
if (args.length < 1) if (args.length < 1)
{ {

View File

@ -188,12 +188,12 @@ public class HeroSkill extends Perk
if (itemStack.isSimilar(_item)) if (itemStack.isSimilar(_item))
{ {
if (_dropItemActivate && !Recharge.Instance.use(player, "Ultimate", _cooldown, false, false)) if (_dropItemActivate && !Recharge.Instance.use(player, "Ultimate", _cooldown - 250, false, false))
{ {
return false; return false;
} }
return true; return !callEvent(player);
} }
return false; return false;
@ -209,13 +209,20 @@ public class HeroSkill extends Perk
Player player = event.getPlayer(); Player player = event.getPlayer();
ItemStack itemStack = player.getInventory().getItem(_slot); ItemStack itemStack = player.getInventory().getItem(_slot);
if (!hasPerk(player) || UtilPlayer.isSpectator(player) || itemStack == null) if (!hasPerk(player) || UtilPlayer.isSpectator(player) || itemStack == null || !itemStack.isSimilar(_item))
{ {
return false; return false;
} }
return itemStack.isSimilar(_item); return !callEvent(player);
}
private boolean callEvent(Player player)
{
HeroSkillUseEvent event = new HeroSkillUseEvent(player, this);
UtilServer.CallEvent(event);
return event.isCancelled();
} }
@EventHandler @EventHandler
@ -411,4 +418,9 @@ public class HeroSkill extends Perk
{ {
return _lastSkill.containsKey(player.getUniqueId()); return _lastSkill.containsKey(player.getUniqueId());
} }
public boolean isSneakActivate()
{
return _sneakActivate;
}
} }

View File

@ -0,0 +1,51 @@
package nautilus.game.arcade.game.games.moba.kit;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
public class HeroSkillUseEvent extends PlayerEvent implements Cancellable
{
private static final HandlerList _handlers = new HandlerList();
private HeroSkill _skill;
private boolean _cancelled;
public HeroSkillUseEvent(Player who, HeroSkill skill)
{
super(who);
_skill = skill;
}
public HeroSkill getSkill()
{
return _skill;
}
@Override
public void setCancelled(boolean cancelled)
{
_cancelled = cancelled;
}
@Override
public boolean isCancelled()
{
return _cancelled;
}
public static HandlerList getHandlerList()
{
return _handlers;
}
@Override
public HandlerList getHandlers()
{
return getHandlerList();
}
}

View File

@ -1,10 +1,10 @@
package nautilus.game.arcade.game.games.moba.kit.bardolf; package nautilus.game.arcade.game.games.moba.kit.bardolf;
import mineplex.core.common.skin.SkinData; import java.util.HashSet;
import mineplex.core.common.util.UtilEvent.ActionType; import java.util.List;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import java.util.Set;
import nautilus.game.arcade.game.games.moba.kit.HeroSkill; import java.util.concurrent.TimeUnit;
import nautilus.game.arcade.game.games.moba.kit.bardolf.HeroBardolf.WolfData;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
@ -14,9 +14,14 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.HashSet; import mineplex.core.common.skin.SkinData;
import java.util.Set; import mineplex.core.common.util.UtilEvent.ActionType;
import java.util.concurrent.TimeUnit; import mineplex.core.gadget.gadgets.gamemodifiers.moba.skins.HeroSkinGadget;
import mineplex.core.gadget.gadgets.gamemodifiers.moba.skins.HeroSkinGadgetData;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.game.games.moba.kit.HeroSkill;
import nautilus.game.arcade.game.games.moba.kit.bardolf.HeroBardolf.WolfData;
public class SkillFullMoon extends HeroSkill public class SkillFullMoon extends HeroSkill
{ {
@ -28,6 +33,7 @@ public class SkillFullMoon extends HeroSkill
"As wolves die his power decreases.", "As wolves die his power decreases.",
"All Wolves in the pack die after the ultimate ends" "All Wolves in the pack die after the ultimate ends"
}; };
private static final String WEREWOLF_KEY = "Bardolf-Werewolf";
private static final ItemStack SKILL_ITEM = new ItemStack(Material.NETHER_STAR); private static final ItemStack SKILL_ITEM = new ItemStack(Material.NETHER_STAR);
private static final long DURATION = TimeUnit.SECONDS.toMillis(10); private static final long DURATION = TimeUnit.SECONDS.toMillis(10);
private static final int HEALTH = 20; private static final int HEALTH = 20;
@ -64,9 +70,33 @@ public class SkillFullMoon extends HeroSkill
_active.add(player); _active.add(player);
Manager.GetGame().WorldTimeSet = 18000; Manager.GetGame().WorldTimeSet = 18000;
player.getWorld().strikeLightningEffect(player.getLocation()); player.getWorld().strikeLightningEffect(player.getLocation());
kit.disguise(player, SkinData.BARDOLF_WEREWOLF);
data.setUltimate(true); data.setUltimate(true);
List<HeroSkinGadgetData> werewolfDataList = HeroSkinGadget.getSkins().get(WEREWOLF_KEY);
boolean disguised = false;
for (HeroSkinGadgetData normalData : HeroSkinGadget.getSkins().get(kit.GetName()))
{
if (normalData.getGadget().isActive(player))
{
for (HeroSkinGadgetData werewolfData : werewolfDataList)
{
if (normalData.getName().equals(werewolfData.getName()))
{
kit.disguise(player, werewolfData.getSkinData());
disguised = true;
break;
}
}
break;
}
}
if (!disguised)
{
kit.disguise(player, SkinData.BARDOLF_WEREWOLF);
}
float speedIncrease = (float) data.getWolves().size() * SPEED_FACTOR; float speedIncrease = (float) data.getWolves().size() * SPEED_FACTOR;
data.setLastSpeedIncrease(speedIncrease); data.setLastSpeedIncrease(speedIncrease);

View File

@ -20,6 +20,6 @@ public class HeroIvy extends HeroKit
public HeroIvy(ArcadeManager manager) public HeroIvy(ArcadeManager manager)
{ {
super(manager, "Ivy", PERKS, MobaRole.WARRIOR, SkinData.SANTA, 20); super(manager, "Ivy", PERKS, MobaRole.WARRIOR, SkinData.IVY, 20);
} }
} }

View File

@ -29,7 +29,7 @@ import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.game.games.moba.Moba; import nautilus.game.arcade.game.games.moba.Moba;
import nautilus.game.arcade.game.games.moba.buff.BuffManager; import nautilus.game.arcade.game.games.moba.buff.BuffManager;
import nautilus.game.arcade.game.games.moba.buff.buffs.BuffRooting; import nautilus.game.arcade.game.games.moba.buff.buffs.BuffCrippled;
import nautilus.game.arcade.game.games.moba.kit.HeroSkill; import nautilus.game.arcade.game.games.moba.kit.HeroSkill;
public class SkillBoxingRing extends HeroSkill public class SkillBoxingRing extends HeroSkill
@ -68,10 +68,6 @@ public class SkillBoxingRing extends HeroSkill
Player player = event.getPlayer(); Player player = event.getPlayer();
Location location = player.getLocation().subtract(0, 1, 0); Location location = player.getLocation().subtract(0, 1, 0);
byte colour = (byte) (Manager.GetGame().GetTeam(player).GetColor() == ChatColor.RED ? 14 : 11); byte colour = (byte) (Manager.GetGame().GetTeam(player).GetColor() == ChatColor.RED ? 14 : 11);
// // Double Plants work by the bottom block having a data value, in this case 4, the top part of the plant has
// // a data value of 8, this tells the client to render the top of the part of the block located below itself.
// byte bottomFlower = 4;
// byte topFlower = 8;
location.getWorld().playEffect(location, Effect.STEP_SOUND, Material.STAINED_CLAY, colour); location.getWorld().playEffect(location, Effect.STEP_SOUND, Material.STAINED_CLAY, colour);
@ -80,10 +76,6 @@ public class SkillBoxingRing extends HeroSkill
Manager.GetBlockRestore().add(block, Material.STAINED_CLAY.getId(), colour, DURATION + UtilMath.rRange(-500, 500)); Manager.GetBlockRestore().add(block, Material.STAINED_CLAY.getId(), colour, DURATION + UtilMath.rRange(-500, 500));
} }
// for (Block block : getSquareBlocks(location, BLOCK_RADIUS, true))
// {
// Manager.GetBlockRestore().add(block, Material.GRASS.getId(), (byte) 0, DURATION + 500 + UtilMath.r(250));
// }
location.add(0, 1, 0); location.add(0, 1, 0);
@ -91,9 +83,6 @@ public class SkillBoxingRing extends HeroSkill
{ {
Manager.GetBlockRestore().add(block, Material.RED_ROSE.getId(), (byte) 0, DURATION + UtilMath.r(500)); Manager.GetBlockRestore().add(block, Material.RED_ROSE.getId(), (byte) 0, DURATION + UtilMath.r(500));
block.getWorld().playEffect(block.getLocation().add(0.5, 0.5, 0.5), Effect.STEP_SOUND, Material.RED_ROSE); block.getWorld().playEffect(block.getLocation().add(0.5, 0.5, 0.5), Effect.STEP_SOUND, Material.RED_ROSE);
// long duration = DURATION + UtilMath.r(250);
// Manager.GetBlockRestore().add(block, Material.DOUBLE_PLANT.getId(), bottomFlower, duration);
// Manager.GetBlockRestore().add(block, Material.DOUBLE_PLANT.getId(), topFlower, duration);
} }
_data.add(new BoxingRingData(player)); _data.add(new BoxingRingData(player));
@ -134,7 +123,7 @@ public class SkillBoxingRing extends HeroSkill
} }
else if (Recharge.Instance.use(nearby, GetName() + " Rooting", 2000, false, false)) else if (Recharge.Instance.use(nearby, GetName() + " Rooting", 2000, false, false))
{ {
buffManager.apply(new BuffRooting(host, nearby, DEBUFF_DURATION)); buffManager.apply(new BuffCrippled(host, nearby, DEBUFF_DURATION));
} }
else if (Recharge.Instance.use(nearby, GetName() + " Damage", 900, false, false)) else if (Recharge.Instance.use(nearby, GetName() + " Damage", 900, false, false))
{ {

View File

@ -57,7 +57,8 @@ public class SkillFloralLeap extends HeroSkill
new DustSpellColor(Color.MAGENTA) new DustSpellColor(Color.MAGENTA)
}; };
private static final long DURATION = TimeUnit.SECONDS.toMillis(5); private static final long DURATION = TimeUnit.SECONDS.toMillis(5);
private static final int BLOCK_RADIUS = 5; private static final int DAMAGE_RADIUS = 5;
private static final int BLOCK_RADIUS = 3;
private static final PotionEffect DEBUFF = new PotionEffect(PotionEffectType.SLOW, 50, 2, false, false); private static final PotionEffect DEBUFF = new PotionEffect(PotionEffectType.SLOW, 50, 2, false, false);
private static final int DAMAGE = 2; private static final int DAMAGE = 2;
@ -143,7 +144,7 @@ public class SkillFloralLeap extends HeroSkill
data.LastDamage = System.currentTimeMillis(); data.LastDamage = System.currentTimeMillis();
for (LivingEntity nearby : UtilEnt.getInRadius(data.Center, BLOCK_RADIUS).keySet()) for (LivingEntity nearby : UtilEnt.getInRadius(data.Center, DAMAGE_RADIUS).keySet())
{ {
if (isTeamDamage(player, nearby)) if (isTeamDamage(player, nearby))
{ {
@ -201,7 +202,7 @@ public class SkillFloralLeap extends HeroSkill
@EventHandler @EventHandler
public void blockPhysics(BlockPhysicsEvent event) public void blockPhysics(BlockPhysicsEvent event)
{ {
if (event.getChangedType() == Material.LONG_GRASS || event.getChangedType() == Material.RED_ROSE) if (event.getChangedType() == Material.RED_ROSE)
{ {
event.setCancelled(true); event.setCancelled(true);
} }

View File

@ -35,7 +35,7 @@ public class SkillHook extends HeroSkill
"and pulling them towards you." "and pulling them towards you."
}; };
private static final ItemStack SKILL_ITEM = new ItemStack(Material.VINE); private static final ItemStack SKILL_ITEM = new ItemStack(Material.VINE);
private static final int RANGE = 7; private static final int RANGE = 9;
private static final int DAMAGE_PLAYER = 4; private static final int DAMAGE_PLAYER = 4;
private static final int DAMAGE_MINION = 6; private static final int DAMAGE_MINION = 6;
private static final PotionEffect DEBUFF = new PotionEffect(PotionEffectType.SLOW, 60, 2, false, false); private static final PotionEffect DEBUFF = new PotionEffect(PotionEffectType.SLOW, 60, 2, false, false);
@ -82,7 +82,7 @@ public class SkillHook extends HeroSkill
return true; return true;
} }
for (int i = 0; i < 4; i++) for (int i = 0; i < 10; i++)
{ {
if (leash.update()) if (leash.update())
{ {
@ -91,7 +91,7 @@ public class SkillHook extends HeroSkill
if (data.Target == null) if (data.Target == null)
{ {
for (LivingEntity nearby : UtilEnt.getInRadius(leash.getLastLocation().subtract(0, 1.2, 0), 1).keySet()) for (LivingEntity nearby : UtilEnt.getInRadius(leash.getLastLocation().subtract(0, 1.2, 0), 2).keySet())
{ {
if (isTeamDamage(player, nearby)) if (isTeamDamage(player, nearby))
{ {
@ -101,6 +101,7 @@ public class SkillHook extends HeroSkill
if (nearby instanceof Player) if (nearby instanceof Player)
{ {
data.Target = (Player) nearby; data.Target = (Player) nearby;
nearby.addPotionEffect(DEBUFF);
UtilAction.zeroVelocity(nearby); UtilAction.zeroVelocity(nearby);
Manager.GetDamage().NewDamageEvent(nearby, player, null, DamageCause.CUSTOM, DAMAGE_PLAYER, false, false, false, player.getName(), GetName()); Manager.GetDamage().NewDamageEvent(nearby, player, null, DamageCause.CUSTOM, DAMAGE_PLAYER, false, false, false, player.getName(), GetName());
} }
@ -122,7 +123,6 @@ public class SkillHook extends HeroSkill
if (UtilMath.offset2dSquared(target.getLocation(), player.getLocation()) < 4) if (UtilMath.offset2dSquared(target.getLocation(), player.getLocation()) < 4)
{ {
UtilAction.zeroVelocity(target); UtilAction.zeroVelocity(target);
target.addPotionEffect(DEBUFF);
return true; return true;
} }

View File

@ -15,6 +15,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
@ -51,7 +52,7 @@ public class MinionManager implements Listener
_waves = new HashSet<>(); _waves = new HashSet<>();
_enabled = true; _enabled = true;
host.registerDebugCommand("removeminions", Perm.DEBUG_REMOVEMINIONS_COMMAND, (caller, args) -> host.registerDebugCommand("removeminions", Perm.DEBUG_REMOVEMINIONS_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
for (MinionWave wave : _waves) for (MinionWave wave : _waves)
{ {

View File

@ -122,26 +122,26 @@ public class PrepareSelection implements Listener, IPacketHandler
AtomicInteger i = new AtomicInteger(); AtomicInteger i = new AtomicInteger();
GameTeam team = _host.GetTeam(player); GameTeam team = _host.GetTeam(player);
Map<String, Location> spawns = _host.getLocationStartsWith("KIT " + team.GetName().toUpperCase()); Map<String, Location> spawns = _host.getLocationStartsWith("KIT " + team.GetName().toUpperCase());
Location goBack = spawns.remove("KIT " + team.GetName().toUpperCase() + " GO_BACK");
Location average = UtilAlg.getAverageLocation(team.GetSpawns()); Location average = UtilAlg.getAverageLocation(team.GetSpawns());
MobaPlayer mobaPlayer = _host.getMobaData(player); MobaPlayer mobaPlayer = _host.getMobaData(player);
List<HeroKit> heroKits = _host.getKits(mobaPlayer.getRole()); List<HeroKit> heroKits = _host.getKits(mobaPlayer.getRole());
Location goBack = spawns.remove("KIT " + team.GetName().toUpperCase() + " GO_BACK");
ClientArmorStand goBackStand = ClientArmorStand.spawn(goBack.clone().add(0, 1, 0), player);
goBackStand.setCustomNameVisible(true);
goBackStand.setCustomName(C.cGreenB + "Go Back");
goBackStand.setArms(true);
goBackStand.setHelmet(new ItemStack(Material.SKULL_ITEM));
goBackStand.setChestplate(new ItemBuilder(Material.LEATHER_CHESTPLATE).setColor(Color.MAROON).build());
goBackStand.setLeggings(new ItemBuilder(Material.LEATHER_LEGGINGS).setColor(Color.MAROON).build());
goBackStand.setBoots(new ItemBuilder(Material.LEATHER_BOOTS).setColor(Color.MAROON).build());
_goBackStands.put(player, goBackStand);
UtilServer.runSyncLater(() -> UtilServer.runSyncLater(() ->
{ {
ClientArmorStand goBackStand = ClientArmorStand.spawn(goBack.clone().add(0, 1, 0), player);
goBackStand.setCustomNameVisible(true);
goBackStand.setCustomName(C.cGreenB + "Go Back");
goBackStand.setArms(true);
goBackStand.setHelmet(new ItemStack(Material.SKULL_ITEM));
goBackStand.setChestplate(new ItemBuilder(Material.LEATHER_CHESTPLATE).setColor(Color.MAROON).build());
goBackStand.setLeggings(new ItemBuilder(Material.LEATHER_LEGGINGS).setColor(Color.MAROON).build());
goBackStand.setBoots(new ItemBuilder(Material.LEATHER_BOOTS).setColor(Color.MAROON).build());
_goBackStands.put(player, goBackStand);
for (Location location : spawns.values()) for (Location location : spawns.values())
{ {
location.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(location, average))); location.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(location, average)));

View File

@ -18,6 +18,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.event.player.PlayerInteractAtEntityEvent;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
@ -68,20 +69,20 @@ public class MobaProgression implements Listener
_roleViewers = new HashMap<>(); _roleViewers = new HashMap<>();
_roleShop = new MobaRoleShop(host.getArcadeManager()); _roleShop = new MobaRoleShop(host.getArcadeManager());
host.registerDebugCommand("fakeexp", Perm.DEBUG_FAKEEXP_COMMAND, (caller, args) -> host.registerDebugCommand("fakeexp", Perm.DEBUG_FAKEEXP_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
int exp = Integer.parseInt(args[0]); int exp = Integer.parseInt(args[0]);
_host.GetGems(caller).put("Fake Exp", new GemData(exp, false)); _host.GetGems(caller).put("Fake Exp", new GemData(exp, false));
caller.sendMessage(F.main("Debug", "Gave you " + F.elem(exp) + " fake exp.")); caller.sendMessage(F.main("Debug", "Gave you " + F.elem(exp) + " fake exp."));
}); });
host.registerDebugCommand("setmobalevel", Perm.DEBUG_SETMOBALEVEL_COMMAND, (caller, args) -> host.registerDebugCommand("setmobalevel", Perm.DEBUG_SETMOBALEVEL_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
MobaRole role = MobaRole.valueOf(args[0].toUpperCase()); MobaRole role = MobaRole.valueOf(args[0].toUpperCase());
int exp = getExpFor(Integer.parseInt(args[1]) - 1); int exp = getExpFor(Integer.parseInt(args[1]) - 1);
_host.getArcadeManager().GetStatsManager().setStat(caller, _host.GetName() + "." + role.getName() + ".ExpEarned", exp); _host.getArcadeManager().GetStatsManager().setStat(caller, _host.GetName() + "." + role.getName() + ".ExpEarned", exp);
caller.sendMessage(F.main("Debug", "Set your " + role.getChatColor() + role.getName() + C.cGray + " level to " + F.elem(getLevel(exp) + 1) + ".")); caller.sendMessage(F.main("Debug", "Set your " + role.getChatColor() + role.getName() + C.cGray + " level to " + F.elem(getLevel(exp) + 1) + "."));
}); });
host.registerDebugCommand("unlockhero", Perm.DEBUG_UNLOCK_HERO_COMMAND, (caller, args) -> host.registerDebugCommand("unlockhero", Perm.DEBUG_UNLOCK_HERO_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
Donor donor = _host.getArcadeManager().GetDonation().Get(caller); Donor donor = _host.getArcadeManager().GetDonation().Get(caller);
String input = args[0]; String input = args[0];
@ -96,7 +97,7 @@ public class MobaProgression implements Listener
} }
} }
}); });
host.registerDebugCommand("lockhero", Perm.DEBUG_LOCK_HERO_COMMAND, (caller, args) -> host.registerDebugCommand("lockhero", Perm.DEBUG_LOCK_HERO_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
Donor donor = _host.getArcadeManager().GetDonation().Get(caller); Donor donor = _host.getArcadeManager().GetDonation().Get(caller);
String input = args[0]; String input = args[0];

View File

@ -9,7 +9,6 @@ import org.bukkit.FireworkEffect;
import org.bukkit.FireworkEffect.Type; import org.bukkit.FireworkEffect.Type;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.ArmorStand; import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -20,6 +19,7 @@ import org.bukkit.util.Vector;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import mineplex.core.common.skin.SkinData;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
@ -90,11 +90,13 @@ public class MobaUnlockAnimation implements Listener
_player.teleport(_toTeleport); _player.teleport(_toTeleport);
_npcEntity = _npc.getWorld().spawn(_npc, ArmorStand.class); _npcEntity = _npc.getWorld().spawn(_npc, ArmorStand.class);
GameProfile profile = new GameProfile(UUID.randomUUID(), _kit.GetName()); GameProfile profile = new GameProfile(UUID.randomUUID(), SkinData.getUnusedSkullName());
profile.getProperties().clear(); profile.getProperties().clear();
profile.getProperties().put("textures", _kit.getSkinData().getProperty()); profile.getProperties().put("textures", _kit.getSkinData().getProperty());
DisguisePlayer disguise = new DisguisePlayer(_npcEntity, profile); DisguisePlayer disguise = new DisguisePlayer(_npcEntity, profile);
disguise.getHologram()
.setText(_kit.getRole().getChatColor() + C.Bold + _kit.GetName());
_host.getArcadeManager().GetDisguise().disguise(disguise); _host.getArcadeManager().GetDisguise().disguise(disguise);
} }

View File

@ -290,7 +290,7 @@ public class TowerManager implements Listener
{ {
Location crystalLocation = tower.getCrystal().getLocation(); Location crystalLocation = tower.getCrystal().getLocation();
if (tower.isDead() || tower.getOwner().equals(team) || UtilMath.offsetSquared(crystalLocation, location) > PROJECTILE_RANGE_SQUARED || shouldCancelDamage(tower, shooter)) if (tower.isDead() || tower.getOwner().equals(team) || UtilMath.offsetSquared(crystalLocation, location) > PROJECTILE_RANGE_SQUARED || !canDamage(tower, team) || shouldCancelDamage(tower, shooter))
{ {
continue; continue;
} }
@ -349,7 +349,6 @@ public class TowerManager implements Listener
{ {
// Is other team // Is other team
// Is first tower // Is first tower
// Is same lane
// Is dead // Is dead
if (!team.equals(other.getOwner()) && other.isFirstTower() && other.isDead()) if (!team.equals(other.getOwner()) && other.isFirstTower() && other.isDead())
{ {

View File

@ -25,6 +25,7 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
@ -194,7 +195,7 @@ public class MobaTraining extends Moba
(int) (Math.ceil(subject.getHealth() / 2D))) (int) (Math.ceil(subject.getHealth() / 2D)))
.register(this); .register(this);
registerDebugCommand("skip", Perm.DEBUG_SKIP_COMMAND, (caller, args) -> registerDebugCommand("skip", Perm.DEBUG_SKIP_COMMAND, PermissionGroup.PLAYER, (caller, args) ->
{ {
if (!safeFunction.apply(caller)) if (!safeFunction.apply(caller))
{ {

View File

@ -46,8 +46,7 @@ public class EweHeroes extends SheepGame
Manager.getCosmeticManager().setHideParticles(true); Manager.getCosmeticManager().setHideParticles(true);
Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6);
StrictAntiHack = true;
getModule(TeamArmorModule.class) getModule(TeamArmorModule.class)
.dontGiveTeamArmor(); .dontGiveTeamArmor();

View File

@ -236,8 +236,7 @@ public abstract class Skyfall extends Game
InventoryOpenChest = true; InventoryOpenChest = true;
DamageFall = false; DamageFall = false;
SoupEnabled = true; SoupEnabled = true;
StrictAntiHack = false;
new CompassModule() new CompassModule()
.setGiveCompassToAlive(true) .setGiveCompassToAlive(true)
.register(this); .register(this);

View File

@ -173,8 +173,6 @@ public abstract class Skywars extends Game
.setGiveCompassToAlive(true) .setGiveCompassToAlive(true)
.register(this); .register(this);
StrictAntiHack = true;
GameTimeout = 1500000L; GameTimeout = 1500000L;
DeathDropItems = true; DeathDropItems = true;

View File

@ -33,6 +33,7 @@ import org.bukkit.scheduler.BukkitRunnable;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.blockrestore.BlockRestore; import mineplex.core.blockrestore.BlockRestore;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
@ -147,7 +148,7 @@ public abstract class SuperSmash extends Game
new PerkSpreadsheetModule(this, "SMASH_KITS"); new PerkSpreadsheetModule(this, "SMASH_KITS");
registerDebugCommand("cooldown", Perm.DEBUG_COOLDOWN_COMMAND, (caller, args) -> registerDebugCommand("cooldown", Perm.DEBUG_COOLDOWN_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
for (Player other : UtilServer.getPlayers()) for (Player other : UtilServer.getPlayers())
{ {
@ -156,16 +157,16 @@ public abstract class SuperSmash extends Game
Announce(C.cWhiteB + caller.getName() + C.cAquaB + " reset cooldowns!"); Announce(C.cWhiteB + caller.getName() + C.cAquaB + " reset cooldowns!");
}); });
registerDebugCommand("nextsmash", Perm.DEBUG_NEXTSMASH_COMMAND, (caller, args) -> registerDebugCommand("nextsmash", Perm.DEBUG_NEXTSMASH_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
_nextPowerup = System.currentTimeMillis() + 1000; _nextPowerup = System.currentTimeMillis() + 1000;
Announce(C.cWhiteB + caller.getName() + C.cAquaB + " spawned a smash crystal!"); Announce(C.cWhiteB + caller.getName() + C.cAquaB + " spawned a smash crystal!");
}); });
registerDebugCommand("smash", Perm.DEBUG_SMASH_COMMAND, (caller, args) -> registerDebugCommand("smash", Perm.DEBUG_SMASH_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
giveSmashItem(caller); giveSmashItem(caller);
}); });
registerDebugCommand("kit", Perm.DEBUG_KIT_COMMAND, (caller, args) -> registerDebugCommand("kit", Perm.DEBUG_KIT_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
String kit = ""; String kit = "";
@ -187,7 +188,7 @@ public abstract class SuperSmash extends Game
caller.sendMessage(F.main("Kit", "Sorry that is not a kit!")); caller.sendMessage(F.main("Kit", "Sorry that is not a kit!"));
}); });
registerDebugCommand("lives", Perm.DEBUG_LIVES_COMMAND, (caller, args) -> registerDebugCommand("lives", Perm.DEBUG_LIVES_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
Announce(C.cWhiteB + caller.getName() + C.cAquaB + " reset their lives!"); Announce(C.cWhiteB + caller.getName() + C.cAquaB + " reset their lives!");

View File

@ -56,6 +56,7 @@ import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.MapUtil;
@ -213,7 +214,7 @@ public class SpeedBuilders extends SoloGame
.setGiveCompassToAlive(false) .setGiveCompassToAlive(false)
.register(this); .register(this);
registerDebugCommand("setnext", Perm.DEBUG_SETNEXT_COMMAND, (caller, args) -> registerDebugCommand("setnext", Perm.DEBUG_SETNEXT_COMMAND, PermissionGroup.BUILDER, (caller, args) ->
{ {
if (!UtilServer.isTestServer()) if (!UtilServer.isTestServer())
{ {

View File

@ -29,6 +29,7 @@ import org.bukkit.inventory.meta.LeatherArmorMeta;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAction;
@ -194,12 +195,12 @@ public class TypeWars extends TeamGame
.giveHotbarItem() .giveHotbarItem()
.register(this); .register(this);
registerDebugCommand("money", Perm.DEBUG_MONEY_COMMAND, (caller, args) -> registerDebugCommand("money", Perm.DEBUG_MONEY_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
_moneyMap.put(caller, 1000); _moneyMap.put(caller, 1000);
UtilPlayer.message(caller, F.main("Money", "You got some Money")); UtilPlayer.message(caller, F.main("Money", "You got some Money"));
}); });
registerDebugCommand("boss", Perm.DEBUG_BOSS_COMMAND, (caller, args) -> registerDebugCommand("boss", Perm.DEBUG_BOSS_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
if (!IsPlaying(caller)) if (!IsPlaying(caller))
return; return;

View File

@ -71,6 +71,7 @@ import org.bukkit.scoreboard.Objective;
import org.spigotmc.ActivationRange; import org.spigotmc.ActivationRange;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.boosters.event.BoosterItemGiveEvent; import mineplex.core.boosters.event.BoosterItemGiveEvent;
import mineplex.core.common.Pair; import mineplex.core.common.Pair;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
@ -311,7 +312,7 @@ public abstract class UHC extends Game
registerQuestTrackers(new TameQuestTracker(this)); registerQuestTrackers(new TameQuestTracker(this));
registerDebugCommand("startpvp", Perm.DEBUG_STARTPVP_COMMAND, (caller, args) -> registerDebugCommand("startpvp", Perm.DEBUG_STARTPVP_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
if (!IsLive()) if (!IsLive())
{ {
@ -331,7 +332,7 @@ public abstract class UHC extends Game
UtilPlayer.message(caller, F.main("Debug", "Started PvP")); UtilPlayer.message(caller, F.main("Debug", "Started PvP"));
}); });
registerDebugCommand("worldinfo", Perm.DEBUG_WORLDINFO_COMMAND, (caller, args) -> registerDebugCommand("worldinfo", Perm.DEBUG_WORLDINFO_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
if (args == null || args.length == 0) if (args == null || args.length == 0)
{ {
@ -439,16 +440,16 @@ public abstract class UHC extends Game
} }
return; return;
}); });
registerDebugCommand("uhcgames", Perm.DEBUG_UHCGAMES_COMMAND, (caller, args) -> registerDebugCommand("uhcgames", Perm.DEBUG_UHCGAMES_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
UtilPlayer.message(caller, F.main("Debug", "As of now, there have been " + _gamesRun + " games played")); UtilPlayer.message(caller, F.main("Debug", "As of now, there have been " + _gamesRun + " games played"));
}); });
registerDebugCommand("uhcgc", Perm.DEBUG_GC_COMMAND, (caller, args) -> registerDebugCommand("uhcgc", Perm.DEBUG_GC_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
System.gc(); System.gc();
UtilPlayer.message(caller, F.main("Debug", "Cleaned up!")); UtilPlayer.message(caller, F.main("Debug", "Cleaned up!"));
}); });
registerDebugCommand("setcombatlogtimeout", Perm.DEBUG_SETCOMBATLOGTIMEOUT_COMMAND, (caller, args) -> registerDebugCommand("setcombatlogtimeout", Perm.DEBUG_SETCOMBATLOGTIMEOUT_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
CombatLogModule module = getModule(CombatLogModule.class); CombatLogModule module = getModule(CombatLogModule.class);
if (module == null) if (module == null)
@ -474,14 +475,14 @@ public abstract class UHC extends Game
UtilPlayer.message(caller, F.main("Debug", "That's not a number!")); UtilPlayer.message(caller, F.main("Debug", "That's not a number!"));
} }
}); });
registerDebugCommand("dm", Perm.DEBUG_DEATHMATCH_COMMAND, (caller, args) -> registerDebugCommand("dm", Perm.DEBUG_DEATHMATCH_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
SAFE_TIME = 0; SAFE_TIME = 0;
MINING_TIME = 1000; MINING_TIME = 1000;
startPreDeathmatch(); startPreDeathmatch();
UtilPlayer.message(caller, F.main("Debug", "Starting deathmatch")); UtilPlayer.message(caller, F.main("Debug", "Starting deathmatch"));
}); });
registerDebugCommand("uhcentities", Perm.DEBUG_ENTITIES_COMMAND, (caller, args) -> registerDebugCommand("uhcentities", Perm.DEBUG_ENTITIES_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
for (Entity entity : caller.getNearbyEntities(5.0, 5.0, 5.0)) for (Entity entity : caller.getNearbyEntities(5.0, 5.0, 5.0))
{ {
@ -497,7 +498,7 @@ public abstract class UHC extends Game
caller.sendMessage(debug); caller.sendMessage(debug);
} }
}); });
registerDebugCommand("uhcchunk", Perm.DEBUG_CHUNK_COMMAND, (caller, args) -> registerDebugCommand("uhcchunk", Perm.DEBUG_CHUNK_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
net.minecraft.server.v1_8_R3.Chunk chunk = ((CraftChunk) caller.getLocation().getChunk()).getHandle(); net.minecraft.server.v1_8_R3.Chunk chunk = ((CraftChunk) caller.getLocation().getChunk()).getHandle();
try try
@ -539,7 +540,7 @@ public abstract class UHC extends Game
t.printStackTrace(); t.printStackTrace();
} }
}); });
registerDebugCommand("uhcallchunks", Perm.DEBUG_CALLCHUNKS_COMMAND, (caller, args) -> registerDebugCommand("uhcallchunks", Perm.DEBUG_CALLCHUNKS_COMMAND, PermissionGroup.DEV, (caller, args) ->
{ {
for (net.minecraft.server.v1_8_R3.Chunk chunk : ((CraftWorld) caller.getWorld()).getHandle().chunkProviderServer.chunks.values()) for (net.minecraft.server.v1_8_R3.Chunk chunk : ((CraftWorld) caller.getWorld()).getHandle().chunkProviderServer.chunks.values())
{ {

View File

@ -14,6 +14,7 @@ import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.NautHashMap;
@ -39,7 +40,7 @@ public class RejoinModule extends Module
@Override @Override
protected void setup() protected void setup()
{ {
getGame().registerDebugCommand("rejoin", Perm.DEBUG_REJOIN_COMMAND, (caller, args) -> getGame().registerDebugCommand("rejoin", Perm.DEBUG_REJOIN_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
{ {
if (args.length < 1) if (args.length < 1)
{ {

View File

@ -7,6 +7,8 @@ import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Horse; import org.bukkit.entity.Horse;
import org.bukkit.entity.Horse.Color;
import org.bukkit.entity.Horse.Style;
import org.bukkit.entity.Horse.Variant; import org.bukkit.entity.Horse.Variant;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -24,13 +26,20 @@ import org.bukkit.inventory.ItemStack;
import mineplex.core.MiniClientPlugin; import mineplex.core.MiniClientPlugin;
import mineplex.core.ReflectivelyCreateMiniPlugin; import mineplex.core.ReflectivelyCreateMiniPlugin;
import mineplex.core.account.permissions.Permission;
import mineplex.core.account.permissions.PermissionGroup;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilServer;
import mineplex.core.cosmetic.CosmeticManager;
import mineplex.core.disguise.DisguiseManager; import mineplex.core.disguise.DisguiseManager;
import mineplex.core.disguise.disguises.DisguiseBase;
import mineplex.core.disguise.disguises.DisguiseInsentient;
import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.event.GadgetEnableEvent;
import mineplex.core.gadget.gadgets.gamemodifiers.gemhunters.GemHuntersMountGadget; import mineplex.core.gadget.gadgets.gamemodifiers.gemhunters.GemHuntersMountGadget;
import mineplex.core.gadget.types.GadgetType;
import mineplex.core.game.GameDisplay; import mineplex.core.game.GameDisplay;
import mineplex.core.recharge.Recharge; import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
@ -38,16 +47,26 @@ import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.utils.UtilVariant; import mineplex.core.utils.UtilVariant;
import mineplex.gemhunters.loot.LootItem; import mineplex.gemhunters.loot.LootItem;
import mineplex.gemhunters.loot.LootModule; import mineplex.gemhunters.loot.LootModule;
import mineplex.gemhunters.mount.command.MountSkinsCommand;
import mineplex.gemhunters.mount.command.SpawnMountCommand;
@ReflectivelyCreateMiniPlugin @ReflectivelyCreateMiniPlugin
public class MountModule extends MiniClientPlugin<MountData> public class MountModule extends MiniClientPlugin<MountData>
{ {
public enum Perm implements Permission
{
MOUNT_SKINS_COMMAND,
SPAWN_MOUNT_COMMAND
}
private static final ItemStack SADDLE = new ItemStack(Material.SADDLE); private static final ItemStack SADDLE = new ItemStack(Material.SADDLE);
private static final int HEALTH = 40; private static final int HEALTH = 40;
private static final int MAX_DIST = 25 * 25; private static final int MAX_DIST = 25 * 25;
private static final int MIN_DIST = 4 * 4; private static final int MIN_DIST = 4 * 4;
private final CosmeticManager _cosmetic;
private final DisguiseManager _disguise; private final DisguiseManager _disguise;
private final LootModule _loot; private final LootModule _loot;
private final GadgetManager _gadget; private final GadgetManager _gadget;
@ -56,9 +75,25 @@ public class MountModule extends MiniClientPlugin<MountData>
{ {
super("Mount"); super("Mount");
_cosmetic = require(CosmeticManager.class);
_disguise = require(DisguiseManager.class); _disguise = require(DisguiseManager.class);
_loot = require(LootModule.class); _loot = require(LootModule.class);
_gadget = require(GadgetManager.class); _gadget = require(GadgetManager.class);
generatePermissions();
}
private void generatePermissions()
{
PermissionGroup.PLAYER.setPermission(Perm.MOUNT_SKINS_COMMAND, true, true);
PermissionGroup.ADMIN.setPermission(Perm.SPAWN_MOUNT_COMMAND, true, true);
}
@Override
public void addCommands()
{
addCommand(new MountSkinsCommand(this));
addCommand(new SpawnMountCommand(this));
} }
@Override @Override
@ -89,7 +124,7 @@ public class MountModule extends MiniClientPlugin<MountData>
String metadata = lootItem.getMetadata(); String metadata = lootItem.getMetadata();
String[] split = metadata.split(" "); String[] split = metadata.split(" ");
if (split.length < 2) if (split.length < 2 || !split[0].equals("MOUNT"))
{ {
return; return;
} }
@ -119,6 +154,11 @@ public class MountModule extends MiniClientPlugin<MountData>
return; return;
} }
spawnHorse(player, data, lootItem.getItemStack(), cooldown);
}
public void spawnHorse(Player player, MountData data, ItemStack itemStack, long cooldown)
{
Location location = player.getLocation().add(0, 1, 0); Location location = player.getLocation().add(0, 1, 0);
GemHuntersMountGadget gadget = (GemHuntersMountGadget) _gadget.getGameCosmeticManager().getActiveCosmetic( GemHuntersMountGadget gadget = (GemHuntersMountGadget) _gadget.getGameCosmeticManager().getActiveCosmetic(
player, player,
@ -131,6 +171,8 @@ public class MountModule extends MiniClientPlugin<MountData>
if (gadget == null) if (gadget == null)
{ {
horse = UtilVariant.spawnHorse(location, Variant.HORSE); horse = UtilVariant.spawnHorse(location, Variant.HORSE);
horse.setColor(Color.BROWN);
horse.setStyle(Style.NONE);
} }
else else
{ {
@ -142,16 +184,24 @@ public class MountModule extends MiniClientPlugin<MountData>
horse.setCustomNameVisible(true); horse.setCustomNameVisible(true);
horse.setJumpStrength(1); horse.setJumpStrength(1);
horse.getInventory().setSaddle(SADDLE); horse.getInventory().setSaddle(SADDLE);
horse.getInventory().setArmor(new ItemStack(lootItem.getItemStack().getType())); horse.getInventory().setArmor(new ItemStack(itemStack.getType()));
horse.setDomestication(1); horse.setDomestication(1);
horse.setMaxDomestication(1); horse.setMaxDomestication(1);
horse.setOwner(player); horse.setOwner(player);
horse.setTamed(true); horse.setTamed(true);
horse.setCarryingChest(true);
horse.setMaxHealth(HEALTH); horse.setMaxHealth(HEALTH);
horse.setHealth(HEALTH); horse.setHealth(HEALTH);
UtilEnt.vegetate(player); UtilEnt.vegetate(horse);
data.onSpawn(horse, cooldown, lootItem.getItemStack()); DisguiseBase disguise = _disguise.getActiveDisguise(horse);
if (disguise != null && disguise instanceof DisguiseInsentient)
{
((DisguiseInsentient) disguise).setName(name);
}
data.onSpawn(horse, cooldown, itemStack);
player.sendMessage(F.main(_moduleName, "You spawned your " + F.name(getName()) + ".")); player.sendMessage(F.main(_moduleName, "You spawned your " + F.name(getName()) + "."));
} }
@ -323,7 +373,31 @@ public class MountModule extends MiniClientPlugin<MountData>
"Mount Skins" "Mount Skins"
); );
if (gadget == null)
{
continue;
}
gadget.getType().onUpdate(event, data.getEntity()); gadget.getType().onUpdate(event, data.getEntity());
} }
} }
@EventHandler
public void gadgetEquip(GadgetEnableEvent event)
{
if (event.getGadget().getGadgetType() != GadgetType.GAME_MODIFIER)
{
event.setCancelled(true);
}
}
public CosmeticManager getCosmeticManager()
{
return _cosmetic;
}
public GadgetManager getGadgetManager()
{
return _gadget;
}
} }

View File

@ -0,0 +1,25 @@
package mineplex.gemhunters.mount.command;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticCategory;
import mineplex.core.game.GameDisplay;
import mineplex.gemhunters.mount.MountModule;
import mineplex.gemhunters.mount.MountModule.Perm;
public class MountSkinsCommand extends CommandBase<MountModule>
{
public MountSkinsCommand(MountModule plugin)
{
super(plugin, Perm.MOUNT_SKINS_COMMAND, "mount", "mounts", "skins", "mountskins");
}
@Override
public void Execute(Player caller, String[] args)
{
GameCosmeticCategory category = Plugin.getGadgetManager().getGameCosmeticManager().getCategoryFrom(GameDisplay.GemHunters, "Mount Skins");
Plugin.getCosmeticManager().getShop().openPageForPlayer(caller, category.getGadgetPage(Plugin.getCosmeticManager(), caller));
}
}

View File

@ -0,0 +1,32 @@
package mineplex.gemhunters.mount.command;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import mineplex.core.command.CommandBase;
import mineplex.gemhunters.mount.MountData;
import mineplex.gemhunters.mount.MountModule;
import mineplex.gemhunters.mount.MountModule.Perm;
public class SpawnMountCommand extends CommandBase<MountModule>
{
public SpawnMountCommand(MountModule plugin)
{
super(plugin, Perm.SPAWN_MOUNT_COMMAND, "spawnmount");
}
@Override
public void Execute(Player caller, String[] args)
{
MountData data = Plugin.Get(caller);
if (data.getEntity() != null)
{
data.getEntity().remove();
}
Plugin.spawnHorse(caller, data, new ItemStack(Material.DIAMOND_BARDING), 0);
}
}

View File

@ -5,6 +5,8 @@ import javax.swing.border.EmptyBorder;
import java.awt.*; import java.awt.*;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import mineplex.googlesheets.util.SkinFetcher; import mineplex.googlesheets.util.SkinFetcher;
@ -13,6 +15,8 @@ import mineplex.googlesheets.util.UUIDFetcher;
public class SkinHelperUI extends JFrame public class SkinHelperUI extends JFrame
{ {
private static final Map<String, String> UUID_CACHE = new HashMap<>();
private static final Font FONT = new Font("Verdana", Font.PLAIN, 12); private static final Font FONT = new Font("Verdana", Font.PLAIN, 12);
private static final long FETCH_WAIT_TIME = 30; private static final long FETCH_WAIT_TIME = 30;
private static final long FETCH_WAIT_MILLISECONDS = TimeUnit.SECONDS.toMillis(FETCH_WAIT_TIME); private static final long FETCH_WAIT_MILLISECONDS = TimeUnit.SECONDS.toMillis(FETCH_WAIT_TIME);
@ -97,7 +101,16 @@ public class SkinHelperUI extends JFrame
try try
{ {
String[] skinData = SkinFetcher.getSkinData(UUIDFetcher.getPlayerUUIDNoDashes(txtMinecraftName.getText())); String input = txtMinecraftName.getText();
String uuid = UUID_CACHE.get(input);
if (uuid == null)
{
uuid = UUIDFetcher.getPlayerUUIDNoDashes(input);
UUID_CACHE.put(input, uuid);
}
String[] skinData = SkinFetcher.getSkinData(uuid);
txtSkinValue.setText(skinData[0]); txtSkinValue.setText(skinData[0]);
txtSkinSignature.setText(skinData[1]); txtSkinSignature.setText(skinData[1]);

View File

@ -14,28 +14,11 @@ public class SkinFetcher
JSONObject object = UtilJSON.getFromURL(SKIN_URL.replaceFirst("UUID", uuid)); JSONObject object = UtilJSON.getFromURL(SKIN_URL.replaceFirst("UUID", uuid));
JSONArray properties = (JSONArray) object.get("properties"); JSONArray properties = (JSONArray) object.get("properties");
System.out.println(properties.size());
for (Object o : properties)
{
System.out.println(o.toString());
}
JSONObject innerObject = (JSONObject) properties.get(0); JSONObject innerObject = (JSONObject) properties.get(0);
System.out.println(innerObject.size());
for (Object o : innerObject.entrySet())
{
System.out.println(o.toString());
}
skinData[1] = (String) innerObject.get("signature"); skinData[1] = (String) innerObject.get("signature");
skinData[0] = (String) innerObject.get("value"); skinData[0] = (String) innerObject.get("value");
System.out.println(skinData[0]);
System.out.println(skinData[1]);
return skinData; return skinData;
} }