UltimateStacker/src/main/java/com/songoda/ultimatestacker/utils/Methods.java

236 lines
8.3 KiB
Java
Raw Normal View History

2018-11-06 04:33:10 +01:00
package com.songoda.ultimatestacker.utils;
2019-09-09 18:08:04 +02:00
import com.songoda.core.compatibility.CompatibleMaterial;
2020-04-26 14:42:18 +02:00
import com.songoda.core.nms.NmsManager;
import com.songoda.core.nms.nbt.NBTItem;
2019-09-03 22:38:00 +02:00
import com.songoda.core.utils.TextUtils;
2018-11-06 04:33:10 +01:00
import com.songoda.ultimatestacker.UltimateStacker;
2019-09-07 23:55:16 +02:00
import com.songoda.ultimatestacker.settings.Settings;
2020-09-01 20:44:39 +02:00
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
2018-11-06 04:33:10 +01:00
import org.bukkit.block.CreatureSpawner;
2020-09-01 20:13:53 +02:00
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
2019-07-13 21:49:40 +02:00
import org.bukkit.inventory.Inventory;
2018-11-06 04:33:10 +01:00
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BlockStateMeta;
import org.bukkit.inventory.meta.ItemMeta;
2020-04-26 14:42:18 +02:00
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
2018-11-06 04:33:10 +01:00
public class Methods {
2019-07-13 21:49:40 +02:00
public static void updateInventory(Item item, Inventory inventory) {
int amount = UltimateStacker.getActualItemAmount(item);
ItemStack itemStack = item.getItemStack();
final int maxStack = itemStack.getMaxStackSize();
2019-07-13 21:49:40 +02:00
while (amount > 0) {
int subtract = Math.min(amount, maxStack);
2019-07-13 21:49:40 +02:00
amount -= subtract;
ItemStack newItem = itemStack.clone();
2019-07-13 21:49:40 +02:00
newItem.setAmount(subtract);
Map<Integer, ItemStack> result = inventory.addItem(newItem);
if (result.get(0) != null) {
amount += result.get(0).getAmount();
break;
}
}
if (amount <= 0)
item.remove();
else
UltimateStacker.updateItemAmount(item, itemStack, amount);
2019-07-13 21:49:40 +02:00
}
2019-09-03 22:38:00 +02:00
// Do not touch! API for older plugins
@Deprecated
public static boolean isMaterialBlacklisted(Material type) {
2019-09-03 22:38:00 +02:00
return UltimateStacker.isMaterialBlacklisted(type);
}
2019-09-03 22:38:00 +02:00
// Do not touch! API for older plugins
@Deprecated
2019-08-19 20:35:15 +02:00
public static boolean isMaterialBlacklisted(Material type, byte data) {
2019-09-03 22:38:00 +02:00
return UltimateStacker.isMaterialBlacklisted(type, data);
2019-08-19 20:35:15 +02:00
}
2019-09-03 22:38:00 +02:00
// Do not touch! API for older plugins
@Deprecated
2019-08-27 16:35:48 +02:00
public static void updateItemAmount(Item item, int newAmount) {
2019-09-03 22:38:00 +02:00
UltimateStacker.updateItemAmount(item, newAmount);
2019-08-27 16:35:48 +02:00
}
2019-09-03 22:38:00 +02:00
// Do not touch! API for older plugins
@Deprecated
public static void updateItemAmount(Item item, ItemStack itemStack, int newAmount) {
2019-09-03 22:38:00 +02:00
UltimateStacker.updateItemAmount(item, itemStack, newAmount);
}
2019-09-03 22:38:00 +02:00
// Do not touch! API for older plugins
@Deprecated
public static int getActualItemAmount(Item item) {
2019-09-03 22:38:00 +02:00
return UltimateStacker.getActualItemAmount(item);
}
2019-09-03 22:38:00 +02:00
// Do not touch! API for older plugins
@Deprecated
public static boolean hasCustomAmount(Item item) {
2019-09-03 22:38:00 +02:00
return UltimateStacker.hasCustomAmount(item);
}
public static String compileItemName(ItemStack item, int amount) {
2019-09-07 23:55:16 +02:00
String nameFormat = Settings.NAME_FORMAT_ITEM.getString();
2019-09-03 22:38:00 +02:00
String displayName = Methods.formatText(UltimateStacker.getInstance().getItemFile()
.getString("Items." + item.getType().name() + ".Display Name"));
if (item.hasItemMeta() && item.getItemMeta().hasDisplayName())
2019-09-07 23:55:16 +02:00
displayName = Settings.NAME_FORMAT_RESET.getBoolean() ?
ChatColor.stripColor(item.getItemMeta().getDisplayName()) : item.getItemMeta().getDisplayName();
nameFormat = nameFormat.replace("{TYPE}", displayName);
nameFormat = nameFormat.replace("{AMT}", Integer.toString(amount));
2019-09-07 23:55:16 +02:00
if (amount == 1 && !Settings.SHOW_STACK_SIZE_SINGLE.getBoolean()) {
nameFormat = nameFormat.replaceAll("\\[.*?]", "");
} else {
nameFormat = nameFormat.replace("[", "").replace("]", "");
}
2019-09-03 22:38:00 +02:00
String info = TextUtils.convertToInvisibleString(Methods.insertSemicolon(String.valueOf(amount)) + ":");
return info + Methods.formatText(nameFormat).trim();
}
2018-11-06 04:33:10 +01:00
public static String compileSpawnerName(EntityType entityType, int amount) {
String nameFormat = UltimateStacker.getInstance().getConfig().getString("Spawners.Name Format");
2019-09-03 22:38:00 +02:00
String displayName = Methods.formatText(UltimateStacker.getInstance().getSpawnerFile().getString("Spawners." + entityType.name() + ".Display Name"));
2018-11-06 04:33:10 +01:00
nameFormat = nameFormat.replace("{TYPE}", displayName);
nameFormat = nameFormat.replace("{AMT}", Integer.toString(amount));
2020-08-25 01:01:11 +02:00
return Methods.formatText(nameFormat).trim();
2018-11-06 04:33:10 +01:00
}
public static String compileEntityName(Entity entity, int amount) {
2019-09-07 23:55:16 +02:00
String nameFormat = Settings.NAME_FORMAT_ENTITY.getString();
2019-09-03 22:38:00 +02:00
String displayName = Methods.formatText(UltimateStacker.getInstance().getMobFile().getString("Mobs." + entity.getType().name() + ".Display Name"));
2018-11-06 04:33:10 +01:00
nameFormat = nameFormat.replace("{TYPE}", displayName);
nameFormat = nameFormat.replace("{AMT}", Integer.toString(amount));
2020-08-25 01:01:11 +02:00
return Methods.formatText(nameFormat).trim();
2018-11-06 04:33:10 +01:00
}
public static void takeItem(Player player, int amount) {
if (player.getGameMode() == GameMode.CREATIVE) return;
ItemStack item = player.getInventory().getItemInHand();
int result = item.getAmount() - amount;
item.setAmount(result);
player.setItemInHand(result > 0 ? item : null);
}
public static ItemStack getSpawnerItem(EntityType entityType, int amount) {
2019-09-09 18:08:04 +02:00
ItemStack item = CompatibleMaterial.SPAWNER.getItem();
2018-11-06 04:33:10 +01:00
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(Methods.compileSpawnerName(entityType, amount));
2018-11-06 06:09:40 +01:00
CreatureSpawner cs = (CreatureSpawner) ((BlockStateMeta) meta).getBlockState();
2018-11-06 04:33:10 +01:00
cs.setSpawnedType(entityType);
((BlockStateMeta) meta).setBlockState(cs);
item.setItemMeta(meta);
2020-04-26 14:42:18 +02:00
NBTItem nbtItem = NmsManager.getNbt().of(item);
nbtItem.set("spawner_stack_size", amount);
return nbtItem.finish();
}
2019-06-17 23:48:34 +02:00
public static boolean isInt(String number) {
if (number == null || number.equals(""))
return false;
try {
Integer.parseInt(number);
} catch (NumberFormatException e) {
return false;
}
return true;
}
2019-01-10 21:27:01 +01:00
private static Map<String, Location> 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<String> 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 "";
StringBuilder hidden = new StringBuilder();
for (char c : s.toCharArray()) hidden.append(";").append(c);
return hidden.toString();
}
2019-01-10 21:27:01 +01:00
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<key, value> {
public final key x;
public final value y;
2019-07-30 03:44:09 +02:00
public Tuple(key x, value y) {
this.x = x;
this.y = y;
}
public key getKey() {
return this.x;
}
2019-01-10 21:27:01 +01:00
public value getValue() {
return this.y;
}
}
2018-11-06 04:33:10 +01:00
}