SSM Update
- Also includes February PPC cosmetic
This commit is contained in:
parent
3f3cc02f11
commit
742d849b44
@ -69,7 +69,6 @@ public class SkinData
|
||||
public final static SkinData BUGS_BUNNY = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTA0NzE5MDU2MTgsInByb2ZpbGVJZCI6IjlmY2FlZDhiMTRiNTRmN2ZhNjRjYjYwNDBlNzA1MjcyIiwicHJvZmlsZU5hbWUiOiJMQ2FzdHIxIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84MmUyMjRkMGJkZGJmNjRiODIzMmUxNWRhNGRkN2NjN2NiYTYzM2NiODkyMTFhYjVjNDRhODU0ZjM1NDhlZWRiIn19fQ==", "QtM7YGNpqGcTnlUCTtQsQIEc8VGvL8cxWzAvN4LjYZrY4Fv15ysEVSPWPmRL/FJTRyUFCrJFO/0miVbuIEsGyUnsgHJAr9qkeyMvfD3+pZtKU1FkS58VNQkL/YaPDms7XPy1BPNo+ynQnVevdVCNDOvs2244Px3UljtuReBteKqL8QGMR1K6FFCQuKKvcvYsljdM8RV91r2yuT9UDxnzMRghWyRZuthvCeGL85g1LQxCnzJ0NUqIqCDrTWa8jeuncLnmRooKZYGsQjCAVOSFRk4KytD+fv8xgNK2igqBgVcqAINl5IjrFt7yyPQ2FVBbshETsjewusa6eZSBoy1Lc17G7bcndoOdwGMuztLjHPMzxFpIV1RkbZrngjcSTE/IQdSw79NlzMOEMKjE/34M7xcSnSZA1xwW33g+/xq+pNbqcXu85e7VXkziWDhHREp9ITT4YjrVdrss1yfYBzZgRmmLyaMpVmVsecKB9adpuZkhGzKIVrQHDGYEHoqoRnsRGJREdZQPxaSWp4+DSxpV/0oJXJWDz+XFztbcVbBcjBOD9kpFP0s+R5t1WA2B+jsf9J3LdsUUDbBiWikBwbAXKhHxTWWKv6OZLZovhgvGnW2lXQsHglEKuD7jE/mnFj4SF2qRO2N37AUjaG8AGQtTVhxW5JneIiBA0dbKIk06yoY=");
|
||||
public final static SkinData SLENDERMAN = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTA0NzUyNzk4NTUsInByb2ZpbGVJZCI6IjlmY2FlZDhiMTRiNTRmN2ZhNjRjYjYwNDBlNzA1MjcyIiwicHJvZmlsZU5hbWUiOiJMQ2FzdHIxIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9hMWNkOTI5OTFmYTRjZGQ2MGVlZDNhZTM3ZmI5NWRmZjFkNWNkOGNiZmYwYWFjMzE4MmQ0ODU2NDU5NTIzYyJ9fX0=", "OVqWFLCekyZcdGli6kPBKNh8/VYPhKZGNqlAvSOKc3RLgh4pIkI6TDPr/Y+VQdhz1wZozARFYSeoDJJJ4nZTi7gi3rVPG2rL1ZnKo7so5hdT8caEzSTRmgwPKzo03ZhEEsW9AEJo9mpiUxGSJdBlgEb9UgodpYFW1IjRC09CcBUqzRWP8QGZTSFSN5x9emQ97DyiFmt0NFWubHCKHdb7CExhchPRtbahL3hOEzPY8/Y+Irl9OZjx7jONE7O/sYItCuZoXc3FaTgCV0riiXHCgH2eA54s5TQVWumtp3FU7VIcKR6pm/o61+GusvqhNgdFNk9XSHWMUyp+HNU0R8sConZQN/eaVx9laJmUUb4zNZ7hX/hLYV+r9LFU1NXOeIZWJPShD+bYfZgEorIpD+EAL4BHht/f5e6a1IZUDBWb001PFibby2t9WWjoDVKz4McbxZ2Xui7EHKFG1K3biPibhWx6fvnOeJ2xW6UDIZcD+TCXwlW/knkFt44Xpyv3oNHk3UNkyrQgghd6qkc3gZHxP8PQCNvKIyK1I+pHR6JMZvSStp7ZQRDpvsvIUyOJvq+7Bs7lFYs8hcJHMzEB+8PYlH2k7P7iLuA6ZYFUmvOW1LLq0+hvxK96ZdNEsJdmMkVVTZBRw7vsZ4GPbkdp2cMOFH2lHcQj80xKqVbd43IqFDA=");
|
||||
public final static SkinData BOB_ROSS = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTU2NjEyOTc2NTcsInByb2ZpbGVJZCI6IjdkYTJhYjNhOTNjYTQ4ZWU4MzA0OGFmYzNiODBlNjhlIiwicHJvZmlsZU5hbWUiOiJHb2xkYXBmZWwiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzVhNzZhN2NlMzZlZGRiYmZhNWMzMmJhZmVhYmUyNmQ3ZWJlNWRlOTBkNzYyYzJmNWY3OTQ1ZTQ1ODUxOTU2ZDYifX19", "b7pUQSZ1UkMZJNSqdaBPGWfm+rfvFkEh58pBvYTG2RBPwVju1kKinb1LfsyYhFKlyPvL1jfqi30udmb0302QvE0SKg7p3txxULa3Hr94+eCJWFxrOxUNorRT9E+TurJxH6jimu6KW1p6goPn77/kgNaWb9xn3+E84+vH0z9ETjgc5G0aYLT+cSzThUorhvOQ7DRLfRgSWiFxfm3Er0g+waLfDEeNNAd6OJ5k3X+kgM/+V6QTIFofnZZ6NdZZInTARAVol2H0pRfQfAuVYfJyVyvA0uF+ZX+wlMuBTG1MeyWjZgI1iUKmGaQADXsAV796kT+Z+tAXpbRYYYZnxil5jx5P4druiHvaQfV2KK3lbKm2uH9M3SZr5d57C3V24BKRRWGS4C9INzgO8ORIIomes7kp0gECS4MnSMI6hcl0JsXVlaAy88BgmT/PKxM+3q4PCQE1N9fTCuhoil7vVYIU3uBXwFUE7NTAOUdBee+3TtMstIu2WP8rtEZBVpGH9CmomaLTCzPZSdXGY31goOFXSRYMNi8j4ykuBgP0qJqimipWH0rBF1bMdHqMu359h62tTLRKipHWXPxj4N8c/n1CVPYjuXH9X3f1HAU4DnET+v93Vb/uzbx8rXFrz6jLPwAjSlJ8Th3VE+4ey/ZBHWPB+SuHetN+e0r/LYxiqwwlnwI=");
|
||||
|
||||
public static final SkinData HATTORI = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTc0NjEyMTczMDgsInByb2ZpbGVJZCI6Ijg1MmE4YWNmNzMzNzQwZDc5OWVjYjA4ZmQ5OTY1MGI1IiwicHJvZmlsZU5hbWUiOiJLaW5nQ3JhenlfIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83MjczMTBiMzlhMTIzOWI3ZTI4Y2JjNTkzMWY1MzlkNGVlNmQxOTc3ODhjNWI1YTY3YWY1NDJlYzk0MmZkMyJ9fX0=", "aHfFqPOZmcQkUqFPjVa27h27k5gyvkZMCOyIaIdIZfqVDg/69/hakkDQazvKg/U8KTlYaDSRyOp9ZD5qOUSCPvRtRDMhuX/Tn68KD9BdW5jYKsXo0puOa7IJDKAE47z7YQ8AvfOtxuOAg6S0ihjYEQqRA56UQ+gPbkd+pxpMxvXoLyAx7IEIKWmlkibG/rmaX8J7OEgq8Wi9s6BhtPVNMaLoznzdzOiiYkcza/zEG5zMXnj/hFHHUpWrYff0Oj7/SUB+krLsiMficASzzs/9HZq81V0ketqUhJYX66HL8F5fQniP8kYu9LbNNcVJmtlER03QaEqP/H8udemlVskFkOYLkTmhxfSetL46N+ZVf0Sxp2xYcFOH3djH/Q26IIXtzEqVyUW5Gun/ZJp8B8zYMOXbXSmaALAYPoX9cs91ZilNX/W7zn7b5Kb9kUBGt58eUpKoXjgK7rSvmH0X2JOZGFVji5QKzp/eOQAqMhkBOU8sEm9AT6mfZjjlyIDOZxSX6hjEJXRVVzFFlzTiRPTcAtaHWRnlRFywsDDSgVBGvQMPNMNa6CFeo0ajnhmfHWa4Ga77kpfQ75PzOoJ/j6Z/2sSIHfQFWE6INAGAyypX/x0Fd/AH6SmYfilnX6lhtd7OsDlxS01QGoRLPBh/ol+wY6rHSM1N6Qta0ulpQZLYIms=");
|
||||
public static final SkinData ANATH = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTc0Njg4NjM4MTYsInByb2ZpbGVJZCI6Ijg1MmE4YWNmNzMzNzQwZDc5OWVjYjA4ZmQ5OTY1MGI1IiwicHJvZmlsZU5hbWUiOiJLaW5nQ3JhenlfIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81NGI5NGQ4NzE5ZWFhYjc0YjVhMzhjN2Q5NDliM2FkMmIyYzA0ODIxZGY4OWM1ZDA0YjY5ZjNjZmExYmJhNjUifX19", "IKlnXzQ2k57XyTHge5V2ttnV1AqbRKrV0JktZS4+nLXx+ROM77/HRuf3/bYTqg48SB8npXy+c6nLYTCY1fTZOl3t2puS6BpZMBXuTV//A0OMQ1pJKzDb8vW6CwPYw2Nu6o0QX3J/FeUIaBj16GZAPxXOtSekkeOw9qsdh57GyqSmzODlEA/7CnJWqX2Ani5DACzo6j5rzfsz2qRgOzVlnbVlVzpXicRuYYLxKvT4nMS+B3HpQdsyFKAx8nTO/GmCHDzW97jck6w/VDlW9x+J39tPDEaKPLbDz1YV59yJt6hjNAcnwgbf3KvHSAbGZNLqRegq/Rk20ZI2J5GYT5ipiyf+p8rHfkRTxIsVCMyVecnSKaz59YQ7AleiWVGzYHDETU702UyigAZFHGHQ/0Kj9UyyZ4ew228FQuGo7iGY4dS/PKq40d1v3fq+czwBhcXR+Msi1Zqg/4dTh+QwwwWsIS3CKtOInpJgZ3U/tkn4STB3o+oKBbmBWvpJk8SrA6DVKKJMjHQig+67hXKSbdcRUWAoGc/iuRhRXgILkC99Ot4PHohEbwbEW8MsKxm49OFqzP4zptaUaiQpMK4YCxENhLrI7X+w51tt2XTjroIHu4oLYS4pG16ZnhUmd/RFg8Ar7mBVOv/2lUtOO5aMAv88CpyD+XXNcCQB4G5pv4c0F14=");
|
||||
public static final SkinData DEVON = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTc0Njk0NDE1MDYsInByb2ZpbGVJZCI6Ijg1MmE4YWNmNzMzNzQwZDc5OWVjYjA4ZmQ5OTY1MGI1IiwicHJvZmlsZU5hbWUiOiJLaW5nQ3JhenlfIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS85N2FkNjY1MjFmNzNjOWFmYzE4MzliZGExYzE5ZDNkMjg3YjNmMjRmY2EwZTBlMTE1NzhiOTE0ZTNiNWIwZDIifX19", "BNIc7N3SGIXOEUKFe3hrQp4YmniPxkiL5aKAUNkTmYqbygAQlrCCrwJTuK6JrzkWmD5AzMSzMDKkmoMWOikgulhSmDyC88lQz/LQH3co7WldPHaPL6kk27ZirmIIZEm5WKcvWhQ7ChNWQd2KsZuFqxZSdLSQmsbujF9vpuVbhlU4hajsUwbdiOJRZ18fOAFoJYq/g3RlvqC9VtAA/IAAN7jIpXf9Pn5+vjLqN+AdKm27YknCpqMtBfkYaIhMrpTBe2gP+o50TmH0xm0IZPCS+ORYNGwFdCsg6DzEU7a0rtcUdcZgdInc09mS8tMY9eeMAISYYq5MpyliHQ/areGKk0RJEYg7muc9r/N6vBUpxZtZH8BioDj2dNj4JOoH/58cwU3+hv/Woykc9o5NUPyz0nndiOtTUp1SaDXleKyHryoYnIkPyaDPyuA7qTbIKZQHxyAdrRsnknb0PYku6T8RA4kWNK2jlOH+R9D4eiKFcbLRU2Zl6L57lJTZFFI6GUvzDsyD/vBb59gjvXYzRmvguX9CHUc1aLDeUKhV8NFXeaonoYM9VPIUBQRWNdMery9OlBiQvg4VXy1w2yKLvlHRhJZJpDm/IDdsfg27o8+BUOZ0xHF9iXPBDkOiLXXZ02X4IonLcopVNImCMRZJ1dKHwgu9qnFqVTEKH4mwXUz2Zq8=");
|
||||
@ -84,6 +83,7 @@ public class SkinData
|
||||
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 MELON_PERSON = new SkinData("eyJ0aW1lc3RhbXAiOjE1MDEzNjA2OTU5MDgsInByb2ZpbGVJZCI6ImNiZDIwN2M3ZDNkZDQwYTg5NTBiZGQ4ZTU4M2IyYjY1IiwicHJvZmlsZU5hbWUiOiJBbGVzc2FuZHJvQ2Vydm8iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzNiNDQwYjc5NWY3ZGNjZGNiODY3MzBjYzMyYzE0MGQ4NzM2NmRjNDU2YWZhZjA4Y2VkNjE1OTEyOWViMCJ9fX0=","U5yXWm6A0R4gzZRFWeeI0IUwOlpjOUogDIJyPX1b9ItcT1CMkKF/oc2IKmbMJGhwktzV8U3YKh8J3IHHomJYMiZN6WH8QNyzAiw4uaaWd2JFtG5LYRLFI7DPiaXrRW0Wdz4IffFBZ5yyDOIOLcGCExLrxyeKAO7yNah6IMgEbtY8wX6uZYFWkxRx7Orbici2zsDakghXUFcnvNE+plmK3Gxjb45RtYfWeurGzcsCEEjkRK/aQ4aohvCkx5sc4Bl3ObWiDVJ9FvHzPSd09zjnIpL9jyxKQTscbeRFKasjtbJLEbq/yq5cAjI9uGYbPkBG9C1JgmWDZBz9a0bCwRokihKtYJbDAs1417qcyzoH0ylLt85fz+XM7G+MIHba8hZ3aJFZughyslsCg/+5jAm+Ci9yQJgYFf3yHFUrmVktHz+dsWdgrfDqIMXKJWXVKccvHMD0u+yKCMxW6C4RxZmOgnAqYfvPUJqTrAW4FpbFuPBTpFsGYF7QfgIekib8aXsUr0hCh1HqEYqICVXT8Jr38A4ySMZ1NKnbRzEsDwL/4gE5YDtza+qcanY2Ewl906Z+m3uMXXXKM7uYq47RyOYWYyOcyJhr9n7C1pEbyoaTt1m4+u9j9TEMX/8oN7qCSvDhkBH5M+XIt6OJhu7bJObW0HjqUo6yADUx3srK9cX9Rpw=");
|
||||
public static final SkinData BEACH_BALL = new SkinData("eyJ0aW1lc3RhbXAiOjE1MTY3MjcwMjMyMzQsInByb2ZpbGVJZCI6IjI2NzhjZDkzNjMxMDQ0NGNiZTRhZDRkMmIzYTJkOWI2IiwicHJvZmlsZU5hbWUiOiJUb3BwbGVtb3AiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzk1MzU4MzQxZDUzNjg1YTRlNWIxNWM0ZDY1ZDU4NjhiZTVhM2Q1NTA2NmZhZjAyZWE5ZDkyZGRlMjEyMzQifX19", "coBrfVUi7feMFheeKA4ZTz9GkSAjlL2RjaJR21NHg5dYrtcxMezXugN6t/CJrJP6exzu3rcxZX1LojdbQqG4kFpp/tEX/Dt8hcbv83JpT/I6IYuEndKu+1yPMAx6yu6/KUGhYfy7eRwPSM20aOm34ANiQI5VYTua5nwRBMCuWQ7zIfWV0b14Nstxtzbhne1EfOCk9WzDN93PHt42X//hpSoYC4OPqXgpbswOadDOSlqj0HCDRiZ3Fg0242gdRdVZYR+Gmq9/m0G4l4sLPYBdDN3y4IEY6ZHScouB+tyLRRlIAL/nGdMJNYn0yzlCuCVIl8ZA6Vv+hDOxCeN9KHiBDz1DfQLsegasCHojNh1ypGL24oqdTB51EWaFggc5z/dzViZz4GmmRtTheRikTy0ncnXrpmDkwZBqlGx6vRdoOa24IAUtd96KRe8X/z+yTOe/M9ciS0QR/NHcoOLiIXX+Vcm2x6Jo0Oo124yLYr6t4TPwH8ZLYrX9PV4OaQUFUj4gcV0cwrwh4u4g3hN9yDHMHPMYQwO0HrZ2JMZUNXrvg176s1nTuPA1/3cXjmeXRIHDe8NxrGbuOnuLqgnpsKLVu0ZVHMjIJ1D/cqQNq3bL9jKOR9BRdTLhOXU9Yin98uxpzW8C01kB2ZLM/Tc0oKrVyVaeCpihZRDISXsWPT0ZWkY=");
|
||||
|
||||
public static final SkinData APPLE = new SkinData("eyJ0aW1lc3RhbXAiOjE1MDEzNjMzODU3NzAsInByb2ZpbGVJZCI6IjQzYTgzNzNkNjQyOTQ1MTBhOWFhYjMwZjViM2NlYmIzIiwicHJvZmlsZU5hbWUiOiJTa3VsbENsaWVudFNraW42Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zNWUyZTA5NTk3MTJkY2QzMzU3Y2MzY2VhODVmOTliM2ZkODA5Nzg1NWM3NTRiOWIxNzFmOTYzNTE0MjI1ZCJ9fX0=", "tK+zKZp42fBhSLoXyFMwJ7AYubID12WUhhp9At4YA7A6SuYHj022IrkxWjsl8e7stsd+gmMsPbr25HMHH8JXRQhzH+5qRa3PBVqhYFUHWI7jrrmTk7krhwZOg+Ozw0+TU4nqyRZGeZxwKiy0DcpO7tsgcFQtbJTG27jh4ZGlkqANDHYsqi8BiOXVz51yquuf8x8Bgml+0wyuCrkgUo2a0iXB5la9zs/HnxFJbHi/IHn+a2+RqGa49JhgMCykKkohsgPEqcuCBuUbqs8pxdnUHTqCxmZ/XKjgXq3NpFkfp2RYynDTW5RfZdEbo+D+cbivZgrehBtJatJd8vZu+kmuxwxYR0mdre4MrlRcgn1CpSvPk5/EJrkst8TVv1iEtUeR2l82umw+QfemNOgrOP3K/DT+JX6faRskrLP7J6JAIWP04dEuDI83t1Y7UPX/tSsGOrA2PO/VR8670dwCMS5Wc60RLhT98PKs0ctFaPK4RQRp4XbOw7jtWiNUZ+iy7JOUFLKcoTZNOFqoXs1IVs2JZ/nHJHkzLXkvaHzeM5KlYiq8igCy3XF5CQvVrTsFYX+PELkq+2wpyVgSHITqhUZl96mDAWMFm8IepE0JEkTfp8VrTTXeym3LL5Ecu7Azeoh7SiKf5lSKyLro3hp2N+JvN8l0BPB8qpZAjs4VJd79dns=");
|
||||
public static final SkinData MELON = new SkinData("eyJ0aW1lc3RhbXAiOjE1MDEzNjMzNTc0MjcsInByb2ZpbGVJZCI6ImJiMDgwOTFhOTJlZDQzYWQ5NGYxZWRmZDc0NmIwYTJjIiwicHJvZmlsZU5hbWUiOiJJcDRuZHgiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzFjNDA4MWM4ZjRmY2RjODE5Y2VjZDZmOTRmM2ViZmFiZTBkMDMxMTVkZjJjNjYyODIwYTdhZWJhODljMmUifX19", "qHvPSsGfSDapqJlLxk1BQb2cVFbjggbDbQWCaHkzpfCx7yTojSR29ywqg0F5rLabZ7Q13wG7l2CUkdCsK4urO1qx2MpSK3iVL/mG2x2O3m3Hg7FUU6fcaupP9T8V36n8HNag5uM3lbtnzoNmhwuCS6EbzRbgk5cL38jRwPod4Bxea/UKOBFmrl506Y2pjg0gi3nZVHPmnweNC3kV8FwmHHfFUt2T6QrvULKANLfxTYmIJj9jrG5CZ3oGQj6vnHo0iA5NpMpUYAqLSKrAV2GTVZ8U7SEcTkUgLkXfd7UnNKGWVoH93LUtRyti71fwtx5q591xfqdbRiMQZBz5r5U0kUg9HrCuz8nUaCX4ox9vPJp3TktlRT8cqRyadm+bqVHPccnS0Wt/7HTMC85X1VhB+5EawHdx8umkky404mEJbPcWZZlXfbsDchASMq2tgfeZZufgJX/DY/qyVz8L1Pmp9IXuqnzvV2CaUwjKtyc8gd6ZrOGOmYovhth/IgvRUaChB248Wwh2qe3sQz0PYxAuFMP0D3mf8ctLFmVyR3bPKtxJYW6vrLiZ8a6lg1houf/pQMF4q5HQSzW7Nbic7gR766TXgy5dRxavyToPRuFkCnI3EQwmleeYg88pazcGRWGOEueAM1/4dbNjNsAoif8fCSI3/1UT7lgvcCAinDJe6AE=");
|
||||
|
@ -105,7 +105,10 @@ public class UtilAlg
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static Vector getTrajectory(float yaw, float pitch)
|
||||
{
|
||||
return new Location(null, 0, 0, 0, yaw, pitch).getDirection();
|
||||
}
|
||||
public static float GetPitch(Vector vec)
|
||||
{
|
||||
return GetPitch(vec.getX(), vec.getY(), vec.getZ());
|
||||
|
@ -479,8 +479,11 @@ public class UtilPlayer
|
||||
}
|
||||
|
||||
public static List<Player> getNearby(Location loc, double maxDist, boolean onlySurvival)
|
||||
{
|
||||
if (maxDist > 0)
|
||||
{
|
||||
maxDist *= maxDist;
|
||||
}
|
||||
LinkedList<Player> nearbyMap = new LinkedList<>();
|
||||
|
||||
for (Player cur : loc.getWorld().getPlayers())
|
||||
@ -500,7 +503,7 @@ public class UtilPlayer
|
||||
|
||||
for (int i = 0; i < nearbyMap.size(); i++)
|
||||
{
|
||||
if (dist < Math.pow(loc.toVector().subtract(nearbyMap.get(i).getLocation().toVector()).length(), 2))
|
||||
if (dist < UtilMath.offsetSquared(loc, nearbyMap.get(i).getLocation()))
|
||||
{
|
||||
nearbyMap.add(i, cur);
|
||||
break;
|
||||
@ -525,7 +528,6 @@ public class UtilPlayer
|
||||
{
|
||||
maxDist *= maxDist;
|
||||
}
|
||||
|
||||
Player best = null;
|
||||
double bestDist = 0;
|
||||
|
||||
@ -658,9 +660,9 @@ public class UtilPlayer
|
||||
return players;
|
||||
}
|
||||
|
||||
public static HashMap<Player, Double> getPlayersInPyramid(Player player, double angleLimit, double distance)
|
||||
public static Map<Player, Double> getPlayersInPyramid(Player player, double angleLimit, double distance)
|
||||
{
|
||||
HashMap<Player, Double> players = new HashMap<Player, Double>();
|
||||
Map<Player, Double> players = new HashMap<>();
|
||||
|
||||
for (Player cur : player.getWorld().getPlayers())
|
||||
{
|
||||
|
@ -62,7 +62,7 @@ public class LineParticle
|
||||
|
||||
if (_direction == null)
|
||||
{
|
||||
_direction = UtilAlg.getTrajectory(start, end).normalize();
|
||||
_direction = UtilAlg.getTrajectory(start, end);
|
||||
}
|
||||
}
|
||||
|
||||
@ -75,11 +75,16 @@ public class LineParticle
|
||||
public boolean update()
|
||||
{
|
||||
boolean done = _curRange > _maxRange;
|
||||
Location newTarget = _start.clone().add(_direction.clone().multiply(_curRange));
|
||||
|
||||
if (newTarget.getY() < 0)
|
||||
{
|
||||
newTarget.add(0, 0.2, 0);
|
||||
}
|
||||
|
||||
Location newTarget = _start.clone().add(new Vector(0, 0.2, 0)).add(_direction.clone().multiply(_curRange));
|
||||
_lastLocation = newTarget;
|
||||
|
||||
if (!_ignoreAllBlocks && (!(UtilBlock.airFoliage(newTarget.getBlock()) || UtilBlock.airFoliage(newTarget.getBlock().getRelative(BlockFace.UP)))))
|
||||
if (!_ignoreAllBlocks && !(UtilBlock.airFoliage(newTarget.getBlock()) && UtilBlock.airFoliage(newTarget.getBlock().getRelative(BlockFace.UP))))
|
||||
{
|
||||
if (_ignoredTypes == null || !_ignoredTypes.contains(newTarget.getBlock().getType()))
|
||||
{
|
||||
|
@ -1,12 +1,33 @@
|
||||
package mineplex.core.disguise.disguises;
|
||||
|
||||
import org.bukkit.entity.*;
|
||||
import net.minecraft.server.v1_8_R3.EntityVillager;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Villager.Profession;
|
||||
|
||||
public class DisguiseVillager extends DisguiseAgeable
|
||||
{
|
||||
|
||||
private Profession _profession;
|
||||
|
||||
public DisguiseVillager(Entity entity)
|
||||
{
|
||||
super(EntityType.VILLAGER, entity);
|
||||
DataWatcher.a(16, 0, EntityVillager.META_TYPE, 0);
|
||||
}
|
||||
|
||||
public void setProfession(Profession profession)
|
||||
{
|
||||
_profession = profession;
|
||||
|
||||
int id = profession.getId();
|
||||
DataWatcher.watch(16, id, EntityVillager.META_TYPE, id);
|
||||
}
|
||||
|
||||
public Profession getProfession()
|
||||
{
|
||||
return _profession;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -327,24 +327,33 @@ public class Explosion extends MiniPlugin
|
||||
if (blockSet.isEmpty())
|
||||
return;
|
||||
|
||||
int lowestY = Integer.MAX_VALUE;
|
||||
|
||||
for (Block block : blockSet)
|
||||
{
|
||||
int y = block.getLocation().getBlockY();
|
||||
|
||||
if (y < lowestY)
|
||||
{
|
||||
lowestY = y;
|
||||
}
|
||||
}
|
||||
|
||||
//Save
|
||||
final HashMap<Block, Entry<Integer, Byte>> blocks = new HashMap<Block, Entry<Integer, Byte>>();
|
||||
final HashMap<Block, Entry<Integer, Byte>> blocks = new HashMap<>();
|
||||
|
||||
for (Block cur : blockSet)
|
||||
{
|
||||
if (cur.getTypeId() == 0)
|
||||
if (cur.getTypeId() == 0 || onlyAbove && cur.getY() < mid.getY())
|
||||
continue;
|
||||
|
||||
if (onlyAbove && cur.getY() < mid.getY())
|
||||
continue;
|
||||
|
||||
blocks.put(cur, new AbstractMap.SimpleEntry<Integer, Byte>(cur.getTypeId(), cur.getData()));
|
||||
blocks.put(cur, new AbstractMap.SimpleEntry<>(cur.getTypeId(), cur.getData()));
|
||||
|
||||
if (removeBlock)
|
||||
{
|
||||
if (_regenerateGround)
|
||||
{
|
||||
_blockRestore.add(cur, 0, (byte) 0, (long) (_regenerateTime + (cur.getLocation().getBlockY() * 3000) + (Math.random() * 1500)));
|
||||
_blockRestore.add(cur, 0, (byte) 0, (long) (_regenerateTime + ((cur.getLocation().getBlockY() - lowestY) * 3000) + (Math.random() * 1500)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -118,6 +118,7 @@ import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphType;
|
||||
import mineplex.core.gadget.gadgets.gamemodifiers.moba.skins.HeroSkinGadget;
|
||||
import mineplex.core.gadget.gadgets.hat.HatItem;
|
||||
import mineplex.core.gadget.gadgets.hat.HatType;
|
||||
import mineplex.core.gadget.gadgets.item.ItemBallCatch;
|
||||
import mineplex.core.gadget.gadgets.item.ItemBatGun;
|
||||
import mineplex.core.gadget.gadgets.item.ItemBow;
|
||||
import mineplex.core.gadget.gadgets.item.ItemCandy;
|
||||
@ -519,6 +520,7 @@ public class GadgetManager extends MiniPlugin
|
||||
addGadget(new ItemCandy(this));
|
||||
addGadget(new ItemOAndX(this));
|
||||
addGadget(new ItemMobBomb(this));
|
||||
addGadget(new ItemBallCatch(this));
|
||||
|
||||
// Costume
|
||||
addGadget(new OutfitRaveSuitHelmet(this));
|
||||
|
@ -0,0 +1,221 @@
|
||||
package mineplex.core.gadget.gadgets.item;
|
||||
|
||||
import java.time.Month;
|
||||
import java.time.YearMonth;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.player.PlayerArmorStandManipulateEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.skin.SkinData;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilTextMiddle;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.gadget.GadgetManager;
|
||||
import mineplex.core.gadget.types.ItemGadget;
|
||||
import mineplex.core.gadget.util.CostConstants;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
|
||||
public class ItemBallCatch extends ItemGadget
|
||||
{
|
||||
|
||||
private static final double VELOCITY_FACTOR = 0.25;
|
||||
private static final double VELOCITY_INCREASE_FACTOR = 1.05;
|
||||
private static final double VELOCITY_Y = 0.2;
|
||||
private static final double VELOCITY_Y_DECREASE = 0.005;
|
||||
private static final long COOLDOWN = TimeUnit.SECONDS.toMillis(20);
|
||||
|
||||
private final Map<ArmorStand, BallData> _balls;
|
||||
|
||||
public ItemBallCatch(GadgetManager manager)
|
||||
{
|
||||
super(manager, "Play Catch", new String[]
|
||||
{
|
||||
C.cWhite + "Play Catch",
|
||||
C.cWhite + "with other players!",
|
||||
C.blankLine,
|
||||
C.cWhite + "Left click hit the ball.",
|
||||
C.cWhite + "You cannot hit the ball twice",
|
||||
C.cWhite + "in a row.",
|
||||
C.cWhite + "Try and keep it in the air",
|
||||
C.cWhite + "for as long as you can!"
|
||||
}, CostConstants.POWERPLAY_BONUS, Material.WOOL, (byte) 14, 500, null);
|
||||
|
||||
_balls = new HashMap<>();
|
||||
|
||||
Free = false;
|
||||
setDisplayItem(SkinData.BEACH_BALL.getSkull());
|
||||
setPPCYearMonth(YearMonth.of(2018, Month.FEBRUARY));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disableCustom(Player player, boolean message)
|
||||
{
|
||||
super.disableCustom(player, message);
|
||||
|
||||
_balls.entrySet().removeIf(entry ->
|
||||
{
|
||||
if (entry.getValue().Shooter.equals(player))
|
||||
{
|
||||
entry.getKey().remove();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean activatePreprocess(Player player)
|
||||
{
|
||||
return _balls.values().stream()
|
||||
.noneMatch(data -> data.Shooter.equals(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ActivateCustom(Player player)
|
||||
{
|
||||
Location location = player.getLocation().add(0, 0.4, 0);
|
||||
location.add(location.getDirection());
|
||||
|
||||
ArmorStand stand = location.getWorld().spawn(location, ArmorStand.class);
|
||||
stand.setHelmet(getDisplayItem());
|
||||
stand.setVisible(false);
|
||||
stand.setGravity(false);
|
||||
stand.setCustomNameVisible(true);
|
||||
|
||||
BallData data = new BallData(player);
|
||||
updateHits(stand, data);
|
||||
|
||||
_balls.put(stand, data);
|
||||
UtilTextMiddle.display(C.cGreen + "Punch the ball", "Keep it in the air for as long as you can!", 10 ,40, 10, player);
|
||||
|
||||
Manager.runSyncTimer(new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
Vector direction = data.Direction;
|
||||
|
||||
if (data.Last == null || direction == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Location newLocation = stand.getLocation();
|
||||
|
||||
direction.setY(direction.getY() - VELOCITY_Y_DECREASE);
|
||||
stand.teleport(newLocation.add(direction));
|
||||
|
||||
if (!stand.isValid() || UtilBlock.solid(newLocation.add(0, 1.5, 0).getBlock()))
|
||||
{
|
||||
String message = F.main(Manager.getName(), "You managed to keep the ball in the air for " + F.count(data.Hits) + " passes, " + F.time(UtilTime.MakeStr(System.currentTimeMillis() - data.Start)) + " with " + F.count(data.Players.size()) + " playing the game!");
|
||||
data.Players.forEach(player1 ->
|
||||
{
|
||||
player1.playSound(player1.getLocation(), Sound.NOTE_PLING, 1, 0.3F);
|
||||
player1.sendMessage(message);
|
||||
});
|
||||
_balls.remove(stand);
|
||||
stand.remove();
|
||||
cancel();
|
||||
Recharge.Instance.use(player, getName(), COOLDOWN, true, true);
|
||||
}
|
||||
}
|
||||
}, 10, 1);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void interactBall(EntityDamageByEntityEvent event)
|
||||
{
|
||||
if (!(event.getDamager() instanceof Player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = event.getEntity();
|
||||
Player player = (Player) event.getDamager();
|
||||
BallData data = _balls.get(entity);
|
||||
|
||||
if (data == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (data.Last != null && data.Last.equals(player))
|
||||
{
|
||||
player.sendMessage(F.main(Manager.getName(), "You cannot hit the ball twice in a row!"));
|
||||
return;
|
||||
}
|
||||
|
||||
Vector newDirection = player.getLocation().getDirection();
|
||||
newDirection.setX(newDirection.getX() * data.VelocityFactor);
|
||||
newDirection.setY(VELOCITY_Y);
|
||||
newDirection.setZ(newDirection.getZ() * data.VelocityFactor);
|
||||
|
||||
if (data.Start == 0)
|
||||
{
|
||||
data.Start = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
data.Hits++;
|
||||
data.Last = player;
|
||||
data.Direction = newDirection;
|
||||
data.VelocityFactor *= VELOCITY_INCREASE_FACTOR;
|
||||
data.Players.add(player);
|
||||
player.getWorld().playSound(entity.getLocation().add(0, 1, 0), Sound.ORB_PICKUP, 1, 1.4F);
|
||||
updateHits(entity, data);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void armourStandInteract(PlayerArmorStandManipulateEvent event)
|
||||
{
|
||||
for (ArmorStand stand : _balls.keySet())
|
||||
{
|
||||
if (stand.equals(event.getRightClicked()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateHits(Entity stand, BallData data)
|
||||
{
|
||||
stand.setCustomName(C.cGreen + data.Hits + " Hit" + (data.Hits == 1 ? "" : "s"));
|
||||
}
|
||||
|
||||
private class BallData
|
||||
{
|
||||
|
||||
Player Shooter;
|
||||
Player Last;
|
||||
int Hits;
|
||||
long Start;
|
||||
double VelocityFactor;
|
||||
Vector Direction;
|
||||
Set<Player> Players;
|
||||
|
||||
BallData(Player shooter)
|
||||
{
|
||||
Shooter = shooter;
|
||||
VelocityFactor = VELOCITY_FACTOR;
|
||||
Players = new HashSet<>();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -13,20 +13,27 @@ public abstract class SpiralEffect extends Effect
|
||||
private static final double DELTA_RADIUS = 0.05;
|
||||
|
||||
private final double _maxRadius;
|
||||
private final int _iterations;
|
||||
|
||||
private double _radius;
|
||||
private double _theta;
|
||||
private double _z;
|
||||
private double _radius, _theta, _z;
|
||||
|
||||
public SpiralEffect(int ticks, double maxRadius, Location location)
|
||||
{
|
||||
this(ticks, maxRadius, 1, location);
|
||||
}
|
||||
|
||||
public SpiralEffect(int ticks, double maxRadius, int iterations, Location location)
|
||||
{
|
||||
super(ticks, new EffectLocation(location));
|
||||
|
||||
_maxRadius = maxRadius;
|
||||
_iterations = iterations;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runEffect()
|
||||
{
|
||||
for (int i = 0; i < _iterations; i++)
|
||||
{
|
||||
double x = _radius * Math.cos(_theta);
|
||||
double y = _radius * Math.sin(_theta);
|
||||
@ -49,6 +56,7 @@ public abstract class SpiralEffect extends Effect
|
||||
_radius += DELTA_RADIUS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void rotateDirection(Location location)
|
||||
{
|
||||
|
@ -46,6 +46,7 @@ public class PowerPlayClubRewards
|
||||
.put(YearMonth.of(2017, Month.NOVEMBER), new UnknownSalesPackageItem("Tic Tac Toe"))
|
||||
.put(YearMonth.of(2017, Month.DECEMBER), new UnknownSalesPackageItem("Sledge Mount"))
|
||||
.put(YearMonth.of(2018, Month.JANUARY), new UnknownSalesPackageItem("Mob Bomb"))
|
||||
.put(YearMonth.of(2018, Month.FEBRUARY), new UnknownSalesPackageItem("Play Catch"))
|
||||
.build();
|
||||
|
||||
public interface PowerPlayClubItem
|
||||
|
@ -216,9 +216,18 @@ public class CustomDamageEvent extends Event implements Cancellable
|
||||
|
||||
public void SetIgnoreArmor(boolean ignore)
|
||||
{
|
||||
if (ignore)
|
||||
{
|
||||
_cancellers.removeIf(reason -> reason.equals("World/Monster Damage Rate"));
|
||||
}
|
||||
|
||||
_ignoreArmor = ignore;
|
||||
}
|
||||
|
||||
/**
|
||||
* A warning to those using this method, the {@link DamageManager} cancels for rate on {@link org.bukkit.event.EventPriority#LOW}, which is a problem.
|
||||
* So only call this on {@link org.bukkit.event.EventPriority#LOWEST} otherwise it will not work. It's stupid but there you go.
|
||||
*/
|
||||
public void SetIgnoreRate(boolean ignore)
|
||||
{
|
||||
_ignoreRate = ignore;
|
||||
|
@ -0,0 +1,77 @@
|
||||
package nautilus.game.arcade.events;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.player.PlayerEvent;
|
||||
|
||||
public class PerkDoubleJumpEvent extends PlayerEvent implements Cancellable
|
||||
{
|
||||
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
|
||||
private double _power;
|
||||
private double _heightMax;
|
||||
private boolean _control, _cancelled;
|
||||
|
||||
public PerkDoubleJumpEvent(Player who, double power, double heightMax, boolean control)
|
||||
{
|
||||
super(who);
|
||||
|
||||
_power = power;
|
||||
_heightMax = heightMax;
|
||||
_control = control;
|
||||
}
|
||||
|
||||
public void setPower(double power)
|
||||
{
|
||||
_power = power;
|
||||
}
|
||||
|
||||
public double getPower()
|
||||
{
|
||||
return _power;
|
||||
}
|
||||
|
||||
public void setHeightMax(double heightMax)
|
||||
{
|
||||
_heightMax = heightMax;
|
||||
}
|
||||
|
||||
public double getHeightMax()
|
||||
{
|
||||
return _heightMax;
|
||||
}
|
||||
|
||||
public void setControl(boolean control)
|
||||
{
|
||||
_control = control;
|
||||
}
|
||||
|
||||
public boolean isControlled()
|
||||
{
|
||||
return _control;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled()
|
||||
{
|
||||
return _cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean b)
|
||||
{
|
||||
_cancelled = b;
|
||||
}
|
||||
|
||||
public HandlerList getHandlers()
|
||||
{
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList()
|
||||
{
|
||||
return HANDLERS;
|
||||
}
|
||||
}
|
@ -339,7 +339,7 @@ public class GameTeam
|
||||
if (GetColor() == ChatColor.AQUA) return (byte) 3;
|
||||
if (GetColor() == ChatColor.YELLOW) return (byte) 4;
|
||||
if (GetColor() == ChatColor.GREEN) return (byte) 5;
|
||||
//if (GetColor() == ChatColor.PINK) return (byte)6;
|
||||
if (GetColor() == ChatColor.LIGHT_PURPLE) return (byte) 6;
|
||||
if (GetColor() == ChatColor.DARK_GRAY) return (byte) 7;
|
||||
if (GetColor() == ChatColor.GRAY) return (byte) 8;
|
||||
if (GetColor() == ChatColor.DARK_AQUA) return (byte) 9;
|
||||
@ -357,7 +357,7 @@ public class GameTeam
|
||||
{
|
||||
if (GetColor() == ChatColor.WHITE) return Color.WHITE;
|
||||
if (GetColor() == ChatColor.GOLD) return Color.ORANGE;
|
||||
if (GetColor() == ChatColor.LIGHT_PURPLE) return Color.PURPLE;
|
||||
if (GetColor() == ChatColor.LIGHT_PURPLE) return Color.FUCHSIA;
|
||||
if (GetColor() == ChatColor.AQUA) return Color.AQUA;
|
||||
if (GetColor() == ChatColor.YELLOW) return Color.YELLOW;
|
||||
if (GetColor() == ChatColor.GREEN) return Color.GREEN;
|
||||
@ -372,30 +372,11 @@ public class GameTeam
|
||||
else return Color.WHITE;
|
||||
}
|
||||
|
||||
public String getColorName()
|
||||
{
|
||||
if (GetColor() == ChatColor.WHITE) return "WHITE";
|
||||
if (GetColor() == ChatColor.GOLD) return "ORANGE";
|
||||
if (GetColor() == ChatColor.LIGHT_PURPLE) return "PURPLE";
|
||||
if (GetColor() == ChatColor.AQUA) return "AQUA";
|
||||
if (GetColor() == ChatColor.YELLOW) return "YELLOW";
|
||||
if (GetColor() == ChatColor.GREEN) return "GREEN";
|
||||
if (GetColor() == ChatColor.DARK_GRAY) return "GRAY";
|
||||
if (GetColor() == ChatColor.GRAY) return "GRAY";
|
||||
if (GetColor() == ChatColor.DARK_AQUA) return "AQUA";
|
||||
if (GetColor() == ChatColor.DARK_PURPLE) return "PURPLE";
|
||||
if (GetColor() == ChatColor.BLUE) return "BLUE";
|
||||
if (GetColor() == ChatColor.DARK_BLUE) return "BLUE";
|
||||
if (GetColor() == ChatColor.DARK_GREEN) return "GREEN";
|
||||
if (GetColor() == ChatColor.RED) return "RED";
|
||||
else return "WHITE";
|
||||
}
|
||||
|
||||
public DyeColor getDyeColor()
|
||||
{
|
||||
if (GetColor() == ChatColor.WHITE) return DyeColor.WHITE;
|
||||
if (GetColor() == ChatColor.GOLD) return DyeColor.ORANGE;
|
||||
if (GetColor() == ChatColor.LIGHT_PURPLE) return DyeColor.MAGENTA;
|
||||
if (GetColor() == ChatColor.LIGHT_PURPLE) return DyeColor.PINK;
|
||||
if (GetColor() == ChatColor.AQUA) return DyeColor.LIGHT_BLUE;
|
||||
if (GetColor() == ChatColor.YELLOW) return DyeColor.YELLOW;
|
||||
if (GetColor() == ChatColor.GREEN) return DyeColor.LIME;
|
||||
|
@ -86,8 +86,6 @@ public class Gladiators extends SoloGame
|
||||
|
||||
private ArenaType _furthestOutCurrent;
|
||||
|
||||
private boolean _firstRound;
|
||||
|
||||
private HotbarEditor _hotbarEditor;
|
||||
|
||||
public Gladiators(ArcadeManager manager)
|
||||
@ -143,9 +141,9 @@ public class Gladiators extends SoloGame
|
||||
_playerArenas = new HashMap<>();
|
||||
|
||||
_roundState = RoundState.WAITING;
|
||||
_firstRound = true;
|
||||
|
||||
_hotbarEditor = new HotbarEditor(manager.getPlugin(), this);
|
||||
_hotbarEditor = new HotbarEditor();
|
||||
_hotbarEditor.register(this);
|
||||
|
||||
new CompassModule()
|
||||
.setGiveCompass(true)
|
||||
@ -1121,14 +1119,6 @@ public class Gladiators extends SoloGame
|
||||
Scoreboard.draw();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable()
|
||||
{
|
||||
super.disable();
|
||||
_hotbarEditor.deregisterSelf(); // De-register as listener
|
||||
_hotbarEditor.onDisable(); // Fully disable
|
||||
}
|
||||
|
||||
public HashMap<Player, Arena> getArenas()
|
||||
{
|
||||
return _playerArenas;
|
||||
|
@ -9,7 +9,6 @@ import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
@ -19,55 +18,53 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import mineplex.core.MiniPlugin;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.Game;
|
||||
import nautilus.game.arcade.game.games.gladiators.Gladiators;
|
||||
import nautilus.game.arcade.game.modules.Module;
|
||||
|
||||
/**
|
||||
* Created by William (WilliamTiger).
|
||||
* 18/12/15
|
||||
*/
|
||||
public class HotbarEditor extends MiniPlugin
|
||||
public class HotbarEditor extends Module
|
||||
{
|
||||
private Gladiators _host;
|
||||
private ItemStack _item;
|
||||
private Listener _pageListener;
|
||||
|
||||
public HotbarEditor(JavaPlugin plugin, Gladiators gladiators)
|
||||
private final ItemStack _item;
|
||||
private final Listener _pageListener;
|
||||
|
||||
public HotbarEditor()
|
||||
{
|
||||
super("Hotbar Editor", plugin);
|
||||
|
||||
_host = gladiators;
|
||||
_item = new ItemBuilder(Material.NAME_TAG).setTitle(C.cGold + "Hotbar Editor")
|
||||
.addLore(C.cGray + "Right click to edit your Gladiators hotbar").build();
|
||||
|
||||
_pageListener = new HotbarPageListener(this);
|
||||
getPluginManager().registerEvents(_pageListener, getPlugin());
|
||||
UtilServer.RegisterEvents(_pageListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable()
|
||||
public void cleanup()
|
||||
{
|
||||
HandlerList.unregisterAll(_pageListener);
|
||||
UtilServer.Unregister(_pageListener);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onJoin(PlayerJoinEvent event)
|
||||
{
|
||||
if (_host.Manager.GetGame() != _host)
|
||||
if (getGame().Manager.GetGame() != getGame())
|
||||
return;
|
||||
|
||||
if (_host.GetState() == Game.GameState.Recruit || _host.GetState() == Game.GameState.Live)
|
||||
if (getGame().GetState() == Game.GameState.Recruit || getGame().GetState() == Game.GameState.Live)
|
||||
{
|
||||
event.getPlayer().getInventory().setItem(0, _item);
|
||||
}
|
||||
@ -76,16 +73,13 @@ public class HotbarEditor extends MiniPlugin
|
||||
@EventHandler
|
||||
public void onDeath(final PlayerDeathEvent event)
|
||||
{
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable()
|
||||
getGame().getArcadeManager().runSyncLater(() ->
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
if (_host.IsLive())
|
||||
if (getGame().IsLive())
|
||||
{
|
||||
event.getEntity().getInventory().setItem(0, _item);
|
||||
}
|
||||
}
|
||||
});
|
||||
}, 1);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
@ -93,10 +87,10 @@ public class HotbarEditor extends MiniPlugin
|
||||
{
|
||||
if (event.getMessage().equalsIgnoreCase("/spec"))
|
||||
{
|
||||
if (_host == null)
|
||||
if (getGame() == null)
|
||||
return;
|
||||
|
||||
if (!_host.IsAlive(event.getPlayer())
|
||||
if (!getGame().IsAlive(event.getPlayer())
|
||||
&& !UtilInv.contains(event.getPlayer(), _item.getType(), (byte) 0, 1))
|
||||
{
|
||||
event.getPlayer().getInventory().setItem(0, _item);
|
||||
@ -107,9 +101,6 @@ public class HotbarEditor extends MiniPlugin
|
||||
@EventHandler
|
||||
public void onJoin(GameStateChangeEvent event)
|
||||
{
|
||||
if (event.GetGame() != _host)
|
||||
return;
|
||||
|
||||
if (event.GetState() == Game.GameState.Recruit)
|
||||
{
|
||||
for (Player player : Bukkit.getOnlinePlayers())
|
||||
@ -146,14 +137,9 @@ public class HotbarEditor extends MiniPlugin
|
||||
}
|
||||
}
|
||||
|
||||
public Gladiators getHost()
|
||||
{
|
||||
return _host;
|
||||
}
|
||||
|
||||
public HotbarLayout getLayout(Player player)
|
||||
{
|
||||
int data = _host.Manager.getArcadePlayer(player).get("hotbar");
|
||||
int data = getGame().Manager.getArcadePlayer(player).get("hotbar");
|
||||
data = (data == -1 ? 1239 : data);
|
||||
|
||||
List<Integer> ints = new ArrayList<>();
|
||||
@ -207,7 +193,7 @@ public class HotbarEditor extends MiniPlugin
|
||||
save.setRod(save.getEmpty());
|
||||
}
|
||||
|
||||
_host.Manager.getArcadePlayer(player).put("hotbar", save.toDataSaveNumber(), true);
|
||||
getGame().Manager.getArcadePlayer(player).put("hotbar", save.toDataSaveNumber(), true);
|
||||
player.sendMessage(F.main("Game", "Saved new hotbar layout!"));
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
@ -141,7 +142,7 @@ public class MobaTraining extends Moba
|
||||
_overtimeManager.disableOvertime();
|
||||
_minion.disableMinions();
|
||||
|
||||
Function<Player, Boolean> safeFunction = player -> UtilAlg.inBoundingBox(player.getLocation(), _borderA, _borderB);
|
||||
Predicate<Player> safeFunction = player -> UtilAlg.inBoundingBox(player.getLocation(), _borderA, _borderB);
|
||||
Function<Player, GameTeam> teamFunction = player -> GetTeam(ChatColor.GRAY);
|
||||
new TrainingGameModule()
|
||||
.setGiveReturnToSpawn(false)
|
||||
@ -197,7 +198,7 @@ public class MobaTraining extends Moba
|
||||
|
||||
registerDebugCommand("skip", Perm.DEBUG_SKIP_COMMAND, PermissionGroup.PLAYER, (caller, args) ->
|
||||
{
|
||||
if (!safeFunction.apply(caller))
|
||||
if (!safeFunction.test(caller))
|
||||
{
|
||||
caller.teleport(GetTeam(ChatColor.YELLOW).GetSpawn());
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ import org.bukkit.event.entity.ItemSpawnEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerVelocityEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
@ -35,6 +36,7 @@ import com.google.common.collect.Sets;
|
||||
|
||||
import mineplex.core.account.permissions.Permission;
|
||||
import mineplex.core.account.permissions.PermissionGroup;
|
||||
import mineplex.core.achievement.Achievement;
|
||||
import mineplex.core.blockrestore.BlockRestore;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
@ -46,6 +48,7 @@ import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTextMiddle;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.gadget.types.Gadget;
|
||||
import mineplex.core.gadget.types.GadgetType;
|
||||
import mineplex.core.hologram.Hologram;
|
||||
@ -79,15 +82,16 @@ import nautilus.game.arcade.game.games.smash.kits.KitSkySquid;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitSlime;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitSnowman;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitSpider;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitVillager;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitWitch;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitWitherSkeleton;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitWolf;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitZombie;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
import nautilus.game.arcade.game.modules.compass.CompassModule;
|
||||
import nautilus.game.arcade.game.modules.perks.PerkSpreadsheetModule;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.managers.PerkSpreadsheetModule;
|
||||
|
||||
public abstract class SuperSmash extends Game
|
||||
{
|
||||
@ -97,15 +101,28 @@ public abstract class SuperSmash extends Game
|
||||
DEBUG_SMASH_COMMAND,
|
||||
DEBUG_NEXTSMASH_COMMAND,
|
||||
DEBUG_COOLDOWN_COMMAND,
|
||||
DEBUG_PERK_COMMANDS
|
||||
}
|
||||
|
||||
private static final int MAX_LIVES = 4;
|
||||
private static final int POWERUP_SPAWN_Y_INCREASE = 120;
|
||||
private static final int HUNGER_DELAY = 250;
|
||||
private static final int RESPAWN_INVUL = 1500;
|
||||
|
||||
private static final String DATA_POINT_POWERUP = "RED";
|
||||
|
||||
private Map<Player, Integer> _lives = new HashMap<>();
|
||||
public static final Achievement[] ACHIEVEMENTS =
|
||||
{
|
||||
Achievement.SMASH_MOBS_1V3,
|
||||
Achievement.SMASH_MOBS_FREE_KITS,
|
||||
Achievement.SMASH_MOBS_MLG_PRO,
|
||||
Achievement.SMASH_MOBS_RECOVERY_MASTER,
|
||||
Achievement.SMASH_MOBS_TRIPLE_KILL,
|
||||
Achievement.SMASH_MOBS_WINS
|
||||
};
|
||||
|
||||
private final Map<Player, Integer> _lives = new HashMap<>();
|
||||
private final Map<Player, Long> _respawnTime = new HashMap<>();
|
||||
|
||||
private Location _powerupCurrent = null;
|
||||
private Location _powerupTarget = null;
|
||||
@ -124,7 +141,7 @@ public abstract class SuperSmash extends Game
|
||||
|
||||
new KitSkeleton(manager), new KitGolem(manager), new KitSpider(manager), new KitSlime(manager), new KitCreeper(manager), new KitEnderman(manager), new KitSnowman(manager),
|
||||
new KitWolf(manager), new KitBlaze(manager), new KitWitch(manager), new KitChicken(manager), new KitSkeletalHorse(manager), new KitPig(manager), new KitSkySquid(manager),
|
||||
new KitWitherSkeleton(manager), new KitMagmaCube(manager), new KitZombie(manager), new KitCow(manager), new KitSheep(manager), new KitGuardian(manager)
|
||||
new KitWitherSkeleton(manager), new KitMagmaCube(manager), new KitZombie(manager), new KitCow(manager), new KitSheep(manager), new KitGuardian(manager), new KitVillager(manager)
|
||||
|
||||
}, type, description);
|
||||
}
|
||||
@ -148,7 +165,8 @@ public abstract class SuperSmash extends Game
|
||||
.setGiveCompassToAlive(true)
|
||||
.register(this);
|
||||
|
||||
new PerkSpreadsheetModule(this, "SMASH_KITS");
|
||||
new PerkSpreadsheetModule("SMASH_KITS")
|
||||
.register(this);
|
||||
|
||||
registerDebugCommand("cooldown", Perm.DEBUG_COOLDOWN_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
|
||||
{
|
||||
@ -174,13 +192,20 @@ public abstract class SuperSmash extends Game
|
||||
|
||||
if (!IsAlive(caller))
|
||||
{
|
||||
SetPlayerState(caller, PlayerState.IN);
|
||||
GetTeamList().get(0).AddPlayer(caller, true);
|
||||
RespawnPlayer(caller);
|
||||
caller.sendMessage(F.main("Revive", "You are back in the game!"));
|
||||
}
|
||||
|
||||
_lives.put(caller, MAX_LIVES);
|
||||
});
|
||||
|
||||
PermissionGroup.ADMIN.setPermission(Perm.DEBUG_PERK_COMMANDS, true, true);
|
||||
|
||||
if (UtilServer.isTestServer())
|
||||
{
|
||||
PermissionGroup.QA.setPermission(Perm.DEBUG_PERK_COMMANDS, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
@ -212,6 +237,7 @@ public abstract class SuperSmash extends Game
|
||||
public void playerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
_lives.remove(event.getPlayer());
|
||||
_respawnTime.remove(event.getPlayer());
|
||||
}
|
||||
|
||||
public int getLives(Player player)
|
||||
@ -303,7 +329,6 @@ public abstract class SuperSmash extends Game
|
||||
|
||||
UtilInv.remove(player, Material.NETHER_STAR, (byte) 0, 1);
|
||||
|
||||
player.setHealth(player.getMaxHealth());
|
||||
player.playSound(player.getLocation(), ultimate.getSound(), 10, 1);
|
||||
|
||||
Announce(C.Bold + event.getPlayer().getName() + " activated " + C.cGreenB + name + ChatColor.RESET + C.Bold + "!");
|
||||
@ -457,7 +482,7 @@ public abstract class SuperSmash extends Game
|
||||
private void giveSmashItem(Player player)
|
||||
{
|
||||
int amount = 1;
|
||||
if(GetKit(player) instanceof KitSnowman)
|
||||
if (GetKit(player) instanceof KitSnowman)
|
||||
{
|
||||
amount = 3;
|
||||
}
|
||||
@ -488,6 +513,22 @@ public abstract class SuperSmash extends Game
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void expireRespawnTime(PlayerInteractEvent event)
|
||||
{
|
||||
if (!IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (player.getItemInHand() != null)
|
||||
{
|
||||
_respawnTime.remove(player);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void knockback(CustomDamageEvent event)
|
||||
{
|
||||
@ -499,11 +540,29 @@ public abstract class SuperSmash extends Game
|
||||
if (event.GetDamageePlayer() != null)
|
||||
{
|
||||
Player player = event.GetDamageePlayer();
|
||||
Long respawnTime = _respawnTime.get(player);
|
||||
|
||||
if (respawnTime != null && !UtilTime.elapsed(respawnTime, RESPAWN_INVUL))
|
||||
{
|
||||
event.SetCancelled("Just Respawned");
|
||||
}
|
||||
|
||||
event.AddKnockback("Smash Knockback", 1 + 0.1 * (player.getMaxHealth() - player.getHealth()));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void velocity(PlayerVelocityEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
Long respawnTime = _respawnTime.get(player);
|
||||
|
||||
if (respawnTime != null && !UtilTime.elapsed(respawnTime, RESPAWN_INVUL))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void arenaBoundry(CustomDamageEvent event)
|
||||
{
|
||||
@ -576,6 +635,14 @@ public abstract class SuperSmash extends Game
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void RespawnPlayer(Player player)
|
||||
{
|
||||
super.RespawnPlayer(player);
|
||||
|
||||
_respawnTime.put(player, System.currentTimeMillis());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void abilityDescription(PlayerInteractEvent event)
|
||||
{
|
||||
|
@ -1,29 +1,34 @@
|
||||
package nautilus.game.arcade.game.games.smash;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.hologram.Hologram;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.games.smash.events.SmashActivateEvent;
|
||||
import nautilus.game.arcade.game.modules.TrainingGameModule;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.hologram.Hologram;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.games.smash.events.SmashActivateEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.game.modules.TrainingGameModule;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
|
||||
public class SuperSmashTraining extends SuperSmash
|
||||
{
|
||||
@ -37,9 +42,10 @@ public class SuperSmashTraining extends SuperSmash
|
||||
C.cYellow + "Click the " + C.cGreen + "Bed" + C.cYellow + " to return to this island"
|
||||
};
|
||||
|
||||
private final TrainingGameModule _trainingModule;
|
||||
private Location _borderA;
|
||||
private Location _borderB;
|
||||
private Function<Player, Boolean> _safeFunction = player -> !UtilAlg.inBoundingBox(player.getLocation(), _borderA, _borderB);
|
||||
private Predicate<Player> _safeFunction = player -> !UtilAlg.inBoundingBox(player.getLocation(), _borderA, _borderB);
|
||||
private Map<UUID, Long> _lastDeath;
|
||||
|
||||
private boolean _announceEnd;
|
||||
@ -58,10 +64,15 @@ public class SuperSmashTraining extends SuperSmash
|
||||
|
||||
_lastDeath = new HashMap<>();
|
||||
|
||||
new TrainingGameModule()
|
||||
_trainingModule = new TrainingGameModule()
|
||||
.setSkillFunction(_safeFunction)
|
||||
.setDamageFunction(_safeFunction)
|
||||
.register(this);
|
||||
.setKitSelectFunction(player ->
|
||||
{
|
||||
Kit kit = GetKit(player);
|
||||
return kit != null && kit instanceof SmashKit && !((SmashKit) kit).isSmashActive(player);
|
||||
});
|
||||
_trainingModule.register(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -169,7 +180,7 @@ public class SuperSmashTraining extends SuperSmash
|
||||
|
||||
for (Player player : GetPlayers(true))
|
||||
{
|
||||
if (_safeFunction.apply(player))
|
||||
if (_safeFunction.test(player))
|
||||
{
|
||||
_lastDeath.remove(player.getUniqueId());
|
||||
}
|
||||
@ -179,10 +190,12 @@ public class SuperSmashTraining extends SuperSmash
|
||||
@EventHandler
|
||||
public void smashActivate(SmashActivateEvent event)
|
||||
{
|
||||
if (!_safeFunction.apply(event.getPlayer()))
|
||||
if (!_safeFunction.test(event.getPlayer()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
_trainingModule.preventReturnToSpawn(event.getPlayer());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -219,7 +232,7 @@ public class SuperSmashTraining extends SuperSmash
|
||||
return UtilTime.elapsed(_lastDeath.get(player.getUniqueId()), 4000);
|
||||
}
|
||||
|
||||
return super.displayKitInfo(player) || !_safeFunction.apply(player);
|
||||
return super.displayKitInfo(player) || !_safeFunction.test(player);
|
||||
}
|
||||
|
||||
private void spawnInfoHologram(Location location)
|
||||
|
@ -1,5 +0,0 @@
|
||||
package nautilus.game.arcade.game.games.smash.items;
|
||||
|
||||
public class SmashItem {
|
||||
|
||||
}
|
@ -67,10 +67,10 @@ public class KitBlaze extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET)
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)
|
||||
};
|
||||
|
||||
|
||||
|
@ -54,8 +54,7 @@ public class KitChicken extends SmashKit
|
||||
C.cYellow + C.Bold + "Passive" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Flap",
|
||||
new String[]{
|
||||
ChatColor.RESET + "You are able to use your double jump",
|
||||
ChatColor.RESET + "up to 6 times in a row. However, with",
|
||||
ChatColor.RESET + "each flap, it loses some potency.",
|
||||
ChatColor.RESET + "up to 6 times in a row.",
|
||||
ChatColor.RESET + "",
|
||||
ChatColor.RESET + C.cAqua + "Flap uses Energy (Experience Bar)",
|
||||
}),
|
||||
@ -71,7 +70,7 @@ public class KitChicken extends SmashKit
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
null,
|
||||
null,
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
null
|
||||
};
|
||||
|
||||
@ -94,6 +93,10 @@ public class KitChicken extends SmashKit
|
||||
{
|
||||
player.getInventory().addItem(PLAYER_ITEMS[2], PLAYER_ITEMS[3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.setExp(0.999f);
|
||||
}
|
||||
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
||||
}
|
||||
|
@ -74,10 +74,10 @@ public class KitCow extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.IRON_BOOTS),
|
||||
new ItemStack(Material.IRON_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.IRON_HELMET),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_HELMET),
|
||||
};
|
||||
|
||||
|
||||
|
@ -75,10 +75,10 @@ public class KitCreeper extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.LEATHER_BOOTS),
|
||||
new ItemStack(Material.LEATHER_LEGGINGS),
|
||||
new ItemStack(Material.LEATHER_CHESTPLATE),
|
||||
new ItemStack(Material.LEATHER_HELMET),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.LEATHER_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.LEATHER_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.LEATHER_HELMET),
|
||||
};
|
||||
|
||||
public KitCreeper(ArcadeManager manager)
|
||||
|
@ -1,11 +1,27 @@
|
||||
package nautilus.game.arcade.game.games.smash.kits;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.Pair;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseBase;
|
||||
import mineplex.core.disguise.disguises.DisguiseEnderman;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
@ -19,13 +35,6 @@ import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
import nautilus.game.arcade.kit.perks.event.PerkBlockGrabEvent;
|
||||
import nautilus.game.arcade.kit.perks.event.PerkBlockThrowEvent;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class KitEnderman extends SmashKit
|
||||
{
|
||||
@ -70,16 +79,19 @@ public class KitEnderman extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||
};
|
||||
|
||||
private final Map<Player, Pair<Integer, Byte>> _heldBlock;
|
||||
|
||||
public KitEnderman(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Enderman", KitAvailability.Gem, 3000, PERKS, EntityType.ENDERMAN, IN_HAND, DisguiseEnderman.class);
|
||||
|
||||
_heldBlock = new HashMap<>(4);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -102,19 +114,36 @@ public class KitEnderman extends SmashKit
|
||||
@EventHandler
|
||||
public void BlockGrab(PerkBlockGrabEvent event)
|
||||
{
|
||||
setBlock(event.GetPlayer(), event.GetId(), event.GetData());
|
||||
setBlock(event.GetPlayer(), event.GetId(), event.GetData(), true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void BlockThrow(PerkBlockThrowEvent event)
|
||||
{
|
||||
setBlock(event.GetPlayer(), 0, (byte) 0);
|
||||
setBlock(event.GetPlayer(), 0, (byte) 0, true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Death(PlayerDeathEvent event)
|
||||
{
|
||||
setBlock(event.getEntity(), 0, (byte) 0);
|
||||
setBlock(event.getEntity(), 0, (byte) 0, true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateHeldBlock(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SEC || !Manager.GetGame().IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_heldBlock.forEach((player, pair) -> setBlock(player, pair.getLeft(), pair.getRight(), false));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
_heldBlock.remove(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -129,14 +158,14 @@ public class KitEnderman extends SmashKit
|
||||
|
||||
DisguiseBase disguise = Manager.GetDisguise().getActiveDisguise(player);
|
||||
|
||||
if (player != null && disguise != null && disguise instanceof DisguiseEnderman)
|
||||
if (disguise != null && disguise instanceof DisguiseEnderman)
|
||||
{
|
||||
// Endermen drop their held block when damaged. This means the client renders it this way, so we need to resend the correct data on the next tick.
|
||||
Manager.runSyncLater(() -> Manager.GetDisguise().updateDisguise(disguise), 1);
|
||||
}
|
||||
}
|
||||
|
||||
public void setBlock(Player player, int id, byte data)
|
||||
public void setBlock(Player player, int id, byte data, boolean save)
|
||||
{
|
||||
DisguiseBase disguise = Manager.GetDisguise().getActiveDisguise(player);
|
||||
|
||||
@ -147,6 +176,11 @@ public class KitEnderman extends SmashKit
|
||||
disguiseEnderman.SetCarriedData(data);
|
||||
|
||||
Manager.GetDisguise().updateDisguise(disguiseEnderman);
|
||||
|
||||
if (save)
|
||||
{
|
||||
_heldBlock.put(player, Pair.create(id, data));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
import nautilus.game.arcade.kit.perks.PerkIronHook;
|
||||
import nautilus.game.arcade.kit.perks.PerkSeismicSlam;
|
||||
import nautilus.game.arcade.game.games.smash.perks.golem.PerkSeismicSlam;
|
||||
import nautilus.game.arcade.kit.perks.PerkSlow;
|
||||
|
||||
public class KitGolem extends SmashKit
|
||||
@ -70,10 +70,10 @@ public class KitGolem extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.DIAMOND_BOOTS),
|
||||
new ItemStack(Material.IRON_LEGGINGS),
|
||||
new ItemStack(Material.IRON_CHESTPLATE),
|
||||
new ItemStack(Material.IRON_HELMET),
|
||||
ItemStackFactory.Instance.CreateStack(Material.DIAMOND_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_HELMET),
|
||||
};
|
||||
|
||||
public KitGolem(ArcadeManager manager)
|
||||
|
@ -79,8 +79,8 @@ public class KitGuardian extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.DIAMOND_BOOTS),
|
||||
new ItemStack(Material.DIAMOND_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.DIAMOND_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.DIAMOND_LEGGINGS),
|
||||
null,
|
||||
null,
|
||||
};
|
||||
|
@ -67,7 +67,7 @@ public class KitMagmaCube extends SmashKit
|
||||
C.cYellow + C.Bold + "Passive" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Fuel the Fire",
|
||||
new String[]
|
||||
{
|
||||
ChatColor.RESET + "Each kill increases your size, damage",
|
||||
ChatColor.RESET + "Each kill increases your size, damage,",
|
||||
ChatColor.RESET + "armor and decreases your knockback taken.",
|
||||
ChatColor.RESET + "Resets on death.",
|
||||
}),
|
||||
@ -82,10 +82,10 @@ public class KitMagmaCube extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
null,
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||
};
|
||||
|
||||
public KitMagmaCube(ArcadeManager manager)
|
||||
|
@ -83,9 +83,9 @@ public class KitPig extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
null,
|
||||
};
|
||||
|
||||
@ -130,7 +130,7 @@ public class KitPig extends SmashKit
|
||||
continue;
|
||||
}
|
||||
|
||||
player.setExp((float) Math.min(MAX_ENERGY, player.getExp() + (isSmashActive(player) ? ENERGY_PER_TICK_SMASH : ENERGY_PER_TICK_NORMAL)));
|
||||
player.setExp(Math.min(MAX_ENERGY, player.getExp() + (isSmashActive(player) ? ENERGY_PER_TICK_SMASH : ENERGY_PER_TICK_NORMAL)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ import mineplex.core.disguise.disguises.DisguiseSheep;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.SuperSmash;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.game.games.smash.perks.sheep.SmashSheep;
|
||||
@ -79,21 +80,11 @@ public class KitSheep extends SmashKit
|
||||
null
|
||||
};
|
||||
|
||||
private static final Achievement[] ACHIEVEMENTS = {
|
||||
Achievement.SMASH_MOBS_1V3,
|
||||
Achievement.SMASH_MOBS_FREE_KITS,
|
||||
Achievement.SMASH_MOBS_MLG_PRO,
|
||||
Achievement.SMASH_MOBS_RECOVERY_MASTER,
|
||||
Achievement.SMASH_MOBS_TRIPLE_KILL,
|
||||
Achievement.SMASH_MOBS_WINS
|
||||
};
|
||||
|
||||
|
||||
public KitSheep(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Sir. Sheep", KitAvailability.Achievement, 99999, PERKS, EntityType.SHEEP, IN_HAND, DisguiseSheep.class);
|
||||
|
||||
this.setAchievementRequirements(ACHIEVEMENTS);
|
||||
this.setAchievementRequirements(SuperSmash.ACHIEVEMENTS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -8,9 +8,11 @@ import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Horse;
|
||||
import org.bukkit.entity.Horse.Variant;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Skeleton;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseHorse;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
@ -79,10 +81,10 @@ public class KitSkeletalHorse extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.IRON_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||
};
|
||||
|
||||
public KitSkeletalHorse(ArcadeManager manager)
|
||||
@ -112,8 +114,17 @@ public class KitSkeletalHorse extends SmashKit
|
||||
@Override
|
||||
public Entity SpawnEntity(Location loc)
|
||||
{
|
||||
Horse horse = UtilVariant.spawnHorse(loc, Variant.SKELETON_HORSE);
|
||||
Horse entity = UtilVariant.spawnHorse(loc, Variant.SKELETON_HORSE);
|
||||
|
||||
return horse;
|
||||
entity.setRemoveWhenFarAway(false);
|
||||
entity.setCustomName(GetAvailability().GetColor() + GetName() + " Kit");
|
||||
entity.setCustomNameVisible(true);
|
||||
entity.getEquipment().setItemInHand(_itemInHand);
|
||||
|
||||
UtilEnt.vegetate(entity, true);
|
||||
UtilEnt.ghost(entity, true, false);
|
||||
UtilEnt.setFakeHead(entity, true);
|
||||
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseSkeleton;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
@ -32,7 +33,7 @@ import nautilus.game.arcade.kit.perks.PerkRopedArrow;
|
||||
public class KitSkeleton extends SmashKit
|
||||
{
|
||||
|
||||
private static double ARROW_DAMAGE = 6;
|
||||
private static final double ARROW_DAMAGE = 6;
|
||||
|
||||
private static final Perk[] PERKS = {
|
||||
new PerkSmashStats(),
|
||||
@ -81,10 +82,10 @@ public class KitSkeleton extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||
};
|
||||
|
||||
|
||||
|
@ -75,9 +75,9 @@ public class KitSkySquid extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
null
|
||||
};
|
||||
|
||||
|
@ -66,10 +66,10 @@ public class KitSlime extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
null,
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||
};
|
||||
|
||||
public KitSlime(ArcadeManager manager)
|
||||
|
@ -62,10 +62,10 @@ public class KitSnowman extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||
};
|
||||
|
||||
public KitSnowman(ArcadeManager manager)
|
||||
|
@ -80,10 +80,10 @@ public class KitSpider extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_BOOTS),
|
||||
null,
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||
};
|
||||
|
||||
public KitSpider(ArcadeManager manager)
|
||||
|
@ -0,0 +1,306 @@
|
||||
package nautilus.game.arcade.game.games.smash.kits;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Villager.Profession;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.disguise.disguises.DisguiseBase;
|
||||
import mineplex.core.disguise.disguises.DisguiseVillager;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.smash.SuperSmash;
|
||||
import nautilus.game.arcade.game.games.smash.events.SmashActivateEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||
import nautilus.game.arcade.game.games.smash.perks.villager.PerkArts;
|
||||
import nautilus.game.arcade.game.games.smash.perks.villager.PerkSonicBoom;
|
||||
import nautilus.game.arcade.game.games.smash.perks.villager.PerkVillagerShot;
|
||||
import nautilus.game.arcade.game.games.smash.perks.villager.SmashVillager;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||
|
||||
public class KitVillager extends SmashKit
|
||||
{
|
||||
|
||||
private static final Perk[] PERKS = {
|
||||
new PerkSmashStats(),
|
||||
new PerkDoubleJump("Double Jump"),
|
||||
new PerkSonicBoom(),
|
||||
new PerkVillagerShot(),
|
||||
new PerkArts(),
|
||||
new SmashVillager()
|
||||
};
|
||||
|
||||
private static final ItemStack IN_HAND = new ItemStack(Material.WHEAT);
|
||||
|
||||
private static final ItemStack[] PLAYER_ITEMS = {
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte) 0, 1,
|
||||
C.cYellowB + "Right-Click" + C.cWhiteB + " - " + C.cGreenB + "Sonic Hurr",
|
||||
new String[]{
|
||||
C.Reset + "Screech at the top of your lungs piercing players ears",
|
||||
C.Reset + "dealing damage and knockback in front of you.",
|
||||
}),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_HOE, (byte) 0, 1,
|
||||
C.cYellowB + "Right-Click" + C.cWhiteB + " - " + C.cGreenB + "Trade Scatter",
|
||||
new String[]{
|
||||
C.Reset + "After a hard days work of trading with the players,",
|
||||
C.Reset + "you unload your goods upon your enemies,",
|
||||
C.Reset + "propelling you back or forth depending on your trade skills",
|
||||
C.Reset + "and throwing your favorite items in the opposite direction."
|
||||
}),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_SPADE, (byte) 0, 1,
|
||||
C.cYellowB + "Right-Click" + C.cWhiteB + " - " + C.cGreenB + "Cycle Arts",
|
||||
new String[]{
|
||||
C.Reset + "Use your schooling from villager academy to hone in on one of",
|
||||
C.Reset + "three arts you specialized in and that give you different stats.",
|
||||
C.Reset + "Press right click to switch between arts and drop to activate.",
|
||||
}),
|
||||
ItemStackFactory.Instance.CreateStack(Material.NETHER_STAR, (byte) 0, 1,
|
||||
C.cYellowB + "Smash Crystal" + C.cWhiteB + " - " + C.cGreenB + "Perfection",
|
||||
new String[]{
|
||||
C.Reset + "Master all of the three arts and reaching perfection!",
|
||||
C.Reset + "You gain all of the positive effects from all three arts."
|
||||
}),
|
||||
};
|
||||
|
||||
public static final int ART_ACTIVE_SLOT = 2;
|
||||
public static final int ART_VISUAL_SLOT = 7;
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR_NORMAL = {
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
null,
|
||||
};
|
||||
private static final ItemStack[] PLAYER_ARMOR_ATTACK = {
|
||||
ItemStackFactory.Instance.CreateStack(Material.GOLD_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.GOLD_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.GOLD_CHESTPLATE),
|
||||
null,
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR_DEFENSE = {
|
||||
ItemStackFactory.Instance.CreateStack(Material.DIAMOND_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.DIAMOND_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_CHESTPLATE),
|
||||
null,
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR_SPEED = {
|
||||
null,
|
||||
null,
|
||||
ItemStackFactory.Instance.CreateStack(Material.DIAMOND_CHESTPLATE),
|
||||
null,
|
||||
};
|
||||
|
||||
|
||||
private final Map<Player, VillagerType> _types = new HashMap<>();
|
||||
|
||||
public KitVillager(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Villager", KitAvailability.Achievement, 0, PERKS, EntityType.VILLAGER, IN_HAND, DisguiseVillager.class);
|
||||
|
||||
setAchievementRequirements(SuperSmash.ACHIEVEMENTS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
_types.putIfAbsent(player, VillagerType.ATTACK);
|
||||
VillagerType type = get(player);
|
||||
|
||||
disguise(player);
|
||||
|
||||
UtilInv.Clear(player);
|
||||
|
||||
player.getInventory().addItem(PLAYER_ITEMS[0], PLAYER_ITEMS[1]);
|
||||
|
||||
if (Manager.GetGame().GetState() == GameState.Recruit)
|
||||
{
|
||||
player.getInventory().addItem(PLAYER_ITEMS[2], PLAYER_ITEMS[3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.getInventory().setItem(ART_ACTIVE_SLOT, getArtItem(type, false));
|
||||
player.getInventory().setItem(ART_VISUAL_SLOT, getArtVisualItem(player, type));
|
||||
}
|
||||
|
||||
giveArmour(player, false);
|
||||
}
|
||||
|
||||
public void giveArmour(Player player, boolean active)
|
||||
{
|
||||
if (!active)
|
||||
{
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR_NORMAL);
|
||||
return;
|
||||
}
|
||||
|
||||
VillagerType type = get(player);
|
||||
player.getInventory().setArmorContents(type.getArmour());
|
||||
}
|
||||
|
||||
public void updateDisguise(Player player, Profession profession)
|
||||
{
|
||||
DisguiseBase disguise = Manager.GetDisguise().getActiveDisguise(player);
|
||||
|
||||
if (disguise == null || !(disguise instanceof DisguiseVillager))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
((DisguiseVillager) disguise).setProfession(profession);
|
||||
Manager.GetDisguise().updateDisguise(disguise);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
_types.remove(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void smashActivate(SmashActivateEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (HasKit(player))
|
||||
{
|
||||
player.getInventory().setArmorContents(PLAYER_ARMOR_DEFENSE);
|
||||
}
|
||||
}
|
||||
|
||||
public VillagerType get(Player player)
|
||||
{
|
||||
return _types.get(player);
|
||||
}
|
||||
|
||||
public void set(Player player, VillagerType type)
|
||||
{
|
||||
_types.put(player, type);
|
||||
}
|
||||
|
||||
public ItemStack getArtItem(Player player, boolean active)
|
||||
{
|
||||
return getArtItem(get(player), active);
|
||||
}
|
||||
|
||||
public ItemStack getArtItem(VillagerType type, boolean active)
|
||||
{
|
||||
return new ItemBuilder(Material.IRON_SPADE)
|
||||
.setTitle(C.cYellowB + "Right-Click/Drop" + C.cWhiteB + " - " + (active ? ChatColor.GRAY : type.getChatColour()) + C.Bold + type.getName())
|
||||
.setUnbreakable(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
public ItemStack getArtVisualItem(Player player, VillagerType type)
|
||||
{
|
||||
return getArtVisualItem(type, !Recharge.Instance.usable(player, type.getName()));
|
||||
}
|
||||
|
||||
public ItemStack getArtVisualItem(VillagerType type, boolean active)
|
||||
{
|
||||
if (!active)
|
||||
{
|
||||
return new ItemBuilder(Material.INK_SACK, type.getDyeData())
|
||||
.setTitle(type.getChatColour() + C.Bold + type.getName())
|
||||
.build();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new ItemBuilder(Material.STAINED_GLASS_PANE, DyeColor.getByDyeData(type.getDyeData()).getWoolData())
|
||||
.setTitle(C.cGrayB + type.getName())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
public VillagerType getActiveArt(Player player)
|
||||
{
|
||||
for (Perk perk : GetPerks())
|
||||
{
|
||||
if (perk instanceof PerkArts)
|
||||
{
|
||||
return ((PerkArts) perk).getActiveArt(player);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public enum VillagerType
|
||||
{
|
||||
|
||||
ATTACK("Butcher", ChatColor.RED, Color.RED, 1, Profession.BUTCHER, PLAYER_ARMOR_ATTACK),
|
||||
DEFENSE("Blacksmith", ChatColor.GOLD, Color.ORANGE, 14, Profession.BLACKSMITH, PLAYER_ARMOR_DEFENSE),
|
||||
SPEED("Speedster", ChatColor.GREEN, Color.LIME, 10, Profession.LIBRARIAN, PLAYER_ARMOR_SPEED);
|
||||
|
||||
private final String _name;
|
||||
private final ChatColor _chatColour;
|
||||
private final Color _colour;
|
||||
private final byte _dyeData;
|
||||
private final Profession _profession;
|
||||
private final ItemStack[] _armour;
|
||||
|
||||
VillagerType(String name, ChatColor chatColour, Color colour, int dyeData, Profession profession, ItemStack[] armour)
|
||||
{
|
||||
_name = name;
|
||||
_chatColour = chatColour;
|
||||
_colour = colour;
|
||||
_dyeData = (byte) dyeData;
|
||||
_profession = profession;
|
||||
_armour = armour;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
public ChatColor getChatColour()
|
||||
{
|
||||
return _chatColour;
|
||||
}
|
||||
|
||||
public Color getColour()
|
||||
{
|
||||
return _colour;
|
||||
}
|
||||
|
||||
public byte getDyeData()
|
||||
{
|
||||
return _dyeData;
|
||||
}
|
||||
|
||||
public Profession getProfession()
|
||||
{
|
||||
return _profession;
|
||||
}
|
||||
|
||||
public ItemStack[] getArmour()
|
||||
{
|
||||
return _armour;
|
||||
}
|
||||
|
||||
public VillagerType getNext()
|
||||
{
|
||||
return ordinal() == values().length - 1 ? values()[0] : values()[ordinal() + 1];
|
||||
}
|
||||
}
|
||||
}
|
@ -75,9 +75,9 @@ public class KitWitch extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
null
|
||||
};
|
||||
|
||||
|
@ -41,8 +41,7 @@ public class KitWitherSkeleton extends SmashKit
|
||||
C.cYellow + C.Bold + "Hold Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Guided Wither Skull",
|
||||
new String[]{
|
||||
ChatColor.RESET + "Launch a Wither Skull forwards, hold",
|
||||
ChatColor.RESET + "block to guide the missile! Release",
|
||||
ChatColor.RESET + "block to detonate it midair.",
|
||||
ChatColor.RESET + "block to guide the missile!"
|
||||
}),
|
||||
ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte) 0, 1,
|
||||
C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Wither Image",
|
||||
@ -70,10 +69,10 @@ public class KitWitherSkeleton extends SmashKit
|
||||
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
new ItemStack(Material.CHAINMAIL_HELMET)
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)
|
||||
};
|
||||
|
||||
public KitWitherSkeleton(ArcadeManager manager)
|
||||
|
@ -67,8 +67,8 @@ public class KitWolf extends SmashKit
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
null,
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
null
|
||||
};
|
||||
|
||||
|
@ -77,9 +77,9 @@ public class KitZombie extends SmashKit
|
||||
};
|
||||
|
||||
private static final ItemStack[] PLAYER_ARMOR = {
|
||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||
null,
|
||||
};
|
||||
|
||||
|
@ -1,16 +1,17 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkSmashStats extends Perk
|
||||
{
|
||||
@ -62,17 +63,8 @@ public class PerkSmashStats extends Perk
|
||||
public void Knockback(CustomDamageEvent event)
|
||||
{
|
||||
Player damagee = event.GetDamageePlayer();
|
||||
if (damagee == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Kit.HasKit(damagee))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Manager.IsAlive(damagee))
|
||||
if (damagee == null || !Kit.HasKit(damagee) || !Manager.IsAlive(damagee))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -98,14 +90,4 @@ public class PerkSmashStats extends Perk
|
||||
UtilPlayer.health(player, _regen);
|
||||
}
|
||||
}
|
||||
|
||||
public double getArmour()
|
||||
{
|
||||
return _armor;
|
||||
}
|
||||
|
||||
public void setArmor(double armor)
|
||||
{
|
||||
_armor = armor;
|
||||
}
|
||||
}
|
||||
|
@ -1,29 +1,36 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
import java.util.*;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class SmashUltimate extends Perk
|
||||
{
|
||||
|
||||
private static final int MIN_ULTIAMTE_DISPLAY_TIME = 1000;
|
||||
private static final int MIN_ULTIMATE_DISPLAY_TIME = 1000;
|
||||
|
||||
private Map<UUID, Long> _lastUltimate = new HashMap<>();
|
||||
private final Map<UUID, Long> _lastUltimate = new HashMap<>();
|
||||
|
||||
private Sound _sound;
|
||||
private final Sound _sound;
|
||||
private int _length;
|
||||
|
||||
public SmashUltimate(String name, String[] perkDesc, Sound sound, int length)
|
||||
@ -42,9 +49,10 @@ public class SmashUltimate extends Perk
|
||||
|
||||
public void activate(Player player)
|
||||
{
|
||||
player.setHealth(player.getMaxHealth());
|
||||
_lastUltimate.put(player.getUniqueId(), System.currentTimeMillis());
|
||||
|
||||
if (_length > MIN_ULTIAMTE_DISPLAY_TIME)
|
||||
if (_length > MIN_ULTIMATE_DISPLAY_TIME)
|
||||
{
|
||||
Recharge recharge = Recharge.Instance;
|
||||
|
||||
@ -57,9 +65,12 @@ public class SmashUltimate extends Perk
|
||||
|
||||
public void cancel(Player player)
|
||||
{
|
||||
_lastUltimate.remove(player.getUniqueId());
|
||||
if (_lastUltimate.remove(player.getUniqueId()) == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_length > MIN_ULTIAMTE_DISPLAY_TIME)
|
||||
if (_length > MIN_ULTIMATE_DISPLAY_TIME)
|
||||
{
|
||||
player.sendMessage(F.main("Game", "Deactivated " + F.skill(GetName()) + "."));
|
||||
player.playSound(player.getLocation(), Sound.BLAZE_DEATH, 1, 0);
|
||||
@ -122,13 +133,16 @@ public class SmashUltimate extends Perk
|
||||
@EventHandler
|
||||
public void onGameStateChange(GameStateChangeEvent event)
|
||||
{
|
||||
if (event.GetState() != GameState.End)
|
||||
for (Player player : UtilServer.getPlayersCollection())
|
||||
{
|
||||
for (UUID uuid : _lastUltimate.keySet())
|
||||
{
|
||||
cancel(UtilPlayer.searchExact(uuid));
|
||||
cancel(player);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
_lastUltimate.remove(event.getPlayer().getUniqueId());
|
||||
}
|
||||
|
||||
public boolean isUsingUltimate(Player player)
|
||||
@ -141,7 +155,7 @@ public class SmashUltimate extends Perk
|
||||
return _lastUltimate.containsKey(uuid);
|
||||
}
|
||||
|
||||
public Map<UUID, Long> getLastUltimate()
|
||||
protected Map<UUID, Long> getLastUltimate()
|
||||
{
|
||||
return _lastUltimate;
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
@ -28,6 +29,7 @@ import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.data.FireflyData;
|
||||
@ -151,12 +153,6 @@ public class PerkFirefly extends SmashPerk
|
||||
boolean superActive = isSuperActive(data.Player);
|
||||
String skillName = superActive ? "Phoenix" : GetName();
|
||||
|
||||
if (UtilPlayer.isSpectator(player))
|
||||
{
|
||||
dataIterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
// Warmup
|
||||
if (!UtilTime.elapsed(data.Time, _warmupTime) && !superActive)
|
||||
{
|
||||
@ -249,7 +245,7 @@ public class PerkFirefly extends SmashPerk
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!UtilTime.elapsed(data.Time, 1250) && !isSuperActive(data.Player))
|
||||
if (!UtilTime.elapsed(data.Time, _warmupTime) && !isSuperActive(data.Player))
|
||||
{
|
||||
if (isTeamDamage(data.Player, event.GetDamagerPlayer(true)))
|
||||
{
|
||||
@ -275,4 +271,10 @@ public class PerkFirefly extends SmashPerk
|
||||
|
||||
event.AddKnockback(GetName(), _knockbackMagnitude);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerDeath(PlayerDeathEvent event)
|
||||
{
|
||||
_data.removeIf(data -> data.Player.equals(event.getEntity()));
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Item;
|
||||
@ -30,6 +31,7 @@ public class PerkInferno extends SmashPerk
|
||||
{
|
||||
|
||||
private static final float MAX_ENERGY = 0.999F;
|
||||
private static final ItemStack POWDER = new ItemStack(Material.BLAZE_POWDER);
|
||||
|
||||
private float _energyTick = 0.025F;
|
||||
private float _energyItem = 0.035F;
|
||||
@ -151,23 +153,23 @@ public class PerkInferno extends SmashPerk
|
||||
}
|
||||
|
||||
// Fire
|
||||
Item fire = cur.getWorld().dropItem(cur.getEyeLocation(), new ItemStack(Material.BLAZE_POWDER));
|
||||
Location location = cur.getEyeLocation();
|
||||
Item fire = cur.getWorld().dropItem(location, POWDER);
|
||||
Manager.GetFire().Add(fire, cur, _itemExpireTime, 0, _itemBurnTime, _itemDamage, GetName(), false);
|
||||
|
||||
fire.teleport(cur.getEyeLocation());
|
||||
fire.setVelocity(cur.getLocation().getDirection().add(getRandomVector()).multiply(_itemVelocityMagnitude));
|
||||
fire.setVelocity(location.getDirection().multiply(_itemVelocityMagnitude));
|
||||
|
||||
// Effect
|
||||
cur.getWorld().playSound(cur.getLocation(), Sound.GHAST_FIREBALL, 0.1f, 1f);
|
||||
cur.getWorld().playSound(location, Sound.GHAST_FIREBALL, 0.1f, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
private Vector getRandomVector()
|
||||
{
|
||||
double x = 0.07 - (UtilMath.r(14) / 100);
|
||||
double y = 0.07 - (UtilMath.r(14) / 100);
|
||||
double z = 0.07 - (UtilMath.r(14) / 100);
|
||||
|
||||
return new Vector(x, y, z);
|
||||
}
|
||||
// private Vector getRandomVector()
|
||||
// {
|
||||
// double x = 0.07 - (UtilMath.r(14) / 100);
|
||||
// double y = 0.07 - (UtilMath.r(14) / 100);
|
||||
// double z = 0.07 - (UtilMath.r(14) / 100);
|
||||
//
|
||||
// return new Vector(x, y, z);
|
||||
// }
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Egg;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
@ -96,7 +97,7 @@ public class PerkEggGun extends SmashPerk
|
||||
@EventHandler
|
||||
public void Update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
if (event.getType() != UpdateType.TICK || !Manager.GetGame().IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -141,7 +142,7 @@ public class PerkEggGun extends SmashPerk
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void EggHit(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetProjectile() == null || !(event.GetProjectile() instanceof Egg))
|
||||
@ -149,6 +150,7 @@ public class PerkEggGun extends SmashPerk
|
||||
return;
|
||||
}
|
||||
|
||||
Player damagee = event.GetDamageePlayer();
|
||||
Player damager = event.GetDamagerPlayer(true);
|
||||
|
||||
if (damager == null || !hasPerk(damager))
|
||||
@ -159,7 +161,11 @@ public class PerkEggGun extends SmashPerk
|
||||
event.AddMod("Negate", -event.GetDamage());
|
||||
event.AddMod(damager.getName(), "Egg Blaster", _damage, true);
|
||||
event.SetIgnoreRate(true);
|
||||
event.SetKnockback(false);
|
||||
|
||||
if (damagee == null || !isTeamDamage(damagee, damager))
|
||||
{
|
||||
UtilAction.zeroVelocity(event.GetDamageeEntity());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ public class PerkFlap extends SmashPerk
|
||||
// Disable Flight
|
||||
player.setAllowFlight(false);
|
||||
|
||||
double power = 0.4 + 0.6 * (_power * player.getExp());
|
||||
double power = 0.4 + _power;
|
||||
|
||||
// Velocity
|
||||
if (_control)
|
||||
@ -114,7 +114,7 @@ public class PerkFlap extends SmashPerk
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilEnt.isGrounded(player) || UtilBlock.solid(player.getLocation().subtract(0, 2, 0).getBlock()))
|
||||
if (UtilEnt.onBlock(player))
|
||||
{
|
||||
player.setExp(Math.min(MAX_ENERGY, player.getExp() + _energyPerTick));
|
||||
player.setAllowFlight(true);
|
||||
|
@ -1,20 +1,19 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.cow;
|
||||
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
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.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
|
||||
public class DataCowMilkSpiral
|
||||
{
|
||||
public long Time;
|
||||
@ -54,14 +53,14 @@ public class DataCowMilkSpiral
|
||||
Spiral.add(Direction.clone().multiply(0.7));
|
||||
|
||||
//Spiral
|
||||
for (int i=0 ; i<2 ; i++)
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
double lead = i * ((2d * Math.PI)/2);
|
||||
double lead = i * ((2d * Math.PI) / 2);
|
||||
|
||||
//Orbit
|
||||
double speed = 3d;
|
||||
double oX = -Math.sin(Player.getTicksLived()/speed + lead) * 1.5;
|
||||
double oZ = Math.cos(Player.getTicksLived()/speed + lead) * 1.5;
|
||||
double oX = -Math.sin(Player.getTicksLived() / speed + lead) * 1.5;
|
||||
double oZ = Math.cos(Player.getTicksLived() / speed + lead) * 1.5;
|
||||
|
||||
Location newSpiral = Spiral.clone();
|
||||
newSpiral.add(UtilAlg.getLeft(Direction).multiply(oX));
|
||||
@ -103,9 +102,7 @@ public class DataCowMilkSpiral
|
||||
}
|
||||
}
|
||||
|
||||
if (UtilBlock.solid(Spiral.getBlock()))
|
||||
return true;
|
||||
return UtilTime.elapsed(Time, 3000);
|
||||
|
||||
return (UtilTime.elapsed(Time, 3000));
|
||||
}
|
||||
}
|
||||
|
@ -21,10 +21,10 @@ 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.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkCowMilkSpiral extends SmashPerk
|
||||
@ -113,17 +113,16 @@ public class PerkCowMilkSpiral extends SmashPerk
|
||||
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (player.equals(data.Player) || !Recharge.Instance.use(player, GetName() + " Rate", 3000, false, false))
|
||||
if (player.equals(data.Player) || !Recharge.Instance.use(player, GetName() + " Rate", 500, false, false))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilMath.offset(player.getLocation().add(0, 1, 0), data.Spiral) < _hitBoxRadius)
|
||||
if (UtilMath.offset(player.getLocation().add(0, 1.5, 0), data.Spiral) < _hitBoxRadius)
|
||||
{
|
||||
Manager.GetDamage().NewDamageEvent(player, data.Player, null, DamageCause.CUSTOM, _damage, true, false, false, player.getName(), GetName());
|
||||
|
||||
UtilParticle.PlayParticle(isSuperActive(player) ? ParticleType.RED_DUST : ParticleType.FIREWORKS_SPARK, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0.3f, 30,
|
||||
ViewDist.LONG, UtilServer.getPlayers());
|
||||
UtilParticle.PlayParticleToAll(isSuperActive(player) ? ParticleType.RED_DUST : ParticleType.FIREWORKS_SPARK, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0.3f, 30, ViewDist.LONG);
|
||||
player.getWorld().playSound(player.getLocation(), Sound.SPLASH, 0.25f, 2f);
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ public class PerkCowStampede extends SmashPerk
|
||||
{
|
||||
|
||||
private long _speedTime;
|
||||
private double _stopSprintDamage;
|
||||
|
||||
private Map<UUID, Long> _sprintTime = new HashMap<>();
|
||||
private Map<UUID, Integer> _sprintStr = new HashMap<>();
|
||||
@ -45,6 +46,7 @@ public class PerkCowStampede extends SmashPerk
|
||||
public void setupValues()
|
||||
{
|
||||
_speedTime = getPerkTime("Speed Time");
|
||||
_stopSprintDamage = getPerkDouble("Stop Sprint Damage");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -202,7 +204,7 @@ public class PerkCowStampede extends SmashPerk
|
||||
UtilServer.getServer().getPluginManager().callEvent(new SkillEvent(damager, GetName(), ClassType.Brute, damagee));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
@EventHandler
|
||||
public void damageCancel(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
@ -212,7 +214,7 @@ public class PerkCowStampede extends SmashPerk
|
||||
|
||||
Player damagee = event.GetDamageePlayer();
|
||||
|
||||
if (damagee == null)
|
||||
if (damagee == null || event.GetDamage() < _stopSprintDamage)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -1,15 +1,24 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.creeper;
|
||||
|
||||
import mineplex.core.common.util.*;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
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.itemstack.ItemStackFactory;
|
||||
import mineplex.core.projectile.IThrown;
|
||||
import mineplex.core.projectile.ProjectileUser;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
import org.bukkit.Material;
|
||||
@ -21,21 +30,13 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PerkCreeperSulphurBomb extends SmashPerk
|
||||
{
|
||||
|
||||
private static ItemStack POWDER = new ItemStack(Material.SULPHUR);
|
||||
|
||||
private int _cooldown;
|
||||
private float _damage;
|
||||
private float _knockbackMagnitude;
|
||||
private float _damagePowder;
|
||||
|
||||
private final IThrown _sulphurThrown = new IThrown()
|
||||
{
|
||||
@ -71,41 +72,6 @@ public class PerkCreeperSulphurBomb extends SmashPerk
|
||||
data.getThrown().remove();
|
||||
}
|
||||
|
||||
private void Explode(ProjectileUser data)
|
||||
{
|
||||
UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.getThrown().getLocation(), 0, 0, 0, 0, 1, ViewDist.MAX, UtilServer.getPlayers());
|
||||
data.getThrown().getWorld().playSound(data.getThrown().getLocation(), Sound.EXPLODE, 1f, 1.5f);
|
||||
data.getThrown().remove();
|
||||
}
|
||||
};
|
||||
private final IThrown _powderThrown = new IThrown()
|
||||
{
|
||||
@Override
|
||||
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
||||
{
|
||||
Explode(data);
|
||||
|
||||
if (target == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.PROJECTILE, _damagePowder, false, true, false, UtilEnt.getName(data.getThrower()), GetName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Idle(ProjectileUser data)
|
||||
{
|
||||
Explode(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Expire(ProjectileUser data)
|
||||
{
|
||||
Explode(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ChunkUnload(ProjectileUser data)
|
||||
{
|
||||
@ -114,15 +80,12 @@ public class PerkCreeperSulphurBomb extends SmashPerk
|
||||
|
||||
private void Explode(ProjectileUser data)
|
||||
{
|
||||
UtilParticle.PlayParticleToAll(ParticleType.EXPLODE, data.getThrown().getLocation(), 0, 0, 0, 0, 1, ViewDist.LONG);
|
||||
data.getThrown().getWorld().playSound(data.getThrown().getLocation(), Sound.EXPLODE, 1f, 2f);
|
||||
UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, data.getThrown().getLocation(), 0, 0, 0, 0, 1, ViewDist.MAX, UtilServer.getPlayers());
|
||||
data.getThrown().getWorld().playSound(data.getThrown().getLocation(), Sound.EXPLODE, 1f, 1.5f);
|
||||
data.getThrown().remove();
|
||||
_sulphur.remove(data.getThrower().getUniqueId());
|
||||
}
|
||||
};
|
||||
|
||||
private Map<UUID, Item> _sulphur = new HashMap<>();
|
||||
|
||||
public PerkCreeperSulphurBomb()
|
||||
{
|
||||
super("Sulphur Bomb", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Sulphur Bomb" });
|
||||
@ -134,7 +97,6 @@ public class PerkCreeperSulphurBomb extends SmashPerk
|
||||
_cooldown = getPerkTime("Cooldown");
|
||||
_damage = getPerkFloat("Damage");
|
||||
_knockbackMagnitude = getPerkFloat("Knockback Magnitude");
|
||||
_damagePowder = getPerkFloat("Damage Powder");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -183,10 +145,8 @@ public class PerkCreeperSulphurBomb extends SmashPerk
|
||||
|
||||
Item ent = player.getWorld().dropItem(player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.COAL, (byte) 0));
|
||||
|
||||
_sulphur.put(player.getUniqueId(), ent);
|
||||
|
||||
UtilAction.velocity(ent, player.getLocation().getDirection(), 1.2, false, 0, 0.2, 10, false);
|
||||
Manager.GetProjectile().AddThrow(ent, player, _sulphurThrown, -1, true, true, true, true, null, 1f, 1f, null, 1, UpdateType.SLOW, 0.6f);
|
||||
Manager.GetProjectile().AddThrow(ent, player, _sulphurThrown, -1, true, true, true, true, null, 1f, 1f, null, 1, UpdateType.SLOW, 1);
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
|
||||
@ -195,29 +155,6 @@ public class PerkCreeperSulphurBomb extends SmashPerk
|
||||
player.getWorld().playSound(player.getLocation(), Sound.CREEPER_DEATH, 2f, 1.5f);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void dropPowder(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FASTER)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map.Entry<UUID, Item> entry : _sulphur.entrySet())
|
||||
{
|
||||
Player player = UtilPlayer.searchExact(entry.getKey());
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Item item = entry.getValue();
|
||||
Item powder = item.getWorld().dropItem(item.getLocation(), POWDER);
|
||||
Manager.GetProjectile().AddThrow(powder, player, _powderThrown, -1, true, true, true, true, 1F);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Knockback(CustomDamageEvent event)
|
||||
{
|
||||
|
@ -7,8 +7,10 @@ import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.EnderCrystal;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -50,7 +52,6 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
||||
|
||||
private Map<UUID, BlockTossData> _hold = new HashMap<>();
|
||||
private Set<UUID> _charged = new HashSet<>();
|
||||
private Map<FallingBlock, UUID> _falling = new HashMap<>();
|
||||
|
||||
public PerkBlockToss()
|
||||
{
|
||||
@ -70,7 +71,6 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
||||
@Override
|
||||
public void unregisteredEvents()
|
||||
{
|
||||
_falling.clear();
|
||||
_hold.clear();
|
||||
}
|
||||
|
||||
@ -87,7 +87,8 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
Material material = event.getClickedBlock().getType();
|
||||
if (UtilBlock.usable(event.getClickedBlock()) || material == Material.REDSTONE_WIRE || material == Material.SKULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -191,8 +192,6 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
||||
|
||||
FallingBlock block = cur.getWorld().spawnFallingBlock(cur.getEyeLocation().add(cur.getLocation().getDirection()), data.Type, data.Data);
|
||||
|
||||
_falling.put(block, key);
|
||||
|
||||
_charged.remove(key);
|
||||
|
||||
long charge = System.currentTimeMillis() - data.Time;
|
||||
@ -218,6 +217,12 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
||||
return;
|
||||
}
|
||||
|
||||
if (target instanceof EnderCrystal)
|
||||
{
|
||||
data.getThrown().remove();
|
||||
return;
|
||||
}
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.PROJECTILE, Math.min(_maxDamage, data.getThrown().getVelocity().length() * _damage), true, true, false, UtilEnt.getName(data
|
||||
.getThrower()), GetName());
|
||||
@ -227,17 +232,8 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
||||
{
|
||||
FallingBlock thrown = (FallingBlock) data.getThrown();
|
||||
|
||||
FallingBlock newThrown = data.getThrown().getWorld().spawnFallingBlock(data.getThrown().getLocation(), thrown.getMaterial(), (byte) 0);
|
||||
|
||||
// Remove Old
|
||||
_falling.remove(thrown);
|
||||
data.getThrown().getWorld().spawnFallingBlock(data.getThrown().getLocation(), thrown.getMaterial(), (byte) 0);
|
||||
thrown.remove();
|
||||
|
||||
// Add New
|
||||
if (data.getThrower() instanceof Player)
|
||||
{
|
||||
_falling.put(newThrown, data.getThrower().getUniqueId());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -270,7 +266,6 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
||||
|
||||
falling.getWorld().playEffect(event.getBlock().getLocation(), Effect.STEP_SOUND, falling.getBlockId());
|
||||
|
||||
_falling.remove(falling);
|
||||
falling.remove();
|
||||
|
||||
event.setCancelled(true);
|
||||
|
@ -23,6 +23,7 @@ import mineplex.core.common.util.UtilTextMiddle;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkEndermanTeleport extends SmashPerk
|
||||
@ -36,7 +37,7 @@ public class PerkEndermanTeleport extends SmashPerk
|
||||
|
||||
public PerkEndermanTeleport()
|
||||
{
|
||||
super("Teleport", new String[] { C.cYellow + "Hold Sneak" + C.cGray + " to " + C.cGreen + "Teleport" });
|
||||
super("Teleport", new String[] {C.cYellow + "Hold Sneak" + C.cGray + " to " + C.cGreen + "Teleport"});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.smash.perks.golem;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
@ -80,7 +81,8 @@ public class PerkFissure extends Perk
|
||||
return;
|
||||
}
|
||||
|
||||
FissureData data = new FissureData(this, player, player.getLocation().getDirection(), player.getLocation().add(0, -0.4, 0));
|
||||
Location location = player.getLocation();
|
||||
FissureData data = new FissureData(this, player, location.getDirection(), location.add(location.getDirection()).add(0, -0.4, 0));
|
||||
_active.add(data);
|
||||
|
||||
// Inform
|
||||
|
@ -29,22 +29,33 @@ import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkSeismicSlam extends Perk
|
||||
{
|
||||
|
||||
private static final int COOLDOWN = 7000;
|
||||
private static final int TIME = 1000;
|
||||
private static final int DAMAGE = 10;
|
||||
private static final int RADIUS = 8;
|
||||
private static final float KNOCKBACK_MAGNITUDE = 2.4F;
|
||||
private long _cooldown;
|
||||
private long _time;
|
||||
private int _damage;
|
||||
private int _radius;
|
||||
private float _knockbackMagnitude;
|
||||
|
||||
private Map<LivingEntity, Long> _live = new HashMap<>();
|
||||
|
||||
public PerkSeismicSlam()
|
||||
{
|
||||
super("Seismic Slam", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Spade to " + C.cGreen + "Seismic Slam" });
|
||||
super("Seismic Slam", new String[]{C.cYellow + "Right-Click" + C.cGray + " with Spade to " + C.cGreen + "Seismic Slam"});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupValues()
|
||||
{
|
||||
_cooldown = getPerkTime("Cooldown");
|
||||
_time = getPerkTime("Time");
|
||||
_damage = getPerkInt("Damage");
|
||||
_radius = getPerkInt("Radius");
|
||||
_knockbackMagnitude = getPerkFloat("Knockback Magnitude");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -93,7 +104,7 @@ public class PerkSeismicSlam extends Perk
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
|
||||
if (!Recharge.Instance.use(player, GetName(), _cooldown, true, true))
|
||||
return;
|
||||
|
||||
// Action
|
||||
@ -122,17 +133,7 @@ public class PerkSeismicSlam extends Perk
|
||||
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (!UtilEnt.isGrounded(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!_live.containsKey(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!UtilTime.elapsed(_live.get(player), TIME))
|
||||
if (!UtilEnt.onBlock(player) || !_live.containsKey(player) || !UtilTime.elapsed(_live.get(player), _time))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -141,7 +142,7 @@ public class PerkSeismicSlam extends Perk
|
||||
|
||||
// Action
|
||||
|
||||
Map<LivingEntity, Double> targets = UtilEnt.getInRadius(player.getLocation(), RADIUS);
|
||||
Map<LivingEntity, Double> targets = UtilEnt.getInRadius(player.getLocation(), _radius);
|
||||
|
||||
for (LivingEntity cur : targets.keySet())
|
||||
{
|
||||
@ -150,20 +151,22 @@ public class PerkSeismicSlam extends Perk
|
||||
continue;
|
||||
}
|
||||
|
||||
if (cur instanceof Player && !UtilPlayer.isSpectator(cur))
|
||||
if (UtilPlayer.isSpectator(cur))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(cur, player, null, DamageCause.CUSTOM, DAMAGE * targets.get(cur) + 0.5, true, true, false, player.getName(), GetName());
|
||||
Manager.GetDamage().NewDamageEvent(cur, player, null, DamageCause.CUSTOM, _damage * targets.get(cur) + 0.5, true, true, false, player.getName(), GetName());
|
||||
|
||||
// Condition
|
||||
Manager.GetCondition().Factory().Falling(GetName(), cur, player, 10, false, true);
|
||||
|
||||
// Inform
|
||||
if (cur instanceof Player)
|
||||
UtilPlayer.message((Player) cur, F.main("Game", F.name(player.getName()) + " hit you with " + F.skill(GetName()) + "."));
|
||||
{
|
||||
UtilPlayer.message(cur, F.main("Game", F.name(player.getName()) + " hit you with " + F.skill(GetName()) + "."));
|
||||
}
|
||||
}
|
||||
|
||||
// Effect
|
||||
@ -171,10 +174,12 @@ public class PerkSeismicSlam extends Perk
|
||||
|
||||
for (Block cur : UtilBlock.getInRadius(player.getLocation(), 4).keySet())
|
||||
{
|
||||
if (UtilBlock.airFoliage(cur.getRelative(BlockFace.UP)) && !UtilBlock.airFoliage(cur))
|
||||
if (Math.random() < 0.9 || UtilBlock.airFoliage(cur) || !UtilBlock.airFoliage(cur.getRelative(BlockFace.UP)))
|
||||
{
|
||||
cur.getWorld().playEffect(cur.getLocation(), Effect.STEP_SOUND, cur.getType());
|
||||
continue;
|
||||
}
|
||||
|
||||
cur.getWorld().playEffect(cur.getLocation(), Effect.STEP_SOUND, cur.getType());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -187,6 +192,6 @@ public class PerkSeismicSlam extends Perk
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), KNOCKBACK_MAGNITUDE);
|
||||
event.AddKnockback(GetName(), _knockbackMagnitude);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.golem;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Material;
|
||||
@ -10,6 +12,7 @@ import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
@ -29,6 +32,8 @@ public class SmashGolem extends SmashUltimate
|
||||
private int _damageRadius;
|
||||
private int _effectRadius;
|
||||
|
||||
private final Set<Player> _killed = new HashSet<>();
|
||||
|
||||
public SmashGolem()
|
||||
{
|
||||
super("Earthquake", new String[] {}, Sound.IRONGOLEM_HIT, 0);
|
||||
@ -45,9 +50,11 @@ public class SmashGolem extends SmashUltimate
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(Player player)
|
||||
public void cancel(Player player)
|
||||
{
|
||||
super.activate(player);
|
||||
super.cancel(player);
|
||||
|
||||
_killed.clear();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -71,7 +78,7 @@ public class SmashGolem extends SmashUltimate
|
||||
|
||||
for (Player other : alivePlayers)
|
||||
{
|
||||
if (player.equals(other) || UtilPlayer.isSpectator(other) || team.contains(other))
|
||||
if (player.equals(other) || UtilPlayer.isSpectator(other) || team.contains(other) || _killed.contains(other))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -126,4 +133,17 @@ public class SmashGolem extends SmashUltimate
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerDeath(PlayerDeathEvent event)
|
||||
{
|
||||
Player player = event.getEntity();
|
||||
|
||||
if (getLastUltimate().isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_killed.add(player);
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,6 @@ import java.util.Set;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
@ -32,11 +31,14 @@ import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkTargetLazer extends SmashPerk
|
||||
{
|
||||
|
||||
private static final int ACTIVE_ITEM_SLOT = 2;
|
||||
|
||||
private int _cooldown;
|
||||
private int _maxRange;
|
||||
private int _maxTime;
|
||||
@ -47,7 +49,7 @@ public class PerkTargetLazer extends SmashPerk
|
||||
|
||||
public PerkTargetLazer()
|
||||
{
|
||||
super("Target Laser", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Pickaxe to use " + C.cGreen + "Target Laser" });
|
||||
super("Target Laser", new String[] {C.cYellow + "Right-Click" + C.cGray + " with Pickaxe to use " + C.cGreen + "Target Laser"});
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -164,14 +166,6 @@ public class PerkTargetLazer extends SmashPerk
|
||||
@EventHandler
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() == UpdateType.TICK)
|
||||
{
|
||||
for (TargetLazerData data : _data)
|
||||
{
|
||||
data.update(Manager);
|
||||
}
|
||||
}
|
||||
|
||||
if (event.getType() != UpdateType.FASTER)
|
||||
{
|
||||
return;
|
||||
@ -194,15 +188,15 @@ public class PerkTargetLazer extends SmashPerk
|
||||
{
|
||||
long time = data.getTimeElapsed() / 1000;
|
||||
double damage = 0.5 * time;
|
||||
ArmorStand targetPlaceholder = data.update(Manager);
|
||||
Player attacker = data.getAttacker();
|
||||
|
||||
targetPlaceholder.remove();
|
||||
setLazerTarget(data.getAttacker(), null);
|
||||
setLazerTarget(attacker, null);
|
||||
|
||||
data.getAttacker().sendMessage(F.main("Game", "Your laser broke, dealing damage to " + F.name(data.getTarget().getName())) + ".");
|
||||
Manager.GetDamage().NewDamageEvent(data.getTarget(), data.getAttacker(), null, DamageCause.CUSTOM, damage, false, true, false, data.getAttacker().getName(), GetName());
|
||||
attacker.sendMessage(F.main("Game", "Your laser broke, dealing damage to " + F.name(data.getTarget().getName())) + ".");
|
||||
Manager.GetDamage().NewDamageEvent(data.getTarget(), attacker, null, DamageCause.CUSTOM, damage, false, true, false, data.getAttacker().getName(), GetName());
|
||||
|
||||
Recharge.Instance.use(data.getAttacker(), GetName(), _cooldown, true, true);
|
||||
Recharge.Instance.use(attacker, GetName(), _cooldown, true, true);
|
||||
Recharge.Instance.Get(attacker).get(GetName()).Item = attacker.getInventory().getItem(ACTIVE_ITEM_SLOT);
|
||||
|
||||
iterator.remove();
|
||||
}
|
||||
@ -231,7 +225,7 @@ public class PerkTargetLazer extends SmashPerk
|
||||
{
|
||||
event.AddMod(GetName(), _damageIncrease);
|
||||
event.AddKnockback(GetName(), _knockbackIncrease);
|
||||
data.getAttacker().playEffect(damagee.getLocation().add(0, 0.5, 0), Effect.STEP_SOUND, Material.REDSTONE_BLOCK);
|
||||
damagee.playEffect(damagee.getLocation().add(0, 0.5, 0), Effect.STEP_SOUND, Material.REDSTONE_BLOCK);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -241,29 +235,30 @@ public class PerkTargetLazer extends SmashPerk
|
||||
{
|
||||
Player player = event.getEntity();
|
||||
|
||||
_data.removeIf(data -> data.getTarget().equals(player) || data.getAttacker().equals(player));
|
||||
_data.removeIf(data ->
|
||||
{
|
||||
if (data.getTarget().equals(player) || data.getAttacker().equals(player))
|
||||
{
|
||||
setLazerTarget(data.getAttacker(), null);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
private void setLazerTarget(Player disguised, Player target)
|
||||
{
|
||||
DisguiseManager disguiseManager = Manager.GetDisguise();
|
||||
DisguiseGuardian disguise = (DisguiseGuardian) disguiseManager.getActiveDisguise(disguised);
|
||||
int entityId = 0;
|
||||
|
||||
for (TargetLazerData data : _data)
|
||||
if (target != null)
|
||||
{
|
||||
if (data.getAttacker().equals(disguised))
|
||||
{
|
||||
if (target == null)
|
||||
{
|
||||
disguise.setTarget(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
disguise.setTarget(data.update(Manager).getEntityId());
|
||||
entityId = disguiseManager.getActiveDisguise(target).getEntityId();
|
||||
}
|
||||
|
||||
disguise.setTarget(entityId);
|
||||
disguiseManager.updateDisguise(disguise);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,8 +11,10 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.games.smash.TeamSuperSmash;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
@ -140,7 +142,7 @@ public class PerkWaterSplash extends Perk
|
||||
|
||||
UtilParticle.PlayParticleToAll(ParticleType.DRIP_WATER, player.getLocation(), 0.5F, 0.5F, 0.5F, 0.01F, 10, ViewDist.LONG);
|
||||
|
||||
if (UtilEnt.isGrounded(player) && UtilTime.elapsed(_active.get(uuid), _minAirTime))
|
||||
if (UtilEnt.isGrounded(player) && player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() != Material.FENCE && UtilTime.elapsed(_active.get(uuid), _minAirTime))
|
||||
{
|
||||
iterator.remove();
|
||||
_usedSecondBoost.remove(uuid);
|
||||
@ -149,7 +151,7 @@ public class PerkWaterSplash extends Perk
|
||||
|
||||
for (Block block : UtilBlock.getInRadius(player.getLocation(), _radius).keySet())
|
||||
{
|
||||
if (Math.random() > 0.5)
|
||||
if (Math.random() < 0.9 || UtilBlock.airFoliage(block) || !UtilBlock.airFoliage(block.getRelative(BlockFace.UP)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -1,21 +1,15 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.guardian;
|
||||
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
|
||||
public class TargetLazerData
|
||||
{
|
||||
|
||||
private Player _attacker;
|
||||
private Player _target;
|
||||
private long _startTime;
|
||||
private ArmorStand _targetPlaceholder;
|
||||
|
||||
public TargetLazerData(Player attacker)
|
||||
TargetLazerData(Player attacker)
|
||||
{
|
||||
_attacker = attacker;
|
||||
}
|
||||
@ -26,27 +20,6 @@ public class TargetLazerData
|
||||
_startTime = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public ArmorStand update(ArcadeManager manager)
|
||||
{
|
||||
if (_targetPlaceholder == null || !_targetPlaceholder.isValid())
|
||||
{
|
||||
manager.GetGame().CreatureAllowOverride = true;
|
||||
_targetPlaceholder = _target.getWorld().spawn(_target.getLocation(), ArmorStand.class);
|
||||
_targetPlaceholder.setArms(false);
|
||||
_targetPlaceholder.setSmall(true);
|
||||
_targetPlaceholder.setBasePlate(false);
|
||||
_targetPlaceholder.setGravity(false);
|
||||
_targetPlaceholder.setVisible(false);
|
||||
|
||||
UtilEnt.ghost(_targetPlaceholder, true, true);
|
||||
|
||||
manager.GetGame().CreatureAllowOverride = false;
|
||||
}
|
||||
|
||||
_targetPlaceholder.teleport(_target.getLocation().add(0, 0.25, 0));
|
||||
return _targetPlaceholder;
|
||||
}
|
||||
|
||||
public Player getAttacker()
|
||||
{
|
||||
return _attacker;
|
||||
@ -61,5 +34,4 @@ public class TargetLazerData
|
||||
{
|
||||
return System.currentTimeMillis() - _startTime;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public class PerkFlameDash extends Perk
|
||||
private int _damageRadius;
|
||||
private int _knockbackMagnitude;
|
||||
|
||||
private Set<FireflyData> _data = new HashSet<FireflyData>();
|
||||
private Set<FireflyData> _data = new HashSet<>();
|
||||
|
||||
public PerkFlameDash()
|
||||
{
|
||||
@ -76,7 +76,7 @@ public class PerkFlameDash extends Perk
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isSpade(player.getItemInHand()))
|
||||
if (!UtilItem.isSpade(player.getItemInHand()) || !Recharge.Instance.use(player, GetName() + " Double Activation", 100, false, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -111,6 +111,14 @@ public class PerkFlameDash extends Perk
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player other : UtilServer.getPlayersCollection())
|
||||
{
|
||||
if (other.getSpectatorTarget() != null && other.getSpectatorTarget().equals(player))
|
||||
{
|
||||
other.setSpectatorTarget(null);
|
||||
}
|
||||
}
|
||||
|
||||
Recharge.Instance.recharge(player, GetName());
|
||||
Recharge.Instance.use(player, GetName(), _cooldown, true, true);
|
||||
|
||||
@ -130,7 +138,7 @@ public class PerkFlameDash extends Perk
|
||||
UpdateMovement();
|
||||
}
|
||||
|
||||
public void UpdateMovement()
|
||||
private void UpdateMovement()
|
||||
{
|
||||
Iterator<FireflyData> dataIterator = _data.iterator();
|
||||
|
||||
|
@ -30,7 +30,7 @@ public class PerkMagmaBoost extends Perk
|
||||
|
||||
private static final ItemStack BOOTS = new ItemStack(Material.IRON_BOOTS);
|
||||
private static final ItemStack CHESTPLATE = new ItemStack(Material.IRON_CHESTPLATE);
|
||||
private static final ItemStack HELMET = new ItemStack(Material.IRON_HELMET);
|
||||
private static final ItemStack HELMET = new ItemStack(Material.DIAMOND_HELMET);
|
||||
|
||||
private int _maxStacks;
|
||||
|
||||
|
@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.smash.perks.pig;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
@ -35,6 +36,7 @@ import mineplex.core.disguise.disguises.DisguisePigZombie;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkPigBaconBomb extends SmashPerk
|
||||
@ -49,7 +51,7 @@ public class PerkPigBaconBomb extends SmashPerk
|
||||
private int _explodeDamage;
|
||||
private int _explodeDamageRadius;
|
||||
|
||||
private Map<UUID, Set<Pig>> _pigs = new HashMap<UUID, Set<Pig>>();
|
||||
private Map<UUID, Set<Pig>> _pigs = new HashMap<>();
|
||||
|
||||
public PerkPigBaconBomb()
|
||||
{
|
||||
@ -146,7 +148,7 @@ public class PerkPigBaconBomb extends SmashPerk
|
||||
// Store
|
||||
if (!_pigs.containsKey(key))
|
||||
{
|
||||
_pigs.put(key, new HashSet<Pig>());
|
||||
_pigs.put(key, new HashSet<>());
|
||||
}
|
||||
|
||||
_pigs.get(key).add(pig);
|
||||
@ -182,11 +184,13 @@ public class PerkPigBaconBomb extends SmashPerk
|
||||
continue;
|
||||
}
|
||||
|
||||
Player target = UtilPlayer.getClosest(pig.getLocation(), player);
|
||||
List<Player> targets = UtilPlayer.getNearby(pig.getLocation(), 20);
|
||||
|
||||
if (target == null)
|
||||
for (Player target : targets)
|
||||
{
|
||||
continue;
|
||||
if (player.equals(target) || isTeamDamage(player, target))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UtilEnt.CreatureMoveFast(pig, target.getLocation(), _pigSpeed);
|
||||
@ -198,6 +202,7 @@ public class PerkPigBaconBomb extends SmashPerk
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void PigExplode(Iterator<Pig> pigIterator, Pig pig, Player owner)
|
||||
{
|
||||
|
@ -43,6 +43,7 @@ public class PerkPigBaconBounce extends SmashPerk implements IThrown
|
||||
private float _energyBacon;
|
||||
private float _energyBaconDisgtuiseFactor;
|
||||
private float _energyBaconBack;
|
||||
private float _hitBox;
|
||||
private int _cooldown;
|
||||
private int _healthBacon;
|
||||
private int _damageBacon;
|
||||
@ -58,6 +59,7 @@ public class PerkPigBaconBounce extends SmashPerk implements IThrown
|
||||
_energyBacon = getPerkFloat("Energy Per Bacon");
|
||||
_energyBaconDisgtuiseFactor = getPerkFloat("Energy Per Bacon Disguise Factor");
|
||||
_energyBaconBack = getPerkFloat("Energy Per Bacon Back");
|
||||
_hitBox = getPerkFloat("Hit Box");
|
||||
_cooldown = getPerkInt("Cooldown (ms)");
|
||||
_healthBacon = getPerkInt("Health Per Bacon");
|
||||
_damageBacon = getPerkInt("Bacon Damage");
|
||||
@ -121,7 +123,7 @@ public class PerkPigBaconBounce extends SmashPerk implements IThrown
|
||||
// Launch
|
||||
Item ent = player.getWorld().dropItem(player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.PORK, (byte) 0, 1, "Bacon" + System.currentTimeMillis()));
|
||||
UtilAction.velocity(ent, player.getLocation().getDirection(), 1.2, false, 0, 0.2, 10, false);
|
||||
Manager.GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, .8F);
|
||||
Manager.GetProjectile().AddThrow(ent, player, this, 5000, true, true, true, false, _hitBox);
|
||||
ent.setPickupDelay(9999);
|
||||
|
||||
// Sound
|
||||
@ -141,6 +143,11 @@ public class PerkPigBaconBounce extends SmashPerk implements IThrown
|
||||
return;
|
||||
}
|
||||
|
||||
if (target instanceof Player && isTeamDamage((Player) target, (Player) data.getThrower()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.CUSTOM, _damageBacon, true, true, false, UtilEnt.getName(data.getThrower()), GetName());
|
||||
|
||||
|
@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.smash.perks.pig;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
|
||||
public class SmashPig extends SmashUltimate
|
||||
@ -10,7 +11,7 @@ public class SmashPig extends SmashUltimate
|
||||
|
||||
public SmashPig()
|
||||
{
|
||||
super("Pig Stink", new String[] {}, Sound.PIG_IDLE, 0);
|
||||
super("Pig Stink", new String[]{}, Sound.PIG_IDLE, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -18,13 +19,16 @@ public class SmashPig extends SmashUltimate
|
||||
{
|
||||
super.activate(player);
|
||||
|
||||
GameTeam team = Manager.GetGame().GetTeam(player);
|
||||
|
||||
for (Player other : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (!player.equals(other))
|
||||
if (player.equals(other) || team.HasPlayer(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Manager.GetCondition().Factory().Confuse(GetName() + " " + player.getName(), other, player, getLength() / 1000, 0, false, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -154,23 +154,17 @@ public class PerkBoneRush extends SmashPerk implements IThrown
|
||||
// Velocity
|
||||
Vector dir = player.getLocation().getDirection();
|
||||
double limit = isSuperActive(player) ? _yLimit + 0.1 : _yLimit;
|
||||
|
||||
if (dir.getY() > limit)
|
||||
{
|
||||
dir.setY(limit);
|
||||
}
|
||||
|
||||
// Player
|
||||
if (!player.isSneaking())
|
||||
{
|
||||
UtilAction.velocity(player, dir, 0.6, false, 0, 0.1, 0.3, false);
|
||||
UtilAction.velocity(player, dir, 0.6, false, 0, 0, limit, false);
|
||||
}
|
||||
|
||||
// Bones
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
Item bone = player.getWorld().dropItem(player.getLocation().add(Math.random() * 5 - 2.5, Math.random() * 3, Math.random() * 5 - 2.5), new ItemStack(Material.BONE));
|
||||
UtilAction.velocity(bone, dir, 0.6 + 0.3 * Math.random(), false, 0, 0.1 + Math.random() * 0.05, 0.3, false);
|
||||
UtilAction.velocity(bone, dir, 0.6 + 0.3 * Math.random(), false, 0, 0, 0.3, false);
|
||||
Manager.GetProjectile().AddThrow(bone, player, this, _expireTime, true, true, true, true, 0.5f);
|
||||
}
|
||||
}
|
||||
@ -210,11 +204,10 @@ public class PerkBoneRush extends SmashPerk implements IThrown
|
||||
return;
|
||||
}
|
||||
|
||||
target = (Player) target;
|
||||
Player damager = (Player) data.getThrower();
|
||||
String reason = GetName();
|
||||
|
||||
if (target instanceof Player && damager instanceof Player)
|
||||
if (damager instanceof Player)
|
||||
{
|
||||
if (isTeamDamage((Player) target, damager))
|
||||
{
|
||||
|
@ -48,7 +48,7 @@ public class PerkDeadlyBones extends SmashPerk
|
||||
@EventHandler
|
||||
public void damageActivate(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
if (event.IsCancelled() || event.GetCause() == DamageCause.STARVATION)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -106,6 +106,8 @@ public class PerkDeadlyBones extends SmashPerk
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
item.remove();
|
||||
_active.remove(item);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -43,11 +43,11 @@ import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
{
|
||||
|
||||
private int _cooldown = 6000;
|
||||
private float _energyTick = 0.004F;
|
||||
private int _knockbackMagnitude = 3;
|
||||
private int _maxEnergyTime = 3000;
|
||||
private int _maxHoldTime = 5000;
|
||||
private int _cooldown;
|
||||
private float _energyTick;
|
||||
private int _knockbackMagnitude;
|
||||
private int _maxEnergyTime;
|
||||
private int _maxHoldTime;
|
||||
|
||||
private Map<UUID, Long> _charge = new HashMap<>();
|
||||
private Map<Slime, UUID> _owner = new HashMap<>();
|
||||
@ -55,7 +55,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
|
||||
public PerkSlimeRocket()
|
||||
{
|
||||
super("Slime Rocket", new String[] { C.cYellow + "Hold/Release Block" + C.cGray + " to use " + C.cGreen + "Slime Rocket" });
|
||||
super("Slime Rocket", new String[]{C.cYellow + "Hold/Release Block" + C.cGray + " to use " + C.cGreen + "Slime Rocket"});
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -199,7 +199,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
// Use Energy
|
||||
if (!UtilTime.elapsed(time, _maxEnergyTime))
|
||||
{
|
||||
player.setExp((float) Math.max(0, player.getExp() - 0.01f));
|
||||
player.setExp(Math.max(0, player.getExp() - 0.01f));
|
||||
}
|
||||
|
||||
// AutoFire
|
||||
@ -257,26 +257,21 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
@EventHandler
|
||||
public void SlimeTarget(EntityTargetEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
UUID uuid = _owner.get(event.getEntity());
|
||||
|
||||
if (uuid == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_owner.containsKey(event.getEntity()))
|
||||
Player owner = UtilPlayer.searchExact(uuid);
|
||||
|
||||
if (owner == null || event.getTarget() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getTarget() instanceof Player)
|
||||
{
|
||||
if (isTeamDamage((Player) event.getTarget(), UtilPlayer.searchExact(_owner.get(event.getEntity()))))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (_owner.get(event.getEntity()).equals(event.getTarget()))
|
||||
if (event.getTarget() instanceof Player && isTeamDamage((Player) event.getTarget(), owner) || event.getTarget().equals(owner))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -285,12 +280,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
@Override
|
||||
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
||||
{
|
||||
if (target == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(data.getThrown() instanceof Slime))
|
||||
if (target == null || !(data.getThrown() instanceof Slime))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -302,13 +292,14 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
Player targetPlayer = (Player) target;
|
||||
Player throwerPlayer = (Player) data.getThrower();
|
||||
|
||||
if (isTeamDamage(targetPlayer, throwerPlayer))
|
||||
if (isTeamDamage(targetPlayer, throwerPlayer) || !Recharge.Instance.use(targetPlayer, GetName() + slime.getUniqueId(), 2000, false, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Damage Event
|
||||
_lastAttack.put(slime, System.currentTimeMillis());
|
||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.PROJECTILE, 3 + slime.getSize() * 3, true, true, false, UtilEnt.getName(data.getThrower()), GetName());
|
||||
}
|
||||
|
||||
@ -320,7 +311,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), _knockbackMagnitude);
|
||||
event.AddKnockback(GetName(), _knockbackMagnitude * (event.GetDamageInitial() / 3));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -375,7 +366,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||
return;
|
||||
}
|
||||
|
||||
if (owner != null && owner.equals(event.GetDamageeEntity()))
|
||||
if (owner.equals(event.GetDamageeEntity()))
|
||||
{
|
||||
event.SetCancelled("Owner Damage");
|
||||
}
|
||||
|
@ -94,9 +94,9 @@ public class PerkBlizzard extends Perk
|
||||
for (int i = 0; i < SNOWBALL_PER_USE; i++)
|
||||
{
|
||||
Snowball snow = player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), Snowball.class);
|
||||
double x = 0.1 - (UtilMath.r(20) / 100d);
|
||||
double x = 0.1 - (UtilMath.r(10) / 100d);
|
||||
double y = UtilMath.r(20) / 100d;
|
||||
double z = 0.1 - (UtilMath.r(20) / 100d);
|
||||
double z = 0.1 - (UtilMath.r(10) / 100d);
|
||||
snow.setShooter(player);
|
||||
snow.setVelocity(player.getLocation().getDirection().add(new Vector(x, y, z)).multiply(2));
|
||||
_snowball.put(snow, player);
|
||||
|
@ -68,10 +68,8 @@ public class SmashSnowman extends SmashUltimate
|
||||
@Override
|
||||
public void activate(Player player)
|
||||
{
|
||||
// super.activate(player);
|
||||
|
||||
player.sendMessage(F.main("Game", "Activated " + F.skill(GetName()) + "."));
|
||||
|
||||
UtilPlayer.health(player, 3.5);
|
||||
|
||||
Game game = Manager.GetGame();
|
||||
|
||||
@ -95,28 +93,11 @@ public class SmashSnowman extends SmashUltimate
|
||||
@Override
|
||||
public void cancel(Player player)
|
||||
{
|
||||
// super.cancel(player);
|
||||
|
||||
if (Kit.HasKit(player))
|
||||
{
|
||||
player.sendMessage(F.main("Game", "Deactivated " + F.skill(GetName()) + "."));
|
||||
|
||||
|
||||
/*
|
||||
Iterator<Snowman> iterator = _turret.keySet().iterator();
|
||||
|
||||
while (iterator.hasNext())
|
||||
{
|
||||
Snowman snowman = iterator.next();
|
||||
|
||||
if (_turret.get(snowman).equals(player))
|
||||
{
|
||||
UtilParticle.PlayParticle(ParticleType.SNOWBALL_POOF, snowman.getLocation().add(0, 1, 0), 0.4f, 0.4f, 0.4f, 0, 12, ViewDist.LONG, UtilServer.getPlayers());
|
||||
snowman.remove();
|
||||
iterator.remove();
|
||||
return;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateSnowman(UpdateEvent event)
|
||||
|
@ -62,15 +62,11 @@ public class PerkSpiderLeap extends Perk
|
||||
|
||||
if (!player.isSneaking())
|
||||
{
|
||||
boolean grounded = UtilEnt.isGrounded(player);
|
||||
|
||||
if (grounded)
|
||||
if (UtilEnt.onBlock(player))
|
||||
{
|
||||
player.setExp(Math.min(0.999F, player.getExp() + _energyTick));
|
||||
_secondJump.remove(player.getUniqueId());
|
||||
}
|
||||
|
||||
player.setExp(Math.min(0.999F, player.getExp() + (grounded ? _energyTick * 2 : _energyTick)));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -162,7 +158,7 @@ public class PerkSpiderLeap extends Perk
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilEnt.isGrounded(player))
|
||||
if (UtilEnt.onBlock(player))
|
||||
{
|
||||
player.setAllowFlight(true);
|
||||
}
|
||||
|
@ -147,11 +147,14 @@ public class PerkFishFlurry extends SmashPerk implements IThrown
|
||||
{
|
||||
DataSquidGeyser data = activeIter.next();
|
||||
|
||||
if (event.getTick() % 3 == 0)
|
||||
{
|
||||
// particles
|
||||
for (Block block : data.Blocks)
|
||||
{
|
||||
UtilParticle.PlayParticleToAll(ParticleType.SPLASH, block.getLocation().add(0.5, 1, 0.5), 0.25f, 0, 0.25f, 0, 1, ViewDist.LONG);
|
||||
}
|
||||
}
|
||||
|
||||
// sound
|
||||
Block block = UtilAlg.Random(data.Blocks);
|
||||
|
@ -5,8 +5,10 @@ import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
@ -135,7 +137,10 @@ public class PerkSuperSquid extends SmashPerk
|
||||
@EventHandler
|
||||
public void DamageCancel(CustomDamageEvent event)
|
||||
{
|
||||
if (_active.containsKey(event.GetDamageeEntity().getUniqueId()))
|
||||
LivingEntity damagee = event.GetDamageeEntity();
|
||||
LivingEntity damager = event.GetDamagerEntity(false);
|
||||
|
||||
if (_active.containsKey(damagee.getUniqueId()) || damager != null && event.GetCause() == DamageCause.ENTITY_ATTACK && _active.containsKey(damager.getUniqueId()))
|
||||
{
|
||||
event.SetCancelled(GetName());
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -34,6 +35,8 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.game.Game;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitSkySquid;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
import nautilus.game.arcade.managers.LobbyEnt;
|
||||
import nautilus.game.arcade.managers.lobby.LobbyManager;
|
||||
|
||||
public class SmashSquid extends SmashUltimate
|
||||
{
|
||||
@ -127,10 +130,9 @@ public class SmashSquid extends SmashUltimate
|
||||
UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, loc.clone().add(0, 0.5, 0), 1f, 1f, 1f, 0.1f, 40, ViewDist.MAX, UtilServer.getPlayers());
|
||||
UtilParticle.PlayParticle(ParticleType.LARGE_EXPLODE, loc.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1, ViewDist.MAX, UtilServer.getPlayers());
|
||||
|
||||
Bukkit.getScheduler().runTaskLater(Manager.getPlugin(), new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
Map<Entity, LobbyEnt> kitNPCs = Manager.GetLobby().getKits();
|
||||
|
||||
Manager.runSyncLater(() ->
|
||||
{
|
||||
// Warning
|
||||
player.getWorld().spigot().strikeLightningEffect(loc, false);
|
||||
@ -139,7 +141,7 @@ public class SmashSquid extends SmashUltimate
|
||||
|
||||
for (LivingEntity cur : targets.keySet())
|
||||
{
|
||||
if (cur.equals(player))
|
||||
if (cur.equals(player) || kitNPCs.containsKey(cur))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -150,7 +152,6 @@ public class SmashSquid extends SmashUltimate
|
||||
// Velocity
|
||||
UtilAction.velocity(cur, UtilAlg.getTrajectory(loc, cur.getLocation()), 3 * targets.get(cur), false, 0, 1 * targets.get(cur), 2, true);
|
||||
}
|
||||
}
|
||||
}, 10);
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,403 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.villager;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.FireworkEffect;
|
||||
import org.bukkit.FireworkEffect.Type;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Villager.Profession;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilFirework;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.recharge.RechargedEvent;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.events.PerkDoubleJumpEvent;
|
||||
import nautilus.game.arcade.game.games.smash.events.SmashActivateEvent;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitVillager;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitVillager.VillagerType;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkArts extends SmashPerk
|
||||
{
|
||||
|
||||
private final Map<Player, ArtData> _data = new HashMap<>();
|
||||
|
||||
private int _duration;
|
||||
private int _cooldown;
|
||||
|
||||
private double _attackDamageMod;
|
||||
private float _attackSpeedMod;
|
||||
private double _attackKBMod;
|
||||
private double _attackDoubleJumpMod;
|
||||
|
||||
private float _defenseDamageMod;
|
||||
private float _defenseSpeedMod;
|
||||
private double _defenseKBMod;
|
||||
private double _defenseDoubleJumpMod;
|
||||
|
||||
private float _speedDamageMod;
|
||||
private float _speedSpeedMod;
|
||||
private double _speedKBMod;
|
||||
private double _speedDoubleJumpMod;
|
||||
|
||||
public PerkArts()
|
||||
{
|
||||
super("Villager Arts", new String[]
|
||||
{
|
||||
C.cYellow + "Right-Click" + C.cGray + " Spade to cycle through " + C.cGreen + "Villager Arts",
|
||||
C.cYellow + "Drop" + C.cGray + " to activate the selected " + C.cGreen + "Villager Art",
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupValues()
|
||||
{
|
||||
_duration = getPerkTime("Duration");
|
||||
_cooldown = getPerkTime("Cooldown");
|
||||
|
||||
_attackDamageMod = getPerkDouble("Attack.Damage Mod");
|
||||
_attackSpeedMod = getPerkFloat("Attack.Speed Mod");
|
||||
_attackKBMod = getPerkPercentage("Attack.Knockback Mod");
|
||||
_attackDoubleJumpMod = getPerkDouble("Attack.Double Jump Mod");
|
||||
|
||||
_defenseDamageMod = getPerkFloat("Defense.Damage Mod");
|
||||
_defenseSpeedMod = getPerkFloat("Defense.Speed Mod");
|
||||
_defenseKBMod = getPerkPercentage("Defense.Knockback Mod");
|
||||
_defenseDoubleJumpMod = getPerkDouble("Defense.Double Jump Mod");
|
||||
|
||||
_speedDamageMod = getPerkFloat("Speed.Damage Mod");
|
||||
_speedSpeedMod = getPerkFloat("Speed.Speed Mod");
|
||||
_speedKBMod = getPerkPercentage("Speed.Knockback Mod");
|
||||
_speedDoubleJumpMod = getPerkDouble("Speed.Double Jump Mod");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void playerInteract(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled() || !UtilEvent.isAction(event, ActionType.R) || UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
ItemStack itemStack = player.getItemInHand();
|
||||
|
||||
if (!UtilItem.isSpade(itemStack) || !hasPerk(player) || !Recharge.Instance.use(player, GetName(), 100, false, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
KitVillager kit = (KitVillager) Kit;
|
||||
VillagerType newType = kit.get(player).getNext();
|
||||
boolean active = !Recharge.Instance.usable(player, newType.getName());
|
||||
|
||||
kit.set(player, newType);
|
||||
player.getInventory().setItem(KitVillager.ART_ACTIVE_SLOT, kit.getArtItem(newType, active));
|
||||
player.getInventory().setItem(KitVillager.ART_VISUAL_SLOT, kit.getArtVisualItem(newType, active));
|
||||
player.updateInventory();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void artRecharge(RechargedEvent event)
|
||||
{
|
||||
Player player = event.GetPlayer();
|
||||
String ability = event.GetAbility();
|
||||
|
||||
if (!Manager.GetGame().InProgress() || !hasPerk(player) || isSuperActive(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
KitVillager kit = (KitVillager) Kit;
|
||||
ItemStack itemStack = player.getInventory().getItem(KitVillager.ART_ACTIVE_SLOT);
|
||||
|
||||
if (itemStack == null || itemStack.getItemMeta() == null || !itemStack.getItemMeta().getDisplayName().contains(ability))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
VillagerType type = kit.get(player);
|
||||
|
||||
player.getInventory().setItem(KitVillager.ART_ACTIVE_SLOT, kit.getArtItem(type, false));
|
||||
player.getInventory().setItem(KitVillager.ART_VISUAL_SLOT, kit.getArtVisualItem(type, false));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void playerDropItem(PlayerDropItemEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
ItemStack itemStack = event.getItemDrop().getItemStack();
|
||||
|
||||
if (!hasPerk(player) || itemStack == null || itemStack.getType() == Material.BED)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
KitVillager kit = (KitVillager) Kit;
|
||||
VillagerType type = kit.get(player);
|
||||
|
||||
if (!Recharge.Instance.use(player, type.getName(), _cooldown, true, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ArtData previousData = _data.remove(player);
|
||||
|
||||
if (previousData != null)
|
||||
{
|
||||
VillagerType oldType = previousData.Type;
|
||||
player.sendMessage(F.main("Game", "You deactivated the " + F.name(oldType.getChatColour() + oldType.getName()) + " Art."));
|
||||
}
|
||||
|
||||
player.sendMessage(F.main("Game", "You activated the " + F.name(type.getChatColour() + type.getName()) + " Art."));
|
||||
player.setExp(0.99F);
|
||||
player.getInventory().setItem(KitVillager.ART_ACTIVE_SLOT, kit.getArtItem(type, true));
|
||||
player.getInventory().setItem(KitVillager.ART_VISUAL_SLOT, kit.getArtVisualItem(player, type));
|
||||
kit.giveArmour(player, true);
|
||||
kit.updateDisguise(player, type.getProfession());
|
||||
UtilFirework.playFirework(player.getLocation().add(0, 1, 0), FireworkEffect
|
||||
.builder()
|
||||
.with(Type.BALL)
|
||||
.withColor(type.getColour())
|
||||
.withFade(Color.WHITE)
|
||||
.withFlicker()
|
||||
.build()
|
||||
);
|
||||
reset(player);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case ATTACK:
|
||||
player.setWalkSpeed(player.getWalkSpeed() + _attackSpeedMod);
|
||||
break;
|
||||
case DEFENSE:
|
||||
player.setWalkSpeed(player.getWalkSpeed() + _defenseSpeedMod);
|
||||
break;
|
||||
case SPEED:
|
||||
player.setWalkSpeed(player.getWalkSpeed() + _speedSpeedMod);
|
||||
break;
|
||||
}
|
||||
|
||||
if (UtilItem.isSpade(itemStack))
|
||||
{
|
||||
event.setCancelled(false);
|
||||
event.getItemDrop().remove();
|
||||
}
|
||||
|
||||
_data.put(player, new ArtData(type));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateExp(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_data.keySet().removeIf(player ->
|
||||
{
|
||||
ArtData data = _data.get(player);
|
||||
|
||||
if (!player.isOnline() || !hasPerk(player))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (player.getExp() == 0)
|
||||
{
|
||||
KitVillager kit = (KitVillager) Kit;
|
||||
|
||||
reset(player);
|
||||
kit.giveArmour(player, false);
|
||||
kit.updateDisguise(player, Profession.FARMER);
|
||||
player.playSound(player.getLocation(), Sound.ORB_PICKUP, 1, 0.5F);
|
||||
player.sendMessage(F.main("Game", "Your " + F.name(data.Type.getChatColour() + data.Type.getName()) + " Art ended."));
|
||||
return true;
|
||||
}
|
||||
|
||||
long time = System.currentTimeMillis() - data.Start;
|
||||
|
||||
if (time > _duration - 2000 && data.Sounds == 0 || time > _duration - 1000 && data.Sounds == 1)
|
||||
{
|
||||
player.playSound(player.getLocation(), Sound.ORB_PICKUP, 1, 0.3F);
|
||||
data.Sounds++;
|
||||
}
|
||||
|
||||
player.setExp(Math.max(1 - time / (float) _duration, 0));
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerDeath(PlayerDeathEvent event)
|
||||
{
|
||||
_data.keySet().removeIf(player -> event.getEntity().equals(player));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void damage(CustomDamageEvent event)
|
||||
{
|
||||
if (event.isCancelled() || event.GetCause() != DamageCause.ENTITY_ATTACK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player damager = event.GetDamagerPlayer(false);
|
||||
String key = "Knockback Multiplier";
|
||||
Double value = event.GetKnockback().get(key);
|
||||
|
||||
if (damager == null || value == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (isSuperActive(damager))
|
||||
{
|
||||
LivingEntity damagee = event.GetDamageeEntity();
|
||||
damagee.getWorld().playEffect(damagee.getLocation().add(0, 1, 0), Effect.STEP_SOUND, Material.IRON_BLOCK);
|
||||
|
||||
event.AddMod("Perfection", _attackDamageMod);
|
||||
return;
|
||||
}
|
||||
else if (event.GetDamageePlayer() != null && isSuperActive(event.GetDamageePlayer()))
|
||||
{
|
||||
event.AddKnockback("Perfection", _defenseKBMod);
|
||||
return;
|
||||
}
|
||||
|
||||
ArtData data = _data.get(damager);
|
||||
|
||||
if (data == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (data.Type)
|
||||
{
|
||||
case ATTACK:
|
||||
event.AddMod(data.Type.getName(), _attackDamageMod);
|
||||
value += _attackKBMod;
|
||||
break;
|
||||
case DEFENSE:
|
||||
event.AddMod(data.Type.getName(), _defenseDamageMod);
|
||||
value += _defenseKBMod;
|
||||
break;
|
||||
case SPEED:
|
||||
event.AddMod(data.Type.getName(), _speedDamageMod);
|
||||
value += _speedKBMod;
|
||||
break;
|
||||
}
|
||||
|
||||
event.GetKnockback().put(key, value);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void doubleJump(PerkDoubleJumpEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
double increase = 0;
|
||||
|
||||
if (isSuperActive(player))
|
||||
{
|
||||
increase = _speedDoubleJumpMod;
|
||||
event.setControl(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
ArtData data = _data.get(player);
|
||||
|
||||
if (data == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (data.Type)
|
||||
{
|
||||
case ATTACK:
|
||||
increase = _attackDoubleJumpMod;
|
||||
break;
|
||||
case DEFENSE:
|
||||
increase = _defenseDoubleJumpMod;
|
||||
break;
|
||||
case SPEED:
|
||||
increase = _speedDoubleJumpMod;
|
||||
event.setControl(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
event.setPower(event.getPower() + increase);
|
||||
}
|
||||
|
||||
private void reset(Player player)
|
||||
{
|
||||
player.setWalkSpeed(0.2F);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void smashActivate(SmashActivateEvent event)
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_data.remove(player);
|
||||
reset(player);
|
||||
player.setWalkSpeed(player.getWalkSpeed() + _speedSpeedMod);
|
||||
KitVillager kit = (KitVillager) Kit;
|
||||
player.getInventory().setItem(KitVillager.ART_ACTIVE_SLOT, kit.getArtItem(player, true));
|
||||
}
|
||||
|
||||
public VillagerType getActiveArt(Player player)
|
||||
{
|
||||
ArtData data = _data.get(player);
|
||||
return data == null ? null : data.Type;
|
||||
}
|
||||
|
||||
private class ArtData
|
||||
{
|
||||
VillagerType Type;
|
||||
long Start;
|
||||
int Sounds;
|
||||
|
||||
ArtData(VillagerType type)
|
||||
{
|
||||
Type = type;
|
||||
Start = System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,108 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.villager;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
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.particleeffects.SpiralEffect;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkSonicBoom extends SmashPerk
|
||||
{
|
||||
|
||||
private int _cooldown;
|
||||
private int _distance;
|
||||
private double _damage;
|
||||
private float _hitBox, _velocityFactor;
|
||||
|
||||
public PerkSonicBoom()
|
||||
{
|
||||
super("Sonic Hurr", new String[]
|
||||
{
|
||||
C.cYellow + "Right-Click" + C.cGray + " Axe to use" + C.cGreen + "Sonic Hurr",
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupValues()
|
||||
{
|
||||
_cooldown = getPerkTime("Cooldown");
|
||||
_distance = getPerkInt("Distance");
|
||||
_damage = getPerkDouble("Damage");
|
||||
_hitBox = getPerkFloat("Hitbox");
|
||||
_velocityFactor = getPerkFloat("Velocity Factor");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void playerInteract(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled() || !UtilEvent.isAction(event, ActionType.R) || UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
ItemStack itemStack = player.getItemInHand();
|
||||
|
||||
if (!UtilItem.isAxe(itemStack) || !hasPerk(player) || !Recharge.Instance.use(player, GetName(), _cooldown, true, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Location location = player.getEyeLocation();
|
||||
location.add(location.getDirection());
|
||||
|
||||
player.sendMessage(F.main("Game", "You used " + F.skill(GetName()) + "."));
|
||||
player.getWorld().playSound(location, Sound.VILLAGER_IDLE, 1.5F, 1.2F);
|
||||
|
||||
new SpiralEffect(1, 2, _distance * 10, location)
|
||||
{
|
||||
@Override
|
||||
public void playParticle(Location location)
|
||||
{
|
||||
UtilParticle.PlayParticleToAll(ParticleType.CLOUD, location, null, 0, 1, ViewDist.NORMAL);
|
||||
|
||||
if (Math.random() < 0.05)
|
||||
{
|
||||
UtilParticle.PlayParticleToAll(ParticleType.ANGRY_VILLAGER, location, 0.3F, 0.3F, 0.3F, 0, 1, ViewDist.NORMAL);
|
||||
}
|
||||
}
|
||||
}.start();
|
||||
|
||||
Location center = location.clone().add(location.getDirection().multiply(_distance / 2D)).subtract(0, 0.5, 0);
|
||||
|
||||
for (Player nearby : UtilPlayer.getNearby(center, _hitBox))
|
||||
{
|
||||
if (player.equals(nearby) || isTeamDamage(player, nearby))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
double scale = 1 - UtilMath.offset(player, nearby) / _distance / 2;
|
||||
|
||||
Manager.GetDamage().NewDamageEvent(nearby, player, null, DamageCause.CUSTOM, scale * _damage, false, true, false, player.getName(), GetName());
|
||||
|
||||
UtilAction.velocity(nearby, UtilAlg.getTrajectory(player, nearby), scale * _velocityFactor, false, 0, 0.5, 0.8, true);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,242 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.villager;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.projectile.IThrown;
|
||||
import mineplex.core.projectile.ProjectileUser;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitVillager;
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitVillager.VillagerType;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkVillagerShot extends SmashPerk implements IThrown
|
||||
{
|
||||
|
||||
private long _cooldown;
|
||||
private float _bulletVelocity;
|
||||
private float _bulletKnockback;
|
||||
private int _bullets;
|
||||
private float _hitBox;
|
||||
|
||||
private double _normalRecoil, _attackRecoil, _defenseRecoil, _speedRecoil;
|
||||
private double _normalSpread, _attackSpread, _defenseSpread, _speedSpread;
|
||||
private double _normalDamage, _attackDamage, _defenseDamage, _speedDamage;
|
||||
|
||||
private final Map<Item, VillagerType> _items;
|
||||
|
||||
public PerkVillagerShot()
|
||||
{
|
||||
super("Trade Scatter", new String[]
|
||||
{
|
||||
C.cYellow + "Right-Click" + C.cGray + " Hoe to use" + C.cGreen + "Trade Scatter",
|
||||
});
|
||||
|
||||
_items = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupValues()
|
||||
{
|
||||
_cooldown = getPerkTime("Cooldown");
|
||||
_bulletVelocity = getPerkFloat("Bullet Velocity");
|
||||
_bulletKnockback = getPerkFloat("Bullet Knockback");
|
||||
_bullets = getPerkInt("Bullets");
|
||||
_hitBox = getPerkFloat("Hitbox");
|
||||
|
||||
_normalRecoil = getPerkDouble("Normal.Recoil");
|
||||
_attackRecoil = getPerkDouble("Attack.Recoil");
|
||||
_defenseRecoil = getPerkDouble("Defense.Recoil");
|
||||
_speedRecoil = getPerkDouble("Speed.Recoil");
|
||||
|
||||
_normalSpread = getPerkDouble("Normal.Spread");
|
||||
_attackSpread = getPerkDouble("Attack.Spread");
|
||||
_defenseSpread = getPerkDouble("Defense.Spread");
|
||||
_speedSpread = getPerkDouble("Speed.Spread");
|
||||
|
||||
_normalDamage = getPerkDouble("Normal.Damage");
|
||||
_attackDamage = getPerkDouble("Attack.Damage");
|
||||
_defenseDamage = getPerkDouble("Defense.Damage");
|
||||
_speedDamage = getPerkDouble("Speed.Damage");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void playerInteract(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled() || !UtilEvent.isAction(event, ActionType.R) || UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
ItemStack itemStack = player.getItemInHand();
|
||||
|
||||
if (!UtilItem.isHoe(itemStack) || !hasPerk(player) || !Recharge.Instance.use(player, GetName(), _cooldown, true, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
KitVillager kit = ((KitVillager) Kit);
|
||||
VillagerType type = kit.getActiveArt(player);
|
||||
Material material = Material.EMERALD;
|
||||
ParticleType particleType = ParticleType.HAPPY_VILLAGER;
|
||||
double recoil = _normalRecoil, spread = _normalSpread;
|
||||
boolean front = type != null && (type == VillagerType.ATTACK || type == VillagerType.DEFENSE);
|
||||
|
||||
if (isSuperActive(player))
|
||||
{
|
||||
material = Material.NETHER_STAR;
|
||||
particleType = ParticleType.ANGRY_VILLAGER;
|
||||
recoil = _speedRecoil;
|
||||
spread = _attackSpread;
|
||||
type = VillagerType.ATTACK;
|
||||
front = true;
|
||||
}
|
||||
else if (type != null)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case ATTACK:
|
||||
material = Material.RAW_BEEF;
|
||||
particleType = ParticleType.FLAME;
|
||||
recoil = _attackRecoil;
|
||||
spread = _attackSpread;
|
||||
break;
|
||||
case DEFENSE:
|
||||
material = Material.IRON_INGOT;
|
||||
particleType = ParticleType.FIREWORKS_SPARK;
|
||||
recoil = _defenseRecoil;
|
||||
spread = _defenseSpread;
|
||||
break;
|
||||
case SPEED:
|
||||
material = Material.FEATHER;
|
||||
particleType = ParticleType.ENCHANTMENT_TABLE;
|
||||
recoil = _speedRecoil;
|
||||
spread = _speedSpread;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Location location;
|
||||
Vector direction;
|
||||
|
||||
if (front)
|
||||
{
|
||||
location = player.getEyeLocation();
|
||||
direction = location.getDirection();
|
||||
recoil = -recoil;
|
||||
}
|
||||
else
|
||||
{
|
||||
location = player.getLocation().add(0, 1.3, 0);
|
||||
direction = location.getDirection().multiply(-_bulletVelocity);
|
||||
}
|
||||
|
||||
UtilAction.velocity(player, recoil, 0.3, 1.2, true);
|
||||
player.getWorld().playSound(location, Sound.FIREWORK_LARGE_BLAST, 1.5F, 1);
|
||||
|
||||
for (int i = 0; i < _bullets; i++)
|
||||
{
|
||||
boolean reduceParticles = type != null && type == VillagerType.ATTACK;
|
||||
Item item = location.getWorld().dropItem(location, new ItemBuilder(material).setTitle("Bullet" + UtilMath.r(100)).build());
|
||||
Vector itemDirection = direction.clone().add(new Vector((Math.random() - 0.5) * spread, (Math.random() - 0.5) * spread, (Math.random() - 0.5) * spread));
|
||||
item.setVelocity(itemDirection);
|
||||
_items.put(item, type);
|
||||
Manager.GetProjectile().AddThrow(item, player, this, 5000, true, true, false, true, null, 0, 0, particleType, reduceParticles ? UpdateType.FASTEST : UpdateType.TICK, _hitBox);
|
||||
}
|
||||
|
||||
player.sendMessage(F.main("Game", "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void damage(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), _bulletKnockback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
||||
{
|
||||
VillagerType type = remove(data);
|
||||
double damage = _normalDamage;
|
||||
|
||||
if (target == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (type != null)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case ATTACK:
|
||||
damage = _attackDamage;
|
||||
break;
|
||||
case DEFENSE:
|
||||
damage = _defenseDamage;
|
||||
break;
|
||||
case SPEED:
|
||||
damage = _speedDamage;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.CUSTOM, damage, true, true, false, data.getThrower().getName(), GetName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Idle(ProjectileUser data)
|
||||
{
|
||||
remove(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Expire(ProjectileUser data)
|
||||
{
|
||||
remove(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ChunkUnload(ProjectileUser data)
|
||||
{
|
||||
remove(data);
|
||||
}
|
||||
|
||||
private VillagerType remove(ProjectileUser data)
|
||||
{
|
||||
data.getThrown().remove();
|
||||
return _items.remove(data.getThrown());
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.villager;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mineplex.core.recharge.Recharge;
|
||||
|
||||
import nautilus.game.arcade.game.games.smash.kits.KitVillager.VillagerType;
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||
|
||||
public class SmashVillager extends SmashUltimate
|
||||
{
|
||||
|
||||
public SmashVillager()
|
||||
{
|
||||
super("Perfection", new String[0], Sound.VILLAGER_YES, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activate(Player player)
|
||||
{
|
||||
super.activate(player);
|
||||
|
||||
for (VillagerType type : VillagerType.values())
|
||||
{
|
||||
Recharge.Instance.useForce(player, type.getName(), getLength());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(Player player)
|
||||
{
|
||||
super.cancel(player);
|
||||
|
||||
player.setWalkSpeed(0.2F);
|
||||
}
|
||||
}
|
@ -12,6 +12,8 @@ import org.bukkit.entity.ThrownPotion;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
@ -57,7 +59,7 @@ public class PerkWitchPotion extends SmashPerk implements IThrown
|
||||
public void setupValues()
|
||||
{
|
||||
_cooldown = getPerkTime("Cooldown");
|
||||
_range = getPerkInt( "Range");
|
||||
_range = getPerkInt("Range");
|
||||
_damageDirect = getPerkInt("Damage Direct");
|
||||
_damageDistance = getPerkInt("Damage Distance");
|
||||
_knockbackMagnitude = getPerkInt("Knockback Magnitude");
|
||||
@ -172,7 +174,7 @@ public class PerkWitchPotion extends SmashPerk implements IThrown
|
||||
Vector b = data.getThrown().getLocation().add(_range, _range, _range).toVector();
|
||||
for (Player player : players)
|
||||
{
|
||||
if(!UtilEnt.isInsideBoundingBox(player, a, b)) continue;
|
||||
if (!UtilEnt.isInsideBoundingBox(player, a, b)) continue;
|
||||
|
||||
Manager.GetDamage().NewDamageEvent(player, thrower, null, DamageCause.CUSTOM, _damageDistance, true, true, false, thrower.getName(), GetName());
|
||||
Manager.GetCondition().Factory().Slow(GetName(), player, thrower, 2, 0, true, true, false, false);
|
||||
|
@ -5,7 +5,6 @@ import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
@ -17,6 +16,9 @@ import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
@ -30,10 +32,10 @@ import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.core.utils.UtilVariant;
|
||||
import mineplex.core.velocity.VelocityFix;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class PerkWitherImage extends SmashPerk
|
||||
{
|
||||
@ -103,7 +105,7 @@ public class PerkWitherImage extends SmashPerk
|
||||
// Spawn
|
||||
Manager.GetGame().CreatureAllowOverride = true;
|
||||
|
||||
Skeleton skel = UtilVariant.spawnWitherSkeleton(player.getEyeLocation().add(player.getLocation().getDirection()));
|
||||
Skeleton skel = UtilVariant.spawnWitherSkeleton(player.getEyeLocation());
|
||||
|
||||
Manager.GetGame().CreatureAllowOverride = false;
|
||||
|
||||
@ -131,6 +133,7 @@ public class PerkWitherImage extends SmashPerk
|
||||
skel.setCustomName(C.cYellow + player.getName());
|
||||
}
|
||||
|
||||
skel.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 1, false, false));
|
||||
skel.setCustomNameVisible(true);
|
||||
|
||||
UtilAction.velocity(skel, player.getLocation().getDirection(), 1.6, false, 0, 0.2, 10, true);
|
||||
@ -160,7 +163,8 @@ public class PerkWitherImage extends SmashPerk
|
||||
skel.teleport(player.getLocation());
|
||||
UtilAction.velocity(skel, oldPlayerVector);
|
||||
player.teleport(loc);
|
||||
UtilAction.velocity(player, oldSkeletonVector);
|
||||
// Not using UtilAction.velocity because it causes the player not to get the correct velocity
|
||||
player.setVelocity(oldSkeletonVector);
|
||||
|
||||
// Sound
|
||||
player.getWorld().playSound(player.getLocation(), Sound.WITHER_SPAWN, 1f, 2f);
|
||||
@ -173,22 +177,23 @@ public class PerkWitherImage extends SmashPerk
|
||||
@EventHandler
|
||||
public void entityTarget(EntityTargetEvent event)
|
||||
{
|
||||
if (_skeletons.containsValue(event.getEntity()))
|
||||
if (!(event.getEntity() instanceof Skeleton))
|
||||
{
|
||||
if (event.getTarget() instanceof Player)
|
||||
{
|
||||
if (isTeamDamage((Player) event.getTarget(), getOwner((Skeleton) event.getEntity())))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getTarget() != null && event.getEntity().equals(_skeletons.get(event.getTarget().getUniqueId())))
|
||||
Player owner = getOwner((Skeleton) event.getEntity());
|
||||
|
||||
if (owner == null || event.getTarget() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getTarget() instanceof Player && isTeamDamage((Player) event.getTarget(), owner) || event.getTarget().equals(owner))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void damage(CustomDamageEvent event)
|
||||
|
@ -1,22 +1,19 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.witherskeleton;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.WitherSkull;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
@ -30,27 +27,28 @@ 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.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||
|
||||
public class PerkWitherSkull extends SmashPerk
|
||||
{
|
||||
|
||||
private static final ItemStack HELMET = new ItemStack(Material.SKULL_ITEM, 1, (short) 0, (byte) 1);
|
||||
|
||||
private int _cooldownNormal;
|
||||
private int _cooldownSmash;
|
||||
private int _damage;
|
||||
private float _knockbackMagnitude;
|
||||
private float _skullVelocity, _knockbackMagnitude;
|
||||
|
||||
private Map<WitherSkull, Vector> _active = new HashMap<>();
|
||||
private Set<UUID> _ignoreControl = new HashSet<>();
|
||||
private final Set<SkullData> _active = new HashSet<>();
|
||||
|
||||
public PerkWitherSkull()
|
||||
{
|
||||
super("Wither Skull", new String[] { C.cYellow + "Hold Block" + C.cGray + " to use " + C.cGreen + "Wither Skull" });
|
||||
super("Wither Skull", new String[] {C.cYellow + "Hold Block" + C.cGray + " to use " + C.cGreen + "Wither Skull"});
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -59,6 +57,7 @@ public class PerkWitherSkull extends SmashPerk
|
||||
_cooldownNormal = getPerkTime("Cooldown Normal");
|
||||
_cooldownSmash = getPerkTime("Cooldown Smash");
|
||||
_damage = getPerkInt("Damage");
|
||||
_skullVelocity = getPerkFloat("Skull Velocity");
|
||||
_knockbackMagnitude = getPerkFloat("Knockback Magnitude");
|
||||
}
|
||||
|
||||
@ -66,12 +65,7 @@ public class PerkWitherSkull extends SmashPerk
|
||||
// triggered
|
||||
public void activate(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
if (event.isCancelled() || UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -79,40 +73,25 @@ public class PerkWitherSkull extends SmashPerk
|
||||
Player player = event.getPlayer();
|
||||
boolean smash = isSuperActive(player);
|
||||
|
||||
if (!smash)
|
||||
{
|
||||
if (!UtilItem.isSword(player.getItemInHand()))
|
||||
if (!smash && (!UtilItem.isSword(player.getItemInHand()) || !UtilEvent.isAction(event, ActionType.R)))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
if (!hasPerk(player) || !Recharge.Instance.use(player, GetName(), smash ? _cooldownSmash : _cooldownNormal, !smash, !smash))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), smash ? _cooldownSmash : _cooldownNormal, !smash, !smash))
|
||||
{
|
||||
return;
|
||||
}
|
||||
Manager.GetGame().CreatureAllowOverride = true;
|
||||
Location location = player.getLocation();
|
||||
ArmorStand skull = player.getWorld().spawn(location, ArmorStand.class);
|
||||
skull.setHelmet(HELMET);
|
||||
skull.setGravity(false);
|
||||
skull.setVisible(false);
|
||||
_active.add(new SkullData(player, skull, location.getDirection().multiply(_skullVelocity), !smash));
|
||||
Manager.GetGame().CreatureAllowOverride = false;
|
||||
|
||||
// Fire
|
||||
WitherSkull skull = player.launchProjectile(WitherSkull.class);
|
||||
|
||||
if (!smash)
|
||||
{
|
||||
skull.setDirection(player.getLocation().getDirection());
|
||||
}
|
||||
|
||||
_active.put(skull, player.getLocation().getDirection().multiply(0.6));
|
||||
|
||||
// Sound
|
||||
player.getWorld().playSound(player.getLocation(), Sound.WITHER_SHOOT, 1f, 1f);
|
||||
|
||||
// Inform
|
||||
@ -120,19 +99,9 @@ public class PerkWitherSkull extends SmashPerk
|
||||
{
|
||||
UtilPlayer.message(player, F.main("Skill", "You launched " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
// Control
|
||||
if (!smash)
|
||||
{
|
||||
_ignoreControl.remove(player.getUniqueId());
|
||||
}
|
||||
else
|
||||
{
|
||||
_ignoreControl.add(player.getUniqueId());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void cleanAndControl(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
@ -140,94 +109,94 @@ public class PerkWitherSkull extends SmashPerk
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<WitherSkull> skullIterator = _active.keySet().iterator();
|
||||
|
||||
while (skullIterator.hasNext())
|
||||
_active.removeIf(skullData ->
|
||||
{
|
||||
WitherSkull skull = skullIterator.next();
|
||||
Player player = (Player) skull.getShooter();
|
||||
Player shooter = skullData.Shooter;
|
||||
ArmorStand skullHolder = skullData.SkullHolder;
|
||||
|
||||
if (!skull.isValid())
|
||||
if (!skullHolder.isValid())
|
||||
{
|
||||
skullIterator.remove();
|
||||
skull.remove();
|
||||
continue;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (_ignoreControl.contains(player.getUniqueId()))
|
||||
if (skullData.Control && shooter.isBlocking())
|
||||
{
|
||||
skullData.Direction = shooter.getLocation().getDirection();
|
||||
}
|
||||
|
||||
Location newLocation = skullHolder.getLocation().add(skullData.Direction.clone().multiply(1.6));
|
||||
skullHolder.teleport(newLocation);
|
||||
UtilParticle.PlayParticleToAll(ParticleType.SMOKE, newLocation.add(0, 2, 0), null, 0.01F, 2, ViewDist.LONG);
|
||||
|
||||
boolean hitEntity = false, hitBlock = UtilBlock.solid(skullHolder.getLocation().add(0, 1.5, 0).getBlock());
|
||||
|
||||
if (!hitBlock)
|
||||
{
|
||||
for (LivingEntity entity : UtilEnt.getInRadius(newLocation, 1).keySet())
|
||||
{
|
||||
if (entity.equals(shooter) || entity.equals(skullHolder))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player.isBlocking() && !_ignoreControl.contains(player.getUniqueId()))
|
||||
{
|
||||
skull.setDirection(player.getLocation().getDirection());
|
||||
skull.setVelocity(player.getLocation().getDirection().multiply(0.6));
|
||||
_active.put(skull, player.getLocation().getDirection().multiply(0.6));
|
||||
}
|
||||
else
|
||||
{
|
||||
_ignoreControl.add(player.getUniqueId());
|
||||
skull.setDirection(_active.get(skull));
|
||||
skull.setVelocity(_active.get(skull));
|
||||
}
|
||||
hitEntity = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void explode(EntityExplodeEvent event)
|
||||
if (hitEntity || hitBlock)
|
||||
{
|
||||
if (!_active.containsKey(event.getEntity()))
|
||||
explode(skullData, hitBlock);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
private void explode(SkullData skullData, boolean adjustY)
|
||||
{
|
||||
ArmorStand skullHolder = skullData.SkullHolder;
|
||||
Location location = skullHolder.getLocation();
|
||||
double scale = 0.4 + 0.6 * Math.min(1, skullHolder.getTicksLived() / 20d);
|
||||
|
||||
if (adjustY)
|
||||
{
|
||||
location.add(0, 2, 0);
|
||||
}
|
||||
|
||||
UtilPlayer.getInRadius(location, 6).forEach((player, scale1) ->
|
||||
{
|
||||
if (player.equals(skullData.Shooter))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
Manager.GetDamage().NewDamageEvent(player, skullData.Shooter, null, DamageCause.CUSTOM, _damage * scale * scale1, true, true, false, skullData.Shooter.getName(), GetName());
|
||||
});
|
||||
|
||||
WitherSkull skull = (WitherSkull) event.getEntity();
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, skull.getLocation(), 0, 0, 0, 0, 1, ViewDist.MAX, UtilServer.getPlayers());
|
||||
|
||||
explode(skull, event.getLocation(), (LivingEntity) skull.getShooter());
|
||||
location.getWorld().playSound(location, Sound.EXPLODE, 2.5F, 0.4F);
|
||||
UtilParticle.PlayParticleToAll(ParticleType.HUGE_EXPLOSION, location, null, 0, 1, ViewDist.LONG);
|
||||
skullHolder.remove();
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void explodeDamage(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.GetProjectile() != null && event.GetProjectile() instanceof WitherSkull)
|
||||
{
|
||||
event.SetCancelled("Wither Skull Cancel");
|
||||
}
|
||||
}
|
||||
|
||||
private void explode(WitherSkull skull, Location loc, LivingEntity shooter)
|
||||
{
|
||||
double scale = 0.4 + 0.6 * Math.min(1, skull.getTicksLived() / 20d);
|
||||
|
||||
// Players
|
||||
Map<Player, Double> players = UtilPlayer.getInRadius(skull.getLocation(), 6);
|
||||
|
||||
for (Player player : players.keySet())
|
||||
{
|
||||
if (Manager.isSpectator(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(player, (LivingEntity) skull.getShooter(), null, DamageCause.CUSTOM, _damage * players.get(player) * scale, true, true, false, UtilEnt.getName(
|
||||
(LivingEntity) skull.getShooter()), GetName());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (SkullData data : _active)
|
||||
{
|
||||
if (data.SkullHolder.equals(event.GetDamageeEntity()))
|
||||
{
|
||||
event.SetCancelled("Wither Skull Holder");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
@ -235,4 +204,21 @@ public class PerkWitherSkull extends SmashPerk
|
||||
|
||||
event.AddKnockback(GetName(), _knockbackMagnitude);
|
||||
}
|
||||
|
||||
private class SkullData
|
||||
{
|
||||
|
||||
Player Shooter;
|
||||
ArmorStand SkullHolder;
|
||||
Vector Direction;
|
||||
boolean Control;
|
||||
|
||||
SkullData(Player shooter, ArmorStand skullHolder, Vector direction, boolean control)
|
||||
{
|
||||
Shooter = shooter;
|
||||
SkullHolder = skullHolder;
|
||||
Direction = direction;
|
||||
Control = control;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package nautilus.game.arcade.game.games.smash.perks.wolf;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
@ -63,8 +64,8 @@ public class PerkWolf extends SmashPerk
|
||||
|
||||
public PerkWolf()
|
||||
{
|
||||
super("Wolf", new String[] { C.cGray + "Attacks give +1 Damage for 3 seconds. Stacks.", C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + CUB_TACKLE, C.cYellow
|
||||
+ "Right-Click" + C.cGray + " with Spade to use " + C.cGreen + WOLF_STRIKE, C.cGray + "Wolf Strike deals 300% Knockback to tackled opponents.", });
|
||||
super("Wolf", new String[] {C.cGray + "Attacks give +1 Damage for 3 seconds. Stacks.", C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + CUB_TACKLE, C.cYellow
|
||||
+ "Right-Click" + C.cGray + " with Spade to use " + C.cGreen + WOLF_STRIKE, C.cGray + "Wolf Strike deals 300% Knockback to tackled opponents.",});
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -253,7 +254,7 @@ public class PerkWolf extends SmashPerk
|
||||
}
|
||||
}
|
||||
|
||||
public Player tackleGetOwner(Wolf wolf)
|
||||
private Player tackleGetOwner(Wolf wolf)
|
||||
{
|
||||
if (_owner.containsKey(wolf))
|
||||
{
|
||||
@ -475,8 +476,7 @@ public class PerkWolf extends SmashPerk
|
||||
|
||||
if (!_repeat.containsKey(damager.getUniqueId()))
|
||||
{
|
||||
_repeat.put(damager.getUniqueId(), new ArrayList<Long>());
|
||||
_repeat.get(damager.getUniqueId()).add(System.currentTimeMillis());
|
||||
_repeat.put(damager.getUniqueId(), new ArrayList<>(Collections.singletonList(System.currentTimeMillis())));
|
||||
|
||||
// Exp
|
||||
damager.setExp(Math.min(0.99F, _repeat.get(damager.getUniqueId()).size() / 9f));
|
||||
@ -526,7 +526,7 @@ public class PerkWolf extends SmashPerk
|
||||
// Exp
|
||||
player.setExp(Math.min(0.999f, _repeat.get(uuid).size() / 9f));
|
||||
|
||||
if(_repeat.get(uuid).isEmpty())
|
||||
if (_repeat.get(uuid).isEmpty())
|
||||
{
|
||||
playerIterator.remove();
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ public class SmashZombie extends SmashUltimate
|
||||
@EventHandler
|
||||
public void timeUpdate(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
if (event.getType() != UpdateType.TICK || !Manager.GetGame().IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.wizards.spells;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
@ -27,7 +28,7 @@ public class SpellGust extends Spell implements SpellClick
|
||||
|
||||
final double gustSize = (getSpellLevel(player) * 3) + 10;
|
||||
|
||||
final HashMap<Player, Double> effected = UtilPlayer.getPlayersInPyramid(player, 45, gustSize);
|
||||
final Map<Player, Double> effected = UtilPlayer.getPlayersInPyramid(player, 45, gustSize);
|
||||
|
||||
Iterator<Entry<Player, Double>> itel = effected.entrySet().iterator();
|
||||
|
||||
|
@ -1,18 +1,11 @@
|
||||
package nautilus.game.arcade.game.modules;
|
||||
|
||||
import mineplex.core.common.events.EntityVelocityChangeEvent;
|
||||
import mineplex.core.common.util.*;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.Game;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.kit.ProgressingKit;
|
||||
import nautilus.game.arcade.managers.LobbyEnt;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||
@ -28,8 +21,24 @@ import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerLoginEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import mineplex.core.common.events.EntityVelocityChangeEvent;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.Game;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.kit.ProgressingKit;
|
||||
import nautilus.game.arcade.managers.LobbyEnt;
|
||||
|
||||
public class TrainingGameModule extends Module
|
||||
{
|
||||
@ -43,8 +52,9 @@ public class TrainingGameModule extends Module
|
||||
|
||||
private final Set<LobbyEnt> _kits;
|
||||
private Function<Player, GameTeam> _teamFunction;
|
||||
private Function<Player, Boolean> _skillFunction;
|
||||
private Function<Player, Boolean> _damageFunction;
|
||||
private Predicate<Player> _skillFunction;
|
||||
private Predicate<Player> _damageFunction;
|
||||
private Predicate<Player> _kitSelectFunction;
|
||||
private boolean _giveReturnToSpawn = true;
|
||||
|
||||
public TrainingGameModule()
|
||||
@ -122,7 +132,7 @@ public class TrainingGameModule extends Module
|
||||
Entity entity = event.getRightClicked();
|
||||
LobbyEnt lobbyEnt = getFromEntity(entity);
|
||||
|
||||
if (UtilPlayer.isSpectator(player))
|
||||
if (UtilPlayer.isSpectator(player) || (_kitSelectFunction != null && !_kitSelectFunction.test(player)))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -220,7 +230,7 @@ public class TrainingGameModule extends Module
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!_skillFunction.apply(player))
|
||||
if (!_skillFunction.test(player))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -236,7 +246,7 @@ public class TrainingGameModule extends Module
|
||||
|
||||
Player player = (Player) event.getEntity();
|
||||
|
||||
if (!_skillFunction.apply(player))
|
||||
if (!_skillFunction.test(player))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -262,12 +272,7 @@ public class TrainingGameModule extends Module
|
||||
}
|
||||
}
|
||||
|
||||
if (_damageFunction == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_damageFunction.apply(player))
|
||||
if (_damageFunction != null && !_damageFunction.test(player))
|
||||
{
|
||||
event.SetCancelled("Training Area");
|
||||
}
|
||||
@ -285,7 +290,7 @@ public class TrainingGameModule extends Module
|
||||
|
||||
Player player = (Player) entity;
|
||||
|
||||
if (!_damageFunction.apply(player))
|
||||
if (!_damageFunction.test(player))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -337,24 +342,35 @@ public class TrainingGameModule extends Module
|
||||
}
|
||||
}
|
||||
|
||||
public void preventReturnToSpawn(Player player)
|
||||
{
|
||||
Recharge.Instance.useForce(player, RETURN_TO_SPAWN_RECHARGE, RETURN_TO_SPAWN_COOLDOWN);
|
||||
}
|
||||
|
||||
public TrainingGameModule setTeamFunction(Function<Player, GameTeam> function)
|
||||
{
|
||||
_teamFunction = function;
|
||||
return this;
|
||||
}
|
||||
|
||||
public TrainingGameModule setSkillFunction(Function<Player, Boolean> function)
|
||||
public TrainingGameModule setSkillFunction(Predicate<Player> function)
|
||||
{
|
||||
_skillFunction = function;
|
||||
return this;
|
||||
}
|
||||
|
||||
public TrainingGameModule setDamageFunction(Function<Player, Boolean> function)
|
||||
public TrainingGameModule setDamageFunction(Predicate<Player> function)
|
||||
{
|
||||
_damageFunction = function;
|
||||
return this;
|
||||
}
|
||||
|
||||
public TrainingGameModule setKitSelectFunction(Predicate<Player> function)
|
||||
{
|
||||
_kitSelectFunction = function;
|
||||
return this;
|
||||
}
|
||||
|
||||
public TrainingGameModule setGiveReturnToSpawn(boolean b)
|
||||
{
|
||||
_giveReturnToSpawn = b;
|
||||
|
@ -10,6 +10,7 @@ import java.util.stream.Stream;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -90,6 +91,7 @@ public class CompassModule extends Module
|
||||
HandlerList.unregisterAll(_compassMenu);
|
||||
_compassMenu = null;
|
||||
_suppliers = null;
|
||||
UtilServer.getPlayersCollection().forEach(player -> ((CraftPlayer) player).getHandle().compassTarget = null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,31 @@
|
||||
package nautilus.game.arcade.game.modules.perks;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mineplex.core.command.CommandBase;
|
||||
import mineplex.core.common.util.F;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.games.smash.SuperSmash.Perm;
|
||||
|
||||
public class PerkOverrideLoadCommand extends CommandBase<ArcadeManager>
|
||||
{
|
||||
|
||||
private final PerkSpreadsheetModule _module;
|
||||
|
||||
public PerkOverrideLoadCommand(ArcadeManager manager, PerkSpreadsheetModule module)
|
||||
{
|
||||
super(manager, Perm.DEBUG_PERK_COMMANDS, "perkload");
|
||||
|
||||
_module = module;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Execute(Player caller, String[] args)
|
||||
{
|
||||
_module.setup();
|
||||
caller.sendMessage(F.main("Game", "Overridden Values:"));
|
||||
|
||||
PerkSpreadsheetModule.getValueOverrideMap().forEach((key, value) -> caller.sendMessage(F.main("Game", F.name(key) + " -> " + F.elem(value) + ".")));
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package nautilus.game.arcade.game.modules.perks;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mineplex.core.command.CommandBase;
|
||||
import mineplex.core.common.util.F;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.games.smash.SuperSmash.Perm;
|
||||
|
||||
public class PerkOverrideValueCommand extends CommandBase<ArcadeManager>
|
||||
{
|
||||
|
||||
private final PerkSpreadsheetModule _module;
|
||||
|
||||
public PerkOverrideValueCommand(ArcadeManager manager, PerkSpreadsheetModule module)
|
||||
{
|
||||
super(manager, Perm.DEBUG_PERK_COMMANDS, "perkoverride");
|
||||
|
||||
_module = module;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Execute(Player caller, String[] args)
|
||||
{
|
||||
if (args.length < 1)
|
||||
{
|
||||
sendUsage(caller);
|
||||
return;
|
||||
}
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
// Ignore the last argument
|
||||
for (int i = 0; i < args.length - 1; i++)
|
||||
{
|
||||
builder.append(args[i]).append(" ");
|
||||
}
|
||||
|
||||
String key = builder.toString().trim();
|
||||
String value = args[args.length - 1];
|
||||
|
||||
if (!_module.getDataMap().containsKey(key))
|
||||
{
|
||||
caller.sendMessage(F.main("Game", "That is not a valid key."));
|
||||
return;
|
||||
}
|
||||
else if (value.equalsIgnoreCase("clear"))
|
||||
{
|
||||
PerkSpreadsheetModule.getValueOverrideMap().remove(key);
|
||||
caller.sendMessage(F.main("Game", "Reset the perk variable " + F.name(key) + " to it's default value."));
|
||||
return;
|
||||
}
|
||||
|
||||
PerkSpreadsheetModule.getValueOverrideMap().put(key, value);
|
||||
caller.sendMessage(F.main("Game", "Overrode the perk variable " + F.name(key) + " with value " + F.elem(value) + "."));
|
||||
}
|
||||
|
||||
private void sendUsage(Player caller)
|
||||
{
|
||||
caller.sendMessage(F.main("Game", "/" + _aliasUsed + " <key> <value>"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, String commandLabel, String[] args)
|
||||
{
|
||||
return new ArrayList<>(_module.getDataMap().keySet());
|
||||
}
|
||||
}
|
@ -1,65 +1,65 @@
|
||||
package nautilus.game.arcade.managers;
|
||||
package nautilus.game.arcade.game.modules.perks;
|
||||
|
||||
import mineplex.core.common.Pair;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.google.GoogleSheetsManager;
|
||||
import mineplex.core.google.SheetObjectDeserialiser;
|
||||
import mineplex.core.slack.SlackAPI;
|
||||
import mineplex.core.slack.SlackMessage;
|
||||
import mineplex.core.slack.SlackTeam;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.Game;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class PerkSpreadsheetModule implements Listener
|
||||
import mineplex.core.command.CommandBase;
|
||||
import mineplex.core.command.CommandCenter;
|
||||
import mineplex.core.common.Pair;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.google.GoogleSheetsManager;
|
||||
import mineplex.core.google.SheetObjectDeserialiser;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.modules.Module;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkSpreadsheetModule extends Module
|
||||
{
|
||||
|
||||
private static final SheetObjectDeserialiser<Pair<String, String>> DESERIALISER = values -> Pair.create(values[0], values.length == 1 ? "" : values[1]);
|
||||
private static final Map<String, String> VALUE_OVERRIDE_MAP = new HashMap<>();
|
||||
static Map<String, String> getValueOverrideMap()
|
||||
{
|
||||
return VALUE_OVERRIDE_MAP;
|
||||
}
|
||||
|
||||
private final Game _game;
|
||||
private final Map<String, String> _dataMap;
|
||||
private final String _fileName;
|
||||
private final Map<String, String> _dataMap;
|
||||
private boolean _initialised;
|
||||
|
||||
public PerkSpreadsheetModule(Game game, String fileName)
|
||||
private CommandBase<ArcadeManager> _valueCommand;
|
||||
private CommandBase<ArcadeManager> _loadCommand;
|
||||
|
||||
public PerkSpreadsheetModule(String fileName)
|
||||
{
|
||||
_game = game;
|
||||
_fileName = fileName;
|
||||
|
||||
_dataMap = new HashMap<>();
|
||||
|
||||
UtilServer.RegisterEvents(this);
|
||||
|
||||
setup();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void cleanup(GameStateChangeEvent event)
|
||||
@Override
|
||||
public void setup()
|
||||
{
|
||||
if (event.GetState() != Game.GameState.End)
|
||||
if (!_initialised)
|
||||
{
|
||||
return;
|
||||
_initialised = true;
|
||||
|
||||
_valueCommand = new PerkOverrideValueCommand(getGame().getArcadeManager(), this);
|
||||
_loadCommand = new PerkOverrideLoadCommand(getGame().getArcadeManager(), this);
|
||||
getGame().getArcadeManager().addCommand(_valueCommand);
|
||||
getGame().getArcadeManager().addCommand(_loadCommand);
|
||||
}
|
||||
|
||||
UtilServer.Unregister(this);
|
||||
}
|
||||
|
||||
private void setup()
|
||||
{
|
||||
// File Name must not be null
|
||||
Objects.requireNonNull(_fileName);
|
||||
|
||||
GoogleSheetsManager manager = _game.getArcadeManager().getSheetsManager();
|
||||
// Make sure this is clear
|
||||
_dataMap.clear();
|
||||
|
||||
GoogleSheetsManager manager = getGame().getArcadeManager().getSheetsManager();
|
||||
Map<String, List<List<String>>> map = manager.getSheetData(_fileName);
|
||||
|
||||
for (Map.Entry<String, List<List<String>>> entry : map.entrySet())
|
||||
@ -71,7 +71,6 @@ public class PerkSpreadsheetModule implements Listener
|
||||
|
||||
if (kit == null)
|
||||
{
|
||||
manager.log("No kit found for the name " + key);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -104,18 +103,34 @@ public class PerkSpreadsheetModule implements Listener
|
||||
}
|
||||
}
|
||||
|
||||
for (Kit kit : _game.GetKits())
|
||||
for (Kit kit : getGame().GetKits())
|
||||
{
|
||||
for (Perk perk : kit.GetPerks())
|
||||
{
|
||||
try
|
||||
{
|
||||
perk.setSpreadsheet(this);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
getGame().Announce(F.main("Game", "An error occurred at Kit " + F.name(kit.GetName()) + ", Perk " + F.name(perk.GetName()) + "."), false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanup()
|
||||
{
|
||||
_dataMap.clear();
|
||||
CommandCenter.Instance.removeCommand(_valueCommand);
|
||||
CommandCenter.Instance.removeCommand(_loadCommand);
|
||||
}
|
||||
|
||||
private Kit getFromName(String name)
|
||||
{
|
||||
for (Kit kit : _game.GetKits())
|
||||
for (Kit kit : getGame().GetKits())
|
||||
{
|
||||
if (kit.GetName().equalsIgnoreCase(name))
|
||||
{
|
||||
@ -144,7 +159,19 @@ public class PerkSpreadsheetModule implements Listener
|
||||
return kit.GetName() + "." + perk.GetName() + "." + value;
|
||||
}
|
||||
|
||||
public Map<String, String> getDataMap()
|
||||
public String getValue(String key)
|
||||
{
|
||||
String overrideValue = VALUE_OVERRIDE_MAP.get(key);
|
||||
|
||||
if (overrideValue != null)
|
||||
{
|
||||
return overrideValue;
|
||||
}
|
||||
|
||||
return _dataMap.get(key);
|
||||
}
|
||||
|
||||
Map<String, String> getDataMap()
|
||||
{
|
||||
return _dataMap;
|
||||
}
|
@ -1,10 +1,11 @@
|
||||
package nautilus.game.arcade.kit;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.managers.PerkSpreadsheetModule;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.modules.perks.PerkSpreadsheetModule;
|
||||
|
||||
public abstract class Perk implements Listener
|
||||
{
|
||||
public ArcadeManager Manager;
|
||||
@ -116,13 +117,7 @@ public abstract class Perk implements Listener
|
||||
private String getPerkObject(String id)
|
||||
{
|
||||
String key = _spreadsheet.getKey(Kit, this, id);
|
||||
|
||||
if (!_spreadsheet.getDataMap().containsKey(key))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return _spreadsheet.getDataMap().get(key);
|
||||
return _spreadsheet.getValue(key);
|
||||
}
|
||||
|
||||
protected boolean getPerkBoolean(String id)
|
||||
|
@ -1,9 +1,11 @@
|
||||
package nautilus.game.arcade.kit.perks;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -12,6 +14,8 @@ import org.bukkit.event.player.PlayerToggleFlightEvent;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.common.util.UtilTime.TimeUnit;
|
||||
@ -19,17 +23,19 @@ import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.events.PerkDoubleJumpEvent;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkDoubleJump extends Perk
|
||||
{
|
||||
|
||||
private double _power;
|
||||
private double _heightMax;
|
||||
private boolean _control;
|
||||
private long _recharge;
|
||||
private boolean _displayForce;
|
||||
|
||||
private HashSet<Player> _disabled = new HashSet<Player>();
|
||||
private final Set<Player> _disabled = new HashSet<>();
|
||||
|
||||
public PerkDoubleJump(String name)
|
||||
{
|
||||
@ -89,14 +95,10 @@ public class PerkDoubleJump extends Perk
|
||||
{
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!hasPerk(player))
|
||||
return;
|
||||
|
||||
if (Manager.isSpectator(player))
|
||||
return;
|
||||
|
||||
if (player.getGameMode() == GameMode.CREATIVE)
|
||||
if (!hasPerk(player) || _disabled.contains(player) || Manager.isSpectator(player) || player.getGameMode() == GameMode.CREATIVE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
player.setFlying(false);
|
||||
@ -104,18 +106,26 @@ public class PerkDoubleJump extends Perk
|
||||
//Disable Flight
|
||||
player.setAllowFlight(false);
|
||||
|
||||
//Velocity
|
||||
if (_control)
|
||||
PerkDoubleJumpEvent doubleJumpEvent = new PerkDoubleJumpEvent(player, _power, _heightMax, _control);
|
||||
UtilServer.CallEvent(doubleJumpEvent);
|
||||
|
||||
if (doubleJumpEvent.isCancelled())
|
||||
{
|
||||
UtilAction.velocity(player, _power, 0.2, _heightMax, true);
|
||||
return;
|
||||
}
|
||||
|
||||
//Velocity
|
||||
if (doubleJumpEvent.isControlled())
|
||||
{
|
||||
UtilAction.velocity(player, doubleJumpEvent.getPower(), 0.2, doubleJumpEvent.getHeightMax(), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
UtilAction.velocity(player, player.getLocation().getDirection(), _power, true, _power, 0, _heightMax, true);
|
||||
UtilAction.velocity(player, player.getLocation().getDirection(), doubleJumpEvent.getPower(), true, doubleJumpEvent.getPower(), 0, doubleJumpEvent.getHeightMax(), true);
|
||||
}
|
||||
|
||||
//Sound
|
||||
player.playEffect(player.getLocation(), Effect.BLAZE_SHOOT, 0);
|
||||
player.getWorld().playEffect(player.getLocation(), Effect.BLAZE_SHOOT, 0, 16);
|
||||
|
||||
//Recharge
|
||||
if (_recharge > 0)
|
||||
@ -127,8 +137,10 @@ public class PerkDoubleJump extends Perk
|
||||
Recharge.Instance.setDisplayForce(player, GetName(), true);
|
||||
}
|
||||
}
|
||||
|
||||
//Recharge.Instance.useForce(player, "Double Jump", 500);
|
||||
else
|
||||
{
|
||||
Recharge.Instance.useForce(player, GetName(), 50);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -138,29 +150,29 @@ public class PerkDoubleJump extends Perk
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void FlightUpdate(UpdateEvent event)
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
return;
|
||||
|
||||
for (Player player : UtilServer.getPlayers())
|
||||
{
|
||||
if (Manager.isSpectator(player))
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : UtilServer.getPlayersCollection())
|
||||
{
|
||||
if (!hasPerk(player) || UtilPlayer.isSpectator(player) || !Recharge.Instance.usable(player, GetName()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
continue;
|
||||
// Block block = player.getLocation().getBlock();
|
||||
|
||||
if (_recharge > 0 && !Recharge.Instance.usable(player, GetName()))
|
||||
continue;
|
||||
|
||||
// if (!Recharge.Instance.usable(player, "Double Jump"))
|
||||
// continue;
|
||||
|
||||
if (player.isOnGround() || (UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN)) && UtilBlock.solid(player.getLocation().getBlock())))
|
||||
if (UtilEnt.onBlock(player))
|
||||
// if (player.isOnGround() || UtilBlock.solid(block.getRelative(BlockFace.DOWN)) && UtilBlock.solid(block))
|
||||
{
|
||||
player.setAllowFlight(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void disableForPlayer(Player player)
|
||||
{
|
||||
@ -171,4 +183,5 @@ public class PerkDoubleJump extends Perk
|
||||
{
|
||||
_disabled.remove(player);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ public class PerkLazer extends Perk
|
||||
private float _hitBoxRadius;
|
||||
private int _damageRadius;
|
||||
private int _damage;
|
||||
private int _knockbackMagnitude;
|
||||
private float _knockbackMagnitude;
|
||||
private double _range;
|
||||
|
||||
private Set<UUID> _active = new HashSet<>();
|
||||
@ -67,7 +67,7 @@ public class PerkLazer extends Perk
|
||||
_hitBoxRadius = getPerkFloat("Hit Box Radius");
|
||||
_damageRadius = getPerkInt("Damage Radius");
|
||||
_damage = getPerkInt("Damage");
|
||||
_knockbackMagnitude = getPerkInt("Knockback Magnitude");
|
||||
_knockbackMagnitude = getPerkFloat("Knockback Magnitude");
|
||||
_range = getPerkInt("Range");
|
||||
}
|
||||
|
||||
@ -127,6 +127,7 @@ public class PerkLazer extends Perk
|
||||
if (player == null)
|
||||
{
|
||||
playerIterator.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (player.isBlocking())
|
||||
@ -184,7 +185,7 @@ public class PerkLazer extends Perk
|
||||
|
||||
particleLoop: while (!lineParticle.update())
|
||||
{
|
||||
for (Player other : UtilPlayer.getNearby(lineParticle.getLastLocation(), _hitBoxRadius))
|
||||
for (Player other : UtilPlayer.getNearby(lineParticle.getLastLocation().subtract(0, 1, 0), _hitBoxRadius))
|
||||
{
|
||||
if (player.equals(other))
|
||||
{
|
||||
|
@ -1,202 +0,0 @@
|
||||
package nautilus.game.arcade.kit.perks;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilEvent;
|
||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkSeismicSlam extends Perk
|
||||
{
|
||||
|
||||
private long _cooldown;
|
||||
private long _time;
|
||||
private int _damage;
|
||||
private int _radius;
|
||||
private float _knockbackMagnitude;
|
||||
|
||||
private Map<LivingEntity, Long> _live = new HashMap<>();
|
||||
|
||||
public PerkSeismicSlam()
|
||||
{
|
||||
super("Seismic Slam", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Spade to " + C.cGreen + "Seismic Slam" });
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupValues()
|
||||
{
|
||||
_cooldown = getPerkTime("Cooldown");
|
||||
_time = getPerkTime("Time");
|
||||
_damage = getPerkInt("Damage");
|
||||
_radius = getPerkInt("Radius");
|
||||
_knockbackMagnitude = getPerkFloat("Knockback Magnitude");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void deactivateDeath(PlayerDeathEvent event)
|
||||
{
|
||||
Player player = event.getEntity();
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_live.containsKey(player))
|
||||
{
|
||||
_live.remove(player);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Leap(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!UtilEvent.isAction(event, ActionType.R))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isSpade(player.getItemInHand()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hasPerk(player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), _cooldown, true, true))
|
||||
return;
|
||||
|
||||
// Action
|
||||
Vector vec = player.getLocation().getDirection();
|
||||
if (vec.getY() < 0)
|
||||
{
|
||||
vec.setY(vec.getY() * -1);
|
||||
}
|
||||
|
||||
UtilAction.velocity(player, vec, 1, true, 1, 0, 1, true);
|
||||
|
||||
// Record
|
||||
_live.put(player, System.currentTimeMillis());
|
||||
|
||||
// Inform
|
||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Slam(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (!UtilEnt.isGrounded(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!_live.containsKey(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!UtilTime.elapsed(_live.get(player), _time))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
_live.remove(player);
|
||||
|
||||
// Action
|
||||
|
||||
Map<LivingEntity, Double> targets = UtilEnt.getInRadius(player.getLocation(), _radius);
|
||||
|
||||
for (LivingEntity cur : targets.keySet())
|
||||
{
|
||||
if (cur.equals(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (UtilPlayer.isSpectator(cur))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(cur, player, null, DamageCause.CUSTOM, _damage * targets.get(cur) + 0.5, true, true, false, player.getName(), GetName());
|
||||
|
||||
// Condition
|
||||
Manager.GetCondition().Factory().Falling(GetName(), cur, player, 10, false, true);
|
||||
|
||||
// Inform
|
||||
if (cur instanceof Player)
|
||||
UtilPlayer.message((Player) cur, F.main("Game", F.name(player.getName()) + " hit you with " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
// Effect
|
||||
player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_WOOD, 2f, 0.2f);
|
||||
|
||||
for (Block cur : UtilBlock.getInRadius(player.getLocation(), 4).keySet())
|
||||
{
|
||||
if (UtilBlock.airFoliage(cur.getRelative(BlockFace.UP)) && !UtilBlock.airFoliage(cur))
|
||||
{
|
||||
cur.getWorld().playEffect(cur.getLocation(), Effect.STEP_SOUND, cur.getType());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Knockback(CustomDamageEvent event)
|
||||
{
|
||||
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.AddKnockback(GetName(), _knockbackMagnitude);
|
||||
}
|
||||
}
|
@ -18,7 +18,9 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
@ -279,7 +281,7 @@ public class PerkWoolBomb extends Perk implements IThrown
|
||||
// Inform
|
||||
if (cur instanceof Player && !player.equals(cur))
|
||||
{
|
||||
UtilPlayer.message((Player) cur, F.main("Game", F.name(player.getName()) + " hit you with " + F.skill(GetName()) + "."));
|
||||
UtilPlayer.message(cur, F.main("Game", F.name(player.getName()) + " hit you with " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
}
|
||||
@ -364,7 +366,7 @@ public class PerkWoolBomb extends Perk implements IThrown
|
||||
return;
|
||||
}
|
||||
|
||||
Set<Player> detonate = new HashSet<Player>();
|
||||
Set<Player> detonate = new HashSet<>();
|
||||
Iterator<UUID> playerIterator = _active.keySet().iterator();
|
||||
|
||||
while (playerIterator.hasNext())
|
||||
@ -416,4 +418,26 @@ public class PerkWoolBomb extends Perk implements IThrown
|
||||
|
||||
event.AddKnockback(GetName(), _knockbackMagnitude);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerDeath(PlayerDeathEvent event)
|
||||
{
|
||||
clear(event.getEntity());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
clear(event.getPlayer());
|
||||
}
|
||||
|
||||
private void clear(Player player)
|
||||
{
|
||||
WoolBombData data = _active.remove(player.getUniqueId());
|
||||
|
||||
if (data != null)
|
||||
{
|
||||
data.restore();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,8 +1,13 @@
|
||||
package nautilus.game.arcade.kit.perks.data;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
|
||||
public class ChickenMissileData
|
||||
{
|
||||
public Player Player;
|
||||
@ -10,9 +15,7 @@ public class ChickenMissileData
|
||||
public Vector Direction;
|
||||
public long Time;
|
||||
|
||||
public double LastX;
|
||||
public double LastY;
|
||||
public double LastZ;
|
||||
public Location Last;
|
||||
|
||||
public ChickenMissileData(Player player, Entity chicken)
|
||||
{
|
||||
@ -24,30 +27,15 @@ public class ChickenMissileData
|
||||
|
||||
public boolean HasHitBlock()
|
||||
{
|
||||
Location current = Chicken.getLocation();
|
||||
|
||||
//Not First Run
|
||||
if (LastX != 0 && LastY != 0 && LastZ != 0)
|
||||
{
|
||||
if (Math.abs(Chicken.getLocation().getX() - LastX) < Math.abs(Direction.getX()/10d))
|
||||
if (Last != null && UtilMath.offsetSquared(Last, current) < 0.2 || UtilEnt.isGrounded(Chicken))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (Math.abs(Chicken.getLocation().getY() - LastY) < Math.abs(Direction.getY()/10d))
|
||||
{
|
||||
if (Direction.getY() > 0 || -0.02 > Direction.getY())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (Math.abs(Chicken.getLocation().getZ() - LastZ) < Math.abs(Direction.getZ()/10d))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
LastX = Chicken.getLocation().getX();
|
||||
LastY = Chicken.getLocation().getY();
|
||||
LastZ = Chicken.getLocation().getZ();
|
||||
|
||||
Last = current;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user