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 30263f09d..ec08cea77 100644
--- a/Plugins/.idea/compiler.xml
+++ b/Plugins/.idea/compiler.xml
@@ -23,12 +23,12 @@
-
+
-
+
diff --git a/Plugins/.idea/misc.xml b/Plugins/.idea/misc.xml
index 4b4d0cc04..0f016238b 100644
--- a/Plugins/.idea/misc.xml
+++ b/Plugins/.idea/misc.xml
@@ -16,7 +16,7 @@
-
+
\ No newline at end of file
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 6c5db05db..234d9f195 100644
--- a/Plugins/BuildFiles/common.xml
+++ b/Plugins/BuildFiles/common.xml
@@ -9,6 +9,7 @@
+
@@ -66,10 +67,10 @@
-
+
@@ -86,7 +87,7 @@
-
+
@@ -110,6 +111,7 @@
+
@@ -142,6 +144,7 @@
+
@@ -158,7 +161,7 @@
-
+
@@ -191,6 +194,7 @@
+
@@ -210,7 +214,7 @@
-
+
@@ -239,6 +243,7 @@
+
@@ -249,7 +254,7 @@
-
+
@@ -276,6 +281,7 @@
+
@@ -329,7 +335,7 @@
-
+
@@ -403,6 +409,7 @@
+
@@ -435,6 +442,7 @@
+
@@ -462,6 +470,7 @@
+
@@ -490,6 +499,7 @@
+
diff --git a/Plugins/Mineplex.Bungee.Mineplexer/.classpath b/Plugins/Mineplex.Bungee.Mineplexer/.classpath
index 40645fe06..c06b6c559 100644
--- a/Plugins/Mineplex.Bungee.Mineplexer/.classpath
+++ b/Plugins/Mineplex.Bungee.Mineplexer/.classpath
@@ -8,6 +8,6 @@
-
+
diff --git a/Plugins/Mineplex.Bungee.Mineplexer/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.Bungee.Mineplexer/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 7341ab168..000000000
--- a/Plugins/Mineplex.Bungee.Mineplexer/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-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.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.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java
index ede793bef..1f2835f13 100644
--- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java
+++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/motd/MotdManager.java
@@ -56,11 +56,11 @@ public class MotdManager implements Listener, Runnable
//String motdLine = "§f§l◄ §c§lMaintenance§f§l ►";
//String motdLine = "§f§l◄ §a§lCarl the Creeper§f§l ►";
// String motdLine = " §2§l§n M O N S T E R M A Z E B E T A §f";
- String motdLine = " §f§l◄ §b§lNew Game§f§l ▬ §3§lChampions CTF§f§l ►";
+ String motdLine = " §f❄ §2§lWinter Update §f❄ §2§lSnow Fight §f❄";
//String motdLine = " §d§lRank Sale §a§l40% Off");
//String motdLine = " §f§l◄§c§lMAINTENANCE§f§l►");
- updateMainMotd(" §f§l§m §8§l§m[ §r §6§lMineplex§r §f§lGames§r §8§l§m ]§f§l§m §r", motdLine);
+ updateMainMotd(" §c§m §f§m §c§m §f§m §2§l§m[ §r §c§lMineplex§r §f§lGames§r §2§l§m ]§f§m §c§m §f§m §c§m §r", motdLine);
System.out.println("Updated Bungee MOTD");
}
}
diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerStats/PlayerStats.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerStats/PlayerStats.java
index fcae65a57..cc805cbe2 100644
--- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerStats/PlayerStats.java
+++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerStats/PlayerStats.java
@@ -5,8 +5,8 @@ import java.util.UUID;
import java.util.concurrent.TimeUnit;
import mineplex.bungee.playerStats.data.IpInfo;
-import mineplex.playerCache.PlayerCache;
-import mineplex.playerCache.PlayerInfo;
+import mineplex.cache.player.PlayerCache;
+import mineplex.cache.player.PlayerInfo;
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
import net.md_5.bungee.api.event.PostLoginEvent;
import net.md_5.bungee.api.plugin.Listener;
diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerStats/PlayerStatsRepository.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerStats/PlayerStatsRepository.java
index 1e9f765f5..5227ab818 100644
--- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerStats/PlayerStatsRepository.java
+++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerStats/PlayerStatsRepository.java
@@ -9,7 +9,7 @@ import java.sql.Statement;
import java.util.UUID;
import mineplex.bungee.playerStats.data.IpInfo;
-import mineplex.playerCache.PlayerInfo;
+import mineplex.cache.player.PlayerInfo;
public class PlayerStatsRepository
{
diff --git a/Plugins/Mineplex.BungeeRotator/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.BungeeRotator/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 7341ab168..000000000
--- a/Plugins/Mineplex.BungeeRotator/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-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.7
diff --git a/Plugins/Mineplex.PlayerCache/.classpath b/Plugins/Mineplex.Cache/.classpath
similarity index 100%
rename from Plugins/Mineplex.PlayerCache/.classpath
rename to Plugins/Mineplex.Cache/.classpath
diff --git a/Plugins/Mineplex.Cache/.project b/Plugins/Mineplex.Cache/.project
new file mode 100644
index 000000000..5321c2157
--- /dev/null
+++ b/Plugins/Mineplex.Cache/.project
@@ -0,0 +1,17 @@
+
+
+ Mineplex.Cache
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/Plugins/Mineplex.PlayerCache/Mineplex.PlayerCache.iml b/Plugins/Mineplex.Cache/Mineplex.Cache.iml
similarity index 100%
rename from Plugins/Mineplex.PlayerCache/Mineplex.PlayerCache.iml
rename to Plugins/Mineplex.Cache/Mineplex.Cache.iml
diff --git a/Plugins/Mineplex.PlayerCache/src/mineplex/playerCache/PlayerCache.java b/Plugins/Mineplex.Cache/src/mineplex/cache/player/PlayerCache.java
similarity index 97%
rename from Plugins/Mineplex.PlayerCache/src/mineplex/playerCache/PlayerCache.java
rename to Plugins/Mineplex.Cache/src/mineplex/cache/player/PlayerCache.java
index cf320dbde..e83eabf74 100644
--- a/Plugins/Mineplex.PlayerCache/src/mineplex/playerCache/PlayerCache.java
+++ b/Plugins/Mineplex.Cache/src/mineplex/cache/player/PlayerCache.java
@@ -1,4 +1,4 @@
-package mineplex.playerCache;
+package mineplex.cache.player;
import java.util.UUID;
diff --git a/Plugins/Mineplex.PlayerCache/src/mineplex/playerCache/PlayerInfo.java b/Plugins/Mineplex.Cache/src/mineplex/cache/player/PlayerInfo.java
similarity index 97%
rename from Plugins/Mineplex.PlayerCache/src/mineplex/playerCache/PlayerInfo.java
rename to Plugins/Mineplex.Cache/src/mineplex/cache/player/PlayerInfo.java
index 3ab44b0d5..c7cf6faec 100644
--- a/Plugins/Mineplex.PlayerCache/src/mineplex/playerCache/PlayerInfo.java
+++ b/Plugins/Mineplex.Cache/src/mineplex/cache/player/PlayerInfo.java
@@ -1,4 +1,4 @@
-package mineplex.playerCache;
+package mineplex.cache.player;
import java.util.UUID;
diff --git a/Plugins/Mineplex.Core.Common/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.Core.Common/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 7341ab168..000000000
--- a/Plugins/Mineplex.Core.Common/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-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.7
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/ascii.png b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/ascii.png
new file mode 100644
index 000000000..587966dc3
Binary files /dev/null and b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/ascii.png differ
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
new file mode 100644
index 000000000..2db7d259f
--- /dev/null
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/LineFormat.java
@@ -0,0 +1,18 @@
+package mineplex.core.common.util;
+
+public enum LineFormat
+{
+ LORE(220), CHAT(319);
+
+ private int _length;
+
+ private LineFormat(int length)
+ {
+ _length = length;
+ }
+
+ public int getLength()
+ {
+ return _length;
+ }
+}
\ No newline at end of file
diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java
index da7bc464c..c0a7f5f3b 100644
--- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilBlock.java
@@ -552,8 +552,8 @@ public class UtilBlock
if (diagonals)
{
for (int x = -1; x <= 1; x++)
- for (int y = -1; y <= 1; y++)
- for (int z = -1; z <= 1; z++)
+ for (int z = -1; z <= 1; z++)
+ for (int y = 1; y >= -1; y--)
{
if (x == 0 && y == 0 && z == 0) continue;
@@ -563,11 +563,11 @@ public class UtilBlock
else
{
blocks.add(block.getRelative(BlockFace.UP));
- blocks.add(block.getRelative(BlockFace.DOWN));
blocks.add(block.getRelative(BlockFace.NORTH));
blocks.add(block.getRelative(BlockFace.SOUTH));
blocks.add(block.getRelative(BlockFace.EAST));
blocks.add(block.getRelative(BlockFace.WEST));
+ blocks.add(block.getRelative(BlockFace.DOWN));
}
return blocks;
@@ -835,7 +835,7 @@ public class UtilBlock
return getBedHead(bed.getBlock()) != null && getBedFoot(bed.getBlock()) != null;
}
- public static HashSet findConnectedBlocks(Block block, HashSet blocks, int limit)
+ public static HashSet findConnectedBlocks(Block source, Block block, HashSet blocks, int limit, double range)
{
if (blocks == null)
blocks = new HashSet();
@@ -852,10 +852,13 @@ public class UtilBlock
{
if (neighbour.getType() == Material.AIR)
continue;
+
+ if (UtilMath.offset(source.getLocation(), neighbour.getLocation()) > range)
+ continue;
//If neighbour hasn't been searched, recursively search it!
if (!blocks.contains(neighbour))
- findConnectedBlocks(neighbour, blocks, limit);
+ findConnectedBlocks(source, neighbour, blocks, limit, range);
}
return blocks;
diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilItem.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilItem.java
index c82d37f9f..5a300322c 100644
--- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilItem.java
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilItem.java
@@ -12,6 +12,7 @@ import java.util.Map.Entry;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
import mineplex.core.common.structs.ItemContainer;
@@ -1116,4 +1117,12 @@ public class UtilItem
{
return _materials.containsKey(material);
}
+
+ public static ItemStack makeUnbreakable(ItemStack i)
+ {
+ ItemMeta im = i.getItemMeta();
+ im.spigot().setUnbreakable(true);
+ i.setItemMeta(im);
+ return i;
+ }
}
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/UtilPlayer.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java
index af1712362..f1e17e2df 100644
--- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java
@@ -1,5 +1,7 @@
package mineplex.core.common.util;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
@@ -509,13 +511,21 @@ public class UtilPlayer
if (cur.isDead())
continue;
+ //Ignore Check
if (ignore != null)
{
- for (int i = 0; i < ignore.length; i++)
+ boolean shouldIgnore = false;
+ for (Entity ent : ignore)
{
- if (cur.equals(ignore[i]))
- continue;
+ if (cur.equals(ent))
+ {
+ shouldIgnore = true;
+ break;
+ }
}
+
+ if (shouldIgnore)
+ continue;
}
double dist = UtilMath.offset(cur.getLocation(), loc);
diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java
index c56faa15a..79f248c3d 100644
--- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java
+++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java
@@ -1,10 +1,12 @@
package mineplex.core.common.util;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
+import java.util.stream.Stream;
import org.bukkit.Bukkit;
import org.bukkit.Server;
@@ -18,6 +20,11 @@ public class UtilServer
return getServer().getOnlinePlayers().toArray(new Player[0]);
}
+ public static Collection extends Player> getPlayersCollection()
+ {
+ return getServer().getOnlinePlayers();
+ }
+
public static List getSortedPlayers()
{
return getSortedPlayers(new Comparator()
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 8bbac15bc..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
@@ -1,52 +1,487 @@
package mineplex.core.common.util;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
+
+import javax.imageio.ImageIO;
+
+import mineplex.core.common.CurrencyType;
import org.apache.commons.lang.WordUtils;
-import org.bukkit.Material;
+import org.bukkit.ChatColor;
-public class UtilText {
- public static String listToString(Collection inputList, boolean comma) {
- String out = "";
+public class UtilText
+{
+ private static HashMap _characters = new HashMap();
- for (T cur : inputList) {
- out += cur.toString() + (comma ? ", " : " ");
+ static
+ {
+ try
+ {
+ InputStream inputStream = CurrencyType.class.getResourceAsStream("ascii.png");
+ BufferedImage image = ImageIO.read(inputStream);
+
+ char[] text = new char[]
+ {
+ ' ',
+ '!',
+ '"',
+ '#',
+ '$',
+ '%',
+ '&',
+ '\'',
+ '(',
+ ')',
+ '*',
+ '+',
+ ',',
+ '-',
+ '.',
+ '/',
+ '0',
+ '1',
+ '2',
+ '3',
+ '4',
+ '5',
+ '6',
+ '7',
+ '8',
+ '9',
+ ':',
+ ';',
+ '<',
+ '=',
+ '>',
+ '?',
+ '@',
+ 'A',
+ 'B',
+ 'C',
+ 'D',
+ 'E',
+ 'F',
+ 'G',
+ 'H',
+ 'I',
+ 'J',
+ 'K',
+ 'L',
+ 'M',
+ 'N',
+ 'O',
+ 'P',
+ 'Q',
+ 'R',
+ 'S',
+ 'T',
+ 'U',
+ 'V',
+ 'W',
+ 'X',
+ 'Y',
+ 'Z',
+ '[',
+ '\\',
+ ']',
+ '^',
+ '_',
+ '`',
+ 'a',
+ 'b',
+ 'c',
+ 'd',
+ 'e',
+ 'f',
+ 'g',
+ 'h',
+ 'i',
+ 'j',
+ 'k',
+ 'l',
+ 'm',
+ 'n',
+ 'o',
+ 'p',
+ 'q',
+ 'r',
+ 's',
+ 't',
+ 'u',
+ 'v',
+ 'w',
+ 'x',
+ 'y',
+ 'z',
+ '{',
+ '|',
+ '}',
+ '~'
+ };
+
+ int x = 0;
+ int y = 16;
+
+ for (char c : text)
+ {
+ grab(c, image, x, y);
+
+ if (x < 15 * 8)
+ {
+ x += 8;
+ }
+ else
+ {
+ x = 0;
+ y += 8;
+ }
+ }
+
+ inputStream.close();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ public static String center(String string, LineFormat lineFormat)
+ {
+ int length = getLength(string);
+
+ if (length > lineFormat.getLength())
+ {
+ return string;
}
- if (out.length() > 0) {
- out = out.substring(0, out.length() - (comma ? 2 : 1));
+ // Get the number of empty pixels on both sides of the string
+ int div = (int) Math.floor((lineFormat.getLength() - length) / 2D);
+
+ div -= 2; // For the gap between the strings
+
+ return fillLine(" ", div) + string + fillLine(" ", div);
+ }
+
+ public static String alignRight(String string, LineFormat lineFormat)
+ {
+ int length = getLength(string);
+
+ if (length > lineFormat.getLength())
+ {
+ return string;
}
- return out;
+ // Get the number of empty pixels on both sides of the string
+ int div = lineFormat.getLength() - length;
+
+ div -= 1; // For the gap between the strings
+
+ return fillLine(" ", div) + string;
+ }
+
+ public static String centerChat(String string, LineFormat lineFormat)
+ {
+ int length = getLength(string);
+
+ if (length > lineFormat.getLength())
+ {
+ return string;
+ }
+
+ // Get the number of empty pixels on both sides of the string
+ int div = (int) Math.floor(((lineFormat.getLength() + 10) - length) / 2D);
+
+ div -= 2; // For the gap between the strings
+
+ return fillLine(" ", div) + string;
+ }
+
+ public static String substringPixels(String string, int cutoff)
+ {
+ int len = 0;
+
+ char[] array = string.toCharArray();
+ boolean bold = false;
+
+ for (int i = 0; i < array.length; i++)
+ {
+ char c = array[i];
+
+ if (c == '�')
+ {
+ if (++i < array.length)
+ {
+ ChatColor color = ChatColor.getByChar(array[i]);
+
+ if (color != null)
+ {
+ if (color.equals(ChatColor.BOLD))
+ {
+ bold = true;
+ }
+ else if (color.equals(ChatColor.RESET) || color.isColor())
+ {
+ bold = false;
+ }
+ }
+ }
+
+ continue;
+ }
+
+ if (!_characters.containsKey(c))
+ {
+ continue;
+ }
+
+ int toAdd = _characters.get(c);
+
+ if (bold)
+ {
+ toAdd++;
+ }
+
+ if (len + toAdd > cutoff)
+ {
+ return string.substring(0, Math.max(0, i - 1));
+ }
+
+ if (i + 1 < array.length)
+ {
+ len++;
+ }
+ }
+
+ 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 int upperCaseCount(String input) {
- int count = 0;
-
- for (int k = 0; k < input.length(); k++) {
-
-
- char ch = input.charAt(k);
- if (Character.isUpperCase(ch))
- count++;
-
+ public static ArrayList splitLines(String[] strings, LineFormat lineFormat)
+ {
+ ArrayList lines = new ArrayList();
+
+ for (String s : strings)
+ {
+ lines.addAll(splitLine(s, lineFormat));
}
-
- return count;
+
+ return lines;
}
- public static int lowerCaseCount(String input) {
- int count = 0;
+
+ public static String[] splitLineToArray(String string, LineFormat lineFormat)
+ {
+ ArrayList lineList = splitLine(string, lineFormat);
- for (int k = 0; k < input.length(); k++) {
-
-
- char ch = input.charAt(k);
- if (Character.isLowerCase(ch))
- count++;
+ 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;
}
- return count;
+ //Empty
+ if (string.equals("") || string.equals(" "))
+ {
+ strings.add(string);
+ return strings;
+ }
+
+ String current = "";
+ int currentLength = 0;
+ String[] split = string.split(" ");
+ String colors = "";
+
+ for (int i = 0; i < split.length; i++)
+ {
+ String word = split[i];
+ int wordLength = getLength(colors + word);
+
+ if (currentLength + wordLength + 4 > lineFormat.getLength() && !current.isEmpty())
+ {
+ strings.add(current);
+ current = colors + word;
+ currentLength = wordLength + 1;
+ continue;
+ }
+
+ if (i != 0)
+ {
+ current += " ";
+ currentLength += 4;
+ }
+
+ current += word;
+ currentLength += wordLength;
+ colors = ChatColor.getLastColors(current);
+ }
+
+ if (!current.isEmpty())
+ {
+ strings.add(current);
+ }
+
+ return strings;
+ }
+
+ public static String fillLine(String filler, int maxPixels)
+ {
+ int pixels = getLength(filler);
+
+ if (pixels <= 0)
+ {
+ return "";
+ }
+
+ String toReturn = "";
+ int currentLen = 0;
+
+ int offset = maxPixels % 4;
+ boolean isOffset = false;
+
+ if (offset > 0)
+ {
+ toReturn += C.Bold;
+ }
+
+ while (currentLen + pixels <= maxPixels)
+ {
+ currentLen += pixels + 1;
+ toReturn += filler;
+
+ if (offset-- > 0)
+ {
+ currentLen++;
+
+ if (offset == 0)
+ {
+ isOffset = false;
+ toReturn += ChatColor.RESET;
+ }
+ }
+ }
+
+ if (isOffset)
+ {
+ toReturn += ChatColor.RESET;
+ }
+
+ return toReturn;
+ }
+
+ public static boolean fitsOneLine(String string, LineFormat lineFormat)
+ {
+ return getLength(string) <= lineFormat.getLength();
+ }
+
+ public static int getLength(String string)
+ {
+ int len = 0;
+
+ char[] array = string.toCharArray();
+ boolean bold = false;
+
+ for (int i = 0; i < array.length; i++)
+ {
+ char c = array[i];
+
+ if (c == '�')
+ {
+ if (++i < array.length)
+ {
+ ChatColor color = ChatColor.getByChar(array[i]);
+
+ if (color != null)
+ {
+ if (color.equals(ChatColor.BOLD))
+ {
+ bold = true;
+ }
+ else if (color.equals(ChatColor.RESET) || color.isColor())
+ {
+ bold = false;
+ }
+ }
+ }
+
+ continue;
+ }
+
+ if (!_characters.containsKey(c))
+ {
+ continue;
+ }
+
+ len += _characters.get(c);
+
+ if (bold)
+ {
+ len++;
+ }
+
+ if (i + 1 < array.length)
+ {
+ len++;
+ }
+ }
+
+ return len;
+ }
+
+ private static void grab(Character character, BufferedImage image, int imageX, int imageY)
+ {
+ if (character == ' ')
+ {
+ _characters.put(character, 3);
+ return;
+ }
+
+ for (int x = 0; x < 8; x++)
+ {
+ boolean isTransparentLine = true;
+
+ for (int y = 0; y < 8; y++)
+ {
+ int pixel = image.getRGB(imageX + x, imageY + y);
+
+ if ((pixel >> 24) != 0x00)
+ {
+ isTransparentLine = false;
+ break;
+ }
+ }
+
+ if (isTransparentLine)
+ {
+ _characters.put(character, x);
+ return;
+ }
+ }
+
+ _characters.put(character, 8);
}
public static boolean isStringSimilar(String newString, String oldString, float matchRequirement)
@@ -55,59 +490,136 @@ public class UtilText {
{
return newString.toLowerCase().equals(oldString.toLowerCase());
}
-
- for (int i=0 ; i < newString.length() * matchRequirement ; i++)
+
+ for (int i = 0; i < newString.length() * matchRequirement; i++)
{
int matchFromIndex = 0;
-
- //Look for substrings starting at i
- for (int j=0 ; j < oldString.length() ; j++)
+
+ // Look for substrings starting at i
+ for (int j = 0; j < oldString.length(); j++)
{
- //End of newString
- if (i+j >= newString.length())
+ // End of newString
+ if (i + j >= newString.length())
{
break;
}
-
- //Matched
- if (newString.charAt(i+j) == oldString.charAt(j))
+
+ // Matched
+ if (newString.charAt(i + j) == oldString.charAt(j))
{
matchFromIndex++;
-
+
if (matchFromIndex >= newString.length() * matchRequirement)
return true;
}
- //No Match > Reset
+ // No Match > Reset
else
{
break;
}
}
}
-
+
return false;
}
-
+
+ public static String listToString(Collection inputList, boolean comma)
+ {
+ String out = "";
+
+ for (T cur : inputList)
+ {
+ out += cur.toString() + (comma ? ", " : " ");
+ }
+
+ if (out.length() > 0)
+ {
+ out = out.substring(0, out.length() - (comma ? 2 : 1));
+ }
+
+ return out;
+ }
+
+ public static int lowerCaseCount(String input)
+ {
+ int count = 0;
+
+ for (int k = 0; k < input.length(); k++)
+ {
+
+ char ch = input.charAt(k);
+ if (Character.isLowerCase(ch))
+ count++;
+
+ }
+
+ return count;
+ }
+
+ public static int upperCaseCount(String input)
+ {
+ int count = 0;
+
+ for (int k = 0; k < input.length(); k++)
+ {
+
+ char ch = input.charAt(k);
+ if (Character.isUpperCase(ch))
+ count++;
+
+ }
+
+ return count;
+ }
+
public static String[] wrap(String text, int lineLength)
{
return wrap(text, lineLength, true);
}
-
- public static String[] wrap(String text, int lineLength, boolean wrapLongerWords) {
+
+ public static String[] wrap(String text, int lineLength, boolean wrapLongerWords)
+ {
return WordUtils.wrap(text, lineLength, "\00D0", wrapLongerWords).split("\00D0");
}
-
+
public static String repeat(String txt, int times)
{
return new String(new byte[times]).replace("\0", txt);
}
-
- public static boolean plural(int x){
+
+ public static boolean plural(int x)
+ {
return x <= 0 ? true : x > 1;
}
- public static String trim(int maxLength, String s) {
+ public static String trim(int maxLength, String s)
+ {
return s.length() <= maxLength ? s : s.substring(0, maxLength);
}
-}
+ public static String arrayToString(X[] array, String delimiter)
+ {
+ StringBuilder string = new StringBuilder();
+
+ int index = 0;
+ for (X x : array)
+ {
+ string.append(x.toString());
+
+ if (index != array.length - 1)
+ {
+ string.append(delimiter);
+ }
+
+ index++;
+ }
+
+ return string.toString();
+ }
+
+ public static String arrayToString(X[] array)
+ {
+ return arrayToString(array, null);
+ }
+
+}
\ No newline at end of file
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 1b29691dd..067e728d7 100644
--- a/Plugins/Mineplex.Core/.classpath
+++ b/Plugins/Mineplex.Core/.classpath
@@ -1,7 +1,7 @@
-
+
@@ -13,7 +13,7 @@
-
+
diff --git a/Plugins/Mineplex.Core/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.Core/.settings/org.eclipse.jdt.core.prefs
index d17b6724d..a698e5967 100644
--- a/Plugins/Mineplex.Core/.settings/org.eclipse.jdt.core.prefs
+++ b/Plugins/Mineplex.Core/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +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.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
+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.7
+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 790df2c43..d757499b7 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/CustomTagFix.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/CustomTagFix.java
@@ -35,6 +35,8 @@ import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerToggleFlightEvent;
import org.bukkit.event.player.PlayerVelocityEvent;
@@ -81,6 +83,15 @@ public class CustomTagFix extends MiniPlugin implements IPacketHandler, NCPHook
_loggedIn.remove(event.getPlayer());
}
+ @EventHandler(priority = EventPriority.LOW)
+ public void playerJoin(PlayerJoinEvent event)
+ {
+ Player player = event.getPlayer();
+
+ player.setCustomName("");
+ player.setCustomNameVisible(false);
+ }
+
@EventHandler
public void ncpExempt(final PlayerToggleFlightEvent event)
{
@@ -140,7 +151,8 @@ public class CustomTagFix extends MiniPlugin implements IPacketHandler, NCPHook
{
Entry> entry = iterator.next();
- for (Iterator> innerIterator = entry.getValue().entrySet().iterator(); innerIterator.hasNext();)
+ for (Iterator> innerIterator = entry.getValue().entrySet().iterator(); innerIterator
+ .hasNext();)
{
final Entry entry2 = innerIterator.next();
@@ -247,7 +259,7 @@ public class CustomTagFix extends MiniPlugin implements IPacketHandler, NCPHook
_entityNameMap.get(owner.getName()).put(spawnPacket.a, entityName);
_entityMap.get(owner.getName()).put(spawnPacket.a, new Integer[]
{
- newId
+ newId
});
sendProtocolPackets(owner, spawnPacket.a, newId, entityName, verifier, true, -1);
@@ -349,7 +361,7 @@ public class CustomTagFix extends MiniPlugin implements IPacketHandler, NCPHook
{
newId = new Integer[]
{
- UtilEnt.getNewEntityId()
+ UtilEnt.getNewEntityId()
};
_entityMap.get(owner.getName()).put(metaPacket.a, newId);
@@ -469,8 +481,8 @@ public class CustomTagFix extends MiniPlugin implements IPacketHandler, NCPHook
_entityRiding.get(owner.getName()).remove(attachPacket.b);
- sendProtocolPackets(owner, vehicleId, ids[ids.length - 1],
- _entityNameMap.get(owner.getName()).get(vehicleId), verifier, true, ids.length > 1 ? ids[0] : -1);
+ sendProtocolPackets(owner, vehicleId, ids[ids.length - 1], _entityNameMap.get(owner.getName()).get(vehicleId),
+ verifier, true, ids.length > 1 ? ids[0] : -1);
}
else
{
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java
index 3c01d37a3..26859a6b3 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/account/CoreClientManager.java
@@ -9,6 +9,9 @@ import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
import com.google.gson.Gson;
+
+import mineplex.cache.player.PlayerCache;
+import mineplex.cache.player.PlayerInfo;
import mineplex.core.MiniPlugin;
import mineplex.core.account.command.TestRank;
import mineplex.core.account.command.UpdateRank;
@@ -24,8 +27,6 @@ import mineplex.core.common.util.UtilPlayer;
import mineplex.core.timing.TimingManager;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
-import mineplex.playerCache.PlayerCache;
-import mineplex.playerCache.PlayerInfo;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java
index 6f36f0dd3..ee32d3854 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java
@@ -770,6 +770,48 @@ public enum Achievement
new String[]{"Get hit by a monster and", "land on the Safe Pad"},
new int[]{1},
AchievementCategory.MONSTER_MAZE),
+
+ GLADIATORS_HARDENED_GLADIATOR("Hardened Gladiator", 1000,
+ new String[]{"Gladiators.Wins"},
+ new String[]{"Win 50 games of Gladiators"},
+ new int[]{50},
+ AchievementCategory.GLADIATORS),
+
+ GLADIATORS_BATTLE_BRED("Battle Bred", 1500,
+ new String[]{"Gladiators.Wins"},
+ new String[]{"Win 100 games of Gladiators"},
+ new int[]{100},
+ AchievementCategory.GLADIATORS),
+
+ GLADIATORS_BRAWLER("Brawler", 1000,
+ new String[]{"Gladiators.Brawler"},
+ new String[]{"Kill 3 Gladiators", "with your bare hands"},
+ new int[]{3},
+ AchievementCategory.GLADIATORS),
+
+// GLADIATORS_UNTOUCHABLE("Untouchable", 1500,
+// new String[]{"Gladiators.Untouchable"},
+// new String[]{"Kill 10 Gladiators", "without taking any damage"},
+// new int[]{10},
+// AchievementCategory.GLADIATORS),
+
+// GLADIATORS_FLAWLESS("Flawless", 1000,
+// new String[]{"Gladiators.Flawless"},
+// new String[]{"Win a game of gladiators", "without taking any damage"},
+// new int[]{1},
+// AchievementCategory.GLADIATORS),
+
+ GLADIATORS_PRECISION("Precision", 800,
+ new String[]{"Gladiators.Precision"},
+ new String[]{"Don't miss a single", "arrow in a game of", "Gladiators (Minimum 3)"},
+ new int[]{1},
+ AchievementCategory.GLADIATORS),
+
+ GLADIATORS_SWIFT_KILL("Swift Kill", 1000,
+ new String[]{"Gladiators.SwiftKill"},
+ new String[]{"Earn 15 first bloods", "in Gladiators"},
+ new int[]{15},
+ AchievementCategory.GLADIATORS)
;
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java
index 320bf5bf6..16e65af63 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementCategory.java
@@ -105,7 +105,7 @@ public enum AchievementCategory
ONE_IN_THE_QUIVER("One in the Quiver", null,
new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED },
- Material.BOW, 0, GameCategory.ARCADE, "Slam Shooter Kit"),
+ Material.BOW, 0, GameCategory.ARCADE, "Ninja Kit"),
SUPER_PAINTBALL("Super Paintball", null,
new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED },
@@ -150,6 +150,10 @@ public enum AchievementCategory
MONSTER_MAZE("Monster Maze", null,
new StatDisplay[] {StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED},
Material.ROTTEN_FLESH, 0, GameCategory.ARCADE, "SoonTM"),
+
+ GLADIATORS("Gladiators", null,
+ new StatDisplay[] { StatDisplay.WINS, StatDisplay.GAMES_PLAYED, StatDisplay.KILLS, StatDisplay.DEATHS, StatDisplay.GEMS_EARNED },
+ Material.IRON_SWORD, 0, GameCategory.ARCADE, null)
;
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..527f4a33f 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,24 @@ 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.setAncientChests(6);
+ data.setMythicalChests(3);
}
- if (rank.has(Rank.LEGEND))
+ else if (rank.has(Rank.LEGEND))
{
- data.setCoins(30000);
+ data.setAncientChests(4);
+ data.setMythicalChests(1);
}
else if (rank.has(Rank.HERO))
{
- data.setCoins(15000);
+ data.setAncientChests(3);
}
else if (rank.has(Rank.ULTRA))
{
- data.setCoins(7500);
+ data.setOldChests(3);
+ data.setAncientChests(1);
}
return data;
@@ -722,6 +728,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 +777,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 d2b7613af..0c4a1c6f5 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusRepository.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/bonuses/BonusRepository.java
@@ -7,29 +7,21 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.sql.Types;
-import java.util.Map;
-import com.sun.org.apache.xpath.internal.operations.Bool;
-import mineplex.core.bonuses.gui.SpinGui;
import mineplex.core.common.Pair;
import mineplex.core.common.util.Callback;
-import mineplex.core.common.util.F;
-import mineplex.core.common.util.UtilPlayer;
import mineplex.core.database.DBPool;
import mineplex.core.database.RepositoryBase;
import mineplex.core.database.ResultSetCallable;
-import mineplex.core.database.column.ColumnInt;
import mineplex.core.donation.DonationManager;
import mineplex.core.recharge.Recharge;
import mineplex.database.Tables;
import mineplex.database.tables.records.BonusRecord;
-import org.jooq.Configuration;
import org.jooq.DSLContext;
import org.jooq.Record2;
import org.jooq.SQLDialect;
import org.jooq.TableField;
import org.jooq.impl.DSL;
-import org.jooq.impl.DefaultConfiguration;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -273,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..4f5883c63 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 (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/PetTagPage.java b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/PetTagPage.java
index 84da7d074..05b1c2d6c 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/PetTagPage.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/cosmetic/ui/page/PetTagPage.java
@@ -1,5 +1,6 @@
package mineplex.core.cosmetic.ui.page;
+import mineplex.cache.player.PlayerCache;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.CurrencyType;
import mineplex.core.common.util.C;
@@ -16,7 +17,6 @@ import mineplex.core.pet.repository.token.PetChangeToken;
import mineplex.core.pet.repository.token.PetToken;
import mineplex.core.shop.page.ConfirmationPage;
import mineplex.core.shop.page.ShopPageBase;
-import mineplex.playerCache.PlayerCache;
import net.minecraft.server.v1_8_R3.ItemStack;
import net.minecraft.server.v1_8_R3.Items;
@@ -64,7 +64,16 @@ public class PetTagPage extends ShopPageBase
{
_tagName = ChatColor.stripColor(_tagName);
_tagName = _tagName.replaceAll("[^A-Za-z0-9]", "");
-
+ System.out.println("Pet name: " + _tagName + ".");
+ if (_tagName.length() == 0)
+ {
+ UtilPlayer.message(getPlayer(), F.main(getPlugin().getName(), ChatColor.RED + "Supplied pet name contains invalid characters."));
+ playDenySound(getPlayer());
+
+ getShop().openPageForPlayer(getPlayer(), new PetPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), "Pets", getPlayer()));
+ return;
+ }
+
if (_tagName.length() > 16)
{
UtilPlayer.message(getPlayer(), F.main(getPlugin().getName(), ChatColor.RED + "Pet name cannot be longer than 16 characters."));
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/donation/DonationManager.java b/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java
index 54209e7db..813873d73 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/donation/DonationManager.java
@@ -10,6 +10,8 @@ import org.bukkit.event.EventHandler;
import org.bukkit.plugin.java.JavaPlugin;
import com.google.gson.Gson;
+
+import mineplex.cache.player.PlayerCache;
import mineplex.core.MiniDbClientPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.account.event.ClientWebResponseEvent;
@@ -24,7 +26,6 @@ import mineplex.core.donation.repository.token.DonorTokenWrapper;
import mineplex.core.server.util.TransactionResponse;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
-import mineplex.playerCache.PlayerCache;
public class DonationManager extends MiniDbClientPlugin
{
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java
index bb17d1e2f..ae95d1832 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,48 @@ 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.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 +78,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 +102,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 +132,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 +168,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 +180,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 +222,42 @@ public class GadgetManager extends MiniPlugin
addGadget(new MusicGadget(this, "Wait Disc", new String[] {""}, -2, 2267, 238000));
}
+ public Gadget getGadget(Class extends Gadget> 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 extends GadgetSet> 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 +289,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 +309,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);
}
}
@@ -391,7 +412,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 +420,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 +541,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..12ca85a39
--- /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());
+ }
+
+}
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 76e4d277f..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 + "These mystic particle attach 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..9e2ebc269
--- /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)
+ {
+ super(manager, name, desc, cost, ArmorSlot.Helmet, item.getType(), item.getData().getData());
+ _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..1d778742a 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/OutfitGadget.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/OutfitGadget.java
@@ -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/game/GameDisplay.java b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java
index 6c43e8729..ebdc89a02 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java
@@ -72,6 +72,8 @@ public enum GameDisplay
BouncyBalls("Bouncy Balls", Material.SLIME_BALL, (byte)0, GameCategory.ARCADE, 57),
+ Gladiators("Gladiators", Material.IRON_SWORD, (byte)0, GameCategory.ARCADE, 58),
+
Event("Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999);
String _name;
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/ignore/command/Ignore.java b/Plugins/Mineplex.Core/src/mineplex/core/ignore/command/Ignore.java
index 40c975cc6..48bf63e65 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/ignore/command/Ignore.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/ignore/command/Ignore.java
@@ -17,7 +17,7 @@ public class Ignore extends CommandBase
@Override
public void Execute(final Player caller, final String[] args)
{
- if (args == null)
+ if (args == null || args.length < 1)
{
Plugin.showIgnores(caller);
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/inventory/InventoryManager.java b/Plugins/Mineplex.Core/src/mineplex/core/inventory/InventoryManager.java
index 82becc622..a10dd5e73 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/inventory/InventoryManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/inventory/InventoryManager.java
@@ -22,6 +22,7 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
+import mineplex.cache.player.PlayerCache;
import mineplex.core.MiniDbClientPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.util.Callback;
@@ -31,7 +32,6 @@ import mineplex.core.inventory.data.InventoryRepository;
import mineplex.core.inventory.data.Item;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
-import mineplex.playerCache.PlayerCache;
public class InventoryManager extends MiniDbClientPlugin
{
@@ -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/itemstack/ItemBuilder.java b/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemBuilder.java
index c1d486795..8ea88cc70 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemBuilder.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemBuilder.java
@@ -2,7 +2,9 @@ package mineplex.core.itemstack;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -12,6 +14,7 @@ import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
+import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkEffectMeta;
import org.bukkit.inventory.meta.ItemMeta;
@@ -19,6 +22,8 @@ import org.bukkit.inventory.meta.LeatherArmorMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.potion.Potion;
+import mineplex.core.common.util.C;
+
public class ItemBuilder
{
@@ -48,20 +53,17 @@ public class ItemBuilder
private final HashMap _enchants = new HashMap();
private final List _lore = new ArrayList();
private Material _mat;
- // private Potion potion;
private String _title = null;
private boolean _unbreakable;
private String _playerHeadName = null;
+ private HashSet _itemFlags = new HashSet();
public ItemBuilder(ItemStack item)
{
this(item.getType(), item.getDurability());
_amount = item.getAmount();
_enchants.putAll(item.getEnchantments());
- if (item.getType() == Material.POTION)
- {
- // setPotion(Potion.fromItemStack(item));
- }
+
if (item.hasItemMeta())
{
ItemMeta meta = item.getItemMeta();
@@ -81,6 +83,8 @@ public class ItemBuilder
setColor(((LeatherArmorMeta) meta).getColor());
}
+ _itemFlags.addAll(meta.getItemFlags());
+
_unbreakable = meta.spigot().isUnbreakable();
}
}
@@ -107,13 +111,60 @@ public class ItemBuilder
this(mat, 1, data);
}
+ public HashSet getItemFlags()
+ {
+ return _itemFlags;
+ }
+
+ public ItemBuilder addItemFlags(ItemFlag... flags)
+ {
+ getItemFlags().addAll(Arrays.asList(flags));
+
+ return this;
+ }
+
+ public ItemBuilder setItemFlags(ItemFlag... flags)
+ {
+ getItemFlags().clear();
+ addItemFlags(flags);
+
+ return this;
+ }
+
+ public ItemBuilder setItemFlags(Collection flags)
+ {
+ getItemFlags().clear();
+ addItemFlags(flags.toArray(new ItemFlag[0]));
+
+ return this;
+ }
+
+ public ItemBuilder setHideInfo(boolean hideInfo)
+ {
+ if (hideInfo)
+ {
+ for (ItemFlag flag : ItemFlag.values())
+ {
+ getItemFlags().add(flag);
+ }
+ }
+ else
+ {
+ getItemFlags().clear();
+ }
+
+ return this;
+ }
+
public ItemBuilder addEnchantment(Enchantment enchant, int level)
{
if (_enchants.containsKey(enchant))
{
_enchants.remove(enchant);
}
+
_enchants.put(enchant, level);
+
return this;
}
@@ -121,20 +172,31 @@ public class ItemBuilder
{
for (String lore : lores)
{
- _lore.add(ChatColor.GRAY + lore);
+ _lore.add(C.cGray + lore);
}
+
+ return this;
+ }
+
+ public ItemBuilder setLore(String... lores)
+ {
+ _lore.clear();
+ _lore.addAll(Arrays.asList(lores));
+
return this;
}
public ItemBuilder addLore(String lore, int maxLength)
{
_lore.addAll(split(lore, maxLength));
+
return this;
}
public ItemBuilder addLores(List lores)
{
_lore.addAll(lores);
+
return this;
}
@@ -144,6 +206,7 @@ public class ItemBuilder
{
addLore(lore, maxLength);
}
+
return this;
}
@@ -155,6 +218,7 @@ public class ItemBuilder
public ItemStack build()
{
Material mat = _mat;
+
if (mat == null)
{
mat = Material.AIR;
@@ -164,8 +228,10 @@ public class ItemBuilder
{
Bukkit.getLogger().warning("Air material!");
}
+
ItemStack item = new ItemStack(mat, _amount, _data);
ItemMeta meta = item.getItemMeta();
+
if (meta != null)
{
if (_title != null)
@@ -189,14 +255,13 @@ public class ItemBuilder
((FireworkEffectMeta) meta).setEffect(FireworkEffect.builder().withColor(_color).build());
}
+ meta.addItemFlags(getItemFlags().toArray(new ItemFlag[0]));
meta.spigot().setUnbreakable(isUnbreakable());
item.setItemMeta(meta);
}
item.addUnsafeEnchantments(_enchants);
- // if (potion != null) {
- // potion.apply(item);
- // }
+
return item;
}
@@ -263,52 +328,6 @@ public class ItemBuilder
return _enchants.containsKey(enchant);
}
- public boolean isItem(ItemStack item)
- {
- ItemMeta meta = item.getItemMeta();
-
- if (item.getType() != getType())
- {
- return false;
- }
-
- if (!meta.hasDisplayName() && getTitle() != null)
- {
- return false;
- }
-
- if (!meta.getDisplayName().equals(getTitle()))
- {
- return false;
- }
-
- if (!meta.hasLore() && !getLore().isEmpty())
- {
- return false;
- }
-
- if (meta.hasLore())
- {
- for (String lore : meta.getLore())
- {
- if (!getLore().contains(lore))
- {
- return false;
- }
- }
- }
-
- for (Enchantment enchant : item.getEnchantments().keySet())
- {
- if (!hasEnchantment(enchant))
- {
- return false;
- }
- }
-
- return true;
- }
-
public boolean isUnbreakable()
{
return _unbreakable;
@@ -317,17 +336,14 @@ public class ItemBuilder
public ItemBuilder setAmount(int amount)
{
_amount = amount;
+
return this;
}
public ItemBuilder setColor(Color color)
{
- /* (!_mat.name().contains("LEATHER_"))
- {
- throw new IllegalArgumentException("Can only dye leather armor!");
- }*/
-
_color = color;
+
return this;
}
@@ -338,19 +354,10 @@ public class ItemBuilder
return this;
}
- public ItemBuilder setPotion(Potion potion)
- {
- if (_mat != Material.POTION)
- {
- _mat = Material.POTION;
- }
-
- return this;
- }
-
public ItemBuilder setRawTitle(String title)
{
_title = title;
+
return this;
}
@@ -378,24 +385,28 @@ public class ItemBuilder
}
setTitle(title);
+
return this;
}
public ItemBuilder setType(Material mat)
{
_mat = mat;
+
return this;
}
public ItemBuilder setUnbreakable(boolean setUnbreakable)
{
_unbreakable = setUnbreakable;
+
return this;
}
public ItemBuilder setPlayerHead(String playerName)
{
_playerHeadName = playerName;
+
return this;
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java b/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java
index 12bc7d776..47c37044a 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/monitor/LagMeter.java
@@ -5,6 +5,7 @@ import java.util.HashSet;
import mineplex.core.MiniPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.Rank;
+import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
@@ -18,6 +19,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
+import net.minecraft.server.v1_8_R3.MinecraftServer;
public class LagMeter extends MiniPlugin
{
@@ -128,9 +130,27 @@ public class LagMeter extends MiniPlugin
sendUpdate(player);
}
}
+
+ private String getPrefix(double value)
+ {
+ if (value >= 18.0)
+ return C.cGreen;
+ else if (value >= 15)
+ return C.cYellow;
+ else
+ return C.cRed;
+ }
private void sendUpdate(Player player)
{
+ double[] tps = MinecraftServer.getServer().recentTps;
+ String mcString = "";
+ for (int i = 0; i < tps.length; i++)
+ {
+ mcString += getPrefix(tps[i]) + (double)Math.round(tps[i] * 100.0D) / 100.0D;
+ if (i < tps.length - 1) mcString += C.cWhite + ", ";
+ }
+
player.sendMessage(" ");
player.sendMessage(" ");
player.sendMessage(" ");
@@ -138,6 +158,8 @@ public class LagMeter extends MiniPlugin
player.sendMessage(" ");
player.sendMessage(F.main(getName(), ChatColor.GRAY + "Live-------" + ChatColor.YELLOW + String.format("%.00f", _ticksPerSecond)));
player.sendMessage(F.main(getName(), ChatColor.GRAY + "Avg--------" + ChatColor.YELLOW + String.format("%.00f", _ticksPerSecondAverage * 20)));
+ player.sendMessage(F.main(getName(), ChatColor.YELLOW + "MC Timings (5,10,15 min avg)"));
+ player.sendMessage(F.main(getName(), ChatColor.GRAY + mcString));
player.sendMessage(F.main(getName(), ChatColor.YELLOW + "MEM"));
player.sendMessage(F.main(getName(), ChatColor.GRAY + "Free-------" + ChatColor.YELLOW + (Runtime.getRuntime().freeMemory() / 1048576) + "MB"));
player.sendMessage(F.main(getName(), ChatColor.GRAY + "Max--------" + ChatColor.YELLOW + (Runtime.getRuntime().maxMemory() / 1048576)) + "MB");
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 3abbf00e0..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;
@@ -75,7 +75,7 @@ public class MountCart extends Mount>
if (event.getRightClicked() == null)
return;
- SingleEntityMountData mount = GetActive().get(event.getPlayer());
+ SingleEntityMountData mount = getMountData(event.getRightClicked());
if(mount == null) return;
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 2a0b3831a..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,13 +31,10 @@ 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;
}
@@ -42,153 +42,155 @@ public class MountSlime extends Mount>
{
player.leaveVehicle();
player.eject();
-
+
//Remove other mounts
Manager.DeregisterAll(player);
-
+
SingleEntityMountData mount = new SingleEntityMountData(player, player.getWorld().spawn(player.getLocation(), Slime.class));
mount.getEntity().setSize(2);
-
+
mount.getEntity().setCustomName(player.getName() + "'s " + GetName());
//Inform
UtilPlayer.message(player, F.main("Mount", "You spawned " + F.elem(GetName()) + "."));
-
+
//Store
_active.put(player, mount);
}
-
+
public void Disable(Player player)
{
SingleEntityMountData mount = _active.remove(player);
if (mount != null)
{
mount.remove();
-
+
//Inform
UtilPlayer.message(player, F.main("Mount", "You despawned " + F.elem(GetName()) + "."));
-
+
Manager.removeActive(player);
}
}
-
+
@EventHandler
public void interactMount(PlayerInteractEntityEvent event)
{
if (event.getRightClicked() == null)
return;
-
- if (!GetActive().containsKey(event.getPlayer()))
- return;
-
- if(!GetActive().get(event.getPlayer()).ownsMount(event.getPlayer()))
- return;
-
+
+ SingleEntityMountData data = GetActive().get(event.getPlayer());
+
+ if(data == null) return;
+
+ if(!data.ownsMount(event.getPlayer())) return;
+
+ if(!data.isPartOfMount(event.getRightClicked())) return;
+
event.getPlayer().leaveVehicle();
event.getPlayer().eject();
-
+
event.getRightClicked().setPassenger(event.getPlayer());
}
-
+
@EventHandler
public void target(EntityTargetEvent event)
{
if (!GetActive().containsKey(event.getTarget()))
return;
-
+
if (!GetActive().get(event.getTarget()).equals(event.getEntity()))
event.setCancelled(true);
}
-
+
@EventHandler
public void updateBounce(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
-
+
//Bounce
for (SingleEntityMountData slimeData : GetActive().values())
{
Slime slime = slimeData.getEntity();
-
+
if (slime.getPassenger() == null)
{
UtilEnt.setFakeHead(slime, false);
continue;
}
-
+
if (!UtilEnt.isGrounded(slime))
continue;
-
+
if (!(slime.getPassenger() instanceof Player))
continue;
-
+
Player player = (Player)slime.getPassenger();
-
+
if (!Recharge.Instance.use(player, GetName(), 200, false, false))
continue;
Vector dir = slime.getPassenger().getLocation().getDirection();
-
+
UtilAction.velocity(slime, dir, 1, true, 0, 0.4, 1, true);
-
+
UtilEnt.CreatureForceLook(slime, 0, UtilAlg.GetYaw(dir));
-
+
slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_WALK, 1f, 0.75f);
}
-
+
//Collide
for (SingleEntityMountData slimeData : GetActive().values())
{
Slime slime = slimeData.getEntity();
if (slime.getPassenger() == null)
continue;
-
+
if (!(slime.getPassenger() instanceof Player))
continue;
-
+
Player player = (Player)slime.getPassenger();
-
+
if (!Recharge.Instance.usable(player, GetName() + " Collide"))
continue;
-
+
for (SingleEntityMountData otherSlime : GetActive().values())
{
Slime other = otherSlime.getEntity();
-
+
if (other.equals(slime))
continue;
-
+
if (other.getPassenger() == null)
continue;
-
+
if (!(other.getPassenger() instanceof Player))
continue;
-
+
Player otherPlayer = (Player)other.getPassenger();
-
+
if (!Recharge.Instance.usable(otherPlayer, GetName() + " Collide"))
continue;
-
+
//Collide
if (UtilMath.offset(slime, other) > 2)
continue;
-
+
Recharge.Instance.useForce(player, GetName() + " Collide", 500);
Recharge.Instance.useForce(otherPlayer, GetName() + " Collide", 500);
-
+
UtilAction.velocity(slime, UtilAlg.getTrajectory(other, slime), 1.2, false, 0, 0.8, 10, true);
UtilAction.velocity(other, UtilAlg.getTrajectory(slime, other), 1.2, false, 0, 0.8, 10, true);
-
+
slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_ATTACK, 1f, 0.5f);
slime.getWorld().playSound(slime.getLocation(), Sound.SLIME_WALK, 1f, 0.5f);
other.getWorld().playSound(other.getLocation(), Sound.SLIME_WALK, 1f, 0.5f);
-
+
slime.playEffect(EntityEffect.HURT);
other.playEffect(EntityEffect.HURT);
}
}
}
-
-
+
+
}
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/noteblock/INoteVerifier.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/INoteVerifier.java
new file mode 100644
index 000000000..f423c6394
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/INoteVerifier.java
@@ -0,0 +1,10 @@
+package mineplex.core.noteblock;
+
+import org.bukkit.entity.Player;
+
+public interface INoteVerifier
+{
+
+ public boolean shouldPlay(Player player);
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NBSReader.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NBSReader.java
new file mode 100644
index 000000000..e7844c9d1
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NBSReader.java
@@ -0,0 +1,134 @@
+package mineplex.core.noteblock;
+
+import java.io.DataInputStream;
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.HashMap;
+
+/**
+ * Information about the NBS Format was taken from
+ * http://www.stuffbydavid.com/mcnbs/format
+ */
+public class NBSReader
+{
+ public static NoteSong loadSong(String fileName) throws FileNotFoundException
+ {
+ return loadSong(new DataInputStream(new FileInputStream(new File(fileName))), fileName);
+ }
+
+ public static NoteSong loadSong(DataInputStream stream, String defaultName)
+ {
+ try
+ {
+ // Header Information
+ short length = readShort(stream);
+ short height = readShort(stream);
+ String name = readString(stream);
+ String author = readString(stream);
+ String originalAuthor = readString(stream);
+ String description = readString(stream);
+ short tempo = readShort(stream); // Tempo multiplied by 1000
+ boolean autosave = stream.readBoolean();
+ byte autosaveDuration = stream.readByte();
+ byte timeSignature = stream.readByte();
+ int minutesSpent = readInt(stream);
+ int leftClicks = readInt(stream);
+ int rightClicks = readInt(stream);
+ int blocksAdded = readInt(stream);
+ int blocksRemoved = readInt(stream);
+ String midiFileName = readString(stream);
+
+ if ((name == null || name.length() == 0) && defaultName != null)
+ name = defaultName;
+
+ HashMap layerMap = new HashMap();
+
+ // Note Block Information
+ int tick = -1;
+ int jumps = 0;
+ while (true)
+ {
+ jumps = readShort(stream);
+ if (jumps == 0)
+ break;
+ tick += jumps;
+ int layer = -1;
+ while (true)
+ {
+ jumps = readShort(stream);
+ if (jumps == 0)
+ break;
+ layer += jumps;
+ byte instrument = stream.readByte();
+ byte key = stream.readByte();
+
+ Note note = new Note(instrument, key);
+ NoteLayer noteLayer = layerMap.get(layer);
+ if (noteLayer == null)
+ {
+ noteLayer = new NoteLayer();
+ layerMap.put(layer, noteLayer);
+ }
+ noteLayer.setNote(tick, note);
+ }
+ }
+
+ // Layer Information
+ for (int i = 0; i < height; i++)
+ {
+ NoteLayer layer = layerMap.get(i);
+ if (layer != null)
+ {
+ layer.setName(readString(stream));
+ layer.setVolume(stream.readByte());
+ }
+ }
+
+ System.out.println("[NBSReader] Successfully loaded song " + name + "");
+ System.out.println("Tempo: " + tempo);
+ return new NoteSong(length, height, name, tempo, timeSignature, layerMap);
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+ private static int readInt(DataInputStream stream) throws IOException
+ {
+ // For some reason the bytes are in reverse order from stream.readInt()
+ int ch1 = stream.read();
+ int ch2 = stream.read();
+ int ch3 = stream.read();
+ int ch4 = stream.read();
+ if ((ch1 | ch2 | ch3 | ch4) < 0)
+ throw new EOFException();
+ return ((ch4 << 24) + (ch3 << 16) + (ch2 << 8) + ch1);
+ }
+
+ private static short readShort(DataInputStream stream) throws IOException
+ {
+ // For some reason the bytes are in reverse order from stream.readShort()
+ int ch1 = stream.read();
+ int ch2 = stream.read();
+ if ((ch1 | ch2) < 0)
+ throw new EOFException();
+ return (short)((ch2 << 8) + ch1);
+ }
+
+ private static String readString(DataInputStream stream) throws IOException
+ {
+ int length = readInt(stream);
+ char[] string = new char[length];
+ for (int i = 0; i < length; i++)
+ {
+ string[i] = (char) stream.readByte();
+ }
+ return new String(string);
+ }
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/Note.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/Note.java
new file mode 100644
index 000000000..223d56011
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/Note.java
@@ -0,0 +1,26 @@
+package mineplex.core.noteblock;
+
+/**
+ * Represents a single note to be played
+ */
+public class Note
+{
+ private byte _instrument;
+ private byte _note;
+
+ public Note(byte instrument, byte note)
+ {
+ _instrument = instrument;
+ _note = note;
+ }
+
+ public byte getInstrument()
+ {
+ return _instrument;
+ }
+
+ public byte getNote()
+ {
+ return _note;
+ }
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NoteLayer.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NoteLayer.java
new file mode 100644
index 000000000..6c83bbab1
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NoteLayer.java
@@ -0,0 +1,50 @@
+package mineplex.core.noteblock;
+
+import java.util.HashMap;
+
+/**
+ * Represents a layer of notes in Note Block Studio
+ */
+public class NoteLayer
+{
+ private HashMap _noteMap; // Notes indexed by ticks
+ private int _volume; // Volume as a percentage 1-100
+ private String _name;
+
+ public NoteLayer()
+ {
+ _noteMap = new HashMap();
+ _volume = 100;
+ _name = "";
+ }
+
+ public int getVolume()
+ {
+ return _volume;
+ }
+
+ public void setVolume(int volume)
+ {
+ _volume = volume;
+ }
+
+ public String getName()
+ {
+ return _name;
+ }
+
+ public void setName(String name)
+ {
+ _name = name;
+ }
+
+ public void setNote(int ticks, Note note)
+ {
+ _noteMap.put(ticks, note);
+ }
+
+ public Note getNote(int ticks)
+ {
+ return _noteMap.get(ticks);
+ }
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NotePlayer.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NotePlayer.java
new file mode 100644
index 000000000..941bc1dd9
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NotePlayer.java
@@ -0,0 +1,122 @@
+package mineplex.core.noteblock;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import mineplex.core.common.util.UtilServer;
+import mineplex.core.noteblock.event.SongFinishEvent;
+import mineplex.core.noteblock.event.SongStartEvent;
+
+public class NotePlayer
+{
+ private final JavaPlugin _plugin;
+ private final NoteSong _song;
+ private final INoteVerifier _verifier;
+ private final long _sleepMs;
+ private volatile float _volumeMult;
+ private volatile boolean _loop;
+ private volatile int _tick;
+ private volatile boolean _finished;
+
+ public NotePlayer(JavaPlugin plugin, NoteSong song, INoteVerifier verifier, float volumeMult, boolean loop)
+ {
+ _plugin = plugin;
+ _song = song;
+ _verifier = verifier;
+ _sleepMs = (long) (1000 / (song.getTempo() / 100D));
+ _loop = loop;
+ _tick = 0;
+ _volumeMult = volumeMult;
+ _finished = false;
+
+ startThread();
+
+ SongStartEvent event = new SongStartEvent(_song);
+ _plugin.getServer().getPluginManager().callEvent(event);
+ }
+
+ private void startThread()
+ {
+ Thread thread = new Thread(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ long startTime = System.currentTimeMillis();
+ while (!_finished)
+ {
+ _tick++;
+ if (_tick > _song.getLength())
+ {
+ if (_loop)
+ {
+ _tick = 1;
+ }
+ else
+ {
+ _finished = true;
+
+ _plugin.getServer().getScheduler().runTask(_plugin, new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ SongFinishEvent event = new SongFinishEvent(_song);
+ _plugin.getServer().getPluginManager().callEvent(event);
+ }
+ });
+
+ return;
+ }
+ }
+
+ playTick(_tick);
+
+ try
+ {
+ Thread.sleep(_sleepMs);
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+ });
+
+ thread.start();
+ }
+
+ private void playTick(int tick)
+ {
+ Player[] playerArray = UtilServer.getPlayers();
+ List players = new ArrayList<>(playerArray.length);
+ for (Player player : playerArray)
+ {
+ if (_verifier.shouldPlay(player))
+ players.add(player);
+ }
+
+ for (NoteLayer layer : _song.getLayers())
+ {
+ Note note = layer.getNote(tick);
+ if (note != null)
+ {
+ float volume = _volumeMult * (layer.getVolume() / 100F);
+ for (Player player : players)
+ {
+ player.playSound(player.getEyeLocation(), UtilNote.getInstrumentSound(note.getInstrument()), volume, (float) UtilNote.getPitch(note.getNote() - 33));
+ }
+ }
+ }
+ }
+
+ public void cancel()
+ {
+ _finished = true;
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NoteSong.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NoteSong.java
new file mode 100644
index 000000000..ee892552b
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/NoteSong.java
@@ -0,0 +1,57 @@
+package mineplex.core.noteblock;
+
+import java.util.Collection;
+import java.util.HashMap;
+
+public class NoteSong
+{
+ // Song Data
+ private short _length;
+ private short _height;
+ private String _name;
+ private short _tempo;
+ private byte _timeSignature;
+
+ // Layer Data
+ private HashMap _layerMap;
+
+ public NoteSong(short length, short height, String name, short tempo, byte timeSignature, HashMap layerMap)
+ {
+ _length = length;
+ _height = height;
+ _name = name;
+ _tempo = tempo;
+ _timeSignature = timeSignature;
+ _layerMap = layerMap;
+ }
+
+ public short getLength()
+ {
+ return _length;
+ }
+
+ public short getHeight()
+ {
+ return _height;
+ }
+
+ public String getName()
+ {
+ return _name;
+ }
+
+ public short getTempo()
+ {
+ return _tempo;
+ }
+
+ public byte getTimeSignature()
+ {
+ return _timeSignature;
+ }
+
+ public Collection getLayers()
+ {
+ return _layerMap.values();
+ }
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/UtilNote.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/UtilNote.java
new file mode 100644
index 000000000..4ac15643e
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/UtilNote.java
@@ -0,0 +1,42 @@
+package mineplex.core.noteblock;
+
+import org.bukkit.Sound;
+
+/**
+ * See http://minecraft.gamepedia.com/Note_Block for information about pitches
+ */
+public class UtilNote
+{
+ private static final double[] PITCH = { 0.5, 0.53, 0.56, 0.6, 0.63, 0.67, 0.7, 0.76, 0.8, 0.84, 0.9, 0.94, 1.0,
+ 1.06, 1.12, 1.18, 1.26, 1.34, 1.42, 1.5, 1.6, 1.68, 1.78, 1.88, 2.0 };
+
+ public static Sound getInstrumentSound(byte instrument)
+ {
+ switch (instrument)
+ {
+ case 0:
+ return Sound.NOTE_PIANO;
+ case 1:
+ return Sound.NOTE_BASS_GUITAR;
+ case 2:
+ return Sound.NOTE_BASS_DRUM;
+ case 3:
+ return Sound.NOTE_SNARE_DRUM;
+ case 4:
+ return Sound.NOTE_STICKS;
+ default:
+ return Sound.NOTE_PIANO;
+ }
+ }
+
+ public static double getPitch(int note)
+ {
+ if (note >= 0 && note < PITCH.length)
+ {
+ return PITCH[note];
+ }
+
+ return 0.0;
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/event/SongFinishEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/event/SongFinishEvent.java
new file mode 100644
index 000000000..863537903
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/event/SongFinishEvent.java
@@ -0,0 +1,25 @@
+package mineplex.core.noteblock.event;
+
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+
+import mineplex.core.noteblock.NoteSong;
+
+public class SongFinishEvent extends Event
+{
+ private static final HandlerList handlers = new HandlerList();
+ public static HandlerList getHandlerList() { return handlers; }
+ public HandlerList getHandlers() { return handlers; }
+
+ private NoteSong _song;
+
+ public SongFinishEvent(NoteSong song)
+ {
+ _song = song;
+ }
+
+ public NoteSong getSong()
+ {
+ return _song;
+ }
+}
\ No newline at end of file
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/noteblock/event/SongStartEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/event/SongStartEvent.java
new file mode 100644
index 000000000..00993f7c8
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/noteblock/event/SongStartEvent.java
@@ -0,0 +1,25 @@
+package mineplex.core.noteblock.event;
+
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+
+import mineplex.core.noteblock.NoteSong;
+
+public class SongStartEvent extends Event
+{
+ private static final HandlerList handlers = new HandlerList();
+ public static HandlerList getHandlerList() { return handlers; }
+ public HandlerList getHandlers() { return handlers; }
+
+ private NoteSong _song;
+
+ public SongStartEvent(NoteSong song)
+ {
+ _song = song;
+ }
+
+ public NoteSong getSong()
+ {
+ return _song;
+ }
+}
\ No newline at end of file
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/notifier/NotificationManager.java b/Plugins/Mineplex.Core/src/mineplex/core/notifier/NotificationManager.java
index 53c841b6c..8e4cb3dc7 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/notifier/NotificationManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/notifier/NotificationManager.java
@@ -1,5 +1,6 @@
package mineplex.core.notifier;
+import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -12,14 +13,16 @@ import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
+import mineplex.core.preferences.PreferencesManager;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
public class NotificationManager extends MiniPlugin
{
- private boolean _enabled = false;
+ private boolean _enabled = true;
private CoreClientManager _clientManager;
+ private PreferencesManager _preferencesManager;
private String _summerLine =
C.cYellow + "█" + C.cBlack + "█" + C.cYellow + "█" + C.cBlack + "█" + C.cYellow + "█" + C.cBlack + "█" +
@@ -29,11 +32,12 @@ public class NotificationManager extends MiniPlugin
C.cYellow + "█" + C.cBlack + "█" + C.cYellow + "█" + C.cBlack + "█" + C.cYellow + "█" + C.cBlack + "█" +
C.cYellow + "█" + C.cBlack + "█" + C.cYellow + "█" + C.cBlack + "█" + C.cYellow + "█";
- public NotificationManager(JavaPlugin plugin, CoreClientManager client)
+ public NotificationManager(JavaPlugin plugin, CoreClientManager client, PreferencesManager preferencesManager)
{
super("Notification Manager", plugin);
_clientManager = client;
+ _preferencesManager = preferencesManager;
}
@EventHandler
@@ -48,8 +52,25 @@ public class NotificationManager extends MiniPlugin
// if (event.getType() == UpdateType.MIN_16)
// sale();
+ if (event.getType() == UpdateType.MIN_08)
+ christmasSale();
}
+ private void christmasSale()
+ {
+ for (Player player : UtilServer.getPlayers())
+ {
+ if (!_preferencesManager.Get(player).DisableAds)
+ {
+ player.sendMessage(C.cWhite + " ");
+ player.sendMessage(C.cRedB + " MASSIVE WINTER SALE");
+ player.sendMessage(C.cWhiteB + " 50% OFF ALL RANKS");
+ player.sendMessage(" " + C.cGreen + C.Line + "www.mineplex.com/shop");
+ player.sendMessage(C.cWhite + " ");
+ }
+ }
+ }
+
private void sale()
{
for (Player player : UtilServer.getPlayers())
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
new file mode 100644
index 000000000..71595c42a
--- /dev/null
+++ b/Plugins/Mineplex.Core/src/mineplex/core/playerCount/PlayerCountManager.java
@@ -0,0 +1,73 @@
+package mineplex.core.playerCount;
+
+import org.bukkit.event.EventHandler;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import mineplex.core.MiniPlugin;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+import mineplex.serverdata.Region;
+import mineplex.serverdata.data.BungeeServer;
+import mineplex.serverdata.data.DataRepository;
+import mineplex.serverdata.redis.RedisDataRepository;
+import mineplex.serverdata.servers.ConnectionData;
+import mineplex.serverdata.servers.ServerManager;
+
+public class PlayerCountManager extends MiniPlugin
+{
+ private Region _region;
+ private DataRepository _repository;
+ private DataRepository _secondRepository;
+
+ private volatile int _playerCount = 0;
+
+ public PlayerCountManager(JavaPlugin plugin)
+ {
+ super("PlayerCount", plugin);
+
+ _region = plugin.getConfig().getBoolean("serverstatus.us") ? Region.US : Region.EU;
+
+ _repository = new RedisDataRepository(ServerManager.getConnection(true, ServerManager.SERVER_STATUS_LABEL), ServerManager.getConnection(false, ServerManager.SERVER_STATUS_LABEL),
+ Region.ALL, BungeeServer.class, "bungeeServers");
+
+ if (_region == Region.US)
+ _secondRepository = new RedisDataRepository(new ConnectionData("10.81.1.156", 6379, ConnectionData.ConnectionType.MASTER, "ServerStatus"), new ConnectionData("10.81.1.156", 6377, ConnectionData.ConnectionType.SLAVE, "ServerStatus"),
+ Region.ALL, BungeeServer.class, "bungeeServers");
+ else
+ _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();
+ }
+
+ private void updatePlayerCount()
+ {
+ int totalPlayers = 0;
+ for (BungeeServer server : _repository.getElements())
+ {
+ totalPlayers += server.getPlayerCount();
+ }
+
+ for (BungeeServer server : _secondRepository.getElements())
+ {
+ totalPlayers += server.getPlayerCount();
+ }
+
+ _playerCount = totalPlayers;
+ }
+
+ public int getPlayerCount()
+ {
+ return _playerCount;
+ }
+
+ @EventHandler
+ public void refresh(UpdateEvent event)
+ {
+ if (event.getType() != UpdateType.SLOW)
+ return;
+
+ runAsync(this::updatePlayerCount);
+ }
+
+}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/portal/Commands/ServerCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/portal/Commands/ServerCommand.java
index b4ac74e62..ef2a4da64 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/portal/Commands/ServerCommand.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/portal/Commands/ServerCommand.java
@@ -84,19 +84,6 @@ public class ServerCommand extends CommandBase
else
deniedAccess = true;
}
- else if (servUp.contains("CLANS-"))
- {
- if (playerRank.has(Rank.MODERATOR))
- {
- Plugin.sendPlayerToServer(player, args[0]);
- }
- else
- {
- UtilPlayer.message(player,
- F.main(Plugin.getName(), C.cRed + "You must join clans through the hub! Join " + C.cGold + "ClansHub-1"
- + C.cRed + "!"));
- }
- }
else
{
Plugin.sendPlayerToServer(player, args[0]);
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesManager.java b/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesManager.java
index 82eec02d1..ae7f67755 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesManager.java
@@ -136,6 +136,6 @@ public class PreferencesManager extends MiniDbClientPlugin
@Override
public String getQuery(int accountId, String uuid, String name)
{
- return "SELECT games, visibility, showChat, friendChat, privateMessaging, partyRequests, invisibility, forcefield, showMacReports, ignoreVelocity, pendingFriendRequests, friendDisplayInventoryUI, clanTips FROM accountPreferences WHERE accountPreferences.uuid = '" + uuid + "' LIMIT 1;";
+ return "SELECT games, visibility, showChat, friendChat, privateMessaging, partyRequests, invisibility, forcefield, showMacReports, ignoreVelocity, pendingFriendRequests, friendDisplayInventoryUI, clanTips, hubMusic, disableAds FROM accountPreferences WHERE accountPreferences.uuid = '" + uuid + "' LIMIT 1;";
}
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesRepository.java b/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesRepository.java
index 7449c83c9..eca4dd35f 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesRepository.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesRepository.java
@@ -24,7 +24,7 @@ public class PreferencesRepository extends RepositoryBase
// DEFAULT 0, showMacReports BOOL NOT NULL DEFAULT 0, ignoreVelocity BOOL
// NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE INDEX uuid_index (uuid));";
private static String INSERT_ACCOUNT = "INSERT INTO accountPreferences (uuid) VALUES (?) ON DUPLICATE KEY UPDATE uuid=uuid;";
- private static String UPDATE_ACCOUNT_PREFERENCES = "UPDATE accountPreferences SET games = ?, visibility = ?, showChat = ?, friendChat = ?, privateMessaging = ?, partyRequests = ?, invisibility = ?, forcefield = ?, showMacReports = ?, ignoreVelocity = ?, pendingFriendRequests = ?, friendDisplayInventoryUI = ?, clanTips = ? WHERE uuid=?;";
+ private static String UPDATE_ACCOUNT_PREFERENCES = "UPDATE accountPreferences SET games = ?, visibility = ?, showChat = ?, friendChat = ?, privateMessaging = ?, partyRequests = ?, invisibility = ?, forcefield = ?, showMacReports = ?, ignoreVelocity = ?, pendingFriendRequests = ?, friendDisplayInventoryUI = ?, clanTips = ?, hubMusic = ?, disableAds = ? WHERE uuid=?;";
public PreferencesRepository(JavaPlugin plugin)
{
@@ -61,8 +61,10 @@ public class PreferencesRepository extends RepositoryBase
preparedStatement.setBoolean(11, entry.getValue().PendingFriendRequests);
preparedStatement.setBoolean(12, entry.getValue().friendDisplayInventoryUI);
preparedStatement.setBoolean(13, entry.getValue().ClanTips);
+ preparedStatement.setBoolean(14, entry.getValue().HubMusic);
+ preparedStatement.setBoolean(15, entry.getValue().DisableAds);
System.out.println(">> " + entry.getValue().ClanTips);
- preparedStatement.setString(14, entry.getKey());
+ preparedStatement.setString(16, entry.getKey());
preparedStatement.addBatch();
}
@@ -89,8 +91,10 @@ public class PreferencesRepository extends RepositoryBase
preparedStatement.setBoolean(11, entry.getValue().PendingFriendRequests);
preparedStatement.setBoolean(12, entry.getValue().friendDisplayInventoryUI);
preparedStatement.setBoolean(13, entry.getValue().ClanTips);
+ preparedStatement.setBoolean(14, entry.getValue().HubMusic);
+ preparedStatement.setBoolean(15, entry.getValue().DisableAds);
System.out.println(">> " + entry.getValue().ClanTips);
- preparedStatement.setString(14, entry.getKey());
+ preparedStatement.setString(16, entry.getKey());
preparedStatement.execute();
}
@@ -122,7 +126,8 @@ public class PreferencesRepository extends RepositoryBase
preferences.PendingFriendRequests = resultSet.getBoolean(11);
preferences.friendDisplayInventoryUI = resultSet.getBoolean(12);
preferences.ClanTips = resultSet.getBoolean(13);
- System.out.println("<< " + resultSet.getBoolean(13));
+ preferences.HubMusic = resultSet.getBoolean(14);
+ preferences.DisableAds = resultSet.getBoolean(15);
}
return preferences;
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/preferences/UserPreferences.java b/Plugins/Mineplex.Core/src/mineplex/core/preferences/UserPreferences.java
index 728f549e2..ee8e1ca3b 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/preferences/UserPreferences.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/preferences/UserPreferences.java
@@ -16,4 +16,6 @@ public class UserPreferences
public boolean PendingFriendRequests = true;
public boolean friendDisplayInventoryUI = true;
public boolean ClanTips = true;
+ public volatile boolean HubMusic = true;
+ public boolean DisableAds = false;
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/ExclusivePreferencesPage.java b/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/ExclusivePreferencesPage.java
index 53c774a0e..272b5fe38 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/ExclusivePreferencesPage.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/ExclusivePreferencesPage.java
@@ -189,6 +189,6 @@ public class ExclusivePreferencesPage extends ShopPageBase _profileRepository;
-// private Gson _gson;
-//
-// public ProfileCacheManager(JavaPlugin plugin)
-// {
-// super("Profile Cache", plugin);
-//
-// _profileRepository = new RedisDataRepository(ServerManager.getMasterConnection(), ServerManager.getSlaveConnection(),
-// Region.ALL, ProfileData.class, "profileCacheRepo");
-//
-// GsonBuilder builder = new GsonBuilder();
-// builder.registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer());
-// builder.registerTypeAdapter(UUID.class, new UUIDTypeAdapter());
-// builder.registerTypeAdapter(ProfileSearchResultsResponse.class, new net.minecraft.util.com.mojang.authlib.yggdrasil.response.ProfileSearchResultsResponse.Serializer());
-// _gson = builder.create();
-//
-// try
-// {
-// YggdrasilMinecraftSessionService.setProfileCache(this);
-// YggdrasilGameProfileRepository.setProfileCache(this);
-// }
-// catch (Exception e)
-// {
-// System.out.println("================================================");
-// System.out.println("Failed to load Profile Cache (Skins)");
-// System.out.println("Are you using the correct modified Craftbukkit?");
-// System.out.println("================================================");
-// }
-// }
-//
-//
-// @Override
-// public GameProfile attemptToLoadProfile(String playerName)
-// {
-// ProfileData profile = _profileRepository.getElement(playerName.toLowerCase());
-//
-// if (profile != null)
-// {
-// PropertyMap propertyMap = _gson.fromJson(profile.getPropertyMap(), PropertyMap.class);
-// GameProfile gameProfile = new GameProfile(profile.getUuid(), profile.getPlayerName());
-// gameProfile.getProperties().putAll(propertyMap);
-//
-//// System.out.println("Loaded profile " + playerName + " from repository!");
-// return gameProfile;
-// }
-//
-//// System.out.println("Profile Null");
-//
-// return null;
-// }
-//
-// @Override
-// public void cacheProfile(GameProfile profile)
-// {
-//// System.out.println("Cached profile: " + profile.getName());
-// ProfileData data = new ProfileData(profile.getId(), profile.getName(), _gson.toJson(profile.getProperties()));
-// _profileRepository.addElement(data, 60 * 60 * 24); // 1 day
-// }
-//}
+package mineplex.core.profileCache;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.bukkit.Bukkit;
+import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
+import org.bukkit.event.EventHandler;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.mojang.authlib.Agent;
+import com.mojang.authlib.GameProfile;
+import com.mojang.authlib.GameProfileRepository;
+import com.mojang.authlib.ProfileLookupCallback;
+import com.mojang.authlib.properties.PropertyMap;
+import com.mojang.authlib.yggdrasil.YggdrasilGameProfileRepository;
+import com.mojang.authlib.yggdrasil.response.ProfileSearchResultsResponse;
+import com.mojang.util.UUIDTypeAdapter;
+
+import mineplex.core.MiniPlugin;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+import mineplex.serverdata.Region;
+import mineplex.serverdata.redis.RedisDataRepository;
+import mineplex.serverdata.servers.ServerManager;
+
+public class ProfileCacheManager extends MiniPlugin implements GameProfileRepository
+{
+ private YggdrasilGameProfileRepository _mojangProfileRepository;
+ private RedisDataRepository _profileRepository;
+ private Gson _gson;
+
+ public ProfileCacheManager(JavaPlugin plugin)
+ {
+ super("Profile Cache", plugin);
+
+ _profileRepository = new RedisDataRepository(ServerManager.getMasterConnection(), ServerManager.getSlaveConnection(),
+ Region.ALL, ProfileData.class, "profileCacheRepo");
+
+ GsonBuilder builder = new GsonBuilder();
+ builder.registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer());
+ builder.registerTypeAdapter(UUID.class, new UUIDTypeAdapter());
+ builder.registerTypeAdapter(ProfileSearchResultsResponse.class, new com.mojang.authlib.yggdrasil.response.ProfileSearchResultsResponse.Serializer());
+ _gson = builder.create();
+
+ try
+ {
+ Field mojangProfileRepo = net.minecraft.server.v1_8_R3.MinecraftServer.class.getDeclaredField("Y");
+
+ mojangProfileRepo.setAccessible(true);
+
+ _mojangProfileRepository = (YggdrasilGameProfileRepository) mojangProfileRepo.get(((CraftServer)Bukkit.getServer()).getServer());
+ mojangProfileRepo.set(((CraftServer)Bukkit.getServer()).getServer(), this);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ System.out.println("================================================");
+ System.out.println("Failed to load Profile Cache (Skins)");
+ System.out.println("Are you using the correct modified Craftbukkit?");
+ System.out.println("================================================");
+ }
+ }
+
+
+ public GameProfile attemptToLoadProfile(String playerName)
+ {
+ ProfileData profile = _profileRepository.getElement(playerName.toLowerCase());
+
+ if (profile != null)
+ {
+ PropertyMap propertyMap = _gson.fromJson(profile.getPropertyMap(), PropertyMap.class);
+ GameProfile gameProfile = new GameProfile(profile.getUuid(), profile.getPlayerName());
+ gameProfile.getProperties().putAll(propertyMap);
+ return gameProfile;
+ }
+
+ return null;
+ }
+
+ public void cacheProfile(final GameProfile profile)
+ {
+ if (Bukkit.isPrimaryThread())
+ {
+ runAsync(new Runnable()
+ {
+ public void run()
+ {
+ cacheProfileSafely(profile);
+ }
+ });
+ }
+ else
+ cacheProfileSafely(profile);
+ }
+
+ @Override
+ public void findProfilesByNames(String[] profileNames, Agent agent, ProfileLookupCallback profileLookupCallback)
+ {
+ List uncachedProfileNames = new ArrayList<>();
+
+ for (String profileName : profileNames)
+ {
+ GameProfile profile = attemptToLoadProfile(profileName);
+
+ if (profile == null)
+ uncachedProfileNames.add(profileName);
+ else
+ profileLookupCallback.onProfileLookupSucceeded(profile);
+ }
+
+ _mojangProfileRepository.findProfilesByNames(uncachedProfileNames.toArray(new String[uncachedProfileNames.size()]), agent, new ProfileCacheLookupCallback(this, profileLookupCallback));
+ }
+
+ @EventHandler
+ public void clearRepository(UpdateEvent event)
+ {
+ if (event.getType() != UpdateType.MIN_10)
+ return;
+
+ _profileRepository.clean();
+ }
+
+ private void cacheProfileSafely(GameProfile profile)
+ {
+ ProfileData data = new ProfileData(profile.getId(), profile.getName(), _gson.toJson(profile.getProperties()));
+ _profileRepository.addElement(data, 60 * 60 * 24); // 1 day
+ }
+}
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..42d757d03 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 = 6000;
+
+
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, _legendaryShards));
+ addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Arrow Effect", "Candy Cane Arrows", "Candy Cane Arrows",
+ new ItemStack(Material.SNOW_BALL), rarity, 5, _legendaryShards));
+ addReward(RewardPool.Type.WINTER_HOLIDAY, new UnknownPackageReward(donationManager, "Jump Effect", "Candy Cane Blast", "Candy Cane Blast",
+ new ItemStack(Material.SNOW_BALL), rarity, 5, _legendaryShards));
// 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 Hat",
+ 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, _rareShards));
+
// 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,11 +480,8 @@ public class RewardManager
}
}
- if ((player == null || treasure.canGiveReward(player)) && !isExcluded)
- {
- possibleRewards.add(treasure);
- totalWeight += treasure.getWeight();
- }
+ possibleRewards.add(treasure);
+ totalWeight += treasure.getWeight();
}
if (possibleRewards.size() == 0)
@@ -450,11 +489,8 @@ public class RewardManager
// 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 +504,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..eb010d496 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, 6, 20, 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 113f8a6cf..d3dba4662 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/PetReward.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/PetReward.java
@@ -5,6 +5,7 @@ import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
+import mineplex.cache.player.PlayerCache;
import mineplex.core.donation.DonationManager;
import mineplex.core.inventory.InventoryManager;
import mineplex.core.pet.PetManager;
@@ -13,7 +14,6 @@ import mineplex.core.pet.repository.token.PetToken;
import mineplex.core.reward.RewardData;
import mineplex.core.reward.RewardRarity;
import mineplex.core.reward.RewardType;
-import mineplex.playerCache.PlayerCache;
/**
* Created by shaun on 14-09-18.
@@ -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/scoreboard/PlayerScoreboard.java b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/PlayerScoreboard.java
index ef8e05796..33fd0a308 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/PlayerScoreboard.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/scoreboard/PlayerScoreboard.java
@@ -106,6 +106,10 @@ public class PlayerScoreboard
continue;
}
+ // Ignore extra lines
+ if (i >= _teamNames.length)
+ continue;
+
//Update
Team team = _scoreboard.getTeam(_teamNames[i]);
if (team == null)
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
{
@@ -91,41 +91,14 @@ public class StatsManager extends MiniDbClientPlugin
UtilServer.getServer().getPluginManager().callEvent(new StatChangeEvent(player.getName(), statName, newValue - value, newValue));
// Verify stat is in our local cache, if not add it remotely.
- if (!_stats.containsKey(statName))
+ registerNewStat(statName, new Runnable()
{
- runAsync(new Runnable()
+ @Override
+ public void run()
{
- public void run()
- {
- synchronized (_statSync)
- {
- // If many players come in for a new stat, when the first add finishes the others are queued to add again
- // This makes a second check for the stat name (already added before lock was released)
- // Then it pops into queue and forgets adding the new stat to db.
- if (_stats.containsKey(statName))
- {
- addToQueue(statName, player, value);
- return;
- }
-
- _repository.addStat(statName);
-
- _stats.clear();
-
- for (Stat stat : _repository.retrieveStats())
- {
- _stats.put(stat.Name, stat.Id);
- }
-
- addToQueue(statName, player, value);
- }
- }
- });
- }
- else
- {
- addToQueue(statName, player, value);
- }
+ addToQueue(statName, player, value);
+ }
+ });
}
private void addToQueue(String statName, Player player, long value)
@@ -192,23 +165,51 @@ public class StatsManager extends MiniDbClientPlugin
public boolean incrementStat(final int accountId, final String statName, final long value)
{
- if (_stats.containsKey(statName))
- return false;
-
- final NautHashMap> uploadQueue = new NautHashMap>();
- uploadQueue.put(accountId, new NautHashMap());
- uploadQueue.get(accountId).put(_stats.get(statName), value);
-
- runAsync(new Runnable()
+ // This will register a new stat if we don't have one, otherwise it will just run the callback
+ registerNewStat(statName, new Runnable()
{
+ @Override
public void run()
{
+ final NautHashMap> uploadQueue = new NautHashMap>();
+ uploadQueue.put(accountId, new NautHashMap());
+ uploadQueue.get(accountId).put(_stats.get(statName), value);
+
_repository.saveStats(uploadQueue);
}
});
return true;
}
+
+ private void registerNewStat(final String statName, final Runnable callback)
+ {
+ runAsync(new Runnable()
+ {
+ public void run()
+ {
+ synchronized (_statSync)
+ {
+ if (_stats.containsKey(statName))
+ {
+ if (callback != null) callback.run();
+ return;
+ }
+
+ _repository.addStat(statName);
+
+ _stats.clear();
+
+ for (Stat stat : _repository.retrieveStats())
+ {
+ _stats.put(stat.Name, stat.Id);
+ }
+
+ if (callback != null) callback.run();
+ }
+ }
+ });
+ }
public int getStatId(String statName)
{
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java
index 3a9e8601f..85608613e 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/task/TaskManager.java
@@ -5,12 +5,12 @@ import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
+import mineplex.cache.player.PlayerCache;
import mineplex.core.MiniDbClientPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.NautHashMap;
import mineplex.core.task.repository.TaskRepository;
-import mineplex.playerCache.PlayerCache;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titangiveaway/redis/GiveawayMessageHandler.java b/Plugins/Mineplex.Core/src/mineplex/core/titangiveaway/redis/GiveawayMessageHandler.java
index 93bd6183e..3afc7c3c1 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/titangiveaway/redis/GiveawayMessageHandler.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/titangiveaway/redis/GiveawayMessageHandler.java
@@ -32,7 +32,7 @@ public class GiveawayMessageHandler implements CommandCallback
String playerName = message.getPlayerName();
int count = message.getTitanCount();
String countString = count + UtilTime.getDayOfMonthSuffix(count);
- String chatMessage = C.cRed + playerName + C.cWhite + " found Titan in a " + C.cRed + "Flaming Pumpkin";
+ String chatMessage = C.cRed + playerName + C.cWhite + " found Titan in a " + C.cRed + "Christmas Present";
UtilTextMiddle.display(C.cDRed + C.Bold + "TITAN", chatMessage, 20, 80, 20, UtilServer.getPlayers());
World world = UtilServer.getPlayers().length > 0 ? UtilServer.getPlayers()[0].getWorld() : Bukkit.getWorlds().get(0);
LightFlicker lightFlicker = new LightFlicker(world);
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/titangiveaway/redis/TitanChestGiveawayHandler.java b/Plugins/Mineplex.Core/src/mineplex/core/titangiveaway/redis/TitanChestGiveawayHandler.java
index 65081a2d8..0c99ada73 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/titangiveaway/redis/TitanChestGiveawayHandler.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/titangiveaway/redis/TitanChestGiveawayHandler.java
@@ -16,18 +16,20 @@ public class TitanChestGiveawayHandler implements CommandCallback
private ServerStatusManager _statusManager;
private long _lastTimer;
+ private boolean _enabled;
public TitanChestGiveawayHandler(ServerStatusManager statusManager)
{
_statusManager = statusManager;
_lastTimer = 0;
+ _enabled = false;
}
@Override
public void run(ServerCommand command)
{
- if (command instanceof TitanChestGiveawayMessage)
+ if (command instanceof TitanChestGiveawayMessage && _enabled)
{
TitanChestGiveawayMessage chestCommand = ((TitanChestGiveawayMessage) command);
if (chestCommand.getServer().equals(_statusManager.getCurrentServerName()) || System.currentTimeMillis() >= _lastTimer + COOLDOWN)
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java
index e4645cad3..a9eecb3f7 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/Treasure.java
@@ -14,6 +14,7 @@ import mineplex.core.common.util.C;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
@@ -174,6 +175,11 @@ public class Treasure
UtilParticle.PlayParticle(type, block.getLocation().add(0.5 + xDif, 0.5 + yDif, 0.5 + zDif), red, 0.2F, 0.2F, 1F, 0,
ViewDist.NORMAL, UtilServer.getPlayers());
}
+ else if (_treasureType == TreasureType.CHRISTMAS)
+ {
+ UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, block.getLocation().add(0.5f, 0.5f, 0.5f), 0.1f, 0.1F, 0.1F, 0.2F, 5,
+ ViewDist.NORMAL, UtilServer.getPlayers());
+ }
else
{
UtilParticle.PlayParticle(type, block.getLocation().add(0.5, 0.5, 0.5), 0.5F, 0.5F, 0.5F, 0.2F, 0,
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java
index 43447a030..2c48bea27 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java
@@ -124,7 +124,10 @@ public class TreasureLocation implements Listener
if (treasureType == TreasureType.MYTHICAL)
Bukkit.broadcastMessage(F.main("Treasure", F.name(player.getName()) + " is opening a " + treasureType.getName()));
- Reward[] rewards = _treasureManager.getRewards(player, treasureType.getRewardType());
+ if (treasureType == TreasureType.CHRISTMAS)
+ Bukkit.broadcastMessage(F.main("Treasure", F.name(player.getName()) + " is opening a " + treasureType.getName()));
+
+ Reward[] rewards = _treasureManager.getRewards(player, treasureType.getRewardPool(), treasureType.getRewardType());
Treasure treasure = new Treasure(player, rewards, treasureType.getRewardType(), _chestBlock, _chestSpawns, treasureType, _treasureManager.getBlockRestore(), _hologramManager, _statusManager);
_currentTreasure = treasure;
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java
index c37885de1..a5c89e0ce 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java
@@ -20,6 +20,7 @@ import mineplex.core.inventory.InventoryManager;
import mineplex.core.pet.PetManager;
import mineplex.core.reward.Reward;
import mineplex.core.reward.RewardManager;
+import mineplex.core.reward.RewardPool;
import mineplex.core.reward.RewardType;
import mineplex.core.stats.StatsManager;
import mineplex.core.status.ServerStatusManager;
@@ -29,6 +30,7 @@ import mineplex.core.status.ServerStatusManager;
*/
public class TreasureManager extends MiniPlugin
{
+ private CoreClientManager _clientManager;
private RewardManager _rewardManager;
private InventoryManager _inventoryManager;
private BlockRestore _blockRestore;
@@ -40,6 +42,7 @@ public class TreasureManager extends MiniPlugin
{
super("Treasure", plugin);
+ _clientManager = clientManager;
_inventoryManager = inventoryManager;
_blockRestore = blockRestore;
_hologramManager = hologramManager;
@@ -130,9 +133,9 @@ public class TreasureManager extends MiniPlugin
_statsManager.incrementStat(player, "Global.Treasure." + treasureType.getStatName(), 1);
}
- public Reward[] getRewards(Player player, RewardType rewardType)
+ public Reward[] getRewards(Player player, RewardPool.Type pool, RewardType rewardType)
{
- return _rewardManager.getRewards(player, rewardType);
+ return _rewardManager.getRewards(player, pool, rewardType);
}
public boolean isOpening(Player player)
@@ -155,4 +158,9 @@ public class TreasureManager extends MiniPlugin
{
return _blockRestore;
}
+
+ public CoreClientManager getClientManager()
+ {
+ return _clientManager;
+ }
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureStyle.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureStyle.java
index 8875cac4a..f69e4b130 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureStyle.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureStyle.java
@@ -25,7 +25,15 @@ public enum TreasureStyle
ParticleType.LARGE_EXPLODE,
ParticleType.INSTANT_SPELL,
Sound.PORTAL_TRAVEL,
- Sound.ANVIL_LAND);
+ Sound.ANVIL_LAND),
+
+ CHRISTMAS(
+ ParticleType.SNOW_SHOVEL,
+ ParticleType.SNOWBALL_POOF,
+ ParticleType.SNOW_SHOVEL,
+ Sound.FIZZ,
+ Sound.CHICKEN_EGG_POP
+ );
private ParticleType _secondaryParticle;
private ParticleType _chestSpawnParticle;
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureType.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureType.java
index 1d6a5a399..bab37072b 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureType.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureType.java
@@ -3,15 +3,18 @@ package mineplex.core.treasure;
import org.bukkit.Material;
import mineplex.core.common.util.C;
+import mineplex.core.reward.RewardPool;
import mineplex.core.reward.RewardType;
public enum TreasureType
{
- OLD(C.cYellow + "Old Chest", "Old Chest", "Old", RewardType.OldChest, Material.CHEST, TreasureStyle.OLD),
+ OLD(C.cYellow + "Old Treasure", "Old Chest", "Old", RewardType.OldChest, Material.CHEST, TreasureStyle.OLD, RewardPool.Type.NORMAL),
- ANCIENT(C.cGold + "Ancient Chest", "Ancient Chest", "Ancient", RewardType.AncientChest, Material.TRAPPED_CHEST, TreasureStyle.ANCIENT),
+ ANCIENT(C.cGold + "Ancient Treasure", "Ancient Chest", "Ancient", RewardType.AncientChest, Material.TRAPPED_CHEST, TreasureStyle.ANCIENT, RewardPool.Type.NORMAL),
- MYTHICAL(C.cRed + "Mythical Chest", "Mythical Chest", "Mythical", RewardType.MythicalChest, Material.ENDER_CHEST, TreasureStyle.MYTHICAL);
+ MYTHICAL(C.cRed + "Mythical Treasure", "Mythical Chest", "Mythical", RewardType.MythicalChest, Material.ENDER_CHEST, TreasureStyle.MYTHICAL, RewardPool.Type.NORMAL),
+
+ CHRISTMAS(C.cDGreen + "Winter Holiday Treasure", "Winter Chest", "Christmas", RewardType.WinterChest, Material.CHEST, TreasureStyle.CHRISTMAS, RewardPool.Type.WINTER_HOLIDAY);
private final String _name;
private final RewardType _rewardType;
@@ -19,8 +22,9 @@ public enum TreasureType
private final TreasureStyle _treasureStyle;
private final String _itemName;
private final String _statName;
+ private final RewardPool.Type _rewardPool;
- TreasureType(String name, String itemName, String statName, RewardType rewardType, Material material, TreasureStyle treasureStyle)
+ TreasureType(String name, String itemName, String statName, RewardType rewardType, Material material, TreasureStyle treasureStyle, RewardPool.Type rewardPool)
{
_name = name;
_itemName = itemName;
@@ -28,6 +32,7 @@ public enum TreasureType
_rewardType = rewardType;
_material = material;
_treasureStyle = treasureStyle;
+ _rewardPool = rewardPool;
}
public RewardType getRewardType()
@@ -59,4 +64,9 @@ public enum TreasureType
{
return _statName;
}
+
+ public RewardPool.Type getRewardPool()
+ {
+ return _rewardPool;
+ }
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/BlockChangeAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/BlockChangeAnimation.java
index aef2e303f..2d6e42d38 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/BlockChangeAnimation.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/BlockChangeAnimation.java
@@ -54,18 +54,30 @@ public class BlockChangeAnimation extends Animation
if (getTreasure().getTreasureType() == TreasureType.OLD)
continue;
- Material newMaterial = getTreasure().getTreasureType() == TreasureType.ANCIENT ? Material.NETHER_BRICK : Material.QUARTZ_BLOCK;
+ Material mat;
+ if (getTreasure().getTreasureType() == TreasureType.ANCIENT) mat = Material.NETHER_BRICK;
+ else if (getTreasure().getTreasureType() == TreasureType.MYTHICAL) mat = Material.QUARTZ_BLOCK;
+ else if (getTreasure().getTreasureType() == TreasureType.CHRISTMAS) mat = Material.ICE;
+ else
+ continue;
+
_blockInfoList.add(new BlockInfo(b));
- b.setType(newMaterial);
+ b.setType(mat);
}
else if (b.getType() == Material.SMOOTH_STAIRS || b.getType() == Material.COBBLESTONE_STAIRS)
{
if (getTreasure().getTreasureType() == TreasureType.OLD)
continue;
- Material newMaterial = getTreasure().getTreasureType() == TreasureType.ANCIENT ? Material.NETHER_BRICK_STAIRS : Material.QUARTZ_STAIRS;
+ Material mat;
+ if (getTreasure().getTreasureType() == TreasureType.ANCIENT) mat = Material.NETHER_BRICK_STAIRS;
+ else if (getTreasure().getTreasureType() == TreasureType.MYTHICAL) mat = Material.QUARTZ_STAIRS;
+ else if (getTreasure().getTreasureType() == TreasureType.CHRISTMAS) mat = Material.PACKED_ICE;
+ else
+ continue;
+
_blockInfoList.add(new BlockInfo(b));
- b.setType(newMaterial);
+ b.setType(mat);
}
}
}
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestOpenAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestOpenAnimation.java
index ca906d891..7806d5ca6 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestOpenAnimation.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestOpenAnimation.java
@@ -15,6 +15,8 @@ import net.minecraft.server.v1_8_R3.BlockPosition;
import net.minecraft.server.v1_8_R3.PacketPlayOutBlockAction;
import net.minecraft.server.v1_8_R3.TileEntity;
import net.minecraft.server.v1_8_R3.TileEntityEnderChest;
+
+import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.hologram.Hologram;
@@ -74,10 +76,28 @@ public class ChestOpenAnimation extends Animation
}
else if (getTicks() == 15)
{
- _hologram = new Hologram(_hologramManager, _chestData.getBlock().getLocation().add(0.5, 1.4, 0.5),
- _rewardData.getFriendlyName());
+ if (_rewardData.getHeader() != null)
+ {
+ _hologram = new Hologram(_hologramManager, _chestData.getBlock().getLocation().add(0.5, 1.4, 0.5),
+ _rewardData.getHeader(), _rewardData.getFriendlyName());
+ }
+ else
+ {
+ _hologram = new Hologram(_hologramManager, _chestData.getBlock().getLocation().add(0.5, 1.4, 0.5),
+ _rewardData.getFriendlyName());
+ }
_hologram.start();
}
+ else if (getTicks() == 25)
+ {
+ if (_rewardData.isRewardedShards())
+ {
+ if (_rewardData.getHeader() != null)
+ _hologram.setText(C.cWhite + "Duplicate", C.cAqua + "+" + _rewardData.getShards() + " Treasure Shards", " ", _rewardData.getHeader(), _rewardData.getFriendlyName());
+ else
+ _hologram.setText(C.cWhite + "Duplicate", C.cAqua + "+" + _rewardData.getShards() + " Treasure Shards", " ", _rewardData.getFriendlyName());
+ }
+ }
}
public void onFinish()
diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestSpawnAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestSpawnAnimation.java
index 54fc12cee..65c51b163 100644
--- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestSpawnAnimation.java
+++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/ChestSpawnAnimation.java
@@ -16,6 +16,7 @@ import net.minecraft.server.v1_8_R3.MathHelper;
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.UtilServer;
import mineplex.core.common.util.UtilParticle.ViewDist;
import mineplex.core.treasure.BlockInfo;
@@ -115,6 +116,13 @@ public class ChestSpawnAnimation extends Animation
ViewDist.NORMAL, UtilServer.getPlayers());
}
}
+ else if (getTreasure().getTreasureType() == TreasureType.CHRISTMAS)
+ {
+ float spread = 1f - (getTicks() / (float)ANIMATION_DURATION);
+
+ UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, _centerLocation.clone().add(0, 5, 0), spread, 0.1f, spread, 0, 30,
+ ViewDist.NORMAL, UtilServer.getPlayers());
+ }
//Spawn Chest
if (getTicks() >= 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.DDoSProtectionSwitcher/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.DDoSProtectionSwitcher/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 7341ab168..000000000
--- a/Plugins/Mineplex.DDoSProtectionSwitcher/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-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.7
diff --git a/Plugins/Mineplex.EnjinTranslator/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.EnjinTranslator/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 7341ab168..000000000
--- a/Plugins/Mineplex.EnjinTranslator/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-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.7
diff --git a/Plugins/Mineplex.Game.Clans.Core/.classpath b/Plugins/Mineplex.Game.Clans.Core/.classpath
index fa4ddd8ed..c6a118cbe 100644
--- a/Plugins/Mineplex.Game.Clans.Core/.classpath
+++ b/Plugins/Mineplex.Game.Clans.Core/.classpath
@@ -1,7 +1,7 @@
-
+
diff --git a/Plugins/Mineplex.Game.Clans/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.Game.Clans/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 7341ab168..000000000
--- a/Plugins/Mineplex.Game.Clans/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-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.7
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 0e35252e8..ce3ff1b86 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.16";
+ public static final String VERSION = "0.17b";
private String WEB_CONFIG = "webServer";
// Modules
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java
index dc53b6069..5e82714fe 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java
@@ -462,7 +462,7 @@ public class ClanInfo
public boolean isOnline()
{
- return isOnlineNow() || System.currentTimeMillis() - _lastOnline.getTime() < Clans.getOnlineTime();
+ return isOnlineNow();// || System.currentTimeMillis() - _lastOnline.getTime() < Clans.getOnlineTime();
}
public String getProtected()
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java
index 7cfea3b08..9d06f8fa4 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java
@@ -17,13 +17,15 @@ import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilWorld;
import mineplex.game.clans.clans.event.ClanCreatedEvent;
import mineplex.game.clans.clans.event.ClanDeleteEvent;
+import mineplex.game.clans.clans.event.ClanJoinEvent;
+import mineplex.game.clans.clans.event.ClanLeaveEvent;
import mineplex.game.clans.clans.event.ClanSetHomeEvent;
import mineplex.game.clans.clans.scoreboard.ClansScoreboardManager;
import mineplex.game.clans.clans.tntGenerator.TntGenerator;
-import mineplex.game.clans.core.war.ClanWarData;
import mineplex.game.clans.core.repository.ClanRepository;
import mineplex.game.clans.core.repository.ClanTerritory;
import mineplex.game.clans.core.repository.tokens.ClanToken;
+import mineplex.game.clans.core.war.ClanWarData;
public class ClansDataAccessLayer
{
@@ -201,6 +203,15 @@ public class ClansDataAccessLayer
public void join(final ClanInfo clan, final Player player, final ClanRole role, final Callback callback)
{
+ ClanJoinEvent event = new ClanJoinEvent(clan, player);
+
+ UtilServer.getServer().getPluginManager().callEvent(event);
+
+ if (event.isCancelled())
+ {
+ return;
+ }
+
runAsync(new Runnable()
{
@Override
@@ -259,6 +270,15 @@ public class ClansDataAccessLayer
{
if (clan == null) return;
+ ClanLeaveEvent event = new ClanLeaveEvent(clan, clansPlayer);
+
+ UtilServer.getServer().getPluginManager().callEvent(event);
+
+ if (event.isCancelled())
+ {
+ return;
+ }
+
runAsync(new Runnable()
{
@Override
@@ -636,6 +656,10 @@ public class ClansDataAccessLayer
{
final Timestamp currentTime = new Timestamp(System.currentTimeMillis());
final ClanWarData war = new ClanWarData(clanA.getName(), clanB.getName(), score, currentTime, currentTime, 0);
+
+ // Memory
+ clanA.addWar(war);
+ clanB.addWar(war);
runAsync(new Runnable()
{
@@ -649,10 +673,6 @@ public class ClansDataAccessLayer
@Override
public void run()
{
- // Memory
- clanA.addWar(war);
- clanB.addWar(war);
-
_manager.log("Initiator war for [" + clanA.getName() + "] against [" + clanB.getName() + "].");
if (warCallback != null) warCallback.run(war);
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 aa8efa0bb..d97ad7c78 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
@@ -66,6 +66,7 @@ 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;
@@ -304,6 +305,8 @@ public class ClansManager extends MiniClientPluginimplements IRelati
loadClan(token);
}
+// new ClaimVisualizer(plugin, this);
+
// RedisDataRepository(ConnectionData writeConn, ConnectionData
// readConn, Region region, Class elementType, String elementLabel)
// Initialize default region factions and territory
@@ -672,7 +675,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati
if (clan == null)
{
event.setFormat(rank + C.cYellow + "%1$s " + C.cWhite + "%2$s");
- System.out.println(_clientManager.Get(event.getPlayer()).GetRank().name() + " " + event.getPlayer().getName() + " " + (event.getPlayer().getGameMode().equals(GameMode.CREATIVE) ? C.cRed + "Creative " : " ") + event.getMessage());
+ System.out.println(_clientManager.Get(event.getPlayer()).GetRank().name() + " " + event.getPlayer().getName() + " " + event.getMessage());
return;
}
@@ -692,7 +695,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati
String message = event.getMessage();
message = _chat.getFilteredMessage(event.getPlayer(), message);
ClanRelation rel = _clanUtility.rel(clan, otherClan);
- String formatted = rank + rel.getColor(true) + clan.getName() + " " + rel.getColor(false) + event.getPlayer().getName() + " " + (event.getPlayer().getGameMode().equals(GameMode.CREATIVE) ? C.cRed + "Creative " : " ") + C.cWhite + message;
+ String formatted = rank + rel.getColor(true) + clan.getName() + " " + rel.getColor(false) + event.getPlayer().getName() + " " + C.cWhite + message;
other.sendMessage(formatted);
}
}
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 c30741532..c27bcf57a 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
@@ -717,11 +717,11 @@ public class ClansUtility
return false;
}
-// if (clan.getEnergy() == 0)
-// {
-// Clans.getTutorials().sendTutorialMsg(caller, F.main("Clans", "You must purchase energy at a shop before you can claim land."));
-// return false;
-// }
+ if (clan.getEnergy() == 0)
+ {
+ Clans.getTutorials().sendTutorialMsg(caller, F.main("Clans", "You must purchase energy at a shop before you can claim land."));
+ return false;
+ }
String chunk = UtilWorld.chunkToStr(caller.getLocation().getChunk());
ClanInfo ownerClan = getOwner(caller.getLocation());
@@ -740,11 +740,11 @@ public class ClansUtility
}
}
-// if (clan.getClaims() >= clan.getClaimsMax())
-// {
-// Clans.getTutorials().sendTutorialMsg(caller, F.main("Clans", "Your Clan cannot claim more Territory."));
-// return false;
-// }
+ if (clan.getClaims() >= clan.getClaimsMax())
+ {
+ Clans.getTutorials().sendTutorialMsg(caller, F.main("Clans", "Your Clan cannot claim more Territory."));
+ return false;
+ }
// Adjacent
boolean selfAdj = false;
@@ -1084,7 +1084,7 @@ public class ClansUtility
}
// Event
- PlayerUnClaimTerritoryEvent event = new PlayerUnClaimTerritoryEvent(caller, caller.getLocation().getChunk());
+ PlayerUnClaimTerritoryEvent event = new PlayerUnClaimTerritoryEvent(caller, caller.getLocation().getChunk(), ownerClan);
UtilServer.getServer().getPluginManager().callEvent(event);
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/claimview/ClaimVisualizer.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/claimview/ClaimVisualizer.java
new file mode 100644
index 000000000..9408255bd
--- /dev/null
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/claimview/ClaimVisualizer.java
@@ -0,0 +1,351 @@
+package mineplex.game.clans.clans.claimview;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Chunk;
+import org.bukkit.Location;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.player.PlayerKickEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.bukkit.util.Vector;
+
+import mineplex.core.MiniPlugin;
+import mineplex.core.common.util.F;
+import mineplex.core.common.util.NautHashMap;
+import mineplex.core.common.util.UtilBlock;
+import mineplex.core.common.util.UtilMath;
+import mineplex.core.common.util.UtilParticle;
+import mineplex.core.common.util.UtilParticle.ParticleType;
+import mineplex.core.common.util.UtilParticle.ViewDist;
+import mineplex.core.common.util.UtilPlayer;
+import mineplex.core.common.util.UtilServer;
+import mineplex.core.common.util.UtilWorld;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+import mineplex.game.clans.clans.ClanInfo;
+import mineplex.game.clans.clans.ClansManager;
+import mineplex.game.clans.clans.claimview.commands.ClaimVisualizeCommand;
+import mineplex.game.clans.clans.event.ClanDisbandedEvent;
+import mineplex.game.clans.clans.event.ClanLeaveEvent;
+import mineplex.game.clans.clans.event.PlayerClaimTerritoryEvent;
+import mineplex.game.clans.clans.event.PlayerUnClaimTerritoryEvent;
+import net.minecraft.server.v1_8_R3.EnumDirection;
+
+public class ClaimVisualizer extends MiniPlugin
+{
+ private ClansManager _clansManager;
+
+ private List _visualizing;
+
+ private NautHashMap> _calculated;
+
+ public ClaimVisualizer(JavaPlugin plugin, ClansManager clansManager)
+ {
+ super("Claim Visualizer", plugin);
+
+ _clansManager = clansManager;
+ _visualizing = new ArrayList<>();
+ _calculated = new NautHashMap<>();
+
+ for (ClanInfo clan : _clansManager.getClanMap().values())
+ {
+ _calculated.put(clan, new NautHashMap());
+ }
+ }
+
+ @Override
+ public void addCommands()
+ {
+ addCommand(new ClaimVisualizeCommand(this));
+ }
+
+ @EventHandler
+ public void update(UpdateEvent event)
+ {
+ if (event.getType() != UpdateType.SLOWER)
+ {
+ return;
+ }
+
+ _calculated.clear();
+ for (ClanInfo clan : _clansManager.getClanMap().values())
+ {
+ _calculated.put(clan, new NautHashMap());
+
+ for (String serialized : clan.getClaimSet())
+ {
+ calculate(clan, serialized);
+ }
+ }
+ }
+
+ @EventHandler
+ public void runVisualization(UpdateEvent event)
+ {
+ if (event.getType() != UpdateType.SEC)
+ {
+ return;
+ }
+
+ for (String name : _visualizing)
+ {
+ Player player = Bukkit.getPlayer(name);
+
+ if (player != null && _clansManager.isInClan(player))
+ {
+ visualize(player);
+ }
+ }
+ }
+
+ private void visualize(Player player)
+ {
+ for (String serialized : _clansManager.getClan(player).getClaimSet())
+ {
+ if (!_calculated.get(_clansManager.getClan(player)).containsKey(serialized))
+ {
+ calculate(_clansManager.getClan(player), serialized);
+ }
+ }
+
+ draw(player, _calculated.get(_clansManager.getClan(player)).values());
+ }
+
+ private void draw(Player player, Collection chunks)
+ {
+ for (VisualizedChunkData chunk : chunks)
+ {
+ if (!chunk.getChunk().getWorld().equals(player.getWorld()))
+ {
+ // return not break because a clan can't have claims in different worlds.
+ return;
+ }
+
+ if (UtilMath.offset2d(chunk.getChunk().getBlock(0, 0, 0).getLocation(), player.getLocation()) > 36)
+ {
+ break;
+ }
+
+ for (int x = 0; x < 16; x++)
+ {
+ for (int z = 0; z < 16; z++)
+ {
+ if (chunk.shouldDisplayEdge(x, z) && (z == 0 || z == 15 || x == 0 || x == 15))
+ {
+ Block block = chunk.getChunk().getBlock(x, 0, z);
+
+ UtilParticle.PlayParticle(ParticleType.RED_DUST,
+ new Location(
+ chunk.getChunk().getWorld(),
+ block.getX() + .5,
+ UtilBlock.getHighest(player.getWorld(), block.getX(), block.getZ()).getY() + .5,
+ block.getZ() + .5),
+ new Vector(0f, 0f, 0f), 0f, 1, ViewDist.NORMAL, player);
+ }
+ }
+ }
+ }
+ }
+
+ private void calculate(ClanInfo clan, String serialized)
+ {
+ Chunk chunk = UtilWorld.strToChunk(serialized);
+
+ List dirs = new ArrayList<>();
+
+ if (!clan.getClaimSet().contains(UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX(), chunk.getZ() - 1))))
+ {
+ dirs.add(EnumDirection.NORTH);
+ }
+
+ if (!clan.getClaimSet().contains(UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX() + 1, chunk.getZ()))))
+ {
+ dirs.add(EnumDirection.EAST);
+ }
+
+ if (!clan.getClaimSet().contains(UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX(), chunk.getZ() + 1))))
+ {
+ dirs.add(EnumDirection.SOUTH);
+ }
+
+ if (!clan.getClaimSet().contains(UtilWorld.chunkToStr(chunk.getWorld().getChunkAt(chunk.getX() - 1, chunk.getZ()))))
+ {
+ dirs.add(EnumDirection.WEST);
+ }
+
+ VisualizedChunkData cached = new VisualizedChunkData(chunk, dirs);
+
+ _calculated.get(clan).put(serialized, cached);
+ }
+
+ @EventHandler
+ public void onQuit(PlayerQuitEvent event)
+ {
+ if (isVisualizing(event.getPlayer()))
+ {
+ disableVisualizer(event.getPlayer());
+ }
+ }
+
+ @EventHandler
+ public void onKick(PlayerKickEvent event)
+ {
+ if (isVisualizing(event.getPlayer()))
+ {
+ disableVisualizer(event.getPlayer());
+ }
+ }
+
+ @EventHandler
+ public void onLeave(ClanLeaveEvent event)
+ {
+ if (isVisualizing(event.getPlayer().getPlayerName()))
+ {
+ disableVisualizer(event.getPlayer().getPlayerName());
+ }
+ }
+
+ @EventHandler
+ public void onClanDisband(ClanDisbandedEvent event)
+ {
+ for (Player player : event.getClan().getOnlinePlayers())
+ {
+ if (isVisualizing(player))
+ {
+ disableVisualizer(player);
+ }
+ }
+ }
+
+ @EventHandler
+ public void update(ClanInfo clan)
+ {
+ _calculated.clear();
+
+ for (String serialized : clan.getClaimSet())
+ {
+ calculate(clan, serialized);
+ }
+ }
+
+ @EventHandler
+ public void onUnclaim(PlayerUnClaimTerritoryEvent event)
+ {
+ if (event.getClan().getClaimCount() == 1)
+ {
+ for (Player player : event.getClan().getOnlinePlayers())
+ {
+ if (isVisualizing(player))
+ {
+ disableVisualizer(player);
+ }
+ }
+ }
+ }
+
+ public boolean isVisualizing(Player player)
+ {
+ return _visualizing.contains(player.getName());
+ }
+
+ public boolean isVisualizing(String name)
+ {
+ return _visualizing.contains(name);
+ }
+
+ public void enableVisualizer(String name)
+ {
+ enableVisualizer(UtilServer.getServer().getPlayer(name));
+ }
+
+ public void disableVisualizer(String name)
+ {
+ disableVisualizer(UtilServer.getServer().getPlayer(name));
+ }
+
+ public void toggleVisualizer(Player player)
+ {
+ if (_visualizing.contains(player.getName()))
+ {
+ disableVisualizer(player);
+ }
+ else
+ {
+ enableVisualizer(player);
+ }
+ }
+
+ public void enableVisualizer(Player player)
+ {
+ if (player == null)
+ {
+ return;
+ }
+
+ if (!_clansManager.isInClan(player))
+ {
+ UtilPlayer.message(player, F.main("Clans", "You must be in a clan to visualize claims."));
+ return;
+ }
+
+ ClanInfo clan = _clansManager.getClan(player);
+
+ if (clan.getClaimCount() == 0)
+ {
+ UtilPlayer.message(player, F.main("Clans", "Your Clan does not have any claims!"));
+ return;
+ }
+
+ _visualizing.add(player.getName());
+ UtilPlayer.message(player, F.main("Clans", "You are now visualizing your claims."));
+
+ for (VisualizedChunkData chunk : _calculated.get(clan).values())
+ {
+ if (!chunk.getChunk().getWorld().equals(player.getWorld()))
+ {
+ // return not break because a clan can't have claims in different worlds.
+ return;
+ }
+
+ if (UtilMath.offset2d(chunk.getChunk().getBlock(0, 0, 0).getLocation(), player.getLocation()) > 36)
+ {
+ break;
+ }
+
+ for (int x = 0; x < 16; x++)
+ {
+ for (int z = 0; z < 16; z++)
+ {
+ if (chunk.shouldDisplayEdge(x, z) && (z == 0 || z == 15 || x == 0 || x == 15))
+ {
+ Block block = chunk.getChunk().getBlock(x, 0, z);
+ }
+ }
+ }
+ }
+ }
+
+ public void disableVisualizer(Player player)
+ {
+ if (player == null)
+ {
+ return;
+ }
+
+ if (!_visualizing.contains(player.getName()))
+ {
+ UtilPlayer.message(player, F.main("Clans", "You are anot visualizing your claims."));
+ return;
+ }
+
+ _visualizing.remove(player.getName());
+ UtilPlayer.message(player, F.main("Clans", "You are no longer visualizing your claims."));
+ }
+
+}
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/claimview/VisualizedChunkData.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/claimview/VisualizedChunkData.java
new file mode 100644
index 000000000..1427f20ae
--- /dev/null
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/claimview/VisualizedChunkData.java
@@ -0,0 +1,57 @@
+package mineplex.game.clans.clans.claimview;
+
+import java.util.List;
+
+import org.bukkit.Chunk;
+
+import net.minecraft.server.v1_8_R3.EnumDirection;
+
+public class VisualizedChunkData
+{
+ private List _displayableEdges;
+ private Chunk _chunk;
+
+ public long _start;
+
+ public VisualizedChunkData(Chunk chunk, List dir)
+ {
+ _chunk = chunk;
+ _displayableEdges = dir;
+ _start = System.currentTimeMillis();
+ }
+
+ public double getLife()
+ {
+ return (double) (System.currentTimeMillis() - _start);
+ }
+
+ public boolean shouldDisplayEdge(int x, int z)
+ {
+ if (z == 15 && !_displayableEdges.contains(EnumDirection.SOUTH))
+ {
+ return false;
+ }
+
+ if (x == 15 && !_displayableEdges.contains(EnumDirection.EAST))
+ {
+ return false;
+ }
+
+ if (x == 0 && !_displayableEdges.contains(EnumDirection.WEST))
+ {
+ return false;
+ }
+
+ if (z == 0 && !_displayableEdges.contains(EnumDirection.NORTH))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ public Chunk getChunk()
+ {
+ return _chunk;
+ }
+}
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/claimview/commands/ClaimVisualizeCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/claimview/commands/ClaimVisualizeCommand.java
new file mode 100644
index 000000000..dcfa074c9
--- /dev/null
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/claimview/commands/ClaimVisualizeCommand.java
@@ -0,0 +1,22 @@
+package mineplex.game.clans.clans.claimview.commands;
+
+import org.bukkit.entity.Player;
+
+import mineplex.core.command.CommandBase;
+import mineplex.core.common.Rank;
+import mineplex.game.clans.clans.claimview.ClaimVisualizer;
+
+public class ClaimVisualizeCommand extends CommandBase
+{
+ public ClaimVisualizeCommand(ClaimVisualizer plugin)
+ {
+ super(plugin, Rank.ALL, "showclaims");
+ }
+
+ @Override
+ public void Execute(Player caller, String[] args)
+ {
+ Plugin.toggleVisualizer(caller);
+ }
+
+}
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClanManagementCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClanManagementCommand.java
index 546c63774..cda7ab480 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClanManagementCommand.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClanManagementCommand.java
@@ -38,7 +38,6 @@ import mineplex.game.clans.items.legendaries.WindBlade;
public class ClanManagementCommand extends CommandBase
{
-
private ClansManager _clansManager;
public ClanManagementCommand(ClansManager plugin)
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 b956eedfe..f9bab36a5 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
@@ -1,5 +1,6 @@
package mineplex.game.clans.clans.commands;
+import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
@@ -24,6 +25,7 @@ import mineplex.game.clans.clans.ClanTips.TipType;
import mineplex.game.clans.clans.ClansBlacklist;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.ClientClan;
+import mineplex.game.clans.clans.event.ClanJoinEvent;
import mineplex.game.clans.clans.event.ClansCommandExecutedEvent;
import mineplex.game.clans.tutorials.Tutorial;
import mineplex.game.clans.tutorials.TutorialManager;
@@ -382,6 +384,10 @@ public class ClansCommand extends CommandBase
_manager.getTutorials().sendTutorialMsg(caller, F.main("Clans", "The clan " + F.elem("Clan " + clan.getName()) + " is full and cannot be joined!"));
return;
}
+
+ ClanJoinEvent event = new ClanJoinEvent(clan, caller);
+ Bukkit.getPluginManager().callEvent(event);
+ if (event.isCancelled()) return;
// Task
Plugin.getClanDataAccess().join(clan, caller, ClanRole.RECRUIT, new Callback()
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/RestartTutCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/RestartTutCommand.java
index be19befc8..a37102d7b 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/RestartTutCommand.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/RestartTutCommand.java
@@ -6,6 +6,8 @@ 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.task.TaskManager;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.tutorials.Tutorial;
@@ -22,6 +24,12 @@ public class RestartTutCommand extends CommandBase
@Override
public void Execute(Player caller, String[] args)
{
+ if (ClansManager.getInstance().getClan(caller) != null)
+ {
+ UtilPlayer.message(caller, F.main("Tutorial", "You cannot restart the tutorial while in a clan"));
+ return;
+ }
+
if (ClansManager.getInstance().getClanUtility().getClaim(caller.getLocation()) != null
&& ClansManager.getInstance().getClanUtility().getClaim(caller.getLocation()).isSafe(caller.getLocation()))
{
@@ -43,7 +51,7 @@ public class RestartTutCommand extends CommandBase
}
else
{
- TutorialManager.Instance.sendTutorialMsg(caller, "You must be in a safezone to restart the tutorial.");
+ TutorialManager.Instance.sendTutorialMsg(caller, F.main("Clans", "You must be in a Safe Zone to restart the tutorial."));
}
}
}
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/ClanLeaveEvent.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/ClanLeaveEvent.java
new file mode 100644
index 000000000..3c5f6156d
--- /dev/null
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/ClanLeaveEvent.java
@@ -0,0 +1,56 @@
+package mineplex.game.clans.clans.event;
+
+import org.bukkit.event.Event;
+import org.bukkit.event.HandlerList;
+
+import mineplex.game.clans.clans.ClanInfo;
+import mineplex.game.clans.clans.ClansPlayer;
+
+public class ClanLeaveEvent extends Event
+{
+ private static final HandlerList handlers = new HandlerList();
+
+ private ClansPlayer _player;
+
+ private ClanInfo _clan;
+
+ private boolean _cancelled;
+
+ public ClanLeaveEvent(ClanInfo clan, ClansPlayer clansPlayer)
+ {
+ _player = clansPlayer;
+
+ _clan = clan;
+ }
+
+ public ClansPlayer getPlayer()
+ {
+ return _player;
+ }
+
+ public ClanInfo getClan()
+ {
+ return _clan;
+ }
+
+ public void setCancelled(boolean cancelled)
+ {
+ _cancelled = cancelled;
+ }
+
+ public boolean isCancelled()
+ {
+ return _cancelled;
+ }
+
+ public HandlerList getHandlers()
+ {
+ return handlers;
+ }
+
+ public static HandlerList getHandlerList()
+ {
+ return handlers;
+ }
+
+}
\ No newline at end of file
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/PlayerUnClaimTerritoryEvent.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/PlayerUnClaimTerritoryEvent.java
index 41ef2e8b1..8d83363d6 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/PlayerUnClaimTerritoryEvent.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/event/PlayerUnClaimTerritoryEvent.java
@@ -5,19 +5,23 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
+import mineplex.game.clans.clans.ClanInfo;
+
public class PlayerUnClaimTerritoryEvent extends Event
{
private static final HandlerList handlers = new HandlerList();
private Player _unClaimer;
private Chunk _unClaimedChunk;
+ private ClanInfo _clan;
private boolean _cancelled;
- public PlayerUnClaimTerritoryEvent(Player unClaimer, Chunk unClaimedChunk)
+ public PlayerUnClaimTerritoryEvent(Player unClaimer, Chunk unClaimedChunk, ClanInfo clan)
{
_unClaimer = unClaimer;
_unClaimedChunk = unClaimedChunk;
+ _clan = clan;
}
public Player getUnClaimer()
@@ -35,6 +39,11 @@ public class PlayerUnClaimTerritoryEvent extends Event
_cancelled = cancelled;
}
+ public ClanInfo getClan()
+ {
+ return _clan;
+ }
+
public boolean isCancelled()
{
return _cancelled;
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 dcefd85aa..c337f063f 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
@@ -42,19 +42,17 @@ public class ClansScoreboardManager extends ScoreboardManager
private void init(TutorialManager tutorialManager)
{
- setTitle(" MINEPLEX CLANS ");
+ setTitle("Clans Alpha " + Clans.VERSION);
ScoreboardData data = getData("default", true);
- data.write(C.cGreen + "Clans Alpha " + Clans.VERSION);
- data.writeEmpty();
data.writeElement(new ScoreboardElementClan(_clansManager));
data.writeElement(new ScoreboardElementPlayer(_clansManager));
- data.writeElement(new ScoreboardElementPlayerCount(_clansManager));
-
- data.writeElement(_worldEvent);
+// data.writeElement(new ScoreboardElementPlayerCount(_clansManager));
+
data.writeElement(_warManager);
-
+ data.writeElement(_worldEvent);
+
for (Tutorial tutorial : tutorialManager.getTutorials().values())
{
data.writeElement(tutorial);
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementClan.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementClan.java
index d27d2c34b..5252cb23d 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementClan.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementClan.java
@@ -35,8 +35,7 @@ public class ScoreboardElementClan implements ScoreboardElement
// Energy
if (clanInfo.getEnergyCostPerMinute() > 0)
- output.add(C.cYellow + "Energy " + C.cWhite + UtilTime.convertString((clanInfo.getEnergy() / clanInfo.getEnergyCostPerMinute()) * 60000L, 1, UtilTime.TimeUnit.FIT));
- output.add(C.cYellow + "Home " + C.cWhite + clanInfo.getBedStatusStr());
+ output.add(C.cYellow + "Energy " + C.cWhite + UtilTime.convertString((clanInfo.getEnergy() / clanInfo.getEnergyCostPerMinute()) * 60000L, 1, UtilTime.TimeUnit.FIT));
}
else
{
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementPlayer.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementPlayer.java
index 36d4ac271..d0d710721 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementPlayer.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementPlayer.java
@@ -27,10 +27,9 @@ public class ScoreboardElementPlayer implements ScoreboardElement
{
List output = new ArrayList();
output.add(C.cYellow + "Gold " + C.cWhite + manager.getDonation().Get(player).GetBalance(CurrencyType.Gold) + "");
- output.add("");
-
String regionString = C.xWilderness + "Wilderness";
+ output.add(" ");
ClanTerritory claim = _clansManager.getClanUtility().getClaim(player.getLocation());
if (claim != null)
{
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementPlayerCount.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementPlayerCount.java
index be56178a3..0c6fb35d5 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementPlayerCount.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/scoreboard/elements/ScoreboardElementPlayerCount.java
@@ -29,7 +29,7 @@ public class ScoreboardElementPlayerCount implements ScoreboardElement
List output = new ArrayList();
output.add("");
- output.add(C.cYellow + "Players Online " + UtilServer.getPlayers().length + "/100");
+ output.add(C.cYellow + "Players " + C.cWhite + UtilServer.getPlayers().length + "/100");
return output;
}
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java
index cc017df55..166693db2 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java
@@ -97,7 +97,7 @@ public class WarManager extends MiniPlugin implements ScoreboardElement
{
for (WarInvasion invasion : invasions)
{
- if (invasion.getInvaderClan().equals(playerClan))
+ if (invasion.getInvaderClan().equals(playerClan.getName()))
return true;
}
}
@@ -125,15 +125,24 @@ public class WarManager extends MiniPlugin implements ScoreboardElement
final ClanInfo killerClan = event.getKiller().getClan();
ClanWarData war = clan.getWarData(killerClan);
- if (war != null && !war.isOnCooldown())
+ if (war != null)
{
+ if (war.isOnCooldown())
+ {
+ // Ignore!
+ return;
+ }
+
+ _clansManager.ClanTips.displayTip(TipType.DOMINANCE_RIP, event.getPlayer().getPlayer());
+ _clansManager.ClanTips.displayTip(TipType.DOMINANCE_NOOICE, event.getKiller().getPlayer());
+
// War already exists
+ war.increment(killerClan.getName());
ClansUtility.ClanRelation rel = _clansManager.getClanUtility().rel(clan, killerClan);
_clansManager.messageClan(killerClan, F.main("Clans", "Your clan gained 1 War Point against " + rel.getColor(false) +
clan.getName() + " " + C.Reset + "(" + killerClan.getFormattedWarPoints(clan) + C.Reset + ")"));
_clansManager.messageClan(clan, F.main("Clans", "Your clan lost 1 War Point against " + rel.getColor(false) +
killerClan.getName() + " " + C.Reset + "(" + clan.getFormattedWarPoints(killerClan) + C.Reset + ")"));
- war.increment(killerClan.getName());
checkWarComplete(war);
ClanInfo clanA = clan.getName().equals(war.getClanA()) ? clan : killerClan;
@@ -142,9 +151,6 @@ public class WarManager extends MiniPlugin implements ScoreboardElement
_clansManager.getScoreboard().refresh(killerClan);
_clansManager.getScoreboard().refresh(clan);
-
- _clansManager.ClanTips.displayTip(TipType.DOMINANCE_RIP, event.getPlayer().getPlayer());
- _clansManager.ClanTips.displayTip(TipType.DOMINANCE_NOOICE, event.getKiller().getPlayer());
}
else
{
@@ -155,14 +161,13 @@ public class WarManager extends MiniPlugin implements ScoreboardElement
public void run(ClanWarData data)
{
ClansUtility.ClanRelation rel = _clansManager.getClanUtility().rel(clan, killerClan);
+ _clansManager.ClanTips.displayTip(TipType.DOMINANCE_RIP, event.getPlayer().getPlayer());
+ _clansManager.ClanTips.displayTip(TipType.DOMINANCE_NOOICE, event.getKiller().getPlayer());
_clansManager.messageClan(killerClan, F.main("Clans", "Your clan gained 1 War Point against " + rel.getColor(false) + clan.getName()));
_clansManager.messageClan(clan, F.main("Clans", "Your clan lost 1 War Point against " + rel.getColor(false) + killerClan.getName()));
_clansManager.getScoreboard().refresh(killerClan);
_clansManager.getScoreboard().refresh(clan);
-
- _clansManager.ClanTips.displayTip(TipType.DOMINANCE_RIP, event.getPlayer().getPlayer());
- _clansManager.ClanTips.displayTip(TipType.DOMINANCE_NOOICE, event.getKiller().getPlayer());
}
});
}
@@ -271,7 +276,7 @@ public class WarManager extends MiniPlugin implements ScoreboardElement
@EventHandler
public void onInvasionEnd(WarInvasionEndEvent event)
{
- Bukkit.broadcastMessage(F.main("War", F.elem(event.getWarInvasion().getInvaderClan()) + "'s invasion against " + F.elem(event.getWarInvasion().getInvaderClan() + " has ended.")));
+ Bukkit.broadcastMessage(F.main("War", F.elem(event.getWarInvasion().getInvaderClan()) + "'s invasion against " + F.elem(event.getWarInvasion().getInvadedClan()) + " has ended."));
}
@@ -301,13 +306,14 @@ public class WarManager extends MiniPlugin implements ScoreboardElement
if (clan != null)
{
- List invadedList = _invadedMap.get(clan);
- List invaderList = _invaderMap.get(clan);
+ List invadedList = _invadedMap.get(clan.getName());
+ List invaderList = _invaderMap.get(clan.getName());
if (invaderList != null && !invaderList.isEmpty())
{
for (WarInvasion invasion : invaderList)
{
+ element.add(" ");
element.add(C.cPurpleB + "Invading");
element.add(" " + invasion.getInvadedClan());
element.add(" " + UtilTime.convertString(invasion.getTimeLeft(), 1, UtilTime.TimeUnit.FIT));
@@ -318,6 +324,7 @@ public class WarManager extends MiniPlugin implements ScoreboardElement
{
for (WarInvasion invasion : invadedList)
{
+ element.add(" ");
element.add(C.cRedB + "Invaded");
element.add(" " + invasion.getInvaderClan());
element.add(" " + UtilTime.convertString(invasion.getTimeLeft(), 1, UtilTime.TimeUnit.FIT));
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/bow/HeavyArrowsAttribute.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/bow/HeavyArrowsAttribute.java
index 16aa30a21..f5e55d42c 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/bow/HeavyArrowsAttribute.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/items/attributes/bow/HeavyArrowsAttribute.java
@@ -35,6 +35,7 @@ public class HeavyArrowsAttribute extends ItemAttribute
@Override
public void onAttack(CustomDamageEvent event)
{
- event.AddKnockback("HeavyAttribute", _knockbackPercent);
+ double knockback = (_knockbackPercent / 100d) * 6;
+ event.AddKnockback("Heavy Attribute", knockback);
}
}
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 dfca12bb5..50a251707 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
@@ -248,7 +248,7 @@ public class Spawn extends MiniPlugin
if (isInSpawn(player))
{
- UtilPlayer.message(event.GetPlayer(), F.main("Safe Zone", "You cannot use " + F.skill(event.GetSkillName() + " in " + F.elem("Safe Zone") + ".")));
+ UtilPlayer.message(event.GetPlayer(), F.main("Safe Zone", "You cannot use " + F.skill(event.GetSkillName()) + " in " + F.elem("Safe Zone") + "."));
event.SetCancelled(true);
}
}
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 166dbc6e8..4d6ae6cc3 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
@@ -8,6 +8,7 @@ import java.util.Map;
import org.bukkit.Color;
import org.bukkit.FireworkEffect.Type;
+import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -19,6 +20,7 @@ import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
+import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import mineplex.core.common.jsonchat.ClickEvent;
@@ -27,6 +29,8 @@ import mineplex.core.common.util.C;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilFirework;
+import mineplex.core.common.util.UtilInv;
+import mineplex.core.common.util.UtilItem;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTextMiddle;
@@ -40,6 +44,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.event.ClanJoinEvent;
import mineplex.game.clans.clans.event.ClanTipEvent;
import mineplex.game.clans.economy.GoldManager;
import net.minecraft.server.v1_8_R3.PacketPlayOutChat;
@@ -59,6 +64,7 @@ public abstract class Tutorial implements ScoreboardElement, Listener
public static String SKIPPED_TASK = "tatatatata%sSkip";
public static String AllowedMessage = C.cGold + "TutorialAllowedMessage" + C.Reset;
+ public static String AllowedBypass = C.cBlue + "Tutorial>";
protected final TutorialManager _manager;
protected final GoldManager _goldManager;
@@ -66,7 +72,8 @@ public abstract class Tutorial implements ScoreboardElement, Listener
protected final TaskManager _taskManager;
protected final DonationManager _donationManager;
- protected final LinkedHashMap> _tasks;
+// protected final LinkedHashMap> _tasks;
+ private final ArrayList> _tasks;
protected final LinkedHashMap> _nameToTask;
protected final LinkedHashMap _inTutorial;
@@ -89,7 +96,7 @@ public abstract class Tutorial implements ScoreboardElement, Listener
_donationManager = donationManager;
_taskManager = taskManager;
_manager = manager;
- _tasks = new LinkedHashMap<>();
+ _tasks = new ArrayList>();
_inTutorial = new LinkedHashMap<>();
_nameToTask = new LinkedHashMap<>();
@@ -122,7 +129,7 @@ public abstract class Tutorial implements ScoreboardElement, Listener
lines.add(C.cAqua + "Tutorial");
- for (final TutorialTask> task : _tasks.values())
+ for (final TutorialTask> task : _tasks)
{
if (get(player).CurrentTask.equals(task))
{
@@ -142,10 +149,15 @@ public abstract class Tutorial implements ScoreboardElement, Listener
return lines;
}
+
+ public TutorialTask> getTask(int index)
+ {
+ return _tasks.get(index);
+ }
protected void addTask(TutorialTask> task)
{
- _tasks.put(_tasks.size() + 1, task);
+ _tasks.add(task);
_nameToTask.put(task.getTechnicalName(), task);
}
@@ -158,6 +170,11 @@ public abstract class Tutorial implements ScoreboardElement, Listener
return get(player).CurrentTask.getID() < task.getID();
}
+
+ private TutorialTask> getLastTask()
+ {
+ return _tasks.get(_tasks.size() - 1);
+ }
protected void finishTask(final Player player, final TutorialTask> task)
{
@@ -175,8 +192,10 @@ public abstract class Tutorial implements ScoreboardElement, Listener
{
public void run()
{
+ final TutorialTask> lastTask = getLastTask();
// Cycle to next task, or null if last task.
- get(player).CurrentTask = task.equals(_tasks.get(_tasks.size())) ? null : _tasks.get(task.getID() + 1);
+ get(player).CurrentTask = task.equals(lastTask) ? null : _tasks.get(task.getDataId() + 1);
+ System.out.println("Next Task: " + get(player).CurrentTask);
if (!_taskManager.hasCompletedTask(player, String.format(TASK_COMPLETE_TASK, _technicalName, task.getTechnicalName())))
{
@@ -185,7 +204,7 @@ public abstract class Tutorial implements ScoreboardElement, Listener
public void run(final Boolean completed)
{
// If last task, end tutorial.
- if (task.equals(_tasks.get(_tasks.size())))
+ if (task.equals(lastTask))
{
finishFor(player);
}
@@ -196,7 +215,9 @@ public abstract class Tutorial implements ScoreboardElement, Listener
{
public void run()
{
+ System.out.println("STARTING NEXT TASK!");
get(player).CurrentTask.startFor(player);
+ get(player).CurrentTaskStartTime = System.currentTimeMillis();
}
}, 30L);
}
@@ -252,23 +273,22 @@ public abstract class Tutorial implements ScoreboardElement, Listener
private void finishFor(final Player player)
{
- if (player.getOpenInventory() != null)
- {
- _inTutorial.get(player.getName()).QueuedFinish = true;
- return;
- }
-
+// if (player.getOpenInventory() != null)
+// {
+// _inTutorial.get(player.getName()).QueuedFinish = true;
+// return;
+// }
+ _manager.finishTutorial(player);
_inTutorial.remove(player.getName());
-
- UtilTextMiddle.display(C.cWhite + "Clans Tutorial", C.cGreen + "You have completed the Clans Tutorial!", 20, 20 * 3, 20);
+ onFinished(player);
_manager.getPlugin().getServer().getScheduler().scheduleSyncDelayedTask(_manager.getPlugin(), new Runnable()
{
public void run()
{
- // Custom Finish Method (usually messages)
- onFinished(player);
-
+ UtilTextMiddle.display(C.cWhite + "Clans Tutorial", C.cGreen + "You have completed the Clans Tutorial!", 20, 20 * 3, 20, player);
+ onFinishedDelay(player);
+
// Do Reward
if (!_taskManager.hasCompletedTask(player, String.format(TUTORIAL_REWARD_TASK, _technicalName)))
{
@@ -305,6 +325,25 @@ public abstract class Tutorial implements ScoreboardElement, Listener
}
}, player, String.format(TUTORIAL_REWARD_TASK, _technicalName));
}
+ else
+ {
+ UtilInv.remove(player, Material.IRON_AXE, (byte) 0, 1);
+
+ UtilInv.remove(player, Material.IRON_HELMET, (byte) 0, 1);
+ UtilInv.remove(player, Material.IRON_CHESTPLATE, (byte) 0, 1);
+ UtilInv.remove(player, Material.IRON_LEGGINGS, (byte) 0, 1);
+ UtilInv.remove(player, Material.IRON_BOOTS, (byte) 0, 1);
+
+ ItemStack[] armor = player.getInventory().getArmorContents();
+ for (int i = 0 ; i < armor.length; i++)
+ {
+ if (UtilItem.isIronProduct(armor[i]))
+ {
+ armor[i] = null;
+ }
+ }
+ player.getInventory().setArmorContents(armor);
+ }
_manager.getPlugin().getServer().getScheduler().scheduleSyncDelayedTask(_manager.getPlugin(), new Runnable()
{
@@ -340,13 +379,17 @@ public abstract class Tutorial implements ScoreboardElement, Listener
}
}, 20 * 2);
}
- }, 20 * 4);
+ }, 20 * 2);
}
// Implementation left to sub classes.
protected void onFinished(final Player player)
{
}
+
+ protected void onFinishedDelay(final Player player)
+ {
+ }
// Implementation left to sub classes.
protected void onBegin(final Player player)
@@ -357,7 +400,7 @@ public abstract class Tutorial implements ScoreboardElement, Listener
{
if (!_manager.isInTutorial(player))
{
- _manager._playerTutorials.put(player.getName(), this);
+ _manager.setTutorial(player, this);
}
_inTutorial.put(player.getName(), new TutorialClient(player, this));
@@ -380,8 +423,12 @@ public abstract class Tutorial implements ScoreboardElement, Listener
public void cancelFor(final Player player)
{
+ get(player).CurrentTask.cleanup(player);
+ get(player).CurrentTaskStartTime = -1;
_inTutorial.remove(player.getName());
+ _manager.finishTutorial(player);
+
if (_ghostMode)
{
for (Player other : UtilServer.getPlayers())
@@ -402,11 +449,6 @@ public abstract class Tutorial implements ScoreboardElement, Listener
return _inTutorial.containsKey(player);
}
- public Map> getTasks()
- {
- return _tasks;
- }
-
public boolean hasCompleted(final Player player)
{
return _taskManager.hasCompletedTask(player, String.format(TUTORIAL_COMPLETE_TASK, _technicalName));
@@ -419,9 +461,7 @@ public abstract class Tutorial implements ScoreboardElement, Listener
public void skip(final Player player)
{
- new JsonMessage(
- AllowedMessage
- )
+ new JsonMessage("")
.extra(
F.main(
"Tutorial",
@@ -435,9 +475,11 @@ public abstract class Tutorial implements ScoreboardElement, Listener
.color("yellow")
.extra("!")
.color("gray")
+
.sendToPlayer(player);
- new JsonMessage(
+ new JsonMessage("")
+ .extra(
F.main(
"Tutorial",
"Click "
@@ -506,7 +548,7 @@ public abstract class Tutorial implements ScoreboardElement, Listener
}
}
- get(player).CurrentTask.trySendDescription(player);
+ get(player).CurrentTask.trySendDescription(player, false);
}
}
}
@@ -532,6 +574,15 @@ public abstract class Tutorial implements ScoreboardElement, Listener
evt.setCancelled(true);
}
+ @EventHandler
+ public void onJoinClan(ClanJoinEvent event)
+ {
+ if (isInTutorial(event.getPlayer()))
+ {
+ event.setCancelled(true);
+ }
+ }
+
@EventHandler
public void onPlayerJoin(final PlayerJoinEvent evt)
{
@@ -552,9 +603,15 @@ public abstract class Tutorial implements ScoreboardElement, Listener
public void cleanup(Player player)
{
- if (get(player) != null && get(player).CurrentTask != null)
+ System.out.println("Cleaning up Player in " + getClass().getName());
+
+ if (get(player) != null && get(player).CurrentTask != null)
+ {
+ System.out.println("Cleaning up current task: " + get(player).CurrentTask.getClass().getName());
get(player).CurrentTask.cleanup(player);
-
+ }
+
+ System.out.println("removing from in tutorial");
_inTutorial.remove(player.getName());
}
}
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialClient.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialClient.java
index 043647117..ac44d52a1 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialClient.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialClient.java
@@ -11,15 +11,18 @@ public class TutorialClient
public long LastDescriptionSentTime = System.currentTimeMillis() - 3000;
public boolean InClanOnStart;
public boolean QueuedFinish;
+ public long CurrentTaskStartTime;
public TutorialClient(Player player, Tutorial tutorial)
{
Player = player;
- CurrentTask = tutorial._tasks.get(1);
+ CurrentTask = tutorial.getTask(0);
+ CurrentTaskStartTime = System.currentTimeMillis();
InClanOnStart = tutorial._clansManager.isInClan(player);
-
+
+ /*
for (TutorialTask> task : tutorial._tasks.values())
{
if (TaskManager.Instance.hasCompletedTask(player, String.format(
@@ -34,5 +37,6 @@ public class TutorialClient
}
}
}
+ */
}
}
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 7a637f7ba..7468ff139 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
@@ -25,6 +25,7 @@ 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
@@ -32,7 +33,7 @@ public class TutorialManager extends MiniPlugin
public static TutorialManager Instance;
private final Map, Tutorial> _tutorials = new HashMap<>();
- protected final Map _playerTutorials = new HashMap<>();
+ private final Map _playerTutorials = new HashMap<>();
private final TaskManager _taskManager;
@@ -64,7 +65,7 @@ public class TutorialManager extends MiniPlugin
{
chat.a.a().remove(0);
}
- else
+ else if (!chat.a.a().get(0).c().contains(Tutorial.AllowedBypass))
{
if (isInTutorial(packet.getPlayer()))
{
@@ -138,10 +139,13 @@ public class TutorialManager extends MiniPlugin
@EventHandler
public void quit(PlayerQuitEvent event)
{
+ System.out.println("Player Quit. In Tutorial: " + isInTutorial(event.getPlayer()));
+
if (!isInTutorial(event.getPlayer()))
return;
getTutorial(event.getPlayer()).cleanup(event.getPlayer());
+ _playerTutorials.remove(event.getPlayer().getName());
}
public void sendTutorialMsg(Player player, String message)
@@ -156,6 +160,16 @@ public class TutorialManager extends MiniPlugin
sendTutorialMsg(player, message);
}
}
+
+ public void finishTutorial(Player player)
+ {
+ _playerTutorials.remove(player.getName());
+ }
+
+ public void setTutorial(Player player, Tutorial tutorial)
+ {
+ _playerTutorials.put(player.getName(), tutorial);
+ }
public Tutorial getTutorial(final Player player)
{
@@ -171,4 +185,72 @@ public class TutorialManager extends MiniPlugin
{
return _taskManager;
}
+
+ // Stolen from UtilTabTitle
+ private static class TextConverter
+ {
+ public static String convert(String text)
+ {
+ if (text == null || text.length() == 0)
+ {
+ return "\"\"";
+ }
+
+ char c;
+ int i;
+ int len = text.length();
+ StringBuilder sb = new StringBuilder(len + 4);
+ String t;
+ sb.append('"');
+
+ for (i = 0; i < len; i += 1)
+ {
+ c = text.charAt(i);
+ switch (c)
+ {
+ case '\\':
+ case '"':
+ sb.append('\\');
+ sb.append(c);
+ break;
+ case '/':
+ sb.append('\\');
+ sb.append(c);
+ break;
+ case '\b':
+ sb.append("\\b");
+ break;
+ case '\t':
+ sb.append("\\t");
+ break;
+ case '\n':
+ sb.append("\\n");
+ break;
+ case '\f':
+ sb.append("\\f");
+ break;
+ case '\r':
+ sb.append("\\r");
+ break;
+ default:
+ if (c < ' ')
+ {
+ t = "000" + Integer.toHexString(c);
+ sb.append("\\u").append(t.substring(t.length() - 4));
+ }
+ else
+ {
+ sb.append(c);
+ }
+ }
+ }
+ sb.append('"');
+ return sb.toString();
+ }
+
+ public static String setPlayerName(Player player, String text)
+ {
+ return text.replaceAll("(?i)\\{PLAYER\\}", player.getName());
+ }
+ }
}
diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialTask.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialTask.java
index 0934fff08..6b4d2a332 100644
--- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialTask.java
+++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorials/TutorialTask.java
@@ -1,13 +1,21 @@
package mineplex.game.clans.tutorials;
+import java.util.Iterator;
+
+import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import mineplex.core.common.util.C;
import mineplex.core.common.util.NautArrayList;
import mineplex.core.common.util.UtilServer;
+import mineplex.core.common.util.UtilText;
import mineplex.core.common.util.UtilTextMiddle;
+import mineplex.core.updater.UpdateType;
+import mineplex.core.updater.event.UpdateEvent;
+import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.ClansManager;
public class TutorialTask implements Listener
@@ -22,6 +30,8 @@ public class TutorialTask implements Listener
protected String _description;
protected String _finishMessage;
+ protected String[] _subtasks;
+
protected Location _taskPos;
// How much time after the beginning the task/last teleport it should take to teleport back to _taskPos.
@@ -29,7 +39,6 @@ public class TutorialTask implements Listener
protected long _descriptionWaitTime = 30000;
- protected NautArrayList _playersFinished = new NautArrayList<>();
protected NautArrayList _inTask = new NautArrayList<>();
private long _lastTaskTp;
@@ -55,7 +64,7 @@ public class TutorialTask implements Listener
{
_inTask.add(player.getName());
- trySendDescription(player);
+ trySendDescription(player, true);
customStartFor(player);
@@ -92,12 +101,41 @@ public class TutorialTask implements Listener
}
}
+ //@EventHandler
+ //todo: fix the multiline subtitles
+ public void displaySubtasks(UpdateEvent event)
+ {
+ if (!event.getType().equals(UpdateType.SEC))
+ {
+ return;
+ }
+
+ if (_subtasks == null || _subtasks.length == 0)
+ {
+ return;
+ }
+
+ Iterator iterator = _inTask.iterator();
+ while (iterator.hasNext())
+ {
+ Player player = Bukkit.getPlayer(iterator.next());
+
+ if ((System.currentTimeMillis() - _tutorial.get(player).CurrentTaskStartTime) >= 15000)
+ {
+ if (isDoing(player))
+ {
+ UtilTextMiddle.display("", UtilText.arrayToString(_subtasks, "\n"), 1, 25, 25, player);
+ }
+ }
+ }
+ }
+
public boolean isDoing(Player player)
{
return _inTask != null && player != null && _inTask.contains(player.getName());
}
- public void trySendDescription(Player player)
+ public void trySendDescription(Player player, boolean force)
{
if (!_tutorial.isInTutorial(player))
{
@@ -111,19 +149,24 @@ public class TutorialTask implements Listener
return;
}
- if (System.currentTimeMillis() - client.LastDescriptionSentTime > client.CurrentTask.getDescriptionWaitTime())
+ if (force || System.currentTimeMillis() - client.LastDescriptionSentTime > client.CurrentTask.getDescriptionWaitTime())
{
+ String description = _description;
+ ClanInfo clan = getClans().getClan(player);
+ if (clan != null) description = description.replace("(clan)", clan.getName());
+ description = description.replace("{", C.cAqua).replace("}", C.cWhite);
+
_tutorial._manager.sendTutorialMsg(player, " ");
_tutorial._manager.sendTutorialMsg(player, " ");
_tutorial._manager.sendTutorialMsg(player, " ");
_tutorial._manager.sendTutorialMsg(player, C.cDGreenB + C.Strike + "---------------------------------------------");
_tutorial._manager.sendTutorialMsg(player, " ");
- _tutorial._manager.sendTutorialMsg(player, C.cYellowB + "Part " + _id + ": " + _displayName);
- _tutorial._manager.sendTutorialMsg(player, C.cWhite + " " + _description.replace("{", C.cAqua).replace("}", C.cWhite));
+ _tutorial._manager.sendTutorialMsg(player, C.cYellowB + "Part " + (_id + 1) + ": " + _displayName);
+ _tutorial._manager.sendTutorialMsg(player, C.cWhite + " " + description);
_tutorial._manager.sendTutorialMsg(player, " ");
_tutorial._manager.sendTutorialMsg(player, C.cDGreenB + C.Strike + "---------------------------------------------");
- UtilTextMiddle.display("", getDisplayName());
+ UtilTextMiddle.display("", getDisplayName(), player);
client.LastDescriptionSentTime = System.currentTimeMillis();
}
@@ -169,30 +212,39 @@ public class TutorialTask