diff --git a/pom.xml b/pom.xml
index e092bac..c467fdc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
com.songoda
UltimateStacker
4.0.0
- 2.1.3
+ 2.1.4
clean install
UltimateStacker-${project.version}
diff --git a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
index 3cfac1b..d3e9785 100644
--- a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
+++ b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java
@@ -135,7 +135,7 @@ public class UltimateStacker extends SongodaPlugin {
for (EntityType value : EntityType.values()) {
if (value.isSpawnable() && value.isAlive() && !value.toString().contains("ARMOR")) {
mobFile.addDefault("Mobs." + value.name() + ".Enabled", true);
- mobFile.addDefault("Mobs." + value.name() + ".Display Name", Methods.formatText(value.name().toLowerCase().replace("_", " "), true));
+ mobFile.addDefault("Mobs." + value.name() + ".Display Name", TextUtils.formatText(value.name().toLowerCase().replace("_", " "), true));
mobFile.addDefault("Mobs." + value.name() + ".Max Stack Size", -1);
mobFile.addDefault("Mobs." + value.name() + ".Kill Whole Stack", false);
}
@@ -154,7 +154,7 @@ public class UltimateStacker extends SongodaPlugin {
for (EntityType value : EntityType.values()) {
if (value.isSpawnable() && value.isAlive() && !value.toString().contains("ARMOR")) {
spawnerFile.addDefault("Spawners." + value.name() + ".Max Stack Size", -1);
- spawnerFile.addDefault("Spawners." + value.name() + ".Display Name", Methods.formatText(value.name().toLowerCase().replace("_", " "), true));
+ spawnerFile.addDefault("Spawners." + value.name() + ".Display Name", TextUtils.formatText(value.name().toLowerCase().replace("_", " "), true));
}
}
spawnerFile.load();
diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandConvert.java b/src/main/java/com/songoda/ultimatestacker/commands/CommandConvert.java
index 8ed02a2..beec318 100644
--- a/src/main/java/com/songoda/ultimatestacker/commands/CommandConvert.java
+++ b/src/main/java/com/songoda/ultimatestacker/commands/CommandConvert.java
@@ -2,6 +2,7 @@ package com.songoda.ultimatestacker.commands;
import com.songoda.core.commands.AbstractCommand;
import com.songoda.core.gui.GuiManager;
+import com.songoda.core.utils.TextUtils;
import com.songoda.ultimatestacker.gui.GUIConvert;
import com.songoda.ultimatestacker.utils.Methods;
import org.bukkit.Bukkit;
@@ -25,7 +26,7 @@ public class CommandConvert extends AbstractCommand {
|| Bukkit.getPluginManager().isPluginEnabled("StackMob")) {
guiManager.showGUI((Player) sender, new GUIConvert());
} else {
- sender.sendMessage(Methods.formatText("&cYou need to have the plugin &4WildStacker &cor &4StackMob &cenabled " +
+ sender.sendMessage(TextUtils.formatText("&cYou need to have the plugin &4WildStacker &cor &4StackMob &cenabled " +
"in order to convert data."));
}
return ReturnType.SUCCESS;
diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandGiveSpawner.java b/src/main/java/com/songoda/ultimatestacker/commands/CommandGiveSpawner.java
index a0804d7..a3f4998 100644
--- a/src/main/java/com/songoda/ultimatestacker/commands/CommandGiveSpawner.java
+++ b/src/main/java/com/songoda/ultimatestacker/commands/CommandGiveSpawner.java
@@ -1,6 +1,7 @@
package com.songoda.ultimatestacker.commands;
import com.songoda.core.commands.AbstractCommand;
+import com.songoda.core.utils.TextUtils;
import com.songoda.ultimatestacker.UltimateStacker;
import com.songoda.ultimatestacker.utils.Methods;
import org.bukkit.Bukkit;
@@ -48,7 +49,7 @@ public class CommandGiveSpawner extends AbstractCommand {
if (types.isSpawnable() && types.isAlive() && !types.toString().contains("ARMOR"))
list.append(types.name().toUpperCase().replace(" ", "_")).append("&7, &6");
}
- sender.sendMessage(Methods.formatText("&6" + list));
+ sender.sendMessage(TextUtils.formatText("&6" + list));
} else {
int amt = args.length == 3 ? Integer.parseInt(args[2]) : 1;
diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandRemoveAll.java b/src/main/java/com/songoda/ultimatestacker/commands/CommandRemoveAll.java
index 1edd082..bea99df 100644
--- a/src/main/java/com/songoda/ultimatestacker/commands/CommandRemoveAll.java
+++ b/src/main/java/com/songoda/ultimatestacker/commands/CommandRemoveAll.java
@@ -66,7 +66,7 @@ public class CommandRemoveAll extends AbstractCommand {
+ type + " exist that could be removed.").sendPrefixedMessage(sender);
} else {
plugin.getLocale().newMessage("&7Removed &6" + amountRemoved + (all ? " " : " stacked ")
- + Methods.formatText(type.toLowerCase(), true) + " &7Successfully.").sendPrefixedMessage(sender);
+ + TextUtils.formatText(type.toLowerCase(), true) + " &7Successfully.").sendPrefixedMessage(sender);
}
return ReturnType.SUCCESS;
}
diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandSpawn.java b/src/main/java/com/songoda/ultimatestacker/commands/CommandSpawn.java
index 0b2d174..318d114 100644
--- a/src/main/java/com/songoda/ultimatestacker/commands/CommandSpawn.java
+++ b/src/main/java/com/songoda/ultimatestacker/commands/CommandSpawn.java
@@ -1,6 +1,7 @@
package com.songoda.ultimatestacker.commands;
import com.songoda.core.commands.AbstractCommand;
+import com.songoda.core.utils.TextUtils;
import com.songoda.ultimatestacker.UltimateStacker;
import com.songoda.ultimatestacker.stackable.entity.EntityStack;
import com.songoda.ultimatestacker.utils.Methods;
@@ -51,7 +52,7 @@ public class CommandSpawn extends AbstractCommand {
if (types.isSpawnable() && types.isAlive() && !types.toString().contains("ARMOR"))
list.append(types.name().toUpperCase().replace(" ", "_")).append("&7, &6");
}
- sender.sendMessage(Methods.formatText("&6" + list));
+ sender.sendMessage(TextUtils.formatText("&6" + list));
} else {
LivingEntity entity = (LivingEntity)player.getWorld().spawnEntity(player.getTargetBlock((Set)null, 200).getLocation(), type);
EntityStack stack = plugin.getEntityStackManager().addStack(entity);
diff --git a/src/main/java/com/songoda/ultimatestacker/gui/GUIConvertWhat.java b/src/main/java/com/songoda/ultimatestacker/gui/GUIConvertWhat.java
index d41e860..51d62b8 100644
--- a/src/main/java/com/songoda/ultimatestacker/gui/GUIConvertWhat.java
+++ b/src/main/java/com/songoda/ultimatestacker/gui/GUIConvertWhat.java
@@ -3,6 +3,7 @@ package com.songoda.ultimatestacker.gui;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.gui.Gui;
import com.songoda.core.gui.GuiUtils;
+import com.songoda.core.utils.TextUtils;
import com.songoda.ultimatestacker.UltimateStacker;
import com.songoda.ultimatestacker.convert.Convert;
import com.songoda.ultimatestacker.utils.Methods;
@@ -62,6 +63,6 @@ public class GUIConvertWhat extends Gui {
convertFrom.disablePlugin();
exit();
- player.sendMessage(Methods.formatText("&7Data converted successfully. Remove &6" + convertFrom.getName() + " &7and restart your server to continue."));
+ player.sendMessage(TextUtils.formatText("&7Data converted successfully. Remove &6" + convertFrom.getName() + " &7and restart your server to continue."));
}
}
diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java b/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java
index ab08de5..2ce73bf 100644
--- a/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java
+++ b/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java
@@ -1,6 +1,7 @@
package com.songoda.ultimatestacker.stackable.block;
import com.songoda.core.compatibility.CompatibleMaterial;
+import com.songoda.core.utils.TextUtils;
import com.songoda.ultimatestacker.UltimateStacker;
import com.songoda.ultimatestacker.settings.Settings;
import com.songoda.ultimatestacker.stackable.Hologramable;
@@ -83,12 +84,12 @@ public class BlockStack implements Stackable, Hologramable {
@Override
public String getHologramName() {
String nameFormat = Settings.NAME_FORMAT_BLOCK.getString();
- String displayName = Methods.formatText(material.name().toLowerCase().replace("_", " "), true);
+ String displayName = TextUtils.formatText(material.name().toLowerCase().replace("_", " "), true);
nameFormat = nameFormat.replace("{TYPE}", displayName);
nameFormat = nameFormat.replace("{AMT}", Integer.toString(amount));
- return Methods.formatText(nameFormat).trim();
+ return TextUtils.formatText(nameFormat).trim();
}
@Override
diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/ColdEntityStack.java b/src/main/java/com/songoda/ultimatestacker/stackable/entity/ColdEntityStack.java
index b3614c5..ba8e51f 100644
--- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/ColdEntityStack.java
+++ b/src/main/java/com/songoda/ultimatestacker/stackable/entity/ColdEntityStack.java
@@ -102,9 +102,18 @@ public class ColdEntityStack implements Stackable {
return entity;
}
- LivingEntity newEntity = (LivingEntity) nbtEntity.spawn(location);
- stackedEntities.removeFirst();
- plugin.getDataManager().deleteStackedEntity(newEntity.getUniqueId());
+ LivingEntity newEntity = null;
+ for (int i = 0; i < 5; i++) {
+ newEntity = (LivingEntity) nbtEntity.spawn(location);
+
+ if (newEntity != null) {
+ stackedEntities.removeFirst();
+ plugin.getDataManager().deleteStackedEntity(newEntity.getUniqueId());
+ break;
+ }
+ }
+ if (newEntity == null)
+ plugin.getDataManager().deleteStackedEntity(hostUniqueId);
return newEntity;
}
diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStack.java b/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStack.java
index b52e5b8..b1ef678 100644
--- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStack.java
+++ b/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStack.java
@@ -1,5 +1,6 @@
package com.songoda.ultimatestacker.stackable.entity;
+import com.songoda.core.compatibility.ServerVersion;
import com.songoda.lootables.loot.Drop;
import com.songoda.lootables.loot.DropUtils;
import com.songoda.ultimatestacker.UltimateStacker;
@@ -120,7 +121,7 @@ public class EntityStack extends ColdEntityStack {
plugin.addExp(killed.getKiller(), this);
}
- private void handleSingleStackDeath(LivingEntity killed, List drops, EntityDeathEvent event) {
+ private void handleSingleStackDeath(LivingEntity killed, List drops, int droppedExp, EntityDeathEvent event) {
EntityStackManager stackManager = plugin.getEntityStackManager();
killed.remove();
@@ -129,6 +130,13 @@ public class EntityStack extends ColdEntityStack {
//if (!EntityUtils.isAware(killed))
// EntityUtils.setUnaware(newEntity);
+ // In versions 1.14 and below experience is not dropping. Because of this we are doing this ourselves.
+ if (ServerVersion.isServerVersionAtOrBelow(ServerVersion.V1_14)) {
+ Location killedLocation = killed.getLocation();
+ if (droppedExp > 0)
+ killedLocation.getWorld().spawn(killedLocation, ExperienceOrb.class).setExperience(droppedExp);
+ }
+
DropUtils.processStackedDrop(killed, drops, event);
newEntity.setVelocity(killed.getVelocity());
@@ -161,7 +169,7 @@ public class EntityStack extends ColdEntityStack {
return;
}
}
- handleSingleStackDeath(killed, drops, event);
+ handleSingleStackDeath(killed, drops, droppedExp, event);
}
}
diff --git a/src/main/java/com/songoda/ultimatestacker/utils/Methods.java b/src/main/java/com/songoda/ultimatestacker/utils/Methods.java
index cbba1d8..b499312 100644
--- a/src/main/java/com/songoda/ultimatestacker/utils/Methods.java
+++ b/src/main/java/com/songoda/ultimatestacker/utils/Methods.java
@@ -7,13 +7,9 @@ import com.songoda.core.utils.TextUtils;
import com.songoda.ultimatestacker.UltimateStacker;
import com.songoda.ultimatestacker.settings.Settings;
import com.songoda.ultimatestacker.stackable.entity.custom.CustomEntity;
-import com.songoda.ultimatestacker.stackable.entity.custom.CustomEntityManager;
-import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
-import org.bukkit.Location;
import org.bukkit.Material;
-import org.bukkit.World;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
@@ -24,9 +20,6 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BlockStateMeta;
import org.bukkit.inventory.meta.ItemMeta;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
import java.util.Map;
public class Methods {
@@ -92,7 +85,7 @@ public class Methods {
public static String compileItemName(ItemStack item, int amount) {
String nameFormat = Settings.NAME_FORMAT_ITEM.getString();
- String displayName = Methods.formatText(UltimateStacker.getInstance().getItemFile()
+ String displayName = TextUtils.formatText(UltimateStacker.getInstance().getItemFile()
.getString("Items." + item.getType().name() + ".Display Name"));
if (item.hasItemMeta() && item.getItemMeta().hasDisplayName())
@@ -110,31 +103,31 @@ public class Methods {
String info = TextUtils.convertToInvisibleString(Methods.insertSemicolon(String.valueOf(amount)) + ":");
- return info + Methods.formatText(nameFormat).trim();
+ return info + TextUtils.formatText(nameFormat).trim();
}
public static String compileSpawnerName(EntityType entityType, int amount) {
String nameFormat = UltimateStacker.getInstance().getConfig().getString("Spawners.Name Format");
- String displayName = Methods.formatText(UltimateStacker.getInstance().getSpawnerFile().getString("Spawners." + entityType.name() + ".Display Name"));
+ String displayName = TextUtils.formatText(UltimateStacker.getInstance().getSpawnerFile().getString("Spawners." + entityType.name() + ".Display Name"));
nameFormat = nameFormat.replace("{TYPE}", displayName);
nameFormat = nameFormat.replace("{AMT}", Integer.toString(amount));
- return Methods.formatText(nameFormat).trim();
+ return TextUtils.formatText(nameFormat).trim();
}
public static String compileEntityName(Entity entity, int amount) {
String nameFormat = Settings.NAME_FORMAT_ENTITY.getString();
- String displayName = Methods.formatText(UltimateStacker.getInstance().getMobFile().getString("Mobs." + entity.getType().name() + ".Display Name"));
+ String displayName = TextUtils.formatText(UltimateStacker.getInstance().getMobFile().getString("Mobs." + entity.getType().name() + ".Display Name"));
- CustomEntity customEntity = UltimateStacker.getInstance().getCustomEntityManager().getCustomEntity(entity);
+ CustomEntity customEntity = UltimateStacker.getInstance().getCustomEntityManager().getCustomEntity(entity);
if (customEntity != null)
displayName = customEntity.getDisplayName(entity);
nameFormat = nameFormat.replace("{TYPE}", displayName);
nameFormat = nameFormat.replace("{AMT}", Integer.toString(amount));
- return Methods.formatText(nameFormat).trim();
+ return TextUtils.formatText(nameFormat).trim();
}
public static void takeItem(Player player, int amount) {
@@ -173,31 +166,6 @@ public class Methods {
return true;
}
- private static Map serializeCache = new HashMap<>();
-
- /**
- * Deserializes a location from the string.
- *
- * @param str The string to parse.
- * @return The location that was serialized in the string.
- */
- public static Location unserializeLocation(String str) {
- if (str == null || str.equals(""))
- return null;
- if (serializeCache.containsKey(str)) {
- return serializeCache.get(str).clone();
- }
- String cacheKey = str;
- str = str.replace("y:", ":").replace("z:", ":").replace("w:", "").replace("x:", ":").replace("/", ".");
- List args = Arrays.asList(str.split("\\s*:\\s*"));
-
- World world = Bukkit.getWorld(args.get(0));
- double x = Double.parseDouble(args.get(1)), y = Double.parseDouble(args.get(2)), z = Double.parseDouble(args.get(3));
- Location location = new Location(world, x, y, z, 0, 0);
- serializeCache.put(cacheKey, location.clone());
- return location;
- }
-
public static String insertSemicolon(String s) {
if (s == null || s.equals(""))
return "";
@@ -205,37 +173,4 @@ public class Methods {
for (char c : s.toCharArray()) hidden.append(";").append(c);
return hidden.toString();
}
-
-
- public static String formatText(String text) {
- if (text == null || text.equals(""))
- return "";
- return formatText(text, false);
- }
-
- public static String formatText(String text, boolean cap) {
- if (text == null || text.equals(""))
- return "";
- if (cap)
- text = text.substring(0, 1).toUpperCase() + text.substring(1);
- return ChatColor.translateAlternateColorCodes('&', text);
- }
-
- public static class Tuple {
- public final key x;
- public final value y;
-
- public Tuple(key x, value y) {
- this.x = x;
- this.y = y;
- }
-
- public key getKey() {
- return this.x;
- }
-
- public value getValue() {
- return this.y;
- }
- }
}