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 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 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 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 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 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=");
|
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 AMERICA_HAT = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTg2MDI3MjMyODgsInByb2ZpbGVJZCI6IjNlMjZiMDk3MWFjZDRjNmQ5MzVjNmFkYjE1YjYyMDNhIiwicHJvZmlsZU5hbWUiOiJOYWhlbGUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzYzMjI0MDhkYzBiZjMxNjU4N2RiNDJiN2Q5ZmViZTUwYWQ4MGY0OGU4Njc5YzI0NTFkOTk3MTdjZmVjNTdkYWQifX19","oRo6DIuhOTaXDkFsgwJ488LWqx5d1QpwtglwG1SdEvkbX1aCMGdZyDm9YIopQRjfBg0uYKQFetOZ1ZkdMmc/aKC5/dm0+Ema7g8AUzjwf4OaSLH1r4C1UJ4ruaNG5diBxNTkYnMa7yT8zvyEr22CA7lUOIgTh8ymBfSGK35RPhsn8jM0hDjdhjemBAlxKpiioByfmAQbwokNBOrXfh/PnKq+iJYg4WpMSZ1zo5Rr0CzLXwu+/T3dvrb6mg7qry7J3Lj5/qn6iIdBcjJBeyvy1sCo45jQ3Rzc6oL/84Vu5Dpn395EqUK8Sa7mdpVpATTcj56TCjkNNtDapXNqyO/IIQuzU4wnBKNQmZefaxRl6LV0DhZ8n8YQaPj6hH/mr2oDsd23+jejjqu6Y95ReTyukp06mIGqgekmrdZV2etML2oMAOTv9ieVvqtfo5gEomYs+NFAL7rMmzjAlhd17VOgqNRMpmJazAHWOYKl8KdOH99wGDe5XcyKHysh+qyHKMvhPJztIeAEaosynF/aGHghH2PM354KCuUVNmdR5G7UZUoG9ZA5ZU3EzZ854jeqxcqw3jzb6qL7A83QNuFqOsb87ugL/jO3QEDdQ9drdf3WAQauQGkU3nYBrls5wxoMrQ+Ceth+FtZw9a1v7dc+DEWOeJKCtOAIskb29pv6OcRe0Wk=");
|
||||||
public static final SkinData REVOLUTIONARY = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTg3ODQ5Mzk3NjAsInByb2ZpbGVJZCI6ImIwZDRiMjhiYzFkNzQ4ODlhZjBlODY2MWNlZTk2YWFiIiwicHJvZmlsZU5hbWUiOiJZZWxlaGEiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2I4NTBkZDNkYWQ0MjkxYzFhYmU4NGU2OTM2ZmQ3MDM0ZWVlZTk1OTk2MWI3YjE5NDZhODIxYWRlMTFiODI2YjIifX19","U2xBG+ryUacvZq3WreWF2J4QnQERuvp1okqdlkAYECqvVHz0cars78usPuZYD4s3HyOM0eGASzS4zkQERF6Hk8crnG+ZtqvML5kL+TkxK8gEbn2j5qB+YDG0qTx635mYGC77sGaqE/CsZAlhRYU6lyXILW2616Af8B8orOlpyCMRytijp/OfJREK0bC4I1QnB7AJ2QmBYuZJ9l8473858fJOlCVHjbsC/WRcUvepPSYYxvl8Z5NwayyIVnnz3tGVN6hnM7tzil/gQmsmDwGhlSyify/MEGssvd0sHLTlccA7XX98tyUFHXU84L5MJuNKg/uXTYz+9cRPIgJaptJNfqCoEa/ape+YHlOlK2lm5qRvubvp931X+VwFbcrEuaIFgbqr9cof5JW6DYfpVKvcngi9+K9IzgtPG59Jro5kxb70IfQhZcDkcHGo1pz5Tj7cdJdD7crBeIBaE/EoKU6iaSOrUFoILEdpcWQfaToRnk4L/JMet7zPXBNE/D/vEgQLGLNX7byofdCXSD9njtjLWmHg4rCzwuUqaiWnTCYIkkdg/mFuRQ3oTRRTzdlLXsK90Pz0XU9N6gBhWA9pxhzDJR7YK+mdXODALuMXE6zcCsbVuWhqbnN+EByGdjT9X1QPSN+/5iV9d5JyweiJrF7arf2PmxgEIb9OSjePNKRmHoo=");
|
public static final SkinData REVOLUTIONARY = new SkinData("eyJ0aW1lc3RhbXAiOjE0OTg3ODQ5Mzk3NjAsInByb2ZpbGVJZCI6ImIwZDRiMjhiYzFkNzQ4ODlhZjBlODY2MWNlZTk2YWFiIiwicHJvZmlsZU5hbWUiOiJZZWxlaGEiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2I4NTBkZDNkYWQ0MjkxYzFhYmU4NGU2OTM2ZmQ3MDM0ZWVlZTk1OTk2MWI3YjE5NDZhODIxYWRlMTFiODI2YjIifX19","U2xBG+ryUacvZq3WreWF2J4QnQERuvp1okqdlkAYECqvVHz0cars78usPuZYD4s3HyOM0eGASzS4zkQERF6Hk8crnG+ZtqvML5kL+TkxK8gEbn2j5qB+YDG0qTx635mYGC77sGaqE/CsZAlhRYU6lyXILW2616Af8B8orOlpyCMRytijp/OfJREK0bC4I1QnB7AJ2QmBYuZJ9l8473858fJOlCVHjbsC/WRcUvepPSYYxvl8Z5NwayyIVnnz3tGVN6hnM7tzil/gQmsmDwGhlSyify/MEGssvd0sHLTlccA7XX98tyUFHXU84L5MJuNKg/uXTYz+9cRPIgJaptJNfqCoEa/ape+YHlOlK2lm5qRvubvp931X+VwFbcrEuaIFgbqr9cof5JW6DYfpVKvcngi9+K9IzgtPG59Jro5kxb70IfQhZcDkcHGo1pz5Tj7cdJdD7crBeIBaE/EoKU6iaSOrUFoILEdpcWQfaToRnk4L/JMet7zPXBNE/D/vEgQLGLNX7byofdCXSD9njtjLWmHg4rCzwuUqaiWnTCYIkkdg/mFuRQ3oTRRTzdlLXsK90Pz0XU9N6gBhWA9pxhzDJR7YK+mdXODALuMXE6zcCsbVuWhqbnN+EByGdjT9X1QPSN+/5iV9d5JyweiJrF7arf2PmxgEIb9OSjePNKRmHoo=");
|
||||||
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 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 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=");
|
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;
|
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)
|
public static float GetPitch(Vector vec)
|
||||||
{
|
{
|
||||||
return GetPitch(vec.getX(), vec.getY(), vec.getZ());
|
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)
|
public static List<Player> getNearby(Location loc, double maxDist, boolean onlySurvival)
|
||||||
|
{
|
||||||
|
if (maxDist > 0)
|
||||||
{
|
{
|
||||||
maxDist *= maxDist;
|
maxDist *= maxDist;
|
||||||
|
}
|
||||||
LinkedList<Player> nearbyMap = new LinkedList<>();
|
LinkedList<Player> nearbyMap = new LinkedList<>();
|
||||||
|
|
||||||
for (Player cur : loc.getWorld().getPlayers())
|
for (Player cur : loc.getWorld().getPlayers())
|
||||||
@ -500,7 +503,7 @@ public class UtilPlayer
|
|||||||
|
|
||||||
for (int i = 0; i < nearbyMap.size(); i++)
|
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);
|
nearbyMap.add(i, cur);
|
||||||
break;
|
break;
|
||||||
@ -525,7 +528,6 @@ public class UtilPlayer
|
|||||||
{
|
{
|
||||||
maxDist *= maxDist;
|
maxDist *= maxDist;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player best = null;
|
Player best = null;
|
||||||
double bestDist = 0;
|
double bestDist = 0;
|
||||||
|
|
||||||
@ -658,9 +660,9 @@ public class UtilPlayer
|
|||||||
return players;
|
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())
|
for (Player cur : player.getWorld().getPlayers())
|
||||||
{
|
{
|
||||||
|
@ -62,7 +62,7 @@ public class LineParticle
|
|||||||
|
|
||||||
if (_direction == null)
|
if (_direction == null)
|
||||||
{
|
{
|
||||||
_direction = UtilAlg.getTrajectory(start, end).normalize();
|
_direction = UtilAlg.getTrajectory(start, end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,11 +75,16 @@ public class LineParticle
|
|||||||
public boolean update()
|
public boolean update()
|
||||||
{
|
{
|
||||||
boolean done = _curRange > _maxRange;
|
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;
|
_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()))
|
if (_ignoredTypes == null || !_ignoredTypes.contains(newTarget.getBlock().getType()))
|
||||||
{
|
{
|
||||||
|
@ -1,12 +1,33 @@
|
|||||||
package mineplex.core.disguise.disguises;
|
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
|
public class DisguiseVillager extends DisguiseAgeable
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private Profession _profession;
|
||||||
|
|
||||||
public DisguiseVillager(Entity entity)
|
public DisguiseVillager(Entity entity)
|
||||||
{
|
{
|
||||||
super(EntityType.VILLAGER, 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
|
@Override
|
||||||
|
@ -327,24 +327,33 @@ public class Explosion extends MiniPlugin
|
|||||||
if (blockSet.isEmpty())
|
if (blockSet.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
int lowestY = Integer.MAX_VALUE;
|
||||||
|
|
||||||
|
for (Block block : blockSet)
|
||||||
|
{
|
||||||
|
int y = block.getLocation().getBlockY();
|
||||||
|
|
||||||
|
if (y < lowestY)
|
||||||
|
{
|
||||||
|
lowestY = y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Save
|
//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)
|
for (Block cur : blockSet)
|
||||||
{
|
{
|
||||||
if (cur.getTypeId() == 0)
|
if (cur.getTypeId() == 0 || onlyAbove && cur.getY() < mid.getY())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (onlyAbove && cur.getY() < mid.getY())
|
blocks.put(cur, new AbstractMap.SimpleEntry<>(cur.getTypeId(), cur.getData()));
|
||||||
continue;
|
|
||||||
|
|
||||||
blocks.put(cur, new AbstractMap.SimpleEntry<Integer, Byte>(cur.getTypeId(), cur.getData()));
|
|
||||||
|
|
||||||
if (removeBlock)
|
if (removeBlock)
|
||||||
{
|
{
|
||||||
if (_regenerateGround)
|
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
|
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.gamemodifiers.moba.skins.HeroSkinGadget;
|
||||||
import mineplex.core.gadget.gadgets.hat.HatItem;
|
import mineplex.core.gadget.gadgets.hat.HatItem;
|
||||||
import mineplex.core.gadget.gadgets.hat.HatType;
|
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.ItemBatGun;
|
||||||
import mineplex.core.gadget.gadgets.item.ItemBow;
|
import mineplex.core.gadget.gadgets.item.ItemBow;
|
||||||
import mineplex.core.gadget.gadgets.item.ItemCandy;
|
import mineplex.core.gadget.gadgets.item.ItemCandy;
|
||||||
@ -519,6 +520,7 @@ public class GadgetManager extends MiniPlugin
|
|||||||
addGadget(new ItemCandy(this));
|
addGadget(new ItemCandy(this));
|
||||||
addGadget(new ItemOAndX(this));
|
addGadget(new ItemOAndX(this));
|
||||||
addGadget(new ItemMobBomb(this));
|
addGadget(new ItemMobBomb(this));
|
||||||
|
addGadget(new ItemBallCatch(this));
|
||||||
|
|
||||||
// Costume
|
// Costume
|
||||||
addGadget(new OutfitRaveSuitHelmet(this));
|
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 static final double DELTA_RADIUS = 0.05;
|
||||||
|
|
||||||
private final double _maxRadius;
|
private final double _maxRadius;
|
||||||
|
private final int _iterations;
|
||||||
|
|
||||||
private double _radius;
|
private double _radius, _theta, _z;
|
||||||
private double _theta;
|
|
||||||
private double _z;
|
|
||||||
|
|
||||||
public SpiralEffect(int ticks, double maxRadius, Location location)
|
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));
|
super(ticks, new EffectLocation(location));
|
||||||
|
|
||||||
_maxRadius = maxRadius;
|
_maxRadius = maxRadius;
|
||||||
|
_iterations = iterations;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void runEffect()
|
public void runEffect()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < _iterations; i++)
|
||||||
{
|
{
|
||||||
double x = _radius * Math.cos(_theta);
|
double x = _radius * Math.cos(_theta);
|
||||||
double y = _radius * Math.sin(_theta);
|
double y = _radius * Math.sin(_theta);
|
||||||
@ -49,6 +56,7 @@ public abstract class SpiralEffect extends Effect
|
|||||||
_radius += DELTA_RADIUS;
|
_radius += DELTA_RADIUS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void rotateDirection(Location location)
|
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.NOVEMBER), new UnknownSalesPackageItem("Tic Tac Toe"))
|
||||||
.put(YearMonth.of(2017, Month.DECEMBER), new UnknownSalesPackageItem("Sledge Mount"))
|
.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.JANUARY), new UnknownSalesPackageItem("Mob Bomb"))
|
||||||
|
.put(YearMonth.of(2018, Month.FEBRUARY), new UnknownSalesPackageItem("Play Catch"))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public interface PowerPlayClubItem
|
public interface PowerPlayClubItem
|
||||||
|
@ -216,9 +216,18 @@ public class CustomDamageEvent extends Event implements Cancellable
|
|||||||
|
|
||||||
public void SetIgnoreArmor(boolean ignore)
|
public void SetIgnoreArmor(boolean ignore)
|
||||||
{
|
{
|
||||||
|
if (ignore)
|
||||||
|
{
|
||||||
|
_cancellers.removeIf(reason -> reason.equals("World/Monster Damage Rate"));
|
||||||
|
}
|
||||||
|
|
||||||
_ignoreArmor = ignore;
|
_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)
|
public void SetIgnoreRate(boolean ignore)
|
||||||
{
|
{
|
||||||
_ignoreRate = 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.AQUA) return (byte) 3;
|
||||||
if (GetColor() == ChatColor.YELLOW) return (byte) 4;
|
if (GetColor() == ChatColor.YELLOW) return (byte) 4;
|
||||||
if (GetColor() == ChatColor.GREEN) return (byte) 5;
|
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.DARK_GRAY) return (byte) 7;
|
||||||
if (GetColor() == ChatColor.GRAY) return (byte) 8;
|
if (GetColor() == ChatColor.GRAY) return (byte) 8;
|
||||||
if (GetColor() == ChatColor.DARK_AQUA) return (byte) 9;
|
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.WHITE) return Color.WHITE;
|
||||||
if (GetColor() == ChatColor.GOLD) return Color.ORANGE;
|
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.AQUA) return Color.AQUA;
|
||||||
if (GetColor() == ChatColor.YELLOW) return Color.YELLOW;
|
if (GetColor() == ChatColor.YELLOW) return Color.YELLOW;
|
||||||
if (GetColor() == ChatColor.GREEN) return Color.GREEN;
|
if (GetColor() == ChatColor.GREEN) return Color.GREEN;
|
||||||
@ -372,30 +372,11 @@ public class GameTeam
|
|||||||
else return Color.WHITE;
|
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()
|
public DyeColor getDyeColor()
|
||||||
{
|
{
|
||||||
if (GetColor() == ChatColor.WHITE) return DyeColor.WHITE;
|
if (GetColor() == ChatColor.WHITE) return DyeColor.WHITE;
|
||||||
if (GetColor() == ChatColor.GOLD) return DyeColor.ORANGE;
|
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.AQUA) return DyeColor.LIGHT_BLUE;
|
||||||
if (GetColor() == ChatColor.YELLOW) return DyeColor.YELLOW;
|
if (GetColor() == ChatColor.YELLOW) return DyeColor.YELLOW;
|
||||||
if (GetColor() == ChatColor.GREEN) return DyeColor.LIME;
|
if (GetColor() == ChatColor.GREEN) return DyeColor.LIME;
|
||||||
|
@ -86,8 +86,6 @@ public class Gladiators extends SoloGame
|
|||||||
|
|
||||||
private ArenaType _furthestOutCurrent;
|
private ArenaType _furthestOutCurrent;
|
||||||
|
|
||||||
private boolean _firstRound;
|
|
||||||
|
|
||||||
private HotbarEditor _hotbarEditor;
|
private HotbarEditor _hotbarEditor;
|
||||||
|
|
||||||
public Gladiators(ArcadeManager manager)
|
public Gladiators(ArcadeManager manager)
|
||||||
@ -143,9 +141,9 @@ public class Gladiators extends SoloGame
|
|||||||
_playerArenas = new HashMap<>();
|
_playerArenas = new HashMap<>();
|
||||||
|
|
||||||
_roundState = RoundState.WAITING;
|
_roundState = RoundState.WAITING;
|
||||||
_firstRound = true;
|
|
||||||
|
|
||||||
_hotbarEditor = new HotbarEditor(manager.getPlugin(), this);
|
_hotbarEditor = new HotbarEditor();
|
||||||
|
_hotbarEditor.register(this);
|
||||||
|
|
||||||
new CompassModule()
|
new CompassModule()
|
||||||
.setGiveCompass(true)
|
.setGiveCompass(true)
|
||||||
@ -1121,14 +1119,6 @@ public class Gladiators extends SoloGame
|
|||||||
Scoreboard.draw();
|
Scoreboard.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void disable()
|
|
||||||
{
|
|
||||||
super.disable();
|
|
||||||
_hotbarEditor.deregisterSelf(); // De-register as listener
|
|
||||||
_hotbarEditor.onDisable(); // Fully disable
|
|
||||||
}
|
|
||||||
|
|
||||||
public HashMap<Player, Arena> getArenas()
|
public HashMap<Player, Arena> getArenas()
|
||||||
{
|
{
|
||||||
return _playerArenas;
|
return _playerArenas;
|
||||||
|
@ -9,7 +9,6 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.HandlerList;
|
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
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.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import mineplex.core.MiniPlugin;
|
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
import mineplex.core.common.util.F;
|
import mineplex.core.common.util.F;
|
||||||
import mineplex.core.common.util.UtilInv;
|
import mineplex.core.common.util.UtilInv;
|
||||||
import mineplex.core.common.util.UtilItem;
|
import mineplex.core.common.util.UtilItem;
|
||||||
import mineplex.core.common.util.UtilMath;
|
import mineplex.core.common.util.UtilMath;
|
||||||
|
import mineplex.core.common.util.UtilServer;
|
||||||
import mineplex.core.itemstack.ItemBuilder;
|
import mineplex.core.itemstack.ItemBuilder;
|
||||||
|
|
||||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||||
import nautilus.game.arcade.game.Game;
|
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).
|
* Created by William (WilliamTiger).
|
||||||
* 18/12/15
|
* 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")
|
_item = new ItemBuilder(Material.NAME_TAG).setTitle(C.cGold + "Hotbar Editor")
|
||||||
.addLore(C.cGray + "Right click to edit your Gladiators hotbar").build();
|
.addLore(C.cGray + "Right click to edit your Gladiators hotbar").build();
|
||||||
|
|
||||||
_pageListener = new HotbarPageListener(this);
|
_pageListener = new HotbarPageListener(this);
|
||||||
getPluginManager().registerEvents(_pageListener, getPlugin());
|
UtilServer.RegisterEvents(_pageListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disable()
|
public void cleanup()
|
||||||
{
|
{
|
||||||
HandlerList.unregisterAll(_pageListener);
|
UtilServer.Unregister(_pageListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onJoin(PlayerJoinEvent event)
|
public void onJoin(PlayerJoinEvent event)
|
||||||
{
|
{
|
||||||
if (_host.Manager.GetGame() != _host)
|
if (getGame().Manager.GetGame() != getGame())
|
||||||
return;
|
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);
|
event.getPlayer().getInventory().setItem(0, _item);
|
||||||
}
|
}
|
||||||
@ -76,16 +73,13 @@ public class HotbarEditor extends MiniPlugin
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onDeath(final PlayerDeathEvent event)
|
public void onDeath(final PlayerDeathEvent event)
|
||||||
{
|
{
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(_plugin, new Runnable()
|
getGame().getArcadeManager().runSyncLater(() ->
|
||||||
{
|
{
|
||||||
public void run()
|
if (getGame().IsLive())
|
||||||
{
|
|
||||||
if (_host.IsLive())
|
|
||||||
{
|
{
|
||||||
event.getEntity().getInventory().setItem(0, _item);
|
event.getEntity().getInventory().setItem(0, _item);
|
||||||
}
|
}
|
||||||
}
|
}, 1);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
@ -93,10 +87,10 @@ public class HotbarEditor extends MiniPlugin
|
|||||||
{
|
{
|
||||||
if (event.getMessage().equalsIgnoreCase("/spec"))
|
if (event.getMessage().equalsIgnoreCase("/spec"))
|
||||||
{
|
{
|
||||||
if (_host == null)
|
if (getGame() == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!_host.IsAlive(event.getPlayer())
|
if (!getGame().IsAlive(event.getPlayer())
|
||||||
&& !UtilInv.contains(event.getPlayer(), _item.getType(), (byte) 0, 1))
|
&& !UtilInv.contains(event.getPlayer(), _item.getType(), (byte) 0, 1))
|
||||||
{
|
{
|
||||||
event.getPlayer().getInventory().setItem(0, _item);
|
event.getPlayer().getInventory().setItem(0, _item);
|
||||||
@ -107,9 +101,6 @@ public class HotbarEditor extends MiniPlugin
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onJoin(GameStateChangeEvent event)
|
public void onJoin(GameStateChangeEvent event)
|
||||||
{
|
{
|
||||||
if (event.GetGame() != _host)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (event.GetState() == Game.GameState.Recruit)
|
if (event.GetState() == Game.GameState.Recruit)
|
||||||
{
|
{
|
||||||
for (Player player : Bukkit.getOnlinePlayers())
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
@ -146,14 +137,9 @@ public class HotbarEditor extends MiniPlugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Gladiators getHost()
|
|
||||||
{
|
|
||||||
return _host;
|
|
||||||
}
|
|
||||||
|
|
||||||
public HotbarLayout getLayout(Player player)
|
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);
|
data = (data == -1 ? 1239 : data);
|
||||||
|
|
||||||
List<Integer> ints = new ArrayList<>();
|
List<Integer> ints = new ArrayList<>();
|
||||||
@ -207,7 +193,7 @@ public class HotbarEditor extends MiniPlugin
|
|||||||
save.setRod(save.getEmpty());
|
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!"));
|
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.Map.Entry;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -141,7 +142,7 @@ public class MobaTraining extends Moba
|
|||||||
_overtimeManager.disableOvertime();
|
_overtimeManager.disableOvertime();
|
||||||
_minion.disableMinions();
|
_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);
|
Function<Player, GameTeam> teamFunction = player -> GetTeam(ChatColor.GRAY);
|
||||||
new TrainingGameModule()
|
new TrainingGameModule()
|
||||||
.setGiveReturnToSpawn(false)
|
.setGiveReturnToSpawn(false)
|
||||||
@ -197,7 +198,7 @@ public class MobaTraining extends Moba
|
|||||||
|
|
||||||
registerDebugCommand("skip", Perm.DEBUG_SKIP_COMMAND, PermissionGroup.PLAYER, (caller, args) ->
|
registerDebugCommand("skip", Perm.DEBUG_SKIP_COMMAND, PermissionGroup.PLAYER, (caller, args) ->
|
||||||
{
|
{
|
||||||
if (!safeFunction.apply(caller))
|
if (!safeFunction.test(caller))
|
||||||
{
|
{
|
||||||
caller.teleport(GetTeam(ChatColor.YELLOW).GetSpawn());
|
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.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.event.player.PlayerVelocityEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
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.Permission;
|
||||||
import mineplex.core.account.permissions.PermissionGroup;
|
import mineplex.core.account.permissions.PermissionGroup;
|
||||||
|
import mineplex.core.achievement.Achievement;
|
||||||
import mineplex.core.blockrestore.BlockRestore;
|
import mineplex.core.blockrestore.BlockRestore;
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
import mineplex.core.common.util.F;
|
import mineplex.core.common.util.F;
|
||||||
@ -46,6 +48,7 @@ import mineplex.core.common.util.UtilMath;
|
|||||||
import mineplex.core.common.util.UtilPlayer;
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
import mineplex.core.common.util.UtilServer;
|
import mineplex.core.common.util.UtilServer;
|
||||||
import mineplex.core.common.util.UtilTextMiddle;
|
import mineplex.core.common.util.UtilTextMiddle;
|
||||||
|
import mineplex.core.common.util.UtilTime;
|
||||||
import mineplex.core.gadget.types.Gadget;
|
import mineplex.core.gadget.types.Gadget;
|
||||||
import mineplex.core.gadget.types.GadgetType;
|
import mineplex.core.gadget.types.GadgetType;
|
||||||
import mineplex.core.hologram.Hologram;
|
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.KitSlime;
|
||||||
import nautilus.game.arcade.game.games.smash.kits.KitSnowman;
|
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.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.KitWitch;
|
||||||
import nautilus.game.arcade.game.games.smash.kits.KitWitherSkeleton;
|
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.KitWolf;
|
||||||
import nautilus.game.arcade.game.games.smash.kits.KitZombie;
|
import nautilus.game.arcade.game.games.smash.kits.KitZombie;
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||||
import nautilus.game.arcade.game.modules.compass.CompassModule;
|
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.Kit;
|
||||||
import nautilus.game.arcade.kit.Perk;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
import nautilus.game.arcade.managers.PerkSpreadsheetModule;
|
|
||||||
|
|
||||||
public abstract class SuperSmash extends Game
|
public abstract class SuperSmash extends Game
|
||||||
{
|
{
|
||||||
@ -97,15 +101,28 @@ public abstract class SuperSmash extends Game
|
|||||||
DEBUG_SMASH_COMMAND,
|
DEBUG_SMASH_COMMAND,
|
||||||
DEBUG_NEXTSMASH_COMMAND,
|
DEBUG_NEXTSMASH_COMMAND,
|
||||||
DEBUG_COOLDOWN_COMMAND,
|
DEBUG_COOLDOWN_COMMAND,
|
||||||
|
DEBUG_PERK_COMMANDS
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int MAX_LIVES = 4;
|
private static final int MAX_LIVES = 4;
|
||||||
private static final int POWERUP_SPAWN_Y_INCREASE = 120;
|
private static final int POWERUP_SPAWN_Y_INCREASE = 120;
|
||||||
private static final int HUNGER_DELAY = 250;
|
private static final int HUNGER_DELAY = 250;
|
||||||
|
private static final int RESPAWN_INVUL = 1500;
|
||||||
|
|
||||||
private static final String DATA_POINT_POWERUP = "RED";
|
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 _powerupCurrent = null;
|
||||||
private Location _powerupTarget = 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 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 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);
|
}, type, description);
|
||||||
}
|
}
|
||||||
@ -148,7 +165,8 @@ public abstract class SuperSmash extends Game
|
|||||||
.setGiveCompassToAlive(true)
|
.setGiveCompassToAlive(true)
|
||||||
.register(this);
|
.register(this);
|
||||||
|
|
||||||
new PerkSpreadsheetModule(this, "SMASH_KITS");
|
new PerkSpreadsheetModule("SMASH_KITS")
|
||||||
|
.register(this);
|
||||||
|
|
||||||
registerDebugCommand("cooldown", Perm.DEBUG_COOLDOWN_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
|
registerDebugCommand("cooldown", Perm.DEBUG_COOLDOWN_COMMAND, PermissionGroup.ADMIN, (caller, args) ->
|
||||||
{
|
{
|
||||||
@ -174,13 +192,20 @@ public abstract class SuperSmash extends Game
|
|||||||
|
|
||||||
if (!IsAlive(caller))
|
if (!IsAlive(caller))
|
||||||
{
|
{
|
||||||
SetPlayerState(caller, PlayerState.IN);
|
GetTeamList().get(0).AddPlayer(caller, true);
|
||||||
RespawnPlayer(caller);
|
RespawnPlayer(caller);
|
||||||
caller.sendMessage(F.main("Revive", "You are back in the game!"));
|
caller.sendMessage(F.main("Revive", "You are back in the game!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
_lives.put(caller, MAX_LIVES);
|
_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)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
@ -212,6 +237,7 @@ public abstract class SuperSmash extends Game
|
|||||||
public void playerQuit(PlayerQuitEvent event)
|
public void playerQuit(PlayerQuitEvent event)
|
||||||
{
|
{
|
||||||
_lives.remove(event.getPlayer());
|
_lives.remove(event.getPlayer());
|
||||||
|
_respawnTime.remove(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLives(Player player)
|
public int getLives(Player player)
|
||||||
@ -303,7 +329,6 @@ public abstract class SuperSmash extends Game
|
|||||||
|
|
||||||
UtilInv.remove(player, Material.NETHER_STAR, (byte) 0, 1);
|
UtilInv.remove(player, Material.NETHER_STAR, (byte) 0, 1);
|
||||||
|
|
||||||
player.setHealth(player.getMaxHealth());
|
|
||||||
player.playSound(player.getLocation(), ultimate.getSound(), 10, 1);
|
player.playSound(player.getLocation(), ultimate.getSound(), 10, 1);
|
||||||
|
|
||||||
Announce(C.Bold + event.getPlayer().getName() + " activated " + C.cGreenB + name + ChatColor.RESET + C.Bold + "!");
|
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)
|
private void giveSmashItem(Player player)
|
||||||
{
|
{
|
||||||
int amount = 1;
|
int amount = 1;
|
||||||
if(GetKit(player) instanceof KitSnowman)
|
if (GetKit(player) instanceof KitSnowman)
|
||||||
{
|
{
|
||||||
amount = 3;
|
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)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void knockback(CustomDamageEvent event)
|
public void knockback(CustomDamageEvent event)
|
||||||
{
|
{
|
||||||
@ -499,11 +540,29 @@ public abstract class SuperSmash extends Game
|
|||||||
if (event.GetDamageePlayer() != null)
|
if (event.GetDamageePlayer() != null)
|
||||||
{
|
{
|
||||||
Player player = event.GetDamageePlayer();
|
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()));
|
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)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void arenaBoundry(CustomDamageEvent event)
|
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)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void abilityDescription(PlayerInteractEvent event)
|
public void abilityDescription(PlayerInteractEvent event)
|
||||||
{
|
{
|
||||||
|
@ -1,29 +1,34 @@
|
|||||||
package nautilus.game.arcade.game.games.smash;
|
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.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeUnit;
|
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
|
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"
|
C.cYellow + "Click the " + C.cGreen + "Bed" + C.cYellow + " to return to this island"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private final TrainingGameModule _trainingModule;
|
||||||
private Location _borderA;
|
private Location _borderA;
|
||||||
private Location _borderB;
|
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 Map<UUID, Long> _lastDeath;
|
||||||
|
|
||||||
private boolean _announceEnd;
|
private boolean _announceEnd;
|
||||||
@ -58,10 +64,15 @@ public class SuperSmashTraining extends SuperSmash
|
|||||||
|
|
||||||
_lastDeath = new HashMap<>();
|
_lastDeath = new HashMap<>();
|
||||||
|
|
||||||
new TrainingGameModule()
|
_trainingModule = new TrainingGameModule()
|
||||||
.setSkillFunction(_safeFunction)
|
.setSkillFunction(_safeFunction)
|
||||||
.setDamageFunction(_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
|
@Override
|
||||||
@ -169,7 +180,7 @@ public class SuperSmashTraining extends SuperSmash
|
|||||||
|
|
||||||
for (Player player : GetPlayers(true))
|
for (Player player : GetPlayers(true))
|
||||||
{
|
{
|
||||||
if (_safeFunction.apply(player))
|
if (_safeFunction.test(player))
|
||||||
{
|
{
|
||||||
_lastDeath.remove(player.getUniqueId());
|
_lastDeath.remove(player.getUniqueId());
|
||||||
}
|
}
|
||||||
@ -179,10 +190,12 @@ public class SuperSmashTraining extends SuperSmash
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void smashActivate(SmashActivateEvent event)
|
public void smashActivate(SmashActivateEvent event)
|
||||||
{
|
{
|
||||||
if (!_safeFunction.apply(event.getPlayer()))
|
if (!_safeFunction.test(event.getPlayer()))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_trainingModule.preventReturnToSpawn(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -219,7 +232,7 @@ public class SuperSmashTraining extends SuperSmash
|
|||||||
return UtilTime.elapsed(_lastDeath.get(player.getUniqueId()), 4000);
|
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)
|
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 = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
new ItemStack(Material.CHAINMAIL_HELMET)
|
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",
|
C.cYellow + C.Bold + "Passive" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Flap",
|
||||||
new String[]{
|
new String[]{
|
||||||
ChatColor.RESET + "You are able to use your double jump",
|
ChatColor.RESET + "You are able to use your double jump",
|
||||||
ChatColor.RESET + "up to 6 times in a row. However, with",
|
ChatColor.RESET + "up to 6 times in a row.",
|
||||||
ChatColor.RESET + "each flap, it loses some potency.",
|
|
||||||
ChatColor.RESET + "",
|
ChatColor.RESET + "",
|
||||||
ChatColor.RESET + C.cAqua + "Flap uses Energy (Experience Bar)",
|
ChatColor.RESET + C.cAqua + "Flap uses Energy (Experience Bar)",
|
||||||
}),
|
}),
|
||||||
@ -71,7 +70,7 @@ public class KitChicken extends SmashKit
|
|||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
null
|
null
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -94,6 +93,10 @@ public class KitChicken extends SmashKit
|
|||||||
{
|
{
|
||||||
player.getInventory().addItem(PLAYER_ITEMS[2], PLAYER_ITEMS[3]);
|
player.getInventory().addItem(PLAYER_ITEMS[2], PLAYER_ITEMS[3]);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player.setExp(0.999f);
|
||||||
|
}
|
||||||
|
|
||||||
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
player.getInventory().setArmorContents(PLAYER_ARMOR);
|
||||||
}
|
}
|
||||||
|
@ -74,10 +74,10 @@ public class KitCow extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.IRON_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.IRON_BOOTS),
|
||||||
new ItemStack(Material.IRON_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.IRON_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
new ItemStack(Material.IRON_HELMET),
|
ItemStackFactory.Instance.CreateStack(Material.IRON_HELMET),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,10 +75,10 @@ public class KitCreeper extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.LEATHER_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.IRON_BOOTS),
|
||||||
new ItemStack(Material.LEATHER_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.LEATHER_LEGGINGS),
|
||||||
new ItemStack(Material.LEATHER_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.LEATHER_CHESTPLATE),
|
||||||
new ItemStack(Material.LEATHER_HELMET),
|
ItemStackFactory.Instance.CreateStack(Material.LEATHER_HELMET),
|
||||||
};
|
};
|
||||||
|
|
||||||
public KitCreeper(ArcadeManager manager)
|
public KitCreeper(ArcadeManager manager)
|
||||||
|
@ -1,11 +1,27 @@
|
|||||||
package nautilus.game.arcade.game.games.smash.kits;
|
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.C;
|
||||||
import mineplex.core.common.util.UtilInv;
|
import mineplex.core.common.util.UtilInv;
|
||||||
import mineplex.core.disguise.disguises.DisguiseBase;
|
import mineplex.core.disguise.disguises.DisguiseBase;
|
||||||
import mineplex.core.disguise.disguises.DisguiseEnderman;
|
import mineplex.core.disguise.disguises.DisguiseEnderman;
|
||||||
import mineplex.core.itemstack.ItemStackFactory;
|
import mineplex.core.itemstack.ItemStackFactory;
|
||||||
|
import mineplex.core.updater.UpdateType;
|
||||||
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.ArcadeManager;
|
import nautilus.game.arcade.ArcadeManager;
|
||||||
import nautilus.game.arcade.game.Game.GameState;
|
import nautilus.game.arcade.game.Game.GameState;
|
||||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
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.PerkDoubleJump;
|
||||||
import nautilus.game.arcade.kit.perks.event.PerkBlockGrabEvent;
|
import nautilus.game.arcade.kit.perks.event.PerkBlockGrabEvent;
|
||||||
import nautilus.game.arcade.kit.perks.event.PerkBlockThrowEvent;
|
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
|
public class KitEnderman extends SmashKit
|
||||||
{
|
{
|
||||||
@ -70,16 +79,19 @@ public class KitEnderman extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private final Map<Player, Pair<Integer, Byte>> _heldBlock;
|
||||||
|
|
||||||
public KitEnderman(ArcadeManager manager)
|
public KitEnderman(ArcadeManager manager)
|
||||||
{
|
{
|
||||||
super(manager, "Enderman", KitAvailability.Gem, 3000, PERKS, EntityType.ENDERMAN, IN_HAND, DisguiseEnderman.class);
|
super(manager, "Enderman", KitAvailability.Gem, 3000, PERKS, EntityType.ENDERMAN, IN_HAND, DisguiseEnderman.class);
|
||||||
|
|
||||||
|
_heldBlock = new HashMap<>(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -102,19 +114,36 @@ public class KitEnderman extends SmashKit
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void BlockGrab(PerkBlockGrabEvent event)
|
public void BlockGrab(PerkBlockGrabEvent event)
|
||||||
{
|
{
|
||||||
setBlock(event.GetPlayer(), event.GetId(), event.GetData());
|
setBlock(event.GetPlayer(), event.GetId(), event.GetData(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void BlockThrow(PerkBlockThrowEvent event)
|
public void BlockThrow(PerkBlockThrowEvent event)
|
||||||
{
|
{
|
||||||
setBlock(event.GetPlayer(), 0, (byte) 0);
|
setBlock(event.GetPlayer(), 0, (byte) 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void Death(PlayerDeathEvent event)
|
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
|
@EventHandler
|
||||||
@ -129,14 +158,14 @@ public class KitEnderman extends SmashKit
|
|||||||
|
|
||||||
DisguiseBase disguise = Manager.GetDisguise().getActiveDisguise(player);
|
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.
|
// 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);
|
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);
|
DisguiseBase disguise = Manager.GetDisguise().getActiveDisguise(player);
|
||||||
|
|
||||||
@ -147,6 +176,11 @@ public class KitEnderman extends SmashKit
|
|||||||
disguiseEnderman.SetCarriedData(data);
|
disguiseEnderman.SetCarriedData(data);
|
||||||
|
|
||||||
Manager.GetDisguise().updateDisguise(disguiseEnderman);
|
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.Perk;
|
||||||
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
import nautilus.game.arcade.kit.perks.PerkDoubleJump;
|
||||||
import nautilus.game.arcade.kit.perks.PerkIronHook;
|
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;
|
import nautilus.game.arcade.kit.perks.PerkSlow;
|
||||||
|
|
||||||
public class KitGolem extends SmashKit
|
public class KitGolem extends SmashKit
|
||||||
@ -70,10 +70,10 @@ public class KitGolem extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.DIAMOND_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.DIAMOND_BOOTS),
|
||||||
new ItemStack(Material.IRON_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.IRON_LEGGINGS),
|
||||||
new ItemStack(Material.IRON_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.IRON_CHESTPLATE),
|
||||||
new ItemStack(Material.IRON_HELMET),
|
ItemStackFactory.Instance.CreateStack(Material.IRON_HELMET),
|
||||||
};
|
};
|
||||||
|
|
||||||
public KitGolem(ArcadeManager manager)
|
public KitGolem(ArcadeManager manager)
|
||||||
|
@ -79,8 +79,8 @@ public class KitGuardian extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.DIAMOND_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.DIAMOND_BOOTS),
|
||||||
new ItemStack(Material.DIAMOND_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.DIAMOND_LEGGINGS),
|
||||||
null,
|
null,
|
||||||
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",
|
C.cYellow + C.Bold + "Passive" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Fuel the Fire",
|
||||||
new String[]
|
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 + "armor and decreases your knockback taken.",
|
||||||
ChatColor.RESET + "Resets on death.",
|
ChatColor.RESET + "Resets on death.",
|
||||||
}),
|
}),
|
||||||
@ -82,10 +82,10 @@ public class KitMagmaCube extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
null,
|
null,
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||||
};
|
};
|
||||||
|
|
||||||
public KitMagmaCube(ArcadeManager manager)
|
public KitMagmaCube(ArcadeManager manager)
|
||||||
|
@ -83,9 +83,9 @@ public class KitPig extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
null,
|
null,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ public class KitPig extends SmashKit
|
|||||||
continue;
|
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 mineplex.core.itemstack.ItemStackFactory;
|
||||||
import nautilus.game.arcade.ArcadeManager;
|
import nautilus.game.arcade.ArcadeManager;
|
||||||
import nautilus.game.arcade.game.Game.GameState;
|
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.PerkSmashStats;
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
import nautilus.game.arcade.game.games.smash.perks.SmashKit;
|
||||||
import nautilus.game.arcade.game.games.smash.perks.sheep.SmashSheep;
|
import nautilus.game.arcade.game.games.smash.perks.sheep.SmashSheep;
|
||||||
@ -79,21 +80,11 @@ public class KitSheep extends SmashKit
|
|||||||
null
|
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)
|
public KitSheep(ArcadeManager manager)
|
||||||
{
|
{
|
||||||
super(manager, "Sir. Sheep", KitAvailability.Achievement, 99999, PERKS, EntityType.SHEEP, IN_HAND, DisguiseSheep.class);
|
super(manager, "Sir. Sheep", KitAvailability.Achievement, 99999, PERKS, EntityType.SHEEP, IN_HAND, DisguiseSheep.class);
|
||||||
|
|
||||||
this.setAchievementRequirements(ACHIEVEMENTS);
|
this.setAchievementRequirements(SuperSmash.ACHIEVEMENTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -8,9 +8,11 @@ import org.bukkit.entity.EntityType;
|
|||||||
import org.bukkit.entity.Horse;
|
import org.bukkit.entity.Horse;
|
||||||
import org.bukkit.entity.Horse.Variant;
|
import org.bukkit.entity.Horse.Variant;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.Skeleton;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
|
import mineplex.core.common.util.UtilEnt;
|
||||||
import mineplex.core.common.util.UtilInv;
|
import mineplex.core.common.util.UtilInv;
|
||||||
import mineplex.core.disguise.disguises.DisguiseHorse;
|
import mineplex.core.disguise.disguises.DisguiseHorse;
|
||||||
import mineplex.core.itemstack.ItemStackFactory;
|
import mineplex.core.itemstack.ItemStackFactory;
|
||||||
@ -79,10 +81,10 @@ public class KitSkeletalHorse extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.IRON_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.IRON_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||||
};
|
};
|
||||||
|
|
||||||
public KitSkeletalHorse(ArcadeManager manager)
|
public KitSkeletalHorse(ArcadeManager manager)
|
||||||
@ -112,8 +114,17 @@ public class KitSkeletalHorse extends SmashKit
|
|||||||
@Override
|
@Override
|
||||||
public Entity SpawnEntity(Location loc)
|
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.disguise.disguises.DisguiseSkeleton;
|
||||||
import mineplex.core.itemstack.ItemStackFactory;
|
import mineplex.core.itemstack.ItemStackFactory;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.ArcadeManager;
|
import nautilus.game.arcade.ArcadeManager;
|
||||||
import nautilus.game.arcade.game.Game.GameState;
|
import nautilus.game.arcade.game.Game.GameState;
|
||||||
import nautilus.game.arcade.game.games.smash.perks.PerkSmashStats;
|
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
|
public class KitSkeleton extends SmashKit
|
||||||
{
|
{
|
||||||
|
|
||||||
private static double ARROW_DAMAGE = 6;
|
private static final double ARROW_DAMAGE = 6;
|
||||||
|
|
||||||
private static final Perk[] PERKS = {
|
private static final Perk[] PERKS = {
|
||||||
new PerkSmashStats(),
|
new PerkSmashStats(),
|
||||||
@ -81,10 +82,10 @@ public class KitSkeleton extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,9 +75,9 @@ public class KitSkySquid extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
null
|
null
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -66,10 +66,10 @@ public class KitSlime extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
null,
|
null,
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||||
};
|
};
|
||||||
|
|
||||||
public KitSlime(ArcadeManager manager)
|
public KitSlime(ArcadeManager manager)
|
||||||
|
@ -62,10 +62,10 @@ public class KitSnowman extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||||
};
|
};
|
||||||
|
|
||||||
public KitSnowman(ArcadeManager manager)
|
public KitSnowman(ArcadeManager manager)
|
||||||
|
@ -80,10 +80,10 @@ public class KitSpider extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.IRON_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
null,
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
new ItemStack(Material.CHAINMAIL_HELMET),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET),
|
||||||
};
|
};
|
||||||
|
|
||||||
public KitSpider(ArcadeManager manager)
|
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 = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
null
|
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",
|
C.cYellow + C.Bold + "Hold Block" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Guided Wither Skull",
|
||||||
new String[]{
|
new String[]{
|
||||||
ChatColor.RESET + "Launch a Wither Skull forwards, hold",
|
ChatColor.RESET + "Launch a Wither Skull forwards, hold",
|
||||||
ChatColor.RESET + "block to guide the missile! Release",
|
ChatColor.RESET + "block to guide the missile!"
|
||||||
ChatColor.RESET + "block to detonate it midair.",
|
|
||||||
}),
|
}),
|
||||||
ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte) 0, 1,
|
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",
|
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 = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
new ItemStack(Material.CHAINMAIL_HELMET)
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET)
|
||||||
};
|
};
|
||||||
|
|
||||||
public KitWitherSkeleton(ArcadeManager manager)
|
public KitWitherSkeleton(ArcadeManager manager)
|
||||||
|
@ -67,8 +67,8 @@ public class KitWolf extends SmashKit
|
|||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
null,
|
null,
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
null
|
null
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -77,9 +77,9 @@ public class KitZombie extends SmashKit
|
|||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack[] PLAYER_ARMOR = {
|
private static final ItemStack[] PLAYER_ARMOR = {
|
||||||
new ItemStack(Material.CHAINMAIL_BOOTS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS),
|
||||||
new ItemStack(Material.CHAINMAIL_LEGGINGS),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS),
|
||||||
new ItemStack(Material.CHAINMAIL_CHESTPLATE),
|
ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE),
|
||||||
null,
|
null,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
package nautilus.game.arcade.game.games.smash.perks;
|
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.C;
|
||||||
import mineplex.core.common.util.UtilPlayer;
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
import nautilus.game.arcade.kit.Perk;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|
||||||
|
|
||||||
public class PerkSmashStats extends Perk
|
public class PerkSmashStats extends Perk
|
||||||
{
|
{
|
||||||
@ -62,17 +63,8 @@ public class PerkSmashStats extends Perk
|
|||||||
public void Knockback(CustomDamageEvent event)
|
public void Knockback(CustomDamageEvent event)
|
||||||
{
|
{
|
||||||
Player damagee = event.GetDamageePlayer();
|
Player damagee = event.GetDamageePlayer();
|
||||||
if (damagee == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Kit.HasKit(damagee))
|
if (damagee == null || !Kit.HasKit(damagee) || !Manager.IsAlive(damagee))
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Manager.IsAlive(damagee))
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -98,14 +90,4 @@ public class PerkSmashStats extends Perk
|
|||||||
UtilPlayer.health(player, _regen);
|
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;
|
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.F;
|
||||||
import mineplex.core.common.util.UtilPlayer;
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
|
import mineplex.core.common.util.UtilServer;
|
||||||
import mineplex.core.common.util.UtilTime;
|
import mineplex.core.common.util.UtilTime;
|
||||||
import mineplex.core.recharge.Recharge;
|
import mineplex.core.recharge.Recharge;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
|
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
|
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;
|
private int _length;
|
||||||
|
|
||||||
public SmashUltimate(String name, String[] perkDesc, Sound sound, 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)
|
public void activate(Player player)
|
||||||
{
|
{
|
||||||
|
player.setHealth(player.getMaxHealth());
|
||||||
_lastUltimate.put(player.getUniqueId(), System.currentTimeMillis());
|
_lastUltimate.put(player.getUniqueId(), System.currentTimeMillis());
|
||||||
|
|
||||||
if (_length > MIN_ULTIAMTE_DISPLAY_TIME)
|
if (_length > MIN_ULTIMATE_DISPLAY_TIME)
|
||||||
{
|
{
|
||||||
Recharge recharge = Recharge.Instance;
|
Recharge recharge = Recharge.Instance;
|
||||||
|
|
||||||
@ -57,9 +65,12 @@ public class SmashUltimate extends Perk
|
|||||||
|
|
||||||
public void cancel(Player player)
|
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.sendMessage(F.main("Game", "Deactivated " + F.skill(GetName()) + "."));
|
||||||
player.playSound(player.getLocation(), Sound.BLAZE_DEATH, 1, 0);
|
player.playSound(player.getLocation(), Sound.BLAZE_DEATH, 1, 0);
|
||||||
@ -122,13 +133,16 @@ public class SmashUltimate extends Perk
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onGameStateChange(GameStateChangeEvent event)
|
public void onGameStateChange(GameStateChangeEvent event)
|
||||||
{
|
{
|
||||||
if (event.GetState() != GameState.End)
|
for (Player player : UtilServer.getPlayersCollection())
|
||||||
{
|
{
|
||||||
for (UUID uuid : _lastUltimate.keySet())
|
cancel(player);
|
||||||
{
|
|
||||||
cancel(UtilPlayer.searchExact(uuid));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void playerQuit(PlayerQuitEvent event)
|
||||||
|
{
|
||||||
|
_lastUltimate.remove(event.getPlayer().getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUsingUltimate(Player player)
|
public boolean isUsingUltimate(Player player)
|
||||||
@ -141,7 +155,7 @@ public class SmashUltimate extends Perk
|
|||||||
return _lastUltimate.containsKey(uuid);
|
return _lastUltimate.containsKey(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<UUID, Long> getLastUltimate()
|
protected Map<UUID, Long> getLastUltimate()
|
||||||
{
|
{
|
||||||
return _lastUltimate;
|
return _lastUltimate;
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import org.bukkit.Sound;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
@ -28,6 +29,7 @@ import mineplex.core.recharge.Recharge;
|
|||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||||
import nautilus.game.arcade.kit.Perk;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
import nautilus.game.arcade.kit.perks.data.FireflyData;
|
import nautilus.game.arcade.kit.perks.data.FireflyData;
|
||||||
@ -151,12 +153,6 @@ public class PerkFirefly extends SmashPerk
|
|||||||
boolean superActive = isSuperActive(data.Player);
|
boolean superActive = isSuperActive(data.Player);
|
||||||
String skillName = superActive ? "Phoenix" : GetName();
|
String skillName = superActive ? "Phoenix" : GetName();
|
||||||
|
|
||||||
if (UtilPlayer.isSpectator(player))
|
|
||||||
{
|
|
||||||
dataIterator.remove();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Warmup
|
// Warmup
|
||||||
if (!UtilTime.elapsed(data.Time, _warmupTime) && !superActive)
|
if (!UtilTime.elapsed(data.Time, _warmupTime) && !superActive)
|
||||||
{
|
{
|
||||||
@ -249,7 +245,7 @@ public class PerkFirefly extends SmashPerk
|
|||||||
continue;
|
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)))
|
if (isTeamDamage(data.Player, event.GetDamagerPlayer(true)))
|
||||||
{
|
{
|
||||||
@ -275,4 +271,10 @@ public class PerkFirefly extends SmashPerk
|
|||||||
|
|
||||||
event.AddKnockback(GetName(), _knockbackMagnitude);
|
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.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Item;
|
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 float MAX_ENERGY = 0.999F;
|
||||||
|
private static final ItemStack POWDER = new ItemStack(Material.BLAZE_POWDER);
|
||||||
|
|
||||||
private float _energyTick = 0.025F;
|
private float _energyTick = 0.025F;
|
||||||
private float _energyItem = 0.035F;
|
private float _energyItem = 0.035F;
|
||||||
@ -151,23 +153,23 @@ public class PerkInferno extends SmashPerk
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fire
|
// 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);
|
Manager.GetFire().Add(fire, cur, _itemExpireTime, 0, _itemBurnTime, _itemDamage, GetName(), false);
|
||||||
|
|
||||||
fire.teleport(cur.getEyeLocation());
|
fire.setVelocity(location.getDirection().multiply(_itemVelocityMagnitude));
|
||||||
fire.setVelocity(cur.getLocation().getDirection().add(getRandomVector()).multiply(_itemVelocityMagnitude));
|
|
||||||
|
|
||||||
// Effect
|
// 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()
|
// private Vector getRandomVector()
|
||||||
{
|
// {
|
||||||
double x = 0.07 - (UtilMath.r(14) / 100);
|
// double x = 0.07 - (UtilMath.r(14) / 100);
|
||||||
double y = 0.07 - (UtilMath.r(14) / 100);
|
// double y = 0.07 - (UtilMath.r(14) / 100);
|
||||||
double z = 0.07 - (UtilMath.r(14) / 100);
|
// double z = 0.07 - (UtilMath.r(14) / 100);
|
||||||
|
//
|
||||||
return new Vector(x, y, z);
|
// return new Vector(x, y, z);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ import org.bukkit.Sound;
|
|||||||
import org.bukkit.entity.Egg;
|
import org.bukkit.entity.Egg;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
@ -96,7 +97,7 @@ public class PerkEggGun extends SmashPerk
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void Update(UpdateEvent event)
|
public void Update(UpdateEvent event)
|
||||||
{
|
{
|
||||||
if (event.getType() != UpdateType.TICK)
|
if (event.getType() != UpdateType.TICK || !Manager.GetGame().IsLive())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -141,7 +142,7 @@ public class PerkEggGun extends SmashPerk
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void EggHit(CustomDamageEvent event)
|
public void EggHit(CustomDamageEvent event)
|
||||||
{
|
{
|
||||||
if (event.GetProjectile() == null || !(event.GetProjectile() instanceof Egg))
|
if (event.GetProjectile() == null || !(event.GetProjectile() instanceof Egg))
|
||||||
@ -149,6 +150,7 @@ public class PerkEggGun extends SmashPerk
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Player damagee = event.GetDamageePlayer();
|
||||||
Player damager = event.GetDamagerPlayer(true);
|
Player damager = event.GetDamagerPlayer(true);
|
||||||
|
|
||||||
if (damager == null || !hasPerk(damager))
|
if (damager == null || !hasPerk(damager))
|
||||||
@ -159,7 +161,11 @@ public class PerkEggGun extends SmashPerk
|
|||||||
event.AddMod("Negate", -event.GetDamage());
|
event.AddMod("Negate", -event.GetDamage());
|
||||||
event.AddMod(damager.getName(), "Egg Blaster", _damage, true);
|
event.AddMod(damager.getName(), "Egg Blaster", _damage, true);
|
||||||
event.SetIgnoreRate(true);
|
event.SetIgnoreRate(true);
|
||||||
|
event.SetKnockback(false);
|
||||||
|
|
||||||
|
if (damagee == null || !isTeamDamage(damagee, damager))
|
||||||
|
{
|
||||||
UtilAction.zeroVelocity(event.GetDamageeEntity());
|
UtilAction.zeroVelocity(event.GetDamageeEntity());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ public class PerkFlap extends SmashPerk
|
|||||||
// Disable Flight
|
// Disable Flight
|
||||||
player.setAllowFlight(false);
|
player.setAllowFlight(false);
|
||||||
|
|
||||||
double power = 0.4 + 0.6 * (_power * player.getExp());
|
double power = 0.4 + _power;
|
||||||
|
|
||||||
// Velocity
|
// Velocity
|
||||||
if (_control)
|
if (_control)
|
||||||
@ -114,7 +114,7 @@ public class PerkFlap extends SmashPerk
|
|||||||
continue;
|
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.setExp(Math.min(MAX_ENERGY, player.getExp() + _energyPerTick));
|
||||||
player.setAllowFlight(true);
|
player.setAllowFlight(true);
|
||||||
|
@ -1,20 +1,19 @@
|
|||||||
package nautilus.game.arcade.game.games.smash.perks.cow;
|
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.Location;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.Vector;
|
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 class DataCowMilkSpiral
|
||||||
{
|
{
|
||||||
public long Time;
|
public long Time;
|
||||||
@ -54,14 +53,14 @@ public class DataCowMilkSpiral
|
|||||||
Spiral.add(Direction.clone().multiply(0.7));
|
Spiral.add(Direction.clone().multiply(0.7));
|
||||||
|
|
||||||
//Spiral
|
//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
|
//Orbit
|
||||||
double speed = 3d;
|
double speed = 3d;
|
||||||
double oX = -Math.sin(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;
|
double oZ = Math.cos(Player.getTicksLived() / speed + lead) * 1.5;
|
||||||
|
|
||||||
Location newSpiral = Spiral.clone();
|
Location newSpiral = Spiral.clone();
|
||||||
newSpiral.add(UtilAlg.getLeft(Direction).multiply(oX));
|
newSpiral.add(UtilAlg.getLeft(Direction).multiply(oX));
|
||||||
@ -103,9 +102,7 @@ public class DataCowMilkSpiral
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UtilBlock.solid(Spiral.getBlock()))
|
return UtilTime.elapsed(Time, 3000);
|
||||||
return true;
|
|
||||||
|
|
||||||
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.ParticleType;
|
||||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||||
import mineplex.core.common.util.UtilPlayer;
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
import mineplex.core.common.util.UtilServer;
|
|
||||||
import mineplex.core.recharge.Recharge;
|
import mineplex.core.recharge.Recharge;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||||
|
|
||||||
public class PerkCowMilkSpiral extends SmashPerk
|
public class PerkCowMilkSpiral extends SmashPerk
|
||||||
@ -113,17 +113,16 @@ public class PerkCowMilkSpiral extends SmashPerk
|
|||||||
|
|
||||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
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;
|
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());
|
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,
|
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);
|
||||||
ViewDist.LONG, UtilServer.getPlayers());
|
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.SPLASH, 0.25f, 2f);
|
player.getWorld().playSound(player.getLocation(), Sound.SPLASH, 0.25f, 2f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ public class PerkCowStampede extends SmashPerk
|
|||||||
{
|
{
|
||||||
|
|
||||||
private long _speedTime;
|
private long _speedTime;
|
||||||
|
private double _stopSprintDamage;
|
||||||
|
|
||||||
private Map<UUID, Long> _sprintTime = new HashMap<>();
|
private Map<UUID, Long> _sprintTime = new HashMap<>();
|
||||||
private Map<UUID, Integer> _sprintStr = new HashMap<>();
|
private Map<UUID, Integer> _sprintStr = new HashMap<>();
|
||||||
@ -45,6 +46,7 @@ public class PerkCowStampede extends SmashPerk
|
|||||||
public void setupValues()
|
public void setupValues()
|
||||||
{
|
{
|
||||||
_speedTime = getPerkTime("Speed Time");
|
_speedTime = getPerkTime("Speed Time");
|
||||||
|
_stopSprintDamage = getPerkDouble("Stop Sprint Damage");
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -202,7 +204,7 @@ public class PerkCowStampede extends SmashPerk
|
|||||||
UtilServer.getServer().getPluginManager().callEvent(new SkillEvent(damager, GetName(), ClassType.Brute, damagee));
|
UtilServer.getServer().getPluginManager().callEvent(new SkillEvent(damager, GetName(), ClassType.Brute, damagee));
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler
|
||||||
public void damageCancel(CustomDamageEvent event)
|
public void damageCancel(CustomDamageEvent event)
|
||||||
{
|
{
|
||||||
if (event.IsCancelled())
|
if (event.IsCancelled())
|
||||||
@ -212,7 +214,7 @@ public class PerkCowStampede extends SmashPerk
|
|||||||
|
|
||||||
Player damagee = event.GetDamageePlayer();
|
Player damagee = event.GetDamageePlayer();
|
||||||
|
|
||||||
if (damagee == null)
|
if (damagee == null || event.GetDamage() < _stopSprintDamage)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,24 @@
|
|||||||
package nautilus.game.arcade.game.games.smash.perks.creeper;
|
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.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.ParticleType;
|
||||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
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.itemstack.ItemStackFactory;
|
||||||
import mineplex.core.projectile.IThrown;
|
import mineplex.core.projectile.IThrown;
|
||||||
import mineplex.core.projectile.ProjectileUser;
|
import mineplex.core.projectile.ProjectileUser;
|
||||||
import mineplex.core.recharge.Recharge;
|
import mineplex.core.recharge.Recharge;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -21,21 +30,13 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
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
|
public class PerkCreeperSulphurBomb extends SmashPerk
|
||||||
{
|
{
|
||||||
|
|
||||||
private static ItemStack POWDER = new ItemStack(Material.SULPHUR);
|
|
||||||
|
|
||||||
private int _cooldown;
|
private int _cooldown;
|
||||||
private float _damage;
|
private float _damage;
|
||||||
private float _knockbackMagnitude;
|
private float _knockbackMagnitude;
|
||||||
private float _damagePowder;
|
|
||||||
|
|
||||||
private final IThrown _sulphurThrown = new IThrown()
|
private final IThrown _sulphurThrown = new IThrown()
|
||||||
{
|
{
|
||||||
@ -71,41 +72,6 @@ public class PerkCreeperSulphurBomb extends SmashPerk
|
|||||||
data.getThrown().remove();
|
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
|
@Override
|
||||||
public void ChunkUnload(ProjectileUser data)
|
public void ChunkUnload(ProjectileUser data)
|
||||||
{
|
{
|
||||||
@ -114,15 +80,12 @@ public class PerkCreeperSulphurBomb extends SmashPerk
|
|||||||
|
|
||||||
private void Explode(ProjectileUser data)
|
private void Explode(ProjectileUser data)
|
||||||
{
|
{
|
||||||
UtilParticle.PlayParticleToAll(ParticleType.EXPLODE, data.getThrown().getLocation(), 0, 0, 0, 0, 1, ViewDist.LONG);
|
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, 2f);
|
data.getThrown().getWorld().playSound(data.getThrown().getLocation(), Sound.EXPLODE, 1f, 1.5f);
|
||||||
data.getThrown().remove();
|
data.getThrown().remove();
|
||||||
_sulphur.remove(data.getThrower().getUniqueId());
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private Map<UUID, Item> _sulphur = new HashMap<>();
|
|
||||||
|
|
||||||
public PerkCreeperSulphurBomb()
|
public PerkCreeperSulphurBomb()
|
||||||
{
|
{
|
||||||
super("Sulphur Bomb", new String[] { C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Sulphur Bomb" });
|
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");
|
_cooldown = getPerkTime("Cooldown");
|
||||||
_damage = getPerkFloat("Damage");
|
_damage = getPerkFloat("Damage");
|
||||||
_knockbackMagnitude = getPerkFloat("Knockback Magnitude");
|
_knockbackMagnitude = getPerkFloat("Knockback Magnitude");
|
||||||
_damagePowder = getPerkFloat("Damage Powder");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -183,10 +145,8 @@ public class PerkCreeperSulphurBomb extends SmashPerk
|
|||||||
|
|
||||||
Item ent = player.getWorld().dropItem(player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.COAL, (byte) 0));
|
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);
|
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
|
// Inform
|
||||||
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
|
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);
|
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
|
@EventHandler
|
||||||
public void Knockback(CustomDamageEvent event)
|
public void Knockback(CustomDamageEvent event)
|
||||||
{
|
{
|
||||||
|
@ -7,8 +7,10 @@ import java.util.Set;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.entity.EnderCrystal;
|
||||||
import org.bukkit.entity.FallingBlock;
|
import org.bukkit.entity.FallingBlock;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -50,7 +52,6 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
|||||||
|
|
||||||
private Map<UUID, BlockTossData> _hold = new HashMap<>();
|
private Map<UUID, BlockTossData> _hold = new HashMap<>();
|
||||||
private Set<UUID> _charged = new HashSet<>();
|
private Set<UUID> _charged = new HashSet<>();
|
||||||
private Map<FallingBlock, UUID> _falling = new HashMap<>();
|
|
||||||
|
|
||||||
public PerkBlockToss()
|
public PerkBlockToss()
|
||||||
{
|
{
|
||||||
@ -70,7 +71,6 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
|||||||
@Override
|
@Override
|
||||||
public void unregisteredEvents()
|
public void unregisteredEvents()
|
||||||
{
|
{
|
||||||
_falling.clear();
|
|
||||||
_hold.clear();
|
_hold.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +87,8 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UtilBlock.usable(event.getClickedBlock()))
|
Material material = event.getClickedBlock().getType();
|
||||||
|
if (UtilBlock.usable(event.getClickedBlock()) || material == Material.REDSTONE_WIRE || material == Material.SKULL)
|
||||||
{
|
{
|
||||||
return;
|
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);
|
FallingBlock block = cur.getWorld().spawnFallingBlock(cur.getEyeLocation().add(cur.getLocation().getDirection()), data.Type, data.Data);
|
||||||
|
|
||||||
_falling.put(block, key);
|
|
||||||
|
|
||||||
_charged.remove(key);
|
_charged.remove(key);
|
||||||
|
|
||||||
long charge = System.currentTimeMillis() - data.Time;
|
long charge = System.currentTimeMillis() - data.Time;
|
||||||
@ -218,6 +217,12 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (target instanceof EnderCrystal)
|
||||||
|
{
|
||||||
|
data.getThrown().remove();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Damage Event
|
// 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
|
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());
|
.getThrower()), GetName());
|
||||||
@ -227,17 +232,8 @@ public class PerkBlockToss extends SmashPerk implements IThrown
|
|||||||
{
|
{
|
||||||
FallingBlock thrown = (FallingBlock) data.getThrown();
|
FallingBlock thrown = (FallingBlock) data.getThrown();
|
||||||
|
|
||||||
FallingBlock newThrown = data.getThrown().getWorld().spawnFallingBlock(data.getThrown().getLocation(), thrown.getMaterial(), (byte) 0);
|
data.getThrown().getWorld().spawnFallingBlock(data.getThrown().getLocation(), thrown.getMaterial(), (byte) 0);
|
||||||
|
|
||||||
// Remove Old
|
|
||||||
_falling.remove(thrown);
|
|
||||||
thrown.remove();
|
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.getWorld().playEffect(event.getBlock().getLocation(), Effect.STEP_SOUND, falling.getBlockId());
|
||||||
|
|
||||||
_falling.remove(falling);
|
|
||||||
falling.remove();
|
falling.remove();
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -23,6 +23,7 @@ import mineplex.core.common.util.UtilTextMiddle;
|
|||||||
import mineplex.core.recharge.Recharge;
|
import mineplex.core.recharge.Recharge;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||||
|
|
||||||
public class PerkEndermanTeleport extends SmashPerk
|
public class PerkEndermanTeleport extends SmashPerk
|
||||||
@ -36,7 +37,7 @@ public class PerkEndermanTeleport extends SmashPerk
|
|||||||
|
|
||||||
public PerkEndermanTeleport()
|
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
|
@Override
|
||||||
|
@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.smash.perks.golem;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
@ -80,7 +81,8 @@ public class PerkFissure extends Perk
|
|||||||
return;
|
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);
|
_active.add(data);
|
||||||
|
|
||||||
// Inform
|
// Inform
|
||||||
|
@ -29,22 +29,33 @@ import mineplex.core.recharge.Recharge;
|
|||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.kit.Perk;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
|
|
||||||
public class PerkSeismicSlam extends Perk
|
public class PerkSeismicSlam extends Perk
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final int COOLDOWN = 7000;
|
private long _cooldown;
|
||||||
private static final int TIME = 1000;
|
private long _time;
|
||||||
private static final int DAMAGE = 10;
|
private int _damage;
|
||||||
private static final int RADIUS = 8;
|
private int _radius;
|
||||||
private static final float KNOCKBACK_MAGNITUDE = 2.4F;
|
private float _knockbackMagnitude;
|
||||||
|
|
||||||
private Map<LivingEntity, Long> _live = new HashMap<>();
|
private Map<LivingEntity, Long> _live = new HashMap<>();
|
||||||
|
|
||||||
public PerkSeismicSlam()
|
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
|
@EventHandler
|
||||||
@ -93,7 +104,7 @@ public class PerkSeismicSlam extends Perk
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
|
if (!Recharge.Instance.use(player, GetName(), _cooldown, true, true))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Action
|
// Action
|
||||||
@ -122,17 +133,7 @@ public class PerkSeismicSlam extends Perk
|
|||||||
|
|
||||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||||
{
|
{
|
||||||
if (!UtilEnt.isGrounded(player))
|
if (!UtilEnt.onBlock(player) || !_live.containsKey(player) || !UtilTime.elapsed(_live.get(player), _time))
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_live.containsKey(player))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!UtilTime.elapsed(_live.get(player), TIME))
|
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -141,7 +142,7 @@ public class PerkSeismicSlam extends Perk
|
|||||||
|
|
||||||
// Action
|
// Action
|
||||||
|
|
||||||
Map<LivingEntity, Double> targets = UtilEnt.getInRadius(player.getLocation(), RADIUS);
|
Map<LivingEntity, Double> targets = UtilEnt.getInRadius(player.getLocation(), _radius);
|
||||||
|
|
||||||
for (LivingEntity cur : targets.keySet())
|
for (LivingEntity cur : targets.keySet())
|
||||||
{
|
{
|
||||||
@ -150,20 +151,22 @@ public class PerkSeismicSlam extends Perk
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cur instanceof Player && !UtilPlayer.isSpectator(cur))
|
if (UtilPlayer.isSpectator(cur))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Damage Event
|
// 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
|
// Condition
|
||||||
Manager.GetCondition().Factory().Falling(GetName(), cur, player, 10, false, true);
|
Manager.GetCondition().Factory().Falling(GetName(), cur, player, 10, false, true);
|
||||||
|
|
||||||
// Inform
|
// Inform
|
||||||
if (cur instanceof Player)
|
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
|
// Effect
|
||||||
@ -171,10 +174,12 @@ public class PerkSeismicSlam extends Perk
|
|||||||
|
|
||||||
for (Block cur : UtilBlock.getInRadius(player.getLocation(), 4).keySet())
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.AddKnockback(GetName(), KNOCKBACK_MAGNITUDE);
|
event.AddKnockback(GetName(), _knockbackMagnitude);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package nautilus.game.arcade.game.games.smash.perks.golem;
|
package nautilus.game.arcade.game.games.smash.perks.golem;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -10,6 +12,7 @@ import org.bukkit.block.BlockFace;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import mineplex.core.common.util.UtilAction;
|
import mineplex.core.common.util.UtilAction;
|
||||||
@ -29,6 +32,8 @@ public class SmashGolem extends SmashUltimate
|
|||||||
private int _damageRadius;
|
private int _damageRadius;
|
||||||
private int _effectRadius;
|
private int _effectRadius;
|
||||||
|
|
||||||
|
private final Set<Player> _killed = new HashSet<>();
|
||||||
|
|
||||||
public SmashGolem()
|
public SmashGolem()
|
||||||
{
|
{
|
||||||
super("Earthquake", new String[] {}, Sound.IRONGOLEM_HIT, 0);
|
super("Earthquake", new String[] {}, Sound.IRONGOLEM_HIT, 0);
|
||||||
@ -45,9 +50,11 @@ public class SmashGolem extends SmashUltimate
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void activate(Player player)
|
public void cancel(Player player)
|
||||||
{
|
{
|
||||||
super.activate(player);
|
super.cancel(player);
|
||||||
|
|
||||||
|
_killed.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -71,7 +78,7 @@ public class SmashGolem extends SmashUltimate
|
|||||||
|
|
||||||
for (Player other : alivePlayers)
|
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;
|
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.Effect;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.ArmorStand;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
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.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||||
|
|
||||||
public class PerkTargetLazer extends SmashPerk
|
public class PerkTargetLazer extends SmashPerk
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private static final int ACTIVE_ITEM_SLOT = 2;
|
||||||
|
|
||||||
private int _cooldown;
|
private int _cooldown;
|
||||||
private int _maxRange;
|
private int _maxRange;
|
||||||
private int _maxTime;
|
private int _maxTime;
|
||||||
@ -47,7 +49,7 @@ public class PerkTargetLazer extends SmashPerk
|
|||||||
|
|
||||||
public PerkTargetLazer()
|
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
|
@Override
|
||||||
@ -164,14 +166,6 @@ public class PerkTargetLazer extends SmashPerk
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void update(UpdateEvent event)
|
public void update(UpdateEvent event)
|
||||||
{
|
{
|
||||||
if (event.getType() == UpdateType.TICK)
|
|
||||||
{
|
|
||||||
for (TargetLazerData data : _data)
|
|
||||||
{
|
|
||||||
data.update(Manager);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getType() != UpdateType.FASTER)
|
if (event.getType() != UpdateType.FASTER)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -194,15 +188,15 @@ public class PerkTargetLazer extends SmashPerk
|
|||||||
{
|
{
|
||||||
long time = data.getTimeElapsed() / 1000;
|
long time = data.getTimeElapsed() / 1000;
|
||||||
double damage = 0.5 * time;
|
double damage = 0.5 * time;
|
||||||
ArmorStand targetPlaceholder = data.update(Manager);
|
Player attacker = data.getAttacker();
|
||||||
|
|
||||||
targetPlaceholder.remove();
|
setLazerTarget(attacker, null);
|
||||||
setLazerTarget(data.getAttacker(), null);
|
|
||||||
|
|
||||||
data.getAttacker().sendMessage(F.main("Game", "Your laser broke, dealing damage to " + F.name(data.getTarget().getName())) + ".");
|
attacker.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());
|
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();
|
iterator.remove();
|
||||||
}
|
}
|
||||||
@ -231,7 +225,7 @@ public class PerkTargetLazer extends SmashPerk
|
|||||||
{
|
{
|
||||||
event.AddMod(GetName(), _damageIncrease);
|
event.AddMod(GetName(), _damageIncrease);
|
||||||
event.AddKnockback(GetName(), _knockbackIncrease);
|
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();
|
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)
|
private void setLazerTarget(Player disguised, Player target)
|
||||||
{
|
{
|
||||||
DisguiseManager disguiseManager = Manager.GetDisguise();
|
DisguiseManager disguiseManager = Manager.GetDisguise();
|
||||||
DisguiseGuardian disguise = (DisguiseGuardian) disguiseManager.getActiveDisguise(disguised);
|
DisguiseGuardian disguise = (DisguiseGuardian) disguiseManager.getActiveDisguise(disguised);
|
||||||
|
int entityId = 0;
|
||||||
|
|
||||||
for (TargetLazerData data : _data)
|
if (target != null)
|
||||||
{
|
{
|
||||||
if (data.getAttacker().equals(disguised))
|
entityId = disguiseManager.getActiveDisguise(target).getEntityId();
|
||||||
{
|
|
||||||
if (target == null)
|
|
||||||
{
|
|
||||||
disguise.setTarget(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
disguise.setTarget(data.update(Manager).getEntityId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
disguise.setTarget(entityId);
|
||||||
disguiseManager.updateDisguise(disguise);
|
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.game.games.smash.TeamSuperSmash;
|
||||||
import nautilus.game.arcade.kit.Perk;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
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);
|
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();
|
iterator.remove();
|
||||||
_usedSecondBoost.remove(uuid);
|
_usedSecondBoost.remove(uuid);
|
||||||
@ -149,7 +151,7 @@ public class PerkWaterSplash extends Perk
|
|||||||
|
|
||||||
for (Block block : UtilBlock.getInRadius(player.getLocation(), _radius).keySet())
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,15 @@
|
|||||||
package nautilus.game.arcade.game.games.smash.perks.guardian;
|
package nautilus.game.arcade.game.games.smash.perks.guardian;
|
||||||
|
|
||||||
import org.bukkit.entity.ArmorStand;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import mineplex.core.common.util.UtilEnt;
|
|
||||||
|
|
||||||
import nautilus.game.arcade.ArcadeManager;
|
|
||||||
|
|
||||||
public class TargetLazerData
|
public class TargetLazerData
|
||||||
{
|
{
|
||||||
|
|
||||||
private Player _attacker;
|
private Player _attacker;
|
||||||
private Player _target;
|
private Player _target;
|
||||||
private long _startTime;
|
private long _startTime;
|
||||||
private ArmorStand _targetPlaceholder;
|
|
||||||
|
|
||||||
public TargetLazerData(Player attacker)
|
TargetLazerData(Player attacker)
|
||||||
{
|
{
|
||||||
_attacker = attacker;
|
_attacker = attacker;
|
||||||
}
|
}
|
||||||
@ -26,27 +20,6 @@ public class TargetLazerData
|
|||||||
_startTime = System.currentTimeMillis();
|
_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()
|
public Player getAttacker()
|
||||||
{
|
{
|
||||||
return _attacker;
|
return _attacker;
|
||||||
@ -61,5 +34,4 @@ public class TargetLazerData
|
|||||||
{
|
{
|
||||||
return System.currentTimeMillis() - _startTime;
|
return System.currentTimeMillis() - _startTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ public class PerkFlameDash extends Perk
|
|||||||
private int _damageRadius;
|
private int _damageRadius;
|
||||||
private int _knockbackMagnitude;
|
private int _knockbackMagnitude;
|
||||||
|
|
||||||
private Set<FireflyData> _data = new HashSet<FireflyData>();
|
private Set<FireflyData> _data = new HashSet<>();
|
||||||
|
|
||||||
public PerkFlameDash()
|
public PerkFlameDash()
|
||||||
{
|
{
|
||||||
@ -76,7 +76,7 @@ public class PerkFlameDash extends Perk
|
|||||||
|
|
||||||
Player player = event.getPlayer();
|
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;
|
return;
|
||||||
}
|
}
|
||||||
@ -111,6 +111,14 @@ public class PerkFlameDash extends Perk
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Player other : UtilServer.getPlayersCollection())
|
||||||
|
{
|
||||||
|
if (other.getSpectatorTarget() != null && other.getSpectatorTarget().equals(player))
|
||||||
|
{
|
||||||
|
other.setSpectatorTarget(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Recharge.Instance.recharge(player, GetName());
|
Recharge.Instance.recharge(player, GetName());
|
||||||
Recharge.Instance.use(player, GetName(), _cooldown, true, true);
|
Recharge.Instance.use(player, GetName(), _cooldown, true, true);
|
||||||
|
|
||||||
@ -130,7 +138,7 @@ public class PerkFlameDash extends Perk
|
|||||||
UpdateMovement();
|
UpdateMovement();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateMovement()
|
private void UpdateMovement()
|
||||||
{
|
{
|
||||||
Iterator<FireflyData> dataIterator = _data.iterator();
|
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 BOOTS = new ItemStack(Material.IRON_BOOTS);
|
||||||
private static final ItemStack CHESTPLATE = new ItemStack(Material.IRON_CHESTPLATE);
|
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;
|
private int _maxStacks;
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.smash.perks.pig;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -35,6 +36,7 @@ import mineplex.core.disguise.disguises.DisguisePigZombie;
|
|||||||
import mineplex.core.recharge.Recharge;
|
import mineplex.core.recharge.Recharge;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||||
|
|
||||||
public class PerkPigBaconBomb extends SmashPerk
|
public class PerkPigBaconBomb extends SmashPerk
|
||||||
@ -49,7 +51,7 @@ public class PerkPigBaconBomb extends SmashPerk
|
|||||||
private int _explodeDamage;
|
private int _explodeDamage;
|
||||||
private int _explodeDamageRadius;
|
private int _explodeDamageRadius;
|
||||||
|
|
||||||
private Map<UUID, Set<Pig>> _pigs = new HashMap<UUID, Set<Pig>>();
|
private Map<UUID, Set<Pig>> _pigs = new HashMap<>();
|
||||||
|
|
||||||
public PerkPigBaconBomb()
|
public PerkPigBaconBomb()
|
||||||
{
|
{
|
||||||
@ -146,7 +148,7 @@ public class PerkPigBaconBomb extends SmashPerk
|
|||||||
// Store
|
// Store
|
||||||
if (!_pigs.containsKey(key))
|
if (!_pigs.containsKey(key))
|
||||||
{
|
{
|
||||||
_pigs.put(key, new HashSet<Pig>());
|
_pigs.put(key, new HashSet<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
_pigs.get(key).add(pig);
|
_pigs.get(key).add(pig);
|
||||||
@ -182,11 +184,13 @@ public class PerkPigBaconBomb extends SmashPerk
|
|||||||
continue;
|
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);
|
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)
|
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 _energyBacon;
|
||||||
private float _energyBaconDisgtuiseFactor;
|
private float _energyBaconDisgtuiseFactor;
|
||||||
private float _energyBaconBack;
|
private float _energyBaconBack;
|
||||||
|
private float _hitBox;
|
||||||
private int _cooldown;
|
private int _cooldown;
|
||||||
private int _healthBacon;
|
private int _healthBacon;
|
||||||
private int _damageBacon;
|
private int _damageBacon;
|
||||||
@ -58,6 +59,7 @@ public class PerkPigBaconBounce extends SmashPerk implements IThrown
|
|||||||
_energyBacon = getPerkFloat("Energy Per Bacon");
|
_energyBacon = getPerkFloat("Energy Per Bacon");
|
||||||
_energyBaconDisgtuiseFactor = getPerkFloat("Energy Per Bacon Disguise Factor");
|
_energyBaconDisgtuiseFactor = getPerkFloat("Energy Per Bacon Disguise Factor");
|
||||||
_energyBaconBack = getPerkFloat("Energy Per Bacon Back");
|
_energyBaconBack = getPerkFloat("Energy Per Bacon Back");
|
||||||
|
_hitBox = getPerkFloat("Hit Box");
|
||||||
_cooldown = getPerkInt("Cooldown (ms)");
|
_cooldown = getPerkInt("Cooldown (ms)");
|
||||||
_healthBacon = getPerkInt("Health Per Bacon");
|
_healthBacon = getPerkInt("Health Per Bacon");
|
||||||
_damageBacon = getPerkInt("Bacon Damage");
|
_damageBacon = getPerkInt("Bacon Damage");
|
||||||
@ -121,7 +123,7 @@ public class PerkPigBaconBounce extends SmashPerk implements IThrown
|
|||||||
// Launch
|
// Launch
|
||||||
Item ent = player.getWorld().dropItem(player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.PORK, (byte) 0, 1, "Bacon" + System.currentTimeMillis()));
|
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);
|
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);
|
ent.setPickupDelay(9999);
|
||||||
|
|
||||||
// Sound
|
// Sound
|
||||||
@ -141,6 +143,11 @@ public class PerkPigBaconBounce extends SmashPerk implements IThrown
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (target instanceof Player && isTeamDamage((Player) target, (Player) data.getThrower()))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Damage Event
|
// Damage Event
|
||||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.CUSTOM, _damageBacon, true, true, false, UtilEnt.getName(data.getThrower()), GetName());
|
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.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import nautilus.game.arcade.game.GameTeam;
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
||||||
|
|
||||||
public class SmashPig extends SmashUltimate
|
public class SmashPig extends SmashUltimate
|
||||||
@ -10,7 +11,7 @@ public class SmashPig extends SmashUltimate
|
|||||||
|
|
||||||
public SmashPig()
|
public SmashPig()
|
||||||
{
|
{
|
||||||
super("Pig Stink", new String[] {}, Sound.PIG_IDLE, 0);
|
super("Pig Stink", new String[]{}, Sound.PIG_IDLE, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -18,13 +19,16 @@ public class SmashPig extends SmashUltimate
|
|||||||
{
|
{
|
||||||
super.activate(player);
|
super.activate(player);
|
||||||
|
|
||||||
|
GameTeam team = Manager.GetGame().GetTeam(player);
|
||||||
|
|
||||||
for (Player other : Manager.GetGame().GetPlayers(true))
|
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);
|
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
|
// Velocity
|
||||||
Vector dir = player.getLocation().getDirection();
|
Vector dir = player.getLocation().getDirection();
|
||||||
double limit = isSuperActive(player) ? _yLimit + 0.1 : _yLimit;
|
double limit = isSuperActive(player) ? _yLimit + 0.1 : _yLimit;
|
||||||
|
|
||||||
if (dir.getY() > limit)
|
|
||||||
{
|
|
||||||
dir.setY(limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Player
|
// Player
|
||||||
if (!player.isSneaking())
|
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
|
// Bones
|
||||||
for (int i = 0; i < 6; i++)
|
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));
|
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);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
target = (Player) target;
|
|
||||||
Player damager = (Player) data.getThrower();
|
Player damager = (Player) data.getThrower();
|
||||||
String reason = GetName();
|
String reason = GetName();
|
||||||
|
|
||||||
if (target instanceof Player && damager instanceof Player)
|
if (damager instanceof Player)
|
||||||
{
|
{
|
||||||
if (isTeamDamage((Player) target, damager))
|
if (isTeamDamage((Player) target, damager))
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,7 @@ public class PerkDeadlyBones extends SmashPerk
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void damageActivate(CustomDamageEvent event)
|
public void damageActivate(CustomDamageEvent event)
|
||||||
{
|
{
|
||||||
if (event.IsCancelled())
|
if (event.IsCancelled() || event.GetCause() == DamageCause.STARVATION)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -106,6 +106,8 @@ public class PerkDeadlyBones extends SmashPerk
|
|||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
|
item.remove();
|
||||||
|
_active.remove(item);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,11 +43,11 @@ import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
|||||||
public class PerkSlimeRocket extends SmashPerk implements IThrown
|
public class PerkSlimeRocket extends SmashPerk implements IThrown
|
||||||
{
|
{
|
||||||
|
|
||||||
private int _cooldown = 6000;
|
private int _cooldown;
|
||||||
private float _energyTick = 0.004F;
|
private float _energyTick;
|
||||||
private int _knockbackMagnitude = 3;
|
private int _knockbackMagnitude;
|
||||||
private int _maxEnergyTime = 3000;
|
private int _maxEnergyTime;
|
||||||
private int _maxHoldTime = 5000;
|
private int _maxHoldTime;
|
||||||
|
|
||||||
private Map<UUID, Long> _charge = new HashMap<>();
|
private Map<UUID, Long> _charge = new HashMap<>();
|
||||||
private Map<Slime, UUID> _owner = new HashMap<>();
|
private Map<Slime, UUID> _owner = new HashMap<>();
|
||||||
@ -55,7 +55,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
|||||||
|
|
||||||
public PerkSlimeRocket()
|
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
|
@Override
|
||||||
@ -199,7 +199,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
|||||||
// Use Energy
|
// Use Energy
|
||||||
if (!UtilTime.elapsed(time, _maxEnergyTime))
|
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
|
// AutoFire
|
||||||
@ -257,26 +257,21 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void SlimeTarget(EntityTargetEvent event)
|
public void SlimeTarget(EntityTargetEvent event)
|
||||||
{
|
{
|
||||||
if (event.isCancelled())
|
UUID uuid = _owner.get(event.getEntity());
|
||||||
|
|
||||||
|
if (uuid == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_owner.containsKey(event.getEntity()))
|
Player owner = UtilPlayer.searchExact(uuid);
|
||||||
|
|
||||||
|
if (owner == null || event.getTarget() == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getTarget() instanceof Player)
|
if (event.getTarget() instanceof Player && isTeamDamage((Player) event.getTarget(), owner) || event.getTarget().equals(owner))
|
||||||
{
|
|
||||||
if (isTeamDamage((Player) event.getTarget(), UtilPlayer.searchExact(_owner.get(event.getEntity()))))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_owner.get(event.getEntity()).equals(event.getTarget()))
|
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -285,12 +280,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
|||||||
@Override
|
@Override
|
||||||
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
public void Collide(LivingEntity target, Block block, ProjectileUser data)
|
||||||
{
|
{
|
||||||
if (target == null)
|
if (target == null || !(data.getThrown() instanceof Slime))
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(data.getThrown() instanceof Slime))
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -302,13 +292,14 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
|||||||
Player targetPlayer = (Player) target;
|
Player targetPlayer = (Player) target;
|
||||||
Player throwerPlayer = (Player) data.getThrower();
|
Player throwerPlayer = (Player) data.getThrower();
|
||||||
|
|
||||||
if (isTeamDamage(targetPlayer, throwerPlayer))
|
if (isTeamDamage(targetPlayer, throwerPlayer) || !Recharge.Instance.use(targetPlayer, GetName() + slime.getUniqueId(), 2000, false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Damage Event
|
// 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());
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.AddKnockback(GetName(), _knockbackMagnitude);
|
event.AddKnockback(GetName(), _knockbackMagnitude * (event.GetDamageInitial() / 3));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -375,7 +366,7 @@ public class PerkSlimeRocket extends SmashPerk implements IThrown
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (owner != null && owner.equals(event.GetDamageeEntity()))
|
if (owner.equals(event.GetDamageeEntity()))
|
||||||
{
|
{
|
||||||
event.SetCancelled("Owner Damage");
|
event.SetCancelled("Owner Damage");
|
||||||
}
|
}
|
||||||
|
@ -94,9 +94,9 @@ public class PerkBlizzard extends Perk
|
|||||||
for (int i = 0; i < SNOWBALL_PER_USE; i++)
|
for (int i = 0; i < SNOWBALL_PER_USE; i++)
|
||||||
{
|
{
|
||||||
Snowball snow = player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), Snowball.class);
|
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 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.setShooter(player);
|
||||||
snow.setVelocity(player.getLocation().getDirection().add(new Vector(x, y, z)).multiply(2));
|
snow.setVelocity(player.getLocation().getDirection().add(new Vector(x, y, z)).multiply(2));
|
||||||
_snowball.put(snow, player);
|
_snowball.put(snow, player);
|
||||||
|
@ -68,10 +68,8 @@ public class SmashSnowman extends SmashUltimate
|
|||||||
@Override
|
@Override
|
||||||
public void activate(Player player)
|
public void activate(Player player)
|
||||||
{
|
{
|
||||||
// super.activate(player);
|
|
||||||
|
|
||||||
player.sendMessage(F.main("Game", "Activated " + F.skill(GetName()) + "."));
|
player.sendMessage(F.main("Game", "Activated " + F.skill(GetName()) + "."));
|
||||||
|
UtilPlayer.health(player, 3.5);
|
||||||
|
|
||||||
Game game = Manager.GetGame();
|
Game game = Manager.GetGame();
|
||||||
|
|
||||||
@ -95,28 +93,11 @@ public class SmashSnowman extends SmashUltimate
|
|||||||
@Override
|
@Override
|
||||||
public void cancel(Player player)
|
public void cancel(Player player)
|
||||||
{
|
{
|
||||||
// super.cancel(player);
|
if (Kit.HasKit(player))
|
||||||
|
{
|
||||||
player.sendMessage(F.main("Game", "Deactivated " + F.skill(GetName()) + "."));
|
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
|
@EventHandler
|
||||||
public void updateSnowman(UpdateEvent event)
|
public void updateSnowman(UpdateEvent event)
|
||||||
|
@ -62,15 +62,11 @@ public class PerkSpiderLeap extends Perk
|
|||||||
|
|
||||||
if (!player.isSneaking())
|
if (!player.isSneaking())
|
||||||
{
|
{
|
||||||
boolean grounded = UtilEnt.isGrounded(player);
|
if (UtilEnt.onBlock(player))
|
||||||
|
|
||||||
if (grounded)
|
|
||||||
{
|
{
|
||||||
|
player.setExp(Math.min(0.999F, player.getExp() + _energyTick));
|
||||||
_secondJump.remove(player.getUniqueId());
|
_secondJump.remove(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
player.setExp(Math.min(0.999F, player.getExp() + (grounded ? _energyTick * 2 : _energyTick)));
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,7 +158,7 @@ public class PerkSpiderLeap extends Perk
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UtilEnt.isGrounded(player))
|
if (UtilEnt.onBlock(player))
|
||||||
{
|
{
|
||||||
player.setAllowFlight(true);
|
player.setAllowFlight(true);
|
||||||
}
|
}
|
||||||
|
@ -147,11 +147,14 @@ public class PerkFishFlurry extends SmashPerk implements IThrown
|
|||||||
{
|
{
|
||||||
DataSquidGeyser data = activeIter.next();
|
DataSquidGeyser data = activeIter.next();
|
||||||
|
|
||||||
|
if (event.getTick() % 3 == 0)
|
||||||
|
{
|
||||||
// particles
|
// particles
|
||||||
for (Block block : data.Blocks)
|
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);
|
UtilParticle.PlayParticleToAll(ParticleType.SPLASH, block.getLocation().add(0.5, 1, 0.5), 0.25f, 0, 0.25f, 0, 1, ViewDist.LONG);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// sound
|
// sound
|
||||||
Block block = UtilAlg.Random(data.Blocks);
|
Block block = UtilAlg.Random(data.Blocks);
|
||||||
|
@ -5,8 +5,10 @@ import java.util.Map;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
@ -135,7 +137,10 @@ public class PerkSuperSquid extends SmashPerk
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void DamageCancel(CustomDamageEvent event)
|
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());
|
event.SetCancelled(GetName());
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import org.bukkit.Bukkit;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
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.Game;
|
||||||
import nautilus.game.arcade.game.games.smash.kits.KitSkySquid;
|
import nautilus.game.arcade.game.games.smash.kits.KitSkySquid;
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashUltimate;
|
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
|
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.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());
|
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()
|
Map<Entity, LobbyEnt> kitNPCs = Manager.GetLobby().getKits();
|
||||||
{
|
|
||||||
@Override
|
Manager.runSyncLater(() ->
|
||||||
public void run()
|
|
||||||
{
|
{
|
||||||
// Warning
|
// Warning
|
||||||
player.getWorld().spigot().strikeLightningEffect(loc, false);
|
player.getWorld().spigot().strikeLightningEffect(loc, false);
|
||||||
@ -139,7 +141,7 @@ public class SmashSquid extends SmashUltimate
|
|||||||
|
|
||||||
for (LivingEntity cur : targets.keySet())
|
for (LivingEntity cur : targets.keySet())
|
||||||
{
|
{
|
||||||
if (cur.equals(player))
|
if (cur.equals(player) || kitNPCs.containsKey(cur))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -150,7 +152,6 @@ public class SmashSquid extends SmashUltimate
|
|||||||
// Velocity
|
// Velocity
|
||||||
UtilAction.velocity(cur, UtilAlg.getTrajectory(loc, cur.getLocation()), 3 * targets.get(cur), false, 0, 1 * targets.get(cur), 2, true);
|
UtilAction.velocity(cur, UtilAlg.getTrajectory(loc, cur.getLocation()), 3 * targets.get(cur), false, 0, 1 * targets.get(cur), 2, true);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}, 10);
|
}, 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.EventHandler;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
@ -57,7 +59,7 @@ public class PerkWitchPotion extends SmashPerk implements IThrown
|
|||||||
public void setupValues()
|
public void setupValues()
|
||||||
{
|
{
|
||||||
_cooldown = getPerkTime("Cooldown");
|
_cooldown = getPerkTime("Cooldown");
|
||||||
_range = getPerkInt( "Range");
|
_range = getPerkInt("Range");
|
||||||
_damageDirect = getPerkInt("Damage Direct");
|
_damageDirect = getPerkInt("Damage Direct");
|
||||||
_damageDistance = getPerkInt("Damage Distance");
|
_damageDistance = getPerkInt("Damage Distance");
|
||||||
_knockbackMagnitude = getPerkInt("Knockback Magnitude");
|
_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();
|
Vector b = data.getThrown().getLocation().add(_range, _range, _range).toVector();
|
||||||
for (Player player : players)
|
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.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);
|
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.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
@ -17,6 +16,9 @@ import org.bukkit.event.EventPriority;
|
|||||||
import org.bukkit.event.entity.EntityTargetEvent;
|
import org.bukkit.event.entity.EntityTargetEvent;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
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.C;
|
||||||
import mineplex.core.common.util.F;
|
import mineplex.core.common.util.F;
|
||||||
@ -30,10 +32,10 @@ import mineplex.core.recharge.Recharge;
|
|||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.core.utils.UtilVariant;
|
import mineplex.core.utils.UtilVariant;
|
||||||
|
import mineplex.core.velocity.VelocityFix;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
public class PerkWitherImage extends SmashPerk
|
public class PerkWitherImage extends SmashPerk
|
||||||
{
|
{
|
||||||
@ -103,7 +105,7 @@ public class PerkWitherImage extends SmashPerk
|
|||||||
// Spawn
|
// Spawn
|
||||||
Manager.GetGame().CreatureAllowOverride = true;
|
Manager.GetGame().CreatureAllowOverride = true;
|
||||||
|
|
||||||
Skeleton skel = UtilVariant.spawnWitherSkeleton(player.getEyeLocation().add(player.getLocation().getDirection()));
|
Skeleton skel = UtilVariant.spawnWitherSkeleton(player.getEyeLocation());
|
||||||
|
|
||||||
Manager.GetGame().CreatureAllowOverride = false;
|
Manager.GetGame().CreatureAllowOverride = false;
|
||||||
|
|
||||||
@ -131,6 +133,7 @@ public class PerkWitherImage extends SmashPerk
|
|||||||
skel.setCustomName(C.cYellow + player.getName());
|
skel.setCustomName(C.cYellow + player.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
skel.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 1, false, false));
|
||||||
skel.setCustomNameVisible(true);
|
skel.setCustomNameVisible(true);
|
||||||
|
|
||||||
UtilAction.velocity(skel, player.getLocation().getDirection(), 1.6, false, 0, 0.2, 10, 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());
|
skel.teleport(player.getLocation());
|
||||||
UtilAction.velocity(skel, oldPlayerVector);
|
UtilAction.velocity(skel, oldPlayerVector);
|
||||||
player.teleport(loc);
|
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
|
// Sound
|
||||||
player.getWorld().playSound(player.getLocation(), Sound.WITHER_SPAWN, 1f, 2f);
|
player.getWorld().playSound(player.getLocation(), Sound.WITHER_SPAWN, 1f, 2f);
|
||||||
@ -173,22 +177,23 @@ public class PerkWitherImage extends SmashPerk
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void entityTarget(EntityTargetEvent event)
|
public void entityTarget(EntityTargetEvent event)
|
||||||
{
|
{
|
||||||
if (_skeletons.containsValue(event.getEntity()))
|
if (!(event.getEntity() instanceof Skeleton))
|
||||||
{
|
{
|
||||||
if (event.getTarget() instanceof Player)
|
return;
|
||||||
{
|
|
||||||
if (isTeamDamage((Player) event.getTarget(), getOwner((Skeleton) event.getEntity())))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void damage(CustomDamageEvent event)
|
public void damage(CustomDamageEvent event)
|
||||||
|
@ -1,22 +1,19 @@
|
|||||||
package nautilus.game.arcade.game.games.smash.perks.witherskeleton;
|
package nautilus.game.arcade.game.games.smash.perks.witherskeleton;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.entity.ArmorStand;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.WitherSkull;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import mineplex.core.common.util.C;
|
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.ParticleType;
|
||||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||||
import mineplex.core.common.util.UtilPlayer;
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
import mineplex.core.common.util.UtilServer;
|
|
||||||
import mineplex.core.recharge.Recharge;
|
import mineplex.core.recharge.Recharge;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
import nautilus.game.arcade.game.games.smash.perks.SmashPerk;
|
||||||
|
|
||||||
public class PerkWitherSkull extends 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 _cooldownNormal;
|
||||||
private int _cooldownSmash;
|
private int _cooldownSmash;
|
||||||
private int _damage;
|
private int _damage;
|
||||||
private float _knockbackMagnitude;
|
private float _skullVelocity, _knockbackMagnitude;
|
||||||
|
|
||||||
private Map<WitherSkull, Vector> _active = new HashMap<>();
|
private final Set<SkullData> _active = new HashSet<>();
|
||||||
private Set<UUID> _ignoreControl = new HashSet<>();
|
|
||||||
|
|
||||||
public PerkWitherSkull()
|
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
|
@Override
|
||||||
@ -59,6 +57,7 @@ public class PerkWitherSkull extends SmashPerk
|
|||||||
_cooldownNormal = getPerkTime("Cooldown Normal");
|
_cooldownNormal = getPerkTime("Cooldown Normal");
|
||||||
_cooldownSmash = getPerkTime("Cooldown Smash");
|
_cooldownSmash = getPerkTime("Cooldown Smash");
|
||||||
_damage = getPerkInt("Damage");
|
_damage = getPerkInt("Damage");
|
||||||
|
_skullVelocity = getPerkFloat("Skull Velocity");
|
||||||
_knockbackMagnitude = getPerkFloat("Knockback Magnitude");
|
_knockbackMagnitude = getPerkFloat("Knockback Magnitude");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,12 +65,7 @@ public class PerkWitherSkull extends SmashPerk
|
|||||||
// triggered
|
// triggered
|
||||||
public void activate(PlayerInteractEvent event)
|
public void activate(PlayerInteractEvent event)
|
||||||
{
|
{
|
||||||
if (event.isCancelled())
|
if (event.isCancelled() || UtilBlock.usable(event.getClickedBlock()))
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (UtilBlock.usable(event.getClickedBlock()))
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -79,40 +73,25 @@ public class PerkWitherSkull extends SmashPerk
|
|||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
boolean smash = isSuperActive(player);
|
boolean smash = isSuperActive(player);
|
||||||
|
|
||||||
if (!smash)
|
if (!smash && (!UtilItem.isSword(player.getItemInHand()) || !UtilEvent.isAction(event, ActionType.R)))
|
||||||
{
|
|
||||||
if (!UtilItem.isSword(player.getItemInHand()))
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!UtilEvent.isAction(event, ActionType.R))
|
if (!hasPerk(player) || !Recharge.Instance.use(player, GetName(), smash ? _cooldownSmash : _cooldownNormal, !smash, !smash))
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasPerk(player))
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Recharge.Instance.use(player, GetName(), smash ? _cooldownSmash : _cooldownNormal, !smash, !smash))
|
Manager.GetGame().CreatureAllowOverride = true;
|
||||||
{
|
Location location = player.getLocation();
|
||||||
return;
|
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);
|
player.getWorld().playSound(player.getLocation(), Sound.WITHER_SHOOT, 1f, 1f);
|
||||||
|
|
||||||
// Inform
|
// Inform
|
||||||
@ -120,19 +99,9 @@ public class PerkWitherSkull extends SmashPerk
|
|||||||
{
|
{
|
||||||
UtilPlayer.message(player, F.main("Skill", "You launched " + F.skill(GetName()) + "."));
|
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)
|
public void cleanAndControl(UpdateEvent event)
|
||||||
{
|
{
|
||||||
if (event.getType() != UpdateType.TICK)
|
if (event.getType() != UpdateType.TICK)
|
||||||
@ -140,94 +109,94 @@ public class PerkWitherSkull extends SmashPerk
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Iterator<WitherSkull> skullIterator = _active.keySet().iterator();
|
_active.removeIf(skullData ->
|
||||||
|
|
||||||
while (skullIterator.hasNext())
|
|
||||||
{
|
{
|
||||||
WitherSkull skull = skullIterator.next();
|
Player shooter = skullData.Shooter;
|
||||||
Player player = (Player) skull.getShooter();
|
ArmorStand skullHolder = skullData.SkullHolder;
|
||||||
|
|
||||||
if (!skull.isValid())
|
if (!skullHolder.isValid())
|
||||||
{
|
{
|
||||||
skullIterator.remove();
|
return true;
|
||||||
skull.remove();
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.isBlocking() && !_ignoreControl.contains(player.getUniqueId()))
|
hitEntity = true;
|
||||||
{
|
break;
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
if (hitEntity || hitBlock)
|
||||||
public void explode(EntityExplodeEvent event)
|
|
||||||
{
|
{
|
||||||
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;
|
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();
|
location.getWorld().playSound(location, Sound.EXPLODE, 2.5F, 0.4F);
|
||||||
|
UtilParticle.PlayParticleToAll(ParticleType.HUGE_EXPLOSION, location, null, 0, 1, ViewDist.LONG);
|
||||||
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, skull.getLocation(), 0, 0, 0, 0, 1, ViewDist.MAX, UtilServer.getPlayers());
|
skullHolder.remove();
|
||||||
|
|
||||||
explode(skull, event.getLocation(), (LivingEntity) skull.getShooter());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
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
|
|
||||||
public void knockback(CustomDamageEvent event)
|
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()))
|
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -235,4 +204,21 @@ public class PerkWitherSkull extends SmashPerk
|
|||||||
|
|
||||||
event.AddKnockback(GetName(), _knockbackMagnitude);
|
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;
|
package nautilus.game.arcade.game.games.smash.perks.wolf;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -63,8 +64,8 @@ public class PerkWolf extends SmashPerk
|
|||||||
|
|
||||||
public PerkWolf()
|
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
|
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.", });
|
+ "Right-Click" + C.cGray + " with Spade to use " + C.cGreen + WOLF_STRIKE, C.cGray + "Wolf Strike deals 300% Knockback to tackled opponents.",});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -253,7 +254,7 @@ public class PerkWolf extends SmashPerk
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player tackleGetOwner(Wolf wolf)
|
private Player tackleGetOwner(Wolf wolf)
|
||||||
{
|
{
|
||||||
if (_owner.containsKey(wolf))
|
if (_owner.containsKey(wolf))
|
||||||
{
|
{
|
||||||
@ -475,8 +476,7 @@ public class PerkWolf extends SmashPerk
|
|||||||
|
|
||||||
if (!_repeat.containsKey(damager.getUniqueId()))
|
if (!_repeat.containsKey(damager.getUniqueId()))
|
||||||
{
|
{
|
||||||
_repeat.put(damager.getUniqueId(), new ArrayList<Long>());
|
_repeat.put(damager.getUniqueId(), new ArrayList<>(Collections.singletonList(System.currentTimeMillis())));
|
||||||
_repeat.get(damager.getUniqueId()).add(System.currentTimeMillis());
|
|
||||||
|
|
||||||
// Exp
|
// Exp
|
||||||
damager.setExp(Math.min(0.99F, _repeat.get(damager.getUniqueId()).size() / 9f));
|
damager.setExp(Math.min(0.99F, _repeat.get(damager.getUniqueId()).size() / 9f));
|
||||||
@ -526,7 +526,7 @@ public class PerkWolf extends SmashPerk
|
|||||||
// Exp
|
// Exp
|
||||||
player.setExp(Math.min(0.999f, _repeat.get(uuid).size() / 9f));
|
player.setExp(Math.min(0.999f, _repeat.get(uuid).size() / 9f));
|
||||||
|
|
||||||
if(_repeat.get(uuid).isEmpty())
|
if (_repeat.get(uuid).isEmpty())
|
||||||
{
|
{
|
||||||
playerIterator.remove();
|
playerIterator.remove();
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ public class SmashZombie extends SmashUltimate
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void timeUpdate(UpdateEvent event)
|
public void timeUpdate(UpdateEvent event)
|
||||||
{
|
{
|
||||||
if (event.getType() != UpdateType.TICK)
|
if (event.getType() != UpdateType.TICK || !Manager.GetGame().IsLive())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.wizards.spells;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import mineplex.core.common.util.UtilAction;
|
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 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();
|
Iterator<Entry<Player, Double>> itel = effected.entrySet().iterator();
|
||||||
|
|
||||||
|
@ -1,18 +1,11 @@
|
|||||||
package nautilus.game.arcade.game.modules;
|
package nautilus.game.arcade.game.modules;
|
||||||
|
|
||||||
import mineplex.core.common.events.EntityVelocityChangeEvent;
|
import java.util.HashSet;
|
||||||
import mineplex.core.common.util.*;
|
import java.util.List;
|
||||||
import mineplex.core.itemstack.ItemBuilder;
|
import java.util.Set;
|
||||||
import mineplex.core.recharge.Recharge;
|
import java.util.function.Function;
|
||||||
import mineplex.core.updater.UpdateType;
|
import java.util.function.Predicate;
|
||||||
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 org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
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.event.player.PlayerLoginEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.*;
|
import mineplex.core.common.events.EntityVelocityChangeEvent;
|
||||||
import java.util.function.Function;
|
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
|
public class TrainingGameModule extends Module
|
||||||
{
|
{
|
||||||
@ -43,8 +52,9 @@ public class TrainingGameModule extends Module
|
|||||||
|
|
||||||
private final Set<LobbyEnt> _kits;
|
private final Set<LobbyEnt> _kits;
|
||||||
private Function<Player, GameTeam> _teamFunction;
|
private Function<Player, GameTeam> _teamFunction;
|
||||||
private Function<Player, Boolean> _skillFunction;
|
private Predicate<Player> _skillFunction;
|
||||||
private Function<Player, Boolean> _damageFunction;
|
private Predicate<Player> _damageFunction;
|
||||||
|
private Predicate<Player> _kitSelectFunction;
|
||||||
private boolean _giveReturnToSpawn = true;
|
private boolean _giveReturnToSpawn = true;
|
||||||
|
|
||||||
public TrainingGameModule()
|
public TrainingGameModule()
|
||||||
@ -122,7 +132,7 @@ public class TrainingGameModule extends Module
|
|||||||
Entity entity = event.getRightClicked();
|
Entity entity = event.getRightClicked();
|
||||||
LobbyEnt lobbyEnt = getFromEntity(entity);
|
LobbyEnt lobbyEnt = getFromEntity(entity);
|
||||||
|
|
||||||
if (UtilPlayer.isSpectator(player))
|
if (UtilPlayer.isSpectator(player) || (_kitSelectFunction != null && !_kitSelectFunction.test(player)))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -220,7 +230,7 @@ public class TrainingGameModule extends Module
|
|||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (!_skillFunction.apply(player))
|
if (!_skillFunction.test(player))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -236,7 +246,7 @@ public class TrainingGameModule extends Module
|
|||||||
|
|
||||||
Player player = (Player) event.getEntity();
|
Player player = (Player) event.getEntity();
|
||||||
|
|
||||||
if (!_skillFunction.apply(player))
|
if (!_skillFunction.test(player))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -262,12 +272,7 @@ public class TrainingGameModule extends Module
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_damageFunction == null)
|
if (_damageFunction != null && !_damageFunction.test(player))
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_damageFunction.apply(player))
|
|
||||||
{
|
{
|
||||||
event.SetCancelled("Training Area");
|
event.SetCancelled("Training Area");
|
||||||
}
|
}
|
||||||
@ -285,7 +290,7 @@ public class TrainingGameModule extends Module
|
|||||||
|
|
||||||
Player player = (Player) entity;
|
Player player = (Player) entity;
|
||||||
|
|
||||||
if (!_damageFunction.apply(player))
|
if (!_damageFunction.test(player))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
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)
|
public TrainingGameModule setTeamFunction(Function<Player, GameTeam> function)
|
||||||
{
|
{
|
||||||
_teamFunction = function;
|
_teamFunction = function;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TrainingGameModule setSkillFunction(Function<Player, Boolean> function)
|
public TrainingGameModule setSkillFunction(Predicate<Player> function)
|
||||||
{
|
{
|
||||||
_skillFunction = function;
|
_skillFunction = function;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TrainingGameModule setDamageFunction(Function<Player, Boolean> function)
|
public TrainingGameModule setDamageFunction(Predicate<Player> function)
|
||||||
{
|
{
|
||||||
_damageFunction = function;
|
_damageFunction = function;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TrainingGameModule setKitSelectFunction(Predicate<Player> function)
|
||||||
|
{
|
||||||
|
_kitSelectFunction = function;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public TrainingGameModule setGiveReturnToSpawn(boolean b)
|
public TrainingGameModule setGiveReturnToSpawn(boolean b)
|
||||||
{
|
{
|
||||||
_giveReturnToSpawn = b;
|
_giveReturnToSpawn = b;
|
||||||
|
@ -10,6 +10,7 @@ import java.util.stream.Stream;
|
|||||||
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -90,6 +91,7 @@ public class CompassModule extends Module
|
|||||||
HandlerList.unregisterAll(_compassMenu);
|
HandlerList.unregisterAll(_compassMenu);
|
||||||
_compassMenu = null;
|
_compassMenu = null;
|
||||||
_suppliers = null;
|
_suppliers = null;
|
||||||
|
UtilServer.getPlayersCollection().forEach(player -> ((CraftPlayer) player).getHandle().compassTarget = null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
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 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 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;
|
_fileName = fileName;
|
||||||
|
|
||||||
_dataMap = new HashMap<>();
|
_dataMap = new HashMap<>();
|
||||||
|
|
||||||
UtilServer.RegisterEvents(this);
|
|
||||||
|
|
||||||
setup();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@Override
|
||||||
public void cleanup(GameStateChangeEvent event)
|
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
|
// File Name must not be null
|
||||||
Objects.requireNonNull(_fileName);
|
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);
|
Map<String, List<List<String>>> map = manager.getSheetData(_fileName);
|
||||||
|
|
||||||
for (Map.Entry<String, List<List<String>>> entry : map.entrySet())
|
for (Map.Entry<String, List<List<String>>> entry : map.entrySet())
|
||||||
@ -71,7 +71,6 @@ public class PerkSpreadsheetModule implements Listener
|
|||||||
|
|
||||||
if (kit == null)
|
if (kit == null)
|
||||||
{
|
{
|
||||||
manager.log("No kit found for the name " + key);
|
|
||||||
continue;
|
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())
|
for (Perk perk : kit.GetPerks())
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
perk.setSpreadsheet(this);
|
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)
|
private Kit getFromName(String name)
|
||||||
{
|
{
|
||||||
for (Kit kit : _game.GetKits())
|
for (Kit kit : getGame().GetKits())
|
||||||
{
|
{
|
||||||
if (kit.GetName().equalsIgnoreCase(name))
|
if (kit.GetName().equalsIgnoreCase(name))
|
||||||
{
|
{
|
||||||
@ -144,7 +159,19 @@ public class PerkSpreadsheetModule implements Listener
|
|||||||
return kit.GetName() + "." + perk.GetName() + "." + value;
|
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;
|
return _dataMap;
|
||||||
}
|
}
|
@ -1,10 +1,11 @@
|
|||||||
package nautilus.game.arcade.kit;
|
package nautilus.game.arcade.kit;
|
||||||
|
|
||||||
import nautilus.game.arcade.ArcadeManager;
|
|
||||||
import nautilus.game.arcade.managers.PerkSpreadsheetModule;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Listener;
|
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 abstract class Perk implements Listener
|
||||||
{
|
{
|
||||||
public ArcadeManager Manager;
|
public ArcadeManager Manager;
|
||||||
@ -116,13 +117,7 @@ public abstract class Perk implements Listener
|
|||||||
private String getPerkObject(String id)
|
private String getPerkObject(String id)
|
||||||
{
|
{
|
||||||
String key = _spreadsheet.getKey(Kit, this, id);
|
String key = _spreadsheet.getKey(Kit, this, id);
|
||||||
|
return _spreadsheet.getValue(key);
|
||||||
if (!_spreadsheet.getDataMap().containsKey(key))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _spreadsheet.getDataMap().get(key);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean getPerkBoolean(String id)
|
protected boolean getPerkBoolean(String id)
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package nautilus.game.arcade.kit.perks;
|
package nautilus.game.arcade.kit.perks;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
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.C;
|
||||||
import mineplex.core.common.util.UtilAction;
|
import mineplex.core.common.util.UtilAction;
|
||||||
import mineplex.core.common.util.UtilBlock;
|
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.UtilServer;
|
||||||
import mineplex.core.common.util.UtilTime;
|
import mineplex.core.common.util.UtilTime;
|
||||||
import mineplex.core.common.util.UtilTime.TimeUnit;
|
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.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
|
||||||
|
import nautilus.game.arcade.events.PerkDoubleJumpEvent;
|
||||||
import nautilus.game.arcade.kit.Perk;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
|
|
||||||
public class PerkDoubleJump extends Perk
|
public class PerkDoubleJump extends Perk
|
||||||
{
|
{
|
||||||
|
|
||||||
private double _power;
|
private double _power;
|
||||||
private double _heightMax;
|
private double _heightMax;
|
||||||
private boolean _control;
|
private boolean _control;
|
||||||
private long _recharge;
|
private long _recharge;
|
||||||
private boolean _displayForce;
|
private boolean _displayForce;
|
||||||
|
|
||||||
private HashSet<Player> _disabled = new HashSet<Player>();
|
private final Set<Player> _disabled = new HashSet<>();
|
||||||
|
|
||||||
public PerkDoubleJump(String name)
|
public PerkDoubleJump(String name)
|
||||||
{
|
{
|
||||||
@ -89,14 +95,10 @@ public class PerkDoubleJump extends Perk
|
|||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (!hasPerk(player))
|
if (!hasPerk(player) || _disabled.contains(player) || Manager.isSpectator(player) || player.getGameMode() == GameMode.CREATIVE)
|
||||||
return;
|
{
|
||||||
|
|
||||||
if (Manager.isSpectator(player))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (player.getGameMode() == GameMode.CREATIVE)
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
player.setFlying(false);
|
player.setFlying(false);
|
||||||
@ -104,18 +106,26 @@ public class PerkDoubleJump extends Perk
|
|||||||
//Disable Flight
|
//Disable Flight
|
||||||
player.setAllowFlight(false);
|
player.setAllowFlight(false);
|
||||||
|
|
||||||
//Velocity
|
PerkDoubleJumpEvent doubleJumpEvent = new PerkDoubleJumpEvent(player, _power, _heightMax, _control);
|
||||||
if (_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
|
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
|
//Sound
|
||||||
player.playEffect(player.getLocation(), Effect.BLAZE_SHOOT, 0);
|
player.getWorld().playEffect(player.getLocation(), Effect.BLAZE_SHOOT, 0, 16);
|
||||||
|
|
||||||
//Recharge
|
//Recharge
|
||||||
if (_recharge > 0)
|
if (_recharge > 0)
|
||||||
@ -127,8 +137,10 @@ public class PerkDoubleJump extends Perk
|
|||||||
Recharge.Instance.setDisplayForce(player, GetName(), true);
|
Recharge.Instance.setDisplayForce(player, GetName(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
//Recharge.Instance.useForce(player, "Double Jump", 500);
|
{
|
||||||
|
Recharge.Instance.useForce(player, GetName(), 50);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -138,29 +150,29 @@ public class PerkDoubleJump extends Perk
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void FlightUpdate(UpdateEvent event)
|
public void update(UpdateEvent event)
|
||||||
{
|
{
|
||||||
if (event.getType() != UpdateType.TICK)
|
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;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!hasPerk(player))
|
// Block block = player.getLocation().getBlock();
|
||||||
continue;
|
|
||||||
|
|
||||||
if (_recharge > 0 && !Recharge.Instance.usable(player, GetName()))
|
if (UtilEnt.onBlock(player))
|
||||||
continue;
|
// if (player.isOnGround() || UtilBlock.solid(block.getRelative(BlockFace.DOWN)) && UtilBlock.solid(block))
|
||||||
|
{
|
||||||
// if (!Recharge.Instance.usable(player, "Double Jump"))
|
|
||||||
// continue;
|
|
||||||
|
|
||||||
if (player.isOnGround() || (UtilBlock.solid(player.getLocation().getBlock().getRelative(BlockFace.DOWN)) && UtilBlock.solid(player.getLocation().getBlock())))
|
|
||||||
player.setAllowFlight(true);
|
player.setAllowFlight(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void disableForPlayer(Player player)
|
public void disableForPlayer(Player player)
|
||||||
{
|
{
|
||||||
@ -171,4 +183,5 @@ public class PerkDoubleJump extends Perk
|
|||||||
{
|
{
|
||||||
_disabled.remove(player);
|
_disabled.remove(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ public class PerkLazer extends Perk
|
|||||||
private float _hitBoxRadius;
|
private float _hitBoxRadius;
|
||||||
private int _damageRadius;
|
private int _damageRadius;
|
||||||
private int _damage;
|
private int _damage;
|
||||||
private int _knockbackMagnitude;
|
private float _knockbackMagnitude;
|
||||||
private double _range;
|
private double _range;
|
||||||
|
|
||||||
private Set<UUID> _active = new HashSet<>();
|
private Set<UUID> _active = new HashSet<>();
|
||||||
@ -67,7 +67,7 @@ public class PerkLazer extends Perk
|
|||||||
_hitBoxRadius = getPerkFloat("Hit Box Radius");
|
_hitBoxRadius = getPerkFloat("Hit Box Radius");
|
||||||
_damageRadius = getPerkInt("Damage Radius");
|
_damageRadius = getPerkInt("Damage Radius");
|
||||||
_damage = getPerkInt("Damage");
|
_damage = getPerkInt("Damage");
|
||||||
_knockbackMagnitude = getPerkInt("Knockback Magnitude");
|
_knockbackMagnitude = getPerkFloat("Knockback Magnitude");
|
||||||
_range = getPerkInt("Range");
|
_range = getPerkInt("Range");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,6 +127,7 @@ public class PerkLazer extends Perk
|
|||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
playerIterator.remove();
|
playerIterator.remove();
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.isBlocking())
|
if (player.isBlocking())
|
||||||
@ -184,7 +185,7 @@ public class PerkLazer extends Perk
|
|||||||
|
|
||||||
particleLoop: while (!lineParticle.update())
|
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))
|
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.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
import mineplex.core.common.util.F;
|
import mineplex.core.common.util.F;
|
||||||
@ -279,7 +281,7 @@ public class PerkWoolBomb extends Perk implements IThrown
|
|||||||
// Inform
|
// Inform
|
||||||
if (cur instanceof Player && !player.equals(cur))
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<Player> detonate = new HashSet<Player>();
|
Set<Player> detonate = new HashSet<>();
|
||||||
Iterator<UUID> playerIterator = _active.keySet().iterator();
|
Iterator<UUID> playerIterator = _active.keySet().iterator();
|
||||||
|
|
||||||
while (playerIterator.hasNext())
|
while (playerIterator.hasNext())
|
||||||
@ -416,4 +418,26 @@ public class PerkWoolBomb extends Perk implements IThrown
|
|||||||
|
|
||||||
event.AddKnockback(GetName(), _knockbackMagnitude);
|
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;
|
package nautilus.game.arcade.kit.perks.data;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.UtilEnt;
|
||||||
|
import mineplex.core.common.util.UtilMath;
|
||||||
|
|
||||||
public class ChickenMissileData
|
public class ChickenMissileData
|
||||||
{
|
{
|
||||||
public Player Player;
|
public Player Player;
|
||||||
@ -10,9 +15,7 @@ public class ChickenMissileData
|
|||||||
public Vector Direction;
|
public Vector Direction;
|
||||||
public long Time;
|
public long Time;
|
||||||
|
|
||||||
public double LastX;
|
public Location Last;
|
||||||
public double LastY;
|
|
||||||
public double LastZ;
|
|
||||||
|
|
||||||
public ChickenMissileData(Player player, Entity chicken)
|
public ChickenMissileData(Player player, Entity chicken)
|
||||||
{
|
{
|
||||||
@ -24,30 +27,15 @@ public class ChickenMissileData
|
|||||||
|
|
||||||
public boolean HasHitBlock()
|
public boolean HasHitBlock()
|
||||||
{
|
{
|
||||||
|
Location current = Chicken.getLocation();
|
||||||
|
|
||||||
//Not First Run
|
//Not First Run
|
||||||
if (LastX != 0 && LastY != 0 && LastZ != 0)
|
if (Last != null && UtilMath.offsetSquared(Last, current) < 0.2 || UtilEnt.isGrounded(Chicken))
|
||||||
{
|
|
||||||
if (Math.abs(Chicken.getLocation().getX() - LastX) < Math.abs(Direction.getX()/10d))
|
|
||||||
{
|
{
|
||||||
return true;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user