diff --git a/Art/BlackFriday.png b/Art/BlackFriday.png new file mode 100644 index 000000000..d63feef85 Binary files /dev/null and b/Art/BlackFriday.png differ diff --git a/Art/ChristmasChaos.png b/Art/ChristmasChaos.png new file mode 100644 index 000000000..92bf27cd3 Binary files /dev/null and b/Art/ChristmasChaos.png differ diff --git a/Art/ClansBanner.png b/Art/ClansBanner.png new file mode 100644 index 000000000..2de832c70 Binary files /dev/null and b/Art/ClansBanner.png differ diff --git a/Art/TitanLogo.png b/Art/TitanLogo.png new file mode 100644 index 000000000..55e0fb104 Binary files /dev/null and b/Art/TitanLogo.png differ diff --git a/Art/WinterTreasure.png b/Art/WinterTreasure.png new file mode 100644 index 000000000..6df116afc Binary files /dev/null and b/Art/WinterTreasure.png differ diff --git a/Art/WinterTreasureTrim.png b/Art/WinterTreasureTrim.png new file mode 100644 index 000000000..d40145a51 Binary files /dev/null and b/Art/WinterTreasureTrim.png differ diff --git a/Art/y5O7WYh.png b/Art/y5O7WYh.png new file mode 100644 index 000000000..774ca95a2 Binary files /dev/null and b/Art/y5O7WYh.png differ diff --git a/Art/zKzkfLE.png b/Art/zKzkfLE.png new file mode 100644 index 000000000..e349a664a Binary files /dev/null and b/Art/zKzkfLE.png differ diff --git a/Plugins/.idea/artifacts/Mineplex_Game_Clans_jar.xml b/Plugins/.idea/artifacts/Mineplex_Game_Clans_jar.xml index d44ba58ec..cc62eda71 100644 --- a/Plugins/.idea/artifacts/Mineplex_Game_Clans_jar.xml +++ b/Plugins/.idea/artifacts/Mineplex_Game_Clans_jar.xml @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml b/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml index 55d803b0b..8ac831c95 100644 --- a/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml +++ b/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml @@ -20,8 +20,8 @@ - + \ No newline at end of file diff --git a/Plugins/.idea/artifacts/Nautilus_Core_Craftbukkit_jar.xml b/Plugins/.idea/artifacts/Nautilus_Core_Craftbukkit_jar.xml deleted file mode 100644 index b855273ea..000000000 --- a/Plugins/.idea/artifacts/Nautilus_Core_Craftbukkit_jar.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - $PROJECT_DIR$/bin - - - - - - \ No newline at end of file diff --git a/Plugins/.idea/artifacts/Nautilus_Game_Arcade_jar.xml b/Plugins/.idea/artifacts/Nautilus_Game_Arcade_jar.xml index 619cdf3df..79c3170ce 100644 --- a/Plugins/.idea/artifacts/Nautilus_Game_Arcade_jar.xml +++ b/Plugins/.idea/artifacts/Nautilus_Game_Arcade_jar.xml @@ -19,7 +19,7 @@ - + \ No newline at end of file diff --git a/Plugins/.idea/compiler.xml b/Plugins/.idea/compiler.xml index df8666836..ec08cea77 100644 --- a/Plugins/.idea/compiler.xml +++ b/Plugins/.idea/compiler.xml @@ -23,7 +23,7 @@ - + diff --git a/Plugins/.idea/dataSources.xml b/Plugins/.idea/dataSources.xml index dea8a489b..3aa4d521d 100644 --- a/Plugins/.idea/dataSources.xml +++ b/Plugins/.idea/dataSources.xml @@ -1,6 +1,6 @@ - + mysql true diff --git a/Plugins/.idea/modules.xml b/Plugins/.idea/modules.xml index a8626a3f1..c3f549fab 100644 --- a/Plugins/.idea/modules.xml +++ b/Plugins/.idea/modules.xml @@ -5,19 +5,19 @@ + - - - - + + + + - - + diff --git a/Plugins/BuildFiles/common.xml b/Plugins/BuildFiles/common.xml index 7cbbd04a4..234d9f195 100644 --- a/Plugins/BuildFiles/common.xml +++ b/Plugins/BuildFiles/common.xml @@ -9,6 +9,7 @@ + @@ -110,6 +111,7 @@ + @@ -142,6 +144,7 @@ + @@ -191,6 +194,7 @@ + @@ -239,6 +243,7 @@ + @@ -276,6 +281,7 @@ + @@ -403,6 +409,7 @@ + @@ -435,6 +442,7 @@ + @@ -462,6 +470,7 @@ + @@ -490,6 +499,7 @@ + diff --git a/Plugins/Mineplex.Bungee.Mineplexer/Mineplex.Bungee.Mineplexer.iml b/Plugins/Mineplex.Bungee.Mineplexer/Mineplex.Bungee.Mineplexer.iml index 872b77ead..a1a0bd8bf 100644 --- a/Plugins/Mineplex.Bungee.Mineplexer/Mineplex.Bungee.Mineplexer.iml +++ b/Plugins/Mineplex.Bungee.Mineplexer/Mineplex.Bungee.Mineplexer.iml @@ -13,6 +13,6 @@ - + \ No newline at end of file diff --git a/Plugins/Mineplex.Cache/Mineplex.Cache.iml b/Plugins/Mineplex.Cache/Mineplex.Cache.iml new file mode 100644 index 000000000..54892e832 --- /dev/null +++ b/Plugins/Mineplex.Cache/Mineplex.Cache.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/CurrencyType.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/CurrencyType.java index 6a007fefa..e54f9f28f 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/CurrencyType.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/CurrencyType.java @@ -4,10 +4,10 @@ import org.bukkit.Material; public enum CurrencyType { - Tokens(" Tokens", Material.EMERALD), - Coins(" Coins", Material.DOUBLE_PLANT), - Gems(" Gems", Material.EMERALD), - Gold(" Gold", Material.GOLD_NUGGET); + Tokens("Tokens", Material.EMERALD), + Coins("Treasure Shards", Material.PRISMARINE_SHARD), + Gems("Gems", Material.EMERALD), + Gold("Gold", Material.GOLD_NUGGET); private String _prefix; private Material _displayMaterial; diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/skin/SkinData.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/skin/SkinData.java new file mode 100644 index 000000000..f53e986b2 --- /dev/null +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/skin/SkinData.java @@ -0,0 +1,97 @@ +package mineplex.core.common.skin; + +import java.util.List; + +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; + +import net.minecraft.server.v1_8_R3.Item; +import net.minecraft.server.v1_8_R3.MinecraftKey; +import net.minecraft.server.v1_8_R3.NBTTagCompound; +import net.minecraft.server.v1_8_R3.NBTTagList; +import net.minecraft.server.v1_8_R3.NBTTagString; + +public class SkinData +{ + + private static long _nameCount = -99999999999999L; + + public final static SkinData MOOSHROOM = new SkinData("eyJ0aW1lc3RhbXAiOjE0NDk4NzI0OTU0MTcsInByb2ZpbGVJZCI6ImE5ZDBjMDcyYmYxOTQwYTFhMTkzNjhkMDlkNTAwMjZlIiwicHJvZmlsZU5hbWUiOiJTcGlyaXR1c1NhbmN0dXMiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzIxOWJlYTU0Y2FkN2Q1OGFiNWRhNDA2YjBhOTJhYjNhODI0MjI1MjY2Nzc3ZTUzNGI3ZGI2YzM3MmRkZmY3ZiJ9fX0=","UoSif81+UyvkcaanU8KAMYBpw9mefAmWehE2liDUFvk+y0X/9NovsxTYVpIDCltTSpLW3sNgamvbj4Ybs+s6DbudPiEkvh0ER7Bv2v29UJw7RzIdr6/1g548X12zcnh5iPGz/P75uNRnSfTFQx0ed8P/GNkPIjWpDuJFxEj6KcPzrCAGMx+BVw1VwryBIYf9cCDHky8z0bxR89rjiIvPTBFI6MRhqI3vgpEBTySHDS+Ki0Hwl5oa3PwS6+jgYx/4RSfFsb+BawcvDk2Xpkt5UimvqZ5BceYLIfCt4KbShYipgLXLfYUZrntjPemd3SxthjxUuA07i44UxRdiC8uqy1twLT/HUS28gpk68lA/id9tKFwu1CUzshgcmvQPt3ghtNViNziR/2t7D/+5D31Vzmhf6n7Pnpdirt/5frMi2BKMMs7pLa0EF8CrrDU7QCwPav+EZVGFvVZbxSkCDq+n3IQ3PUWSCzy6KPxpdOlUjD0pAfLoiNj0P8u4+puQtID76r/St8ExchYl2dodUImu1ZETWeFUClF3ZGat62evx8uRQEI2W4dsVwj40VUfjaAuvyDzuouaKTrCzJXLQZZjR1B8URvuK61fGX0nhW607mEi6DE+nxP2ZoBrROEX4e37Ap6+TQn9Q8tKDPdcxtwSOpPO4Qkncjn/mGtP9lZU/DQ="); + public final static SkinData SNOWMAN = new SkinData("eyJ0aW1lc3RhbXAiOjE0NTAwMTk4Nzk5NDIsInByb2ZpbGVJZCI6ImE5ZDBjMDcyYmYxOTQwYTFhMTkzNjhkMDlkNTAwMjZlIiwicHJvZmlsZU5hbWUiOiJTcGlyaXR1c1NhbmN0dXMiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzEzMTgxYWViODQzODk3NzM1ZDQwMmIyNDk2OTQxNmZkYjBjZTM0YTZiOTM3ODE2MjQzNzU2ZTlkYWU1OGUzIn19fQ==","NZvsNu+HQ5uvGWq6O8VNDGq9A145bmk2IkHiz916uRVPMRqqCI/zwhKWNLlFACE/feuLkhYAois29ec6sVVOtHIoNA+S5q1Mb/Vjc3TJQxzqmx2FZOhJiIttFwYuo9WomQKBqrPMSJ9tpQig4wzoqldeeTjWC3dLz7JeX+gkzinryVjG7NNN9L5hXK5/BBxRcrtwmXJfUlSANyrd8RZW7mEUgU8yxlzdqTu0w7bZLjQNd4vciwoF3NelXDorMIIqiHTkuQesG91Njtu25VCUDK3nXbqEnZw2ZtxB5fT5G2Omm/vkNSRXc0P7iqchVowdYQcMlQUsp65xpkBbFS4LwjzDkYIfLmF++hePb8z72Gz77FxhO5sRLGreSH227McyL/0CtWNKm9ZZIfQtZZjEZTj9+eiJMCloCMg3yWa1VBOiLHzz0wY6gGklccIImPyXEg7E0dIK8qYseJMhmmBNZ8pDOkbUDp3mRlrQ2iyClgQkbuR63j79IBUaCxmsa3NnrAtaJklzd9mzkHXfMBh2XT7Gl8AhJS6JK5kCvip1rBBI8yjrsjE/E+lyJFIbC4rXxyMDGZWkcdrd7U4ZFYKiLHbzdFRqX+11qs9xO2BvomGXkATCzYmOf2kQ86R6rNN0+JfE4QpKzj2WWt3C8ky2qpuXZz29p0816E3/qseYtgg="); + public final static SkinData SANTA = new SkinData("eyJ0aW1lc3RhbXAiOjE0NTAwMTk3OTM3NTgsInByb2ZpbGVJZCI6ImE5ZDBjMDcyYmYxOTQwYTFhMTkzNjhkMDlkNTAwMjZlIiwicHJvZmlsZU5hbWUiOiJTcGlyaXR1c1NhbmN0dXMiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2MyNTM5ZGFkZDUxYmE5ZTg0YzFhOTE1OTY3NWUxZTJiYWM1NmFlNmFlNTMxNTQyZDI1YTlkM2Q1YzQ2ODZmNiJ9fX0=","gvLc0Vo6+1vl17vrFCbK1eNqa4/ix4xiwcWae7WOCvqiVIX4sdIPagOGUrKsDdEhuWCKkTWILGP1K3wYfC9v/0mXZvbu0sRln+APTOsswMkQmbKcA1zTFTMpwEI+nIMzYJSbIx5wjz28K5hDf/umtHH2GADTENdJGGUtU4CyEdeHTzcqIAEV3bcMLkfTKvwKUWqI5gZbbercqmDeGkmXVS9297a9paRX1NfEL9pFT0pjdH3tCjgvvKfAwGC6tYtvTFbfcJocqgI+PI2f5OFf62A4XjWwWFi4wxCHVYNpqs/XTbfF64K7KVE0d9gsLjJoB8DMZPxlNpMFA0R5OIW6Q7Qjyz9IKxUqEYRCQbuUKpHyNDcmVKcTJRwBpCHeqAbTbweZHd5tzrT/terWhLEMsK1+lH2KBfIRIRB9kd3epyShNjSEKoly6uRXVxU+IJtfcq0aFVZlwgG3c1Ds9jbsNJV158e1n6WCmvT00RLdvpcIekwUKODhi3zFeFkrVvV50tGYqXLRZenitLJvDzx4c0IGK4krALrUS0oybinBS7/GmW3Ktz3xbGKZSzzaDw0EKB7Y6XHdb4yqR1xS7lAWgv4cNDEIUSzUDJ7HpmDCIF2A5kPS4XVYFCclyR6qPGD5e+9apVhBMz4lfYlT1IfRAUQlucO4UpAlkXs7ho3pQXU="); + public final static SkinData PRESENT = new SkinData("eyJ0aW1lc3RhbXAiOjE0NTAwMTk3MDIxNjIsInByb2ZpbGVJZCI6ImE5ZDBjMDcyYmYxOTQwYTFhMTkzNjhkMDlkNTAwMjZlIiwicHJvZmlsZU5hbWUiOiJTcGlyaXR1c1NhbmN0dXMiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2U2YzRkZWQwNTdjMjhiMTU0NjVkYzQzNmFmODIyYTNkZTY4NzgyZTZjMzgyOGMzMmFhYWE4ZjRiOTIzOWVjIn19fQ==","rJNlxTqHHmOoWwbXdMQLcj0P9w/PIr/hWKXH0nbhm/S2CFo/zfefffZlnQmpKCgn1Y8tXvcRwLGQ4CLpm9m2ZrKprSWRhrnOtZWYabrhExQESEammS3TY81VoNt+4On0pAGBippz/bRfWLuDne2rDbhuljnqvxjROmxpky7gRCU06VMlm2WLFC5XYJkiAaOXBqzpiHMMRPNnCvtcbtpILKi/Luj302eyN8nRKjHHbbiDmttwvlshxZ8UxJHvALtM506IUHba10Q6QX2zCeDAU5/WYRKa6e19r8plROcgGbKYFSq8JW5cWuWT3/rveZM6FnU6ABn9DWsCyfQ5wr2jdBd+xaevGTAScRHA5J493GqL1bBZYKj9yhQFtxJHCAf0++raAVPCZgyPtwTth4TAQisn8gnhM5R+txnW6xK+oflLy0dwEN1YdPLN/h7yuDnyjSMDe9RZT2NKMjok2C6Kux4WBI0KFXKC5Gqwa3Htku4v3WEOWMaVoWOtchQ9BzpQ/etD0ylmzjALQLB+HtndEEm1Jd3tmob42X4hBE8hCce7C3EtGINB33dlx4CK1xBqyGTJEqi69DJRzVL99u98+7kJ1Db9+MaPOfI4B2RY3XbvnSYwecandY//A3bb19FGSdl299ZXbp4zpm8fivzeB1rUAhhmtaA3Iwu/nEQNMkU="); + public final static SkinData RUDOLPH = new SkinData("eyJ0aW1lc3RhbXAiOjE0NTAwMTk1NjgxODIsInByb2ZpbGVJZCI6ImE5ZDBjMDcyYmYxOTQwYTFhMTkzNjhkMDlkNTAwMjZlIiwicHJvZmlsZU5hbWUiOiJTcGlyaXR1c1NhbmN0dXMiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2IzZjdlMjhiNTJkZjJjZjhlZWM2NDk2ZmM0NWFlMGQ2NTM0Njc5OGIxYWRjNzM3ZDcxYzBmOTRlNDIyMSJ9fX0=","uUBOTe63CL+qRvtsb2g4AjB2YzxE3N6AUqIsTv8n0jYyPsuXpuOmZPSMEdgDVONywEJ1L4XRx05sjnGu56A8vuXmGI/uHQWuMZzbOSjiFfT3DkEm8zEl5AWpH9dz/t8nZ1WYUIwy0pN5VrZqIr1DAkF6AMh/Qy+FGDw1GG9ReRr80eJ0JiRskpkCpCZIGGjrgwNKAM8JOuNZ4gCQOTRC3etrcfls3qmUMFcVlhuB4bydxSR01i2w0A4b5KpufsJjLKw4InWn2+m/druo8hl9sYuusTeItW0MQmZqCAqXCc9YBnRPQ0hDXFgnPxOh3RwGWiZvL4MnWUVmLwZWh/Fk9QmyVbd7zVao0lxS8YNsKtP8j5B+hs4l9qNohhf0A07bt4oPeTtd5fQeOU5N87fUGuUAcpC4gP9U5WpVY5FFPBvLvGbXdV5jpuAQz4lLSoo1grsP9baR2IBvdN/0awjQWoPJfGOttegubkBHwz3LNcVqvZLtX/M13IDHZa6zQZEX0wsnMX60LeWgBWfTON1l2cSgaPTerHFS2EifJ2LvTBife3s9/4XR6Zth3FLFqxI3MSlqT2hVFRPLke6rBqfqPoWOj2MCykQ70IAwb3oTHcJDJ86V2DdNaU2bZ8V4TjaP+nRobsLJOImoPYEPq23MP36X8gbXEIjmuu8S5xRlrrc="); + public final static SkinData THE_GRINCH = new SkinData("eyJ0aW1lc3RhbXAiOjE0NTAwMTYxNDMwMDQsInByb2ZpbGVJZCI6ImE5ZDBjMDcyYmYxOTQwYTFhMTkzNjhkMDlkNTAwMjZlIiwicHJvZmlsZU5hbWUiOiJTcGlyaXR1c1NhbmN0dXMiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzg4ZWRlOTI3ZDQzOWVmMzliMzFhYzFkYzJhODM5NGZlNzlhY2U4NDMyNzBjYmUxMjg2ZGM3NTE3ZjMxYTk2In19fQ==","ELo594vTzPq9ZmPYOtVr4kim/k19gzmoxEIK1ehS87gwgag5HcgM+P1FMnHIyrmSvTVaMh0NxwXmNS+JETFL7OrmgRYNpkxkkO4VBA0pfSn3dA9ujnXpDnDiWEPxKdMgQspIOOI0Z3esNt3pj8qIj6dWPtGwtso48tjHl2o/kazfa82yvGORlFhGkeEJKQMno/Buc12C0foQw39XI8GjvlSkFN2eH4Fp16RLu8/hf7SqJQC3L1KacvzMW1d8BWEIgACCJDni29+YqxflSqSyYrV4Z+D66S0jYvUUL/vM4/q/p/YWX/vs/FtMtHQTj4PCpAmMNTgfkahuhb6rCvKHukbjA+WhUdwyxSqXU5YnpXCu1M2dzZgiXjIi+fnyn4CmXKindWCQtSwu+mCA2ILv/6vEHoYJgdlz+DXyRkFx+DH4Sl74HBCOXTOq5AGjq5h3LYfsre+UjCCUv8VgxbVprOyj35So7K0m+6faCFVSt35T3RgicDQfdiWUrW7kmHQVvJpvaq9Vu+63F/0X93cwqwaR0buMirxRx7qkFrRunSI4T+9fsN02t1fAieeu80lBSv83wr7BFneSsLsdVAND9xttTb6fClg7anr8/XVEVIkylB4B+ZcWQbH61XP1nn7oFP2VBg1h6XuuLp8FGSgYf/LW+54/KZci/MnanqQE6QQ="); + + private Property _skinProperty; + + public SkinData(String value, String signature) + { + _skinProperty = new Property("textures", value, signature); + } + + public SkinData(GameProfile profile) + { + _skinProperty = profile.getProperties().get("textures").iterator().next(); + } + + public SkinData(Player player) + { + this(((CraftPlayer)player).getProfile()); + } + + public ItemStack getSkull() + { + NBTTagCompound arrayElement = new NBTTagCompound(); + arrayElement.setString("Value", _skinProperty.getValue()); + arrayElement.setString("Signature", _skinProperty.getSignature()); + + NBTTagList textures = new NBTTagList(); + textures.add(arrayElement); + + NBTTagCompound properties = new NBTTagCompound(); + properties.set("textures", textures); + + NBTTagCompound skullOwner = new NBTTagCompound(); + skullOwner.set("Properties", properties); + skullOwner.set("Name", new NBTTagString(getUnusedSkullName())); + + NBTTagCompound tag = new NBTTagCompound(); + tag.set("SkullOwner", skullOwner); + + + net.minecraft.server.v1_8_R3.ItemStack nmsItem = new net.minecraft.server.v1_8_R3.ItemStack(Item.REGISTRY.get(new MinecraftKey("skull")), 1, 3); + nmsItem.setTag(tag); + + + return CraftItemStack.asBukkitCopy(nmsItem); + } + + public ItemStack getSkull(String name, List lore) + { + ItemStack stack = getSkull(); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(name); + meta.setLore(lore); + stack.setItemMeta(meta); + return stack; + } + + public Property getProperty() + { + return new Property(_skinProperty.getName(), _skinProperty.getValue(), _skinProperty.getSignature()); + } + + public static String getUnusedSkullName() + { + _nameCount++; + return "_" + _nameCount; + } + +} diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/C.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/C.java index 7d5f00c91..bab76df51 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/C.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/C.java @@ -4,6 +4,8 @@ import org.bukkit.ChatColor; public class C { + public static final String blankLine = ChatColor.RESET + " "; + public static String Scramble = "§k"; public static String Bold = "§l"; public static String Strike = "§m"; diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/F.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/F.java index db1e528f3..fd2a34ec6 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/F.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/F.java @@ -106,6 +106,11 @@ public class F return rank.getTag(false, false); } + public static String value(String variable, int value) + { + return value(variable, "" + value); + } + public static String value(String variable, String value) { return value(0, variable, value); diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/LineFormat.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/LineFormat.java index 8f5f7320e..2db7d259f 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/LineFormat.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/LineFormat.java @@ -2,7 +2,7 @@ package mineplex.core.common.util; public enum LineFormat { - LORE(200), CHAT(319); + LORE(220), CHAT(319); private int _length; diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java index d7896c943..a1b747a9e 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilParticle.java @@ -249,12 +249,30 @@ public class UtilParticle public static void PlayParticleToAll(ParticleType type, Location location, Vector offset, float speed, int count, ViewDist dist) { - PlayParticle(type, location, (float) offset.getX(), (float) offset.getY(), (float) offset.getZ(), speed, count, dist, UtilServer.getPlayers()); + float x = 0; + float y = 0; + float z = 0; + if(offset != null) + { + x = (float) offset.getX(); + y = (float) offset.getY(); + z = (float) offset.getZ(); + } + PlayParticle(type, location, x, y, z, speed, count, dist, UtilServer.getPlayers()); } public static void PlayParticle(ParticleType type, Location location, Vector offset, float speed, int count, ViewDist dist, Player... players) { - PlayParticle(type, location, (float) offset.getX(), (float) offset.getY(), (float) offset.getZ(), speed, count, dist, players); + float x = 0; + float y = 0; + float z = 0; + if(offset != null) + { + x = (float) offset.getX(); + y = (float) offset.getY(); + z = (float) offset.getZ(); + } + PlayParticle(type, location, x, y, z, speed, count, dist, players); } public static void PlayParticleToAll(ParticleType type, Location location, float offsetX, float offsetY, float offsetZ, @@ -283,4 +301,26 @@ public class UtilParticle UtilPlayer.sendPacket(player, packet); } } + + public static void PlayParticleToAll(String particle, Location location, Vector offset, float speed, int count, ViewDist dist) + { + float x = 0; + float y = 0; + float z = 0; + if(offset != null) + { + x = (float) offset.getX(); + y = (float) offset.getY(); + z = (float) offset.getZ(); + } + PlayParticle(particle, location, x, y, z, speed, count, dist, UtilServer.getPlayers()); + } + + public static void PlayParticleToAll(String particle, Location location, float offsetX, float offsetY, float offsetZ, + float speed, int count, ViewDist dist) + { + PlayParticle(particle, location, offsetX, offsetY, offsetZ, speed, count, dist, UtilServer.getPlayers()); + } + + } \ No newline at end of file diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilText.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilText.java index 86826296e..38e540824 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilText.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilText.java @@ -260,6 +260,16 @@ public class UtilText return string; } + public static String[] splitLinesToArray(String[] strings, LineFormat lineFormat) + { + ArrayList lineList = splitLines(strings, lineFormat); + + String[] lineArray = new String[lineList.size()]; + lineArray = lineList.toArray(lineArray); + + return lineArray; + } + public static ArrayList splitLines(String[] strings, LineFormat lineFormat) { ArrayList lines = new ArrayList(); @@ -271,10 +281,35 @@ public class UtilText return lines; } + + public static String[] splitLineToArray(String string, LineFormat lineFormat) + { + ArrayList lineList = splitLine(string, lineFormat); + + String[] lineArray = new String[lineList.size()]; + lineArray = lineList.toArray(lineArray); + + return lineArray; + } public static ArrayList splitLine(String string, LineFormat lineFormat) { ArrayList strings = new ArrayList(); + + //Ignore lines with # + if (string.startsWith("#")) + { + strings.add(string.substring(1, string.length())); + return strings; + } + + //Empty + if (string.equals("") || string.equals(" ")) + { + strings.add(string); + return strings; + } + String current = ""; int currentLength = 0; String[] split = string.split(" "); diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTime.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTime.java index 908272bc6..5d5174f16 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTime.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilTime.java @@ -3,6 +3,8 @@ package mineplex.core.common.util; import java.text.SimpleDateFormat; import java.util.Calendar; +import net.minecraft.server.v1_8_R3.MinecraftServer; + public class UtilTime { public static final String DATE_FORMAT_NOW = "MM-dd-yyyy HH:mm:ss"; @@ -41,6 +43,15 @@ public class UtilTime default: return "th"; } } + + /** + * + * @return Returns the current global server tick. Is reset on server restart. Starts out negative. Counts upwards. + */ + public static int getServerTick() + { + return MinecraftServer.currentTick; + } public enum TimeUnit { diff --git a/Plugins/Mineplex.Core/.classpath b/Plugins/Mineplex.Core/.classpath index 4213d7778..e223d6129 100644 --- a/Plugins/Mineplex.Core/.classpath +++ b/Plugins/Mineplex.Core/.classpath @@ -1,7 +1,7 @@ - + diff --git a/Plugins/Mineplex.Core/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.Core/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..a698e5967 --- /dev/null +++ b/Plugins/Mineplex.Core/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/Plugins/Mineplex.Core/Mineplex.Core.iml b/Plugins/Mineplex.Core/Mineplex.Core.iml index 06f039df9..c6de528e3 100644 --- a/Plugins/Mineplex.Core/Mineplex.Core.iml +++ b/Plugins/Mineplex.Core/Mineplex.Core.iml @@ -20,6 +20,6 @@ - + \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/CustomTagFix.java b/Plugins/Mineplex.Core/src/mineplex/core/CustomTagFix.java index d757499b7..af619626b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/CustomTagFix.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/CustomTagFix.java @@ -539,9 +539,10 @@ public class CustomTagFix extends MiniPlugin implements IPacketHandler, NCPHook DataWatcher squidWatcher = new DataWatcher(new DummyEntity(((CraftWorld) owner.getWorld()).getHandle())); squidWatcher.a(0, (byte) (0 | 1 << 5)); - final PacketPlayOutSpawnEntityLiving spawnPacket = new PacketPlayOutSpawnEntityLiving(); + PacketPlayOutSpawnEntityLiving spawnPacket = new PacketPlayOutSpawnEntityLiving(); spawnPacket.a = squidId; spawnPacket.b = (byte) EntityType.SQUID.getTypeId(); + spawnPacket.c = 1000000; spawnPacket.l = squidWatcher; @@ -555,9 +556,10 @@ public class CustomTagFix extends MiniPlugin implements IPacketHandler, NCPHook UtilPlayer.sendPacket(owner, vehiclePacket); } - final PacketPlayOutSpawnEntityLiving spawnPacket = new PacketPlayOutSpawnEntityLiving(); + PacketPlayOutSpawnEntityLiving spawnPacket = new PacketPlayOutSpawnEntityLiving(); spawnPacket.a = newEntityId; spawnPacket.b = (byte) 30; + spawnPacket.c = 1000000; spawnPacket.l = watcher; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/antihack/types/Fly.java b/Plugins/Mineplex.Core/src/mineplex/core/antihack/types/Fly.java index fd7b557af..0941d4a2a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/antihack/types/Fly.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/antihack/types/Fly.java @@ -16,6 +16,8 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; public class Fly extends MiniPlugin implements Detector { @@ -128,6 +130,10 @@ public class Fly extends MiniPlugin implements Detector } } + for (PotionEffect effect : player.getActivePotionEffects()) + if (effect.getType() == PotionEffectType.JUMP || effect.getType().equals(PotionEffectType.JUMP)) + nearBlocks = true; + if (nearBlocks) { count = 0; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusAmount.java b/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusAmount.java index bb6d8c9f3..bdd50e4d7 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusAmount.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusAmount.java @@ -17,6 +17,9 @@ public class BonusAmount private int _experience; private int _bonusExperience; private int _tickets; + private int _oldChests; + private int _ancientChests; + private int _mythicalChests; public BonusAmount() { @@ -133,19 +136,52 @@ public class BonusAmount _tickets = tickets; } + public int getOldChests() + { + return _oldChests; + } + + public void setOldChests(int oldChests) + { + _oldChests = oldChests; + } + + public int getAncientChests() + { + return _ancientChests; + } + + public void setAncientChests(int ancientChests) + { + _ancientChests = ancientChests; + } + + public int getMythicalChests() + { + return _mythicalChests; + } + + public void setMythicalChests(int mythicalChests) + { + _mythicalChests = mythicalChests; + } + public boolean isGreaterThanZero() { - return _bonusCoins > 0 || _coins > 0 || _bonusGems > 0 || _gems > 0 || _gold > 0 || _bonusGold > 0; + return _bonusCoins > 0 || _coins > 0 || _bonusGems > 0 || _gems > 0 || _gold > 0 || _bonusGold > 0 || _oldChests > 0 || _ancientChests > 0 || _mythicalChests > 0; } public void addLore(List lore) { lore.add(C.cYellow + "Rewards"); addLore(lore, getTickets(), 0, "Carl Spin Ticket" + (getTickets() > 1 ? "s" : "")); - addLore(lore, getCoins(), getBonusCoins(), "Coins"); + addLore(lore, getCoins(), getBonusCoins(), "Treasure Shards"); addLore(lore, getGems(), getBonusGems(), "Gems"); addLore(lore, getGold(), getBonusGold(), "Gold"); addLore(lore, getExperience(), getBonusExperience(), "Experience"); + addLore(lore, getOldChests(), 0, "Old Chest", "Old Chests"); + addLore(lore, getAncientChests(), 0, "Ancient Chest", "Ancient Chests"); + addLore(lore, getMythicalChests(), 0, "Mythical Chest", "Mythical Chests"); } private void addLore(List lore, int amount, int bonus, String suffix) @@ -156,4 +192,12 @@ public class BonusAmount // if (bonus > 0) // lore.add(C.cYellow + "Streak Bonus: " + C.cWhite + bonus + " " + suffix); } + + private void addLore(List lore, int amount, int bonus, String suffix, String plural) + { + if (amount == 1) + lore.add(" " + C.cWhite + amount + " " + plural); + else if (amount > 0) + lore.add(" " + C.cWhite + amount + " " + suffix); + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusManager.java b/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusManager.java index 71ee2abe0..e5076f9b0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusManager.java @@ -43,6 +43,7 @@ import mineplex.core.recharge.Recharge; import mineplex.core.reward.RewardManager; import mineplex.core.stats.StatsManager; import mineplex.core.status.ServerStatusManager; +import mineplex.core.treasure.TreasureType; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.database.Tables; @@ -122,6 +123,7 @@ public class BonusManager extends MiniClientPlugin implements I private BonusRepository _repository; private CoreClientManager _clientManager; + private InventoryManager _inventoryManager; private DonationManager _donationManager; private PollManager _pollManager; private NpcManager _npcManager; @@ -174,6 +176,7 @@ public class BonusManager extends MiniClientPlugin implements I _donationManager = donationManager; _npcManager = npcManager; _hologramManager = hologramManager; + _inventoryManager = inventoryManager; _rewardManager = new RewardManager(clientManager, statusManager, donationManager, inventoryManager, petManager, statsManager, giveawayManager, 100, 250, @@ -673,21 +676,21 @@ public class BonusManager extends MiniClientPlugin implements I BonusAmount data = new BonusAmount(); - if (rank.has(Rank.MODERATOR)) + if (rank.has(Rank.TITAN)) { - data.setCoins(35000); + data.setMythicalChests(5); } - if (rank.has(Rank.LEGEND)) + else if (rank.has(Rank.LEGEND)) { - data.setCoins(30000); + data.setMythicalChests(3); } else if (rank.has(Rank.HERO)) { - data.setCoins(15000); + data.setMythicalChests(2); } else if (rank.has(Rank.ULTRA)) { - data.setCoins(7500); + data.setMythicalChests(1); } return data; @@ -722,6 +725,27 @@ public class BonusManager extends MiniClientPlugin implements I final int coins = amount.getTotalCoins(); final int tickets = amount.getTickets(); int experience = amount.getTotalExperience(); + int oldChests = amount.getOldChests(); + int ancientChests = amount.getAncientChests(); + int mythicalChests = amount.getMythicalChests(); + + if (oldChests > 0) + { + _inventoryManager.addItemToInventory(player, TreasureType.OLD.getItemName(), oldChests); + UtilPlayer.message(player, F.main("Carl", "Rewarded " + F.elem(oldChests + " Old Chests"))); + } + + if (ancientChests > 0) + { + UtilPlayer.message(player, F.main("Carl", "Rewarded " + F.elem(ancientChests + " Ancient Chests"))); + _inventoryManager.addItemToInventory(player, TreasureType.ANCIENT.getItemName(), ancientChests); + } + + if (mythicalChests > 0) + { + UtilPlayer.message(player, F.main("Carl", "Rewarded " + F.elem(mythicalChests + " Mythical Chests"))); + _inventoryManager.addItemToInventory(player, TreasureType.MYTHICAL.getItemName(), mythicalChests); + } if (gems > 0) { @@ -750,7 +774,7 @@ public class BonusManager extends MiniClientPlugin implements I if (coins > 0) { - UtilPlayer.message(player, F.main("Carl", "Rewarded " + F.elem(coins + " Coins"))); + UtilPlayer.message(player, F.main("Carl", "Rewarded " + F.elem(coins + " Treasure Shards"))); _coinQueue.add(new GiveDonorData(player.getName(), coreClient.getAccountId(), player.getUniqueId(), coins)); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusRepository.java index 6c150e409..0c4a1c6f5 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusRepository.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusRepository.java @@ -265,7 +265,7 @@ public class BonusRepository extends RepositoryBase final int accountId = _manager.getClientManager().Get(player).getAccountId(); final int coins = _manager.getRankBonusAmount(player).getCoins(); - if (coins == 0/* && gems == 0 */) { + if (!_manager.getRankBonusAmount(player).isGreaterThanZero()) { result.run(false); return; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/CosmeticManager.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/CosmeticManager.java index 48e7d35f2..9394628ae 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/CosmeticManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/CosmeticManager.java @@ -19,7 +19,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.cosmetic.ui.CosmeticShop; import mineplex.core.donation.DonationManager; import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.gadgets.OutfitTeam; +import mineplex.core.gadget.gadgets.outfit.OutfitTeam; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.inventory.InventoryManager; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenArrowTrails.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenArrowTrails.java new file mode 100644 index 000000000..e280de6c2 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenArrowTrails.java @@ -0,0 +1,23 @@ +package mineplex.core.cosmetic.ui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.cosmetic.ui.page.ArrowTrailPage; +import mineplex.core.cosmetic.ui.page.Menu; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.shop.item.IButton; + +public class OpenArrowTrails extends OpenPageButton +{ + public OpenArrowTrails(Menu menu, Gadget active) + { + super(menu, active); + } + + @Override + protected void leftClick(Player player) + { + getMenu().getShop().openPageForPlayer(player, new ArrowTrailPage(getMenu().getPlugin(), getMenu().getShop(), getMenu().getClientManager(), getMenu().getDonationManager(), "Arrow Trails", player)); + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenCostumes.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenCostumes.java index 347a007be..01f528d6e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenCostumes.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenCostumes.java @@ -1,23 +1,20 @@ package mineplex.core.cosmetic.ui.button; import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; import mineplex.core.cosmetic.ui.page.Menu; -import mineplex.core.shop.item.IButton; +import mineplex.core.gadget.types.Gadget; -public class OpenCostumes implements IButton +public class OpenCostumes extends OpenPageButton { - private Menu _menu; - - public OpenCostumes(Menu menu) + public OpenCostumes(Menu menu, Gadget active) { - _menu = menu; + super(menu, active); } @Override - public void onClick(Player player, ClickType clickType) + protected void leftClick(Player player) { - _menu.openCostumes(player); + getMenu().openCostumes(player); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenDeathAnimations.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenDeathAnimations.java new file mode 100644 index 000000000..f16d51e65 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenDeathAnimations.java @@ -0,0 +1,24 @@ +package mineplex.core.cosmetic.ui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.cosmetic.ui.page.DeathEffectPage; +import mineplex.core.cosmetic.ui.page.Menu; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.shop.item.IButton; + +public class OpenDeathAnimations extends OpenPageButton +{ + + public OpenDeathAnimations(Menu menu, Gadget active) + { + super(menu, active); + } + + @Override + protected void leftClick(Player player) + { + getMenu().getShop().openPageForPlayer(player, new DeathEffectPage(getMenu().getPlugin(), getMenu().getShop(), getMenu().getClientManager(), getMenu().getDonationManager(), "Death Animations", player)); + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenDoubleJump.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenDoubleJump.java new file mode 100644 index 000000000..4506defc4 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenDoubleJump.java @@ -0,0 +1,23 @@ +package mineplex.core.cosmetic.ui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.cosmetic.ui.page.DoubleJumpPage; +import mineplex.core.cosmetic.ui.page.Menu; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.shop.item.IButton; + +public class OpenDoubleJump extends OpenPageButton +{ + public OpenDoubleJump(Menu menu, Gadget active) + { + super(menu, active); + } + + @Override + protected void leftClick(Player player) + { + getMenu().getShop().openPageForPlayer(player, new DoubleJumpPage(getMenu().getPlugin(), getMenu().getShop(), getMenu().getClientManager(), getMenu().getDonationManager(), "Double Jump Effects", player)); + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenGadgets.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenGadgets.java index 79a62a52f..a981afc88 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenGadgets.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenGadgets.java @@ -2,23 +2,23 @@ package mineplex.core.cosmetic.ui.button; import mineplex.core.cosmetic.ui.page.GadgetPage; import mineplex.core.cosmetic.ui.page.Menu; +import mineplex.core.gadget.types.Gadget; import mineplex.core.shop.item.IButton; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -public class OpenGadgets implements IButton +public class OpenGadgets extends OpenPageButton { - private Menu _page; - - public OpenGadgets(Menu page) + + public OpenGadgets(Menu menu, Gadget active) { - _page = page; + super(menu, active); } @Override - public void onClick(Player player, ClickType clickType) + protected void leftClick(Player player) { - _page.getShop().openPageForPlayer(player, new GadgetPage(_page.getPlugin(), _page.getShop(), _page.getClientManager(), _page.getDonationManager(), "Gadgets", player)); + getMenu().getShop().openPageForPlayer(player, new GadgetPage(getMenu().getPlugin(), getMenu().getShop(), getMenu().getClientManager(), getMenu().getDonationManager(), "Gadgets", player)); } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenHats.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenHats.java new file mode 100644 index 000000000..126382e58 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenHats.java @@ -0,0 +1,21 @@ +package mineplex.core.cosmetic.ui.button; + +import org.bukkit.entity.Player; + +import mineplex.core.cosmetic.ui.page.HatPage; +import mineplex.core.cosmetic.ui.page.Menu; +import mineplex.core.gadget.types.Gadget; + +public class OpenHats extends OpenPageButton +{ + public OpenHats(Menu menu, Gadget active) + { + super(menu, active); + } + + @Override + protected void leftClick(Player player) + { + getMenu().getShop().openPageForPlayer(player, new HatPage(getMenu().getPlugin(), getMenu().getShop(), getMenu().getClientManager(), getMenu().getDonationManager(), "Hats", player)); + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMorphs.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMorphs.java index 8666c1bfb..34d6ac932 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMorphs.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMorphs.java @@ -2,22 +2,21 @@ package mineplex.core.cosmetic.ui.button; import mineplex.core.cosmetic.ui.page.Menu; import mineplex.core.cosmetic.ui.page.MorphPage; -import mineplex.core.shop.item.IButton; +import mineplex.core.gadget.types.Gadget; import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; -public class OpenMorphs implements IButton +public class OpenMorphs extends OpenPageButton { - private Menu _page; - - public OpenMorphs(Menu page) + + public OpenMorphs(Menu menu, Gadget active) { - _page = page; + super(menu, active); } - - public void onClick(Player player, ClickType clickType) + + @Override + protected void leftClick(Player player) { - _page.getShop().openPageForPlayer(player, new MorphPage(_page.getPlugin(), _page.getShop(), _page.getClientManager(), _page.getDonationManager(), "Morphs", player)); + getMenu().getShop().openPageForPlayer(player, new MorphPage(getMenu().getPlugin(), getMenu().getShop(), getMenu().getClientManager(), getMenu().getDonationManager(), "Morphs", player)); } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMounts.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMounts.java index d71c566a8..17dea9154 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMounts.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMounts.java @@ -2,6 +2,8 @@ package mineplex.core.cosmetic.ui.button; import mineplex.core.cosmetic.ui.page.Menu; import mineplex.core.cosmetic.ui.page.MountPage; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.mount.Mount; import mineplex.core.shop.item.IButton; import org.bukkit.entity.Player; @@ -9,15 +11,28 @@ import org.bukkit.event.inventory.ClickType; public class OpenMounts implements IButton { - private Menu _page; - - public OpenMounts(Menu page) + private Menu _menu; + private Mount _active; + + public OpenMounts(Menu menu, Mount active) { - _page = page; + _menu = menu; + _active = active; } - + + @Override public void onClick(Player player, ClickType clickType) { - _page.getShop().openPageForPlayer(player, new MountPage(_page.getPlugin(), _page.getShop(), _page.getClientManager(), _page.getDonationManager(), "Mounts", player)); + if (clickType.isLeftClick()) + _menu.getShop().openPageForPlayer(player, new MountPage(_menu.getPlugin(), _menu.getShop(), _menu.getClientManager(), _menu.getDonationManager(), "Mounts", player)); + else + { + if (_active != null) + { + _menu.playAcceptSound(player); + _active.Disable(player); + _menu.refresh(); + } + } } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMusic.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMusic.java index 72d1c2d18..b158901cc 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMusic.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenMusic.java @@ -4,22 +4,19 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import mineplex.core.cosmetic.ui.page.Menu; +import mineplex.core.gadget.types.Gadget; import mineplex.core.shop.item.IButton; -/** - * Created by shaun on 14-09-15. - */ -public class OpenMusic implements IButton +public class OpenMusic extends OpenPageButton { - private Menu _menu; - - public OpenMusic(Menu menu) + public OpenMusic(Menu menu, Gadget active) { - _menu = menu; + super(menu, active); } - public void onClick(Player player, ClickType clickType) + @Override + protected void leftClick(Player player) { - _menu.openMusic(player); + getMenu().openMusic(player); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenPageButton.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenPageButton.java new file mode 100644 index 000000000..7e0a4159a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenPageButton.java @@ -0,0 +1,48 @@ +package mineplex.core.cosmetic.ui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.cosmetic.ui.page.Menu; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.shop.item.IButton; + +public abstract class OpenPageButton implements IButton +{ + private Menu _menu; + private Gadget _active; + + public OpenPageButton(Menu menu, Gadget active) + { + _active = active; + _menu = menu; + } + + @Override + public void onClick(Player player, ClickType clickType) + { + if (clickType.isLeftClick()) + leftClick(player); + else + { + if (_active != null) + { + _menu.playAcceptSound(player); + _active.Disable(player); + _menu.refresh(); + } + } + } + + protected Menu getMenu() + { + return _menu; + } + + protected Gadget getActive() + { + return _active; + } + + protected abstract void leftClick(Player player); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenParticles.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenParticles.java index 37e9cf1e1..b464e0b22 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenParticles.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenParticles.java @@ -2,22 +2,23 @@ package mineplex.core.cosmetic.ui.button; import mineplex.core.cosmetic.ui.page.Menu; import mineplex.core.cosmetic.ui.page.ParticlePage; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.Gadget; import mineplex.core.shop.item.IButton; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -public class OpenParticles implements IButton +public class OpenParticles extends OpenPageButton { - private Menu _page; - - public OpenParticles(Menu page) + public OpenParticles(Menu menu, Gadget active) { - _page = page; + super(menu, active); } - public void onClick(Player player, ClickType clickType) + @Override + protected void leftClick(Player player) { - _page.getShop().openPageForPlayer(player, new ParticlePage(_page.getPlugin(), _page.getShop(), _page.getClientManager(), _page.getDonationManager(), "Particles", player)); + getMenu().getShop().openPageForPlayer(player, new ParticlePage(getMenu().getPlugin(), getMenu().getShop(), getMenu().getClientManager(), getMenu().getDonationManager(), "Particles", player)); } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenPets.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenPets.java index fdaaa0e19..78c7790e0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenPets.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/button/OpenPets.java @@ -1,7 +1,9 @@ package mineplex.core.cosmetic.ui.button; import mineplex.core.cosmetic.ui.page.Menu; +import mineplex.core.cosmetic.ui.page.MountPage; import mineplex.core.cosmetic.ui.page.PetPage; +import mineplex.core.pet.Pet; import mineplex.core.shop.item.IButton; import org.bukkit.entity.Player; @@ -9,16 +11,23 @@ import org.bukkit.event.inventory.ClickType; public class OpenPets implements IButton { - private Menu _page; - - public OpenPets(Menu page) + private Menu _menu; + + public OpenPets(Menu menu) { - _page = page; + _menu = menu; } @Override public void onClick(Player player, ClickType clickType) { - _page.getShop().openPageForPlayer(player, new PetPage(_page.getPlugin(), _page.getShop(), _page.getClientManager(), _page.getDonationManager(), "Pets", player)); + if (clickType.isLeftClick()) + _menu.getShop().openPageForPlayer(player, new PetPage(_menu.getPlugin(), _menu.getShop(), _menu.getClientManager(), _menu.getDonationManager(), "Pets", player)); + else + { + _menu.playAcceptSound(player); + _menu.getPlugin().getPetManager().RemovePet(player, true); + _menu.refresh(); + } } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/ArrowTrailPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/ArrowTrailPage.java new file mode 100644 index 000000000..621b36d20 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/ArrowTrailPage.java @@ -0,0 +1,53 @@ +package mineplex.core.cosmetic.ui.page; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.cosmetic.CosmeticManager; +import mineplex.core.cosmetic.ui.CosmeticShop; +import mineplex.core.donation.DonationManager; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.gadget.types.GadgetType; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; + +public class ArrowTrailPage extends GadgetPage +{ + + public ArrowTrailPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, + Player player) + { + super(plugin, shop, clientManager, donationManager, name, player); + } + + @Override + protected void buildPage() + { + int slot = 19; + + for (Gadget gadget : getPlugin().getGadgetManager().getGadgets(GadgetType.ArrowTrail)) + { + addGadget(gadget, slot); + + if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.ArrowTrail) == gadget) + addGlow(slot); + + slot++; + + if (slot == 26) + slot = 28; + } + + addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + { + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new Menu(getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/CostumePage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/CostumePage.java index 144131e81..47e4ea4ac 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/CostumePage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/CostumePage.java @@ -1,18 +1,23 @@ package mineplex.core.cosmetic.ui.page; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import mineplex.core.account.CoreClientManager; +import mineplex.core.common.CurrencyType; import mineplex.core.common.util.C; import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.cosmetic.ui.CosmeticShop; import mineplex.core.donation.DonationManager; +import mineplex.core.gadget.gadgets.outfit.OutfitRaveSuit; +import mineplex.core.gadget.gadgets.outfit.OutfitSpaceSuit; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.gadget.types.ItemGadget; @@ -36,19 +41,20 @@ public class CostumePage extends GadgetPage { int slot; - List costumeClasses = new ArrayList(); - for (Gadget gadget : getPlugin().getGadgetManager().getGadgets(GadgetType.Costume)) { + if (gadget.GetCost(CurrencyType.Coins) == -1) + continue; + OutfitGadget outfitGadget = ((OutfitGadget) gadget); - Class clazz = gadget.getClass(); - if (!costumeClasses.contains(clazz)) - { - costumeClasses.add(clazz); - } - - slot = (costumeClasses.indexOf(clazz) * 2) + 3 + 18; + int offset = 0; + + if (gadget instanceof OutfitRaveSuit) offset = 0; + else if (gadget instanceof OutfitSpaceSuit) offset = 1; + else offset = 2; + + slot = offset + 1 + 18; //1 buffer to left, 18 = 2 lines down if (outfitGadget.GetSlot() == OutfitGadget.ArmorSlot.Chest) slot += 9; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/DeathEffectPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/DeathEffectPage.java new file mode 100644 index 000000000..65d92f6e0 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/DeathEffectPage.java @@ -0,0 +1,53 @@ +package mineplex.core.cosmetic.ui.page; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.cosmetic.CosmeticManager; +import mineplex.core.cosmetic.ui.CosmeticShop; +import mineplex.core.donation.DonationManager; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.gadget.types.GadgetType; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; + +public class DeathEffectPage extends GadgetPage +{ + + public DeathEffectPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, + String name, Player player) + { + super(plugin, shop, clientManager, donationManager, name, player); + } + + @Override + protected void buildPage() + { + int slot = 19; + + for (Gadget gadget : getPlugin().getGadgetManager().getGadgets(GadgetType.Death)) + { + addGadget(gadget, slot); + + if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Death) == gadget) + addGlow(slot); + + slot++; + + if (slot == 26) + slot = 28; + } + + addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + { + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new Menu(getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/DoubleJumpPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/DoubleJumpPage.java new file mode 100644 index 000000000..5b7c18b70 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/DoubleJumpPage.java @@ -0,0 +1,53 @@ +package mineplex.core.cosmetic.ui.page; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.cosmetic.CosmeticManager; +import mineplex.core.cosmetic.ui.CosmeticShop; +import mineplex.core.donation.DonationManager; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.gadget.types.GadgetType; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; + +public class DoubleJumpPage extends GadgetPage +{ + + public DoubleJumpPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, + Player player) + { + super(plugin, shop, clientManager, donationManager, name, player); + } + + @Override + protected void buildPage() + { + int slot = 19; + + for (Gadget gadget : getPlugin().getGadgetManager().getGadgets(GadgetType.DoubleJump)) + { + addGadget(gadget, slot); + + if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.DoubleJump) == gadget) + addGlow(slot); + + slot++; + + if (slot == 26) + slot = 28; + } + + addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + { + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new Menu(getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/GadgetPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/GadgetPage.java index 6a75916e6..264411b62 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/GadgetPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/GadgetPage.java @@ -4,9 +4,12 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import mineplex.core.account.CoreClientManager; import mineplex.core.common.CurrencyType; @@ -19,10 +22,10 @@ import mineplex.core.cosmetic.ui.button.ActivateGadgetButton; import mineplex.core.cosmetic.ui.button.DeactivateGadgetButton; import mineplex.core.cosmetic.ui.button.GadgetButton; import mineplex.core.donation.DonationManager; -import mineplex.core.gadget.gadgets.MorphBlock; -import mineplex.core.gadget.gadgets.MorphNotch; +import mineplex.core.gadget.gadgets.morph.MorphBlock; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; +import mineplex.core.gadget.types.HatGadget; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.shop.item.IButton; import mineplex.core.shop.item.ShopItem; @@ -31,33 +34,33 @@ import mineplex.core.shop.page.ShopPageBase; public class GadgetPage extends ShopPageBase { - public GadgetPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player) - { - super(plugin, shop, clientManager, donationManager, name, player, 54); - - buildPage(); - } - - protected void buildPage() - { - int slot = 19; - - for (Gadget gadget : getPlugin().getGadgetManager().getGadgets(GadgetType.Item)) - { - if (gadget.GetCost(CurrencyType.Coins) == -3) - continue; - - addGadget(gadget, slot); - - if (getPlugin().getInventoryManager().Get(getPlayer()).getItemCount(gadget.GetDisplayName()) > 0) - addGlow(slot); - - slot++; - - if (slot == 26) - slot = 28; - } - + public GadgetPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player) + { + super(plugin, shop, clientManager, donationManager, name, player, 54); + + buildPage(); + } + + protected void buildPage() + { + int slot = 19; + + for (Gadget gadget : getPlugin().getGadgetManager().getGadgets(GadgetType.Item)) + { + if (gadget.GetCost(CurrencyType.Coins) == -3) + continue; + + addGadget(gadget, slot); + + if (getPlugin().getInventoryManager().Get(getPlayer()).getItemCount(gadget.GetDisplayName()) > 0) + addGlow(slot); + + slot++; + + if (slot == 26) + slot = 28; + } + addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() { public void onClick(Player player, ClickType clickType) @@ -65,72 +68,245 @@ public class GadgetPage extends ShopPageBase getShop().openPageForPlayer(getPlayer(), new Menu(getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); } }); - } - - protected void addGadget(Gadget gadget, int slot) - { - if (gadget instanceof MorphNotch) - { - //setItem(slot, new ShopItem(gadget.GetDisplayMaterial(), gadget.GetDisplayData(), "Disabled " + gadget.GetName(), new String[] { "Sorry! Currently disabled until fix is made for 1.8 players!" }, 1, false, false)); - //return; - } - else if (gadget instanceof MorphBlock) + } + + protected void addGadget(Gadget gadget, int slot) + { + if (gadget instanceof MorphBlock) { - //Prevent stacker bug if (getPlayer().getPassenger() != null) return; } - List itemLore = new ArrayList(); - - if (gadget.GetCost(CurrencyType.Coins) >= 0) - { - itemLore.add(C.cYellow + gadget.GetCost(CurrencyType.Coins) + " Coins"); - } - else if (gadget.GetCost(CurrencyType.Coins) == -2) - { - itemLore.add(C.cGold + "Found in Treasure Chests."); - } - else if (gadget.GetCost(CurrencyType.Coins) == -3) - { - - } + List itemLore = new ArrayList(); - - itemLore.add(C.cBlack); - itemLore.addAll(Arrays.asList(gadget.GetDescription())); - - if (gadget instanceof ItemGadget) - { - itemLore.add(C.cBlack); - itemLore.add(C.cGreen + "Right-Click To Purchase:"); - itemLore.add(C.cWhite + ((ItemGadget)gadget).getAmmo().GetDisplayName() + " for " + C.cYellow + ((ItemGadget)gadget).getAmmo().GetCost(CurrencyType.Coins) + " Coins"); - itemLore.add(C.cBlack); - itemLore.add(C.cWhite + "Your Ammo : " + C.cGreen + getPlugin().getInventoryManager().Get(getPlayer()).getItemCount(gadget.GetName())); - } - - if (gadget.IsFree() || getDonationManager().Get(getPlayer().getName()).OwnsUnknownPackage(gadget.GetName()) || getPlugin().getInventoryManager().Get(getPlayer()).getItemCount(gadget.GetName()) > 0) - { - if (gadget.GetActive().contains(getPlayer())) - { - addButton(slot, new ShopItem(gadget.GetDisplayMaterial(), gadget.GetDisplayData(), "Deactivate " + gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new DeactivateGadgetButton(gadget, this)); - } - else - { - addButton(slot, new ShopItem(gadget.GetDisplayMaterial(), gadget.GetDisplayData(), "Activate " + gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new ActivateGadgetButton(gadget, this)); - } - } - else - { - if (gadget.GetCost(CurrencyType.Coins) > 0 && getDonationManager().Get(getPlayer().getName()).GetBalance(CurrencyType.Coins) >= gadget.GetCost(CurrencyType.Coins)) - addButton(slot, new ShopItem(Material.INK_SACK, (byte) 8, (gadget.GetCost(CurrencyType.Coins) < 0 ? "" : "Purchase ") + gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new GadgetButton(gadget, this)); - else - setItem(slot, new ShopItem(Material.INK_SACK, (byte)8, (gadget.GetCost(CurrencyType.Coins) < 0 ? "" : "Purchase ") + gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); - } - } + itemLore.add(C.cBlack); + itemLore.addAll(Arrays.asList(gadget.GetDescription())); + + if (gadget.getSet() != null) + { + itemLore.add(C.cBlack); + itemLore.add(C.cWhite + gadget.getSet().getName() + " Set;"); + + //Elements + for (Gadget cur : gadget.getSet().getGadgets()) + itemLore.add(" "+ (cur.ownsGadget(getPlayer()) ? C.cDGreen + '▪' : C.cDRed + '▪' ) + (cur.IsActive(getPlayer()) ? C.cGreen : C.cGray) + cur.GetName()); + + itemLore.add(C.cBlack); + + //Bonus + itemLore.add(C.cWhite + gadget.getSet().getName() + " Set Bonus;"); + for (String bonus : gadget.getSet().getBonus()) + itemLore.add(" " + (gadget.getSet().isActive(getPlayer()) ? C.cGreen : C.cGray) + bonus); + } + + if (!gadget.ownsGadget(getPlayer())) + { + if (gadget.GetCost(CurrencyType.Coins) == -1) + { + //Nothing + } + //Chest Unlocks + else if (gadget.GetCost(CurrencyType.Coins) == -2 || gadget.GetCost(CurrencyType.Coins) > 0) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Treasure Chests"); + } + else if (gadget.GetCost(CurrencyType.Coins) == -3) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Winter Holiday Treasure"); + } + else if (gadget.GetCost(CurrencyType.Coins) == -4) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Halloween Pumpkin Treasure"); + } + else if (gadget.GetCost(CurrencyType.Coins) == -5) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Easter Holiday Treasure"); + } + //Rank Unlocks + else if (gadget.GetCost(CurrencyType.Coins) == -10) + { + itemLore.add(C.cBlack); + itemLore.add(C.cAqua + "Unlocked with Ultra Rank"); + } + else if (gadget.GetCost(CurrencyType.Coins) == -11) + { + itemLore.add(C.cBlack); + itemLore.add(C.cPurple + "Unlocked with Hero Rank"); + } + else if (gadget.GetCost(CurrencyType.Coins) == -12) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Unlocked with Legend Rank"); + } + else if (gadget.GetCost(CurrencyType.Coins) == -13) + { + itemLore.add(C.cBlack); + itemLore.add(C.cRed + "Unlocked with Titan Rank"); + } + } + + //Special case for item gadgets! + if (gadget instanceof ItemGadget) + { + ItemGadget itemGadget = (ItemGadget)gadget; + + itemLore.add(C.cBlack); + itemLore.add(C.cWhite + "You own " + C.cGreen + getPlugin().getInventoryManager().Get(getPlayer()).getItemCount(gadget.GetName())); + +// boolean canAffordAmmo = true; +// if (itemGadget.getAmmo().GetCost(CurrencyType.Coins) > 0) +// { +// itemLore.add(C.cBlack); +// itemLore.add(C.cWhite + ((ItemGadget)gadget).getAmmo().GetDisplayName() + " for " + C.cYellow + ((ItemGadget)gadget).getAmmo().GetCost(CurrencyType.Coins) + " Coins"); +// +// if (getDonationManager().Get(getPlayer().getName()).GetBalance(CurrencyType.Coins) >= itemGadget.getAmmo().GetCost(CurrencyType.Coins)) +// { +// itemLore.add(C.cGreen + "Right-Click To Purchase"); +// } +// else +// { +// itemLore.add(C.cRed + "Not Enough Treasure Shards."); +// canAffordAmmo = false; +// } +// } + + if (itemGadget.hasAmmo(getPlayer())) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Left-Click to Enable"); + + addButton(slot, new ShopItem(gadget.GetDisplayMaterial(), gadget.GetDisplayData(), gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new ActivateGadgetButton(gadget, this)); + } + else + { + addButton(slot, new ShopItem(gadget.GetDisplayMaterial(), gadget.GetDisplayData(), gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false), new ActivateGadgetButton(gadget, this)); + } + + return; + } + + if(gadget instanceof HatGadget) + { + ItemStack item = ((HatGadget)gadget).getHelmetItem(); + + ItemMeta im = item.getItemMeta(); + im.setDisplayName(C.cGreen + C.Bold + gadget.GetName()); + + if (gadget.ownsGadget(getPlayer())) + { + if (gadget.GetActive().contains(getPlayer())) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Disable"); + + im.setLore(itemLore); + item.setItemMeta(im); + addButton(slot, new ShopItem(item, false, false), new DeactivateGadgetButton(gadget, this)); + } + else + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Enable"); + + im.setLore(itemLore); + item.setItemMeta(im); + addButton(slot, new ShopItem(item, false, false), new ActivateGadgetButton(gadget, this)); + } + } + else + { + if (gadget.GetCost(CurrencyType.Coins) > 0) + { + itemLore.add(C.cBlack); + itemLore.add(C.cWhiteB + "Cost: " + C.cAqua + gadget.GetCost(CurrencyType.Coins) + " Treasure Shards"); + } + + if (gadget.GetCost(CurrencyType.Coins) > 0 && getDonationManager().Get(getPlayer().getName()).GetBalance(CurrencyType.Coins) >= gadget.GetCost(CurrencyType.Coins)) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Purchase"); + + addButton(slot, new ShopItem(Material.INK_SACK, (byte) 8, gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false), new GadgetButton(gadget, this)); + } + else if (gadget.GetCost(CurrencyType.Coins) > 0) + { + itemLore.add(C.cBlack); + itemLore.add(C.cRed + "Not enough Treasure Shards."); + + setItem(slot, new ShopItem(Material.INK_SACK, (byte)8, gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); + } + else + { + setItem(slot, new ShopItem(Material.INK_SACK, (byte)8, gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); + } + } + + return; + } + + //Standard + if (gadget.ownsGadget(getPlayer())) + { + if (gadget.GetActive().contains(getPlayer())) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Disable"); + + addButton(slot, new ShopItem(gadget.GetDisplayMaterial(), gadget.GetDisplayData(), gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new DeactivateGadgetButton(gadget, this)); + } + else + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Enable"); + + addButton(slot, new ShopItem(gadget.GetDisplayMaterial(), gadget.GetDisplayData(), gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new ActivateGadgetButton(gadget, this)); + } + } + else + { + if (gadget.GetCost(CurrencyType.Coins) > 0) + { + itemLore.add(C.cBlack); + itemLore.add(C.cWhiteB + "Cost: " + C.cAqua + gadget.GetCost(CurrencyType.Coins) + " Treasure Shards"); + } + + if (gadget.GetCost(CurrencyType.Coins) > 0 && getDonationManager().Get(getPlayer().getName()).GetBalance(CurrencyType.Coins) >= gadget.GetCost(CurrencyType.Coins)) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Purchase"); + + addButton(slot, new ShopItem(Material.INK_SACK, (byte) 8, gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false), new GadgetButton(gadget, this)); + } + else if (gadget.GetCost(CurrencyType.Coins) > 0) + { + itemLore.add(C.cBlack); + itemLore.add(C.cRed + "Not enough Treasure Shards."); + + setItem(slot, new ShopItem(Material.INK_SACK, (byte)8, gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); + } + else + { + setItem(slot, new ShopItem(Material.INK_SACK, (byte)8, gadget.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); + } + } + } public void purchaseGadget(final Player player, final Gadget gadget) { + //Dont allow purchase! + if (gadget instanceof ItemGadget) + { + ItemGadget itemGadget = (ItemGadget)gadget; + + if (itemGadget.getAmmo().GetCost(CurrencyType.Coins) < 0) + return; + } + if(getClientManager().Get(player).isDisguised()) { UtilPlayer.message(player, F.main("Disguise", "You cant buy things while you are disguised!")); @@ -148,27 +324,27 @@ public class GadgetPage extends ShopPageBase public void activateGadget(Player player, Gadget gadget) { - if (gadget instanceof ItemGadget) - { - if (getPlugin().getInventoryManager().Get(player).getItemCount(gadget.GetName()) <= 0) - { - purchaseGadget(player, gadget); - return; - } - } - + // if (gadget instanceof ItemGadget) + // { + // if (getPlugin().getInventoryManager().Get(player).getItemCount(gadget.GetName()) <= 0) + // { + // purchaseGadget(player, gadget); + // return; + // } + // } + playAcceptSound(player); gadget.Enable(player); - + getShop().openPageForPlayer(getPlayer(), new Menu(getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); } public void handleRightClick(Player player, Gadget gadget) { - if (gadget instanceof ItemGadget) - { - purchaseGadget(player, gadget); - } + // if (gadget instanceof ItemGadget) + // { + // purchaseGadget(player, gadget); + // } } public void deactivateGadget(Player player, Gadget gadget) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/HatPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/HatPage.java new file mode 100644 index 000000000..54da91d25 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/HatPage.java @@ -0,0 +1,57 @@ +package mineplex.core.cosmetic.ui.page; + +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.cosmetic.CosmeticManager; +import mineplex.core.cosmetic.ui.CosmeticShop; +import mineplex.core.donation.DonationManager; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.gadget.types.GadgetType; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; + +public class HatPage extends GadgetPage +{ + + + public HatPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, + Player player) + { + super(plugin, shop, clientManager, donationManager, name, player); + } + + @Override + protected void buildPage() + { + int slot = 19; + + List list = getPlugin().getGadgetManager().getGadgets(GadgetType.Hat); + if(list != null) + for (Gadget gadget : list) + { + addGadget(gadget, slot); + + if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Hat) == gadget) + addGlow(slot); + + slot++; + + if (slot == 26) + slot = 28; + } + + addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + { + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new Menu(getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java index e77751779..76077f8f6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/Menu.java @@ -1,20 +1,34 @@ package mineplex.core.cosmetic.ui.page; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; + import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Creature; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; -import org.bukkit.inventory.ItemStack; import mineplex.core.account.CoreClientManager; import mineplex.core.common.CurrencyType; import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.NautArrayList; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilUI; import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.cosmetic.ui.CosmeticShop; +import mineplex.core.cosmetic.ui.button.OpenArrowTrails; import mineplex.core.cosmetic.ui.button.OpenCostumes; +import mineplex.core.cosmetic.ui.button.OpenDeathAnimations; +import mineplex.core.cosmetic.ui.button.OpenDoubleJump; import mineplex.core.cosmetic.ui.button.OpenGadgets; +import mineplex.core.cosmetic.ui.button.OpenHats; import mineplex.core.cosmetic.ui.button.OpenMorphs; import mineplex.core.cosmetic.ui.button.OpenMounts; import mineplex.core.cosmetic.ui.button.OpenMusic; @@ -25,11 +39,13 @@ import mineplex.core.donation.Donor; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.mount.Mount; +import mineplex.core.pet.Pet; import mineplex.core.shop.item.IButton; import mineplex.core.shop.item.ShopItem; import mineplex.core.shop.page.ConfirmationPage; import mineplex.core.shop.page.ShopPageBase; import mineplex.core.treasure.TreasureKey; +import mineplex.core.treasure.TreasureType; public class Menu extends ShopPageBase { @@ -43,124 +59,182 @@ public class Menu extends ShopPageBase @Override protected void buildPage() { - Donor donor = getDonationManager().Get(getPlayer()); + // Treasure Shards + int treasureShards = getDonationManager().Get(getPlayer()).getCoins(); -// addItem(2, new ShopItem(CurrencyType.Gems.GetDisplayMaterial(), donor.GetGems() + " Gems", new String[] { -// " " -// }, 1, false)); + List shardLore = new ArrayList(); + shardLore.add(" "); + shardLore.add(C.cGray + "This seems like it might come in"); + shardLore.add(C.cGray + "handy. Maybe I can collect more!"); + ShopItem shards = new ShopItem(Material.PRISMARINE_SHARD, C.cAqua + C.Bold + treasureShards + " Treasure Shards", shardLore.toArray(new String[0]), 0, false); + addItem(4, shards); - addItem(4, new ShopItem(175, getDonationManager().Get(getPlayer().getName()).getCoins() + " Coins", new String[] + // Cosmetic Items +// int[] slots = UtilUI.getIndicesFor(12, 2); + int particleSlot = 10;//slots[0]; + int arrowSlot = 12;//slots[1]; + int jumpSlot = 14;//slots[2]; + int deathSlot = 16;//slots[3]; + int gadgetSlot = 28;//slots[4]; + int morphSlot = 30;//slots[5]; + int mountSlot = 32;//slots[6]; + int petSlot = 34;//slots[7]; + int hatSlot = 46;//slots[8]; + int costumeSlot = 48;//slots[9]; + int musicSlot = 50;//slots[10]; + int tauntSlot = 52;//slots[11]; + + EnumMap ownedCount = new EnumMap(GadgetType.class); + EnumMap maxCount = new EnumMap(GadgetType.class); + EnumMap enabled = new EnumMap(GadgetType.class); + + for(GadgetType type : GadgetType.values()) + { + ownedCount.put(type, 0); + maxCount.put(type, 0); + + List gadgets = getPlugin().getGadgetManager().getGadgets(type); + if (gadgets != null) + { + for (Gadget gadget : gadgets) { - " ", - ChatColor.RESET + C.cYellow + "Purchase Coins", - ChatColor.RESET + "www.mineplex.com/shop", - " ", - ChatColor.RESET + C.cAqua + "Ultra Rank", - ChatColor.RESET + "Receives 7500 Coins per Month", - " ", - ChatColor.RESET + C.cPurple + "Hero Rank", - ChatColor.RESET + "Receives 15000 Coins per Month", - " ", - ChatColor.RESET + C.cGreen + "Legend Rank", - ChatColor.RESET + "Receives 30000 Coins per Month" - }, 1, false)); - -// addItem(6, new ShopItem(Material.GOLD_INGOT, donor.getGold() + " Gold", new String[] { -// " " -// }, 1, false)); - - addButton(18, new ShopItem(Material.NETHER_STAR, "Particle Effects", 1, false), new OpenParticles(this)); - addButton(20, new ShopItem(Material.BOW, "Gadgets", 1, false), new OpenGadgets(this)); - addButton(22, new ShopItem(Material.LEATHER, "Morphs", 1, false), new OpenMorphs(this)); - addButton(24, new ShopItem(Material.IRON_BARDING, "Mounts", 1, false), new OpenMounts(this)); - addButton(26, new ShopItem(Material.BONE, "Pets", 1, false), new OpenPets(this)); - // - addButton(48, new ShopItem(Material.GOLD_CHESTPLATE, "Costumes", 1, false), new OpenCostumes(this)); - addButton(50, new ShopItem(Material.GREEN_RECORD, "Music", 1, false), new OpenMusic(this)); - - if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Particle) != null) - { - final Gadget gadget = getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Particle); - - addButton(18 + 9, - new ShopItem(gadget.GetDisplayMaterial(), gadget.GetDisplayData(), ChatColor.RESET + C.mItem + gadget.GetName(), new String[]{}, 1, false, false), - new IButton() + if (gadget.ownsGadget(getPlayer())) { - public void onClick(Player player, ClickType clickType) - { - playAcceptSound(player); - gadget.Disable(player); - refresh(); - } - }); + ownedCount.put(type, ownedCount.get(type) + 1); + } + + maxCount.put(type, maxCount.get(type) + 1); + } + } + + final Gadget gadget = getPlugin().getGadgetManager().getActive(getPlayer(), type); + if(gadget != null) enabled.put(type, gadget); } - if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Item) != null) + int mountOwned = 0; + int mountMax = 0; + Mount mountActive = getPlugin().getMountManager().getActive(getPlayer()); + for (Mount mount : getPlugin().getMountManager().getMounts()) { - final Gadget gadget = getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Item); + if (getDonationManager().Get(getPlayer()).OwnsUnknownPackage(mount.GetName()) || mount.HasMount(getPlayer())) + { + mountOwned++; + } - addButton(20 + 9, - new ShopItem(gadget.GetDisplayMaterial(), gadget.GetDisplayData(), ChatColor.RESET + C.mItem + gadget.GetName(), new String[]{}, 1, false, false), - new IButton() - { - public void onClick(Player player, ClickType clickType) - { - playAcceptSound(player); - gadget.Disable(player); - refresh(); - } - }); - } - - if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Morph) != null) - { - final Gadget gadget = getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Morph); - - addButton(22 + 9, - new ShopItem(gadget.GetDisplayMaterial(), gadget.GetDisplayData(), ChatColor.RESET + C.mItem + gadget.GetName(), new String[]{}, 1, false, false), - new IButton() - { - public void onClick(Player player, ClickType clickType) - { - playAcceptSound(player); - gadget.Disable(player); - refresh(); - } - }); + mountMax++; } - if (getPlugin().getMountManager().getActive(getPlayer()) != null) + int petOwned = 0; + int petMax = 0; + for (Pet pet : getPlugin().getPetManager().GetFactory().GetPets()) { - final Mount mount = getPlugin().getMountManager().getActive(getPlayer()); + NautHashMap pets = getPlugin().getPetManager().Get(getPlayer()).GetPets(); + if (pets != null && pets.containsKey(pet.GetPetType())) + { + petOwned++; + } - addButton(24 + 9, - new ShopItem(mount.GetDisplayMaterial(), mount.GetDisplayData(), ChatColor.RESET + C.mItem + mount.GetName(), new String[]{}, 1, false, false), - new IButton() - { - public void onClick(Player player, ClickType clickType) - { - playAcceptSound(player); - mount.Disable(player); - refresh(); - } - }); + petMax++; } + Creature petActive = getPlugin().getPetManager().GetPet(getPlayer()); - if (getPlugin().getPetManager().hasActivePet(getPlayer().getName())) + GadgetType type = GadgetType.Particle; + String[] lore = getLore(ownedCount.get(type), maxCount.get(type), "Show everyone how cool you are with swirly particles that follow you when you walk!", "Visible Everywhere", enabled.get(type)); + addButton(particleSlot, new ShopItem(Material.NETHER_STAR, "Particle Effects", lore, 1, false), new OpenParticles(this, enabled.get(type))); + if (enabled.containsKey(type)) addGlow(particleSlot); + + type = GadgetType.ArrowTrail; + lore = getLore(ownedCount.get(type), maxCount.get(type), "Your arrows will now leave particle trails as they soar through the air.", "Visible in Games", enabled.get(type)); + addButton(arrowSlot, new ShopItem(Material.ARROW, "Arrow Trails", lore, 1, false), new OpenArrowTrails(this, enabled.get(type))); + if (enabled.containsKey(type)) addGlow(arrowSlot); + + type = GadgetType.DoubleJump; + lore = getLore(ownedCount.get(type), maxCount.get(type), "Demonstrate your parkour prowess with sweet particles when you double jump.", "Visible Everywhere", enabled.get(type)); + addButton(jumpSlot, new ShopItem(Material.GOLD_BOOTS, "Double Jump Effects", lore, 1, false), new OpenDoubleJump(this, enabled.get(type))); + if (enabled.containsKey(type)) addGlow(jumpSlot); + + type = GadgetType.Death; + lore = getLore(ownedCount.get(type), maxCount.get(type), "Your death will now be mourned with a wonderful particle tribute.", "Visible in Games", enabled.get(type)); + addButton(deathSlot, new ShopItem(Material.SKULL_ITEM, "Death Animations", lore, 1, false), new OpenDeathAnimations(this, enabled.get(type))); + if (enabled.containsKey(type)) addGlow(deathSlot); + + type = GadgetType.Item; + lore = getLore(ownedCount.get(type), maxCount.get(type), "All sorts of zaney contraptions to use on your friends and foes.", "Usable in Lobbies", enabled.get(type)); + addButton(gadgetSlot, new ShopItem(Material.MELON_BLOCK, "Gadgets", lore, 1, false), new OpenGadgets(this, enabled.get(type))); + if (enabled.containsKey(type)) addGlow(gadgetSlot); + + type = GadgetType.Morph; + lore = getLore(ownedCount.get(type), maxCount.get(type), "Ever want to be a tiger? Well, you can’t be a tiger! That’s silly! But you can be many other things!", "Usable in Lobbies", enabled.get(type)); + addButton(morphSlot, new ShopItem(Material.LEATHER, "Morphs", lore, 1, false), new OpenMorphs(this, enabled.get(type))); + if (enabled.containsKey(type)) addGlow(morphSlot); + + lore = getLore(mountOwned, mountMax, "Why walk when you can ride? Summon fancy mounts to help you move in style.", "Usable in Lobbies", mountActive == null ? null : mountActive.GetName()); + addButton(mountSlot, new ShopItem(Material.IRON_BARDING, "Mounts", lore, 1, false), new OpenMounts(this, mountActive)); + if (mountActive != null) addGlow(mountSlot); + + lore = getLore(petOwned, petMax, "Life on a server can get lonely sometimes. Summon an adorable pet to follow you around and cheer you up!", "Usable in Lobbies", petActive == null ? null : petActive.getCustomName()); + addButton(petSlot, new ShopItem(Material.BONE, "Pets", lore, 1, false), new OpenPets(this)); + if (petActive != null) addGlow(petSlot); + + type = GadgetType.Hat; + lore = getLore(ownedCount.get(type), maxCount.get(type), "Hats are in this year. Wear them on your head to impress the ladies.", "Usable in Lobbies", enabled.get(type)); + addButton(hatSlot, new ShopItem(Material.GOLD_HELMET, "Hats", lore, 1, false), new OpenHats(this, enabled.get(type))); + if (enabled.containsKey(type)) addGlow(hatSlot); + + type = GadgetType.Costume; + lore = getLore(ownedCount.get(type), maxCount.get(type), "Sometimes going out calls for special clothes! Gain bonus effects for matching outfit.", "Usable in Lobbies", enabled.get(type)); + addButton(costumeSlot, new ShopItem(Material.DIAMOND_CHESTPLATE, "Costumes", lore, 1, false), new OpenCostumes(this, enabled.get(type))); + if (enabled.containsKey(type)) addGlow(costumeSlot); + + type = GadgetType.MusicDisc; + lore = getLore(ownedCount.get(type), maxCount.get(type), "I JUST WANT TO DANCE WITH YOU!", "Usable in Lobbies", enabled.get(type)); + addButton(musicSlot, new ShopItem(Material.GREEN_RECORD, "Music", lore, 1, false), new OpenMusic(this, enabled.get(type))); + if (enabled.containsKey(type)) addGlow(musicSlot); + + addButton(tauntSlot, new ShopItem(Material.NAME_TAG, "Taunts", new String[]{C.Bold + "", C.cDGreen + C.Italics + "Coming soon!"}, 1, false), new IButton() { - Creature activePet = getPlugin().getPetManager().getActivePet(getPlayer().getName()); - String petName = activePet.getType() == EntityType.WITHER ? "Widder" : activePet.getCustomName(); - addButton(26 + 9, new ShopItem(Material.MONSTER_EGG, (byte) getPlugin().getPetManager().getActivePet(getPlayer().getName()).getType().getTypeId(), ChatColor.RESET + C.mItem + petName, new String[]{}, 1, false, false), - new IButton() - { - public void onClick(Player player, ClickType clickType) - { - playAcceptSound(player); - getPlugin().getPetManager().RemovePet(player, true); - refresh(); - } - }); + @Override + public void onClick(Player player, ClickType clickType) + { + player.sendMessage(F.main("Shop", "Coming soon!")); + } + }); + } + + private String[] getLore(int ownedCount, int maxCount, String info, String visibility, Gadget enabled) + { + return getLore(ownedCount, maxCount, info, visibility, enabled == null ? null : enabled.GetName()); + } + + private String[] getLore(int ownedCount, int maxCount,String info, String visibility, String enabled) + { + if (enabled != null) + { + return UtilText.splitLinesToArray(new String[] { + C.blankLine, + C.cGray + info, + C.cDGray + visibility, + C.blankLine, + C.cWhite + "You own " + ownedCount + "/" + maxCount, + C.blankLine, + C.cWhite + "Active: " + C.cYellow + enabled, + C.cGreen + "Right-Click to Disable", + C.blankLine, + C.cGreen + "Left-Click to View Category" + }, LineFormat.LORE); + } + else + { + return UtilText.splitLinesToArray(new String[] { + C.blankLine, + C.cGray + info, + C.cDGray + visibility, + C.blankLine, + C.cWhite + "You own " + ownedCount + "/" + maxCount, + C.blankLine, + C.cGreen + "Left-Click to View Category" + }, LineFormat.LORE); } } @@ -173,16 +247,4 @@ public class Menu extends ShopPageBase { getShop().openPageForPlayer(player, new MusicPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), "Music", player)); } - - public void attemptPurchaseKey(Player player) - { - getShop().openPageForPlayer(player, new ConfirmationPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), new Runnable() - { - public void run() - { - getPlugin().getInventoryManager().addItemToInventory(getPlayer(), "Treasure Key", 1); - refresh(); - } - }, this, new TreasureKey(), CurrencyType.Coins, getPlayer())); - } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/MorphPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/MorphPage.java index 508a58276..fb425172d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/MorphPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/MorphPage.java @@ -37,6 +37,8 @@ public class MorphPage extends GadgetPage if (slot == 26) slot = 28; + if (slot == 35) + slot = 37; } addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/MountPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/MountPage.java index 2ed930507..356635962 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/MountPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/MountPage.java @@ -24,65 +24,137 @@ import mineplex.core.shop.page.ShopPageBase; public class MountPage extends ShopPageBase { - public MountPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player) - { - super(plugin, shop, clientManager, donationManager, name, player, 54); - - buildPage(); - } - - protected void buildPage() - { - int slot = 19; - - for (Mount mount : getPlugin().getMountManager().getMounts()) - { - addMount(mount, slot); - slot++; - - if (slot == 26) - slot = 28; - } - - addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + public MountPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player) + { + super(plugin, shop, clientManager, donationManager, name, player, 54); + + buildPage(); + } + + protected void buildPage() + { + int slot = 19; + + for (Mount mount : getPlugin().getMountManager().getMounts()) + { + addMount(mount, slot); + slot++; + + if (slot == 26) + slot = 28; + } + + addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() { public void onClick(Player player, ClickType clickType) { getShop().openPageForPlayer(getPlayer(), new Menu(getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); } }); - } - - protected void addMount(Mount mount, int slot) - { - List itemLore = new ArrayList(); - - if (mount.GetCost(CurrencyType.Coins) != -1) - { - itemLore.add(C.cYellow + mount.GetCost(CurrencyType.Coins) + " Coins"); - } - - itemLore.add(C.cBlack); - itemLore.addAll(Arrays.asList(mount.GetDescription())); - - if (getDonationManager().Get(getPlayer().getName()).OwnsUnknownPackage(mount.GetName())) - { - if (mount.GetActive().containsKey(getPlayer())) - { - addButton(slot, new ShopItem(mount.GetDisplayMaterial(), mount.GetDisplayData(), "Deactivate " + mount.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new DeactivateMountButton(mount, this)); - } - else - { - addButton(slot, new ShopItem(mount.GetDisplayMaterial(), mount.GetDisplayData(), "Activate " + mount.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new ActivateMountButton(mount, this)); - } - } - else - { - if (mount.GetCost(CurrencyType.Coins) != -1 && getDonationManager().Get(getPlayer().getName()).GetBalance(CurrencyType.Coins) >= mount.GetCost(CurrencyType.Coins)) - addButton(slot, new ShopItem(mount.GetDisplayMaterial(), mount.GetDisplayData(), (mount.GetCost(CurrencyType.Coins) < 0 ? "" : "Purchase ") + mount.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new MountButton(mount, this)); - else - setItem(slot, new ShopItem(mount.GetDisplayMaterial(), mount.GetDisplayData(), (mount.GetCost(CurrencyType.Coins) < 0 ? "" : "Purchase ") + mount.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); - } - - } + } + + protected void addMount(Mount mount, int slot) + { + List itemLore = new ArrayList(); + + itemLore.add(C.cBlack); + itemLore.addAll(Arrays.asList(mount.GetDescription())); + + if (!getDonationManager().Get(getPlayer().getName()).OwnsUnknownPackage(mount.GetName())) + { + if (mount.GetCost(CurrencyType.Coins) == -1) + { + //Nothing + } + //Chest Unlocks + else if (mount.GetCost(CurrencyType.Coins) == -2 || mount.GetCost(CurrencyType.Coins) > 0) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Treasure Chests"); + } + else if (mount.GetCost(CurrencyType.Coins) == -3) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Winter Holiday Treasure"); + } + else if (mount.GetCost(CurrencyType.Coins) == -4) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Halloween Pumpkin Treasure"); + } + else if (mount.GetCost(CurrencyType.Coins) == -5) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Easter Holiday Treasure"); + } + //Rank Unlocks + else if (mount.GetCost(CurrencyType.Coins) == -10) + { + itemLore.add(C.cBlack); + itemLore.add(C.cAqua + "Unlocked with Ultra Rank"); + } + else if (mount.GetCost(CurrencyType.Coins) == -11) + { + itemLore.add(C.cBlack); + itemLore.add(C.cPurple + "Unlocked with Hero Rank"); + } + else if (mount.GetCost(CurrencyType.Coins) == -12) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Unlocked with Legend Rank"); + } + else if (mount.GetCost(CurrencyType.Coins) == -13) + { + itemLore.add(C.cBlack); + itemLore.add(C.cRed + "Unlocked with Titan Rank"); + } + } + + + if (getDonationManager().Get(getPlayer().getName()).OwnsUnknownPackage(mount.GetName())) + { + if (mount.GetActive().containsKey(getPlayer())) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Disable"); + + addButton(slot, new ShopItem(mount.GetDisplayMaterial(), mount.GetDisplayData(), mount.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new DeactivateMountButton(mount, this)); + } + else + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Enable"); + + addButton(slot, new ShopItem(mount.GetDisplayMaterial(), mount.GetDisplayData(), mount.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new ActivateMountButton(mount, this)); + } + } + else + { + if (mount.GetCost(CurrencyType.Coins) > 0) + { + itemLore.add(C.cBlack); + itemLore.add(C.cWhiteB + "Cost: " + C.cAqua + mount.GetCost(CurrencyType.Coins) + " Treasure Shards"); + } + + if (mount.GetCost(CurrencyType.Coins) > 0 && getDonationManager().Get(getPlayer().getName()).GetBalance(CurrencyType.Coins) >= mount.GetCost(CurrencyType.Coins)) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Purchase"); + + addButton(slot, new ShopItem(mount.GetDisplayMaterial(), mount.GetDisplayData(), mount.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false), new MountButton(mount, this)); + } + else if (mount.GetCost(CurrencyType.Coins) > 0) + { + itemLore.add(C.cBlack); + itemLore.add(C.cRed + "Not enough Treasure Shards."); + + setItem(slot, new ShopItem(mount.GetDisplayMaterial(), mount.GetDisplayData(), mount.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); + } + else + { + setItem(slot, new ShopItem(mount.GetDisplayMaterial(), mount.GetDisplayData(), mount.GetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); + } + } + + } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/ParticlePage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/ParticlePage.java index 97d39abbb..94f34f5eb 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/ParticlePage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/ParticlePage.java @@ -30,7 +30,7 @@ public class ParticlePage extends GadgetPage { addGadget(gadget, slot); - if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Morph) == gadget) + if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Particle) == gadget) addGlow(slot); slot++; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/PetPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/PetPage.java index cd562f903..4e796c47e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/PetPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/PetPage.java @@ -61,27 +61,60 @@ public class PetPage extends ShopPageBase { List itemLore = new ArrayList(); - //Halloween Name - if (pet.GetCost(CurrencyType.Coins) == -1) + itemLore.add(C.cBlack); + itemLore.add(C.cGray + "Your very own " + pet.GetName() + "!"); + + //Chest Unlocks + if (!getPlugin().getPetManager().Get(getPlayer()).GetPets().containsKey(pet.GetPetType())) { - if (pet instanceof Pumpkin) - { - itemLore.add(C.cBlack); - itemLore.add(ChatColor.RESET + C.cYellow + "Earned by defeating the Pumpkin King"); - itemLore.add(ChatColor.RESET + C.cYellow + "in the 2014 Halloween Horror Event."); - } - if (pet instanceof Elf) - { - itemLore.add(C.cBlack); - itemLore.add(ChatColor.RESET + C.cYellow + "Earned by defeating the Pumpkin King"); - itemLore.add(ChatColor.RESET + C.cYellow + "in the 2014 Christmas Chaos Event."); - } - if (pet.GetPetType() == EntityType.WITHER) - { - itemLore.add(C.cBlack); - itemLore.add(ChatColor.RESET + C.cGreen + "Unlocked with Legend Rank"); - } - } + if (pet.GetCost(CurrencyType.Coins) == -1) + { + //Nothing + } + + else if (pet.GetCost(CurrencyType.Coins) == -2 || pet.GetCost(CurrencyType.Coins) > 0) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Treasure Chests"); + } + else if (pet.GetCost(CurrencyType.Coins) == -3) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Winter Holiday Treasure"); + } + else if (pet.GetCost(CurrencyType.Coins) == -4) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Halloween Pumpkin Treasure"); + } + else if (pet.GetCost(CurrencyType.Coins) == -5) + { + itemLore.add(C.cBlack); + itemLore.add(C.cBlue + "Found in Easter Holiday Treasure"); + } + + //Rank Unlocks + else if (pet.GetCost(CurrencyType.Coins) == -10) + { + itemLore.add(C.cBlack); + itemLore.add(C.cAqua + "Unlocked with Ultra Rank"); + } + else if (pet.GetCost(CurrencyType.Coins) == -11) + { + itemLore.add(C.cBlack); + itemLore.add(C.cPurple + "Unlocked with Hero Rank"); + } + else if (pet.GetCost(CurrencyType.Coins) == -12) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Unlocked with Legend Rank"); + } + else if (pet.GetCost(CurrencyType.Coins) == -13) + { + itemLore.add(C.cBlack); + itemLore.add(C.cRed + "Unlocked with Titan Rank"); + } + } //Owned if (getPlugin().getPetManager().Get(getPlayer()).GetPets().containsKey(pet.GetPetType())) @@ -94,35 +127,52 @@ public class PetPage extends ShopPageBase if (getPlugin().getPetManager().hasActivePet(getPlayer().getName()) && getPlugin().getPetManager().getActivePet(getPlayer().getName()).getType() == pet.GetPetType()) { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Disable"); + addButton(slot, new ShopItem(Material.MONSTER_EGG, (byte) pet.GetPetType().getTypeId(), - "Deactivate " + pet.GetPetName() + " (" + C.cWhite + petName + C.cGreen + ")", + pet.GetPetName() + " (" + C.cWhite + petName + C.cGreen + ")", itemLore.toArray(new String[itemLore.size()]), 1, false, false), new DeactivatePetButton(this, getPlugin().getPetManager())); addGlow(slot); } else { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Enable"); + addButton(slot, new ShopItem(Material.MONSTER_EGG, (byte) pet.GetPetType().getTypeId(), - "Activate " + pet.GetPetName() + " (" + C.cWhite + petName + C.cGreen + ")", + pet.GetPetName() + " (" + C.cWhite + petName + C.cGreen + ")", itemLore.toArray(new String[itemLore.size()]), 1, false, false), new ActivatePetButton(pet, this)); } } //Not Owned else { - //Cost Lore if (pet.GetCost(CurrencyType.Coins) > 0) - { - itemLore.add(C.cYellow + pet.GetCost(CurrencyType.Coins) + " Coins"); - itemLore.add(C.cBlack); - } + { + itemLore.add(C.cBlack); + itemLore.add(C.cWhiteB + "Cost: " + C.cAqua + pet.GetCost(CurrencyType.Coins) + " Treasure Shards"); + } - if (pet.GetCost(CurrencyType.Coins) == -1) + if (pet.GetCost(CurrencyType.Coins) > 0 && getDonationManager().Get(getPlayer().getName()).GetBalance(CurrencyType.Coins) >= pet.GetCost(CurrencyType.Coins)) + { + itemLore.add(C.cBlack); + itemLore.add(C.cGreen + "Click to Purchase"); + + addButton(slot, new ShopItem(Material.INK_SACK, (byte) 8, pet.GetPetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false), new PetButton(pet, this)); + } + else if (pet.GetCost(CurrencyType.Coins) > 0) + { + itemLore.add(C.cBlack); + itemLore.add(C.cRed + "Not enough Treasure Shards."); + setItem(slot, new ShopItem(Material.INK_SACK, (byte)8, pet.GetPetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); - else if (getDonationManager().Get(getPlayer().getName()).GetBalance(CurrencyType.Coins) >= pet.GetCost(CurrencyType.Coins)) - addButton(slot, new ShopItem(Material.INK_SACK, (byte) 8, "Purchase " + pet.GetPetName(), itemLore.toArray(new String[itemLore.size()]), 1, false, false), new PetButton(pet, this)); + } else - setItem(slot, new ShopItem(Material.INK_SACK, (byte)8, "Purchase " + pet.GetPetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); + { + setItem(slot, new ShopItem(Material.INK_SACK, (byte)8, pet.GetPetName(), itemLore.toArray(new String[itemLore.size()]), 1, true, false)); + } } slot++; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/TauntPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/TauntPage.java new file mode 100644 index 000000000..93aeac8d5 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/TauntPage.java @@ -0,0 +1,57 @@ +package mineplex.core.cosmetic.ui.page; + +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.cosmetic.CosmeticManager; +import mineplex.core.cosmetic.ui.CosmeticShop; +import mineplex.core.donation.DonationManager; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.gadget.types.GadgetType; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; + +public class TauntPage extends GadgetPage +{ + + + public TauntPage(CosmeticManager plugin, CosmeticShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, + Player player) + { + super(plugin, shop, clientManager, donationManager, name, player); + } + + @Override + protected void buildPage() + { + int slot = 19; + + List list = getPlugin().getGadgetManager().getGadgets(GadgetType.Taunt); + if(list != null) + for (Gadget gadget : list) + { + addGadget(gadget, slot); + + if (getPlugin().getGadgetManager().getActive(getPlayer(), GadgetType.Morph) == gadget) + addGlow(slot); + + slot++; + + if (slot == 26) + slot = 28; + } + + addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + { + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new Menu(getPlugin(), getShop(), getClientManager(), getDonationManager(), player)); + } + }); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/disguise/DisguiseManager.java b/Plugins/Mineplex.Core/src/mineplex/core/disguise/DisguiseManager.java index 4b39e5a77..ee25da25d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/disguise/DisguiseManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/disguise/DisguiseManager.java @@ -9,35 +9,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Map.Entry; -import net.minecraft.server.v1_8_R3.Block; -import net.minecraft.server.v1_8_R3.BlockPosition; -import net.minecraft.server.v1_8_R3.Chunk; -import net.minecraft.server.v1_8_R3.ChunkSection; -import net.minecraft.server.v1_8_R3.EntityTrackerEntry; -import net.minecraft.server.v1_8_R3.PacketPlayOutAnimation; -import net.minecraft.server.v1_8_R3.EntityPlayer; -import net.minecraft.server.v1_8_R3.Packet; -import net.minecraft.server.v1_8_R3.PacketPlayOutBed; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntity; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntityStatus; -import net.minecraft.server.v1_8_R3.PacketPlayOutMapChunk; -import net.minecraft.server.v1_8_R3.PacketPlayOutMapChunkBulk; -import net.minecraft.server.v1_8_R3.PacketPlayOutNamedEntitySpawn; -import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntity.PacketPlayOutRelEntityMove; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntity.PacketPlayOutRelEntityMoveLook; -import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo.PlayerInfoData; -import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntity; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntityVelocity; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntityDestroy; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntityTeleport; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntityMetadata; -import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving; -import net.minecraft.server.v1_8_R3.PacketPlayOutUpdateAttributes; -import net.minecraft.server.v1_8_R3.PacketPlayOutEntityEquipment; -import net.minecraft.server.v1_8_R3.PacketPlayOutNamedSoundEffect; -import net.minecraft.server.v1_8_R3.WorldServer; - import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -73,11 +44,39 @@ import mineplex.core.disguise.disguises.DisguisePlayer; import mineplex.core.disguise.disguises.DisguiseRabbit; import mineplex.core.packethandler.IPacketHandler; import mineplex.core.packethandler.PacketHandler; -import mineplex.core.packethandler.PacketVerifier; import mineplex.core.packethandler.PacketInfo; +import mineplex.core.packethandler.PacketVerifier; import mineplex.core.timing.TimingManager; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; +import net.minecraft.server.v1_8_R3.Block; +import net.minecraft.server.v1_8_R3.BlockPosition; +import net.minecraft.server.v1_8_R3.Chunk; +import net.minecraft.server.v1_8_R3.ChunkSection; +import net.minecraft.server.v1_8_R3.EntityPlayer; +import net.minecraft.server.v1_8_R3.EntityTrackerEntry; +import net.minecraft.server.v1_8_R3.Packet; +import net.minecraft.server.v1_8_R3.PacketPlayOutAnimation; +import net.minecraft.server.v1_8_R3.PacketPlayOutBed; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntity; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntity.PacketPlayOutRelEntityMove; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntity.PacketPlayOutRelEntityMoveLook; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntityDestroy; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntityEquipment; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntityMetadata; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntityStatus; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntityTeleport; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntityVelocity; +import net.minecraft.server.v1_8_R3.PacketPlayOutMapChunk; +import net.minecraft.server.v1_8_R3.PacketPlayOutMapChunkBulk; +import net.minecraft.server.v1_8_R3.PacketPlayOutNamedEntitySpawn; +import net.minecraft.server.v1_8_R3.PacketPlayOutNamedSoundEffect; +import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo; +import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo.PlayerInfoData; +import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntity; +import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving; +import net.minecraft.server.v1_8_R3.PacketPlayOutUpdateAttributes; +import net.minecraft.server.v1_8_R3.WorldServer; public class DisguiseManager extends MiniPlugin implements IPacketHandler { @@ -382,9 +381,9 @@ public class DisguiseManager extends MiniPlugin implements IPacketHandler for (Player player : players) addViewerToDisguise(disguise, player, false); - if (disguise.GetEntity() instanceof Player && disguise instanceof DisguisePlayer) + if (disguise.GetEntity() instanceof EntityPlayer && disguise instanceof DisguisePlayer) { - if (!((Player) disguise.GetEntity()).getName().equalsIgnoreCase(((DisguisePlayer) disguise).getName())) + if (!((EntityPlayer) disguise.GetEntity()).getName().equalsIgnoreCase(((DisguisePlayer) disguise).getName())) { _blockedNames.add(((Player) disguise.GetEntity()).getName()); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguisePlayer.java b/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguisePlayer.java index d5f933f83..d81a3086e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguisePlayer.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguisePlayer.java @@ -2,29 +2,25 @@ package mineplex.core.disguise.disguises; import java.util.UUID; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.BlockFace; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; import com.mojang.authlib.GameProfile; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; +import mineplex.core.common.skin.SkinData; import net.minecraft.server.v1_8_R3.MathHelper; import net.minecraft.server.v1_8_R3.Packet; -import net.minecraft.server.v1_8_R3.PacketPlayInSettings; import net.minecraft.server.v1_8_R3.PacketPlayOutNamedEntitySpawn; import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo; -import net.minecraft.server.v1_8_R3.WorldSettings; import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo.EnumPlayerInfoAction; +import net.minecraft.server.v1_8_R3.WorldSettings; public class DisguisePlayer extends DisguiseHuman { private GameProfile _profile; private boolean _sneaking; private BlockFace _sleeping; + private boolean _sendSkinToSelf; public DisguisePlayer(org.bukkit.entity.Entity entity) { @@ -46,6 +42,29 @@ public class DisguisePlayer extends DisguiseHuman _profile = newProfile; } + + public GameProfile getProfile() + { + return _profile; + } + + public void setSkinData(SkinData skin) + { + _profile.getProperties().put("textures", skin.getProperty()); + } + + /** + * Currently not working. + */ + public void setSendSkinDataToSelf(boolean sendToSelf) + { + _sendSkinToSelf = sendToSelf; + } + + public boolean getSendSkinDataToSelf() + { + return _sendSkinToSelf; + } public BlockFace getSleepingDirection() { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java index bb17d1e2f..449a4e52f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java @@ -1,73 +1,9 @@ package mineplex.core.gadget; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; - -import mineplex.core.MiniPlugin; -import mineplex.core.account.CoreClientManager; -import mineplex.core.achievement.AchievementManager; -import mineplex.core.blockrestore.BlockRestore; -import mineplex.core.common.Rank; -import mineplex.core.common.util.NautHashMap; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilTime; -import mineplex.core.disguise.DisguiseManager; -import mineplex.core.donation.DonationManager; -import mineplex.core.gadget.event.GadgetActivateEvent; -import mineplex.core.gadget.event.GadgetCollideEntityEvent; -import mineplex.core.gadget.gadgets.ItemBatGun; -import mineplex.core.gadget.gadgets.ItemCoinBomb; -import mineplex.core.gadget.gadgets.ItemDuelingSword; -import mineplex.core.gadget.gadgets.ItemEtherealPearl; -import mineplex.core.gadget.gadgets.ItemFirework; -import mineplex.core.gadget.gadgets.ItemFleshHook; -import mineplex.core.gadget.gadgets.ItemMelonLauncher; -import mineplex.core.gadget.gadgets.ItemPaintballGun; -import mineplex.core.gadget.gadgets.ItemPaintbrush; -import mineplex.core.gadget.gadgets.ItemTNT; -import mineplex.core.gadget.gadgets.MorphBat; -import mineplex.core.gadget.gadgets.MorphBlaze; -import mineplex.core.gadget.gadgets.MorphBlock; -import mineplex.core.gadget.gadgets.MorphBunny; -import mineplex.core.gadget.gadgets.MorphChicken; -import mineplex.core.gadget.gadgets.MorphCow; -import mineplex.core.gadget.gadgets.MorphCreeper; -import mineplex.core.gadget.gadgets.MorphEnderman; -import mineplex.core.gadget.gadgets.MorphPig; -import mineplex.core.gadget.gadgets.MorphPumpkinKing; -import mineplex.core.gadget.gadgets.MorphSlime; -import mineplex.core.gadget.gadgets.MorphTitan; -import mineplex.core.gadget.gadgets.MorphVillager; -import mineplex.core.gadget.gadgets.MorphWither; -import mineplex.core.gadget.gadgets.OutfitRaveSuit; -import mineplex.core.gadget.gadgets.OutfitSpaceSuit; -import mineplex.core.gadget.gadgets.OutfitTeam; -import mineplex.core.gadget.gadgets.ParticleBlizzard; -import mineplex.core.gadget.gadgets.ParticleEnchant; -import mineplex.core.gadget.gadgets.ParticleFairy; -import mineplex.core.gadget.gadgets.ParticleFireRings; -import mineplex.core.gadget.gadgets.ParticleFoot; -import mineplex.core.gadget.gadgets.ParticleGreen; -import mineplex.core.gadget.gadgets.ParticleHeart; -import mineplex.core.gadget.gadgets.ParticleHelix; -import mineplex.core.gadget.gadgets.ParticleLegend; -import mineplex.core.gadget.gadgets.ParticleRain; -import mineplex.core.gadget.gadgets.ParticleTitan; -import mineplex.core.gadget.types.Gadget; -import mineplex.core.gadget.types.GadgetType; -import mineplex.core.gadget.types.ItemGadget; -import mineplex.core.gadget.types.MorphGadget; -import mineplex.core.gadget.types.MusicGadget; -import mineplex.core.gadget.types.OutfitGadget; -import mineplex.core.gadget.types.OutfitGadget.ArmorSlot; -import mineplex.core.gadget.types.ParticleGadget; -import mineplex.core.inventory.InventoryManager; -import mineplex.core.mount.MountManager; -import mineplex.core.mount.event.MountActivateEvent; -import mineplex.core.pet.PetManager; -import mineplex.core.preferences.PreferencesManager; -import mineplex.core.projectile.ProjectileManager; +import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -82,6 +18,51 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.plugin.java.JavaPlugin; +import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClientManager; +import mineplex.core.achievement.AchievementManager; +import mineplex.core.blockrestore.BlockRestore; +import mineplex.core.common.Rank; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.disguise.DisguiseManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.gadget.event.GadgetCollideEntityEvent; +import mineplex.core.gadget.event.GadgetEnableEvent; +import mineplex.core.gadget.gadgets.arrowtrail.*; +import mineplex.core.gadget.gadgets.death.*; +import mineplex.core.gadget.gadgets.doublejump.*; +import mineplex.core.gadget.gadgets.hat.*; +import mineplex.core.gadget.gadgets.item.*; +import mineplex.core.gadget.gadgets.morph.*; +import mineplex.core.gadget.gadgets.outfit.*; +import mineplex.core.gadget.gadgets.particle.*; +import mineplex.core.gadget.set.SetCandyCane; +import mineplex.core.gadget.set.SetFrostLord; +import mineplex.core.gadget.set.SetRaveSuit; +import mineplex.core.gadget.set.SetSpaceSuit; +import mineplex.core.gadget.set.SetTitan; +import mineplex.core.gadget.types.ArrowEffectGadget; +import mineplex.core.gadget.types.DeathEffectGadget; +import mineplex.core.gadget.types.DoubleJumpEffectGadget; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.gadget.types.GadgetSet; +import mineplex.core.gadget.types.GadgetType; +import mineplex.core.gadget.types.ItemGadget; +import mineplex.core.gadget.types.MusicGadget; +import mineplex.core.gadget.types.OutfitGadget; +import mineplex.core.gadget.types.OutfitGadget.ArmorSlot; +import mineplex.core.gadget.types.ParticleGadget; +import mineplex.core.inventory.InventoryManager; +import mineplex.core.mount.MountManager; +import mineplex.core.mount.event.MountActivateEvent; +import mineplex.core.pet.PetManager; +import mineplex.core.preferences.PreferencesManager; +import mineplex.core.projectile.ProjectileManager; + public class GadgetManager extends MiniPlugin { private CoreClientManager _clientManager; @@ -100,6 +81,8 @@ public class GadgetManager extends MiniPlugin private NautHashMap _lastMove = new NautHashMap(); private NautHashMap> _playerActiveGadgetMap = new NautHashMap>(); + private HashSet _sets = new HashSet<>(); + private boolean _hideParticles = false; private int _activeItemSlot = 3; private boolean _gadgetsEnabled = true; @@ -122,6 +105,19 @@ public class GadgetManager extends MiniPlugin _mountManager = mountManager; CreateGadgets(); + createSets(); + } + + private void createSets() + { + //Particles + addSet(new SetFrostLord(this)); + addSet(new SetCandyCane(this)); + addSet(new SetTitan(this)); + + //Costumes + addSet(new SetRaveSuit(this)); + addSet(new SetSpaceSuit(this)); } private void CreateGadgets() @@ -139,17 +135,21 @@ public class GadgetManager extends MiniPlugin addGadget(new ItemCoinBomb(this)); addGadget(new ItemPaintbrush(this)); addGadget(new ItemDuelingSword(this)); + addGadget(new ItemPartyPopper(this)); + addGadget(new ItemCoal(this)); + addGadget(new ItemFreezeCannon(this)); + addGadget(new ItemSnowball(this)); // Costume - addGadget(new OutfitRaveSuit(this, "Rave Hat", -2, ArmorSlot.Helmet, Material.LEATHER_HELMET, (byte)0)); - addGadget(new OutfitRaveSuit(this, "Rave Shirt", -2, ArmorSlot.Chest, Material.LEATHER_CHESTPLATE, (byte)0)); - addGadget(new OutfitRaveSuit(this, "Rave Pants", -2, ArmorSlot.Legs, Material.LEATHER_LEGGINGS, (byte)0)); - addGadget(new OutfitRaveSuit(this, "Rave Boots", -2, ArmorSlot.Boots, Material.LEATHER_BOOTS, (byte)0)); + addGadget(new OutfitRaveSuitHelmet(this)); + addGadget(new OutfitRaveSuitChestplate(this)); + addGadget(new OutfitRaveSuitLeggings(this)); + addGadget(new OutfitRaveSuitBoots(this)); - addGadget(new OutfitSpaceSuit(this, "Space Helmet", -2, ArmorSlot.Helmet, Material.GLASS, (byte)0)); - addGadget(new OutfitSpaceSuit(this, "Space Jacket", -2, ArmorSlot.Chest, Material.GOLD_CHESTPLATE, (byte)0)); - addGadget(new OutfitSpaceSuit(this, "Space Pants", -2, ArmorSlot.Legs, Material.GOLD_LEGGINGS, (byte)0)); - addGadget(new OutfitSpaceSuit(this, "Space Boots", -2, ArmorSlot.Boots, Material.GOLD_BOOTS, (byte)0)); + addGadget(new OutfitSpaceSuitHelmet(this)); + addGadget(new OutfitSpaceSuitChestplate(this)); + addGadget(new OutfitSpaceSuitLeggings(this)); + addGadget(new OutfitSpaceSuitBoots(this)); addGadget(new OutfitTeam(this, "Team Helmet", -1, ArmorSlot.Helmet, Material.LEATHER_HELMET, (byte)0)); addGadget(new OutfitTeam(this, "Team Shirt", -1, ArmorSlot.Chest, Material.LEATHER_CHESTPLATE, (byte)0)); @@ -171,6 +171,7 @@ public class GadgetManager extends MiniPlugin addGadget(new MorphBunny(this)); addGadget(new MorphSlime(this, _achievementManager)); addGadget(new MorphTitan(this)); + addGadget(new MorphSnowman(this)); // Particles addGadget(new ParticleFoot(this)); @@ -182,9 +183,33 @@ public class GadgetManager extends MiniPlugin addGadget(new ParticleHeart(this)); addGadget(new ParticleFairy(this)); addGadget(new ParticleLegend(this)); - addGadget(new ParticleBlizzard(this)); + addGadget(new ParticleFrostLord(this)); addGadget(new ParticleTitan(this)); - //addGadget(new ParticleKronos(this)); + addGadget(new ParticleCandyCane(this)); + addGadget(new ParticleCoalFumes(this)); + + // Arrow Trails + addGadget(new ArrowTrailFrostLord(this)); + addGadget(new ArrowTrailTitan(this)); + addGadget(new ArrowTrailCandyCane(this)); + + // Death Effect + addGadget(new DeathFrostLord(this)); + addGadget(new DeathTitan(this)); + addGadget(new DeathCandyCane(this)); + + // Double Jump + addGadget(new DoubleJumpFrostLord(this)); + addGadget(new DoubleJumpTitan(this)); + addGadget(new DoubleJumpCandyCane(this)); + + // Hat + addGadget(new HatSanta(this)); + addGadget(new HatSnowman(this)); + addGadget(new HatPresent(this)); + addGadget(new HatCoal(this)); + addGadget(new HatRudolph(this)); + addGadget(new HatGrinch(this)); // Music addGadget(new MusicGadget(this, "13 Disc", new String[] {""}, -2, 2256, 178000)); @@ -200,6 +225,42 @@ public class GadgetManager extends MiniPlugin addGadget(new MusicGadget(this, "Wait Disc", new String[] {""}, -2, 2267, 238000)); } + public Gadget getGadget(Class c) + { + for(GadgetType type : GadgetType.values()) + { + for(Gadget gadget : getGadgets(type)) + { + if(gadget.getClass().equals(c)) return gadget; + } + } + return null; + } + + public Set getSets(Gadget gadget) + { + HashSet hset = new HashSet<>(); + for(GadgetSet set : _sets) + { + if(set.isPartOfSet(gadget)) hset.add(set); + } + return hset; + } + + public GadgetSet getGadgetSet(Class c) + { + for(GadgetSet set : _sets) + { + if(set.getClass().equals(c)) return set; + } + return null; + } + + private void addSet(GadgetSet set) + { + _sets.add(set); + } + private void addGadget(Gadget gadget) { if (!_gadgets.containsKey(gadget.getGadgetType())) @@ -231,6 +292,7 @@ public class GadgetManager extends MiniPlugin return _gadgets.get(gadgetType); } + // Disallows two armor gadgets in same slot. public void RemoveOutfit(Player player, ArmorSlot slot) { @@ -250,52 +312,14 @@ public class GadgetManager extends MiniPlugin } } } - - public void RemoveItem(Player player) - { - for (GadgetType gadgetType : _gadgets.keySet()) - { - for (Gadget gadget : _gadgets.get(gadgetType)) - { - if (gadget instanceof ItemGadget) - { - ItemGadget item = (ItemGadget) gadget; - - item.RemoveItem(player); - } - } - } - } - - public void RemoveParticle(Player player) - { - for (GadgetType gadgetType : _gadgets.keySet()) - { - for (Gadget gadget : _gadgets.get(gadgetType)) - { - if (gadget instanceof ParticleGadget) - { - ParticleGadget part = (ParticleGadget) gadget; - - part.Disable(player); - } - } - } - } - public void RemoveMorph(Player player) + public void removeGadgetType(Player player, GadgetType type) { - for (GadgetType gadgetType : _gadgets.keySet()) + List gadgets = _gadgets.get(type); + if(gadgets == null) return; + for(Gadget g : gadgets) { - for (Gadget gadget : _gadgets.get(gadgetType)) - { - if (gadget instanceof MorphGadget) - { - MorphGadget part = (MorphGadget) gadget; - - part.Disable(player); - } - } + g.Disable(player); } } @@ -307,6 +331,15 @@ public class GadgetManager extends MiniPlugin { if (gadget instanceof ParticleGadget) continue; + + if (gadget instanceof ArrowEffectGadget) + continue; + + if (gadget instanceof DoubleJumpEffectGadget) + continue; + + if (gadget instanceof DeathEffectGadget) + continue; for (Player player : UtilServer.getPlayers()) gadget.Disable(player); @@ -391,7 +424,7 @@ public class GadgetManager extends MiniPlugin @EventHandler public void setMoving(PlayerMoveEvent event) { - if (UtilMath.offset(event.getFrom(), event.getTo()) <= 0) + if (UtilMath.offset(event.getFrom(), event.getTo()) <= 0.1) return; _lastMove.put(event.getPlayer(), System.currentTimeMillis()); @@ -399,6 +432,8 @@ public class GadgetManager extends MiniPlugin public boolean isMoving(Player player) { + if (!UtilEnt.isGrounded(player)) return true; + if (!_lastMove.containsKey(player)) return false; @@ -518,7 +553,7 @@ public class GadgetManager extends MiniPlugin } @EventHandler - public void GadgetActivate(GadgetActivateEvent event) + public void GadgetActivate(GadgetEnableEvent event) { if (!_gadgetsEnabled) event.setCancelled(true); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/event/GadgetDisableEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/event/GadgetDisableEvent.java new file mode 100644 index 000000000..000eace62 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/event/GadgetDisableEvent.java @@ -0,0 +1,43 @@ +package mineplex.core.gadget.event; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import mineplex.core.gadget.types.Gadget; + +public class GadgetDisableEvent extends Event +{ + + private static final HandlerList handlers = new HandlerList(); + + private Player _player; + private Gadget _gadget; + + public GadgetDisableEvent(Player player, Gadget gadget) + { + _player = player; + _gadget = gadget; + } + + public Player getPlayer() + { + return _player; + } + + public Gadget getGadget() + { + return _gadget; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + + public HandlerList getHandlers() + { + return handlers; + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/event/GadgetActivateEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/event/GadgetEnableEvent.java similarity index 88% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/event/GadgetActivateEvent.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/event/GadgetEnableEvent.java index 913d4860a..05112dfbf 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/event/GadgetActivateEvent.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/event/GadgetEnableEvent.java @@ -7,16 +7,17 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; -public class GadgetActivateEvent extends Event +public class GadgetEnableEvent extends Event { private static final HandlerList handlers = new HandlerList(); private Player _player; private Gadget _gadget; + private boolean _cancelled = false; - public GadgetActivateEvent(Player player, Gadget gadget) + public GadgetEnableEvent(Player player, Gadget gadget) { _player = player; _gadget = gadget; @@ -41,7 +42,7 @@ public class GadgetActivateEvent extends Event { return _player; } - + public void setCancelled(boolean cancel) { _cancelled = cancel; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemGemBomb.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemGemBomb.java deleted file mode 100644 index 0c2e75b77..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemGemBomb.java +++ /dev/null @@ -1,217 +0,0 @@ -package mineplex.core.gadget.gadgets; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Color; -import org.bukkit.FireworkEffect; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.FireworkEffect.Type; -import org.bukkit.entity.Item; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.Vector; - -import mineplex.core.common.CurrencyType; -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.UtilFirework; -import mineplex.core.common.util.UtilGear; -import mineplex.core.common.util.UtilInv; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilTime; -import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.event.ItemGadgetOutOfAmmoEvent; -import mineplex.core.gadget.types.ItemGadget; -import mineplex.core.itemstack.ItemStackFactory; -import mineplex.core.recharge.Recharge; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; - -public class ItemGemBomb extends ItemGadget -{ - private HashMap _activeBombs = new HashMap(); - private HashSet _gems = new HashSet(); - - public ItemGemBomb(GadgetManager manager) - { - super(manager, "Gem Party Bomb", new String[] - { - C.cWhite + "It's party time! You will be", - C.cWhite + "everyones favourite player", - C.cWhite + "when you use one of these!", - " ", - C.cRed +C.Bold + "WARNING: " + ChatColor.RESET + "This uses 2000 Gems" - }, - -1, - Material.EMERALD, (byte)0, - 30000, new Ammo("Gem Party Bomb", "10 Gem Party Bomb", Material.EMERALD, (byte)0, new String[] { C.cWhite + "10 Coin Party Bomb to PARTY!" }, 10, 10)); - } - - @Override - @EventHandler - public void Activate(PlayerInteractEvent event) - { - if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - - if (UtilBlock.usable(event.getClickedBlock())) - return; - - if (!UtilGear.isMat(event.getPlayer().getItemInHand(), this.GetDisplayMaterial())) - return; - - Player player = event.getPlayer(); - - if (!IsActive(player)) - return; - - event.setCancelled(true); - - //Stock - if (Manager.getInventoryManager().Get(player).getItemCount(GetName()) <= 0) - { - - UtilPlayer.message(player, F.main("Gadget", "You do not have any " + GetName() + " left.")); - - ItemGadgetOutOfAmmoEvent ammoEvent = new ItemGadgetOutOfAmmoEvent(event.getPlayer(), this); - Bukkit.getServer().getPluginManager().callEvent(ammoEvent); - - return; - } - - //Gems - if (Manager.getDonationManager().Get(player.getName()).GetBalance(CurrencyType.Gems) < 2000) - { - UtilPlayer.message(player, F.main("Inventory", "You do not have the required " + C.cGreen + "2000 Gems") + "."); - return; - } - - //Already In Use - if (!_activeBombs.isEmpty()) - { - UtilPlayer.message(player, F.main("Inventory", "There is already a " + F.elem(C.cGreen + "Gem Bomb")) + " being used."); - return; - } - - //Recharge - if (!Recharge.Instance.use(player, GetName(), _recharge, _recharge > 1000, false)) - { - UtilInv.Update(player); - return; - } - - //Use Stock/Gems - Manager.getInventoryManager().addItemToInventory(player, GetName(), -1); - Manager.getDonationManager().RewardGems(null, GetName(), event.getPlayer().getName(), event.getPlayer().getUniqueId(), -2000); - - player.getInventory().setItem(Manager.getActiveItemSlot(), ItemStackFactory.Instance.CreateStack(GetDisplayMaterial(), GetDisplayData(), 1, F.item(GetName()))); - - ActivateCustom(event.getPlayer()); - } - - @Override - public void ActivateCustom(Player player) - { - Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), new ItemStack(Material.EMERALD_BLOCK)); - UtilAction.velocity(item, player.getLocation().getDirection(), 1, false, 0, 0.2, 1, false); - _activeBombs.put(item, System.currentTimeMillis()); - - //Inform - for (Player other : UtilServer.getPlayers()) - UtilPlayer.message(other, C.cGreen + C.Bold + player.getName() + C.cWhite + C.Bold + " has thrown a " + C.cGreen + C.Bold + "Gem Party Bomb" + C.cWhite + C.Bold + "!"); - } - - @EventHandler - public void Update(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - Iterator itemIterator = _activeBombs.keySet().iterator(); - - while (itemIterator.hasNext()) - { - Item item = itemIterator.next(); - long time = _activeBombs.get(item); - - if (UtilTime.elapsed(time, 3000)) - { - if (Math.random() > 0.80) - UtilFirework.playFirework(item.getLocation(), FireworkEffect.builder().flicker(false).withColor(Color.GREEN).with(Type.BURST).trail(false).build()); - else - item.getWorld().playSound(item.getLocation(), Sound.FIREWORK_LAUNCH, 1f, 1f); - - Item gem = item.getWorld().dropItem(item.getLocation().add(0, 1, 0), new ItemStack(Material.EMERALD)); - - //Velocity - long passed = System.currentTimeMillis() - time; - Vector vel = new Vector(Math.sin(passed/300d), 0, Math.cos(passed/300d)); - - UtilAction.velocity(gem, vel, Math.abs(Math.sin(passed/3000d)), false, 0, 0.2 + Math.abs(Math.cos(passed/3000d))*0.8, 1, false); - - gem.setPickupDelay(40); - - _gems.add(gem); - } - - if (UtilTime.elapsed(time, 23000)) - { - item.remove(); - itemIterator.remove(); - } - } - } - - @EventHandler - public void Pickup(PlayerPickupItemEvent event) - { - if (_activeBombs.keySet().contains(event.getItem())) - { - event.setCancelled(true); - } - else if (_gems.contains(event.getItem())) - { - event.setCancelled(true); - event.getItem().remove(); - - Manager.getDonationManager().RewardGemsLater(GetName() + " Pickup", event.getPlayer(), 4); - - event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), Sound.ORB_PICKUP, 1f, 2f); - } - } - - @EventHandler - public void Clean(UpdateEvent event) - { - if (event.getType() != UpdateType.FAST) - return; - - Iterator gemIterator = _gems.iterator(); - - while (gemIterator.hasNext()) - { - Item gem = gemIterator.next(); - - if (!gem.isValid() || gem.getTicksLived() > 1200) - { - gem.remove(); - gemIterator.remove(); - } - } - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemKothSword.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemKothSword.java deleted file mode 100644 index 6bb5d66a0..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemKothSword.java +++ /dev/null @@ -1,5 +0,0 @@ -package mineplex.core.gadget.gadgets; - -public class ItemKothSword { - -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphGeno.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphGeno.java deleted file mode 100644 index 628531f40..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphGeno.java +++ /dev/null @@ -1,75 +0,0 @@ -package mineplex.core.gadget.gadgets; - -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.*; - -import com.mojang.authlib.GameProfile; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.ProfileLoader; -import mineplex.core.common.util.UUIDFetcher; -import mineplex.core.common.util.UtilEvent; -import mineplex.core.common.util.UtilEvent.ActionType; -import mineplex.core.disguise.disguises.DisguisePlayer; -import mineplex.core.recharge.Recharge; -import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.types.MorphGadget; - -public class MorphGeno extends MorphGadget -{ - private GameProfile _profile = null; - - public MorphGeno(GadgetManager manager) - { - super(manager, "Genocide604", new String[] - { - "Say goodbye to Genocide604 by burping", - "and eating a lot.", - " ", - C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Burp", - " ", - C.cRed + C.Bold + "WARNING: " + ChatColor.RESET + "This is a temporary item!", - }, - 10, - Material.SKULL_ITEM, (byte)3); - - _profile = new ProfileLoader(UUIDFetcher.getUUIDOf("Genocide604").toString(), "Genocide604").loadProfile(); - } - - @Override - public void EnableCustom(final Player player) - { - this.ApplyArmor(player); - - DisguisePlayer disguise = new DisguisePlayer(player, _profile); - Manager.getDisguiseManager().disguise(disguise); - } - - @Override - public void DisableCustom(Player player) - { - this.RemoveArmor(player); - Manager.getDisguiseManager().undisguise(player); - } - - @EventHandler - public void Action(PlayerInteractEvent event) - { - Player player = event.getPlayer(); - - if (!IsActive(player)) - return; - - if (!UtilEvent.isAction(event, ActionType.L)) - return; - - if (!Recharge.Instance.use(player, GetName(), 1500, false, false)) - return; - - player.getWorld().playSound(player.getEyeLocation(), Sound.BURP, 1f, (float) (0.8f + Math.random() * 0.4f)); - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphNotch.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphNotch.java deleted file mode 100644 index a262c149e..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphNotch.java +++ /dev/null @@ -1,70 +0,0 @@ -package mineplex.core.gadget.gadgets; - -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.*; - -import com.mojang.authlib.GameProfile; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.ProfileLoader; -import mineplex.core.common.util.UUIDFetcher; -import mineplex.core.common.util.UtilEvent; -import mineplex.core.common.util.UtilEvent.ActionType; -import mineplex.core.disguise.disguises.DisguisePlayer; -import mineplex.core.recharge.Recharge; -import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.types.MorphGadget; - -public class MorphNotch extends MorphGadget -{ - private GameProfile _notchProfile = null; - - public MorphNotch(GadgetManager manager) - { - super(manager, "Notch", new String[] - { - "Who wouldn't want to be Notch?!", - //C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Enforce EULA", - }, - 50000, - Material.SKULL_ITEM, (byte)3); - - _notchProfile = new ProfileLoader(UUIDFetcher.getUUIDOf("Notch").toString(), "Notch").loadProfile(); - } - - @Override - public void EnableCustom(final Player player) - { - this.ApplyArmor(player); - - DisguisePlayer disguise = new DisguisePlayer(player, _notchProfile); - Manager.getDisguiseManager().disguise(disguise); - } - - @Override - public void DisableCustom(Player player) - { - this.RemoveArmor(player); - Manager.getDisguiseManager().undisguise(player); - } - - //@EventHandler - public void Action(PlayerInteractEvent event) - { - Player player = event.getPlayer(); - - if (!IsActive(player)) - return; - - if (!UtilEvent.isAction(event, ActionType.L)) - return; - - if (!Recharge.Instance.use(player, GetName(), 1500, false, false)) - return; - - player.sendMessage("You have enforced the EULA."); - - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/OutfitSpaceSuit.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/OutfitSpaceSuit.java deleted file mode 100644 index fe25b7843..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/OutfitSpaceSuit.java +++ /dev/null @@ -1,29 +0,0 @@ -package mineplex.core.gadget.gadgets; - -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.entity.Player; - -import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.types.OutfitGadget; - -public class OutfitSpaceSuit extends OutfitGadget -{ - public OutfitSpaceSuit(GadgetManager manager, String name, - int cost, ArmorSlot slot, Material mat, byte data) - { - super(manager, name, new String[] {ChatColor.RESET + "Wear the complete set for",ChatColor.RESET + "awesome bonus effects!", ChatColor.RESET + "Bonus coming soon..."}, cost, slot, mat, data); - } - - @Override - public void EnableCustom(Player player) - { - ApplyArmor(player); - } - - @Override - public void DisableCustom(Player player) - { - RemoveArmor(player); - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleBlizzard.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleBlizzard.java deleted file mode 100644 index b6f57d15b..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleBlizzard.java +++ /dev/null @@ -1,164 +0,0 @@ -package mineplex.core.gadget.gadgets; - -import java.util.HashSet; -import java.util.Iterator; - -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.entity.ProjectileLaunchEvent; -import org.bukkit.event.player.PlayerToggleFlightEvent; - -import mineplex.core.blood.BloodEvent; -import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; -import mineplex.core.gadget.types.ParticleGadget; -import mineplex.core.recharge.Recharge; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.gadget.GadgetManager; - -public class ParticleBlizzard extends ParticleGadget -{ - private HashSet _arrows = new HashSet(); - - public ParticleBlizzard(GadgetManager manager) - { - super(manager, "Frost Lord", new String[] - { - C.cWhite + "You are a mighty frost lord.", - C.cWhite + "Your double jumps and arrows", - C.cWhite + "are enchanted with snow powers.", - " ", - C.cPurple + "No longer available", - }, - -1, - Material.SNOW_BALL, (byte)0); - } - - @EventHandler - public void playParticle(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - for (Player player : GetActive()) - { - if (!shouldDisplay(player)) - continue; - - if (Manager.isMoving(player)) - { - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4, - ViewDist.NORMAL, UtilServer.getPlayers()); - } - else - { - player.getWorld().playSound(player.getLocation(), Sound.AMBIENCE_RAIN, 0.015f, 0.2f); - - double scale = (double)(player.getTicksLived() % 50) / 50d; - - for (int i = 0 ; i < 8 ; i++) - { - double r = (1d-scale) * Math.PI * 2; - - double x = Math.sin(r + (i * (Math.PI/4))) * (r%(Math.PI * 4)) * 0.4; - double z = Math.cos(r + (i * (Math.PI/4))) * (r%(Math.PI * 4)) * 0.4; - - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(x, scale * 3, z), 0f, 0f, 0f, 0, 1, - ViewDist.NORMAL, UtilServer.getPlayers()); - - if (scale > 0.95 && Recharge.Instance.use(player, GetName(), 1000, false, false)) - { - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(0, scale * 3.5, 0), 0f, 0f, 0f, 0.2f, 60, - ViewDist.NORMAL, UtilServer.getPlayers()); - player.getWorld().playSound(player.getLocation(), Sound.STEP_SNOW, 1f, 1.5f); - } - } - } - } - } - - @EventHandler - public void jump(PlayerToggleFlightEvent event) - { - if (!shouldDisplay(event.getPlayer())) - return; - - if (!event.getPlayer().isFlying()) - if (IsActive(event.getPlayer())) - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, event.getPlayer().getLocation(), 0f, 0f, 0f, 0.6f, 100, - ViewDist.LONGER, UtilServer.getPlayers()); - } - - @EventHandler - public void arrow(ProjectileLaunchEvent event) - { - if (Manager.hideParticles()) - return; - - if (event.getEntity() instanceof Arrow) - { - if (event.getEntity().getShooter() != null) - { - if (GetActive().contains(event.getEntity().getShooter())) - { - _arrows.add((Arrow)event.getEntity()); - } - } - } - } - - @EventHandler - public void arrow(ProjectileHitEvent event) - { - if (!_arrows.remove(event.getEntity())) - return; - - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, event.getEntity().getLocation(), 0f, 0f, 0f, 0.4f, 12, - ViewDist.LONGER, UtilServer.getPlayers()); - } - - @EventHandler - public void arrowClean(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - for (Iterator arrowIterator = _arrows.iterator(); arrowIterator.hasNext();) - { - Arrow arrow = arrowIterator.next(); - - if (arrow.isDead() || !arrow.isValid() || arrow.isOnGround()) - { - arrowIterator.remove(); - } - else - { - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, arrow.getLocation(), 0f, 0f, 0f, 0f, 1, - ViewDist.LONGER, UtilServer.getPlayers()); - } - } - } - - @EventHandler - public void death(BloodEvent event) - { - if (event.getPlayer() == null) - return; - - if (!IsActive(event.getPlayer())) - return; - - if (!shouldDisplay(event.getPlayer())) - return; - - event.setItem(Material.SNOW_BALL, (byte)0); - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHelix.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHelix.java deleted file mode 100644 index f573629ee..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHelix.java +++ /dev/null @@ -1,79 +0,0 @@ -package mineplex.core.gadget.gadgets; - -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; - -import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; -import mineplex.core.gadget.types.ParticleGadget; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.gadget.GadgetManager; - -public class ParticleHelix extends ParticleGadget -{ - - public ParticleHelix(GadgetManager manager) - { - super(manager, "Blood Helix", new String[] - { - C.cWhite + "Ancient legend says this magic", - C.cWhite + "empowers the blood of its user,", - C.cWhite + "giving them godly powers.", - }, - -2, - Material.REDSTONE, (byte)0); - } - - @EventHandler - public void playParticle(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - for (Player player : GetActive()) - { - if (!shouldDisplay(player)) - continue; - - if (Manager.isMoving(player)) - { - UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4, - ViewDist.NORMAL, UtilServer.getPlayers()); - } - else - { - for (int height=0 ; height <= 20 ; height++) - { - for (int i=0 ; i < 2 ; i++) - { - double lead = i * ((2d * Math.PI)/2); - - double heightLead = height * ((2d * Math.PI)/20); - - float x = (float) (Math.sin(player.getTicksLived()/20d + lead + heightLead) * 1.2f); - float z = (float) (Math.cos(player.getTicksLived()/20d + lead + heightLead) * 1.2f); - - float y = 0.15f * height; - - UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation().add(x * (1d - height/22d), y, z * (1d - height/22d)), 0f, 0f, 0f, 0, 1, - ViewDist.NORMAL, UtilServer.getPlayers()); - - - } - } - - //UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0, 3, 0), 0f, 0f, 0f, 0, 2); - - //Sound - player.getWorld().playSound(player.getLocation(), Sound.LAVA, 0.3f, 1f); - } - } - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleTitan.java deleted file mode 100644 index 9ed2bbb06..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleTitan.java +++ /dev/null @@ -1,202 +0,0 @@ -package mineplex.core.gadget.gadgets; - -import java.util.HashSet; -import java.util.Iterator; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.entity.ProjectileLaunchEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerToggleFlightEvent; -import org.bukkit.util.Vector; - -import mineplex.core.blood.BloodEvent; -import mineplex.core.common.Rank; -import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; -import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.types.ParticleGadget; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; - -public class ParticleTitan extends ParticleGadget -{ - private HashSet _arrows = new HashSet(); - - private int _tick; - - public ParticleTitan(GadgetManager manager) - { - super(manager, "Flame of the Titans", new String[] - { - C.cWhite + "These flames are said to be the", - C.cWhite + "souls of a lost civilisation of", - C.cWhite + "Titans, forgotten by time.", - " ", - C.cRed + "Unlocked with Titan Rank", - }, - -3, - Material.FIREBALL, (byte)0); - } - - @EventHandler - public void onUpdate(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - - return; - - _tick++; - _tick = _tick%620; - - for(Player player : GetActive()) - { - if (!shouldDisplay(player)) - continue; - - double total = 3; - double step = (1/total)*Math.PI*2; - double offset1 = (step/20)*_tick%20; - double offset2 = (step/31)*_tick%31; - - double r = 3; - boolean redstone = false; - - if(Manager.isMoving(player)) - r = 0.5; - - for(int i = 0; i < total; i++) - { - double rad = step*i + offset1; - - double x = Math.sin(rad); - double y = 0; - double z = Math.cos(rad); - - - Vector v = new Vector(x,y,z).normalize(); - v.multiply(r); - Location loc = player.getLocation(); - loc.add(0, 0.1, 0); - - loc.add(v); - - - if(redstone) UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, loc, 1, 0, 0, 1, 0, ViewDist.NORMAL); - v.multiply(-1); - UtilParticle.PlayParticleToAll(ParticleType.FLAME, loc, v, 0.05f, 0, ViewDist.NORMAL); - - rad = -(step*i + offset2); - x = Math.sin(rad); - z = Math.cos(rad); - - v = new Vector(x,y,z).normalize(); - v.multiply(r); - loc = player.getLocation(); - loc.add(0, 0.1, 0); - - loc.add(v); - - if(redstone) UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, loc, 1, 0, 0, 1, 0, ViewDist.NORMAL); - v.multiply(-1); - UtilParticle.PlayParticleToAll(ParticleType.FLAME, loc, v, 0.05f, 0, ViewDist.NORMAL); - } - } - } - - @EventHandler - public void jump(PlayerToggleFlightEvent event) - { - if (!shouldDisplay(event.getPlayer())) - return; - - if (!event.getPlayer().isFlying()) - if (IsActive(event.getPlayer())) - { - UtilParticle.PlayParticle(ParticleType.LAVA, event.getPlayer().getLocation(), 0f, 0f, 0f, 0.2f, 40, - ViewDist.NORMAL, UtilServer.getPlayers()); - } - - } - - @EventHandler - public void arrow(ProjectileLaunchEvent event) - { - if (Manager.hideParticles()) - return; - - if (event.getEntity() instanceof Arrow) - { - if (event.getEntity().getShooter() != null) - { - if (GetActive().contains(event.getEntity().getShooter())) - { - _arrows.add((Arrow)event.getEntity()); - } - } - } - } - - @EventHandler - public void arrow(ProjectileHitEvent event) - { - if (!_arrows.remove(event.getEntity())) - return; - - UtilParticle.PlayParticle(ParticleType.LAVA, event.getEntity().getLocation(), 0f, 0f, 0f, 0f, 24, - ViewDist.LONGER, UtilServer.getPlayers()); - } - - @EventHandler - public void arrowClean(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - for (Iterator arrowIterator = _arrows.iterator(); arrowIterator.hasNext();) - { - Arrow arrow = arrowIterator.next(); - - if (arrow.isDead() || !arrow.isValid() || arrow.isOnGround()) - { - arrowIterator.remove(); - } - else - { - UtilParticle.PlayParticle(ParticleType.FLAME, arrow.getLocation(), 0f, 0f, 0f, 0f, 1, - ViewDist.LONGER, UtilServer.getPlayers()); - } - } - } - - @EventHandler - public void death(BloodEvent event) - { - if (event.getPlayer() == null) - return; - - if (!IsActive(event.getPlayer())) - return; - - if (!shouldDisplay(event.getPlayer())) - return; - - event.setItem(Material.FIREBALL, (byte)0); - } - - @EventHandler - public void legendOwner(PlayerJoinEvent event) - { - if (Manager.getClientManager().Get(event.getPlayer()).GetRank().has(Rank.TITAN)) - { - Manager.getDonationManager().Get(event.getPlayer().getName()).AddUnknownSalesPackagesOwned(GetName()); - } - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailCandyCane.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailCandyCane.java new file mode 100644 index 000000000..ec6b33ba6 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailCandyCane.java @@ -0,0 +1,48 @@ +package mineplex.core.gadget.gadgets.arrowtrail; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Arrow; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +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.UtilText; +import mineplex.core.common.util.UtilTime; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.ArrowEffectGadget; + +public class ArrowTrailCandyCane extends ArrowEffectGadget +{ + + public ArrowTrailCandyCane(GadgetManager manager) + { + super(manager, "Candy Cane Arrows", + UtilText.splitLineToArray(C.cGray + "The real reason no one visits the North Pole? Santa’s Elves are deadly shots.", LineFormat.LORE), + -3, + Material.INK_SACK, (byte)1); + } + + @Override + public void doTrail(Arrow arrow) + { + int data = 15; + int tick = Math.abs(UtilTime.getServerTick()%3); + if(tick == 1) data = 1; + if(tick == 2) data = 2; + Location loc = arrow.getLocation(); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, data), loc, 0, 0, 0, 0.0f, 1, ViewDist.NORMAL); + } + + @Override + public void doHitEffect(Arrow arrow) + { + Location loc = arrow.getLocation(); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 15), loc, 0, 0, 0, 0.1f, 20, ViewDist.NORMAL); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 1), loc, 0, 0, 0, 0.1f, 20, ViewDist.NORMAL); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 2), loc, 0, 0, 0, 0.1f, 20, ViewDist.NORMAL); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailFrostLord.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailFrostLord.java new file mode 100644 index 000000000..171860cd5 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailFrostLord.java @@ -0,0 +1,39 @@ +package mineplex.core.gadget.gadgets.arrowtrail; + +import org.bukkit.Material; +import org.bukkit.entity.Arrow; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.gadget.types.ArrowEffectGadget; +import mineplex.core.gadget.GadgetManager; + +public class ArrowTrailFrostLord extends ArrowEffectGadget +{ + public ArrowTrailFrostLord(GadgetManager manager) + { + super(manager, "Arrows of the Frost Lord", + UtilText.splitLineToArray(C.cGray + "The Frost Lord’s arrows bring a blast of winter in the wind of their passing.", LineFormat.LORE), + -3, + Material.SNOW_BALL, (byte)0, "Frost Lord"); + } + + @Override + public void doTrail(Arrow arrow) + { + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, arrow.getLocation(), 0f, 0f, 0f, 0f, 1, + ViewDist.LONGER, UtilServer.getPlayers()); + } + + @Override + public void doHitEffect(Arrow arrow) + { + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, arrow.getLocation(), 0f, 0f, 0f, 0.4f, 12, + ViewDist.LONGER, UtilServer.getPlayers()); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailTitan.java new file mode 100644 index 000000000..e84e26318 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/arrowtrail/ArrowTrailTitan.java @@ -0,0 +1,51 @@ +package mineplex.core.gadget.gadgets.arrowtrail; + +import org.bukkit.Material; +import org.bukkit.entity.Arrow; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; + +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.ArrowEffectGadget; + +public class ArrowTrailTitan extends ArrowEffectGadget +{ + public ArrowTrailTitan(GadgetManager manager) + { + super(manager, "Arrows of the Titans", + UtilText.splitLineToArray(C.cGray + "Arrows forged in the Fires of Creation, they leave fiery trails in their wake.", LineFormat.LORE), + -13, + Material.FIREBALL, (byte)0); + } + + @Override + public void doTrail(Arrow arrow) + { + UtilParticle.PlayParticle(ParticleType.FLAME, arrow.getLocation(), 0f, 0f, 0f, 0f, 1, + ViewDist.LONGER, UtilServer.getPlayers()); + } + + @Override + public void doHitEffect(Arrow arrow) + { + UtilParticle.PlayParticle(ParticleType.LAVA, arrow.getLocation(), 0f, 0f, 0f, 0f, 24, + ViewDist.LONGER, UtilServer.getPlayers()); + } + + @EventHandler + public void titanOwner(PlayerJoinEvent event) + { + if (Manager.getClientManager().Get(event.getPlayer()).GetRank().has(Rank.TITAN)) + { + Manager.getDonationManager().Get(event.getPlayer().getName()).AddUnknownSalesPackagesOwned(GetName()); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathCandyCane.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathCandyCane.java new file mode 100644 index 000000000..a6ccbda55 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathCandyCane.java @@ -0,0 +1,48 @@ +package mineplex.core.gadget.gadgets.death; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; + +import mineplex.core.blood.BloodEvent; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.gadget.types.DeathEffectGadget; +import mineplex.core.gadget.GadgetManager; + +public class DeathCandyCane extends DeathEffectGadget +{ + public DeathCandyCane(GadgetManager manager) + { + super(manager, "Candy Cane Remains", + UtilText.splitLineToArray(C.cGray + "The biggest enemy of the Holidays, is January.", LineFormat.LORE), + -3, + Material.INK_SACK, (byte)1); + } + + @EventHandler + public void death(BloodEvent event) + { + if (event.getPlayer() == null) + return; + + if (!IsActive(event.getPlayer())) + return; + + if (!shouldDisplay(event.getPlayer())) + return; + + event.setCancelled(true); + + event.setItem(Material.INK_SACK, (byte) 15); + + Location loc = event.getLocation(); + int a = event.getParticles(); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 1), loc, 0, 0, 0, 0.1f, a, ViewDist.NORMAL); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 2), loc, 0, 0, 0, 0.1f, a, ViewDist.NORMAL); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathFrostLord.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathFrostLord.java new file mode 100644 index 000000000..7e90ac02d --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathFrostLord.java @@ -0,0 +1,37 @@ +package mineplex.core.gadget.gadgets.death; + +import org.bukkit.Material; +import org.bukkit.event.EventHandler; + +import mineplex.core.blood.BloodEvent; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.types.DeathEffectGadget; +import mineplex.core.gadget.GadgetManager; + +public class DeathFrostLord extends DeathEffectGadget +{ + public DeathFrostLord(GadgetManager manager) + { + super(manager, "Fall of the Frost Lord", + UtilText.splitLineToArray(C.cGray + "The power of Winter must eventually give way to Spring.", LineFormat.LORE), + -3, + Material.SNOW_BALL, (byte)0, "Frost Lord"); + } + + @EventHandler + public void death(BloodEvent event) + { + if (event.getPlayer() == null) + return; + + if (!IsActive(event.getPlayer())) + return; + + if (!shouldDisplay(event.getPlayer())) + return; + + event.setItem(Material.SNOW_BALL, (byte)0); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathTitan.java new file mode 100644 index 000000000..cce291dc1 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/death/DeathTitan.java @@ -0,0 +1,48 @@ +package mineplex.core.gadget.gadgets.death; + +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; + +import mineplex.core.blood.BloodEvent; +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.DeathEffectGadget; + +public class DeathTitan extends DeathEffectGadget +{ + public DeathTitan(GadgetManager manager) + { + super(manager, "Ashes of the Titans", + UtilText.splitLineToArray(C.cGray + "Even a Titan can fall in combat if their opponent is fierce enough.", LineFormat.LORE), + -13, + Material.FIREBALL, (byte)0); + } + + @EventHandler + public void death(BloodEvent event) + { + if (event.getPlayer() == null) + return; + + if (!IsActive(event.getPlayer())) + return; + + if (!shouldDisplay(event.getPlayer())) + return; + + event.setItem(Material.FIREBALL, (byte)0); + } + + @EventHandler + public void titanOwner(PlayerJoinEvent event) + { + if (Manager.getClientManager().Get(event.getPlayer()).GetRank().has(Rank.TITAN)) + { + Manager.getDonationManager().Get(event.getPlayer().getName()).AddUnknownSalesPackagesOwned(GetName()); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpCandyCane.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpCandyCane.java new file mode 100644 index 000000000..62f3ad6c4 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpCandyCane.java @@ -0,0 +1,36 @@ +package mineplex.core.gadget.gadgets.doublejump; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +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.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.DoubleJumpEffectGadget; + +public class DoubleJumpCandyCane extends DoubleJumpEffectGadget +{ + + public DoubleJumpCandyCane(GadgetManager manager) + { + super(manager, "Candy Cane Blast", + UtilText.splitLineToArray(C.cGray + "It is said every time an elf jumps, bits of Candy Cane fall out of their pockets.", LineFormat.LORE), + -3, + Material.INK_SACK, (byte)1); + } + + @Override + public void doEffect(Player player) + { + Location loc = player.getLocation(); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 15), loc, 0, 0, 0, 0.15f, 100, ViewDist.NORMAL); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 1), loc, 0, 0, 0, 0.15f, 100, ViewDist.NORMAL); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 2), loc, 0, 0, 0, 0.15f, 100, ViewDist.NORMAL); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpFrostLord.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpFrostLord.java new file mode 100644 index 000000000..64cc9f962 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpFrostLord.java @@ -0,0 +1,32 @@ +package mineplex.core.gadget.gadgets.doublejump; + +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilServer; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.DoubleJumpEffectGadget; + +public class DoubleJumpFrostLord extends DoubleJumpEffectGadget +{ + public DoubleJumpFrostLord(GadgetManager manager) + { + super(manager, "Gust of the Frost Lord", + UtilText.splitLineToArray(C.cGray + "Listen, the Frost Lord is a very proper individual. Stop making fart jokes!", LineFormat.LORE), + -3, + Material.SNOW_BALL, (byte)0, "Frost Lord"); + } + + @Override + public void doEffect(Player player) + { + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation(), 0f, 0f, 0f, 0.6f, 100, + ViewDist.LONGER, UtilServer.getPlayers()); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpTitan.java new file mode 100644 index 000000000..31cf84cce --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/doublejump/DoubleJumpTitan.java @@ -0,0 +1,46 @@ +package mineplex.core.gadget.gadgets.doublejump; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerToggleFlightEvent; + +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.DoubleJumpEffectGadget; + +public class DoubleJumpTitan extends DoubleJumpEffectGadget +{ + public DoubleJumpTitan(GadgetManager manager) + { + super(manager, "Leap of the Titans", + UtilText.splitLineToArray(C.cGray + "Out of the frying pan and into the fire.", LineFormat.LORE), + -13, + Material.FIREBALL, (byte)0); + } + + @Override + public void doEffect(Player player) + { + UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation(), 0f, 0f, 0f, 0.2f, 40, + ViewDist.NORMAL, UtilServer.getPlayers()); + UtilParticle.PlayParticleToAll(ParticleType.FLAME, player.getLocation(), 0, 0, 0, 0.2f, 40, ViewDist.NORMAL); + } + + @EventHandler + public void titanOwner(PlayerJoinEvent event) + { + if (Manager.getClientManager().Get(event.getPlayer()).GetRank().has(Rank.TITAN)) + { + Manager.getDonationManager().Get(event.getPlayer().getName()).AddUnknownSalesPackagesOwned(GetName()); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatCoal.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatCoal.java new file mode 100644 index 000000000..7897272a8 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatCoal.java @@ -0,0 +1,23 @@ +package mineplex.core.gadget.gadgets.hat; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.HatGadget; + +public class HatCoal extends HatGadget +{ + + public HatCoal(GadgetManager manager) + { + super(manager, "Lump of Coal Hat", + UtilText.splitLineToArray(C.cGray + "When life gives you coal, make a wierd cube hat out it!", LineFormat.LORE), + -1, + new ItemStack(Material.COAL_BLOCK)); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatGrinch.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatGrinch.java new file mode 100644 index 000000000..9ef68b04a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatGrinch.java @@ -0,0 +1,21 @@ +package mineplex.core.gadget.gadgets.hat; + +import mineplex.core.common.skin.SkinData; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.HatGadget; + +public class HatGrinch extends HatGadget +{ + + public HatGrinch(GadgetManager manager) + { + super(manager, "The Grinch", + UtilText.splitLineToArray(C.cGray + "Great! Now where’s the Roast Beast?!", LineFormat.LORE), + -3, + SkinData.THE_GRINCH.getSkull(), "The Grinch Hat"); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatPresent.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatPresent.java new file mode 100644 index 000000000..e92b2b398 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatPresent.java @@ -0,0 +1,21 @@ +package mineplex.core.gadget.gadgets.hat; + +import mineplex.core.common.skin.SkinData; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.HatGadget; + +public class HatPresent extends HatGadget +{ + + public HatPresent(GadgetManager manager) + { + super(manager, "Present", + UtilText.splitLineToArray(C.cGray + "WHAT IN THE PRESENT? Oh, it's just you...", LineFormat.LORE), + -3, + SkinData.PRESENT.getSkull()); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatRudolph.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatRudolph.java new file mode 100644 index 000000000..1dfd9fa5c --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatRudolph.java @@ -0,0 +1,21 @@ +package mineplex.core.gadget.gadgets.hat; + +import mineplex.core.common.skin.SkinData; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.HatGadget; + +public class HatRudolph extends HatGadget +{ + + public HatRudolph(GadgetManager manager) + { + super(manager, "Rudolph", + UtilText.splitLineToArray(C.cGray + "WHAT IN THE PRESENT? Oh, it's just you...", LineFormat.LORE), + -3, + SkinData.RUDOLPH.getSkull()); + } + +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatSanta.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatSanta.java new file mode 100644 index 000000000..470b69a46 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatSanta.java @@ -0,0 +1,21 @@ +package mineplex.core.gadget.gadgets.hat; + +import mineplex.core.common.skin.SkinData; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.HatGadget; + +public class HatSanta extends HatGadget +{ + + public HatSanta(GadgetManager manager) + { + super(manager, "Santa", + UtilText.splitLineToArray(C.cGray + "Now you can work the Mall circuit!", LineFormat.LORE), + -3, + SkinData.SANTA.getSkull()); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatSnowman.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatSnowman.java new file mode 100644 index 000000000..7349759ab --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/hat/HatSnowman.java @@ -0,0 +1,21 @@ +package mineplex.core.gadget.gadgets.hat; + +import mineplex.core.common.skin.SkinData; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.HatGadget; + +public class HatSnowman extends HatGadget +{ + + public HatSnowman(GadgetManager manager) + { + super(manager, "Snowman Head", + UtilText.splitLineToArray(C.cGray + "Do you want to be a snowman?", LineFormat.LORE), + -3, + SkinData.SNOWMAN.getSkull()); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemBatGun.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemBatGun.java similarity index 92% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemBatGun.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemBatGun.java index 990221e3c..72af832fd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemBatGun.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemBatGun.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import java.util.ArrayList; import java.util.HashMap; @@ -13,16 +13,19 @@ import org.bukkit.util.Vector; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; @@ -36,11 +39,8 @@ public class ItemBatGun extends ItemGadget public ItemBatGun(GadgetManager manager) { - super(manager, "Bat Blaster", new String[] - { - C.cWhite + "Launch waves of annoying bats", - C.cWhite + "at people you don't like!", - }, + super(manager, "Bat Blaster", + UtilText.splitLineToArray(C.cGray + "Unleash waves of terrifying bats at people you don't like!", LineFormat.LORE), -1, Material.IRON_BARDING, (byte)0, 5000, new Ammo("Bat Blaster", "50 Bats", Material.IRON_BARDING, (byte)0, new String[] { C.cWhite + "50 Bats for your Bat Blaster!" }, 500, 50)); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemCoal.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemCoal.java new file mode 100644 index 000000000..4ef0da13d --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemCoal.java @@ -0,0 +1,256 @@ +package mineplex.core.gadget.gadgets.item; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.Callback; +import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.event.ItemGadgetOutOfAmmoEvent; +import mineplex.core.gadget.gadgets.Ammo; +import mineplex.core.gadget.gadgets.hat.HatCoal; +import mineplex.core.gadget.gadgets.particle.ParticleCoalFumes; +import mineplex.core.gadget.types.ItemGadget; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.recharge.Recharge; +import mineplex.core.reward.RewardData; +import mineplex.core.reward.RewardRarity; +import mineplex.core.reward.rewards.PetReward; + +public class ItemCoal extends ItemGadget +{ + private int _hat = 250; + private int _pet = 500; + private int _particle = 1000; + + public String[] Messages = new String[] + { + "Maybe you could.... eat it?", + "Yep, you're holding some coal...", + "This sure is a nice piece of coal!", + "Na na na na, Na na na na, " + C.cDGray + "BLACK COAL" + C.cGray + "!", + "Did you know that coal can be used for " + C.Scramble + "nothing" + C.mBody + "!", + "Now... if only you had a furnace.", + "I hope you didn’t miss any diamonds.", + "With 9 of these you could make a block!", + "Were you really that naughty this year?", + "With a few more of these you could make a snowman face!", + "Lava is hotter but Coal is quicker.", + "What do you even need Coal for on a Minigame server?", + "Maybe if I got more I could start a really big fire.", + "Maybe you can give this to your siblings next Christmas.", + "Did you know a diamond is formed from coal?", + "Coal is a word that sounds weird if you say it too much.", + "Who do you think mined the first block of coal?", + "Maybe if you get enough, something cool will happen! Or perhaps not...", + }; + + public ItemCoal(GadgetManager manager) + { + super(manager, "Coal", + UtilText.splitLineToArray(C.cGray + "Just a large chunk of coal. Maybe you were naughty or something?", LineFormat.LORE) + , -1, Material.COAL, (byte) 0, 1000, new Ammo("Coal", "1 Piece of Coal", Material.COAL, (byte) 0, new String[] + { + C.cDGray + "Exclusive Coal!", + C.cDGray + "Earned by beeing naughty" + } + , -1, 1)); + } + + @Override + public void ActivateCustom(final Player player) + { + int goal = -1; + + //Coal Hat + if (!Manager.getGadget(HatCoal.class).ownsGadget(player)) + { + goal = _hat; + + if(Manager.getInventoryManager().Get(player).getItemCount(GetName()) >= _hat) + { + Recharge.Instance.recharge(player, GetName()); + Recharge.Instance.use(player, GetName(), 30000, true, true); + + Manager.getInventoryManager().addItemToInventory(new Callback() + { + @Override + public void run(Boolean data) + { + if(data) + { + Bukkit.broadcastMessage(F.main("Treasure", C.cGreen + player.getName() + C.cGray + " crafted " + C.cGreen + "Legendary Coal Hat")); + UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, player.getLocation().add(0, 0.5, 0), 0.1f, 0.5f, 0.1f, 0, 100, ViewDist.LONG); + UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, player.getLocation(), 0.5f, 0.0f, 0.5f, 0, 100, ViewDist.LONG); + player.getWorld().playSound(player.getLocation(), Sound.WITHER_DEATH, 0.8f, 0); + + Manager.getInventoryManager().addItemToInventory(player, GetName(), -_hat); + player.getInventory().setItem(Manager.getActiveItemSlot(), ItemStackFactory.Instance.CreateStack(GetDisplayMaterial(), GetDisplayData(), 1, F.item(Manager.getInventoryManager().Get(player).getItemCount(GetName()) + " " + GetName()))); + + Manager.getDonationManager().Get(player).AddUnknownSalesPackagesOwned("Lump of Coal Hat"); + } + else + { + player.sendMessage("Something went wrong..."); + } + } + }, player, "Lump of Coal Hat", 1); + return; + } + } + + //Coal Apparition + if (!Manager.getPetManager().Get(player).GetPets().containsKey(EntityType.PIG_ZOMBIE)) + { + goal = _pet; + + if(Manager.getInventoryManager().Get(player).getItemCount(GetName()) >= _pet) + { + Recharge.Instance.recharge(player, GetName()); + Recharge.Instance.use(player, GetName(), 30000, true, true); + + PetReward reward = new PetReward( + Manager.getPetManager(), + Manager.getInventoryManager(), + Manager.getDonationManager(), + "Coal Apparition", "Coal Apparition", EntityType.PIG_ZOMBIE, RewardRarity.OTHER, 0, 0); + + if (reward.canGiveReward(player)) + reward.giveReward(null, player, new Callback() + { + @Override + public void run(RewardData data) + { + Bukkit.broadcastMessage(F.main("Treasure", C.cGreen + player.getName() + C.cGray + " crafted " + C.cGreen + "Legendary Coal Apparition Pet")); + UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, player.getLocation().add(0, 0.5, 0), 0.15f, 0.5f, 0.15f, 0, 250, ViewDist.LONG); + UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, player.getLocation(), 1f, 0.0f, 1f, 0, 250, ViewDist.LONG); + player.getWorld().playSound(player.getLocation(), Sound.WITHER_DEATH, 0.8f, 0); + + Manager.getInventoryManager().addItemToInventory(player, GetName(), -_pet); + player.getInventory().setItem(Manager.getActiveItemSlot(), ItemStackFactory.Instance.CreateStack(GetDisplayMaterial(), GetDisplayData(), 1, F.item(Manager.getInventoryManager().Get(player).getItemCount(GetName()) + " " + GetName()))); + + Manager.getDonationManager().Get(player).AddUnknownSalesPackagesOwned("Coal Apparition"); + } + }); + + return; + } + } + + //Coal Particle + if (!Manager.getGadget(ParticleCoalFumes.class).ownsGadget(player)) + { + goal = _particle; + + if(Manager.getInventoryManager().Get(player).getItemCount(GetName()) >= _particle) + { + Recharge.Instance.recharge(player, GetName()); + Recharge.Instance.use(player, GetName(), 30000, true, true); + + Manager.getInventoryManager().addItemToInventory(new Callback() + { + @Override + public void run(Boolean data) + { + if(data) + { + Bukkit.broadcastMessage(F.main("Treasure", C.cRed + player.getName() + C.cGray + " crafted " + C.cRed + "Mythical Coal Fumes Particles")); + UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, player.getLocation().add(0, 0.5, 0), 0.2f, 0.5f, 0.2f, 0, 500, ViewDist.LONG); + UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, player.getLocation(), 1.5f, 0.0f, 1.5f, 0, 500, ViewDist.LONG); + player.getWorld().playSound(player.getLocation(), Sound.WITHER_DEATH, 0.8f, 0); + + Manager.getInventoryManager().addItemToInventory(player, GetName(), -_particle); + player.getInventory().setItem(Manager.getActiveItemSlot(), ItemStackFactory.Instance.CreateStack(GetDisplayMaterial(), GetDisplayData(), 1, F.item(Manager.getInventoryManager().Get(player).getItemCount(GetName()) + " " + GetName()))); + + Manager.getDonationManager().Get(player).AddUnknownSalesPackagesOwned("Coal Fumes"); + } + else + { + player.sendMessage("Something went wrong..."); + } + } + }, player, "Coal Fumes", 1); + return; + } + } + + goal -= Manager.getInventoryManager().Get(player).getItemCount(GetName()); + + if (goal > 0 && Math.random() > 0.95) + { + player.sendMessage(F.main("Coal", "Only " + goal + " to go...")); + + player.playSound(player.getLocation(), Sound.IRONGOLEM_DEATH, 0.2f, 0.5f); + } + else + { + + int i = UtilMath.r(Messages.length); + String msg = Messages[i]; + player.sendMessage(F.main("Coal", msg)); + + player.playSound(player.getLocation(), Sound.GHAST_FIREBALL, 0.2f, 1.5f*(i/(float)Messages.length)); + } + } + + @EventHandler @Override + public void Activate(PlayerInteractEvent event) + { + if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + if (UtilBlock.usable(event.getClickedBlock())) + return; + + if (!UtilGear.isMat(event.getPlayer().getItemInHand(), this.GetDisplayMaterial())) + return; + + Player player = event.getPlayer(); + + if (!IsActive(player)) + return; + + event.setCancelled(true); + + //Stock + if (Manager.getInventoryManager().Get(player).getItemCount(GetName()) <= 0) + { + + UtilPlayer.message(player, F.main("Gadget", "You do not have any " + GetName() + " left.")); + + ItemGadgetOutOfAmmoEvent ammoEvent = new ItemGadgetOutOfAmmoEvent(event.getPlayer(), this); + Bukkit.getServer().getPluginManager().callEvent(ammoEvent); + + return; + } + + //Recharge + if (!Recharge.Instance.use(player, GetName(), GetName(), _recharge, _recharge > 1000, true, false, true, "Cosmetics")) + { + UtilInv.Update(player); + return; + } + + player.getInventory().setItem(Manager.getActiveItemSlot(), ItemStackFactory.Instance.CreateStack(GetDisplayMaterial(), GetDisplayData(), 1, F.item(Manager.getInventoryManager().Get(player).getItemCount(GetName()) + " " + GetName()))); + + ActivateCustom(event.getPlayer()); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemCoinBomb.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemCoinBomb.java similarity index 79% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemCoinBomb.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemCoinBomb.java index ce4f2e781..d0039cd87 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemCoinBomb.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemCoinBomb.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import java.util.HashMap; import java.util.HashSet; @@ -17,12 +17,15 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilTime; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -34,27 +37,23 @@ public class ItemCoinBomb extends ItemGadget public ItemCoinBomb(GadgetManager manager) { - super(manager, "Coin Party Bomb", new String[] - { - C.cWhite + "It's party time! You will be", - C.cWhite + "everyones favourite player", - C.cWhite + "when you use one of these!", - }, + super(manager, "Treasure Party Bomb", + UtilText.splitLineToArray(C.cWhite + "It's party time! You'll be everyones favourite player when you use one of these!", LineFormat.LORE), -1, - Material.getMaterial(175), (byte)0, - 30000, new Ammo("Coin Party Bomb", "1 Coin Party Bomb", Material.getMaterial(175), (byte)0, new String[] { C.cWhite + "1 Coin Party Bomb to PARTY!" }, 2000, 1)); + Material.PRISMARINE, (byte)0, + 30000, new Ammo("Treasure Party Bomb", "1 Coin Party Bomb", Material.PRISMARINE, (byte)0, new String[] { C.cWhite + "1 Treasure Party Bomb" }, 2000, 1)); } @Override public void ActivateCustom(Player player) { - Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), new ItemStack(Material.GOLD_BLOCK)); + Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), new ItemStack(Material.PRISMARINE)); UtilAction.velocity(item, player.getLocation().getDirection(), 1, false, 0, 0.2, 1, false); _active.put(item, System.currentTimeMillis()); //Inform for (Player other : UtilServer.getPlayers()) - UtilPlayer.message(other, C.cYellow + C.Bold + player.getName() + C.cWhite + C.Bold + " has thrown a " + C.cYellow + C.Bold + "Coin Party Bomb" + C.cWhite + C.Bold + "!"); + UtilPlayer.message(other, C.cAqua + C.Bold + player.getName() + C.cWhite + C.Bold + " has thrown a " + C.cAqua + C.Bold + "Treasure Party Bomb" + C.cWhite + C.Bold + "!"); } @EventHandler @@ -73,11 +72,11 @@ public class ItemCoinBomb extends ItemGadget if (UtilTime.elapsed(time, 3000)) { if (Math.random() > 0.80) - UtilFirework.playFirework(item.getLocation(), FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BURST).trail(false).build()); + UtilFirework.playFirework(item.getLocation(), FireworkEffect.builder().flicker(false).withColor(Color.AQUA).with(Type.BURST).trail(false).build()); else item.getWorld().playSound(item.getLocation(), Sound.FIREWORK_LAUNCH, 1f, 1f); - Item coin = item.getWorld().dropItem(item.getLocation().add(0, 1, 0), new ItemStack(Material.getMaterial(175))); + Item coin = item.getWorld().dropItem(item.getLocation().add(0, 1, 0), new ItemStack(Material.PRISMARINE_SHARD)); //Velocity long passed = System.currentTimeMillis() - time; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemDuelingSword.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemDuelingSword.java similarity index 85% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemDuelingSword.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemDuelingSword.java index 94d4bfea3..c8ced1f05 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemDuelingSword.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemDuelingSword.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -7,6 +7,8 @@ import org.bukkit.event.player.PlayerInteractEvent; import mineplex.core.common.util.C; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; +import mineplex.core.gadget.types.GadgetType; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.itemstack.ItemStackFactory; @@ -26,7 +28,7 @@ public class ItemDuelingSword extends ItemGadget @Override public void ApplyItem(Player player, boolean inform) { - Manager.RemoveItem(player); + Manager.removeGadgetType(player, GadgetType.Item); _active.add(player); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemEtherealPearl.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemEtherealPearl.java similarity index 90% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemEtherealPearl.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemEtherealPearl.java index bb7ef9c8f..7f0b83cba 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemEtherealPearl.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemEtherealPearl.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import java.util.ArrayList; import java.util.HashSet; @@ -19,11 +19,14 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -34,11 +37,8 @@ public class ItemEtherealPearl extends ItemGadget public ItemEtherealPearl(GadgetManager manager) { - super(manager, "Ethereal Pearl", new String[] - { - C.cWhite + "Take a ride through the skies", - C.cWhite + "on your very own Ethereal Pearl!", - }, + super(manager, "Ethereal Pearl", + UtilText.splitLineToArray(C.cWhite + "These Pearls are stolen from sleeping Endermen!", LineFormat.LORE), -1, Material.ENDER_PEARL, (byte)0, 500, new Ammo("Ethereal Pearl", "50 Pearls", Material.ENDER_PEARL, (byte)0, new String[] { C.cWhite + "50 Pearls to get around with!" }, 500, 50)); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemFirework.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFirework.java similarity index 86% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemFirework.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFirework.java index 114fbeeff..597dc0a2a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemFirework.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFirework.java @@ -1,33 +1,31 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import org.bukkit.Color; import org.bukkit.FireworkEffect; +import org.bukkit.FireworkEffect.Type; import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.FireworkEffect.Type; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.util.Vector; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; import mineplex.core.gadget.types.ItemGadget; -import mineplex.core.recharge.Recharge; public class ItemFirework extends ItemGadget { public ItemFirework(GadgetManager manager) { - super(manager, "Fireworks", new String[] - { - C.cWhite + "Need to celebrate?!", - C.cWhite + "Use some fireworks!", - C.cWhite + "Pew pew pew!", - }, + super(manager, "Fireworks", + UtilText.splitLineToArray(C.cWhite + "Need to celebrate? These fireworks should do the trick!", LineFormat.LORE), -1, Material.FIREWORK, (byte)0, 500, new Ammo("Fireworks", "50 Fireworks", Material.FIREWORK, (byte)0, new String[] { C.cWhite + "50 Fireworks for you to launch!" }, 500, 50)); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemFleshHook.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFleshHook.java similarity index 88% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemFleshHook.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFleshHook.java index a439aca63..a35ab819d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemFleshHook.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFleshHook.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import org.bukkit.EntityEffect; import org.bukkit.Material; @@ -11,11 +11,14 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; @@ -26,12 +29,8 @@ public class ItemFleshHook extends ItemGadget implements IThrown { public ItemFleshHook(GadgetManager manager) { - super(manager, "Flesh Hook", new String[] - { - C.cWhite + "Make new friends by throwing a hook", - C.cWhite + "into their face and pulling them", - C.cWhite + "towards you!", - }, + super(manager, "Flesh Hook", + UtilText.splitLineToArray(C.cWhite + "Make new friends by throwing a hook into their face and pulling them towards you!", LineFormat.LORE), -1, Material.getMaterial(131), (byte)0, 2000, new Ammo("Flesh Hook", "50 Flesh Hooks", Material.getMaterial(131), (byte)0, new String[] { C.cWhite + "50 Flesh Hooks for you to use!" }, 1000, 50)); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemFootball.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFootball.java similarity index 97% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemFootball.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFootball.java index 12537a599..b44dfd504 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemFootball.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFootball.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import java.util.HashSet; @@ -23,6 +23,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFreezeCannon.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFreezeCannon.java new file mode 100644 index 000000000..79c8635ad --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFreezeCannon.java @@ -0,0 +1,198 @@ +package mineplex.core.gadget.gadgets.item; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.EntityEffect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +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; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; +import mineplex.core.gadget.types.ItemGadget; +import mineplex.core.projectile.IThrown; +import mineplex.core.projectile.ProjectileUser; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class ItemFreezeCannon extends ItemGadget implements IThrown +{ + + private HashMap _playerMap = new HashMap<>(); + + public ItemFreezeCannon(GadgetManager manager) + { + super(manager, "Freeze Cannon", + UtilText.splitLineToArray(C.cWhite + "Let someone cool off inside their very own ice cube!", LineFormat.LORE), + -1, + Material.ICE, (byte) 0, 8000, new Ammo("Freeze Cannon", "100 Ice Blocks", Material.ICE, (byte) 0, new String[] + { + C.cWhite + "100 Ice Blocks for you to launch!" + }, -1, 1)); + } + + @Override + public void ActivateCustom(Player player) + { + Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), new ItemStack(Material.ICE)); + UtilAction.velocity(item, player.getLocation().getDirection(), + 1, false, 0, 0.2, 10, false); + + Manager.getProjectileManager().AddThrow(item, player, this, 5000, true, true, true, true, + null, 1f, 1f, null, null, 0, UpdateType.TICK, 0.5f); + + //Inform + UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + ".")); + + //Effect + item.getWorld().playSound(item.getLocation(), Sound.EXPLODE, 0.5f, 0.5f); + } + + @Override + public void Collide(LivingEntity target, Block block, ProjectileUser data) + { + if (target instanceof Player) + { + Player p = (Player) target; + + int ticks = 4 * 20; + if(isClear(p.getLocation())) + { + Manager.getBlockRestore().add(p.getLocation().getBlock(), Material.STAINED_GLASS.getId(), (byte)5, 0, (byte)0, ticks*50); + Manager.getBlockRestore().add(p.getLocation().getBlock().getRelative(BlockFace.UP), Material.STAINED_GLASS.getId(), (byte)5, 0, (byte)0, ticks*50); + if(p.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) + { + Manager.getBlockRestore().add(p.getLocation().getBlock().getRelative(BlockFace.DOWN), Material.STAINED_GLASS.getId(), (byte)5, 0, (byte)0, ticks*50); + } + p.setWalkSpeed(0); + _playerMap.put(p, System.currentTimeMillis() + (ticks * 50)); + p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, ticks, 250, true, false)); + p.teleport(target.getLocation().getBlock().getLocation().add(0.5, 0, 0.5)); + Recharge.Instance.useForce(p, "Double Jump", ticks*50); + p.setAllowFlight(false); + p.getWorld().playSound(p.getLocation(), Sound.FIZZ, 0.25f, 0.75f); + } + + //Effect + target.playEffect(EntityEffect.HURT); + } + + smash(data.GetThrown()); + } + + @EventHandler + public void onMove(PlayerMoveEvent event) + { + if(!_playerMap.containsKey(event.getPlayer())) return; + + if(event.getFrom().distanceSquared(event.getTo()) > 0.3) + { + event.setCancelled(true); + } + } + + public boolean isClear(Location loc) + { + Block b = loc.getBlock(); + ArrayList blocks = UtilBlock.getInBoundingBox(b.getLocation().subtract(1, 0, 1), b.getLocation().add(1, 1, 1)); + for(Block test : blocks) + { + if(test.getType() == Material.PORTAL) return false; + } + if(b.getType() != Material.AIR) return false; + if(b.getRelative(BlockFace.UP).getType() != Material.AIR) return false; + + return true; + } + + @EventHandler + public void cleanup(UpdateEvent event) + { + if(event.getType() == UpdateType.FAST) + { + for(Iterator it = _playerMap.keySet().iterator(); it.hasNext();) + { + Player p = it.next(); + Long time = _playerMap.get(p); + if(time == null) + { + p.setWalkSpeed(0.2f); + p.setAllowFlight(false); + it.remove(); + continue; + } + if(time < System.currentTimeMillis()) + { + p.setWalkSpeed(0.2f); + p.setAllowFlight(false); + it.remove(); + continue; + } + } + } + if(event.getType() == UpdateType.TICK) + { + for(Player p : _playerMap.keySet()) + { + Long time = _playerMap.get(p); + if(time <= System.currentTimeMillis()) continue; + + for(Player op : UtilServer.getPlayers()) + { + if(op.equals(p)) continue; + op.sendBlockChange(p.getLocation(), Material.ICE, (byte) 0); + op.sendBlockChange(p.getLocation().add(0, 1, 0), Material.ICE, (byte) 0); + } + } + } + } + + @Override + public void Idle(ProjectileUser data) + { + smash(data.GetThrown()); + } + + @Override + public void Expire(ProjectileUser data) + { + smash(data.GetThrown()); + } + + public void smash(Entity ent) + { + //Effect + ent.getWorld().playEffect(ent.getLocation(), Effect.STEP_SOUND, Material.ICE); + + //Remove + ent.remove(); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemMelonLauncher.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemMelonLauncher.java similarity index 92% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemMelonLauncher.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemMelonLauncher.java index 0692aa661..78269f173 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemMelonLauncher.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemMelonLauncher.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import java.util.ArrayList; import java.util.Iterator; @@ -20,11 +20,14 @@ import org.bukkit.util.Vector; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; @@ -38,12 +41,8 @@ public class ItemMelonLauncher extends ItemGadget implements IThrown public ItemMelonLauncher(GadgetManager manager) { - super(manager, "Melon Launcher", new String[] - { - C.cWhite + "Deliciously fun!", - C.cWhite + "Eat the melon slices for a", - C.cWhite + "temporary speed boost!", - }, + super(manager, "Melon Launcher", + UtilText.splitLineToArray(C.cWhite + "Because who doesn't want to shoot watermelons at people?!", LineFormat.LORE), -1, Material.MELON_BLOCK, (byte)0, 1000, new Ammo("Melon Launcher", "100 Melons", Material.MELON_BLOCK, (byte)0, new String[] { C.cWhite + "100 Melons for you to launch!" }, 500, 100)); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemPaintballGun.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPaintballGun.java similarity index 87% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemPaintballGun.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPaintballGun.java index 68fba27a0..c6ad69ce8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemPaintballGun.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPaintballGun.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import java.util.ArrayList; import java.util.HashSet; @@ -21,14 +21,17 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.util.Vector; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilServer; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.event.GadgetBlockEvent; +import mineplex.core.gadget.gadgets.Ammo; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -39,10 +42,9 @@ public class ItemPaintballGun extends ItemGadget public ItemPaintballGun(GadgetManager manager) { - super(manager, "Paintball Gun", new String[] - { - C.cWhite + "PEW PEW PEW PEW!", - }, -1, Material.GOLD_BARDING, (byte) 0, 200, new Ammo("Paintball Gun", "100 Paintballs", Material.GOLD_BARDING, + super(manager, "Paintball Gun", + UtilText.splitLineToArray(C.cWhite + "PEW PEW PEW!", LineFormat.LORE), + -1, Material.GOLD_BARDING, (byte) 0, 200, new Ammo("Paintball Gun", "100 Paintballs", Material.GOLD_BARDING, (byte) 0, new String[] { C.cWhite + "100 Paintballs for you to shoot!" diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemPaintbrush.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPaintbrush.java similarity index 92% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemPaintbrush.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPaintbrush.java index ba0fd0d76..790a66d44 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemPaintbrush.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPaintbrush.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import java.util.ArrayList; import java.util.Arrays; @@ -18,6 +18,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEvent; @@ -25,8 +26,11 @@ import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; +import mineplex.core.gadget.types.GadgetType; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; @@ -41,12 +45,8 @@ public class ItemPaintbrush extends ItemGadget public ItemPaintbrush(GadgetManager manager) { - super(manager, "Paintbrush", new String[] - { - C.cWhite + "Unleash your inner creativity!", - C.cWhite + "", - C.cGreen + "Activated at a Painter NPC", - }, + super(manager, "Paintbrush", + UtilText.splitLineToArray(C.cWhite + "Unleash your inner Bob Ross! Happy little trees!", LineFormat.LORE), -3, Material.WOOD_SWORD, (byte)0, 200, new Ammo("Paint", "100 Pixels", Material.INK_SACK, (byte)0, new String[] { C.cWhite + "100 Pixels worth of Paint!" }, 500, 100)); @@ -55,7 +55,7 @@ public class ItemPaintbrush extends ItemGadget @Override public void ApplyItem(Player player, boolean inform) { - Manager.RemoveItem(player); + Manager.removeGadgetType(player, GadgetType.Item); _active.add(player); @@ -200,7 +200,7 @@ public class ItemPaintbrush extends ItemGadget Villager villager = (Villager)event.getRightClicked(); - if (villager.getCustomName() != null && villager.getCustomName().contains("Painter")) + if (villager.getCustomName() != null && villager.getCustomName().contains("Bob Ross")) { Enable(event.getPlayer()); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPartyPopper.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPartyPopper.java new file mode 100644 index 000000000..92da2218c --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemPartyPopper.java @@ -0,0 +1,143 @@ +package mineplex.core.gadget.gadgets.item; + +import java.util.HashSet; + +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.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; +import mineplex.core.gadget.types.ItemGadget; +import mineplex.core.projectile.IThrown; +import mineplex.core.projectile.ProjectileUser; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class ItemPartyPopper extends ItemGadget implements IThrown +{ + HashSet _items = new HashSet<>(); + + public ItemPartyPopper(GadgetManager manager) + { + super(manager, "Party Popper", + UtilText.splitLineToArray(C.cWhite + "Celebrate by blasting confetti into peoples eyes!", LineFormat.LORE), + 1, Material.GOLDEN_CARROT, (byte) 0, 1000, new Ammo("Party Popper", "1 Party Popper", Material.GOLDEN_CARROT, + (byte) 0, new String[] + { + C.cWhite + "100 Party Poppers for you to shoot!" + }, -2, 1)); + } + + @Override + public void ActivateCustom(Player player) + { + /* +// Item ent = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), +// ItemStackFactory.Instance.CreateStack(Material.REDSTONE_LAMP_OFF, (byte)0, 1, "Lamp" + Math.random())); +// +// UtilAction.velocity(ent, player.getLocation().getDirection().normalize().multiply(0.1), 1, false, 0, 0.2, 10, false); +// +// Manager.getProjectileManager().AddThrow(ent, player, this, 3000, false, false, true, true, 0.5f); + + */ + + + for(int data : new int[]{1,2,4,5,6,9,10,11,12,13,14,15}) + { +// UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, data), player.getEyeLocation(), null, 0.4f, 50, ViewDist.LONG); + + for(int i = 0; i < 10; i++) + { + Vector v = new Vector(Math.random() - 0.5, Math.random() - 0.3, Math.random() - 0.5); + v.normalize(); + v.multiply(0.2); + v.add(player.getLocation().getDirection()); + v.normalize().multiply(Math.random()*0.4 + 0.4); + + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, data), player.getEyeLocation(), v, 1, 0, ViewDist.LONG); + } + + /* + Item ent = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), + ItemStackFactory.Instance.CreateStack(Material.INK_SACK, (byte)data, 1, "Ink" + Math.random())); + _items.add(ent); + + Vector random = new Vector(Math.random() - 0.5, Math.random() - 0.3, Math.random() - 0.5); + random.normalize(); + random.multiply(0.05); + + UtilAction.velocity(ent, player.getLocation().getDirection().normalize().multiply(0.3).add(random), 1 + 0.4 * Math.random(), false, 0, 0.2, 10, false); + + Manager.getProjectileManager().AddThrow(ent, player, this, 3000, false, false, true, true, 0.5f); + */ + } + // Sound + for(int i = 0; i < 3; i++) + { + player.getWorld().playSound(player.getLocation(), Sound.CHICKEN_EGG_POP, 2.0f, 0.8f); + } + } + + @Override + public void Collide(LivingEntity target, Block block, ProjectileUser data) + { + Explode(data); + } + + @Override + public void Idle(ProjectileUser data) + { + Explode(data); + } + + @Override + public void Expire(ProjectileUser data) + { + Explode(data); + } + + @EventHandler + public void particleTrail(UpdateEvent event) + { + if(event.getType() != UpdateType.TICK) return; + + for(Item item : _items) + { + byte data = item.getItemStack().getData().getData(); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, data), item.getLocation(), 0, 0, 0, 0.0f, 3, ViewDist.LONG); + } + } + + public void Explode(ProjectileUser data) + { + for(int type : new int[]{1,2,4,5,6,9,10,11,12,13,14,15}) + { + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, type), data.GetThrown().getLocation(), null, 0.4f, 50, ViewDist.LONG); + } + data.GetThrown().getWorld().playSound(data.GetThrown().getLocation(), Sound.LAVA_POP, 0.75f, 1.25f); + data.GetThrown().remove(); + /* + if (data.GetThrown() instanceof Item) + { + Item item = (Item) data.GetThrown(); + byte b = item.getItemStack().getData().getData(); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, b), item.getLocation(), 0, 0, 0, 0.2f, 80, ViewDist.LONG); + _items.remove(item); + } + data.GetThrown().getWorld().playSound(data.GetThrown().getLocation(), Sound.LAVA_POP, 0.75f, 1.25f); + data.GetThrown().remove(); + */ + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemSnowball.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemSnowball.java new file mode 100644 index 000000000..5e8a9734a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemSnowball.java @@ -0,0 +1,60 @@ +package mineplex.core.gadget.gadgets.item; + +import java.util.HashSet; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.entity.Snowball; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.event.GadgetCollideEntityEvent; +import mineplex.core.gadget.gadgets.Ammo; +import mineplex.core.gadget.types.ItemGadget; + +public class ItemSnowball extends ItemGadget +{ + + private HashSet _snowballs = new HashSet<>(); + + public ItemSnowball(GadgetManager manager) + { + super(manager, "Snowball", + UtilText.splitLineToArray(C.cWhite + "Join in on the festive fun by throwing snow at people!", LineFormat.LORE), + -1, Material.SNOW_BALL, (byte) 0, 1, new Ammo("Snowball", "1 Snowball", Material.SNOW_BALL, (byte) 0, new String[] + { + C.cWhite + "50 Snowballs for you to throw!" + } + , -3, 1)); + + } + + @Override + public void ActivateCustom(Player player) + { + Snowball ball = player.launchProjectile(Snowball.class); + _snowballs.add(ball); + ball.getWorld().playSound(ball.getLocation(), Sound.CHICKEN_EGG_POP, 1f, 0.3f); + } + + @EventHandler + public void onHit(EntityDamageByEntityEvent event) + { + if(!_snowballs.contains(event.getDamager())) return; + + GadgetCollideEntityEvent gevent = new GadgetCollideEntityEvent(this, event.getEntity()); + + if(gevent.isCancelled()) return; + + UtilAction.velocity(event.getEntity(), event.getDamager().getVelocity().normalize().add(new Vector(0,0.5,0)).multiply(0.5)); + event.getDamager().getWorld().playSound(event.getDamager().getLocation(), Sound.STEP_SNOW, 1, 0.5f); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemTNT.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemTNT.java similarity index 89% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemTNT.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemTNT.java index 0bf3531b7..e3b5f01f9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ItemTNT.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemTNT.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.item; import java.util.HashMap; import java.util.HashSet; @@ -12,14 +12,17 @@ import org.bukkit.event.entity.EntityExplodeEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.Ammo; import mineplex.core.gadget.types.ItemGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -30,11 +33,8 @@ public class ItemTNT extends ItemGadget public ItemTNT(GadgetManager manager) { - super(manager, "TNT", new String[] - { - C.cWhite + "Blow some people up!", - C.cWhite + "KABOOM!", - }, + super(manager, "TNT", + UtilText.splitLineToArray(C.cWhite + "Throwing TNT at Mineplex Staff is highly encouraged.", LineFormat.LORE), -1, Material.TNT, (byte)0, 1000, new Ammo("TNT", "20 TNT", Material.TNT, (byte)0, new String[] { C.cWhite + "20 TNT for you to explode!" }, 500, 20)); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/BlockForm.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/BlockForm.java similarity index 99% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/BlockForm.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/BlockForm.java index 7fb434ae2..4a4be4ccd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/BlockForm.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/BlockForm.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import java.util.ArrayList; import java.util.List; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBat.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBat.java similarity index 91% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBat.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBat.java index 22cf5855e..c6a61b789 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBat.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBat.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import org.bukkit.EntityEffect; import org.bukkit.GameMode; @@ -19,12 +19,14 @@ import org.bukkit.potion.PotionEffectType; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.disguise.disguises.DisguiseBat; import mineplex.core.projectile.IThrown; @@ -40,15 +42,15 @@ public class MorphBat extends MorphGadget implements IThrown { public MorphBat(GadgetManager manager) { - super(manager, "Bat Morph", new String[] + super(manager, "Bat Morph", + UtilText.splitLinesToArray(new String[] { - C.cWhite + "Flap around and annoy people by", - C.cWhite + "screeching loudly into their ears!", - " ", - C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Screech", - C.cYellow + "Double Jump" + C.cGray + " to use " + C.cGreen + "Flap", - C.cYellow + "Tap Sneak" + C.cGray + " to use " + C.cGreen + "Poop", - }, + C.cGray + "Flap around and annoy people by screeching loudly into their ears!", + C.blankLine, + "#" + C.cWhite + "Left-Click to use Screech", + "#" + C.cWhite + "Double Jump to use Flap", + "#" + C.cWhite + "Sneak to use Poop", + }, LineFormat.LORE), 40000, Material.SKULL_ITEM, (byte)1); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBlaze.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBlaze.java similarity index 86% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBlaze.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBlaze.java index d7b73309d..1ea72b7e4 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBlaze.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBlaze.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -9,9 +9,11 @@ import org.bukkit.event.player.PlayerJoinEvent; import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBlaze; @@ -24,15 +26,14 @@ public class MorphBlaze extends MorphGadget { public MorphBlaze(GadgetManager manager) { - super(manager, "Blaze Morph", new String[] + super(manager, "Blaze Morph", + UtilText.splitLinesToArray(new String[] { - C.cWhite + "Transforms the wearer into a fiery Blaze!", - " ", - C.cYellow + "Crouch" + C.cGray + " to use " + C.cGreen + "Firefly", - " ", - C.cPurple + "Unlocked with Hero Rank", - }, - -1, + C.cGray + "Transform into a fiery Blaze, straight from the Nether!", + C.blankLine, + "#" + C.cWhite + "Crouch to use Firefly", + }, LineFormat.LORE), + -11, Material.BLAZE_POWDER, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBlock.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBlock.java similarity index 89% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBlock.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBlock.java index dd5e22071..dea95636a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBlock.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBlock.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import java.util.HashMap; @@ -14,9 +14,11 @@ import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.player.PlayerInteractEvent; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.event.StackerEvent; import mineplex.core.gadget.GadgetManager; @@ -32,13 +34,13 @@ public class MorphBlock extends MorphGadget public MorphBlock(GadgetManager manager) { - super(manager, "Block Morph", new String[] + super(manager, "Block Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "The blockiest block that ever blocked.", - " ", - C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Change Block", - C.cYellow + "Stay Still" + C.cGray + " to use " + C.cGreen + "Solidify", - }, + C.cGray + "The blockiest block that ever blocked.", + C.blankLine, + "#" + C.cWhite + "Left Click to use Change Block", + "#" + C.cWhite + "Stay Still to use Solidify", + }, LineFormat.LORE), 30000, Material.EMERALD_BLOCK, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBunny.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBunny.java similarity index 93% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBunny.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBunny.java index 78e502bc5..55f67dc0d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphBunny.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphBunny.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import java.util.HashMap; import java.util.HashSet; @@ -24,12 +24,14 @@ import org.bukkit.potion.PotionEffectType; import mineplex.core.common.CurrencyType; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilFirework; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; @@ -50,18 +52,16 @@ public class MorphBunny extends MorphGadget public MorphBunny(GadgetManager manager) { - super(manager, "Easter Bunny Morph", new String[] + super(manager, "Easter Bunny Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "Happy Easter!", - " ", - C.cYellow + "Charge Crouch" + C.cGray + " to use " + C.cGreen + "Super Jump", - C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Hide Easter Egg", - " ", - C.cRed +C.Bold + "WARNING: " + ChatColor.RESET + "Hide Easter Egg uses 500 Coins" , - " ", - C.cPurple + "No longer available", - }, - -1, + C.cGray + "Happy Easter!", + C.blankLine, + "#" + C.cWhite + "Charge Crouch to use Super Jump", + "#" + C.cWhite + "Left Click to use Hide Easter Egg", + C.blankLine, + "#" + C.cRed +C.Bold + "WARNING: " + ChatColor.RESET + "Hide Easter Egg uses 500 Coins" , + }, LineFormat.LORE), + -5, Material.MONSTER_EGG, (byte)98); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphChicken.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphChicken.java similarity index 90% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphChicken.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphChicken.java index 6e3be5fce..5d989f5e0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphChicken.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphChicken.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import org.bukkit.ChatColor; import org.bukkit.EntityEffect; @@ -17,10 +17,12 @@ import org.bukkit.util.Vector; import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; 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.UtilText; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.disguise.disguises.DisguiseChicken; import mineplex.core.recharge.Recharge; @@ -33,13 +35,13 @@ public class MorphChicken extends MorphGadget { public MorphChicken(GadgetManager manager) { - super(manager, "Chicken Morph", new String[] + super(manager, "Chicken Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "Soar through the air like a fat Chicken!", - " ", - C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Egg Shot", - C.cYellow + "Double Jump" + C.cGray + " to use " + C.cGreen + "Flap", - }, + C.cGray + "Soar through the air like a fat Chicken!", + C.blankLine, + "#" + C.cWhite + "Left Click to use Egg Shot", + "#" + C.cWhite + "Double Jump to use Flap", + }, LineFormat.LORE), 20000, Material.FEATHER, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphCow.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphCow.java similarity index 81% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphCow.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphCow.java index 96dcda738..95ce07b35 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphCow.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphCow.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import org.bukkit.Material; import org.bukkit.Sound; @@ -7,7 +7,9 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.player.*; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.disguise.disguises.DisguiseCow; import mineplex.core.recharge.Recharge; @@ -18,12 +20,12 @@ public class MorphCow extends MorphGadget { public MorphCow(GadgetManager manager) { - super(manager, "Cow Morph", new String[] + super(manager, "Cow Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "How now brown cow?", - " ", - C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Moo", - }, + C.cGray + "How now brown cow?", + C.blankLine, + "#" + C.cWhite + "Left Click to use Moo", + }, LineFormat.LORE), 6000, Material.LEATHER, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphCreeper.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphCreeper.java similarity index 92% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphCreeper.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphCreeper.java index 8c9419476..ee5a33290 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphCreeper.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphCreeper.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import java.util.HashMap; @@ -13,11 +13,13 @@ import org.bukkit.event.player.PlayerQuitEvent; import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.disguise.disguises.DisguiseBase; @@ -33,15 +35,13 @@ public class MorphCreeper extends MorphGadget public MorphCreeper(GadgetManager manager) { - super(manager, "Creeper Morph", new String[] + super(manager, "Creeper Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "Transforms the wearer into a creepy Creeper!", - " ", - C.cYellow + "Crouch" + C.cGray + " to use " + C.cGreen + "Detonate", - " ", - C.cPurple + "Unlocked with Hero Rank", - }, - -1, + C.cGray + "Become the creepiest of Creepers that ever creeped!", + C.blankLine, + C.cWhite + "Crouch to use Detonate", + }, LineFormat.LORE), + -11, Material.SKULL_ITEM, (byte)4); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphEnderman.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphEnderman.java similarity index 90% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphEnderman.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphEnderman.java index 72c6518d6..b833b52bb 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphEnderman.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphEnderman.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import org.bukkit.Color; import org.bukkit.Effect; @@ -16,8 +16,10 @@ import org.bukkit.event.player.PlayerToggleFlightEvent; import org.bukkit.util.Vector; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilFirework; +import mineplex.core.common.util.UtilText; import mineplex.core.disguise.disguises.DisguiseEnderman; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.types.MorphGadget; @@ -29,12 +31,12 @@ public class MorphEnderman extends MorphGadget { public MorphEnderman(GadgetManager manager) { - super(manager, "Enderman Morph", new String[] + super(manager, "Enderman Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "Transforms the wearer into an Enderman!", - " ", - C.cYellow + "Double Jump" + C.cGray + " to use " + C.cGreen + "Blink", - }, + C.cGray + "Using this morph is the ultimate diet! Guaranteed instant results!", + C.blankLine, + "#" + C.cWhite + "Double Jump to use Blink", + }, LineFormat.LORE), 30000, Material.ENDER_PEARL, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphPig.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphPig.java similarity index 91% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphPig.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphPig.java index d42b43023..59ed09fa0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphPig.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphPig.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import java.util.HashSet; @@ -11,11 +11,13 @@ import org.bukkit.event.player.*; import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilServer; import mineplex.core.disguise.disguises.DisguisePig; @@ -31,16 +33,14 @@ public class MorphPig extends MorphGadget public MorphPig(GadgetManager manager) { - super(manager, "Pig Morph", new String[] + super(manager, "Pig Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "Oink. Oink. Oink.... Oink?", - " ", - C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Oink", - C.cYellow + "Collide" + C.cGray + " to use " + C.cGreen + "Pig Bounce", - " ", - C.cAqua + "Unlocked with Ultra Rank", - }, - -1, + C.cGray + "Oink. Oink. Oink.... Oink?", + C.blankLine, + "#" + C.cWhite + "Left Click to use Oink", + "#" + C.cWhite + "Collide to use Pig Bounce", + }, LineFormat.LORE), + -10, Material.PORK, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphPumpkinKing.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphPumpkinKing.java similarity index 82% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphPumpkinKing.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphPumpkinKing.java index 13c83e5d9..ed425a5de 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphPumpkinKing.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphPumpkinKing.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -7,7 +7,9 @@ import org.bukkit.entity.Skeleton.SkeletonType; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.disguise.disguises.DisguiseSkeleton; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.types.MorphGadget; @@ -17,15 +19,11 @@ public class MorphPumpkinKing extends MorphGadget { public MorphPumpkinKing(GadgetManager manager) { - super(manager, "Pumpkin Kings Head", new String[] + super(manager, "Pumpkin Kings Head", UtilText.splitLinesToArray(new String[] { - C.cWhite + "Transforms the wearer into", - C.cWhite + "the dreaded Pumpkin King!", - "", - C.cYellow + "Earned by defeating the Pumpkin King", - C.cYellow + "in the 2013 Halloween Horror Event.", - }, - -1, + C.cGray + "Transforms the wearer into the dreaded Pumpkin King!", + }, LineFormat.LORE), + -4, Material.PUMPKIN, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphSlime.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphSlime.java similarity index 82% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphSlime.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphSlime.java index 4737cf7ad..7a8430173 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphSlime.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphSlime.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import org.bukkit.Material; import org.bukkit.Sound; @@ -9,9 +9,11 @@ import org.bukkit.event.player.*; import mineplex.core.account.CoreClientManager; import mineplex.core.achievement.AchievementManager; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.disguise.disguises.DisguiseSlime; import mineplex.core.recharge.Recharge; @@ -25,14 +27,14 @@ public class MorphSlime extends MorphGadget public MorphSlime(GadgetManager manager, AchievementManager achievements) { - super(manager, "Big Larry Morph", new String[] + super(manager, "Big Larry Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "Become a slime like Big Larry!", - " ", - C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Bounce", - " ", - C.cWhite + "+1 Slime Size for every 10 Mineplex Levels", - }, + C.cGray + "Have you ever looked at Big Larry and thought, \'I really want to be that guy!\'? Well, today is your lucky day!", + C.blankLine, + "#" + C.cWhite + "Left Click to use Bounce", + C.blankLine, + "#" + C.cWhite + "+1 Size per 10 Mineplex Levels", + }, LineFormat.LORE), 80000, Material.SLIME_BALL, (byte)0); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphSnowman.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphSnowman.java new file mode 100644 index 000000000..75e5ad743 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphSnowman.java @@ -0,0 +1,154 @@ +package mineplex.core.gadget.gadgets.morph; + +import java.util.WeakHashMap; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Snowball; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +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.LineFormat; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.disguise.disguises.DisguiseSnowman; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.event.GadgetCollideEntityEvent; +import mineplex.core.gadget.types.MorphGadget; +import mineplex.core.recharge.Recharge; +import mineplex.core.recharge.RechargeData; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class MorphSnowman extends MorphGadget +{ + + private WeakHashMap _snowball = new WeakHashMap(); + + public MorphSnowman(GadgetManager manager) + { + super(manager, "Olaf Morph", + UtilText.splitLinesToArray(new String[] + { + C.cGray + "Do you wanna build a snowman?", + C.cGray + "It doesn't have to be a snowman...", + C.cGray + "Or... it kind of does...", + C.blankLine, + "#" + C.cWhite + "Left-Click to use Blizzard", + "#" + C.cWhite + "Sneak to use Snow Slide", + }, LineFormat.LORE), + -3, Material.SNOW_BALL, (byte) 0); + } + + @Override + public void EnableCustom(Player player) + { + this.ApplyArmor(player); + + DisguiseSnowman disguise = new DisguiseSnowman(player); + disguise.setName(player.getName(), Manager.getClientManager().Get(player).GetRank()); + disguise.setCustomNameVisible(true); + Manager.getDisguiseManager().disguise(disguise); + } + + @Override + public void DisableCustom(Player player) + { + this.RemoveArmor(player); + Manager.getDisguiseManager().undisguise(player); + } + + @EventHandler + public void onInteract(PlayerInteractEvent event) + { + if(!IsActive(event.getPlayer())) return; + + if(!UtilEvent.isAction(event, ActionType.L)) return; + + if(event.getItem() != null && event.getItem().getType() != Material.AIR) return; + + if(Recharge.Instance.use(event.getPlayer(), "Blizzard", 12000, true, true)) + { + event.getPlayer().sendMessage(F.main("Recharge", "You used " + F.skill("Blizzard") + ".")); + } + } + + @EventHandler + public void Snow(UpdateEvent event) + { + if (event.getType() == UpdateType.FASTEST) + { + + for (Player player : GetActive()) + { + NautHashMap map = Recharge.Instance.Get(player); + if(map == null) continue; + + RechargeData data = map.get("Blizzard"); + if(data == null) continue; + if(data.GetRemaining() < 10000) continue; + + for (int i=0 ; i<4 ; i++) + { + Snowball snow = player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), Snowball.class); + double x = 0.1 - (UtilMath.r(20)/100d); + double y = UtilMath.r(20)/100d; + double z = 0.1 - (UtilMath.r(20)/100d); + snow.setShooter(player); + snow.setVelocity(player.getLocation().getDirection().add(new Vector(x,y,z)).multiply(2)); + _snowball.put(snow, player); + } + + //Effect + player.getWorld().playSound(player.getLocation(), Sound.STEP_SNOW, 0.2f, 0.5f); + } + } + + if(event.getType() == UpdateType.TICK) + { + for (Player player : GetActive()) + { + if(player.isSneaking() && UtilEnt.isGrounded(player)) + { + player.setVelocity(player.getLocation().getDirection().setY(0).normalize()); + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation(), 0.3f, 0.1f, 0.3f, 0, 10, ViewDist.NORMAL); + player.getWorld().playSound(player.getLocation(), Sound.STEP_SNOW, 0.3f, 0.3f); + } + } + } + } + + @EventHandler + public void Snowball(EntityDamageByEntityEvent event) + { + if (!(event.getDamager() instanceof Snowball)) + return; + + Snowball proj = (Snowball) event.getDamager(); + + if (!_snowball.containsKey(proj)) + return; + + GadgetCollideEntityEvent gevent = new GadgetCollideEntityEvent(this, event.getEntity()); + + if(gevent.isCancelled()) return; + + UtilAction.velocity(event.getEntity(), proj.getVelocity().multiply(0.15).add(new Vector(0, 0.15, 0))); + } + + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphTitan.java similarity index 92% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphTitan.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphTitan.java index ed61f6511..13fe0ee14 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphTitan.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphTitan.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import java.util.HashMap; import java.util.HashSet; @@ -9,9 +9,7 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import org.bukkit.entity.Zombie; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -19,12 +17,13 @@ import org.bukkit.util.Vector; import mineplex.core.common.Rank; import mineplex.core.common.util.C; -import mineplex.core.common.util.MapUtil; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; @@ -45,16 +44,14 @@ public class MorphTitan extends MorphGadget public MorphTitan(GadgetManager manager) { - super(manager, "Elder Guardian Morph", new String[] + super(manager, "Elder Guardian Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "From the depths of the sea, the", - C.cWhite + "Elder Guardian posseses powers", - C.cWhite + "more amazing than any seen before!", - " ", - C.cRed + "Unlocked with Titan Rank", - }, - -1, - Material.PRISMARINE_SHARD, (byte)0); + C.cGray + "From the depths of the sea, the Elder Guardian posseses powers more amazing than any seen before!", + C.blankLine, + "#" + C.cWhite + "Left-Click to use Guardians Laser", + }, LineFormat.LORE), + -13, + Material.PRISMARINE_CRYSTALS, (byte)0); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphVillager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphVillager.java similarity index 91% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphVillager.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphVillager.java index 985247b53..f327f0551 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphVillager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphVillager.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import java.util.HashSet; import java.util.Iterator; @@ -19,10 +19,12 @@ import org.bukkit.util.Vector; import mineplex.core.common.CurrencyType; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.disguise.disguises.DisguiseVillager; @@ -40,14 +42,14 @@ public class MorphVillager extends MorphGadget implements IThrown public MorphVillager(GadgetManager manager) { - super(manager, "Villager Morph", new String[] + super(manager, "Villager Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "HURRRR! MURR HURRR!", - " ", - C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Gem Throw", - " ", - C.cRed +C.Bold + "WARNING: " + ChatColor.RESET + "Gem Throw uses 20 Gems" - }, + C.cGray + "HURRRR! MURR HURRR!", + C.blankLine, + "#" + C.cWhite + "Left Click to use Gem Throw", + C.blankLine, + "#" + C.cRed +C.Bold + "WARNING: " + ChatColor.RESET + "Gem Throw uses 20 Gems" + }, LineFormat.LORE), 12000, Material.EMERALD, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphWither.java similarity index 93% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphWither.java index 506ffc717..a2d68070f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphWither.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/MorphWither.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.morph; import java.util.ArrayList; import java.util.HashMap; @@ -6,10 +6,12 @@ import java.util.Iterator; import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; @@ -43,15 +45,13 @@ public class MorphWither extends MorphGadget public MorphWither(GadgetManager manager) { - super(manager, "Wither Morph", new String[] + super(manager, "Wither Morph", UtilText.splitLinesToArray(new String[] { - C.cWhite + "Become a legendary Wither!", - " ", - C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Wither Skull", - " ", - C.cGreen + "Unlocked with Legend Rank", - }, - -1, + C.cGray + "Legends have foretold the coming of a powerful Wither...", + C.blankLine, + "#" + C.cWhite + "Left Click to use Wither Skull", + }, LineFormat.LORE), + -12, Material.SKULL_ITEM, (byte)1); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/OutfitRaveSuit.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuit.java similarity index 81% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/OutfitRaveSuit.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuit.java index 2834498a4..bc1656359 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/OutfitRaveSuit.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuit.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.outfit; import java.util.HashMap; @@ -11,9 +11,14 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.types.OutfitGadget; import mineplex.core.updater.UpdateType; @@ -27,7 +32,9 @@ public class OutfitRaveSuit extends OutfitGadget public OutfitRaveSuit(GadgetManager manager, String name, int cost, ArmorSlot slot, Material mat, byte data) { - super(manager, name, new String[] {ChatColor.RESET + "Wear the complete set for",ChatColor.RESET + "awesome bonus effects!", ChatColor.RESET + "Bonus coming soon..."}, cost, slot, mat, data); + super(manager, name, + UtilText.splitLineToArray(C.cGray + "There's nothing more suitable for celebration than this high tech flashing outfit!", LineFormat.LORE), + cost, slot, mat, data); } @Override @@ -155,4 +162,18 @@ public class OutfitRaveSuit extends OutfitGadget { _colorPhase.remove(event.getPlayer().getName()); } + + @EventHandler + public void setBonus(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + if (GetSlot() != ArmorSlot.Helmet) + return; + + for (Player player : UtilServer.getPlayers()) + if (getSet() != null && getSet().isActive(player)) + player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 39, 4, true, false), true); + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitBoots.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitBoots.java new file mode 100644 index 000000000..b74eda769 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitBoots.java @@ -0,0 +1,15 @@ +package mineplex.core.gadget.gadgets.outfit; + +import mineplex.core.gadget.GadgetManager; + +import org.bukkit.Material; + +public class OutfitRaveSuitBoots extends OutfitRaveSuit +{ + + public OutfitRaveSuitBoots(GadgetManager manager) + { + super(manager, "Rave Boots", -2, ArmorSlot.Boots, Material.LEATHER_BOOTS, (byte)0); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitChestplate.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitChestplate.java new file mode 100644 index 000000000..df3b5577e --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitChestplate.java @@ -0,0 +1,15 @@ +package mineplex.core.gadget.gadgets.outfit; + +import mineplex.core.gadget.GadgetManager; + +import org.bukkit.Material; + +public class OutfitRaveSuitChestplate extends OutfitRaveSuit +{ + + public OutfitRaveSuitChestplate(GadgetManager manager) + { + super(manager, "Rave Shirt", -2, ArmorSlot.Chest, Material.LEATHER_CHESTPLATE, (byte)0); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitHelmet.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitHelmet.java new file mode 100644 index 000000000..122ea157d --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitHelmet.java @@ -0,0 +1,15 @@ +package mineplex.core.gadget.gadgets.outfit; + +import mineplex.core.gadget.GadgetManager; + +import org.bukkit.Material; + +public class OutfitRaveSuitHelmet extends OutfitRaveSuit +{ + + public OutfitRaveSuitHelmet(GadgetManager manager) + { + super(manager, "Rave Hat", -2, ArmorSlot.Helmet, Material.LEATHER_HELMET, (byte)0); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitLeggings.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitLeggings.java new file mode 100644 index 000000000..b4b14df9d --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitRaveSuitLeggings.java @@ -0,0 +1,15 @@ +package mineplex.core.gadget.gadgets.outfit; + +import mineplex.core.gadget.GadgetManager; + +import org.bukkit.Material; + +public class OutfitRaveSuitLeggings extends OutfitRaveSuit +{ + + public OutfitRaveSuitLeggings(GadgetManager manager) + { + super(manager, "Rave Pants", -2, ArmorSlot.Legs, Material.LEATHER_LEGGINGS, (byte)0); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuit.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuit.java new file mode 100644 index 000000000..9d29e4e43 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuit.java @@ -0,0 +1,55 @@ +package mineplex.core.gadget.gadgets.outfit; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.OutfitGadget; +import mineplex.core.gadget.types.OutfitGadget.ArmorSlot; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class OutfitSpaceSuit extends OutfitGadget +{ + public OutfitSpaceSuit(GadgetManager manager, String name, + int cost, ArmorSlot slot, Material mat, byte data) + { + super(manager, name, + UtilText.splitLineToArray(C.cGray + "Designed specifically for combat in deep space for a sport known as \'Gravity\'", LineFormat.LORE), + cost, slot, mat, data); + } + + @Override + public void EnableCustom(Player player) + { + ApplyArmor(player); + } + + @Override + public void DisableCustom(Player player) + { + RemoveArmor(player); + } + + @EventHandler + public void setBonus(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + if (GetSlot() != ArmorSlot.Helmet) + return; + + for (Player player : UtilServer.getPlayers()) + if (getSet() != null && getSet().isActive(player)) + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 39, 7, true, false), true); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitBoots.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitBoots.java new file mode 100644 index 000000000..46b242283 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitBoots.java @@ -0,0 +1,15 @@ +package mineplex.core.gadget.gadgets.outfit; + +import mineplex.core.gadget.GadgetManager; + +import org.bukkit.Material; + +public class OutfitSpaceSuitBoots extends OutfitSpaceSuit +{ + + public OutfitSpaceSuitBoots(GadgetManager manager) + { + super(manager, "Space Boots", -2, ArmorSlot.Boots, Material.GOLD_BOOTS, (byte)0); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitChestplate.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitChestplate.java new file mode 100644 index 000000000..f2da731f0 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitChestplate.java @@ -0,0 +1,15 @@ +package mineplex.core.gadget.gadgets.outfit; + +import mineplex.core.gadget.GadgetManager; + +import org.bukkit.Material; + +public class OutfitSpaceSuitChestplate extends OutfitSpaceSuit +{ + + public OutfitSpaceSuitChestplate(GadgetManager manager) + { + super(manager, "Space Jacket", -2, ArmorSlot.Chest, Material.GOLD_CHESTPLATE, (byte)0); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitHelmet.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitHelmet.java new file mode 100644 index 000000000..2d5dabb70 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitHelmet.java @@ -0,0 +1,15 @@ +package mineplex.core.gadget.gadgets.outfit; + +import mineplex.core.gadget.GadgetManager; + +import org.bukkit.Material; + +public class OutfitSpaceSuitHelmet extends OutfitSpaceSuit +{ + + public OutfitSpaceSuitHelmet(GadgetManager manager) + { + super(manager, "Space Helmet", -2, ArmorSlot.Helmet, Material.GLASS, (byte)0); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitLeggings.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitLeggings.java new file mode 100644 index 000000000..3f29bced9 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitSpaceSuitLeggings.java @@ -0,0 +1,15 @@ +package mineplex.core.gadget.gadgets.outfit; + +import mineplex.core.gadget.GadgetManager; + +import org.bukkit.Material; + +public class OutfitSpaceSuitLeggings extends OutfitSpaceSuit +{ + + public OutfitSpaceSuitLeggings(GadgetManager manager) + { + super(manager, "Space Pants", -2, ArmorSlot.Legs, Material.GOLD_LEGGINGS, (byte)0); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/OutfitTeam.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitTeam.java similarity index 95% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/OutfitTeam.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitTeam.java index 9090eb81e..8abec4a35 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/OutfitTeam.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/outfit/OutfitTeam.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.outfit; import java.util.HashMap; @@ -19,7 +19,8 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilPlayer; import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.event.GadgetActivateEvent; +import mineplex.core.gadget.event.GadgetEnableEvent; +import mineplex.core.gadget.types.GadgetType; import mineplex.core.gadget.types.OutfitGadget; import mineplex.core.gadget.types.OutfitGadget.ArmorSlot; import mineplex.core.itemstack.ItemStackFactory; @@ -40,7 +41,7 @@ public class OutfitTeam extends OutfitGadget @Override public void Enable(Player player) { - GadgetActivateEvent gadgetEvent = new GadgetActivateEvent(player, this); + GadgetEnableEvent gadgetEvent = new GadgetEnableEvent(player, this); Bukkit.getServer().getPluginManager().callEvent(gadgetEvent); if (gadgetEvent.isCancelled()) @@ -55,7 +56,7 @@ public class OutfitTeam extends OutfitGadget @Override public void ApplyArmor(Player player) { - Manager.RemoveMorph(player); + Manager.removeGadgetType(player, GadgetType.Morph); Manager.RemoveOutfit(player, _slot); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleCandyCane.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleCandyCane.java new file mode 100644 index 000000000..d36ca5021 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleCandyCane.java @@ -0,0 +1,98 @@ +package mineplex.core.gadget.gadgets.particle; + +import java.util.HashMap; +import java.util.UUID; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.ParticleGadget; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class ParticleCandyCane extends ParticleGadget +{ + + private HashMap _map = new HashMap(); + + public ParticleCandyCane(GadgetManager manager) + { + super(manager, "Crushed Candy Cane", + UtilText.splitLineToArray(C.cGray + "There’s no such thing as too much Christmas Candy. Don’t listen to your dentist.", LineFormat.LORE), + -3, Material.INK_SACK, (byte)1); + } + + @EventHandler + public void onUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for(Player player : GetActive()) + { + if (!shouldDisplay(player)) + continue; + + boolean moving = Manager.isMoving(player); + Location loc = player.getLocation(); + float y = moving? 0.2f : 0.15f; + double yadd = getY(player); + if(!moving && yadd < 2.1) + { + yadd += 0.05; + setY(player, yadd); + } + if(moving && yadd > 0.7) + { + yadd = 0.7; + setY(player, yadd); + } + loc.add(0, yadd, 0); + + float w = 0.2f; + int a = moving? 2 : 6; + + if(!moving) + { + double d = Math.PI*2 * (event.getTick()/50.0); + Vector v = new Vector(Math.sin(d), 0, Math.cos(d)); + loc.add(v); + } + + + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 15), loc, w, y, w, 0, a, ViewDist.NORMAL); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 1), loc, w, y, w, 0, a, ViewDist.NORMAL); + UtilParticle.PlayParticleToAll(ParticleType.ICON_CRACK.getParticle(Material.INK_SACK, 2), loc, w, y, w, 0, a, ViewDist.NORMAL); + } + } + + @EventHandler + public void onQuit(PlayerQuitEvent event) + { + _map.remove(event.getPlayer().getUniqueId()); + } + + private void setY(Player p, double y) + { + _map.put(p.getUniqueId(), y); + } + + private double getY(Player p) + { + Double y = _map.get(p.getUniqueId()); + if(y == null) return 3; + return y.doubleValue(); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleCoalFumes.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleCoalFumes.java new file mode 100644 index 000000000..2ccb3701e --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleCoalFumes.java @@ -0,0 +1,40 @@ +package mineplex.core.gadget.gadgets.particle; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.ParticleGadget; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class ParticleCoalFumes extends ParticleGadget +{ + + public ParticleCoalFumes(GadgetManager manager) + { + super(manager, "Coal Fumes", + UtilText.splitLineToArray(C.cGray + "Being on the Naughty List does have some perks... if you love coal, that is...", LineFormat.LORE), + -1, Material.COAL, (byte) 0); + } + + @EventHandler + public void onUpdate(UpdateEvent event) + { + if(event.getType() != UpdateType.TICK) + return; + + for(Player p : GetActive()) + { + UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, p.getLocation(), 0.8f, 0, 0.8f, 0, 12, ViewDist.NORMAL); + } + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleEnchant.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleEnchant.java similarity index 80% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleEnchant.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleEnchant.java index 1225728a4..230705505 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleEnchant.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleEnchant.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import org.bukkit.GameMode; import org.bukkit.Material; @@ -6,8 +6,10 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; @@ -19,13 +21,8 @@ public class ParticleEnchant extends ParticleGadget { public ParticleEnchant(GadgetManager manager) { - super(manager, "Enchanted", new String[] - { - C.cWhite + "The wisdom of the universe", - C.cWhite + "suddenly finds you extremely", - C.cWhite + "attractive, and wants to", - C.cWhite + "\'enchant\' you.", - }, + super(manager, "Enchanted", + UtilText.splitLineToArray(C.cGray + "The wisdom of the universe suddenly find you extremely attractive, and wants to \'enchant\' you.", LineFormat.LORE), -2, Material.BOOK, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFairy.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFairy.java similarity index 91% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFairy.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFairy.java index 2c6c70091..5bc8b9381 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFairy.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFairy.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import java.util.HashMap; @@ -23,9 +23,9 @@ public class ParticleFairy extends ParticleGadget { super(manager, "Flame Fairy", new String[] { - C.cWhite + "HEY! LISTEN!", - C.cWhite + "HEY! LISTEN!", - C.cWhite + "HEY! LISTEN!", + C.cGray + "HEY! LISTEN!", + C.cGray + "HEY! LISTEN!", + C.cGray + "HEY! LISTEN!", }, -2, Material.BLAZE_POWDER, (byte)0); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFairyData.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFairyData.java similarity index 97% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFairyData.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFairyData.java index 00d4cd895..424f61382 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFairyData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFairyData.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFireRings.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFireRings.java similarity index 87% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFireRings.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFireRings.java index 3537558d2..99a79c36d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFireRings.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFireRings.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import org.bukkit.GameMode; import org.bukkit.Material; @@ -7,8 +7,10 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; @@ -21,12 +23,8 @@ public class ParticleFireRings extends ParticleGadget public ParticleFireRings(GadgetManager manager) { - super(manager, "Flame Rings", new String[] - { - C.cWhite + "Forged from the burning ashes", - C.cWhite + "of 1000 Blazes by the infamous", - C.cWhite + "Flame King of the Nether realm.", - }, + super(manager, "Flame Rings", + UtilText.splitLineToArray(C.cGray + "Forged from the blazing rods of 1000 Blazes by the infamous Nether King.", LineFormat.LORE), -2, Material.BLAZE_POWDER, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFoot.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFoot.java similarity index 89% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFoot.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFoot.java index 1e68a3d93..44448a375 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleFoot.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFoot.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import java.util.HashMap; import java.util.Iterator; @@ -14,11 +14,13 @@ import org.bukkit.event.EventHandler; import org.bukkit.util.Vector; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; @@ -35,13 +37,8 @@ public class ParticleFoot extends ParticleGadget public ParticleFoot(GadgetManager manager) { - super(manager, "Shadow Walk", new String[] - { - C.cWhite + "In a world where footprints", - C.cWhite + "do not exist, leaving your", - C.cWhite + "shadow behind is the next", - C.cWhite + "best thing.", - }, + super(manager, "Shadow Walk", + UtilText.splitLineToArray(C.cGray + "In a world where footprints do not exist, leaving your shadow behind is the next best thing!", LineFormat.LORE), -2, Material.LEATHER_BOOTS, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFrostLord.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFrostLord.java new file mode 100644 index 000000000..035615c59 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleFrostLord.java @@ -0,0 +1,85 @@ +package mineplex.core.gadget.gadgets.particle; + +import java.util.HashSet; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilServer; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.set.SetFrostLord; +import mineplex.core.gadget.types.GadgetSet; +import mineplex.core.gadget.types.ParticleGadget; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class ParticleFrostLord extends ParticleGadget +{ + public ParticleFrostLord(GadgetManager manager) + { + super(manager, "Wind of the Frost Lord", + UtilText.splitLineToArray(C.cGray + "He’s not passing wind okay? HE HAS A CONDITION!", LineFormat.LORE), + -3, + Material.SNOW_BALL, (byte)0, "Frost Lord"); + } + + @EventHandler + public void playParticle(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for (Player player : GetActive()) + { + if (!shouldDisplay(player)) + continue; + + if (Manager.isMoving(player)) + { + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4, + ViewDist.NORMAL, UtilServer.getPlayers()); + } + else + { + player.getWorld().playSound(player.getLocation(), Sound.AMBIENCE_RAIN, 0.015f, 0.2f); + + double scale = (double)(player.getTicksLived() % 50) / 50d; + + int amount = 4; + + if(getSet() != null && getSet().isActive(player)) + amount = 6; + + double ang = Math.PI*2/amount; + + for (int i = 0 ; i < amount ; i++) + { + double r = (1d-scale) * Math.PI * 2; + + double x = Math.sin(r + (i * ang)) * (r%(Math.PI * 4)) * 0.4; + double z = Math.cos(r + (i * ang)) * (r%(Math.PI * 4)) * 0.4; + + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(x, scale * 3, z), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); + + if (scale > 0.95 && Recharge.Instance.use(player, GetName(), 1000, false, false)) + { + UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, player.getLocation().add(0, scale * 3.5, 0), 0f, 0f, 0f, 0.2f, 60, + ViewDist.NORMAL, UtilServer.getPlayers()); + player.getWorld().playSound(player.getLocation(), Sound.STEP_SNOW, 1f, 1.5f); + } + } + } + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleGreen.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleGreen.java similarity index 87% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleGreen.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleGreen.java index 9a370fad1..a9bd2739d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleGreen.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleGreen.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import org.bukkit.GameMode; import org.bukkit.Material; @@ -7,8 +7,10 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; @@ -21,12 +23,8 @@ public class ParticleGreen extends ParticleGadget public ParticleGreen(GadgetManager manager) { - super(manager, "Green Ring", new String[] - { - C.cWhite + "With these sparkles, you", - C.cWhite + "can now sparkle while you", - C.cWhite + "sparkle with CaptainSparklez.", - }, + super(manager, "Green Ring", + UtilText.splitLineToArray(C.cGray + "With these sparkles, you can sparkle while sparkle with CaptainSparklez!", LineFormat.LORE), -2, Material.EMERALD, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHeart.java similarity index 89% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHeart.java index 61d602440..d07a2b01a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleHeart.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHeart.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import java.util.HashMap; import java.util.Iterator; @@ -13,11 +13,13 @@ import org.bukkit.event.player.PlayerQuitEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; @@ -31,12 +33,8 @@ public class ParticleHeart extends ParticleGadget { public ParticleHeart(GadgetManager manager) { - super(manager, "I Heart You", new String[] - { - C.cWhite + "With these particles, you can", - C.cWhite + "show off how much you heart", - C.cWhite + "everyone on Mineplex!", - }, + super(manager, "I Heart You", + UtilText.splitLineToArray(C.cGray + "Show off how much you love Mineplex and everyone on it!", LineFormat.LORE), -2, Material.APPLE, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHelix.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHelix.java new file mode 100644 index 000000000..a9336927b --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleHelix.java @@ -0,0 +1,128 @@ +package mineplex.core.gadget.gadgets.particle; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilServer; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.ParticleGadget; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class ParticleHelix extends ParticleGadget +{ + + public ParticleHelix(GadgetManager manager) + { + super(manager, "Blood Helix", + UtilText.splitLineToArray(C.cGray + "Blood magic is very dangerous... but also very cool!", LineFormat.LORE), + -2, + Material.REDSTONE, (byte)0); + } + + @EventHandler + public void playParticle(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for (Player player : GetActive()) + { + if (!shouldDisplay(player)) + continue; + + if (Manager.isMoving(player)) + { + UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation().add(0, 1, 0), 0.2f, 0.2f, 0.2f, 0, 4, + ViewDist.NORMAL, UtilServer.getPlayers()); + } + else + { + + int ticks = 10; + int hticks = 40; + boolean up = player.getTicksLived()%(hticks*2) < hticks; + int tick = player.getTicksLived()%ticks; + double htick = player.getTicksLived()%hticks; + int splits = 4; + + Location loc = player.getLocation().add(0, 2, 0); + + for(double d = tick*(Math.PI*2/splits)/ticks; d < Math.PI*2; d += Math.PI*2/splits) + { + Vector v = new Vector(Math.sin(d), 0, Math.cos(d)); + v.normalize().multiply(Math.max(0.2, Math.sin((htick/hticks)*Math.PI)*1.0)); + v.setY((htick/hticks) * -2); + if(up) v.setY(-2 + 2*(htick/hticks)); + + +// v.multiply(2).subtract(v.clone().multiply(htick/hticks)); +// v.multiply(2*(htick/hticks)); + + Location lloc = loc.clone().add(v); + + UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, lloc, null, 0f, 2, ViewDist.NORMAL); + } + +// UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation().add(0, 0.1, 0), 0.5f, 0.1f, 0.5f, 0, 20, +// ViewDist.NORMAL, UtilServer.getPlayers()); + + /* + * With Flame + int ticks = 10; + int tick = player.getTicksLived()%ticks; + int splits = 3; + + Location loc = player.getLocation().add(0, 3, 0); + + for(double d = tick*(Math.PI*2/splits)/ticks; d < Math.PI*2; d += Math.PI*2/splits) + { + Vector v = new Vector(Math.sin(d), 0, Math.cos(d)); + + v.setY(-1.5); + + UtilParticle.PlayParticleToAll(ParticleType.FLAME, loc, v, 0.1f, 0, ViewDist.NORMAL); + } + + UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation().add(0, 0.1, 0), 0.5f, 0.1f, 0.5f, 0, 20, + ViewDist.NORMAL, UtilServer.getPlayers()); + */ + /* + for (int height=0 ; height <= 20 ; height++) + { + for (int i=0 ; i < 2 ; i++) + { + double lead = i * ((2d * Math.PI)/2); + + double heightLead = height * ((2d * Math.PI)/20); + + float x = (float) (Math.sin(player.getTicksLived()/20d + lead + heightLead) * 1.2f); + float z = (float) (Math.cos(player.getTicksLived()/20d + lead + heightLead) * 1.2f); + + float y = 0.15f * height; + + UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation().add(x * (1d - height/22d), y, z * (1d - height/22d)), 0f, 0f, 0f, 0, 1, + ViewDist.NORMAL, UtilServer.getPlayers()); + + + } + } + + //UtilParticle.PlayParticle(ParticleType.LAVA, player.getLocation().add(0, 3, 0), 0f, 0f, 0f, 0, 2); + + //Sound + player.getWorld().playSound(player.getLocation(), Sound.LAVA, 0.3f, 1f); + */ + } + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleKronos.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKronos.java similarity index 92% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleKronos.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKronos.java index dd74addb9..733424255 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleKronos.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKronos.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import java.util.HashMap; @@ -25,9 +25,9 @@ public class ParticleKronos extends ParticleGadget { super(manager, "Titanic Aura", new String[] { - C.cWhite + "A symbol of Titan power", - C.cWhite + "whos ancestry traces back to Kronos,", - C.cWhite + "Titan Lord of Time.", + C.cGray + "A symbol of Titan power", + C.cGray + "whos ancestry traces back to Kronos,", + C.cGray + "Titan Lord of Time.", " ", C.cRed + "???" //When purchasable: C.cRed + "Unlocked with Titan Rank" diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleKronosData.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKronosData.java similarity index 98% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleKronosData.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKronosData.java index 5d78b2b3d..289a60099 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleKronosData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKronosData.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleLegend.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleLegend.java similarity index 82% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleLegend.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleLegend.java index 25049bfa1..45e74b3b1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleLegend.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleLegend.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import org.bukkit.Effect; import org.bukkit.Material; @@ -8,6 +8,8 @@ import org.bukkit.event.player.PlayerJoinEvent; import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.inventory.ClientItem; import mineplex.core.inventory.data.Item; @@ -19,14 +21,9 @@ public class ParticleLegend extends ParticleGadget { public ParticleLegend(GadgetManager manager) { - super(manager, "Legendary Aura", new String[] - { - C.cWhite + "This mystic particle attaches to", - C.cWhite + "only the most legendary of players!", - " ", - C.cGreen + "Unlocked with Legend Rank", - }, - -3, + super(manager, "Legendary Aura", + UtilText.splitLineToArray(C.cGray + "This particle will be updated soon! Yay!", LineFormat.LORE), + -1, Material.ENDER_PORTAL_FRAME, (byte)0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleRain.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleRain.java similarity index 85% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleRain.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleRain.java index 4300b5369..0e0b43109 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/ParticleRain.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleRain.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets; +package mineplex.core.gadget.gadgets.particle; import org.bukkit.GameMode; import org.bukkit.Material; @@ -7,8 +7,10 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.gadget.types.ParticleGadget; @@ -21,12 +23,8 @@ public class ParticleRain extends ParticleGadget public ParticleRain(GadgetManager manager) { - super(manager, "Rain Cloud", new String[] - { - C.cWhite + "Your very own rain cloud!", - C.cWhite + "Now you never have to worry", - C.cWhite + "about not being wet. Woo...", - }, + super(manager, "Rain Cloud", + UtilText.splitLineToArray(C.cGray + "Bring your sadness wherever you go, with your very own portable rain cloud!", LineFormat.LORE), -2, Material.INK_SACK, (byte)4); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleTitan.java new file mode 100644 index 000000000..b751709ac --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleTitan.java @@ -0,0 +1,115 @@ +package mineplex.core.gadget.gadgets.particle; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.util.Vector; + +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.ParticleGadget; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class ParticleTitan extends ParticleGadget +{ + + private int _tick; + + public ParticleTitan(GadgetManager manager) + { + super(manager, "Flame of the Titans", + UtilText.splitLineToArray(C.cGray + "These flames are said to be the spirit of a Titan.", LineFormat.LORE), + -1, + Material.FIREBALL, (byte)0); + } + + @EventHandler + public void onUpdate(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + + return; + + _tick++; + _tick = _tick%620; + + for(Player player : GetActive()) + { + if (!shouldDisplay(player)) + continue; + + double total = 3; + + if(getSet() != null && getSet().isActive(player)) + total = 4; + + double step = (1/total)*Math.PI*2; + double offset1 = (step/20)*_tick%20; + double offset2 = (step/31)*_tick%31; + + double r = 3; + boolean redstone = false; + + if(Manager.isMoving(player)) + { + UtilParticle.PlayParticleToAll(ParticleType.FLAME, player.getLocation().add(0, 0.1, 0), 0.2f, 0.1f, 0.2f, 0.015f, 3, ViewDist.NORMAL); + continue; + } + + for(int i = 0; i < total; i++) + { + double rad = step*i + offset1; + + double x = Math.sin(rad); + double y = 0; + double z = Math.cos(rad); + + + Vector v = new Vector(x,y,z).normalize(); + v.multiply(r); + Location loc = player.getLocation(); + loc.add(0, 0.1, 0); + + loc.add(v); + + + if(redstone) UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, loc, 1, 0, 0, 1, 0, ViewDist.NORMAL); + v.multiply(-1); + UtilParticle.PlayParticleToAll(ParticleType.FLAME, loc, v, 0.05f, 0, ViewDist.NORMAL); + + rad = -(step*i + offset2); + x = Math.sin(rad); + z = Math.cos(rad); + + v = new Vector(x,y,z).normalize(); + v.multiply(r); + loc = player.getLocation(); + loc.add(0, 0.1, 0); + + loc.add(v); + + if(redstone) UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, loc, 1, 0, 0, 1, 0, ViewDist.NORMAL); + v.multiply(-1); + UtilParticle.PlayParticleToAll(ParticleType.FLAME, loc, v, 0.05f, 0, ViewDist.NORMAL); + } + } + } + + @EventHandler + public void titanOwner(PlayerJoinEvent event) + { + if (Manager.getClientManager().Get(event.getPlayer()).GetRank().has(Rank.TITAN)) + { + Manager.getDonationManager().Get(event.getPlayer().getName()).AddUnknownSalesPackagesOwned(GetName()); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetCandyCane.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetCandyCane.java new file mode 100644 index 000000000..8a1acaf71 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetCandyCane.java @@ -0,0 +1,24 @@ +package mineplex.core.gadget.set; + +import org.bukkit.entity.Player; + +import mineplex.core.common.util.F; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailCandyCane; +import mineplex.core.gadget.gadgets.death.DeathCandyCane; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpCandyCane; +import mineplex.core.gadget.gadgets.particle.ParticleCandyCane; +import mineplex.core.gadget.types.GadgetSet; + +public class SetCandyCane extends GadgetSet +{ + + public SetCandyCane(GadgetManager manager) + { + super(manager, "Candy Cane", "Coming Soon...", + manager.getGadget(ArrowTrailCandyCane.class), + manager.getGadget(DeathCandyCane.class), + manager.getGadget(DoubleJumpCandyCane.class), + manager.getGadget(ParticleCandyCane.class)); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetFrostLord.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetFrostLord.java new file mode 100644 index 000000000..fec0b8950 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetFrostLord.java @@ -0,0 +1,24 @@ +package mineplex.core.gadget.set; + +import org.bukkit.entity.Player; + +import mineplex.core.common.util.F; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailFrostLord; +import mineplex.core.gadget.gadgets.death.DeathFrostLord; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpFrostLord; +import mineplex.core.gadget.gadgets.particle.ParticleFrostLord; +import mineplex.core.gadget.types.GadgetSet; + +public class SetFrostLord extends GadgetSet +{ + + public SetFrostLord(GadgetManager manager) + { + super(manager, "Frost Lord", "Improved Wind of the Frost Lord", + manager.getGadget(ArrowTrailFrostLord.class), + manager.getGadget(DeathFrostLord.class), + manager.getGadget(DoubleJumpFrostLord.class), + manager.getGadget(ParticleFrostLord.class)); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetRaveSuit.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetRaveSuit.java new file mode 100644 index 000000000..ea01fa10a --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetRaveSuit.java @@ -0,0 +1,17 @@ +package mineplex.core.gadget.set; + +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.outfit.*; +import mineplex.core.gadget.types.GadgetSet; + +public class SetRaveSuit extends GadgetSet +{ + public SetRaveSuit(GadgetManager manager) + { + super(manager, "Rave Suit", "Hyper Speed", + manager.getGadget(OutfitRaveSuitHelmet.class), + manager.getGadget(OutfitRaveSuitChestplate.class), + manager.getGadget(OutfitRaveSuitLeggings.class), + manager.getGadget(OutfitRaveSuitBoots.class)); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetSpaceSuit.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetSpaceSuit.java new file mode 100644 index 000000000..492b7a11f --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetSpaceSuit.java @@ -0,0 +1,17 @@ +package mineplex.core.gadget.set; + +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.outfit.*; +import mineplex.core.gadget.types.GadgetSet; + +public class SetSpaceSuit extends GadgetSet +{ + public SetSpaceSuit(GadgetManager manager) + { + super(manager, "Space Suit", "Low Gravity", + manager.getGadget(OutfitSpaceSuitHelmet.class), + manager.getGadget(OutfitSpaceSuitChestplate.class), + manager.getGadget(OutfitSpaceSuitLeggings.class), + manager.getGadget(OutfitSpaceSuitBoots.class)); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetTitan.java new file mode 100644 index 000000000..f2012131b --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/set/SetTitan.java @@ -0,0 +1,24 @@ +package mineplex.core.gadget.set; + +import org.bukkit.entity.Player; + +import mineplex.core.common.util.F; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailTitan; +import mineplex.core.gadget.gadgets.death.DeathTitan; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpTitan; +import mineplex.core.gadget.gadgets.particle.ParticleTitan; +import mineplex.core.gadget.types.GadgetSet; + +public class SetTitan extends GadgetSet +{ + + public SetTitan(GadgetManager manager) + { + super(manager, "The Titans", "Improved Flame of the Titans", + manager.getGadget(ArrowTrailTitan.class), + manager.getGadget(DeathTitan.class), + manager.getGadget(DoubleJumpTitan.class), + manager.getGadget(ParticleTitan.class)); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ArrowEffectGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ArrowEffectGadget.java new file mode 100644 index 000000000..a32e05163 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ArrowEffectGadget.java @@ -0,0 +1,106 @@ +package mineplex.core.gadget.types; + +import java.util.HashSet; +import java.util.Iterator; + +import org.bukkit.Material; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public abstract class ArrowEffectGadget extends Gadget +{ + protected HashSet _arrows = new HashSet(); + + public ArrowEffectGadget(GadgetManager manager, String name, String[] desc, int cost, Material mat, byte data, String...altNames) + { + super(manager, GadgetType.ArrowTrail, name, desc, cost, mat, data, 1, altNames); + } + + @Override + public void EnableCustom(Player player) + { + Manager.removeGadgetType(player, GadgetType.ArrowTrail); + + _active.add(player); + + UtilPlayer.message(player, F.main("Gadget", "You enabled " + F.elem(GetName()) + ".")); + } + + @Override + public void DisableCustom(Player player) + { + if (_active.remove(player)) + UtilPlayer.message(player, F.main("Gadget", "You disabled " + F.elem(GetName()) + ".")); + } + + public boolean shouldDisplay(Player player) + { + if (UtilPlayer.isSpectator(player)) + return false; + + if (Manager.hideParticles()) + return false; + + return true; + } + + @EventHandler + public void arrowLaunch(ProjectileLaunchEvent event) + { + if (Manager.hideParticles()) + return; + + if (event.getEntity() instanceof Arrow) + { + if (event.getEntity().getShooter() != null) + { + if (GetActive().contains(event.getEntity().getShooter())) + { + _arrows.add((Arrow)event.getEntity()); + } + } + } + } + + @EventHandler + public void clean(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for (Iterator arrowIterator = _arrows.iterator(); arrowIterator.hasNext();) + { + Arrow arrow = arrowIterator.next(); + + if (arrow.isDead() || !arrow.isValid() || arrow.isOnGround()) + { + arrowIterator.remove(); + } + else + { + doTrail(arrow); + } + } + } + + @EventHandler + public void arrowHit(ProjectileHitEvent event) + { + if (!_arrows.remove(event.getEntity())) + return; + + doHitEffect((Arrow)event.getEntity()); + } + + public abstract void doTrail(Arrow arrow); + public abstract void doHitEffect(Arrow arrow); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/DeathEffectGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/DeathEffectGadget.java new file mode 100644 index 000000000..5e337586c --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/DeathEffectGadget.java @@ -0,0 +1,44 @@ +package mineplex.core.gadget.types; + +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.gadget.GadgetManager; + +public abstract class DeathEffectGadget extends Gadget +{ + public DeathEffectGadget(GadgetManager manager, String name, String[] desc, int cost, Material mat, byte data, String...altNames) + { + super(manager, GadgetType.Death, name, desc, cost, mat, data, 1, altNames); + } + + @Override + public void EnableCustom(Player player) + { + Manager.removeGadgetType(player, GadgetType.Death); + + _active.add(player); + + UtilPlayer.message(player, F.main("Gadget", "You enabled " + F.elem(GetName()) + ".")); + } + + @Override + public void DisableCustom(Player player) + { + if (_active.remove(player)) + UtilPlayer.message(player, F.main("Gadget", "You disabled " + F.elem(GetName()) + ".")); + } + + public boolean shouldDisplay(Player player) + { + if (UtilPlayer.isSpectator(player)) + return false; + + if (Manager.hideParticles()) + return false; + + return true; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/DoubleJumpEffectGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/DoubleJumpEffectGadget.java new file mode 100644 index 000000000..f59c0ed50 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/DoubleJumpEffectGadget.java @@ -0,0 +1,61 @@ +package mineplex.core.gadget.types; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerToggleFlightEvent; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.gadget.GadgetManager; + +public abstract class DoubleJumpEffectGadget extends Gadget +{ + public DoubleJumpEffectGadget(GadgetManager manager, String name, String[] desc, int cost, Material mat, byte data, String...altNames) + { + super(manager, GadgetType.DoubleJump, name, desc, cost, mat, data, 1, altNames); + } + + @Override + public void EnableCustom(Player player) + { + Manager.removeGadgetType(player, GadgetType.DoubleJump); + + _active.add(player); + + UtilPlayer.message(player, F.main("Gadget", "You enabled " + F.elem(GetName()) + ".")); + } + + @Override + public void DisableCustom(Player player) + { + if (_active.remove(player)) + UtilPlayer.message(player, F.main("Gadget", "You disabled " + F.elem(GetName()) + ".")); + } + + public boolean shouldDisplay(Player player) + { + if (UtilPlayer.isSpectator(player)) + return false; + + if (Manager.hideParticles()) + return false; + + return true; + } + + @EventHandler + public void jump(PlayerToggleFlightEvent event) + { + if (!shouldDisplay(event.getPlayer())) + return; + + if (!event.getPlayer().isFlying()) + if (IsActive(event.getPlayer())) + { + doEffect(event.getPlayer()); + } + } + + public abstract void doEffect(Player player); +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/Gadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/Gadget.java index 063495f54..6998e2a51 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/Gadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/Gadget.java @@ -1,5 +1,6 @@ package mineplex.core.gadget.types; +import java.util.ArrayList; import java.util.HashSet; import mineplex.core.common.CurrencyType; @@ -7,7 +8,8 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.event.GadgetActivateEvent; +import mineplex.core.gadget.event.GadgetEnableEvent; +import mineplex.core.gadget.event.GadgetDisableEvent; import mineplex.core.shop.item.SalesPackageBase; import org.bukkit.Bukkit; @@ -25,18 +27,25 @@ public abstract class Gadget extends SalesPackageBase implements Listener protected HashSet _active = new HashSet(); + protected GadgetSet _set = null; + + private String[] _alternativePackageNames; + public Gadget(GadgetManager manager, GadgetType gadgetType, String name, String[] desc, int cost, Material mat, byte data) { this(manager, gadgetType, name, desc, cost, mat, data, 1); } - public Gadget(GadgetManager manager, GadgetType gadgetType, String name, String[] desc, int cost, Material mat, byte data, int quantity) + public Gadget(GadgetManager manager, GadgetType gadgetType, String name, String[] desc, int cost, Material mat, byte data, int quantity, String... alternativesalepackageNames) { super(name, mat, data, desc, cost, quantity); - + _gadgetType = gadgetType; KnownPackage = false; + _alternativePackageNames = alternativesalepackageNames; + if(_alternativePackageNames == null) _alternativePackageNames = new String[0]; + Manager = manager; Manager.getPlugin().getServer().getPluginManager().registerEvents(this, Manager.getPlugin()); @@ -65,7 +74,7 @@ public abstract class Gadget extends SalesPackageBase implements Listener public void Enable(Player player) { - GadgetActivateEvent gadgetEvent = new GadgetActivateEvent(player, this); + GadgetEnableEvent gadgetEvent = new GadgetEnableEvent(player, this); Bukkit.getServer().getPluginManager().callEvent(gadgetEvent); if (gadgetEvent.isCancelled()) @@ -89,7 +98,11 @@ public abstract class Gadget extends SalesPackageBase implements Listener public void Disable(Player player) { if (IsActive(player)) + { Manager.removeActive(player, this); + GadgetDisableEvent event = new GadgetDisableEvent(player, this); + Bukkit.getServer().getPluginManager().callEvent(event); + } DisableCustom(player); } @@ -102,6 +115,29 @@ public abstract class Gadget extends SalesPackageBase implements Listener { } - + public boolean ownsGadget(Player player) + { + if(IsFree()) return true; + if(Manager.getDonationManager().Get(player.getName()).OwnsUnknownPackage(GetName())) return true; + if(Manager.getInventoryManager().Get(player).getItemCount(GetName()) > 0) return true; + + for(String alt : _alternativePackageNames) + { + if(Manager.getDonationManager().Get(player.getName()).OwnsUnknownPackage(alt)) return true; + if(Manager.getInventoryManager().Get(player).getItemCount(alt) > 0) return true; + } + + return false; + } + + public void setSet(GadgetSet set) + { + _set = set; + } + + public GadgetSet getSet() + { + return _set; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/GadgetSet.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/GadgetSet.java new file mode 100644 index 000000000..234bbc2dd --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/GadgetSet.java @@ -0,0 +1,122 @@ +package mineplex.core.gadget.types; + +import java.util.HashSet; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.event.GadgetEnableEvent; +import mineplex.core.gadget.event.GadgetDisableEvent; + +public abstract class GadgetSet implements Listener +{ + private String _name; + private String[] _bonus; + + private Gadget[] _gadgets; + + protected GadgetManager Manager; + + HashSet _active = new HashSet<>(); + + public GadgetSet(GadgetManager manager, String name, String bonus, Gadget... gadgets) + { + Manager = manager; + _gadgets = gadgets; + + _name = name; + _bonus = UtilText.splitLineToArray(bonus, LineFormat.LORE); + + for (Gadget gadget : gadgets) + gadget.setSet(this); + + Bukkit.getPluginManager().registerEvents(this, Manager.getPlugin()); + } + + public void checkPlayer(Player player, Gadget gadget, boolean enable) + { + boolean wasActive = isActive(player); + + for(Gadget g : _gadgets) + { + if(!g.IsActive(player) || g.equals(gadget)) + { + if(enable && g.equals(gadget)) continue; + + _active.remove(player); + if(wasActive) + customDisable(player); + return; + } + } + _active.add(player); + if(!wasActive) + { + customEnable(player); + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onActivate(GadgetEnableEvent event) + { + checkPlayer(event.getPlayer(), event.getGadget(), true); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onDeativate(GadgetDisableEvent event) + { + checkPlayer(event.getPlayer(), event.getGadget(), false); + } + + public boolean isActive(Player player) + { + return _active.contains(player); + } + + public void customEnable(Player player) + { + player.sendMessage(F.main("Gadget", "Set Enabled: " + F.elem(C.cGreen + getName()))); + } + + public void customDisable(Player player) + { + player.sendMessage(F.main("Gadget", "Set Disabled: " + F.elem(C.cRed + getName()))); + + } + + public Gadget[] getGadgets() + { + Gadget[] array = new Gadget[_gadgets.length]; + System.arraycopy(_gadgets, 0, array, 0, array.length); + return array; + } + + public boolean isPartOfSet(Gadget gadget) + { + for(Gadget g : _gadgets) + { + if(g.equals(gadget)) return true; + } + return false; + } + + public String getName() + { + return _name; + } + + public String[] getBonus() + { + return _bonus; + } + + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/GadgetType.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/GadgetType.java index 11b014b32..5daff04b2 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/GadgetType.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/GadgetType.java @@ -7,4 +7,9 @@ public enum GadgetType Particle, MusicDisc, Costume, + DoubleJump, + ArrowTrail, + Death, + Hat, + Taunt } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/HatGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/HatGadget.java new file mode 100644 index 000000000..d61339bf8 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/HatGadget.java @@ -0,0 +1,98 @@ +package mineplex.core.gadget.types; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.gadget.GadgetManager; + +public abstract class HatGadget extends OutfitGadget +{ + + private ItemStack _hat; + + public HatGadget(GadgetManager manager, String name, String[] desc, int cost, ItemStack item, String... altNames) + { + super(manager, name, desc, cost, ArmorSlot.Helmet, item.getType(), item.getData().getData(), altNames); + _hat = item; + + ItemMeta im = _hat.getItemMeta(); + im.setDisplayName(C.cGreen + C.Bold + name); + _hat.setItemMeta(im); + } + + public HatGadget(GadgetManager manager, String name, String[] desc, int cost, String playerName) + { + this(manager, name, desc, cost, getSkull(playerName)); + } + + public ItemStack getHelmetItem() + { + return _hat.clone(); + } + + public void ApplyArmor(Player player) + { + Manager.removeGadgetType(player, GadgetType.Morph); + + Manager.RemoveOutfit(player, _slot); + + _active.add(player); + + UtilPlayer.message(player, F.main("Gadget", "You put on " + F.elem(GetName()) + ".")); + + player.getInventory().setHelmet(getHelmetItem()); + } + + public void RemoveArmor(Player player) + { + if (!_active.remove(player)) + return; + + UtilPlayer.message(player, F.main("Gadget", "You took off " + F.elem(GetName()) + ".")); + + player.getInventory().setHelmet(null); + } + + public static ItemStack getSkull(String playerName) + { + SkullMeta meta = (SkullMeta) Bukkit.getItemFactory().getItemMeta(Material.SKULL_ITEM); + + meta.setOwner(playerName); + + ItemStack stack = new ItemStack(Material.SKULL_ITEM,1 , (byte)3); + + stack.setItemMeta(meta); + + return stack; + } + + @Override + public GadgetType getGadgetType() + { + return GadgetType.Hat; + } + + + @Override + public void EnableCustom(Player player) + { + ApplyArmor(player); + } + + @Override + public void DisableCustom(Player player) + { + RemoveArmor(player); + } + + + + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ItemGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ItemGadget.java index 232abb0eb..b0d7bdae6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ItemGadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ItemGadget.java @@ -64,7 +64,7 @@ public abstract class ItemGadget extends Gadget public void ApplyItem(Player player, boolean inform) { - Manager.RemoveItem(player); + Manager.removeGadgetType(player, GadgetType.Item); _active.add(player); @@ -141,7 +141,7 @@ public abstract class ItemGadget extends Gadget event.setCancelled(true); //Stock - if (Manager.getInventoryManager().Get(player).getItemCount(GetName()) <= 0) + if (!hasAmmo(player)) { UtilPlayer.message(player, F.main("Gadget", "You do not have any " + GetName() + " left.")); @@ -157,7 +157,7 @@ public abstract class ItemGadget extends Gadget { UtilInv.Update(player); return; - } + } Manager.getInventoryManager().addItemToInventory(player, GetName(), -1); @@ -165,6 +165,11 @@ public abstract class ItemGadget extends Gadget ActivateCustom(event.getPlayer()); } + + public boolean hasAmmo(Player player) + { + return Manager.getInventoryManager().Get(player).getItemCount(GetName()) > 0; + } public abstract void ActivateCustom(Player player); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MorphGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MorphGadget.java index 47e121979..96c19d0ad 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MorphGadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MorphGadget.java @@ -19,7 +19,7 @@ public abstract class MorphGadget extends Gadget public void ApplyArmor(Player player) { - Manager.RemoveMorph(player); + Manager.removeGadgetType(player, GadgetType.Morph); _active.add(player); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java index 7dd175be3..c139e85c8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java @@ -8,7 +8,7 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.event.GadgetActivateEvent; +import mineplex.core.gadget.event.GadgetEnableEvent; import mineplex.core.gadget.event.GadgetBlockEvent; import mineplex.core.gadget.gadgets.SongData; import mineplex.core.recharge.Recharge; @@ -41,7 +41,7 @@ public class MusicGadget extends Gadget @Override public void Enable(Player player) { - GadgetActivateEvent gadgetEvent = new GadgetActivateEvent(player, this); + GadgetEnableEvent gadgetEvent = new GadgetEnableEvent(player, this); Bukkit.getServer().getPluginManager().callEvent(gadgetEvent); if (gadgetEvent.isCancelled()) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/OutfitGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/OutfitGadget.java index fabae966d..cc9b7fd39 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/OutfitGadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/OutfitGadget.java @@ -20,9 +20,9 @@ public abstract class OutfitGadget extends Gadget protected ArmorSlot _slot; - public OutfitGadget(GadgetManager manager, String name, String[] desc, int cost, ArmorSlot slot, Material mat, byte data) + public OutfitGadget(GadgetManager manager, String name, String[] desc, int cost, ArmorSlot slot, Material mat, byte data, String... altNames) { - super(manager, GadgetType.Costume, name, desc, cost, mat, data); + super(manager, GadgetType.Costume, name, desc, cost, mat, data, 1, altNames); _slot = slot; } @@ -34,7 +34,7 @@ public abstract class OutfitGadget extends Gadget public void ApplyArmor(Player player) { - Manager.RemoveMorph(player); + Manager.removeGadgetType(player, GadgetType.Morph); Manager.RemoveOutfit(player, _slot); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ParticleGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ParticleGadget.java index 3dadb6995..bc807eb48 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ParticleGadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ParticleGadget.java @@ -1,6 +1,5 @@ package mineplex.core.gadget.types; -import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -10,15 +9,15 @@ import mineplex.core.gadget.GadgetManager; public abstract class ParticleGadget extends Gadget { - public ParticleGadget(GadgetManager manager, String name, String[] desc, int cost, Material mat, byte data) + public ParticleGadget(GadgetManager manager, String name, String[] desc, int cost, Material mat, byte data, String...altNames) { - super(manager, GadgetType.Particle, name, desc, cost, mat, data); + super(manager, GadgetType.Particle, name, desc, cost, mat, data, 1, altNames); } @Override public void EnableCustom(Player player) { - Manager.RemoveParticle(player); + Manager.removeGadgetType(player, GadgetType.Particle); _active.add(player); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/inventory/InventoryManager.java b/Plugins/Mineplex.Core/src/mineplex/core/inventory/InventoryManager.java index 7df564134..a10dd5e73 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/inventory/InventoryManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/inventory/InventoryManager.java @@ -93,6 +93,7 @@ public class InventoryManager extends MiniDbClientPlugin public void addItemToInventory(final Callback callback, final Player player, final String item, final int count) { + int accountId = getClientManager().getAccountId(player); addItemToInventoryForOffline(new Callback() { public void run(Boolean success) @@ -105,7 +106,7 @@ public class InventoryManager extends MiniDbClientPlugin if (callback != null) callback.run(success); } - }, player.getUniqueId(), item, count); + }, accountId, item, count); } public boolean validItem(String item) @@ -137,7 +138,18 @@ public class InventoryManager extends MiniDbClientPlugin { public void run() { - addItemToInventoryForOffline(callback, PlayerCache.getInstance().getPlayer(uuid).getAccountId(), item, count); + try + { + addItemToInventoryForOffline(callback, PlayerCache.getInstance().getPlayer(uuid).getAccountId(), item, count); + } + catch (Exception e) + { + e.printStackTrace(); + + System.out.println("-----DEBUG-----"); + System.out.println("PlayerCache Instance: " + (PlayerCache.getInstance() == null)); + System.out.println("PlayerCache Player Object: " + (PlayerCache.getInstance().getPlayer(uuid) == null)); + } } }); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/MountManager.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/MountManager.java index 4de2d6666..814280180 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/MountManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/MountManager.java @@ -23,6 +23,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.disguise.DisguiseManager; import mineplex.core.donation.DonationManager; +import mineplex.core.mount.types.MountBabyReindeer; import mineplex.core.mount.types.MountCart; import mineplex.core.mount.types.MountDragon; import mineplex.core.mount.types.MountFrost; @@ -68,6 +69,7 @@ public class MountManager extends MiniPlugin _types.add(new MountSpider(this)); _types.add(new MountZombie(this)); _types.add(new MountTitan(this)); + _types.add(new MountBabyReindeer(this)); //_types.add(new MountSheep(this)); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountBabyReindeer.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountBabyReindeer.java new file mode 100644 index 000000000..64e56f971 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountBabyReindeer.java @@ -0,0 +1,92 @@ +package mineplex.core.mount.types; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Horse; +import org.bukkit.entity.Horse.Color; +import org.bukkit.entity.Horse.Style; +import org.bukkit.entity.Horse.Variant; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.HorseJumpEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.mount.HorseMount; +import mineplex.core.mount.MountManager; +import mineplex.core.mount.SingleEntityMountData; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class MountBabyReindeer extends HorseMount +{ + + public MountBabyReindeer(MountManager manager) + { + super(manager, "Baby Reindeer", + UtilText.splitLineToArray(C.cGray + "One of Santas baby reindeers. He's still learning how to fly...", LineFormat.LORE), + Material.GOLDEN_CARROT, (byte) 0, -3, Color.CREAMY, Style.WHITEFIELD, Variant.HORSE, 0, null); + } + + @EventHandler + public void EnableCustom(Player player) { + super.EnableCustom(player); + Horse horse = GetActive().get(player).getEntity(); + horse.setBaby(); + horse.setMaxHealth(20); + } + + @EventHandler + public void fly(UpdateEvent event) + { + if(event.getType() != UpdateType.TICK) return; + + for(SingleEntityMountData horse : GetActive().values()) + { + if(horse.getEntity().getPassenger() != horse.getOwner()) continue; + + if(Recharge.Instance.usable(horse.getOwner(), "Reindeer Fly")) continue; + + horse.getEntity().setVelocity(horse.getOwner().getLocation().getDirection().normalize().add(new Vector(0,0.4,0))); + + horse.getEntity().getWorld().playSound(horse.getEntity().getLocation(), Sound.HORSE_BREATHE, 0.3f, 0.5f); + + UtilParticle.PlayParticleToAll(ParticleType.EXPLODE, horse.getEntity().getLocation(), 0.2f,0.0f,0.2f, 0.0f, 10, ViewDist.NORMAL); + } + } + + @EventHandler + public void onClick(PlayerInteractEntityEvent event) + { + if(!IsActive(event.getPlayer())) return; + SingleEntityMountDatadata = getMountData(event.getRightClicked()); + if(data == null) return; + if(data.getOwner() != event.getPlayer()) return; + data.getEntity().setPassenger(data.getOwner()); + } + + @EventHandler + public void onJump(HorseJumpEvent event) + { + SingleEntityMountData data = getMountData(event.getEntity()); + if(data == null) return; + + event.setCancelled(true); + if(UtilEnt.isGrounded(event.getEntity())) + { + if(Recharge.Instance.use(data.getOwner(), "Reindeer Fly", 1000, false, false)) + { + event.getEntity().getWorld().playSound(event.getEntity().getLocation(), Sound.HORSE_ANGRY, 1f, 1f); + } + } + + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountCart.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountCart.java index f5aa7f809..3af133864 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountCart.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountCart.java @@ -11,12 +11,15 @@ import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.vehicle.VehicleDamageEvent; +import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; import mineplex.core.mount.Mount; import mineplex.core.mount.MountManager; import mineplex.core.mount.SingleEntityMountData; @@ -28,11 +31,8 @@ public class MountCart extends Mount> { public MountCart(MountManager manager) { - super(manager, "Minecart", Material.MINECART, (byte)0, new String[] - { - ChatColor.RESET + "Cruise around town in your", - ChatColor.RESET + "new Minecart VX Turbo!", - }, + super(manager, "Minecart", Material.MINECART, (byte)0, + UtilText.splitLineToArray(C.cGray + "Cruise around town in your shiny new Minecart RX Turbo!", LineFormat.LORE), 15000); KnownPackage = false; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountDragon.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountDragon.java index efb19dcf5..918585528 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountDragon.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountDragon.java @@ -10,7 +10,9 @@ import org.bukkit.event.player.PlayerJoinEvent; import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; @@ -24,17 +26,11 @@ public class MountDragon extends DragonMount { public MountDragon(MountManager manager) { - super(manager, "Ethereal Dragon", new String[] - { - C.cWhite + "From the distant ether realm,", - C.cWhite + "this prized dragon is said to", - C.cWhite + "obey only true Heroes!", - " ", - C.cPurple + "Unlocked with Hero Rank", - }, + super(manager, "Ethereal Dragon", + UtilText.splitLineToArray(C.cGray + "From the distant Ether Realm, this prized dragon is said to only obey true Heroes!", LineFormat.LORE), Material.DRAGON_EGG, (byte)0, - -1); + -11); } @EventHandler diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountFrost.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountFrost.java index e948ca9e3..5a8617699 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountFrost.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountFrost.java @@ -8,7 +8,9 @@ import org.bukkit.entity.Horse.Variant; import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.mount.HorseMount; @@ -21,12 +23,8 @@ public class MountFrost extends HorseMount { public MountFrost(MountManager manager) { - super(manager, "Glacial Steed", new String[] - { - C.cWhite + "Born in the North Pole,", - C.cWhite + "it leaves a trail of frost", - C.cWhite + "as it moves!", - }, + super(manager, "Glacial Steed", + UtilText.splitLineToArray(C.cGray + "Born in the North Pole, it leaves a trail of frost as it moves!", LineFormat.LORE), Material.SNOW_BALL, (byte)0, 15000, diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountMule.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountMule.java index be87f0fd1..cecedd632 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountMule.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountMule.java @@ -6,6 +6,9 @@ import org.bukkit.entity.Horse.Color; import org.bukkit.entity.Horse.Style; import org.bukkit.entity.Horse.Variant; +import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; import mineplex.core.mount.HorseMount; import mineplex.core.mount.MountManager; @@ -13,10 +16,8 @@ public class MountMule extends HorseMount { public MountMule(MountManager manager) { - super(manager, "Mount Mule", new String[] - { - ChatColor.RESET + "Muley muley!" - }, + super(manager, "Mount Mule", + UtilText.splitLineToArray(C.cGray + "Your very own trusty pack mule!", LineFormat.LORE), Material.HAY_BLOCK, (byte)0, 3000, diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSheep.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSheep.java index c2697c771..7cecd08b0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSheep.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSheep.java @@ -11,8 +11,11 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.inventory.ItemStack; +import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseSheep; import mineplex.core.mount.HorseMount; @@ -25,10 +28,8 @@ public class MountSheep extends HorseMount { public MountSheep(MountManager manager) { - super(manager, "Techno Sheep", new String[] - { - ChatColor.RESET + "Muley muley!" - }, + super(manager, "Techno Sheep", + UtilText.splitLineToArray(C.cGray + "Baaaaa with all the colors of the rainbow!", LineFormat.LORE), Material.WOOL, (byte)14, 3000, diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSlime.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSlime.java index e8a1bd649..92e90a12b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSlime.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSlime.java @@ -11,12 +11,15 @@ import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.util.Vector; +import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; import mineplex.core.mount.Mount; import mineplex.core.mount.MountManager; import mineplex.core.mount.SingleEntityMountData; @@ -28,11 +31,8 @@ public class MountSlime extends Mount> { public MountSlime(MountManager manager) { - super(manager, "Slime Mount", Material.SLIME_BALL, (byte)0, new String[] - { - ChatColor.RESET + "Bounce around on your very", - ChatColor.RESET + "own personal slime friend!", - }, + super(manager, "Slime Mount", Material.SLIME_BALL, (byte)0, + UtilText.splitLineToArray(C.cGray + "Bounce around on your very own slime friend!", LineFormat.LORE), 15000); KnownPackage = false; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSpider.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSpider.java index 57ca4045b..25884d4b2 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSpider.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountSpider.java @@ -19,11 +19,13 @@ import org.bukkit.util.Vector; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; import mineplex.core.disguise.disguises.DisguiseSpider; import mineplex.core.mount.HorseMount; import mineplex.core.mount.MountManager; @@ -41,17 +43,15 @@ public class MountSpider extends HorseMount public MountSpider(MountManager manager) { - super(manager, "Spider Mount", new String[] + super(manager, "Spider Mount", + UtilText.splitLinesToArray(new String[] { - C.cWhite + "Why ride a horse when you can", - C.cWhite + "ride a cute and cuddly spider!", - C.cBlack, - C.cYellow + "Look Up" + C.cGray + " to use " + C.cGreen + "Wall Climb", - C.cYellow + "Jump" + C.cGray + " to use " + C.cGreen + "Leap", - C.cBlack, - C.cPurple + "Only available during " + C.Line + "Halloween 2015", - C.cPurple + "Purchase at " + C.Line + "www.mineplex.com/shop" - }, Material.WEB, (byte) 0, -1, Color.BLACK, Style.NONE, Variant.HORSE, 2.0, Material.AIR); + C.cGray + "Why ride a horse when you can ride a cute and cuddly spider!", + C.blankLine, + "#" + C.cWhite + "Look Up to use Wall Climb", + "#" + C.cWhite + "Jump to use Leap", + }, LineFormat.LORE), + Material.WEB, (byte) 0, -4, Color.BLACK, Style.NONE, Variant.HORSE, 2.0, Material.AIR); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitan.java index 4001f5184..5e9747e8d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitan.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitan.java @@ -13,7 +13,9 @@ import org.bukkit.event.player.PlayerJoinEvent; import mineplex.core.common.Rank; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; import mineplex.core.mount.Mount; import mineplex.core.mount.MountManager; import mineplex.core.updater.UpdateType; @@ -23,19 +25,20 @@ public class MountTitan extends Mount { public MountTitan(MountManager manager) { - super(manager, "Molten Snake", Material.MAGMA_CREAM, (byte)0, new String[] - { - C.cWhite + "Deep under the earths surface, there", - C.cWhite + "exists a mythical species of Molten", - C.cWhite + "Snakes. This one will serve you eternally.", - " ", - C.cRed + "Unlocked with Titan Rank", - }, -1); + super(manager, "Molten Snake", Material.MAGMA_CREAM, (byte)0, + UtilText.splitLineToArray(C.cGray + "Deep under the earths surface, there exists a mythical species of Molten Snakes. This one will serve you eternally.", LineFormat.LORE), + -13); } @Override public void EnableCustom(Player player) { + if(GetActive().size() >= 3) + { + UtilPlayer.message(player, F.main("Mount", "The maximum amount of simultaneous " + F.elem(GetName()) + " in this lobby has been reached.")); + return; + } + player.leaveVehicle(); player.eject(); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountUndead.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountUndead.java index 3bf4bb80e..fead4b102 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountUndead.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountUndead.java @@ -8,7 +8,9 @@ import org.bukkit.entity.Horse.Variant; import org.bukkit.event.EventHandler; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.mount.HorseMount; @@ -21,12 +23,8 @@ public class MountUndead extends HorseMount { public MountUndead(MountManager manager) { - super(manager, "Infernal Horror", new String[] - { - C.cWhite + "The most ghastly horse in", - C.cWhite + "existance, from the pits of", - C.cWhite + "the Nether.", - }, + super(manager, "Infernal Horror", + UtilText.splitLineToArray(C.cGray + "The most ghastly horse in existance, from the pits of the Nether.", LineFormat.LORE), Material.BONE, (byte)0, 20000, diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountZombie.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountZombie.java index 9b396f6b5..949a50f23 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountZombie.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountZombie.java @@ -6,6 +6,8 @@ import org.bukkit.entity.Horse.Style; import org.bukkit.entity.Horse.Variant; import mineplex.core.common.util.C; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilText; import mineplex.core.mount.HorseMount; import mineplex.core.mount.MountManager; @@ -13,18 +15,11 @@ public class MountZombie extends HorseMount { public MountZombie(MountManager manager) { - super(manager, "Decrepit Warhorse", new String[] - { - C.cWhite + "Once a fierce warhorse, this", - C.cWhite + "undead beast will send fear", - C.cWhite + "into the hearts of your enemies.", - " ", - C.cYellow + "Earned by defeating the Pumpkin King", - C.cYellow + "in the 2015 Halloween Horror Event.", - }, + super(manager, "Decrepit Warhorse", + UtilText.splitLineToArray(C.cGray + "Once a fierce warhorse, this undead beast will send fear into the hearts of your enemies.", LineFormat.LORE), Material.ROTTEN_FLESH, (byte)0, - -1, + -4, Color.BLACK, Style.BLACK_DOTS, Variant.UNDEAD_HORSE, 0.8, null); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetFactory.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetFactory.java index 56cab2079..71048a36c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetFactory.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetFactory.java @@ -1,19 +1,16 @@ package mineplex.core.pet; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; - -import mineplex.core.common.util.NautHashMap; -import mineplex.core.pet.repository.PetRepository; -import mineplex.core.pet.repository.token.PetExtraToken; -import mineplex.core.pet.repository.token.PetSalesToken; -import mineplex.core.pet.types.Elf; -import mineplex.core.pet.types.Pumpkin; import org.bukkit.Material; import org.bukkit.entity.EntityType; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.pet.repository.PetRepository; +import mineplex.core.pet.types.Elf; +import mineplex.core.pet.types.PetCoalApparition; +import mineplex.core.pet.types.Pumpkin; + public class PetFactory { private PetRepository _repository; @@ -33,6 +30,7 @@ public class PetFactory private void CreatePets() { _pets.put(EntityType.ZOMBIE, new Pumpkin()); + _pets.put(EntityType.PIG_ZOMBIE, new PetCoalApparition()); _pets.put(EntityType.VILLAGER, new Elf()); _pets.put(EntityType.PIG, new Pet("Pig", EntityType.PIG, 5000)); _pets.put(EntityType.SHEEP, new Pet("Sheep", EntityType.SHEEP, 3000)); @@ -41,8 +39,8 @@ public class PetFactory _pets.put(EntityType.WOLF, new Pet("Dog", EntityType.WOLF, 8000)); _pets.put(EntityType.OCELOT, new Pet("Cat", EntityType.OCELOT, 6000)); _pets.put(EntityType.MUSHROOM_COW, new Pet("Mooshroom", EntityType.MUSHROOM_COW, 5000)); - _pets.put(EntityType.WITHER, new Pet("Widder", EntityType.WITHER, -1)); - _pets.put(EntityType.SKELETON, new Pet("Guardian", EntityType.SKELETON, -1)); + _pets.put(EntityType.WITHER, new Pet("Widder", EntityType.WITHER, -12)); + _pets.put(EntityType.SKELETON, new Pet("Guardian", EntityType.SKELETON, -13)); } private void CreatePetExtras() diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java index d111bc6a7..4e609930f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java @@ -4,11 +4,38 @@ import java.util.Collection; import java.util.Iterator; import java.util.Map.Entry; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPigZombie; +import org.bukkit.entity.Ageable; +import org.bukkit.entity.Creature; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.PigZombie; +import org.bukkit.entity.Player; +import org.bukkit.entity.Skeleton; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Zombie; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import com.google.gson.Gson; + import mineplex.core.MiniClientPlugin; -import mineplex.core.pet.repository.PetRepository; -import mineplex.core.pet.repository.token.ClientPetTokenWrapper; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.account.CoreClientManager; import mineplex.core.account.event.ClientWebResponseEvent; import mineplex.core.blockrestore.BlockRestore; @@ -17,50 +44,22 @@ import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; +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.disguise.DisguiseManager; import mineplex.core.disguise.disguises.DisguiseGuardian; import mineplex.core.disguise.disguises.DisguiseWither; import mineplex.core.donation.DonationManager; import mineplex.core.inventory.InventoryManager; +import mineplex.core.pet.repository.PetRepository; +import mineplex.core.pet.repository.token.ClientPetTokenWrapper; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; import net.minecraft.server.v1_8_R3.EntityCreature; -import net.minecraft.server.v1_8_R3.EntityWither; -import net.minecraft.server.v1_8_R3.Navigation; import net.minecraft.server.v1_8_R3.NavigationAbstract; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; - -import com.google.gson.Gson; - -import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature; -import org.bukkit.entity.Ageable; -import org.bukkit.entity.Creature; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Guardian; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Skeleton; -import org.bukkit.entity.Villager; -import org.bukkit.entity.Zombie; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - public class PetManager extends MiniClientPlugin { private static Object _petOwnerSynch = new Object(); @@ -228,6 +227,12 @@ public class PetManager extends MiniClientPlugin pet.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 99999999, 0)); UtilEnt.silence(pet, true); } + if (pet instanceof PigZombie) + { + ((PigZombie)pet).setBaby(true); + pet.getEquipment().setHelmet(new ItemStack(Material.SKULL_ITEM, 1, (short)0, (byte) 1)); + pet.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 99999999, 0)); + } else if (pet instanceof Villager) { ((Villager) pet).setBaby(); @@ -342,6 +347,22 @@ public class PetManager extends MiniClientPlugin @EventHandler public void onUpdate(UpdateEvent event) { + if (event.getType() == UpdateType.TICK) + { + for(Creature pet : _activePetOwners.values()) + { + if(pet instanceof PigZombie) + { + UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, pet.getLocation(), 0.2f,0.0f,0.2f, 0.0f, 4, ViewDist.NORMAL); + if(event.getTick()%3 == 0) pet.getWorld().playSound(pet.getLocation(), Sound.BLAZE_BREATH, 0.03f, 0f); + if(!((CraftPigZombie)pet).getHandle().isSilent()) + { + ((CraftPigZombie)pet).getHandle().setSilent(true); + } + } + } + } + if (event.getType() != UpdateType.FAST) return; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/types/Elf.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/types/Elf.java index 6a67a37ea..9f3e3c3ee 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/types/Elf.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/types/Elf.java @@ -8,7 +8,7 @@ public class Elf extends Pet { public Elf() { - super("Christmas Elf", EntityType.VILLAGER, -1); + super("Christmas Elf", EntityType.VILLAGER, -4); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/types/PetCoalApparition.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/types/PetCoalApparition.java new file mode 100644 index 000000000..7d787f744 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/types/PetCoalApparition.java @@ -0,0 +1,14 @@ +package mineplex.core.pet.types; + +import org.bukkit.entity.EntityType; + +import mineplex.core.pet.Pet; + +public class PetCoalApparition extends Pet +{ + public PetCoalApparition() + { + super("Coal Apparition", EntityType.PIG_ZOMBIE, -1); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/types/Pumpkin.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/types/Pumpkin.java index 71b561f2c..a2f3acc17 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/types/Pumpkin.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/types/Pumpkin.java @@ -8,6 +8,6 @@ public class Pumpkin extends Pet { public Pumpkin() { - super("Pumpling", EntityType.ZOMBIE, -1); + super("Pumpling", EntityType.ZOMBIE, -5); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/playerCount/PlayerCountManager.java b/Plugins/Mineplex.Core/src/mineplex/core/playerCount/PlayerCountManager.java index c73f87d00..71595c42a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/playerCount/PlayerCountManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/playerCount/PlayerCountManager.java @@ -19,7 +19,7 @@ public class PlayerCountManager extends MiniPlugin private DataRepository _repository; private DataRepository _secondRepository; - private volatile int _playerCount; + private volatile int _playerCount = 0; public PlayerCountManager(JavaPlugin plugin) { @@ -37,7 +37,7 @@ public class PlayerCountManager extends MiniPlugin _secondRepository = new RedisDataRepository(new ConnectionData("10.33.53.16", 6379, ConnectionData.ConnectionType.MASTER, "ServerStatus"), new ConnectionData("10.33.53.16", 6377, ConnectionData.ConnectionType.SLAVE, "ServerStatus"), Region.ALL, BungeeServer.class, "bungeeServers"); - updatePlayerCount(); + //updatePlayerCount(); } private void updatePlayerCount() @@ -64,7 +64,7 @@ public class PlayerCountManager extends MiniPlugin @EventHandler public void refresh(UpdateEvent event) { - if (event.getType() != UpdateType.SEC) + if (event.getType() != UpdateType.SLOW) return; runAsync(this::updatePlayerCount); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RankRewardData.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RankRewardData.java index 47648f55b..995175533 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RankRewardData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RankRewardData.java @@ -10,7 +10,7 @@ public class RankRewardData extends RewardData public RankRewardData(String friendlyName, ItemStack displayItem, RewardRarity rarity, Rank rank) { - super(friendlyName, displayItem, rarity); + super(null, friendlyName, displayItem, rarity); _rank = rank; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/Reward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/Reward.java index 8e5ab89e1..ef209276e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/Reward.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/Reward.java @@ -15,17 +15,19 @@ public abstract class Reward private RewardRarity _rarity; private int _weight; + private int _shardValue; private boolean _requiresCallback; - public Reward(RewardRarity rarity, int weight) + public Reward(RewardRarity rarity, int weight, int shardValue) { - this(rarity, weight, false); + this(rarity, weight, shardValue, false); } - public Reward(RewardRarity rarity, int weight, boolean requiresCallback) + public Reward(RewardRarity rarity, int weight, int shardValue, boolean requiresCallback) { _rarity = rarity; _weight = weight; + _shardValue = shardValue; _requiresCallback = requiresCallback; } @@ -58,6 +60,11 @@ public abstract class Reward return _weight; } + public int getShardValue() + { + return _shardValue; + } + public boolean isRequiresCallback() { return _requiresCallback; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardData.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardData.java index 0a20e5ccf..b23f91c85 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardData.java @@ -7,15 +7,36 @@ import org.bukkit.inventory.ItemStack; */ public class RewardData { + private final String _header; private final String _friendlyName; private final ItemStack _displayItem; private final RewardRarity _rarity; + private final boolean _rewardedShards; + private final int _shards; - public RewardData(String friendlyName, ItemStack displayItem, RewardRarity rarity) + public RewardData(String header, String friendlyName, ItemStack displayItem, RewardRarity rarity, int shards) { + _header = header; _friendlyName = friendlyName; _displayItem = displayItem; _rarity = rarity; + _rewardedShards = true; + _shards = shards; + } + + public RewardData(String header, String friendlyName, ItemStack displayItem, RewardRarity rarity) + { + _header = header; + _friendlyName = friendlyName; + _displayItem = displayItem; + _rarity = rarity; + _rewardedShards = false; + _shards = 0; + } + + public String getHeader() + { + return _header; } public String getFriendlyName() @@ -33,4 +54,13 @@ public class RewardData return _rarity; } + public boolean isRewardedShards() + { + return _rewardedShards; + } + + public int getShards() + { + return _shards; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java index 8c282a545..b5a69e120 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardManager.java @@ -1,11 +1,10 @@ package mineplex.core.reward; import java.util.ArrayList; -import java.util.HashMap; +import java.util.EnumMap; import java.util.List; import java.util.Random; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -14,28 +13,26 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.account.CoreClientManager; import mineplex.core.common.Rank; +import mineplex.core.common.skin.SkinData; import mineplex.core.common.util.C; import mineplex.core.donation.DonationManager; import mineplex.core.giveaway.GiveawayManager; import mineplex.core.inventory.InventoryManager; import mineplex.core.pet.PetManager; -import mineplex.core.reward.rewards.CoinReward; import mineplex.core.reward.rewards.ExperienceReward; import mineplex.core.reward.rewards.GemReward; -import mineplex.core.reward.rewards.GiveawayReward; import mineplex.core.reward.rewards.InventoryReward; import mineplex.core.reward.rewards.PetReward; import mineplex.core.reward.rewards.RankReward; +import mineplex.core.reward.rewards.TreasureShardReward; import mineplex.core.reward.rewards.UnknownPackageReward; import mineplex.core.stats.StatsManager; import mineplex.core.status.ServerStatusManager; -import mineplex.core.timing.TimingManager; -import mineplex.serverdata.Region; public class RewardManager { private JavaPlugin _plugin; - private HashMap> _treasureMap; + private EnumMap _rewardPools; private Random _random; private boolean _carlSpinner; @@ -46,6 +43,11 @@ public class RewardManager private boolean _doubleGadgetValue; + private int _uncommonShards = 100; + private int _rareShards = 500; + private int _legendaryShards = 5000; + + public RewardManager(CoreClientManager clientManager, ServerStatusManager statusManager, DonationManager donationManager, InventoryManager inventoryManager, PetManager petManager, StatsManager statsManager, GiveawayManager giveawayManager, int commonValueMin, int commonValueMax, int uncommonValueMin, int uncommonValueMax, @@ -54,12 +56,12 @@ public class RewardManager boolean doubleGadgetValue, boolean carlSpinner) { _plugin = donationManager.getPlugin(); - _treasureMap = new HashMap>(); + _rewardPools = new EnumMap(RewardPool.Type.class); _random = new Random(); - for (RewardRarity rarity : RewardRarity.values()) + for (RewardPool.Type type : RewardPool.Type.values()) { - _treasureMap.put(rarity, new ArrayList()); + _rewardPools.put(type, new RewardPool()); } _clientManager = clientManager; @@ -83,13 +85,13 @@ public class RewardManager // Coins if (_carlSpinner) { - addReward(new GemReward(donationManager, (int)minValue, (int)maxValue, 25, rarity)); - addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 25, rarity)); - addReward(new ExperienceReward(statsManager, (int)minValue*5, (int)maxValue*5, 25, rarity)); + addReward(new GemReward(donationManager, (int)minValue, (int)maxValue, 25, 0, rarity)); +// addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 25, rarity)); + addReward(new ExperienceReward(statsManager, (int)minValue*5, (int)maxValue*5, 25, 0, rarity)); } else { - addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 5, rarity)); +// addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 5, rarity)); } //Increase Value @@ -99,34 +101,40 @@ public class RewardManager maxValue *= 2; } + addReward(RewardPool.Type.WINTER_HOLIDAY, new InventoryReward(inventoryManager, "Coal", "Coal", 50, 100, + new ItemStack(Material.COAL), rarity, 10, 0)); + + addReward(RewardPool.Type.WINTER_HOLIDAY, new InventoryReward(inventoryManager, "Snowballs", "Snowball", 5, 20, + new ItemStack(Material.SNOW_BALL), rarity, 10, 0)); + // Gadgets addReward(new InventoryReward(inventoryManager, "Paintballs", "Paintball Gun", (int)(100*(minValue/500)), (int)(100*(maxValue/500)), - new ItemStack(Material.GOLD_BARDING), rarity, 10)); + new ItemStack(Material.GOLD_BARDING), rarity, 10, 0)); addReward(new InventoryReward(inventoryManager, "Fireworks", "Fireworks", (int)(50*(minValue/500)), (int)(50*(maxValue/500)), - new ItemStack(Material.FIREWORK), rarity, 10)); + new ItemStack(Material.FIREWORK), rarity, 10, 0)); addReward(new InventoryReward(inventoryManager, "Melons", "Melon Launcher", (int)(50*(minValue/500)), (int)(50*(maxValue/500)), - new ItemStack(Material.MELON_BLOCK), rarity, 10)); + new ItemStack(Material.MELON_BLOCK), rarity, 10, 0)); addReward(new InventoryReward(inventoryManager, "Flesh Hooks", "Flesh Hook", (int)(40*(minValue/500)), (int)(40*(maxValue/500)), - new ItemStack(Material.getMaterial(131)), rarity, 10)); + new ItemStack(Material.getMaterial(131)), rarity, 10, 0)); addReward(new InventoryReward(inventoryManager, "Pearls", "Ethereal Pearl", (int)(30*(minValue/500)), (int)(30*(maxValue/500)), - new ItemStack(Material.ENDER_PEARL), rarity, 10)); + new ItemStack(Material.ENDER_PEARL), rarity, 10, 0)); addReward(new InventoryReward(inventoryManager, "Bat Swarms", "Bat Blaster", (int)(20*(minValue/500)), (int)(20*(maxValue/500)), - new ItemStack(Material.IRON_BARDING), rarity, 10)); + new ItemStack(Material.IRON_BARDING), rarity, 10, 0)); addReward(new InventoryReward(inventoryManager, "TNT", "TNT", (int)(20*(minValue/500)), (int)(20*(maxValue/500)), - new ItemStack(Material.TNT), rarity, 10)); + new ItemStack(Material.TNT), rarity, 10, 0)); } @@ -138,13 +146,13 @@ public class RewardManager // Coins if (_carlSpinner) { - addReward(new GemReward(donationManager, (int)minValue, (int)maxValue, 1200, rarity)); - addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 1200, rarity)); - addReward(new ExperienceReward(statsManager, (int)minValue*5, (int)maxValue*5, 1200, rarity)); + addReward(new GemReward(donationManager, (int)minValue, (int)maxValue, 1200, 0, rarity)); +// addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 1200, rarity)); + addReward(new ExperienceReward(statsManager, (int)minValue*5, (int)maxValue*5, 1200, 0, rarity)); } else { - addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 250, RewardRarity.UNCOMMON)); +// addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 250, RewardRarity.UNCOMMON)); } //Increase Value @@ -154,76 +162,83 @@ public class RewardManager maxValue *= 2; } + addReward(RewardPool.Type.WINTER_HOLIDAY, new InventoryReward(inventoryManager, "Freeze Cannon", "Freeze Cannon", 5, 10, + new ItemStack(Material.ICE), rarity, 10, 0)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new InventoryReward(inventoryManager, "Party Popper", "Party Popper", 5, 10, + new ItemStack(Material.GOLDEN_CARROT), rarity, 10, 0)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Hat", "Present", "Present", + SkinData.PRESENT.getSkull(), rarity, 5, 100)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Hat", "Snowman Head", "Snowman Head", + SkinData.SNOWMAN.getSkull(), rarity, 5, 100)); + // Gadgets addReward(new InventoryReward(inventoryManager, "Paintballs", "Paintball Gun", (int)(100*(minValue/500)), (int)(100*(maxValue/500)), - new ItemStack(Material.GOLD_BARDING), rarity, 250)); + new ItemStack(Material.GOLD_BARDING), rarity, 250, 0)); addReward(new InventoryReward(inventoryManager, "Fireworks", "Fireworks", (int)(50*(minValue/500)), (int)(50*(maxValue/500)), - new ItemStack(Material.FIREWORK), rarity, 250)); + new ItemStack(Material.FIREWORK), rarity, 250, 0)); addReward(new InventoryReward(inventoryManager, "Melons", "Melon Launcher", (int)(50*(minValue/500)), (int)(50*(maxValue/500)), - new ItemStack(Material.MELON_BLOCK), rarity, 250)); + new ItemStack(Material.MELON_BLOCK), rarity, 250, 0)); addReward(new InventoryReward(inventoryManager, "Flesh Hooks", "Flesh Hook", (int)(40*(minValue/500)), (int)(40*(maxValue/500)), - new ItemStack(Material.getMaterial(131)), rarity, 250)); + new ItemStack(Material.getMaterial(131)), rarity, 250, 0)); addReward(new InventoryReward(inventoryManager, "Pearls", "Ethereal Pearl", (int)(30*(minValue/500)), (int)(30*(maxValue/500)), - new ItemStack(Material.ENDER_PEARL), rarity, 250)); + new ItemStack(Material.ENDER_PEARL), rarity, 250, 0)); addReward(new InventoryReward(inventoryManager, "Bat Swarms", "Bat Blaster", (int)(20*(minValue/500)), (int)(20*(maxValue/500)), - new ItemStack(Material.IRON_BARDING), rarity, 250)); + new ItemStack(Material.IRON_BARDING), rarity, 250, 0)); addReward(new InventoryReward(inventoryManager, "TNT", "TNT", (int)(20*(minValue/500)), (int)(20*(maxValue/500)), - new ItemStack(Material.TNT), rarity, 250)); + new ItemStack(Material.TNT), rarity, 250, 0)); // Pets addReward(new PetReward(petManager, inventoryManager, donationManager, "Cow Pet", "Cow", - EntityType.COW, rarity, 500)); + EntityType.COW, rarity, 500, _uncommonShards)); addReward(new PetReward(petManager, inventoryManager, donationManager, "Sheep Pet", "Sheep", - EntityType.SHEEP, rarity, 333)); + EntityType.SHEEP, rarity, 333, _uncommonShards)); addReward(new PetReward(petManager, inventoryManager, donationManager, "Mooshroom Pet", "Mooshroom", - EntityType.MUSHROOM_COW, rarity, 200)); + EntityType.MUSHROOM_COW, rarity, 200, _uncommonShards)); addReward(new PetReward(petManager, inventoryManager, donationManager, "Pig Pet", "Pig", - EntityType.PIG, rarity, 200)); + EntityType.PIG, rarity, 200, _uncommonShards)); addReward(new PetReward(petManager, inventoryManager, donationManager, "Ocelot Pet", "Cat", - EntityType.OCELOT, rarity, 167)); + EntityType.OCELOT, rarity, 167, _uncommonShards)); addReward(new PetReward(petManager, inventoryManager, donationManager, "Chicken Pet", "Chicken", - EntityType.CHICKEN, rarity, 143)); + EntityType.CHICKEN, rarity, 143, _uncommonShards)); addReward(new PetReward(petManager, inventoryManager, donationManager, "Wolf Pet", "Dog", - EntityType.WOLF, rarity, 125)); + EntityType.WOLF, rarity, 125, _uncommonShards)); // Music Discs - addReward(new UnknownPackageReward(donationManager, "13 Disc", "13 Disc", - new ItemStack(2256), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Cat Disc", "Cat Disc", - new ItemStack(2257), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Blocks Disc", "Blocks Disc", - new ItemStack(2258), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Chirp Disc", "Chirp Disc", - new ItemStack(2259), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Far Disc", "Far Disc", - new ItemStack(2260), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Mall Disc", "Mall Disc", - new ItemStack(2261), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Mellohi Disc", "Mellohi Disc", - new ItemStack(2262), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Stal Disc", "Stal Disc", - new ItemStack(2263), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Strad Disc", "Strad Disc", - new ItemStack(2264), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Ward Disc", "Ward Disc", - new ItemStack(2265), rarity, 25)); -// addReward(new UnknownPackageReward(donationManager, "11 Disc", "11 Disc", -// new ItemStack(2266), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Wait Disc", "Wait Disc", - new ItemStack(2267), rarity, 25)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "13 Disc", "13 Disc", + new ItemStack(2256), rarity, 25, _uncommonShards)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "Cat Disc", "Cat Disc", + new ItemStack(2257), rarity, 25, _uncommonShards)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "Blocks Disc", "Blocks Disc", + new ItemStack(2258), rarity, 25, _uncommonShards)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "Chirp Disc", "Chirp Disc", + new ItemStack(2259), rarity, 25, _uncommonShards)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "Far Disc", "Far Disc", + new ItemStack(2260), rarity, 25, _uncommonShards)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "Mall Disc", "Mall Disc", + new ItemStack(2261), rarity, 25, _uncommonShards)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "Mellohi Disc", "Mellohi Disc", + new ItemStack(2262), rarity, 25, _uncommonShards)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "Stal Disc", "Stal Disc", + new ItemStack(2263), rarity, 25, _uncommonShards)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "Strad Disc", "Strad Disc", + new ItemStack(2264), rarity, 25, _uncommonShards)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "Ward Disc", "Ward Disc", + new ItemStack(2265), rarity, 25, _uncommonShards)); + addReward(new UnknownPackageReward(donationManager, "Music Disc", "Wait Disc", "Wait Disc", + new ItemStack(2267), rarity, 25, _uncommonShards)); } public void addRare(DonationManager donationManager, InventoryManager inventoryManager, PetManager petManager, StatsManager statsManager, double minValue, double maxValue) @@ -233,58 +248,66 @@ public class RewardManager // Coins if (_carlSpinner) { - addReward(new GemReward(donationManager, (int)minValue, (int)maxValue, 150, rarity)); - addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 150, rarity)); - addReward(new ExperienceReward(statsManager, (int)minValue*5, (int)maxValue*5, 150, rarity)); + addReward(new GemReward(donationManager, (int)minValue, (int)maxValue, 150, 0, rarity)); +// addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 150, rarity)); + addReward(new ExperienceReward(statsManager, (int)minValue*5, (int)maxValue*5, 150, 0, rarity)); } else { - addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 100, RewardRarity.RARE)); +// addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 100, RewardRarity.RARE)); } - + + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Hat", "Santa", "Santa", + SkinData.SANTA.getSkull(), rarity, 5, _rareShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new PetReward(petManager, inventoryManager, donationManager, "Elf", "Christmas Elf", + EntityType.VILLAGER, rarity, 5, _rareShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Death Effect", "Candy Cane Remains", "Candy Cane Remains", + new ItemStack(Material.SNOW_BALL), rarity, 5, _rareShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Particles", "Crushed Candy Cane", "Crushed Candy Cane", + new ItemStack(Material.SNOW_BALL), rarity, 5, _rareShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Arrow Effect", "Candy Cane Arrows", "Candy Cane Arrows", + new ItemStack(Material.SNOW_BALL), rarity, 5, _rareShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Jump Effect", "Candy Cane Blast", "Candy Cane Blast", + new ItemStack(Material.SNOW_BALL), rarity, 5, _rareShards)); // Mounts - addReward(new UnknownPackageReward(donationManager, "Mount Mule", "Mount Mule", - new ItemStack(Material.HAY_BLOCK), rarity, 200)); - addReward(new UnknownPackageReward(donationManager, "Minecart Mount", "Minecart", - new ItemStack(Material.MINECART), rarity, 100)); - addReward(new UnknownPackageReward(donationManager, "Slime Mount", "Slime Mount", - new ItemStack(Material.SLIME_BALL), rarity, 67)); - addReward(new UnknownPackageReward(donationManager, "Glacial Steed", "Glacial Steed", - new ItemStack(Material.SNOW_BALL), rarity, 50)); + addReward(new UnknownPackageReward(donationManager, "Mount", "Mule", "Mount Mule", + new ItemStack(Material.HAY_BLOCK), rarity, 200, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Mount", "Minecart", "Minecart", + new ItemStack(Material.MINECART), rarity, 100, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Mount", "Slime", "Slime Mount", + new ItemStack(Material.SLIME_BALL), rarity, 67, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Mount", "Glacial Steed", "Glacial Steed", + new ItemStack(Material.SNOW_BALL), rarity, 50, _rareShards)); // Morphs - addReward(new UnknownPackageReward(donationManager, "Cow Morph", "Cow Morph", - new ItemStack(Material.LEATHER), rarity, 167)); - addReward(new UnknownPackageReward(donationManager, "Villager Morph", "Villager Morph", - new ItemStack(Material.EMERALD), rarity, 83)); - addReward(new UnknownPackageReward(donationManager, "Chicken Morph", "Chicken Morph", - new ItemStack(Material.FEATHER), rarity, 50)); - addReward(new UnknownPackageReward(donationManager, "Enderman Morph", "Enderman Morph", - new ItemStack(Material.ENDER_PEARL), rarity, 33)); + addReward(new UnknownPackageReward(donationManager, "Morph", "Cow", "Cow Morph", + new ItemStack(Material.LEATHER), rarity, 167, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Morph", "Villager", "Villager Morph", + new ItemStack(Material.EMERALD), rarity, 83, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Morph", "Chicken", "Chicken Morph", + new ItemStack(Material.FEATHER), rarity, 50, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Morph", "Enderman", "Enderman Morph", + new ItemStack(Material.ENDER_PEARL), rarity, 33, _rareShards)); - // Gadgets - addReward(new InventoryReward(inventoryManager, "Coin Party Bomb", "Coin Party Bomb", 1, 1, - new ItemStack(Material.getMaterial(175)), rarity, 100)); - // Costumes - addReward(new UnknownPackageReward(donationManager, "Rave Hat", "Rave Hat", - new ItemStack(Material.LEATHER_HELMET), rarity, 30)); - addReward(new UnknownPackageReward(donationManager, "Rave Shirt", "Rave Shirt", - new ItemStack(Material.LEATHER_CHESTPLATE), rarity, 30)); - addReward(new UnknownPackageReward(donationManager, "Rave Pants", "Rave Pants", - new ItemStack(Material.LEATHER_LEGGINGS), rarity, 30)); - addReward(new UnknownPackageReward(donationManager, "Rave Boots", "Rave Boots", - new ItemStack(Material.LEATHER_BOOTS), rarity, 30)); - addReward(new UnknownPackageReward(donationManager, "Space Helmet", "Space Helmet", - new ItemStack(Material.GLASS), rarity, 50)); - addReward(new UnknownPackageReward(donationManager, "Space Jacket", "Space Jacket", - new ItemStack(Material.GOLD_CHESTPLATE), rarity, 50)); - addReward(new UnknownPackageReward(donationManager, "Space Pants", "Space Pants", - new ItemStack(Material.GOLD_LEGGINGS), rarity, 50)); - addReward(new UnknownPackageReward(donationManager, "Space Boots", "Space Boots", - new ItemStack(Material.GOLD_BOOTS), rarity, 50)); + addReward(new UnknownPackageReward(donationManager, "Costume", "Rave Hat", "Rave Hat", + new ItemStack(Material.LEATHER_HELMET), rarity, 30, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Costume", "Rave Shirt", "Rave Shirt", + new ItemStack(Material.LEATHER_CHESTPLATE), rarity, 30, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Costume", "Rave Pants", "Rave Pants", + new ItemStack(Material.LEATHER_LEGGINGS), rarity, 30, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Costume", "Rave Boots", "Rave Boots", + new ItemStack(Material.LEATHER_BOOTS), rarity, 30, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Costume", "Space Helmet", "Space Helmet", + new ItemStack(Material.GLASS), rarity, 50, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Costume", "Space Jacket", "Space Jacket", + new ItemStack(Material.GOLD_CHESTPLATE), rarity, 50, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Costume", "Space Pants", "Space Pants", + new ItemStack(Material.GOLD_LEGGINGS), rarity, 50, _rareShards)); + addReward(new UnknownPackageReward(donationManager, "Costume", "Space Boots", "Space Boots", + new ItemStack(Material.GOLD_BOOTS), rarity, 50, _rareShards)); } public void addLegendary(DonationManager donationManager, InventoryManager inventoryManager, PetManager petManager, StatsManager statsManager, double minValue, double maxValue) @@ -294,57 +317,75 @@ public class RewardManager // Coins if (_carlSpinner) { - addReward(new GemReward(donationManager, (int)minValue, (int)maxValue, 10, rarity)); - addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 10, rarity)); - addReward(new ExperienceReward(statsManager, (int)minValue*5, (int)maxValue*5, 10, rarity)); + addReward(new GemReward(donationManager, (int)minValue, (int)maxValue, 10, 0, rarity)); +// addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 10, rarity)); + addReward(new ExperienceReward(statsManager, (int)minValue*5, (int)maxValue*5, 10, 0, rarity)); } else { - addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 25, rarity)); +// addReward(new CoinReward(donationManager, (int)minValue, (int)maxValue, 25, rarity)); } + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Hat", "The Grinch", "The Grinch", + SkinData.THE_GRINCH.getSkull(), rarity, 5, _legendaryShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Morph", "Olaf", "Olaf Morph", + new ItemStack(Material.SNOW_BALL), rarity, 5, _legendaryShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Mount", "Glacial Steed", "Glacial Steed", + new ItemStack(Material.SADDLE), rarity, 5, _legendaryShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Mount", "Baby Reindeer", "Baby Reindeer", + new ItemStack(Material.GOLDEN_CARROT), rarity, 5, _legendaryShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Particles", "Wind of the Frost Lord", "Wind of the Frost Lord", + new ItemStack(Material.SNOW_BALL), rarity, 5, _legendaryShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Arrow Effect", "Arrows of the Frost Lord", "Arrows of the Frost Lord", + new ItemStack(Material.SNOW_BALL), rarity, 5, _legendaryShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Jump Effect", "Gust of the Frost Lord", "Gust of the Frost Lord", + new ItemStack(Material.SNOW_BALL), rarity, 5, _legendaryShards)); + addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Death Effect", "Fall of the Frost Lord", "Fall of the Frost Lord", + new ItemStack(Material.SNOW_BALL), rarity, 5, _legendaryShards)); + // Mounts - addReward(new UnknownPackageReward(donationManager, "Infernal Horror", "Infernal Horror", - new ItemStack(Material.BONE), rarity, 33)); + addReward(new UnknownPackageReward(donationManager, "Mount", "Infernal Horror", "Infernal Horror", + new ItemStack(Material.BONE), rarity, 33, _legendaryShards)); // Morphs - addReward(new UnknownPackageReward(donationManager, "Bat Morph", "Bat Morph", - new ItemStack(Material.SKULL_ITEM, 1, (short) 0, (byte) 1), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Block Morph", "Block Morph", - new ItemStack(Material.EMERALD_BLOCK), rarity, 20)); - addReward(new UnknownPackageReward(donationManager, "Big Larry Morph", "Big Larry Morph", - new ItemStack(Material.SLIME_BALL), rarity, 10)); + addReward(new UnknownPackageReward(donationManager, "Morph", "Bat", "Bat Morph", + new ItemStack(Material.SKULL_ITEM, 1, (short) 0, (byte) 1), rarity, 25, _legendaryShards)); + addReward(new UnknownPackageReward(donationManager, "Morph", "Block", "Block Morph", + new ItemStack(Material.EMERALD_BLOCK), rarity, 20, _legendaryShards)); + addReward(new UnknownPackageReward(donationManager, "Morph", "Big Larry", "Big Larry Morph", + new ItemStack(Material.SLIME_BALL), rarity, 10, _legendaryShards)); // Particles - addReward(new UnknownPackageReward(donationManager, "Shadow Walk Particles", "Shadow Walk", - new ItemStack(Material.LEATHER_BOOTS), rarity, 33)); - addReward(new UnknownPackageReward(donationManager, "Enchanted Particles", "Enchanted", - new ItemStack(Material.BOOK), rarity, 25)); - addReward(new UnknownPackageReward(donationManager, "Flame Rings Particles", "Flame Rings", - new ItemStack(Material.BLAZE_POWDER), rarity, 17)); - addReward(new UnknownPackageReward(donationManager, "Rain Cloud Particles", "Rain Cloud", - new ItemStack(Material.INK_SACK, 1, (short) 0, (byte) 4), rarity, 13)); - addReward(new UnknownPackageReward(donationManager, "Blood Helix Particles", "Blood Helix", - new ItemStack(Material.REDSTONE), rarity, 10)); - addReward(new UnknownPackageReward(donationManager, "Green Rings Particles", "Green Ring", - new ItemStack(Material.EMERALD), rarity, 8)); - addReward(new UnknownPackageReward(donationManager, "Flame Fairy Particles", "Flame Fairy", - new ItemStack(Material.APPLE), rarity, 4)); - addReward(new UnknownPackageReward(donationManager, "Heart Particles", "I Heart You", - new ItemStack(Material.BLAZE_POWDER), rarity, 2)); + addReward(new UnknownPackageReward(donationManager, "Particles", "Shadow Walk", "Shadow Walk", + new ItemStack(Material.LEATHER_BOOTS), rarity, 33, _legendaryShards)); + addReward(new UnknownPackageReward(donationManager, "Particles", "Enchanted", "Enchanted", + new ItemStack(Material.BOOK), rarity, 25, _legendaryShards)); + addReward(new UnknownPackageReward(donationManager, "Particles", "Flame Rings", "Flame Rings", + new ItemStack(Material.BLAZE_POWDER), rarity, 17, _legendaryShards)); + addReward(new UnknownPackageReward(donationManager, "Particles", "Rain Cloud", "Rain Cloud", + new ItemStack(Material.INK_SACK, 1, (short) 0, (byte) 4), rarity, 13, _legendaryShards)); + addReward(new UnknownPackageReward(donationManager, "Particles", "Blood Helix", "Blood Helix", + new ItemStack(Material.REDSTONE), rarity, 10, _legendaryShards)); + addReward(new UnknownPackageReward(donationManager, "Particles", "Green Rings", "Green Ring", + new ItemStack(Material.EMERALD), rarity, 8, _legendaryShards)); + addReward(new UnknownPackageReward(donationManager, "Particles", "Flame Fairy", "Flame Fairy", + new ItemStack(Material.APPLE), rarity, 4, _legendaryShards)); + addReward(new UnknownPackageReward(donationManager, "Particles", "Heart", "I Heart You", + new ItemStack(Material.BLAZE_POWDER), rarity, 2, _legendaryShards)); } public void addReward(Reward reward) { - RewardRarity rarity = reward.getRarity(); - - List treasureList = _treasureMap.get(rarity); - - treasureList.add(reward); + addReward(RewardPool.Type.NORMAL, reward); } - public Reward[] getRewards(Player player, RewardType type) + public void addReward(RewardPool.Type pool, Reward reward) + { + _rewardPools.get(pool).add(reward); + } + + public Reward[] getRewards(Player player, RewardPool.Type pool, RewardType type) { int currentReward = 0; Reward[] rewards = new Reward[4]; @@ -353,7 +394,7 @@ public class RewardManager while (currentReward < 4) { - Reward reward = nextReward(player, rewards, currentReward == 3 && !hasUncommon, type, canGiveMythical); + Reward reward = nextReward(player, pool, rewards, currentReward == 3 && !hasUncommon, type, canGiveMythical); if (reward == null) { @@ -395,19 +436,20 @@ public class RewardManager // } public Reward nextReward(Player player, Reward[] excludedRewards, boolean requiresUncommon, RewardType type, boolean canGiveMythical) + { + return nextReward(player, RewardPool.Type.NORMAL, excludedRewards, requiresUncommon, type, canGiveMythical); + } + + public Reward nextReward(Player player, RewardPool.Type pool, Reward[] excludedRewards, boolean requiresUncommon, RewardType type, boolean canGiveMythical) { RewardRarity rarity = type.generateRarity(requiresUncommon); //Dont give Rank Upgrade if already has Titan if (rarity == RewardRarity.MYTHICAL) { - if (_statusManager.getRegion() == Region.US && canGiveMythical && type == RewardType.MythicalChest && Math.random() <= 0.1) - { - return getLogitechPrize(); - } if (canGiveMythical && type == RewardType.MythicalChest && !_clientManager.Get(player).GetRank().has(Rank.TITAN)) { - return new RankReward(_clientManager, 0, rarity); + return new RankReward(_clientManager, 0, 0, rarity); } else if (!canGiveMythical || _clientManager.Get(player).GetRank().has(Rank.LEGEND)) { @@ -415,11 +457,11 @@ public class RewardManager } else { - return new RankReward(_clientManager, 0, rarity); + return new RankReward(_clientManager, 0, 0, rarity); } } - List treasureList = _treasureMap.get(rarity); + List treasureList = _rewardPools.get(pool).getRewards(rarity); int totalWeight = 0; ArrayList possibleRewards = new ArrayList(); @@ -438,7 +480,7 @@ public class RewardManager } } - if ((player == null || treasure.canGiveReward(player)) && !isExcluded) + if (!isExcluded) { possibleRewards.add(treasure); totalWeight += treasure.getWeight(); @@ -447,14 +489,13 @@ public class RewardManager if (possibleRewards.size() == 0) { + totalWeight = 0; + // go again, ignore excluded for (Reward treasure : treasureList) { - if ((player == null || treasure.canGiveReward(player))) - { - possibleRewards.add(treasure); - totalWeight += treasure.getWeight(); - } + possibleRewards.add(treasure); + totalWeight += treasure.getWeight(); } } @@ -468,43 +509,15 @@ public class RewardManager currentWeight += reward.getWeight(); if (weight <= currentWeight) - return reward; + { + if (reward.canGiveReward(player)) + return reward; + else + return new TreasureShardReward(_donationManager, reward, 1, reward.getRarity()); + } } } return null; } - - private Reward getLogitechPrize() - { - double rand = Math.random(); - - String name; - String cooldown = "logitech"; - Material mat = Material.DIAMOND; - String displayName; - - if (rand < 0.2) - { - name = "logitechKeyboard"; - displayName = C.cRed + "Logitech G910 RGB Keyboard"; - } - else if (rand < 0.4) - { - name = "logitechMouse"; - displayName = C.cRed + "Logitech G303 Gaming Mouse"; - } - else if (rand < 0.6) - { - name = "logitechHeadset"; - displayName = C.cRed + "Logitech G430 Gaming Headset"; - } - else - { - name = "logitechMousePad"; - displayName = C.cRed + "Logitech G240 Gaming Mousepad"; - } - - return new GiveawayReward(_giveawayManager, _clientManager, _donationManager, _statusManager, name, cooldown, displayName , mat, (byte) 0, RewardRarity.MYTHICAL, 0); - } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardPool.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardPool.java new file mode 100644 index 000000000..72c38535f --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardPool.java @@ -0,0 +1,40 @@ +package mineplex.core.reward; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; + +/** + * Used to separate different "Reward Pools". This allows us to have treasure chests with different loot. + * + */ +public class RewardPool +{ + private EnumMap> _rewardMap; + + public RewardPool() + { + _rewardMap = new EnumMap>(RewardRarity.class); + + for (RewardRarity rarity : RewardRarity.values()) + { + _rewardMap.put(rarity, new ArrayList()); + } + } + + public void add(Reward reward) + { + _rewardMap.get(reward.getRarity()).add(reward); + } + + public List getRewards(RewardRarity rarity) + { + return _rewardMap.get(rarity); + } + + public static enum Type + { + NORMAL, + WINTER_HOLIDAY; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardRarity.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardRarity.java index 1f56de46a..759769234 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardRarity.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardRarity.java @@ -18,24 +18,26 @@ public enum RewardRarity * (Fireworks, sounds, etc) */ - OTHER("Other", cWhite, Material.STAINED_GLASS_PANE, (byte) 0), - COMMON("Common", cWhite, Material.STAINED_GLASS_PANE, (byte) 0), - GAME("Game", cYellow, Material.STAINED_GLASS_PANE, (byte) 4), - UNCOMMON("Uncommon", cAqua, Material.STAINED_GLASS_PANE, (byte) 3), - RARE("Rare", cPurple, Material.STAINED_GLASS_PANE, (byte) 10), - LEGENDARY("Legendary", cGreen, Material.STAINED_GLASS_PANE, (byte) 5), - MYTHICAL("Mythical", cRed, Material.STAINED_GLASS_PANE, (byte) 14); + OTHER("Other", cWhite, C.cGray, Material.STAINED_GLASS_PANE, (byte) 0), + COMMON("Common", cWhite, C.cGray, Material.STAINED_GLASS_PANE, (byte) 0), + GAME("Game", cYellow, C.cYellow, Material.STAINED_GLASS_PANE, (byte) 4), + UNCOMMON("Uncommon", cAqua, C.cDAqua, Material.STAINED_GLASS_PANE, (byte) 3), + RARE("Rare", cPurple, C.cDPurple, Material.STAINED_GLASS_PANE, (byte) 10), + LEGENDARY("Legendary", cGreen, C.cDGreen, Material.STAINED_GLASS_PANE, (byte) 5), + MYTHICAL("Mythical", cRed, C.cDRed, Material.STAINED_GLASS_PANE, (byte) 14); private String _name; private String _color; + private String _darkColor; private Material _material; private byte _data; private ItemStack _stack; - RewardRarity(String name, String color, Material material, byte data) + RewardRarity(String name, String color, String darkColor, Material material, byte data) { _name = name; _color = color; + _darkColor = darkColor; _material = material; _data = data; @@ -50,6 +52,11 @@ public enum RewardRarity return _color; } + public String getDarkColor() + { + return _darkColor; + } + public String getName() { return _name; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java index 8c548df93..a26c177a7 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java @@ -7,9 +7,10 @@ public enum RewardType //% Chances Mythic Legend Rare Uncommon GameLoot( 0.000001, 0.00001, 0.0001, 3), - OldChest( 0, 0.05, 0.4, 5), - AncientChest( 0, 1, 4, 25), - MythicalChest( 0.3, 3, 12, 75), + OldChest( 0, 0.06, 0.8, 16), + AncientChest( 0, 2, 8, 32), + MythicalChest( 0.1, 4, 16, 72), + WinterChest( 0, 5, 18, 32), SpinnerFiller( 0.1, 1, 4, 20), SpinnerReal( 0.000001, 0.05, 0.4, 5); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/CoinReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/CoinReward.java deleted file mode 100644 index dbfce1d9b..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/CoinReward.java +++ /dev/null @@ -1,74 +0,0 @@ -package mineplex.core.reward.rewards; - -import java.util.Random; - -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import mineplex.core.common.util.Callback; -import mineplex.core.donation.DonationManager; -import mineplex.core.reward.Reward; -import mineplex.core.reward.RewardData; -import mineplex.core.reward.RewardRarity; -import mineplex.core.reward.RewardType; - -public class CoinReward extends Reward -{ - private DonationManager _donationManager; - private Random _random; - private int _minCoinCount; - private int _maxCoinCount; - - public CoinReward(DonationManager donationManager, int minCoinCount, int maxCoinCount, int weight, RewardRarity rarity) - { - this(donationManager, minCoinCount, maxCoinCount, weight, rarity, RANDOM); - } - - public CoinReward(DonationManager donationManager, int minCoinCount, int maxCoinCount, int weight, RewardRarity rarity, Random random) - { - super(rarity, weight); - _donationManager = donationManager; - _minCoinCount = minCoinCount; - _maxCoinCount = maxCoinCount; - - _random = random; - } - - @Override - public RewardData giveRewardCustom(Player player, RewardType rewardType) - { - int coinsToReward = _random.nextInt(_maxCoinCount - _minCoinCount) + _minCoinCount; - - _donationManager.RewardCoins(new Callback() - { - @Override - public void run(Boolean data) - { - - } - }, "Treasure Chest", player.getName(), _donationManager.getClientManager().Get(player).getAccountId(), coinsToReward); - - return new RewardData(getRarity().getColor() + coinsToReward + " Coins", new ItemStack(175), getRarity()); - } - - @Override - public RewardData getFakeRewardData(Player player) - { - return new RewardData(getRarity().getColor() + "Coins", new ItemStack(175), getRarity()); - } - - @Override - public boolean canGiveReward(Player player) - { - return true; - } - - @Override - public boolean equals(Object obj) - { - if (obj instanceof CoinReward) - return true; - - return false; - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/ExperienceReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/ExperienceReward.java index 3ead33459..b40171381 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/ExperienceReward.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/ExperienceReward.java @@ -19,9 +19,9 @@ public class ExperienceReward extends Reward private int _minExperience; private int _maxExperience; - public ExperienceReward(StatsManager statsManager, int minExperience, int maxExperience, int weight, RewardRarity rarity) + public ExperienceReward(StatsManager statsManager, int minExperience, int maxExperience, int weight, int shardValue, RewardRarity rarity) { - super(rarity, weight); + super(rarity, weight, shardValue); _statsManager = statsManager; _random = new Random(); @@ -36,13 +36,13 @@ public class ExperienceReward extends Reward _statsManager.incrementStat(player, "Global.ExpEarned", experience); - return new RewardData(getRarity().getColor() + experience + " Experience", new ItemStack(Material.EXP_BOTTLE), getRarity()); + return new RewardData(null, getRarity().getColor() + experience + " Experience", new ItemStack(Material.EXP_BOTTLE), getRarity()); } @Override public RewardData getFakeRewardData(Player player) { - return new RewardData(getRarity().getColor() + "Experience", new ItemStack(Material.EXP_BOTTLE), getRarity()); + return new RewardData(null, getRarity().getColor() + "Experience", new ItemStack(Material.EXP_BOTTLE), getRarity()); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/GemReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/GemReward.java index 1e4e2fb78..cae7f75e7 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/GemReward.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/GemReward.java @@ -20,14 +20,14 @@ public class GemReward extends Reward private int _minGemCount; private int _maxGemCount; - public GemReward(DonationManager donationManager, int minGemCount, int maxGemCount, int weight, RewardRarity rarity) + public GemReward(DonationManager donationManager, int minGemCount, int maxGemCount, int weight, int shardValue, RewardRarity rarity) { - this(donationManager, minGemCount, maxGemCount, weight, rarity, RANDOM); + this(donationManager, minGemCount, maxGemCount, weight, shardValue, rarity, RANDOM); } - public GemReward(DonationManager donationManager, int minGemCount, int maxGemCount, int weight, RewardRarity rarity, Random random) + public GemReward(DonationManager donationManager, int minGemCount, int maxGemCount, int weight, int shardValue, RewardRarity rarity, Random random) { - super(rarity, weight); + super(rarity, weight, shardValue); _donationManager = donationManager; _minGemCount = minGemCount; _maxGemCount = maxGemCount; @@ -49,13 +49,13 @@ public class GemReward extends Reward } }, "Treasure Chest", player.getName(), player.getUniqueId(), GemsToReward); - return new RewardData(getRarity().getColor() + GemsToReward + " Gems", new ItemStack(Material.EMERALD), getRarity()); + return new RewardData(null, getRarity().getColor() + GemsToReward + " Gems", new ItemStack(Material.EMERALD), getRarity()); } @Override public RewardData getFakeRewardData(Player player) { - return new RewardData(getRarity().getColor() + "Gems", new ItemStack(Material.EMERALD), getRarity()); + return new RewardData(null, getRarity().getColor() + "Gems", new ItemStack(Material.EMERALD), getRarity()); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/GiveawayReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/GiveawayReward.java deleted file mode 100644 index 89412121d..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/GiveawayReward.java +++ /dev/null @@ -1,97 +0,0 @@ -package mineplex.core.reward.rewards; - -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import mineplex.core.account.CoreClientManager; -import mineplex.core.common.Rank; -import mineplex.core.common.util.Callback; -import mineplex.core.donation.DonationManager; -import mineplex.core.giveaway.GiveawayManager; -import mineplex.core.giveaway.GiveawayResponse; -import mineplex.core.reward.Reward; -import mineplex.core.reward.RewardData; -import mineplex.core.reward.RewardRarity; -import mineplex.core.reward.RewardType; -import mineplex.core.status.ServerStatusManager; - -public class GiveawayReward extends Reward -{ - private GiveawayManager _giveawayManager; - private CoreClientManager _clientManager; - private DonationManager _donationManager; - private ServerStatusManager _serverStatusManager; - private String _giveawayName; - private String _cooldownName; - private String _displayName; - private Material _icon; - private byte _data; - - public GiveawayReward(GiveawayManager giveawayManager, CoreClientManager clientManager, DonationManager donationManager, ServerStatusManager serverStatusManager, String giveawayName, String cooldownName, String displayName, Material icon, byte data, RewardRarity rarity, int weight) - { - super(rarity, weight, true); - _giveawayManager = giveawayManager; - _clientManager = clientManager; - _donationManager = donationManager; - _serverStatusManager = serverStatusManager; - _giveawayName = giveawayName; - _cooldownName = cooldownName; - _displayName = displayName; - _icon = icon; - _data = data; - } - - @Override - protected void giveRewardCallback(final RewardType rewardType, final Player player, final Callback rewardDataCallback) - { - _giveawayManager.attemptToGiveaway(_giveawayName, _cooldownName, player, new Callback() - { - @Override - public void run(GiveawayResponse data) - { - if (data.isSuccess()) - { - RewardData rewardData = new RewardData(_displayName, new ItemStack(_icon, 1, (short) 0, _data), getRarity()); - if (rewardDataCallback != null) rewardDataCallback.run(rewardData); - } - else - { - System.out.println("GIVEAWAY FAILED: " + data.getFailReason().name()); - - // Dang, I guess we failed! - if (!_clientManager.hasRank(player, Rank.TITAN)) - { - Reward reward = new RankReward(_clientManager, 0, getRarity()); - reward.giveReward(rewardType, player, rewardDataCallback); - } - else - { - Reward reward = new CoinReward(_donationManager, 20000, 30000, 0, getRarity()); - reward.giveReward(rewardType, player, rewardDataCallback); - } - } - } - }); - } - - @Override - protected RewardData giveRewardCustom(Player player, RewardType rewardType) - { - // This is a little hacky, this should never be called! - return null; - } - - @Override - public RewardData getFakeRewardData(Player player) - { - // Let's pretend we are coins! - return new RewardData(getRarity().getColor() + "Coins", new ItemStack(175), getRarity()); - } - - @Override - public boolean canGiveReward(Player player) - { - return true; - } -} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/InventoryReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/InventoryReward.java index 407d60593..6cff231dd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/InventoryReward.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/InventoryReward.java @@ -25,14 +25,14 @@ public class InventoryReward extends Reward private int _minAmount; private int _maxAmount; - public InventoryReward(InventoryManager inventoryManager, String name, String packageName, int minAmount, int maxAmount, ItemStack itemStack, RewardRarity rarity, int weight) + public InventoryReward(InventoryManager inventoryManager, String name, String packageName, int minAmount, int maxAmount, ItemStack itemStack, RewardRarity rarity, int weight, int shardValue) { - this(RANDOM, inventoryManager, name, packageName, minAmount, maxAmount, itemStack, rarity, weight); + this(RANDOM, inventoryManager, name, packageName, minAmount, maxAmount, itemStack, rarity, weight, shardValue); } - public InventoryReward(Random random, InventoryManager inventoryManager, String name, String packageName, int minAmount, int maxAmount, ItemStack itemStack, RewardRarity rarity, int weight) + public InventoryReward(Random random, InventoryManager inventoryManager, String name, String packageName, int minAmount, int maxAmount, ItemStack itemStack, RewardRarity rarity, int weight, int shardValue) { - super(rarity, weight); + super(rarity, weight, shardValue); _random = random; _name = name; @@ -59,13 +59,13 @@ public class InventoryReward extends Reward _inventoryManager.addItemToInventory(player, _packageName, amountToGive); - return new RewardData(getRarity().getColor() + amountToGive + " " + _name, _itemStack, getRarity()); + return new RewardData(getRarity().getDarkColor() + "Gadget", getRarity().getColor() + amountToGive + " " + _name, _itemStack, getRarity()); } @Override public RewardData getFakeRewardData(Player player) { - return new RewardData(getRarity().getColor() + _name, _itemStack, getRarity()); + return new RewardData(getRarity().getDarkColor() + "Gadget", getRarity().getColor() + _name, _itemStack, getRarity()); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/PetReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/PetReward.java index c683c100f..d3dba4662 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/PetReward.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/PetReward.java @@ -24,9 +24,9 @@ public class PetReward extends UnknownPackageReward private PetManager _petManager; private EntityType _petEntity; - public PetReward(PetManager petManager, InventoryManager inventoryManager, DonationManager donationManager, String name, String packageName, EntityType petEntity, RewardRarity rarity, int weight) + public PetReward(PetManager petManager, InventoryManager inventoryManager, DonationManager donationManager, String name, String packageName, EntityType petEntity, RewardRarity rarity, int weight, int shardValue) { - super(donationManager, name, packageName, new ItemStack(Material.MONSTER_EGG, 1, petEntity.getTypeId()), rarity, weight); + super(donationManager, "Pet", name, packageName, new ItemStack(Material.MONSTER_EGG, 1, petEntity.getTypeId()), rarity, weight, shardValue); _petManager = petManager; _inventoryManager = inventoryManager; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java index 234fb2215..ac08ef75a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java @@ -19,9 +19,9 @@ public class RankReward extends Reward private Random _random; private CoreClientManager _clientManager; - public RankReward(CoreClientManager clientManager, int weight, RewardRarity rarity) + public RankReward(CoreClientManager clientManager, int weight, int shardValue, RewardRarity rarity) { - super(rarity, weight); + super(rarity, weight, shardValue); _clientManager = clientManager; _random = new Random(); @@ -40,7 +40,7 @@ public class RankReward extends Reward rank = Rank.TITAN; if (rank == null) - return new RewardData(getRarity().getColor() + "Rank Upgrade Error", new ItemStack(Material.PAPER), getRarity()); + return new RewardData(null, getRarity().getColor() + "Rank Upgrade Error", new ItemStack(Material.PAPER), getRarity()); _clientManager.Get(player).SetRank(rank, false); _clientManager.getRepository().saveRank(null, player.getName(), player.getUniqueId(), rank, true); @@ -57,7 +57,7 @@ public class RankReward extends Reward else if (_clientManager.Get(player).GetRank() == Rank.HERO) rank = Rank.LEGEND; if (rank == null) - return new RewardData(getRarity().getColor() + "Rank Upgrade Error", new ItemStack(Material.PAPER), getRarity()); + return new RewardData(null, getRarity().getColor() + "Rank Upgrade Error", new ItemStack(Material.PAPER), getRarity()); return new RankRewardData(getRarity().getColor() + rank.Name + " Rank", new ItemStack(Material.NETHER_STAR), getRarity(), rank); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/TreasureShardReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/TreasureShardReward.java new file mode 100644 index 000000000..a931d2311 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/TreasureShardReward.java @@ -0,0 +1,68 @@ +package mineplex.core.reward.rewards; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.util.Callback; +import mineplex.core.donation.DonationManager; +import mineplex.core.reward.Reward; +import mineplex.core.reward.RewardData; +import mineplex.core.reward.RewardRarity; +import mineplex.core.reward.RewardType; + +public class TreasureShardReward extends Reward +{ + private DonationManager _donationManager; + private Reward _otherReward; + private int _shards; + + public TreasureShardReward(DonationManager donationManager, Reward otherReward, int weight, RewardRarity rarity) + { + super(rarity, weight, 0); + + _donationManager = donationManager; + _otherReward = otherReward; + + _shards = (int) (otherReward.getShardValue() + (Math.random() * otherReward.getShardValue() / 2.0)); + } + + @Override + public RewardData giveRewardCustom(Player player, RewardType rewardType) + { + RewardData fakeData = _otherReward.getFakeRewardData(player); + RewardData rewardData = new RewardData(fakeData.getHeader(), fakeData.getFriendlyName(), fakeData.getDisplayItem(), fakeData.getRarity(), _shards); + + _donationManager.RewardCoins(new Callback() + { + @Override + public void run(Boolean data) + { + + } + }, "Treasure Chest", player.getName(), _donationManager.getClientManager().Get(player).getAccountId(), _shards); + + return rewardData; + } + + @Override + public RewardData getFakeRewardData(Player player) + { + return new RewardData(null, getRarity().getColor() + "Treasure Shards", new ItemStack(Material.PRISMARINE_SHARD), getRarity()); + } + + @Override + public boolean canGiveReward(Player player) + { + return true; + } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof TreasureShardReward) + return true; + + return false; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/UnknownPackageReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/UnknownPackageReward.java index a4012e21b..01a28d57d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/UnknownPackageReward.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/UnknownPackageReward.java @@ -18,13 +18,15 @@ public class UnknownPackageReward extends Reward { protected DonationManager _donationManager; private ItemStack _itemStack; + private String _header; private String _name; private String _packageName; - public UnknownPackageReward(DonationManager donationManager, String name, String packageName, ItemStack itemStack, RewardRarity rarity, int weight) + public UnknownPackageReward(DonationManager donationManager, String header, String name, String packageName, ItemStack itemStack, RewardRarity rarity, int weight, int shardValue) { - super(rarity, weight); + super(rarity, weight, shardValue); _donationManager = donationManager; + _header = header; _name = name; _packageName = packageName; _itemStack = itemStack; @@ -35,7 +37,7 @@ public class UnknownPackageReward extends Reward { _donationManager.PurchaseUnknownSalesPackage(null, player.getName(), _donationManager.getClientManager().Get(player).getAccountId(), _packageName, CurrencyType.Coins, 0, true); - return new RewardData(getRarity().getColor() + _name, _itemStack, getRarity()); + return new RewardData(getRarity().getDarkColor() + _header, getRarity().getColor() + _name, _itemStack, getRarity()); } @Override @@ -53,7 +55,7 @@ public class UnknownPackageReward extends Reward @Override public RewardData getFakeRewardData(Player player) { - return new RewardData(getRarity().getColor() + _name, _itemStack, getRarity()); + return new RewardData(getRarity().getDarkColor() + _header, getRarity().getColor() + _name, _itemStack, getRarity()); } protected String getPackageName() diff --git a/Plugins/Mineplex.Core/src/mineplex/core/shop/page/ConfirmationPage.java b/Plugins/Mineplex.Core/src/mineplex/core/shop/page/ConfirmationPage.java index b253a4ea7..c52c84e2b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/shop/page/ConfirmationPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/shop/page/ConfirmationPage.java @@ -79,7 +79,7 @@ public class ConfirmationPage= ANIMATION_DURATION) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java index f1426accf..a0ad48354 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/gui/TreasurePage.java @@ -6,10 +6,13 @@ import java.util.List; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import mineplex.core.account.CoreClientManager; +import mineplex.core.common.skin.SkinData; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilSkull; import mineplex.core.donation.DonationManager; import mineplex.core.inventory.InventoryManager; import mineplex.core.shop.item.ShopItem; @@ -25,7 +28,7 @@ public class TreasurePage extends ShopPageBase public TreasurePage(TreasureManager plugin, TreasureShop shop, TreasureLocation treasureLocation, CoreClientManager clientManager, DonationManager donationManager, InventoryManager inventoryManager, Player player) { - super(plugin, shop, clientManager, donationManager, "Open Treasure", player, 9); + super(plugin, shop, clientManager, donationManager, "Open Treasure", player, 54); _treasureLocation = treasureLocation; _inventoryManager = inventoryManager; @@ -36,9 +39,17 @@ public class TreasurePage extends ShopPageBase @Override protected void buildPage() { + int treasureShards = getDonationManager().Get(getPlayer()).getCoins(); + int basicCount = _inventoryManager.Get(getPlayer()).getItemCount(TreasureType.OLD.getItemName()); int heroicCount = _inventoryManager.Get(getPlayer()).getItemCount(TreasureType.ANCIENT.getItemName()); int legendaryCount = _inventoryManager.Get(getPlayer()).getItemCount(TreasureType.MYTHICAL.getItemName()); + int christmasCount = _inventoryManager.Get(getPlayer()).getItemCount(TreasureType.CHRISTMAS.getItemName()); + + List shardLore = new ArrayList(); + shardLore.add(" "); + shardLore.add(C.cGray + "This seems like it might come in"); + shardLore.add(C.cGray + "handy. Maybe I can collect more!"); List basicLore = new ArrayList(); basicLore.add(" "); @@ -55,7 +66,7 @@ public class TreasurePage extends ShopPageBase basicLore.add(ChatColor.RESET + C.cGreen + "Click to Open!"); else { - basicLore.add(ChatColor.RESET + "Click to Purchase for " + C.cYellow + "1000 Coins"); + basicLore.add(ChatColor.RESET + "Click to craft for " + C.cAqua + "1000 Treasure Shards"); basicLore.add(" "); basicLore.add(ChatColor.RESET + "or Purchase at: " + C.cYellow + "www.mineplex.com/shop"); } @@ -72,7 +83,7 @@ public class TreasurePage extends ShopPageBase heroicLore.add(ChatColor.RESET + C.cGreen + "Click to Open!"); else { - heroicLore.add(ChatColor.RESET + "Click to Purchase for " + C.cYellow + "5000 Coins"); + heroicLore.add(ChatColor.RESET + "Click to craft for " + C.cAqua + "5000 Treasure Shards"); heroicLore.add(" "); heroicLore.add(ChatColor.RESET + "or Purchase at: " + C.cYellow + "www.mineplex.com/shop"); } @@ -92,22 +103,58 @@ public class TreasurePage extends ShopPageBase legendaryLore.add(ChatColor.RESET + C.cGreen + "Click to Open!"); else { - legendaryLore.add(ChatColor.RESET + "Click to Purchase for " + C.cYellow + "10000 Coins"); + legendaryLore.add(ChatColor.RESET + "Click to craft for " + C.cAqua + "10000 Treasure Shards"); legendaryLore.add(" "); legendaryLore.add(ChatColor.RESET + "or Purchase at: " + C.cYellow + "www.mineplex.com/shop"); } - ShopItem basic = new ShopItem(Material.CHEST, C.cGreen + C.Bold + "Old Chest", basicLore.toArray(new String[0]), 0, false, false); - ShopItem heroic = new ShopItem(Material.TRAPPED_CHEST, C.cGold + C.Bold + "Ancient Chest", heroicLore.toArray(new String[0]), 0, false, false); - ShopItem legendary = new ShopItem(Material.ENDER_CHEST, C.cRed + C.Bold + "Mythical Chest", legendaryLore.toArray(new String[0]), 0, false, false); + List christmasLore = new ArrayList(); + christmasLore.add(" "); + christmasLore.add(F.value("Winter Holiday Chests Owned", "" + christmasCount)); + christmasLore.add(" "); + christmasLore.add(C.cGray + "Legend tells of the Winter Lord's"); + christmasLore.add(C.cGray + "vast treasure horde, locked away in"); + christmasLore.add(C.cGray + "in a vault of ice, deep beneath the"); + christmasLore.add(C.cGray + "Frozen Sea. It is said it can only be"); + christmasLore.add(C.cGray + "accessed in the deepest parts of Winter..."); + christmasLore.add(" "); + if (christmasCount > 0) + christmasLore.add(ChatColor.RESET + C.cGreen + "Click to Open!"); + else + { + christmasLore.add(ChatColor.RESET + "Click to craft for " + C.cAqua + "15000 Treasure Shards"); + christmasLore.add(" "); + christmasLore.add(ChatColor.RESET + "or Purchase at: " + C.cYellow + "www.mineplex.com/shop"); + } - if (basicCount > 0) addButton(2, basic, new OpenTreasureButton(getPlayer(), _treasureLocation, TreasureType.OLD)); - else addButton(2, basic, new BuyChestButton(getPlayer(), _inventoryManager, this, "Old Chest", Material.CHEST, 1000)); + List cosmicLore = new ArrayList(); + cosmicLore.add(" "); + cosmicLore.add(C.cWhite + "Cannot be purchased in Shop"); + cosmicLore.add(C.cWhite + "Coming Soon"); + cosmicLore.add(" "); + cosmicLore.add(C.cAqua + "20000 Treasure Shards"); + + ShopItem shards = new ShopItem(Material.PRISMARINE_SHARD, C.cAqua + C.Bold + treasureShards + " Treasure Shards", shardLore.toArray(new String[0]), 0, false); + ShopItem basic = new ShopItem(Material.CHEST, C.cGreen + C.Bold + "Old Treasure", basicLore.toArray(new String[0]), 0, false, false); + ShopItem heroic = new ShopItem(Material.TRAPPED_CHEST, C.cGold + C.Bold + "Ancient Treasure", heroicLore.toArray(new String[0]), 0, false, false); + ShopItem legendary = new ShopItem(Material.ENDER_CHEST, C.cRed + C.Bold + "Mythical Treasure", legendaryLore.toArray(new String[0]), 0, false, false); + ItemStack christmas = SkinData.PRESENT.getSkull(C.cDGreen + C.Bold + "Winter Holiday Treasure", christmasLore); + ItemStack cosmic = new ShopItem(Material.SEA_LANTERN, C.cDAqua + C.Bold + "??? Treasure", cosmicLore.toArray(new String[0]), 0, false, false); + + addItem(40, shards); + + if (basicCount > 0) addButton(20, basic, new OpenTreasureButton(getPlayer(), _treasureLocation, TreasureType.OLD)); + else addButton(20, basic, new BuyChestButton(getPlayer(), _inventoryManager, this, "Old Chest", Material.CHEST, 1000)); - if (heroicCount > 0) addButton(4, heroic, new OpenTreasureButton(getPlayer(), _treasureLocation, TreasureType.ANCIENT)); - else addButton(4, heroic, new BuyChestButton(getPlayer(), _inventoryManager, this, "Ancient Chest", Material.CHEST, 5000)); + if (heroicCount > 0) addButton(22, heroic, new OpenTreasureButton(getPlayer(), _treasureLocation, TreasureType.ANCIENT)); + else addButton(22, heroic, new BuyChestButton(getPlayer(), _inventoryManager, this, "Ancient Chest", Material.CHEST, 5000)); - if (legendaryCount > 0) addButton(6, legendary, new OpenTreasureButton(getPlayer(), _treasureLocation, TreasureType.MYTHICAL)); - else addButton(6, legendary, new BuyChestButton(getPlayer(), _inventoryManager, this, "Mythical Chest", Material.ENDER_CHEST, 10000)); + if (legendaryCount > 0) addButton(24, legendary, new OpenTreasureButton(getPlayer(), _treasureLocation, TreasureType.MYTHICAL)); + else addButton(24, legendary, new BuyChestButton(getPlayer(), _inventoryManager, this, "Mythical Chest", Material.ENDER_CHEST, 10000)); + + if (christmasCount > 0) addButton(12, christmas, new OpenTreasureButton(getPlayer(), _treasureLocation, TreasureType.CHRISTMAS)); + else addButton(12, christmas, new BuyChestButton(getPlayer(), _inventoryManager, this, TreasureType.CHRISTMAS.getItemName(), Material.SNOW_BALL, 15000)); + + addItem(14, cosmic); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/updater/UpdateType.java b/Plugins/Mineplex.Core/src/mineplex/core/updater/UpdateType.java index 0b6c89cfb..52d63e2a1 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/updater/UpdateType.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/updater/UpdateType.java @@ -4,27 +4,93 @@ import mineplex.core.common.util.UtilTime; public enum UpdateType { + /** + * Once every 64 minutes + */ MIN_64(3840000), + /** + * Once every 60 minutes + */ HOUR_01(3600000), + /** + * Once every 32 minutes + */ MIN_32(1920000), + /** + * Once every 30 minutes + */ MIN_30(1800000), + /** + * Once every 16 minutes + */ MIN_16(960000), + /** + * Once every 10 minutes + */ MIN_10(600000), + /** + * Once every 8 minutes + */ MIN_08(480000), + /** + * Once every 5 minutes + */ MIN_05(300000), + /** + * Once every 4 minutes + */ MIN_04(240000), + /** + * Once every 2 minutes + */ MIN_02(120000), + /** + * Once every minute + */ MIN_01(60000), + /** + * Once every 32 seconds + */ SLOWEST(32000), + /** + * ONce every 30 seconds + */ SEC_30(30000), + /** + * Once every 16 seconds + */ SLOWER(16000), + /** + * Once every 8 seconds + */ SEC_08(8000), + /** + * Once every 4 seconds + */ SLOW(4000), + /** + * Once every 40 ticks + */ TWOSEC(2000), + /** + * Once every 20 ticks + */ SEC(1000), + /** + * Once every 10 ticks + */ FAST(500), + /** + * Once every 5 ticks + */ FASTER(250), + /** + * Once every 3 ticks + */ FASTEST(125), + /** + * Once every tick + */ TICK(49); private long _time; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/updater/event/UpdateEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/updater/event/UpdateEvent.java index 59400f196..60c7f0bb8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/updater/event/UpdateEvent.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/updater/event/UpdateEvent.java @@ -1,6 +1,7 @@ package mineplex.core.updater.event; import mineplex.core.updater.UpdateType; +import net.minecraft.server.v1_8_R3.MinecraftServer; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; @@ -19,6 +20,11 @@ public class UpdateEvent extends Event { return _type; } + + public int getTick() + { + return MinecraftServer.currentTick; + } public HandlerList getHandlers() { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index ce3ff1b86..d27dab663 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -49,7 +49,7 @@ import net.minecraft.server.v1_8_R3.MinecraftServer; public class Clans extends JavaPlugin { - public static final String VERSION = "0.17b"; + public static final String VERSION = "0.17d"; private String WEB_CONFIG = "webServer"; // Modules diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index d97ad7c78..d51bb3f24 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -10,7 +10,6 @@ import java.util.TimeZone; import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -66,7 +65,6 @@ import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.ClanTips.TipType; import mineplex.game.clans.clans.ClansUtility.ClanRelation; -import mineplex.game.clans.clans.claimview.ClaimVisualizer; import mineplex.game.clans.clans.commands.ClanManagementCommand; import mineplex.game.clans.clans.commands.ClansAllyChatCommand; import mineplex.game.clans.clans.commands.ClansChatCommand; @@ -81,7 +79,9 @@ import mineplex.game.clans.clans.gui.ClanShop; import mineplex.game.clans.clans.loot.LootManager; import mineplex.game.clans.clans.map.ItemMapManager; import mineplex.game.clans.clans.observer.ObserverManager; +import mineplex.game.clans.clans.playtime.Playtime; import mineplex.game.clans.clans.potato.PotatoManager; +import mineplex.game.clans.clans.pvptimer.PvpTimer; import mineplex.game.clans.clans.redis.ClanDeleteCommandHandler; import mineplex.game.clans.clans.redis.ClanLoadCommandHandler; import mineplex.game.clans.clans.regions.ClansRegions; @@ -155,6 +155,8 @@ public class ClansManager extends MiniClientPluginimplements IRelati private LootManager _lootManager; private DonationManager _donationManager; + private Playtime _playTracker; + private TutorialManager _tutorialManager; private ClassManager _classManager; @@ -228,18 +230,12 @@ public class ClansManager extends MiniClientPluginimplements IRelati TaskManager taskManager = new TaskManager(plugin, _clientManager, webServerAddress); - _tutorialManager = new TutorialManager(plugin, _goldManager, taskManager, donationManager, preferencesManager, this, packetHandler); - ClanTips = new ClanTips(plugin, this, preferencesManager); - new StuckManager(this); - - _scoreboard = new ClansScoreboardManager(plugin, _tutorialManager, this, _warManager, _worldEvent, clientManager, donationManager); // new MurderManager(plugin, this); _clanAdmin = new ClansAdmin(this); _clanBlocks = new ClansBlocks(); - _clanDataAccess = new ClansDataAccessLayer(this, _scoreboard); _clanDisplay = new ClansDisplay(plugin, this); _clanGame = new ClansGame(plugin, this); _clanUtility = new ClansUtility(this); @@ -266,11 +262,12 @@ public class ClansManager extends MiniClientPluginimplements IRelati new ObserverManager(plugin, _condition, this); new ClanEnergyTracker(plugin, this); + new StuckManager(this); new ClansAlphaManager(this, taskManager); - + new PotatoManager(plugin, this); - + new Weapon(plugin, energy); new Gameplay(plugin, this, blockRestore, damageManager); _projectileManager = new ProjectileManager(plugin); @@ -298,7 +295,15 @@ public class ClansManager extends MiniClientPluginimplements IRelati ClassShopManager shopManager = new ClassShopManager(plugin, _classManager, skillManager, itemFactory, achievementManager, _clientManager); _classShop = new ClassCombatShop(shopManager, _clientManager, donationManager, true, "Class Shop"); - ClanEnergyManager clanEnergyManager = new ClanEnergyManager(plugin, this, clientManager, donationManager); + new ClanEnergyManager(plugin, this, clientManager, donationManager); + + _playTracker = new Playtime(this, statsManager); + new PvpTimer(this, _playTracker, statsManager); + + _tutorialManager = new TutorialManager(plugin, _playTracker, _goldManager, taskManager, donationManager, preferencesManager, this, packetHandler); + + _scoreboard = new ClansScoreboardManager(plugin, this, _warManager, _worldEvent, clientManager, donationManager); + _clanDataAccess = new ClansDataAccessLayer(this, _scoreboard); for (ClanToken token : _clanDataAccess.getRepository().retrieveClans()) { @@ -377,7 +382,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati @Override public void addCommands() { - addCommand(new ClansCommand(this, _tutorialManager)); + addCommand(new ClansCommand(this)); addCommand(new RegionsCommand(this)); addCommand(new ClansChatCommand(this)); addCommand(new ClansAllyChatCommand(this)); @@ -460,7 +465,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati int x = Math.abs(location.getBlockX()); int z = Math.abs(location.getBlockZ()); - return (x <= CLAIMABLE_RADIUS && z <= CLAIMABLE_RADIUS) && !Spawn.getInstance().isInSpawn(location); + return (x <= CLAIMABLE_RADIUS && z <= CLAIMABLE_RADIUS) && !Spawn.getInstance().isSafe(location); } public boolean isFields(Location location) @@ -624,7 +629,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati String rank = _clientManager.Get(event.getPlayer()).GetRank().getTag(true, true) + " "; - if (!_clientManager.Get(event.getPlayer()).GetRank().has(Rank.MEDIA)) + if (!_clientManager.Get(event.getPlayer()).GetRank().has(Rank.TWITCH)) rank = ""; if (client.isClanChat() && clan != null) @@ -957,6 +962,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati _blockRestore.onDisable(); _worldEvent.onDisable(); _goldManager.onDisable(); + _playTracker.onDisable(); } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansPlayerStats.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansPlayerStats.java new file mode 100644 index 000000000..6b8d45429 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansPlayerStats.java @@ -0,0 +1,18 @@ +package mineplex.game.clans.clans; + +public enum ClansPlayerStats +{ + PLAY_TIME("Clans.TimePlaying"); + + private String _id; + + ClansPlayerStats(String id) + { + _id = id; + } + + public String id() + { + return _id; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java index c27bcf57a..6a1356d8c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java @@ -24,6 +24,7 @@ import mineplex.game.clans.clans.event.PlayerClaimTerritoryEvent; import mineplex.game.clans.clans.event.PlayerPreClaimTerritoryEvent; import mineplex.game.clans.clans.event.PlayerUnClaimTerritoryEvent; import mineplex.game.clans.core.repository.ClanTerritory; +import mineplex.game.clans.spawn.Spawn; public class ClansUtility { @@ -238,7 +239,7 @@ public class ClansUtility public boolean isSafe(Player player) { - if (!UtilTime.elapsed(Clans.getCombatManager().Get(player).GetLastDamaged(), 15000)) return false; + if (!UtilTime.elapsed(Clans.getCombatManager().Get(player).GetLastDamaged(), Spawn.COMBAT_TAG_DURATION)) return false; return isSafe(player.getLocation()); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java index f9bab36a5..3fda15789 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java @@ -35,7 +35,7 @@ public class ClansCommand extends CommandBase { private ClansManager _manager; - public ClansCommand(ClansManager plugin, TutorialManager tutorialManager) + public ClansCommand(ClansManager plugin) { super(plugin, Rank.ALL, "c", "clan", "clans", "factions"); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/PlayingClient.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/PlayingClient.java new file mode 100644 index 000000000..fd68d2949 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/PlayingClient.java @@ -0,0 +1,13 @@ +package mineplex.game.clans.clans.playtime; + +public class PlayingClient +{ + public long StartTime; + public boolean FirstSession; + + public PlayingClient(boolean first) + { + StartTime = System.currentTimeMillis(); + FirstSession = first; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/Playtime.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/Playtime.java new file mode 100644 index 000000000..0a433efb7 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/Playtime.java @@ -0,0 +1,86 @@ +package mineplex.game.clans.clans.playtime; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import mineplex.core.MiniClientPlugin; +import mineplex.core.stats.StatsManager; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.ClansPlayerStats; +import mineplex.game.clans.clans.playtime.command.PlayTimeCommand; +import mineplex.game.clans.clans.playtime.command.cemde; + +public class Playtime extends MiniClientPlugin +{ + private StatsManager _statsManager; + + public Playtime(ClansManager clans, StatsManager statsManager) + { + super("Clans Play Time Tracker", clans.getPlugin()); + + _statsManager = statsManager; + + addCommand(new PlayTimeCommand(_statsManager, this)); + } + + @Override + public void disable() + { + for (Player player : Bukkit.getOnlinePlayers()) + { + save(player); + } + } + + // Seconds + public long getPlaytime(Player player) + { + return _statsManager.Get(player).getStat(ClansPlayerStats.PLAY_TIME.id()); + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Set(event.getPlayer(), AddPlayer(event.getPlayer().getName())); + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) + { + save(event.getPlayer()); + } + + @EventHandler + public void onPlayerKicked(PlayerKickEvent event) + { + save(event.getPlayer()); + } + + private void save(Player player) + { + long timePlaying = getUnsavedPlaytime(player); + + _statsManager.incrementStat(player, ClansPlayerStats.PLAY_TIME.id(), timePlaying); + + // Increment main time in game as well + _statsManager.incrementStat(player, "Global.TimeInGame", timePlaying); + + Get(player).StartTime = System.currentTimeMillis(); + } + + @Override + protected PlayingClient AddPlayer(String player) + { + return new PlayingClient(_statsManager.Get(player).getStat(ClansPlayerStats.PLAY_TIME.id()) == 0); + } + + // Seconds + public long getUnsavedPlaytime(Player player) + { + return (System.currentTimeMillis() - Get(player).StartTime) / 1000; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/command/PlayTimeCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/command/PlayTimeCommand.java new file mode 100644 index 000000000..30b82b248 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/command/PlayTimeCommand.java @@ -0,0 +1,81 @@ +package mineplex.game.clans.clans.playtime.command; + +import java.sql.SQLException; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.stats.PlayerStats; +import mineplex.core.stats.StatsManager; +import mineplex.game.clans.clans.ClansPlayerStats; +import mineplex.game.clans.clans.playtime.Playtime; + +public class PlayTimeCommand extends CommandBase +{ + private Playtime _playTracker; + + public PlayTimeCommand(StatsManager plugin, Playtime tracker) + { + super(plugin, Rank.MODERATOR, "clanstime"); + + _playTracker = tracker; + } + + @Override + public void Execute(final Player caller, final String[] args) + { + if (args == null || args.length == 0) + { + UtilPlayer.message(caller, F.main("Clans", "Usage: /clanstime ")); + } + else + { + final Player target = UtilPlayer.searchOnline(caller, args[0], false); + + if (target == null) + { + Plugin.getPlugin().getServer().getScheduler().runTaskAsynchronously(Plugin.getPlugin(), new Runnable() + { + @Override + public void run() + { + try + { + final PlayerStats stats = Plugin.getOfflinePlayerStats(args[0]); + + Plugin.getPlugin().getServer().getScheduler().runTask(Plugin.getPlugin(), new Runnable() + { + @Override + public void run() + { + if (stats == null) + { + UtilPlayer.message(caller, F.main("Clans", "Player " + F.elem(args[0]) + " not found!")); + } + else + { + long time = stats.getStat(ClansPlayerStats.PLAY_TIME.id()); + UtilPlayer.message(caller, F.main("Clans", F.name(args[0]) + " has spent " + F.elem(UtilTime.convertString(time * 1000L, 1, UtilTime.TimeUnit.FIT)) + " playing Clans.")); + } + } + }); + } + catch (SQLException e) + { + UtilPlayer.message(caller, F.main("Clans", F.name(target.getName()) + " does not have any play time in Clans.")); + } + } + }); + } + else + { + long time = Plugin.Get(target).getStat(ClansPlayerStats.PLAY_TIME.id()); + UtilPlayer.message(caller, F.main("Clans", F.name(target.getName()) + " has spent " + F.elem(UtilTime.convertString(time * 1000L, 1, UtilTime.TimeUnit.FIT) + " (+" + UtilTime.MakeStr(_playTracker.getUnsavedPlaytime(target) * 1000) + ")") + " playing Clans.")); + } + } + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/command/cemde.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/command/cemde.java new file mode 100644 index 000000000..9dc1c22fe --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/command/cemde.java @@ -0,0 +1,30 @@ +package mineplex.game.clans.clans.playtime.command; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.stats.StatsManager; +import mineplex.game.clans.clans.ClansPlayerStats; +import mineplex.game.clans.clans.pvptimer.PvpTimer; + +public class cemde extends CommandBase +{ + PvpTimer _timer; + public cemde(StatsManager plugin, PvpTimer timer) + { + super(plugin, Rank.ALL, "rstime"); + _timer = timer; + } + + @Override + public void Execute(final Player caller, final String[] args) + { + Plugin.Get(caller).setStat(ClansPlayerStats.PLAY_TIME.id(), 0); + _timer.Get(caller).Skipped = false; + _timer.Get(caller).InformedTimes.clear(); + + UtilPlayer.message(caller, "Reset time."); + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/PvpTimer.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/PvpTimer.java new file mode 100644 index 000000000..c2eccc0d4 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/PvpTimer.java @@ -0,0 +1,217 @@ +package mineplex.game.clans.clans.pvptimer; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerJoinEvent; + +import mineplex.core.MiniClientPlugin; +import mineplex.core.common.util.C; +import mineplex.core.common.util.Callback; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.common.util.UtilTime; +import mineplex.core.stats.StatsManager; +import mineplex.core.task.TaskManager; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.playtime.Playtime; +import mineplex.game.clans.clans.playtime.command.cemde; +import mineplex.game.clans.clans.pvptimer.command.PvPTimerCommand; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + +public class PvpTimer extends MiniClientPlugin +{ + private Playtime _tracker; + + public static final String SKIPPED_TASK = "PvpTimer.Skipped"; + + private static long TIMER_LENGTH = 30 * 60; + + public PvpTimer(ClansManager clans, Playtime playtime, StatsManager statsManager) + { + super("PvP Timer", clans.getPlugin()); + _tracker = playtime; + + addCommand(new cemde(statsManager, this)); + } + + @Override + public void addCommands() + { + addCommand(new PvPTimerCommand(this)); + } + + public void disableFor(final Player caller) + { + TaskManager.Instance.completedTask(new Callback() { + @Override + public void run(Boolean data) + { + Get(caller).Skipped = true; + caller.playSound(caller.getLocation(), Sound.ENDERDRAGON_GROWL, 1f, 0.75f); + } + }, caller, "PvpTimer.Skipped"); + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + final Player player = event.getPlayer(); + + if (hasTimer(player)) + { + Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(), new Runnable() { + public void run() + { + UtilTextMiddle.display(C.cGold + "PvP Timer", "will end in " + UtilTime.MakeStr(getPvPTimerLeft(player) * 1000), 40, 70, 40, player); + } + }, 10); + + UtilPlayer.message(player, F.main("Clans", "You are currently on your PvP timer. It will end in " + F.elem(UtilTime.MakeStr(getPvPTimerLeft(player) * 1000)))); + UtilPlayer.message(player, F.main("Clans", "Until it ends, you are immune to, and unable to deal PvP damage.")); + UtilPlayer.message(player, F.main("Clans", "If you would like to disable the PvP timer permanently, then type " + F.elem("/pvptimer") + ", and follow the instructions given.")); + } + } + + @EventHandler + public void inform(UpdateEvent event) + { + if (event.getType() == UpdateType.TWOSEC) + { + for (Player player : Bukkit.getOnlinePlayers()) + { + if (hasTimer(player)) + { + long time = getPvPTimerLeft(player); + PvpTimerClient client = Get(player); + + // end + if (time <= 2) + { + UtilPlayer.message(player, F.main("Clans", "Your " + F.elem("Pvp Timer") + " has ended!")); + UtilPlayer.message(player, F.main("Clans", "You are now completely open to attacks, and you can also attack others.")); + player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 1f, 0.75f); + } + // 5 secs + else if (time <= 5 && !client.InformedTimes.contains(5)) + { + UtilPlayer.message(player, F.main("Clans", "Your " + F.elem("Pvp Timer") + " will end in " + F.time("5.0 Seconds"))); + UtilTextMiddle.display("Pvp Timer", "ending in 5 Seconds"); + client.InformedTimes.add(5); + } + // 10 secs + else if (time <= 10 && !client.InformedTimes.contains(10)) + { + UtilPlayer.message(player, F.main("Clans", "Your " + F.elem("Pvp Timer") + " will end in " + F.time("10.0 Seconds"))); + UtilTextMiddle.display("Pvp Timer", "ending in 10 Seconds"); + client.InformedTimes.add(10); + } + // 30 secs + else if (time <= 30 && !client.InformedTimes.contains(30)) + { + UtilPlayer.message(player, F.main("Clans", "Your " + F.elem("Pvp Timer") + " will end in " + F.time("30.0 Seconds"))); + UtilTextMiddle.display("Pvp Timer", "ending in 30 Seconds"); + client.InformedTimes.add(30); + } + // 1 minute + else if (time <= 1 * 60 && !client.InformedTimes.contains(1 * 60)) + { + UtilPlayer.message(player, F.main("Clans", "Your " + F.elem("Pvp Timer") + " will end in " + F.time("1.0 Minute"))); + UtilTextMiddle.display("Pvp Timer", "ending in 1 Minute"); + client.InformedTimes.add(5); + } + // 5 minutes + else if (time <= 5 * 60 && !client.InformedTimes.contains(5 * 60)) + { + UtilPlayer.message(player, F.main("Clans", "Your " + F.elem("Pvp Timer") + " will end in " + F.time("5.0 Minutes"))); + UtilTextMiddle.display("Pvp Timer", "ending in 5 Minutes"); + client.InformedTimes.add(5 * 60); + } + // 10 minutes + else if (time <= 10 * 60 && !client.InformedTimes.contains(10 * 60)) + { + UtilPlayer.message(player, F.main("Clans", "Your " + F.elem("Pvp Timer") + " will end in " + F.time("10.0 Minutes"))); + UtilTextMiddle.display("Pvp Timer", "ending in 10 Minutes"); + client.InformedTimes.add(10 * 60); + } + // 20 minutes + else if (time <= 20 * 60 && !client.InformedTimes.contains(20 * 60)) + { + UtilPlayer.message(player, F.main("Clans", "Your " + F.elem("Pvp Timer") + " will end in " + F.time("20.0 Minutes"))); + UtilTextMiddle.display("Pvp Timer", "ending in 20 Minutes"); + client.InformedTimes.add(20 * 60); + } + } + } + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerAttack(CustomDamageEvent event) + { + if (event.GetDamageePlayer() == null || event.GetDamagerEntity(true) == null) + { + return; + } + + Player victim = event.GetDamageePlayer(); + Player damager = event.GetDamagerPlayer(true); + + boolean victimTimer = victim != null && hasTimer(victim); + boolean damagerTimer = damager != null && hasTimer(damager); + boolean bothMsg = false; + + if (victimTimer) + { + if (damagerTimer) + { + UtilPlayer.message(damager, F.main("Clans", "You and " + F.name(victim.getName()) + " are still on your PvP timer. Type " + F.elem("/pvptimer") + " to disable.")); + bothMsg = true; + } + else if (damager != null) + { + UtilPlayer.message(damager, F.main("Clans", F.name(victim.getName()) + " is still on their Pvp timer.")); + } + + event.SetCancelled("Pvp Timer"); + } + + if (damagerTimer) + { + if (victimTimer) + { + if (!bothMsg) UtilPlayer.message(damager, F.main("Clans", "You and " + F.name(victim.getName()) + " are still on your PvP timer. Type " + F.elem("/pvptimer") + " to disable.")); + } + else if (damager != null) + { + UtilPlayer.message(damager, F.main("Clans", "You are still on your PvP timer.")); + } + + event.SetCancelled("PvP Timer"); + } + + } + + public long getPvPTimerLeft(Player player) + { + long time = (_tracker.getPlaytime(player) + _tracker.getUnsavedPlaytime(player)); + + return (TIMER_LENGTH <= time ? 0 : TIMER_LENGTH - time); + } + + private boolean hasTimer(Player victim) + { + return victim != null && getPvPTimerLeft(victim) > 0 && !Get(victim).Skipped; + } + + @Override + protected PvpTimerClient AddPlayer(String player) + { + return new PvpTimerClient(Bukkit.getPlayer(player)); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/PvpTimerClient.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/PvpTimerClient.java new file mode 100644 index 000000000..82df2bd55 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/PvpTimerClient.java @@ -0,0 +1,20 @@ +package mineplex.game.clans.clans.pvptimer; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.entity.Player; + +import mineplex.core.task.TaskManager; + +public class PvpTimerClient +{ + public boolean Skipped; + public List InformedTimes; + + public PvpTimerClient(Player player) + { + Skipped = TaskManager.Instance.hasCompletedTask(player, PvpTimer.SKIPPED_TASK); + InformedTimes = new ArrayList<>(); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/command/PvPTimerCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/command/PvPTimerCommand.java new file mode 100644 index 000000000..b8c04949e --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/pvptimer/command/PvPTimerCommand.java @@ -0,0 +1,61 @@ +package mineplex.game.clans.clans.pvptimer.command; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.JsonMessage; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTime; +import mineplex.game.clans.clans.pvptimer.PvpTimer; + +public class PvPTimerCommand extends CommandBase +{ + public PvPTimerCommand(PvpTimer plugin) + { + super(plugin, Rank.ALL, "pvptimer", "timer", "pvp"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + if (Plugin.Get(caller).Skipped) + { + UtilPlayer.message(caller, F.main("Clans", "You have skipped your PvP timer.")); + return; + } + + long pvpTimerLeft = Plugin.getPvPTimerLeft(caller); + + if (pvpTimerLeft == 0) + { + UtilPlayer.message(caller, F.main("Clans", "Your PvP timer has ended.")); + } + else + { + UtilPlayer.message(caller, F.main("Clans", "You have " + F.elem(UtilTime.MakeStr(pvpTimerLeft * 1000)) + " before your PvP timer runs out.")); + new JsonMessage(F.main("Clans", "If you would like to permanently disable Pvp timer, click ")) + .extra("here") + .color("green") + .click(ClickEvent.RUN_COMMAND, "/pvptimer yesiconfirmthatiwouldliketodisablemypvptimerforever") + .extra(".") + .color("gray") + + .sendToPlayer(caller); + } + } + else + { + if (args[0].equalsIgnoreCase("yesiconfirmthatiwouldliketodisablemypvptimerforever")) + { + Plugin.disableFor(caller); + UtilPlayer.message(caller, F.main("Clans", "You have disabled your Pvp timer.")); + } + } + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/ClansScoreboardManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/ClansScoreboardManager.java index c337f063f..47457a05b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/ClansScoreboardManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/ClansScoreboardManager.java @@ -1,10 +1,13 @@ package mineplex.game.clans.clans.scoreboard; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerGameModeChangeEvent; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.account.CoreClientManager; +import mineplex.core.account.event.OnlineRankUpdateEvent; import mineplex.core.common.util.C; import mineplex.core.donation.DonationManager; import mineplex.core.scoreboard.PlayerScoreboard; @@ -29,7 +32,7 @@ public class ClansScoreboardManager extends ScoreboardManager private WarManager _warManager; private WorldEventManager _worldEvent; - public ClansScoreboardManager(JavaPlugin plugin, TutorialManager tutorialManager, ClansManager clansManager, WarManager warManager, WorldEventManager worldEvent, CoreClientManager clientManager, DonationManager donationManager) + public ClansScoreboardManager(JavaPlugin plugin, ClansManager clansManager, WarManager warManager, WorldEventManager worldEvent, CoreClientManager clientManager, DonationManager donationManager) { super(plugin, clientManager, donationManager); @@ -37,10 +40,10 @@ public class ClansScoreboardManager extends ScoreboardManager _warManager = warManager; _worldEvent = worldEvent; - init(tutorialManager); + init(); } - private void init(TutorialManager tutorialManager) + private void init() { setTitle("Clans Alpha " + Clans.VERSION); @@ -53,12 +56,40 @@ public class ClansScoreboardManager extends ScoreboardManager data.writeElement(_warManager); data.writeElement(_worldEvent); - for (Tutorial tutorial : tutorialManager.getTutorials().values()) + for (Tutorial tutorial : TutorialManager.Instance.getTutorials().values()) { data.writeElement(tutorial); } } + @EventHandler + public void onGamemodeChanged(PlayerGameModeChangeEvent event) + { + Bukkit.getScheduler().scheduleSyncDelayedTask(_clansManager.getPlugin(), new Runnable() { + public void run() + { + for (Player player : Bukkit.getOnlinePlayers()) + { + refresh(player); + } + } + }, 20); + } + + @EventHandler + public void onRankUpdate(OnlineRankUpdateEvent event) + { + Bukkit.getScheduler().scheduleSyncDelayedTask(_clansManager.getPlugin(), new Runnable() { + public void run() + { + for (Player player : Bukkit.getOnlinePlayers()) + { + refresh(player); + } + } + }, 20); + } + @EventHandler public void drawUpdate(UpdateEvent event) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java index 6cb5196a7..fb578a210 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/gameplay/Gameplay.java @@ -39,7 +39,6 @@ import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.event.player.PlayerFishEvent.State; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.weather.WeatherChangeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.java.JavaPlugin; @@ -47,7 +46,6 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; import mineplex.core.blockrestore.BlockRestore; 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.UtilGear; @@ -94,14 +92,14 @@ public class Gameplay extends MiniPlugin Bukkit.getPluginManager().registerEvents(new CustomCreatures(), plugin); } - @EventHandler(priority = EventPriority.LOWEST) - public void spawnDamage(CustomDamageEvent event) - { - if (_clansManager.getClanUtility().getClaim(event.GetDamageeEntity().getLocation()) != null && _clansManager.getClanUtility().getClaim(event.GetDamageeEntity().getLocation()).isSafe(event.GetDamageeEntity().getLocation())) - { - event.SetCancelled("Safe Zone"); - } - } +// @EventHandler(priority = EventPriority.LOWEST) +// public void spawnDamage(CustomDamageEvent event) +// { +// if (_clansManager.getClanUtility().getClaim(event.GetDamageeEntity().getLocation()) != null && _clansManager.getClanUtility().getClaim(event.GetDamageeEntity().getLocation()).isSafe(event.GetDamageeEntity().getLocation())) +// { +// event.SetCancelled("Safe Zone"); +// } +// } @EventHandler public void onPlayerFishing(PlayerFishEvent event) @@ -436,6 +434,11 @@ public class Gameplay extends MiniPlugin { final Block block = event.getBlock(); + if (_clansManager.getClanUtility().isSafe(block.getLocation())) + { + return; + } + if (!UtilItem.isLog(block.getType())) { return; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java index 50a251707..118c483ea 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java @@ -16,23 +16,24 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Monster; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerVelocityEvent; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; +import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; @@ -45,7 +46,6 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.items.generation.WeightSet; import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; -import mineplex.minecraft.game.classcombat.item.event.ItemTriggerEvent; import mineplex.minecraft.game.classcombat.item.event.WebTossEvent; import mineplex.minecraft.game.core.condition.Condition.ConditionType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -102,7 +102,7 @@ public class Spawn extends MiniPlugin { Block block = event.getToBlock(); - if (block.isLiquid() && isInSpawn(block.getLocation())) + if (block.isLiquid() && isSafe(block.getLocation())) { event.setCancelled(true); } @@ -115,7 +115,7 @@ public class Spawn extends MiniPlugin @EventHandler public void onWebToss(WebTossEvent event) { - if (isInSpawn(event.getLocation())) + if (isSafe(event.getLocation())) { event.setCancelled(true); } @@ -138,7 +138,7 @@ public class Spawn extends MiniPlugin @EventHandler public void onBlockBurn(BlockBurnEvent event) { - if (isInSpawn(event.getBlock().getLocation())) + if (isSafe(event.getBlock().getLocation())) { event.setCancelled(true); } @@ -153,7 +153,7 @@ public class Spawn extends MiniPlugin { if (event.getEntity() instanceof ItemFrame) { - if (isInSpawn(event.getEntity().getLocation())) + if (isSafe(event.getEntity().getLocation())) { event.setCancelled(true); } @@ -165,7 +165,7 @@ public class Spawn extends MiniPlugin { if (event.GetDamageeEntity() instanceof ItemFrame) { - if (isInSpawn(event.GetDamageeEntity().getLocation())) + if (isSafe(event.GetDamageeEntity().getLocation())) { event.SetCancelled("Item Frame Cancel"); } @@ -177,7 +177,7 @@ public class Spawn extends MiniPlugin { if (event.getEntity() instanceof ItemFrame) { - if (isInSpawn(event.getEntity().getLocation())) + if (isSafe(event.getEntity().getLocation())) { event.setCancelled(true); } @@ -192,9 +192,9 @@ public class Spawn extends MiniPlugin for (Player cur : UtilServer.getPlayers()) { - if (isInSpawn(cur.getLocation())) + if (isSafe(cur.getLocation())) { - long lastDamager = _clansManager.getCombatManager().Get(cur).GetLastCombat(); + long lastDamager = _clansManager.getCombatManager().Get(cur).GetLastCombatEngaged(); long duration = System.currentTimeMillis() - lastDamager; if (!UtilTime.elapsed(lastDamager, COMBAT_TAG_DURATION)) @@ -203,7 +203,7 @@ public class Spawn extends MiniPlugin + ChatColor.YELLOW + F.time(UtilTime.convertString(COMBAT_TAG_DURATION - duration, 1, TimeUnit.FIT)); UtilTextMiddle.display(null, message, 0, 20, 0, cur); - _clansManager.getCondition().Factory().Custom(COMBAT_TAG_NAME, cur, cur, ConditionType.CUSTOM, 1, 0, false, Material.FIRE, (byte)0, true); + _clansManager.getCondition().Factory().Custom(COMBAT_TAG_NAME, cur, cur, ConditionType.CUSTOM, 1.d, 0, false, Material.FIRE, (byte)0, true); playUnsafeParticles(cur); } else if (!UtilTime.elapsed(lastDamager, COMBAT_TAG_DURATION + 600)) @@ -214,6 +214,25 @@ public class Spawn extends MiniPlugin } } + @EventHandler + public void ignoreVelocity(PlayerVelocityEvent event) + { + if (_clansManager.getClanUtility().isSafe(event.getPlayer())) + { + event.setCancelled(true); + System.out.println("cancelled"); + } + } + + @EventHandler + public void onSkill(SkillTriggerEvent event) + { + if (!isSafe(event.GetPlayer().getLocation())) + { + _clansManager.getCombatManager().Get(event.GetPlayer()).SetLastCombatEngaged(System.currentTimeMillis()); + } + } + private void playUnsafeParticles(Player player) { UtilParticle.PlayParticle(UtilParticle.ParticleType.CRIT, player.getEyeLocation().add(0, 0.75d, 0), 0, 0, 0, 0.2f, 35, UtilParticle.ViewDist.NORMAL); @@ -283,7 +302,7 @@ public class Spawn extends MiniPlugin @EventHandler public void onEntitySpawn(CreatureSpawnEvent event) { - if (event.getSpawnReason() != CreatureSpawnEvent.SpawnReason.CUSTOM && isInSpawn(event.getLocation())) + if (event.getSpawnReason() != CreatureSpawnEvent.SpawnReason.CUSTOM && isSafe(event.getLocation())) { event.setCancelled(true); } @@ -325,7 +344,7 @@ public class Spawn extends MiniPlugin if (isInSpawn(monster)) { - int size = event.getDrops().size(); +// int size = event.getDrops().size(); event.getDrops().clear(); } } @@ -338,7 +357,7 @@ public class Spawn extends MiniPlugin @EventHandler public void onEntityTarget(EntityTargetEvent event) { - if (event.getTarget() != null && isInSpawn(event.getTarget().getLocation())) + if (event.getTarget() != null && isSafe(event.getTarget().getLocation())) { event.setCancelled(true); } @@ -353,7 +372,7 @@ public class Spawn extends MiniPlugin { if (event.getPlayer().getGameMode() == GameMode.CREATIVE) return; - if (isInSpawn(event.getBlock().getLocation()) || isInSpawn(event.getPlayer())) + if (isSafe(event.getBlock().getLocation()) || isInSpawn(event.getPlayer())) { event.setCancelled(true); } @@ -366,22 +385,37 @@ public class Spawn extends MiniPlugin @EventHandler public void onPlayerAttack(CustomDamageEvent event) { - Player defender = event.GetDamageePlayer(); + Player victim = event.GetDamageePlayer(); Player attacker = event.GetDamagerPlayer(true); // Get (potentially ranged) attacker - if (defender != null && !isCombatTagged(defender)) + // wat + if (victim == null) { - if (isInSpawn(defender)) + return; + } + + if (attacker == null) + { + return; + } + + if (!isCombatTagged(victim)) + { + if (isInSpawn(victim)) { event.SetCancelled("Safe Zone"); attemptNotify(attacker, "You cannot attack players who are in spawn!"); + return; } - else if (isInSpawn(attacker)) + else if (isInSpawn(attacker) && !isCombatTagged(attacker)) { event.SetCancelled("Safe Zone"); attemptNotify(attacker, "You cannot attack untagged players while in spawn!"); - } + return; + } } + + System.out.println(event.GetCancellers()); } public Location getSpawnLocation() @@ -401,7 +435,7 @@ public class Spawn extends MiniPlugin return _shops.elements(); } - public boolean isInSpawn(Location location) + public boolean isSafe(Location location) { return _clansManager.getClanUtility().isSafe(location); // Check to see if location is in a SafeZone chunk } @@ -414,9 +448,10 @@ public class Spawn extends MiniPlugin return xOffset <= radius && zOffset <= radius; } + // this is basically just isSafe(); public boolean isInSpawn(Entity entity) { - return entity != null && isInSpawn(entity.getLocation()); + return entity != null && isSafe(entity.getLocation()); } public static World getSpawnWorld() diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/Tutorial.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/Tutorial.java index 4d6ae6cc3..cc785d827 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/Tutorial.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/Tutorial.java @@ -46,6 +46,7 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.event.ClanJoinEvent; import mineplex.game.clans.clans.event.ClanTipEvent; +import mineplex.game.clans.clans.playtime.Playtime; import mineplex.game.clans.economy.GoldManager; import net.minecraft.server.v1_8_R3.PacketPlayOutChat; @@ -89,7 +90,9 @@ public abstract class Tutorial implements ScoreboardElement, Listener protected int _gemReward = -1; protected int _coinReward = -1; - public Tutorial(final GoldManager goldManager, final TaskManager taskManager, final ClansManager clansManager, final DonationManager donationManager, final TutorialManager manager, final PacketHandler packetHandler) + protected Playtime _playtime; + + public Tutorial(final GoldManager goldManager, final Playtime playtime, final TaskManager taskManager, final ClansManager clansManager, final DonationManager donationManager, final TutorialManager manager, final PacketHandler packetHandler) { _clansManager = clansManager; _goldManager = goldManager; @@ -99,6 +102,7 @@ public abstract class Tutorial implements ScoreboardElement, Listener _tasks = new ArrayList>(); _inTutorial = new LinkedHashMap<>(); _nameToTask = new LinkedHashMap<>(); + _playtime = playtime; _manager.getPluginManager().registerEvents(this, _manager.getPlugin()); } @@ -499,6 +503,12 @@ public abstract class Tutorial implements ScoreboardElement, Listener { public void run(Boolean data) { + if (_playtime.Get(player).FirstSession) + { + _playtime.Get(player).StartTime = System.currentTimeMillis(); + _playtime.Get(player).FirstSession = false; + } + cancelFor(player); } }, player, String.format(SKIPPED_TASK, _technicalName)); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialManager.java index 7468ff139..02bcc6899 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialManager.java @@ -11,7 +11,6 @@ import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilPlayer; import mineplex.core.donation.DonationManager; import mineplex.core.packethandler.IPacketHandler; import mineplex.core.packethandler.PacketHandler; @@ -20,12 +19,12 @@ import mineplex.core.preferences.PreferencesManager; import mineplex.core.task.TaskManager; import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.commands.RestartTutCommand; +import mineplex.game.clans.clans.playtime.Playtime; import mineplex.game.clans.economy.GoldManager; import mineplex.game.clans.tutorials.commands.DoSkipTutorialCommand; import mineplex.game.clans.tutorials.commands.SkipTutorialCommand; import mineplex.game.clans.tutorials.gettingstarted.TutorialGettingStarted; import net.md_5.bungee.api.ChatColor; -import net.minecraft.server.v1_8_R3.IChatBaseComponent; import net.minecraft.server.v1_8_R3.PacketPlayOutChat; public class TutorialManager extends MiniPlugin @@ -37,7 +36,7 @@ public class TutorialManager extends MiniPlugin private final TaskManager _taskManager; - public TutorialManager(final JavaPlugin plugin, final GoldManager goldManager, final TaskManager taskManager, final DonationManager donationManager, final PreferencesManager preferencesManager, final ClansManager clansManager, final PacketHandler packetHandler) + public TutorialManager(final JavaPlugin plugin, final Playtime playtime, final GoldManager goldManager, final TaskManager taskManager, final DonationManager donationManager, final PreferencesManager preferencesManager, final ClansManager clansManager, final PacketHandler packetHandler) { super("Tutorials", plugin); @@ -45,7 +44,7 @@ public class TutorialManager extends MiniPlugin _taskManager = taskManager; - _tutorials.put(TutorialGettingStarted.class, new TutorialGettingStarted(this, clansManager, donationManager, goldManager, taskManager, packetHandler)); +// _tutorials.put(TutorialGettingStarted.class, new TutorialGettingStarted(this, playtime, clansManager, donationManager, goldManager, taskManager, packetHandler)); packetHandler.addPacketHandler(new IPacketHandler() { public void handle(PacketInfo packet) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/gettingstarted/TutorialGettingStarted.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/gettingstarted/TutorialGettingStarted.java index fe2dde3df..c91e87436 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/gettingstarted/TutorialGettingStarted.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/gettingstarted/TutorialGettingStarted.java @@ -12,6 +12,7 @@ import mineplex.core.task.TaskManager; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.playtime.Playtime; import mineplex.game.clans.economy.GoldManager; import mineplex.game.clans.spawn.Spawn; import mineplex.game.clans.tutorials.Tutorial; @@ -19,9 +20,9 @@ import mineplex.game.clans.tutorials.TutorialManager; public class TutorialGettingStarted extends Tutorial { - public TutorialGettingStarted(final TutorialManager manager, final ClansManager clansManager, final DonationManager donationManager, final GoldManager goldManager, final TaskManager taskManager, final PacketHandler packetHandler) + public TutorialGettingStarted(final TutorialManager manager, final Playtime playtime, final ClansManager clansManager, final DonationManager donationManager, final GoldManager goldManager, final TaskManager taskManager, final PacketHandler packetHandler) { - super(goldManager, taskManager, clansManager, donationManager, manager, packetHandler); + super(goldManager, playtime, taskManager, clansManager, donationManager, manager, packetHandler); // addTask(new TaskWelcome(this, 1)); @@ -52,8 +53,14 @@ public class TutorialGettingStarted extends Tutorial { player.resetPlayerTime(); player.teleport(Spawn.getEastSpawn()); + + if (_playtime.Get(player).FirstSession) + { + _playtime.Get(player).StartTime = System.currentTimeMillis(); + _playtime.Get(player).FirstSession = false; + } } - + @Override protected void onFinishedDelay(Player player) { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index 2dd2823cb..52abd753e 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -35,7 +35,7 @@ import mineplex.core.disguise.DisguiseManager; import mineplex.core.disguise.disguises.DisguiseSlime; import mineplex.core.donation.DonationManager; import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.event.GadgetActivateEvent; +import mineplex.core.gadget.event.GadgetEnableEvent; import mineplex.core.gadget.event.GadgetCollideEntityEvent; import mineplex.core.gadget.types.GadgetType; import mineplex.core.giveaway.GiveawayManager; @@ -55,6 +55,7 @@ import mineplex.core.party.Party; import mineplex.core.party.PartyManager; import mineplex.core.personalServer.PersonalServerManager; import mineplex.core.pet.PetManager; +import mineplex.core.playerCount.PlayerCountManager; import mineplex.core.poll.PollManager; import mineplex.core.portal.Portal; import mineplex.core.preferences.PreferencesManager; @@ -157,6 +158,7 @@ public class HubManager extends MiniClientPlugin private PetManager _petManager; private PacketHandler _packetHandler; private PersonalServerManager _personalServerManager; + private PlayerCountManager _playerCountManager; // private HalloweenSpookinessManager _halloweenManager; // private TrickOrTreatManager _trickOrTreatManager; @@ -234,7 +236,7 @@ public class HubManager extends MiniClientPlugin _achievementManager.setGiveInterfaceItem(true); _packetHandler = packetHandler; - new NotificationManager(getPlugin(), clientManager, preferences); + new NotificationManager(getPlugin(), clientManager, _preferences); new BotSpamManager(plugin, clientManager, punish); ((CraftWorld)Bukkit.getWorlds().get(0)).getHandle().pvpMode = true; @@ -246,6 +248,8 @@ public class HubManager extends MiniClientPlugin // NotificationManager notificationManager = new NotificationManager(plugin, clientManager, donationManager); // new MailManager(_plugin, notificationManager); + _playerCountManager = new PlayerCountManager(plugin); + _songs = new ArrayList(); try @@ -449,8 +453,8 @@ public class HubManager extends MiniClientPlugin String playerName = player.getName(); // April Fools - if (AprilFoolsManager.Instance.isActive()) - playerName = AprilFoolsManager.Instance.getName(player); +// if (AprilFoolsManager.Instance.isActive()) +// playerName = AprilFoolsManager.Instance.getName(player); //Public Message event.setJoinMessage(null); @@ -693,6 +697,8 @@ public class HubManager extends MiniClientPlugin if (_scoreboardTick != 0) return; + int playerCount = _playerCountManager.getPlayerCount(); + for (Player player : UtilServer.getPlayers()) { //Dont Waste Time @@ -730,13 +736,9 @@ public class HubManager extends MiniClientPlugin //Players obj.getScore(C.cYellow + C.Bold + "Players").setScore(line--); - player.getScoreboard().resetScores(_lastPlayerCount + ""); + obj.getScore(playerCount + "").setScore(line--); - _lastPlayerCount++; - - obj.getScore(_lastPlayerCount + "").setScore(line--); - //Space obj.getScore(" ").setScore(line--); @@ -769,6 +771,8 @@ public class HubManager extends MiniClientPlugin obj.getScore("www.mineplex.com").setScore(line--); obj.getScore("----------------").setScore(line--); } + + _lastPlayerCount = playerCount; } @Override @@ -1007,7 +1011,7 @@ public class HubManager extends MiniClientPlugin } @EventHandler - public void disableMusicChristmas(GadgetActivateEvent event) + public void disableMusicChristmas(GadgetEnableEvent event) { if (event.getGadget() != null && event.getGadget().getGadgetType() == GadgetType.MusicDisc) { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/commands/DisguiseCommand.java b/Plugins/Mineplex.Hub/src/mineplex/hub/commands/DisguiseCommand.java index d76e0db30..bb078b3bb 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/commands/DisguiseCommand.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/commands/DisguiseCommand.java @@ -16,7 +16,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.disguise.disguises.DisguisePlayer; import mineplex.core.donation.Donor; -import mineplex.core.gadget.event.GadgetActivateEvent; +import mineplex.core.gadget.event.GadgetEnableEvent; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.treasure.event.TreasureStartEvent; @@ -111,6 +111,8 @@ public class DisguiseCommand extends CommandBase implements Listener return; } + final Rank rank = Plugin.GetClients().Get(caller).GetRank(); + Bukkit.getServer().getScheduler().runTaskAsynchronously(Plugin.getPlugin(), new Runnable() { @Override @@ -162,7 +164,7 @@ public class DisguiseCommand extends CommandBase implements Listener otherRank = other.GetRank(); } catch(NullPointerException exception) {} - if(otherRank.has(Rank.TWITCH)) + if(otherRank.has(Rank.TWITCH) && !rank.has(Rank.OWNER)) { UtilPlayer.message(caller, C.cRed + C.Bold + "You can't disguise as staff!"); return; @@ -176,7 +178,7 @@ public class DisguiseCommand extends CommandBase implements Listener changeName(caller, args[0]); - Plugin.GetGadget().RemoveItem(caller); + Plugin.GetGadget().removeGadgetType(caller, GadgetType.Item); UtilPlayer.message(caller, C.cGreen + C.Bold + "Disguise Active: " + ChatColor.RESET + args[0]); } catch(Exception e) @@ -285,7 +287,7 @@ public class DisguiseCommand extends CommandBase implements Listener } @EventHandler - public void gadget(GadgetActivateEvent event) + public void gadget(GadgetEnableEvent event) { if(!event.getGadget().GetName().equalsIgnoreCase("Coin Party Bomb") && event.getGadget().getGadgetType() != GadgetType.Morph) return; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/KothManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/KothManager.java index 373bb1e5d..d45cb3c8d 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/KothManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/KothManager.java @@ -22,9 +22,9 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.event.GadgetActivateEvent; -import mineplex.core.gadget.gadgets.ItemDuelingSword; -import mineplex.core.gadget.gadgets.OutfitTeam; +import mineplex.core.gadget.event.GadgetEnableEvent; +import mineplex.core.gadget.gadgets.item.ItemDuelingSword; +import mineplex.core.gadget.gadgets.outfit.OutfitTeam; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.mount.event.MountActivateEvent; @@ -214,7 +214,7 @@ public class KothManager extends MiniPlugin } @EventHandler - public void disableGadgets(GadgetActivateEvent event) + public void disableGadgets(GadgetEnableEvent event) { if (isKothMode(event.getPlayer())) event.setCancelled(true); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/NewsManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/NewsManager.java index 5287b1d76..424a582a1 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/NewsManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/NewsManager.java @@ -15,7 +15,7 @@ import mineplex.core.common.util.UtilTextTop; import mineplex.core.common.util.UtilTime; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseWither; -import mineplex.core.gadget.gadgets.MorphWither; +import mineplex.core.gadget.gadgets.morph.MorphWither; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.mount.Mount; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ParkourManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ParkourManager.java index 2b4b198d3..b5d86f0d6 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ParkourManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/ParkourManager.java @@ -36,7 +36,7 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.donation.DonationManager; -import mineplex.core.gadget.event.GadgetActivateEvent; +import mineplex.core.gadget.event.GadgetEnableEvent; import mineplex.core.gadget.event.GadgetBlockEvent; import mineplex.core.gadget.types.MusicGadget; import mineplex.core.mount.event.MountActivateEvent; @@ -138,7 +138,7 @@ public class ParkourManager extends MiniPlugin } @EventHandler - public void disableGadgets(GadgetActivateEvent event) + public void disableGadgets(GadgetEnableEvent event) { if (isParkourMode(event.getPlayer())) event.setCancelled(true); @@ -460,7 +460,7 @@ public class ParkourManager extends MiniPlugin } @EventHandler - public void musicDisable(GadgetActivateEvent event) + public void musicDisable(GadgetEnableEvent event) { if (event.getGadget() instanceof MusicGadget) { diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java index 6fbe6ccec..fd9d7e397 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/SoccerManager.java @@ -41,8 +41,8 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTextMiddle; import mineplex.core.common.util.UtilTime; import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.event.GadgetActivateEvent; -import mineplex.core.gadget.gadgets.OutfitTeam; +import mineplex.core.gadget.event.GadgetEnableEvent; +import mineplex.core.gadget.gadgets.outfit.OutfitTeam; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.mount.event.MountActivateEvent; @@ -490,7 +490,7 @@ public class SoccerManager extends MiniPlugin } @EventHandler - public void disableGadgets(GadgetActivateEvent event) + public void disableGadgets(GadgetEnableEvent event) { if (isSoccerMode(event.getPlayer())) event.setCancelled(true); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java index bf5b654ea..0fa87552c 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java @@ -28,7 +28,7 @@ import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilPlayer; import mineplex.core.event.StackerEvent; -import mineplex.core.gadget.gadgets.MorphBlock; +import mineplex.core.gadget.gadgets.morph.MorphBlock; import mineplex.core.gadget.types.GadgetType; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileManager; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java index 1eb43415a..6b1411ecd 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ui/ServerGameMenu.java @@ -3,14 +3,16 @@ package mineplex.hub.server.ui; import java.util.ArrayList; import java.util.List; -import org.bukkit.entity.Player; +import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.account.CoreClientManager; import mineplex.core.common.util.C; import mineplex.core.donation.DonationManager; import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.shop.page.ShopPageBase; import mineplex.hub.server.ServerManager; import mineplex.hub.server.ui.button.SelectBHButton; @@ -138,6 +140,56 @@ public class ServerGameMenu extends ShopPageBase setItem(22, _superSmashCycle.get(_ssmIndex)); + setItem(24, ItemStackFactory.Instance.CreateStack(Material.TNT.getId(), (byte) 0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Mine-Strike" + C.cGray + "Team Survival", new String[] + { + ChatColor.RESET + "", + ChatColor.RESET + "One team must defend two bomb sites from", + ChatColor.RESET + "the other team, who are trying to plant a bomb", + ChatColor.RESET + "and blow them up!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("MS") + ChatColor.RESET + " other players!", + })); + + setItem(26, ItemStackFactory.Instance.CreateStack(Material.BOOK_AND_QUILL.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Draw My Thing " + C.cGray + "Pictionary!", new String[] + { + ChatColor.RESET + "", + ChatColor.RESET + "Players take turns at drawing a random", + ChatColor.RESET + "word. Whoever guesses it within the time", + ChatColor.RESET + "limit gets some points!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("DMT") + ChatColor.RESET + " other players!", + })); + + setItem(36, ItemStackFactory.Instance.CreateStack(Material.BEACON.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Dominate " + C.cGray + "Team Game", new String[] + { + ChatColor.RESET + "", + ChatColor.RESET + "Customize one of five exciting champions", + ChatColor.RESET + "and battle with the opposing team for the", + ChatColor.RESET + "control points on the map.", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("DOM") + ChatColor.RESET + " other players!", + })); + + setItem(38, ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Team Deathmatch " + C.cGray + "Team Game", new String[] + { + ChatColor.RESET + "", + ChatColor.RESET + "Customize one of five exciting champions", + ChatColor.RESET + "and battle with the opposing team to the", + ChatColor.RESET + "last man standing.", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("TDM") + ChatColor.RESET + " other players!", + })); + + setItem(40, ItemStackFactory.Instance.CreateStack(Material.WOOD.getId(), (byte)0, 1, ChatColor.RESET + C.Bold + ChatColor.YELLOW + "Master Builders " + C.cGray + "Creative Build", new String[] + { + ChatColor.RESET + "", + ChatColor.RESET + "Players are given a Build Theme and ", + ChatColor.RESET + "must use blocks, monsters and more", + ChatColor.RESET + "to create a masterpiece!", + ChatColor.RESET + "", + ChatColor.RESET + "Join " + ChatColor.GREEN + getPlugin().getGroupTagPlayerCount("BLD") + ChatColor.RESET + " other players!", + })); + setItem(24, new ItemBuilder(Material.TNT) .setTitle(C.Reset + C.Bold + C.cYellow + "Mine-Strike " + C.cGray + "Team Survival").addLore(new String[] { @@ -196,7 +248,7 @@ public class ServerGameMenu extends ShopPageBase setItem(42, _minigameCycle.get(_minigameIndex)); setItem(44, new ItemBuilder(Material.SKULL_ITEM, 1, (byte) 3) - .addLore(C.Reset + C.Bold + C.cYellow + "Player Servers " + C.cGray + "Player Hosted Games").addLore(new String[] + .setTitle(C.Reset + C.Bold + C.cYellow + "Player Servers " + C.cGray + "Player Hosted Games").addLore(new String[] { C.Reset + "", C.Reset + "Join your friends in their own ", diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java index 752b71fa6..879fc3c30 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java @@ -28,6 +28,7 @@ public class CombatLog protected CombatComponent LastDamager; protected long _lastDamaged; protected long _lastCombat; + protected long _lastCombatEngaged; public CombatLog(Player player, long expireTime) { @@ -185,6 +186,16 @@ public class CombatLog return _lastCombat; } + public long GetLastCombatEngaged() + { + return _lastCombatEngaged; + } + + public void SetLastCombatEngaged(long time) + { + _lastCombatEngaged = time; + } + public void SetLastCombat(long time) { _lastCombat = time; diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java index a255415e5..b42ae087d 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java @@ -3,8 +3,6 @@ package mineplex.minecraft.game.core.combat; import java.util.HashSet; import java.util.Iterator; -import net.minecraft.server.v1_8_R3.ItemStack; - import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; import org.bukkit.entity.Arrow; import org.bukkit.entity.Fireball; @@ -18,8 +16,6 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.account.event.ClientUnloadEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.F; @@ -30,9 +26,12 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.event.ClearCombatEvent; import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import net.minecraft.server.v1_8_R3.ItemStack; public class CombatManager extends MiniPlugin { @@ -201,7 +200,7 @@ public class CombatManager extends MiniPlugin // Not Player > No Log if (event.GetDamageePlayer() == null) return; - + // Damager is ENTITY if (event.GetDamagerEntity(true) != null) { @@ -256,8 +255,12 @@ public class CombatManager extends MiniPlugin } if (event.GetDamagerEntity(true) instanceof Player) + { Get((Player)event.GetDamagerEntity(true)).SetLastCombat(System.currentTimeMillis()); - + Get((Player)event.GetDamagerEntity(true)).SetLastCombatEngaged(System.currentTimeMillis()); + Get(event.GetDamageePlayer()).SetLastCombatEngaged(System.currentTimeMillis()); + } + Get(event.GetDamageePlayer()).Attacked( UtilEnt.getName(event.GetDamagerEntity(true)), (int) event.GetDamage(), event.GetDamagerEntity(true), diff --git a/Plugins/Mineplex.PlayerCache/.project b/Plugins/Mineplex.PlayerCache/.project new file mode 100644 index 000000000..5321c2157 --- /dev/null +++ b/Plugins/Mineplex.PlayerCache/.project @@ -0,0 +1,17 @@ + + + Mineplex.Cache + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 016289a6f..7e9d4a156 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -1346,7 +1346,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation if (!player.isOnline()) return; - PetReward reward = new PetReward(_petManager, _inventoryManager, _donationManager, pet, pet, type, RewardRarity.OTHER, 0); + PetReward reward = new PetReward(_petManager, _inventoryManager, _donationManager, pet, pet, type, RewardRarity.OTHER, 0, 0); if (reward.canGiveReward(player)) reward.giveReward(null, player, new Callback() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/DisguiseCommand.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/DisguiseCommand.java index c35fc9ab5..7111ae370 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/DisguiseCommand.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/command/DisguiseCommand.java @@ -15,7 +15,7 @@ import mineplex.core.common.util.UUIDFetcher; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.disguise.disguises.DisguisePlayer; -import mineplex.core.gadget.event.GadgetActivateEvent; +import mineplex.core.gadget.event.GadgetEnableEvent; import mineplex.core.gadget.types.GadgetType; import mineplex.core.treasure.event.TreasureStartEvent; import mineplex.core.updater.UpdateType; @@ -169,7 +169,7 @@ public class DisguiseCommand extends CommandBase implements Liste changeName(caller, args[0], true); - Plugin.getCosmeticManager().getGadgetManager().RemoveItem(caller); + Plugin.getCosmeticManager().getGadgetManager().removeGadgetType(caller, GadgetType.Item); Bukkit.broadcastMessage(ChatColor.DARK_GRAY + "Quit> " + ChatColor.GRAY + _disguisedPlayersNames.get(caller)); UtilPlayer.message(caller, C.cGreen + C.Bold + "Disguise Active: " + ChatColor.RESET + args[0]); @@ -291,7 +291,7 @@ public class DisguiseCommand extends CommandBase implements Liste } @EventHandler - public void gadget(GadgetActivateEvent event) + public void gadget(GadgetEnableEvent event) { if(!event.getGadget().GetName().equalsIgnoreCase("Coin Party Bomb") && event.getGadget().getGadgetType() != GadgetType.Morph) return; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 832053604..1d6947f06 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -1,6 +1,5 @@ package nautilus.game.arcade.game; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -36,7 +35,6 @@ import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingPlaceEvent; -import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.world.WorldLoadEvent; @@ -54,8 +52,8 @@ import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTabTitle; -import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.common.util.UtilTime; import mineplex.core.disguise.disguises.DisguisePlayer; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.packethandler.IPacketHandler; @@ -72,18 +70,24 @@ import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.events.PlayerGameRespawnEvent; import nautilus.game.arcade.events.PlayerStateChangeEvent; import nautilus.game.arcade.game.GameTeam.PlayerState; -import nautilus.game.arcade.gametutorial.GameTutorial; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.managers.GameLobbyManager; import nautilus.game.arcade.scoreboard.GameScoreboard; -import nautilus.game.arcade.stats.*; +import nautilus.game.arcade.stats.AssistsStatTracker; +import nautilus.game.arcade.stats.DamageDealtStatTracker; +import nautilus.game.arcade.stats.DamageTakenStatTracker; +import nautilus.game.arcade.stats.DeathsStatTracker; +import nautilus.game.arcade.stats.ExperienceStatTracker; +import nautilus.game.arcade.stats.GamesPlayedStatTracker; +import nautilus.game.arcade.stats.KillsStatTracker; +import nautilus.game.arcade.stats.LoseStatTracker; +import nautilus.game.arcade.stats.StatTracker; +import nautilus.game.arcade.stats.WinStatTracker; import nautilus.game.arcade.world.WorldData; import net.minecraft.server.v1_8_R3.EntityItem; import net.minecraft.server.v1_8_R3.PacketPlayInUseEntity; -import net.minecraft.server.v1_8_R3.PacketPlayOutScoreboardTeam; -import net.minecraft.server.v1_8_R3.ScoreboardTeam; import net.minecraft.server.v1_8_R3.WorldServer; public abstract class Game implements Listener @@ -124,6 +128,7 @@ public abstract class Game implements Listener private boolean _countdownForce = false; private String _customWinLine = ""; + private NautHashMap _customWinMessages = new NautHashMap(); // Kits private Kit[] _kits; @@ -492,6 +497,11 @@ public abstract class Game implements Listener { _customWinLine = line; } + + public void SetCustomWinMessage(Player player, String message) + { + _customWinMessages.put(player, message); + } public GameScoreboard GetScoreboard() { @@ -1156,7 +1166,20 @@ public abstract class Game implements Listener UtilPlayer.message(player, "Nobody won the game!"); } - UtilPlayer.message(player, _customWinLine); + if (_customWinMessages.containsKey(player)) + { + if (!_customWinLine.trim().equalsIgnoreCase("")) + { + UtilPlayer.message(player, _customWinLine); + } + + UtilPlayer.message(player, _customWinMessages.get(player)); + } + else + { + UtilPlayer.message(player, _customWinLine); + } + UtilPlayer.message(player, ""); UtilPlayer.message(player, "§aMap - §f§l" + WorldData.MapName + C.cGray + " created by " + "§f§l" + WorldData.MapAuthor); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/SoloGame.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/SoloGame.java index 7384a3cc6..3d5ca5cf0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/SoloGame.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/SoloGame.java @@ -1,8 +1,9 @@ package nautilus.game.arcade.game; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -13,8 +14,6 @@ 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.events.PlayerStateChangeEvent; -import nautilus.game.arcade.game.GameTeam.PlayerState; import nautilus.game.arcade.kit.Kit; public abstract class SoloGame extends Game @@ -36,6 +35,11 @@ public abstract class SoloGame extends Game _players.SetColor(ChatColor.YELLOW); _players.SetName("Players"); } + + public GameTeam getPlayersTeam() + { + return _players; + } @Override public void EndCheck() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java index a508ff1cd..23b3ec1b1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Christmas.java @@ -1,6 +1,5 @@ package nautilus.game.arcade.game.games.christmas; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; @@ -8,9 +7,8 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_8_R3.CraftServer; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.EntityType; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHorse; import org.bukkit.entity.Player; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; @@ -18,13 +16,16 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; import org.bukkit.event.block.BlockFadeEvent; import org.bukkit.event.entity.EntityCombustEvent; -import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.util.Vector; import mineplex.core.common.util.C; +import mineplex.core.common.util.Callback; +import mineplex.core.common.util.F; import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; @@ -34,7 +35,6 @@ import mineplex.core.common.util.UtilTime; import mineplex.core.packethandler.IPacketHandler; import mineplex.core.packethandler.PacketInfo; import mineplex.core.recharge.Recharge; -import mineplex.core.reward.rewards.PetReward; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -45,14 +45,22 @@ import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.SoloGame; import nautilus.game.arcade.game.games.christmas.kits.KitPlayer; -import nautilus.game.arcade.game.games.christmas.parts.*; +import nautilus.game.arcade.game.games.christmas.parts.Part; +import nautilus.game.arcade.game.games.christmas.parts.Part1; +import nautilus.game.arcade.game.games.christmas.parts.Part2; +import nautilus.game.arcade.game.games.christmas.parts.Part3; +import nautilus.game.arcade.game.games.christmas.parts.Part4; +import nautilus.game.arcade.game.games.christmas.parts.Part5; import nautilus.game.arcade.kit.Kit; +import net.minecraft.server.v1_8_R3.PacketPlayOutAttachEntity; import net.minecraft.server.v1_8_R3.PacketPlayOutEntityDestroy; import net.minecraft.server.v1_8_R3.PacketPlayOutNamedSoundEffect; import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving; public class Christmas extends SoloGame { + private GameTeam _badGuys; + private Sleigh _sleigh; private Location _sleighSpawn; @@ -201,7 +209,7 @@ public class Christmas extends SoloGame for (Location loc : WorldData.GetCustomLocs("129")) { _barrier.add(loc.getBlock().getLocation()); - MapUtil.QuickChangeBlockAt(loc, 65, (byte)3); + MapUtil.QuickChangeBlockAt(loc, 166, (byte)0); } //Parts @@ -250,7 +258,8 @@ public class Christmas extends SoloGame if (event.GetState() != GameState.Live) return; - GetTeamList().add(new GameTeam(this, "Christmas Thieves", ChatColor.RED, WorldData.GetDataLocs("RED"))); + _badGuys = new GameTeam(this, "Christmas Thieves", ChatColor.RED, WorldData.GetDataLocs("RED")); + AddTeam(_badGuys); } @EventHandler @@ -366,7 +375,7 @@ public class Christmas extends SoloGame for (Location loc : _barrier) { - if (UtilMath.offset(GetSleigh().GetLocation(), loc) > 15) + if (UtilMath.offset(GetSleigh().GetLocation(), loc) > 20) continue; breakAt = loc; @@ -458,14 +467,42 @@ public class Christmas extends SoloGame for (Player player : GetPlayers(false)) { - Manager.rewardPet(player, "Christmas Elf", EntityType.VILLAGER); + if (Manager.IsRewardItems()) + { + if (!player.isOnline()) + continue; + + if (Manager.GetTaskManager().hasCompletedTask(player, "CC Reward 2015")) + { + SetCustomWinMessage(player, "You already earned your reward"); + } + else + { + SetCustomWinMessage(player, "You earned " + C.cYellow + "2x Winter Holiday Treasure"); + + Manager.GetTaskManager().completedTask(new Callback() + { + @Override + public void run(Boolean data) + { + if (data) + { + Manager.getInventoryManager().addItemToInventory(player, "Winter Chest", 2); + } + else + { + UtilPlayer.message(player, F.main("Inventory", "An error occured while giving you " + C.cRed + "2x Winter Holiday Treasure" + C.cGray + ".")); + } + } + }, player, "CC Reward 2015"); + } + } Manager.GetGame().AddGems(player, 30, "Slaying the Pumpkin King", false, false); Manager.GetGame().AddGems(player, 10, "Participation", false, false); } - SetCustomWinLine("You earned Christmas Elf Pet!"); - AnnounceEnd(this.GetTeamList().get(0)); + AnnounceEnd(getPlayersTeam()); SetState(GameState.End); } else if (GetPlayers(true).size() == 0) @@ -476,7 +513,7 @@ public class Christmas extends SoloGame } SetCustomWinLine("You all died..."); - AnnounceEnd(this.GetTeamList().get(1)); + AnnounceEnd(_badGuys); SetState(GameState.End); } else if (UtilTime.elapsed(GetStateTime(), _gameTime)) @@ -487,7 +524,7 @@ public class Christmas extends SoloGame } SetCustomWinLine("You did not save Christmas in time."); - AnnounceEnd(this.GetTeamList().get(1)); + AnnounceEnd(_badGuys); SetState(GameState.End); } @@ -504,7 +541,7 @@ public class Christmas extends SoloGame } SetCustomWinLine("Santa Claus was killed by the Giant!"); - AnnounceEnd(this.GetTeamList().get(1)); + AnnounceEnd(_badGuys); SetState(GameState.End); } @@ -572,30 +609,60 @@ public class Christmas extends SoloGame return; if (!IsLive()) + { + Scoreboard.Reset(); + + String line = ""; + for (int i = 0 ; i < 20 ; i++) + line += ((i % 2 == 0 ? C.cRed : C.cDGreen) + "█"); + + Scoreboard.WriteBlank(); + Scoreboard.Write(line); + + Scoreboard.WriteBlank(); + + Scoreboard.Write(C.cWhiteB + "May your winter"); + Scoreboard.Write(C.cWhiteB + "be filled with"); + Scoreboard.Write(C.cYellowB + "joy" + C.cWhiteB + " and " + C.cYellowB + "cheer."); + + Scoreboard.WriteBlank(); + + Scoreboard.Write(C.cAquaB + "Happy Holidays!"); + + Scoreboard.WriteBlank(); + + Scoreboard.Write(C.cWhiteB + "- Your friends at"); + Scoreboard.Write(C.cGoldB + "MINEPLEX"); + + Scoreboard.WriteBlank(); + Scoreboard.Write(line); + + Scoreboard.Draw(); return; + } //Wipe Last Scoreboard.Reset(); //Rounds Scoreboard.WriteBlank(); - Scoreboard.Write(C.cWhite + "Challenge:"); - Scoreboard.Write(C.cYellow + (5 - _parts.size()) + " of " + 5); + Scoreboard.Write(C.cGoldB + "Challenge"); + Scoreboard.Write(C.cWhite + (5 - _parts.size()) + " of " + 5); //Presents Scoreboard.WriteBlank(); - Scoreboard.Write(C.cWhite + "Presents:"); - Scoreboard.Write(C.cYellow + GetSleigh().GetPresents().size() + " of " + 10); + Scoreboard.Write(C.cGreenB + "Presents"); + Scoreboard.Write(C.cWhite + GetSleigh().GetPresents().size() + " of " + 10); //Players Scoreboard.WriteBlank(); - Scoreboard.Write(C.cWhite + "Players:"); - Scoreboard.Write(C.cYellow + GetPlayers(true).size()); + Scoreboard.Write(C.cYellowB + "Players"); + Scoreboard.Write(C.cWhite + GetPlayers(true).size()); //Time Scoreboard.WriteBlank(); - Scoreboard.Write(C.cWhite + "Time Left:"); - Scoreboard.Write(C.cYellow + UtilTime.MakeStr(_gameTime - (System.currentTimeMillis() - GetStateTime()))); + Scoreboard.Write(C.cYellowB + "Time Left"); + Scoreboard.Write(C.cWhite + UtilTime.MakeStr(_gameTime - (System.currentTimeMillis() - GetStateTime()))); Scoreboard.Draw(); } @@ -679,4 +746,37 @@ public class Christmas extends SoloGame UtilPlayer.sendPacket(player, packet); } } + + @EventHandler + public void updateReigns(UpdateEvent event) + { + if (!InProgress()) + return; + + if (event.getType() != UpdateType.FASTER) + return; + + if (_sleigh == null) + return; + + if (_sleigh.getSanta() == null) + return; + + for (SleighHorse horse : _sleigh.getHorses()) + { + if (horse.Ent == null || !horse.Ent.isValid()) + continue; + + PacketPlayOutAttachEntity packet = new PacketPlayOutAttachEntity(1, ((CraftHorse) horse.Ent).getHandle(), (((CraftEntity) _sleigh.getSanta()).getHandle())); + + for (Player player : UtilServer.getPlayers()) + UtilPlayer.sendPacket(player, packet); + } + } + + @EventHandler + public void preventStand(PlayerInteractAtEntityEvent event) + { + event.setCancelled(true); + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java index c4c5e0950..26ef62540 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/Sleigh.java @@ -2,30 +2,28 @@ package nautilus.game.arcade.game.games.christmas; import java.util.ArrayList; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Effect; +import org.bukkit.FireworkEffect; +import org.bukkit.FireworkEffect.Type; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Chicken; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + import mineplex.core.common.util.C; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilFirework; -import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.recharge.Recharge; import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.game.games.christmas.parts.Part; - -import org.bukkit.ChatColor; -import org.bukkit.Color; -import org.bukkit.Effect; -import org.bukkit.FireworkEffect; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.FireworkEffect.Type; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Chicken; -import org.bukkit.entity.Entity; -import org.bukkit.entity.FallingBlock; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; public class Sleigh { @@ -41,6 +39,8 @@ public class Sleigh private ArrayList PresentsCollected = new ArrayList();; private Location Target; + + private Entity Santa; public void setupSleigh(Christmas host, Location loc) { @@ -52,24 +52,25 @@ public class Sleigh CentralEntity = loc.getWorld().spawn(loc, Chicken.class); UtilEnt.Vegetate(CentralEntity, true); - UtilEnt.ghost(CentralEntity, true, true); + UtilEnt.ghost(CentralEntity, true, false); + Host.Manager.GetCondition().Factory().Invisible("Sleigh", (LivingEntity) CentralEntity, null, Double.MAX_VALUE, 3, false, false, true); //Presents PresentSlots = new ArrayList(); - PresentSlots.add(new SleighPart(2, 0, 0, loc.clone(), -1, -2)); - PresentSlots.add(new SleighPart(2, 0, 0, loc.clone(), 0, -2)); - PresentSlots.add(new SleighPart(2, 0, 0, loc.clone(), 1, -2)); - PresentSlots.add(new SleighPart(2, 0, 0, loc.clone(), -1, -1)); - PresentSlots.add(new SleighPart(2, 0, 0, loc.clone(), 0, -1)); - PresentSlots.add(new SleighPart(2, 0, 0, loc.clone(), 1, -1)); + PresentSlots.add(new SleighPart(this, 2, 0, 0, loc.clone(), -1, -2)); + PresentSlots.add(new SleighPart(this, 2, 0, 0, loc.clone(), 0, -2)); + PresentSlots.add(new SleighPart(this, 2, 0, 0, loc.clone(), 1, -2)); + PresentSlots.add(new SleighPart(this, 2, 0, 0, loc.clone(), -1, -1)); + PresentSlots.add(new SleighPart(this, 2, 0, 0, loc.clone(), 0, -1)); + PresentSlots.add(new SleighPart(this, 2, 0, 0, loc.clone(), 1, -1)); - PresentSlots.add(new SleighPart(6, 0, 0, loc.clone(), -1, -2)); - PresentSlots.add(new SleighPart(6, 0, 0, loc.clone(), 0, -2)); - PresentSlots.add(new SleighPart(6, 0, 0, loc.clone(), 1, -2)); - PresentSlots.add(new SleighPart(6, 0, 0, loc.clone(), -1, -1)); - PresentSlots.add(new SleighPart(6, 0, 0, loc.clone(), 0, -1)); - PresentSlots.add(new SleighPart(6, 0, 0, loc.clone(), 1, -1)); + PresentSlots.add(new SleighPart(this, 6, 0, 0, loc.clone(), -1, -2)); + PresentSlots.add(new SleighPart(this, 6, 0, 0, loc.clone(), 0, -2)); + PresentSlots.add(new SleighPart(this, 6, 0, 0, loc.clone(), 1, -2)); + PresentSlots.add(new SleighPart(this, 6, 0, 0, loc.clone(), -1, -1)); + PresentSlots.add(new SleighPart(this, 6, 0, 0, loc.clone(), 0, -1)); + PresentSlots.add(new SleighPart(this, 6, 0, 0, loc.clone(), 1, -1)); //Sleigh SleighEnts = new ArrayList(); @@ -77,65 +78,71 @@ public class Sleigh for (SleighPart part : PresentSlots) SleighEnts.add(part); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 0, -3)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), -1, -3)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), -2, -3)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 1, -3)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 2, -3)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 0, -3)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), -1, -3)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), -2, -3)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 1, -3)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 2, -3)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), -2, -2)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), -1, -2)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), 0, -2)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), 1, -2)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 2, -2)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), -2, -2)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), -1, -2)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), 0, -2)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), 1, -2)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 2, -2)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), -2, -1)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), -1, -1)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), 0, -1)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), 1, -1)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 2, -1)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), -2, -1)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), -1, -1)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), 0, -1)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), 1, -1)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 2, -1)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), -2, 0)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), -1, 0)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 0, 0)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 1, 0)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 2, 0)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), -2, 0)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), -1, 0)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 0, 0)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 1, 0)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 2, 0)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), -2, 1)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), -1, 1)); - SleighEnts.add(new SleighPart(0, 159, 15, loc.clone(), 0, 1)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), 1, 1)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 2, 1)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), -2, 1)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), -1, 1)); + SleighEnts.add(new SleighPart(this, 0, 159, 15, loc.clone(), 0, 1)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), 1, 1)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 2, 1)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), -2, 2)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), -1, 2)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), 0, 2)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), 1, 2)); - SleighEnts.add(new SleighPart(0, 44, 7, loc.clone(), 2, 2)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), -2, 2)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), -1, 2)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), 0, 2)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), 1, 2)); + SleighEnts.add(new SleighPart(this, 0, 44, 7, loc.clone(), 2, 2)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), -2, 3)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), -1, 3)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 0, 3)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 1, 3)); - SleighEnts.add(new SleighPart(0, 159, 14, loc.clone(), 2, 3)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), -2, 3)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), -1, 3)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 0, 3)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 1, 3)); + SleighEnts.add(new SleighPart(this, 0, 159, 14, loc.clone(), 2, 3)); //Santa - SleighPart santa = new SleighPart(3, 0, 0, loc.clone(), 0, 1); - santa.AddSanta(); + SleighPart santa = new SleighPart(this, 3, 0, 0, loc.clone(), 0, 1); + Santa = santa.AddSanta(); SleighEnts.add(santa); - SleighHorses.add(new SleighHorse(loc.clone(), -1.5, 8)); - SleighHorses.add(new SleighHorse(loc.clone(), 1.5, 8)); + SleighHorses.add(new SleighHorse(loc.clone(), "Dasher", -1.5, 8)); + SleighHorses.add(new SleighHorse(loc.clone(), "Dancer", 1.5, 8)); + + SleighHorses.add(new SleighHorse(loc.clone(), "Prancer", -1.5, 11)); + SleighHorses.add(new SleighHorse(loc.clone(), "Vixen", 1.5, 11)); + + SleighHorses.add(new SleighHorse(loc.clone(), "Comet", -1.5, 14)); + SleighHorses.add(new SleighHorse(loc.clone(), "Cupid", 1.5, 14)); - SleighHorses.add(new SleighHorse(loc.clone(), -1.5, 11)); - SleighHorses.add(new SleighHorse(loc.clone(), 1.5, 11)); + SleighHorses.add(new SleighHorse(loc.clone(), "Donner", -1.5, 17)); + SleighHorses.add(new SleighHorse(loc.clone(), "Blitzen", 1.5, 17)); for (SleighHorse horse : SleighHorses) horse.spawnHorse(); - for (SleighHorse horse : SleighHorses) - UtilEnt.Leash(horse.Ent, santa.GetTop(), false, false); +// for (SleighHorse horse : SleighHorses) +// UtilEnt.Leash(horse.Ent, santa.GetTop(), true, false); } public Location GetLocation() @@ -157,6 +164,8 @@ public class Sleigh Move(CentralEntity, Target, 1); + Santa.setTicksLived(1); + //Move Sleigh for (SleighPart part : SleighEnts) { @@ -184,24 +193,6 @@ public class Sleigh { for (Player player : Host.GetPlayers(true)) { - if (!Recharge.Instance.usable(player, "Sleigh Bump")) - continue; - - for (SleighPart part : SleighEnts) - if (UtilMath.offset(player, part.Ent) < 1) - { - UtilAction.velocity(player, UtilAlg.getTrajectory2d(CentralEntity, player), 0.4, true, 0.2, 0, 0, true); - Recharge.Instance.useForce(player, "Sleigh Bump", 400); - } - - - for (SleighHorse part : SleighHorses) - if (UtilMath.offset(player, part.Ent) < 1) - { - UtilAction.velocity(player, UtilAlg.getTrajectory2d(CentralEntity, player), 0.4, true, 0.2, 0, 0, true); - Recharge.Instance.useForce(player, "Sleigh Bump", 400); - } - if (player.getLocation().getZ() < CentralEntity.getLocation().getZ() - 24) { player.damage(1); @@ -211,6 +202,44 @@ public class Sleigh Recharge.Instance.useForce(player, "Sleigh Bump", 400); } } + + for (SleighPart part : SleighEnts) + { + for (Entity ent : UtilEnt.getInRadius(part.Ent.getLocation(), 1).keySet()) + { + if (isPart(ent)) + continue; + + if (ent instanceof Player) + { + if (!Recharge.Instance.usable((Player) ent, "Sleigh Bump")) + continue; + + Recharge.Instance.useForce((Player) ent, "Sleigh Bump", 400); + } + + UtilAction.velocity(ent, UtilAlg.getTrajectory2d(CentralEntity, ent), 0.4, true, 0.2, 0, 0, true); + } + } + + for (SleighHorse part : SleighHorses) + { + for (Entity ent : UtilEnt.getInRadius(part.Ent.getLocation(), 1).keySet()) + { + if (isPart(ent)) + continue; + + if (ent instanceof Player) + { + if (!Recharge.Instance.usable((Player) ent, "Sleigh Bump")) + continue; + + Recharge.Instance.useForce((Player) ent, "Sleigh Bump", 400); + } + + UtilAction.velocity(ent, UtilAlg.getTrajectory2d(CentralEntity, ent), 0.4, true, 0.2, 0, 0, true); + } + } } public boolean HasPresent(Location loc) @@ -222,6 +251,7 @@ public class Sleigh { PresentsCollected.add(loc); loc.getBlock().setType(Material.AIR); + loc.getBlock().getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN).setType(Material.IRON_BLOCK); loc.getBlock().getRelative(BlockFace.DOWN).setType(Material.GLASS); UtilFirework.launchFirework(loc.clone().add(0.5, 0.5, 0.5), FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BALL).trail(true).build(), new Vector(0,1,0), 0); @@ -267,4 +297,35 @@ public class Sleigh { return SleighHorses; } + + public Entity getSanta() + { + return Santa; + } + + public boolean isPart(Entity ent) + { + if (ent == null) + return false; + + if (ent == CentralEntity) + return true; + + if (ent == Santa) + return true; + + for (SleighPart part : SleighEnts) + if (part.Block == ent || part.Ent == ent || (ent instanceof LivingEntity && part.HasEntity((LivingEntity) ent))) + return true; + + for (SleighHorse horse : SleighHorses) + if (horse.Ent == ent || (ent instanceof LivingEntity && horse.HasEntity((LivingEntity) ent))) + return true; + + for (SleighPart part : PresentSlots) + if (part.Block == ent || part.Ent == ent || (ent instanceof LivingEntity && part.HasEntity((LivingEntity) ent))) + return true; + + return false; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java index 10a772184..0f0e5ed2f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighHorse.java @@ -2,6 +2,19 @@ package nautilus.game.arcade.game.games.christmas; import java.util.HashSet; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; +import org.bukkit.entity.Horse; +import org.bukkit.entity.Horse.Color; +import org.bukkit.entity.Horse.Style; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.C; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; import net.minecraft.server.v1_8_R3.DataWatcher; @@ -14,19 +27,6 @@ import net.minecraft.server.v1_8_R3.PacketPlayOutEntityTeleport; import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving; import net.minecraft.server.v1_8_R3.Vector3f; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; -import org.bukkit.entity.Horse; -import org.bukkit.entity.Player; -import org.bukkit.entity.Horse.Color; -import org.bukkit.entity.Horse.Style; -import org.bukkit.entity.LivingEntity; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.Vector; - public class SleighHorse { private Location _lastFacing; @@ -40,9 +40,11 @@ public class SleighHorse public int horseId; public double OffsetX; public double OffsetZ; + public String Name; - public SleighHorse(Location loc, double x, double z) + public SleighHorse(Location loc, String name, double x, double z) { + Name = name; OffsetX = x; OffsetZ = z; _lastFacing = loc.add(x, 0.5, z); @@ -182,6 +184,10 @@ public class SleighHorse Ent = _lastFacing.getWorld().spawn(_lastFacing.subtract(0, 0.5, 0), Horse.class); UtilEnt.Vegetate(Ent); UtilEnt.ghost(Ent, true, false); + Ent.setRemoveWhenFarAway(false); + + Ent.setCustomName(C.cWhiteB + Name); + Ent.setCustomNameVisible(true); Ent.setStyle(Style.BLACK_DOTS); Ent.setColor(Color.BROWN); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java index 2c0406f27..877d36049 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/SleighPart.java @@ -1,9 +1,5 @@ package nautilus.game.arcade.game.games.christmas; -import mineplex.core.common.util.C; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilMath; - import org.bukkit.Color; import org.bukkit.Location; import org.bukkit.Material; @@ -16,6 +12,10 @@ import org.bukkit.entity.Skeleton; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.LeatherArmorMeta; +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; + public class SleighPart { public Chicken Ent; @@ -23,38 +23,32 @@ public class SleighPart public double OffsetX; public double OffsetZ; - public SleighPart(int rise, int id, int data, Location loc, double x, double z) + public int Rise; + public int Id; + public int Data; + public Location Location; + + public SleighPart(Sleigh sleigh, int rise, int id, int data, Location loc, double x, double z) { //Base Ent = loc.getWorld().spawn(loc.add(x, 0, z), Chicken.class); Ent.setBaby(); Ent.setAgeLock(true); + Ent.setRemoveWhenFarAway(false); + UtilEnt.Vegetate(Ent, true); - UtilEnt.ghost(Ent, true, true); - + UtilEnt.ghost(Ent, true, false); + sleigh.Host.Manager.GetCondition().Factory().Invisible("Sleigh", Ent, null, Double.MAX_VALUE, 3, false, false, true); + //Height - Chicken top = Ent; - for (int i=0 ; i _heightComparator = new Comparator() + { + @Override + public int compare(Block o1, Block o2) + { + if (o1.getLocation().getBlockY() == o2.getLocation().getBlockY()) + return 0; + + return o1.getLocation().getBlockY() > o2.getLocation().getBlockY() ? 1 : -1; + } + }; + public IceMaze(Christmas host, ArrayList mazeCorners, ArrayList mazeExits, Location[] presents) { Host = host; @@ -71,6 +84,8 @@ public class IceMaze if (_blocks.isEmpty()) return; + Collections.sort(_blocks, _heightComparator); + for (int i=0 ; i<20 ; i++) { if (_blocks.isEmpty()) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanBoss.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanBoss.java index cae20e196..82b334134 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanBoss.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanBoss.java @@ -1,17 +1,15 @@ package nautilus.game.arcade.game.games.christmas.content; import java.util.ArrayList; +import java.util.List; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature; -import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; import org.bukkit.entity.IronGolem; import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.IronGolem; import org.bukkit.entity.Player; -import org.bukkit.entity.Slime; import org.bukkit.entity.Snowball; import org.bukkit.entity.Snowman; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; @@ -51,8 +49,8 @@ public class SnowmanBoss _minions.add(new SnowmanMinion(_spawn.getWorld().spawn(_spawn, Snowman.class))); _heart = _spawn.getWorld().spawn(_spawn, IronGolem.class); - _heart.setMaxHealth(1000); - _heart.setHealth(1000); + _heart.setMaxHealth(1400); + _heart.setHealth(1400); UtilEnt.Vegetate(_heart); Host.CreatureAllowOverride = false; @@ -147,7 +145,17 @@ public class SnowmanBoss else { if ((minion.Target == null || !minion.Target.isValid() || !Host.IsAlive(minion.Target)) && !Host.GetPlayers(true).isEmpty()) - minion.Target = UtilAlg.Random(Host.GetPlayers(true)); + { + List valid = new ArrayList(); + for (Player player : Host.GetPlayers(true)) + if (UtilMath.offset(player, minion.Ent) <= 25 && player.getLocation().getBlockY() >= minion.Ent.getLocation().getBlockY()) + valid.add(player); + + minion.Target = UtilAlg.Random(valid); + } + + if (minion.Target == null) + continue; //Move UtilEnt.CreatureMoveFast(minion.Ent, minion.Target.getLocation(), 1.6f); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMaze.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMaze.java index 5aeecaa3b..e65212177 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMaze.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanMaze.java @@ -6,17 +6,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Map.Entry; -import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilTime; -import mineplex.core.common.util.UtilWorld; -import mineplex.core.recharge.Recharge; -import nautilus.game.arcade.game.games.christmas.Christmas; - import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; @@ -28,6 +17,16 @@ import org.bukkit.entity.Snowman; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.recharge.Recharge; +import nautilus.game.arcade.game.games.christmas.Christmas; +import nautilus.game.arcade.game.games.christmas.content.SnowmanWaypoint.CardinalDirection; + public class SnowmanMaze { private Christmas Host; @@ -163,48 +162,90 @@ public class SnowmanMaze if (south != null) nextBlock.add(south); if (east != null) nextBlock.add(east); if (west != null) nextBlock.add(west); - - //Random Direction - if (!nextBlock.isEmpty()) + + if(nextBlock.isEmpty()) { - data.getValue().Target = UtilAlg.Random(nextBlock).getLocation().add(0.5, 0, 0.5); - UtilEnt.CreatureMove(data.getKey(), data.getValue().Target, 1.4f); + entIterator.remove(); + data.getKey().remove(); + continue; + } + + if(nextBlock.size() > 1 && data.getValue().Direction != CardinalDirection.NULL) // they can do a uturn if they're stuck + { + if(data.getValue().Direction == CardinalDirection.NORTH) + { + nextBlock.remove(south); + } + else if(data.getValue().Direction == CardinalDirection.SOUTH) + { + nextBlock.remove(north); + } + else if(data.getValue().Direction == CardinalDirection.WEST) + { + nextBlock.remove(east); + } + else if(data.getValue().Direction == CardinalDirection.EAST) + { + nextBlock.remove(west); + } + } + + if (nextBlock.isEmpty()) + { + entIterator.remove(); + data.getKey().remove(); + continue; + } + + //Random Direction + Location nextLoc = UtilAlg.Random(nextBlock).getLocation(); + data.getValue().Target = nextLoc.clone().add(0.5, 0, 0.5); + if(north != null && nextLoc.equals(north.getLocation())) + { + data.getValue().Direction = CardinalDirection.NORTH; + } + else if(south != null && nextLoc.equals(south.getLocation())) + { + data.getValue().Direction = CardinalDirection.SOUTH; + } + else if(east != null && nextLoc.equals(east.getLocation())) + { + data.getValue().Direction = CardinalDirection.EAST; + } + else if(west != null && nextLoc.equals(west.getLocation())) + { + data.getValue().Direction = CardinalDirection.WEST; } } - - //Timeout Move - if (UtilMath.offset(data.getKey().getLocation(), data.getValue().Last) > 0.1) - data.getValue().Time = System.currentTimeMillis(); - - if (UtilTime.elapsed(data.getValue().Time, 2000)) - UtilEnt.CreatureMove(data.getKey(), data.getValue().Target, 1.4f); + + UtilEnt.CreatureMoveFast(data.getKey(), data.getValue().Target, 1.4f); } } - + private Block getTarget(Block start, Block cur, BlockFace face) { if (cur == null) cur = start; - + while (_waypoints.contains(cur.getRelative(face))) { cur = cur.getRelative(face); - + //Stop at intersection int count = 0; - + if (face != BlockFace.NORTH && _waypoints.contains(cur.getRelative(BlockFace.NORTH))) count++; if (face != BlockFace.SOUTH && _waypoints.contains(cur.getRelative(BlockFace.SOUTH))) count++; if (face != BlockFace.EAST && _waypoints.contains(cur.getRelative(BlockFace.EAST))) count++; if (face != BlockFace.WEST && _waypoints.contains(cur.getRelative(BlockFace.WEST))) count++; - + if (count > 1) break; } - + if (cur.equals(start)) return null; - + return cur; } @@ -213,7 +254,7 @@ public class SnowmanMaze //Spawn if (!Host.GetSleigh().HasPresent(_present)) { - while (_ents.size() < 36) + while (_ents.size() < 44) { Location loc = UtilAlg.Random(_spawns); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaypoint.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaypoint.java index 78e197277..22c0deabf 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaypoint.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/content/SnowmanWaypoint.java @@ -6,6 +6,7 @@ public class SnowmanWaypoint { public Location Last; public Location Target; + public CardinalDirection Direction = CardinalDirection.NULL; public long Time; public SnowmanWaypoint(Location last) @@ -14,4 +15,9 @@ public class SnowmanWaypoint Target = null; Time = System.currentTimeMillis(); } + + public static enum CardinalDirection + { + NORTH, SOUTH, EAST, WEST, NULL // such order much not care + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/kits/KitPlayer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/kits/KitPlayer.java index 9af09d62b..3c3efcee3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/kits/KitPlayer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/kits/KitPlayer.java @@ -1,12 +1,15 @@ package nautilus.game.arcade.game.games.christmas.kits; +import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import mineplex.core.common.util.C; +import mineplex.core.itemstack.ItemBuilder; import mineplex.core.itemstack.ItemStackFactory; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.kit.Kit; @@ -21,15 +24,23 @@ public class KitPlayer extends Kit new String[] { - "Help Santa retreive the lost presents!" + "Help Santa retrieve the lost presents!" }, new Perk[] { }, - EntityType.ZOMBIE, + EntityType.SKELETON, new ItemStack(Material.IRON_SWORD)); - + } + + @Override + public void SpawnCustom(LivingEntity ent) + { + ent.getEquipment().setHelmet(new ItemBuilder(Material.LEATHER_HELMET).setColor(Color.RED).setUnbreakable(true).build()); + ent.getEquipment().setChestplate(new ItemBuilder(Material.LEATHER_CHESTPLATE).setColor(Color.RED).build()); + ent.getEquipment().setLeggings(new ItemBuilder(Material.LEATHER_LEGGINGS).setColor(Color.RED).build()); + ent.getEquipment().setBoots(new ItemBuilder(Material.LEATHER_BOOTS).setColor(Color.BLACK).build()); } @Override @@ -43,7 +54,7 @@ public class KitPlayer extends Kit item = ItemStackFactory.Instance.CreateStack(Material.BOW, (byte)0, 1, C.cGreen + C.Bold + "Toy Bow"); item.addEnchantment(Enchantment.ARROW_INFINITE, 1); player.getInventory().setItem(1, item); - player.getInventory().setItem(28, ItemStackFactory.Instance.CreateStack(Material.ARROW)); + player.getInventory().setItem(9, ItemStackFactory.Instance.CreateStack(Material.ARROW)); //Axe item = ItemStackFactory.Instance.CreateStack(Material.STONE_PICKAXE, (byte)0, 1, C.cGreen + C.Bold + "Coal Digger"); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part.java index 7a96132c4..ea8e171cc 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part.java @@ -1,35 +1,42 @@ package nautilus.game.arcade.game.games.christmas.parts; -import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature; +import org.bukkit.entity.Ageable; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Creature; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; + import mineplex.core.common.util.C; +import mineplex.core.common.util.NautHashMap; 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.UtilTextTop; +import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.game.games.christmas.Christmas; import nautilus.game.arcade.game.games.christmas.ChristmasAudio; import net.minecraft.server.v1_8_R3.EntityCreature; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.SkullType; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.Skull; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature; -import org.bukkit.entity.Ageable; -import org.bukkit.entity.Creature; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.HandlerList; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerInteractEvent; - public abstract class Part implements Listener { public Christmas Host; @@ -42,6 +49,7 @@ public abstract class Part implements Listener protected double _objectiveHealth = 1; protected HashMap _creatures = new HashMap(); + protected NautHashMap _spawnedPresents = new NautHashMap(); public Part(Christmas host, Location sleigh, Location[] presents) { @@ -53,38 +61,63 @@ public abstract class Part implements Listener loc.getBlock().setType(Material.AIR); } + @SuppressWarnings("deprecation") public void Prepare() { Activate(); for (Location loc : _presents) - { - Block present = loc.getBlock(); - present.setTypeIdAndData(Material.SKULL.getId(), (byte)1, true); - - Skull skull = (Skull) present.getState(); - skull.setSkullType(SkullType.PLAYER); + { + Location standLoc = loc.clone().add(0, -1.45, 0); + standLoc.setYaw(UtilMath.r(100)); - //Present Type - double r = Math.random(); - if (r > 0.75) skull.setOwner("CruXXx"); - else if (r > 0.5) skull.setOwner("CruXXx"); - else if (r > 0.25) skull.setOwner("CruXXx"); - else skull.setOwner("CruXXx"); + Host.CreatureAllowOverride = true; + ArmorStand stand = loc.getWorld().spawn(standLoc, ArmorStand.class); + Host.CreatureAllowOverride = false; - //Angle - BlockFace face = BlockFace.UP; - while (face == BlockFace.UP || face == BlockFace.DOWN || face == BlockFace.SELF) - face = BlockFace.values()[UtilMath.r(BlockFace.values().length)]; - skull.setRotation(face); - - skull.update(); + stand.setVisible(false); + stand.setGravity(false); + + ItemStack stack = ItemStackFactory.Instance.CreateStack(Material.SKULL_ITEM, (byte) 3); + SkullMeta meta = (SkullMeta) stack.getItemMeta(); + meta.setOwner("CruXXx"); + stack.setItemMeta(meta); + + stand.setHelmet(stack); +// +// present.setTypeIdAndData(Material.SKULL.getId(), (byte)1, true); +// +// Skull skull = (Skull) present.getState(); +// skull.setSkullType(SkullType.PLAYER); +// +// //Present Type +// double r = Math.random(); +// if (r > 0.75) skull.setOwner("CruXXx"); +// else if (r > 0.5) skull.setOwner("CruXXx"); +// else if (r > 0.25) skull.setOwner("CruXXx"); +// else skull.setOwner("CruXXx"); +// +// //Angle +// BlockFace face = BlockFace.UP; +// while (face == BlockFace.UP || face == BlockFace.DOWN || face == BlockFace.SELF) +// face = BlockFace.values()[UtilMath.r(BlockFace.values().length)]; +// skull.setRotation(face); +// +// skull.update(); + + _spawnedPresents.put(stand, loc); //Beacon - present.getRelative(BlockFace.DOWN).setType(Material.BEACON); for (int x=-1 ; x<=1 ; x++) for (int z=-1 ; z<=1 ; z++) - present.getRelative(x, -2, z).setType(Material.IRON_BLOCK); + { + loc.getBlock().getRelative(x, -2, z).setType(Material.IRON_BLOCK); + loc.getBlock().getRelative(x, -3, z).setType(Material.IRON_BLOCK); + } + + loc.getBlock().getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN).setType(Material.BEACON); + loc.getBlock().getRelative(BlockFace.DOWN).setType(Material.STAINED_GLASS); + loc.getBlock().getRelative(BlockFace.DOWN).setData(UtilMath.randomElement(new Byte[]{14, 5, 13})); } } @@ -157,35 +190,38 @@ public abstract class Part implements Listener return true; } - @EventHandler - public void PresentCollect(PlayerInteractEvent event) + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = false) + public void PresentCollect(PlayerInteractAtEntityEvent event) { - if (event.getClickedBlock() == null) + Location present = _spawnedPresents.get(event.getRightClicked()); + if (present == null) return; - + boolean contains = false; for (Location loc : _presents) - if (loc.getBlock().equals(event.getClickedBlock())) + if (loc.getBlock().equals(present.getBlock())) contains = true; if (!contains) return; - event.setCancelled(true); - if (!Host.IsLive()) return; if (!Host.IsAlive(event.getPlayer())) return; - if (Host.GetSleigh().HasPresent(event.getClickedBlock().getLocation())) + if (Host.GetSleigh().HasPresent(present.getBlock().getLocation())) return; - if (UtilMath.offset(event.getPlayer().getLocation(), event.getClickedBlock().getLocation().add(0.5, 0.5, 0.5)) > 2) + if (UtilMath.offset(event.getPlayer().getLocation(), present.clone().add(0.5, 0.5, 0.5)) > 2) return; - Host.GetSleigh().AddPresent(event.getClickedBlock().getLocation()); + _spawnedPresents.remove(event.getRightClicked()); + + event.getRightClicked().remove(); + + Host.GetSleigh().AddPresent(present.getBlock().getLocation()); Host.SantaSay("Well done " + event.getPlayer().getName() + "! You collected a present!", null); } @@ -276,4 +312,21 @@ public abstract class Part implements Listener _creatures.clear(); } + @EventHandler + public void onDamagePresent(EntityDamageEvent event) + { + event.setCancelled(_spawnedPresents.containsKey(event.getEntity())); + } + + @EventHandler + public void PresentParticles(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + for (Entity ent : _spawnedPresents.keySet()) + { + UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, ent.getLocation().clone().add(0, 1.5, 0), .3F, .3F, .3F, 0F, 1, ViewDist.LONG, UtilServer.getPlayers()); + } + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part1.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part1.java index c37047bce..6839ff135 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part1.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part1.java @@ -1,41 +1,33 @@ package nautilus.game.arcade.game.games.christmas.parts; import java.util.ArrayList; -import java.util.HashMap; import java.util.Iterator; -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilEnt; -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 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.GameState; -import nautilus.game.arcade.game.games.christmas.Christmas; -import nautilus.game.arcade.game.games.christmas.ChristmasAudio; - import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; import org.bukkit.entity.Skeleton; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.inventory.ItemStack; +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; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.game.games.christmas.Christmas; +import nautilus.game.arcade.game.games.christmas.ChristmasAudio; + public class Part1 extends Part { private ArrayList _skeletons; @@ -145,7 +137,7 @@ public class Part1 extends Part _presents = System.currentTimeMillis(); - Host.SantaSay("Theres some of the presents up ahead!", ChristmasAudio.P1_B); + Host.SantaSay("There are some of the presents up ahead!", ChristmasAudio.P1_B); SetObjectivePresents(); } @@ -189,7 +181,7 @@ public class Part1 extends Part } Host.SantaSay("Clear the path! Watch out for the undead!", ChristmasAudio.P1_D); - SetObjectiveText("Clear a path for Santas Sleigh!", 1); + SetObjectiveText("Clear a path for Santa's Sleigh!", 1); } private void UpdateClear() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part4.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part4.java index 7286d1512..26b282b57 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part4.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part4.java @@ -3,10 +3,22 @@ package nautilus.game.arcade.game.games.christmas.parts; import java.util.ArrayList; import java.util.Iterator; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.Giant; +import org.bukkit.entity.Zombie; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + import mineplex.core.common.util.C; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilPlayer; import mineplex.core.hologram.Hologram; import mineplex.core.hologram.HologramManager; import mineplex.core.updater.UpdateType; @@ -17,24 +29,6 @@ import nautilus.game.arcade.game.games.christmas.ChristmasAudio; import nautilus.game.arcade.game.games.christmas.content.CaveGiant; import nautilus.game.arcade.game.games.christmas.content.Snake; -import org.bukkit.ChatColor; -import org.bukkit.Effect; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.FallingBlock; -import org.bukkit.entity.Giant; -import org.bukkit.entity.Spider; -import org.bukkit.entity.Zombie; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.entity.EntityChangeBlockEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; - public class Part4 extends Part { private ArrayList _roofIce; @@ -51,6 +45,13 @@ public class Part4 extends Part private boolean _b = false; private HologramManager _holoManager; + private String[] _evilElfNames = new String[] + { "Bing", "Bling", "Blitz", "Larry", "Buddy", "Buster", "Cedar", "Dash", "Eggnog", "Elfie", "Elm", "Elvis", + "Evergreen", "Figgy", "Flake", "Frank", "Frost", "Gabriel", "George", "Henry", "Hermey", "Ice", "Jangle", + "Jingle", "Jinx", "Kringle", "Kris", "Louie", "Max", "Mistletoe", "Nat", "Nick", "Noel", "Pax", "Peppermin", + "Pine", "Ralphie", "Rudy", "Snow", "Snowball", "Star", "Tinsel", "Tiny", "Topper", "Trinket", "Wayne", + "Wink", "Yule", "Zippy" }; + public Part4(HologramManager holoManager, Christmas host, Location sleigh, Location[] presents, ArrayList roofIce, ArrayList mobs, ArrayList snakeHead, ArrayList snakeTrail, ArrayList gate, ArrayList checkpoints, Location giant) { @@ -85,7 +86,7 @@ public class Part4 extends Part @EventHandler public void GateUpdate(UpdateEvent event) { - if (event.getType() != UpdateType.SEC) + if (event.getType() != UpdateType.FAST) return; if (_gate.isEmpty()) @@ -187,6 +188,8 @@ public class Part4 extends Part ent.getEquipment().setLeggings(new ItemStack(Material.LEATHER_LEGGINGS)); ent.getEquipment().setBoots(new ItemStack(Material.LEATHER_BOOTS)); ent.setVillager(true); + + ent.setCustomName("Evil Elf " + UtilMath.randomElement(_evilElfNames)); ent.setHealth(9); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part5.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part5.java index 741b7f3ac..2dceaca60 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part5.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/christmas/parts/Part5.java @@ -2,41 +2,37 @@ package nautilus.game.arcade.game.games.christmas.parts; import java.util.ArrayList; -import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilTime; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import nautilus.game.arcade.game.games.christmas.Christmas; -import nautilus.game.arcade.game.games.christmas.ChristmasAudio; -import nautilus.game.arcade.game.games.christmas.content.*; -import net.minecraft.server.v1_8_R3.EntityCreature; - import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.EntityEffect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature; import org.bukkit.entity.Player; import org.bukkit.entity.Snowman; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; -import org.bukkit.event.HandlerList; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.entity.EntityCombustEvent; -import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilTime; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.game.games.christmas.Christmas; +import nautilus.game.arcade.game.games.christmas.ChristmasAudio; +import nautilus.game.arcade.game.games.christmas.content.BossFloor; +import nautilus.game.arcade.game.games.christmas.content.BossMobs; +import nautilus.game.arcade.game.games.christmas.content.BossSnowmanPattern; +import nautilus.game.arcade.game.games.christmas.content.PumpkinKing; + public class Part5 extends Part { private ArrayList _spawn; @@ -385,6 +381,9 @@ public class Part5 extends Part @EventHandler public void Damage(CustomDamageEvent event) { + if (event.isCancelled()) + return; + if (_boss == null) return; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventGame.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventGame.java index 03499db01..f90b48ed1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventGame.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventGame.java @@ -25,7 +25,7 @@ import mineplex.core.disguise.disguises.DisguiseBat; import mineplex.core.disguise.disguises.DisguiseChicken; import mineplex.core.disguise.disguises.DisguiseEnderman; import mineplex.core.disguise.disguises.DisguiseWither; -import mineplex.core.gadget.event.GadgetActivateEvent; +import mineplex.core.gadget.event.GadgetEnableEvent; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.give.Give; @@ -296,7 +296,7 @@ public class EventGame extends Game } @EventHandler - public void gadgetActivate(GadgetActivateEvent event) + public void gadgetActivate(GadgetEnableEvent event) { if (!_gadgetsEnabled) event.setCancelled(true); @@ -457,7 +457,7 @@ public class EventGame extends Game } @EventHandler - public void gadgetDisable(GadgetActivateEvent event) + public void gadgetDisable(GadgetEnableEvent event) { if (_allowAllGadgets) return; @@ -929,7 +929,7 @@ public class EventGame extends Game } @EventHandler - public void activateGadget(GadgetActivateEvent event) + public void activateGadget(GadgetEnableEvent event) { for(EventArea area : _customAreas.values()) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventModule.java index dd31d4703..b38a8f6af 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventModule.java @@ -20,7 +20,7 @@ import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.creature.event.CreatureKillEntitiesEvent; import mineplex.core.event.StackerEvent; -import mineplex.core.gadget.gadgets.MorphBlock; +import mineplex.core.gadget.gadgets.morph.MorphBlock; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.give.Give; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Arena.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Arena.java index ec26ae9e9..45e707110 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Arena.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Arena.java @@ -42,7 +42,7 @@ public class Arena private ArenaState _state; private long _stateTime; - private boolean _alertedAlready; + private ArrayList _alreadyAlertedPleaseWait; private boolean _alertedAlready2; private HashMap> _particles; @@ -62,7 +62,7 @@ public class Arena _stateTime = System.currentTimeMillis(); _particles = new HashMap<>(); _doBye = false; - _alertedAlready = false; + _alreadyAlertedPleaseWait = new ArrayList<>(); _alertedAlready2 = false; setupSpawns(); @@ -174,16 +174,6 @@ public class Arena return null; } - public boolean isAlertedAlready() - { - return _alertedAlready; - } - - public void setAlertedAlready(boolean alertedAlready) - { - _alertedAlready = alertedAlready; - } - private void setupSpawns() { ArrayList possible = (ArrayList) _host.WorldData.GetDataLocs("BLACK").clone(); @@ -309,15 +299,15 @@ public class Arena if (_host.getRoundState() != RoundState.FIGHTING) return; - if (_alertedAlready) - return; - for (Player p : getPastPlayers()) { - UtilTextMiddle.display(C.cAqua + "Please Wait", "The next round will start shortly", 0, 20 * 100, 0, p); - } + if (_alreadyAlertedPleaseWait.contains(p)) + continue; - _alertedAlready = true; + UtilTextMiddle.display(C.cAqua + "Please Wait", "The next round will start shortly", 0, 20 * 120, 0, p); // 2 min + + _alreadyAlertedPleaseWait.add(p); + } } else if (_state.equals(ArenaState.FIGHTING)) { @@ -346,7 +336,7 @@ public class Arena if (_alertedAlready2) continue; - UtilTextMiddle.display(C.cGreen + "Next Battle", "Follow the particles", 0, 20 * 100, 0, p); + UtilTextMiddle.display(C.cGreen + "Next Battle", "Follow the particles", 0, 20 * 120, 0, p); // 2 min } _alertedAlready2 = true; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Gladiators.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Gladiators.java index b03240656..ddb562ae1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Gladiators.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/Gladiators.java @@ -4,7 +4,6 @@ import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.Map; @@ -109,13 +108,13 @@ public class Gladiators extends SoloGame EnableTutorials = false; BlockBreakAllow.add(Material.SUGAR_CANE_BLOCK.getId()); - BlockBreakAllow.add(Material.GRASS.getId()); + BlockBreakAllow.add(Material.DEAD_BUSH.getId()); BlockBreakAllow.add(Material.LONG_GRASS.getId()); registerStatTrackers( new BrawlerTracker(this), - //new UntouchableTracker(this), - //new FlawlessTracker(this), + new UntouchableTracker(this), + new FlawlessTracker(this), new PrecisionTracker(this), new SwiftKillTracker(this) ); @@ -529,8 +528,6 @@ public class Gladiators extends SoloGame a.setState(ArenaState.WAITING); } - UtilTextMiddle.display(C.cGreen + "Gladiators!", C.cGreen + "Defeat your opponent to advance", 20, 60, 20); - return; } @@ -541,6 +538,12 @@ public class Gladiators extends SoloGame //closeUnusedArenas(); } + @EventHandler + public void helpMessage(PlayerPrepareTeleportEvent e) + { + UtilTextMiddle.display(C.cGreen + "Gladiators!", C.cGreen + "Defeat your opponent to advance", 20, 20 * 7, 20); + } + /** *------------------- * MAIN UPDATE METHOD @@ -559,9 +562,6 @@ public class Gladiators extends SoloGame { _roundState = RoundState.STARTING_5; - if (_firstRound) - return; - UtilTextMiddle.display("", C.cGreen + C.Bold + getRoundNotation(), 0, 80 , 0); _furthestOutCurrent = getFurthestOut(); // Find furthest out for fight. @@ -676,6 +676,7 @@ public class Gladiators extends SoloGame { //p.sendMessage("bounce. closest = " + closest.toString() + " player arena = " + _playerArenas.get(p).toString()); UtilAction.velocity(p, UtilAlg.getTrajectory2d(e.getTo(), p.getLocation()), 1.7, true, 0.2, 0, 3, true); + sendPlayerArenaBounceCheck(p); } return; @@ -693,6 +694,25 @@ public class Gladiators extends SoloGame } } + private void sendPlayerArenaBounceCheck(final Player p) + { + Manager.getScheduler().scheduleSyncDelayedTask(Manager.getPlugin(), new Runnable() + { + @Override + public void run() + { + if (!GetPlayers(true).contains(p)) + return; + + Arena closest = getArenaByMid(UtilAlg.findClosest(p.getLocation(), getAllArenaMids())); + if (closest != _playerArenas.get(p)) + { + p.teleport(UtilAlg.findClosest(p.getLocation(), _playerArenas.get(p).getSpawns())); + } + } + }, 20L); + } + @EventHandler public void arenaChange(PlayerChangeArenaEvent e) { @@ -819,9 +839,6 @@ public class Gladiators extends SoloGame { _roundState = RoundState.STARTING_2; - if (_firstRound) - return; - UtilTextMiddle.display(C.cGreen + "3", C.cGreen + C.Bold + getRoundNotation(), 0, 80, 0); for (Player p : UtilServer.getPlayers()) @@ -832,9 +849,6 @@ public class Gladiators extends SoloGame { _roundState = RoundState.STARTING_1; - if (_firstRound) - return; - UtilTextMiddle.display(C.cYellow + "2", C.cGreen + C.Bold + getRoundNotation(), 0, 80, 0); for (Player p : UtilServer.getPlayers()) @@ -845,9 +859,6 @@ public class Gladiators extends SoloGame { _roundState = RoundState.STARTED; - if (_firstRound) - return; - UtilTextMiddle.display(C.cGold + "1", C.cGreen + C.Bold + getRoundNotation(), 0, 80, 0); for (Player p : UtilServer.getPlayers()) @@ -858,11 +869,11 @@ public class Gladiators extends SoloGame { _roundState = RoundState.FIGHTING; - if (_firstRound) - { - _firstRound = false; - return; - } +// if (_firstRound) +// { +// _firstRound = false; +// return; +// } UtilTextMiddle.display(C.cRed + "FIGHT", C.cGreen + C.Bold + getRoundNotation(), 0, 40, 0); @@ -1048,7 +1059,7 @@ public class Gladiators extends SoloGame if (e.GetLog().GetKiller().IsPlayer()) { Player killer = UtilPlayer.searchExact(e.GetLog().GetKiller().GetName()); - ((Player)e.GetEvent().getEntity()).sendMessage(F.main("Game", "Your killer had " + C.cRed + new DecimalFormat("#").format(killer.getHealth()) + "❤" + C.cGray + " left.")); + ((Player)e.GetEvent().getEntity()).sendMessage(F.main("Game", "Your killer had " + C.cRed + (new DecimalFormat("#.#").format((killer.getHealth() / 2))) + "❤" + C.cGray + " left.")); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/trackers/FlawlessTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/trackers/FlawlessTracker.java index ebdbad1cf..1d772bbc2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/trackers/FlawlessTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/trackers/FlawlessTracker.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.games.gladiators.Gladiators; @@ -29,16 +30,16 @@ public class FlawlessTracker extends StatTracker } @EventHandler - public void onDmg(EntityDamageEvent e) + public void onDmg(CustomDamageEvent e) { if (e.isCancelled()) return; - System.out.println(e.getEventName() + " took damage by " + e.getCause().toString()); + //System.out.println(e.getEventName() + " took damage by " + e.GetCause().toString()); - if (e.getEntity() instanceof Player) + if (e.GetDamageeEntity() instanceof Player) { - _noWin.add(((Player)e.getEntity()).getName()); + _noWin.add(((Player)e.GetDamageeEntity()).getName()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/trackers/UntouchableTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/trackers/UntouchableTracker.java index 44115ca72..ef357d6a5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/trackers/UntouchableTracker.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/trackers/UntouchableTracker.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.game.games.gladiators.Gladiators; import nautilus.game.arcade.game.games.gladiators.events.RoundStartEvent; import nautilus.game.arcade.stats.StatTracker; @@ -27,14 +28,14 @@ public class UntouchableTracker extends StatTracker } @EventHandler - public void onDmg(EntityDamageEvent e) + public void onDmg(CustomDamageEvent e) { if (e.isCancelled()) return; - if (e.getEntity() instanceof Player) + if (e.GetDamageeEntity() instanceof Player) { - _noWin.add(((Player)e.getEntity()).getName()); + _noWin.add(((Player)e.GetDamageeEntity()).getName()); } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLootManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLootManager.java index ba57f7f18..60bf68b48 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLootManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameLootManager.java @@ -61,13 +61,13 @@ public class GameLootManager implements Listener //Chest _rewardManager.addReward(new InventoryReward(Manager.getInventoryManager(), "Old Chest", "Old Chest", 1, 1, - new ItemStack(Material.CHEST), RewardRarity.COMMON, 2)); + new ItemStack(Material.CHEST), RewardRarity.COMMON, 2, 0)); _rewardManager.addReward(new InventoryReward(Manager.getInventoryManager(), "Ancient Chest", "Ancient Chest", 1, 1, - new ItemStack(Material.CHEST), RewardRarity.UNCOMMON, 40)); + new ItemStack(Material.CHEST), RewardRarity.UNCOMMON, 40, 0)); _rewardManager.addReward(new InventoryReward(Manager.getInventoryManager(), "Mythical Chest", "Mythical Chest", 1, 1, - new ItemStack(Material.CHEST), RewardRarity.UNCOMMON, 1)); + new ItemStack(Material.CHEST), RewardRarity.UNCOMMON, 1, 0)); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java index 354939f26..ca7bb2df2 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameManager.java @@ -16,7 +16,7 @@ import mineplex.core.common.util.UtilTime; import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseLiving; import mineplex.core.disguise.disguises.DisguiseWither; -import mineplex.core.gadget.gadgets.MorphWither; +import mineplex.core.gadget.gadgets.morph.MorphWither; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.minecraft.game.core.condition.Condition.ConditionType;