mirror of
https://github.com/Zrips/Jobs.git
synced 2025-02-18 13:21:41 +01:00
Add 1.16 features
This commit is contained in:
parent
66a51df12b
commit
1c8316a4c1
@ -2,91 +2,157 @@ package com.gamingmesh.jobs.CMILib;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Color;
|
||||
|
||||
public enum CMIChatColor {
|
||||
BLACK('0'),
|
||||
DARK_BLUE('1'),
|
||||
DARK_GREEN('2'),
|
||||
DARK_AQUA('3'),
|
||||
DARK_RED('4'),
|
||||
DARK_PURPLE('5'),
|
||||
GOLD('6'),
|
||||
GRAY('7'),
|
||||
DARK_GRAY('8'),
|
||||
BLUE('9'),
|
||||
GREEN('a'),
|
||||
AQUA('b'),
|
||||
RED('c'),
|
||||
LIGHT_PURPLE('d'),
|
||||
YELLOW('e'),
|
||||
WHITE('f'),
|
||||
MAGIC('k', false),
|
||||
BOLD('l', false),
|
||||
STRIKETHROUGH('m', false),
|
||||
UNDERLINE('n', false),
|
||||
ITALIC('o', false),
|
||||
RESET('r', false, true);
|
||||
import com.gamingmesh.jobs.CMILib.VersionChecker.Version;
|
||||
|
||||
public class CMIChatColor {
|
||||
|
||||
public static final String colorReplacerPlaceholder = "\uFF06";
|
||||
public static final String hexColorRegex = "(\\{#)([0-9A-Fa-f]{6})(\\})";
|
||||
public static final String hexColorDecolRegex = "(&x)(&[0-9A-Fa-f]){6}";
|
||||
|
||||
private static final Map<Character, CMIChatColor> BY_CHAR = new HashMap<>();
|
||||
private static final Map<String, CMIChatColor> BY_NAME = new HashMap<>();
|
||||
|
||||
public static final CMIChatColor BLACK = new CMIChatColor("Black", '0', 0, 0, 0);
|
||||
public static final CMIChatColor DARK_BLUE = new CMIChatColor("Dark_Blue", '1', 0, 0, 170);
|
||||
public static final CMIChatColor DARK_GREEN = new CMIChatColor("Dark_Green", '2', 0, 170, 0);
|
||||
public static final CMIChatColor DARK_AQUA = new CMIChatColor("Dark_Aqua", '3', 0, 170, 170);
|
||||
public static final CMIChatColor DARK_RED = new CMIChatColor("Dark_Red", '4', 170, 0, 0);
|
||||
public static final CMIChatColor DARK_PURPLE = new CMIChatColor("Dark_Purple", '5', 170, 0, 170);
|
||||
public static final CMIChatColor GOLD = new CMIChatColor("Gold", '6', 255, 170, 0);
|
||||
public static final CMIChatColor GRAY = new CMIChatColor("Gray", '7', 170, 170, 170);
|
||||
public static final CMIChatColor DARK_GRAY = new CMIChatColor("Dark_Gray", '8', 85, 85, 85);
|
||||
public static final CMIChatColor BLUE = new CMIChatColor("Blue", '9', 85, 85, 255);
|
||||
public static final CMIChatColor GREEN = new CMIChatColor("Green", 'a', 85, 255, 85);
|
||||
public static final CMIChatColor AQUA = new CMIChatColor("Aqua", 'b', 85, 255, 255);
|
||||
public static final CMIChatColor RED = new CMIChatColor("Red", 'c', 255, 85, 85);
|
||||
public static final CMIChatColor LIGHT_PURPLE = new CMIChatColor("Light_Purple", 'd', 255, 85, 255);
|
||||
public static final CMIChatColor YELLOW = new CMIChatColor("Yellow", 'e', 255, 255, 85);
|
||||
public static final CMIChatColor WHITE = new CMIChatColor("White", 'f', 255, 255, 255);
|
||||
public static final CMIChatColor MAGIC = new CMIChatColor("Obfuscated", 'k', false);
|
||||
public static final CMIChatColor BOLD = new CMIChatColor("Bold", 'l', false);
|
||||
public static final CMIChatColor STRIKETHROUGH = new CMIChatColor("Strikethrough", 'm', false);
|
||||
public static final CMIChatColor UNDERLINE = new CMIChatColor("Underline", 'n', false);
|
||||
public static final CMIChatColor ITALIC = new CMIChatColor("Italic", 'o', false);
|
||||
public static final CMIChatColor RESET = new CMIChatColor("Reset", 'r', false, true);
|
||||
public static final CMIChatColor HEX = new CMIChatColor("Hex", 'x', false, false);
|
||||
|
||||
private char c;
|
||||
private Boolean color = true;
|
||||
private Boolean reset = false;
|
||||
private Pattern pattern = null;
|
||||
private int red;
|
||||
private int green;
|
||||
private int blue;
|
||||
private String hex = null;
|
||||
private String name;
|
||||
|
||||
CMIChatColor(char c) {
|
||||
this(c, true);
|
||||
public CMIChatColor(String name, char c, int red, int green, int blue) {
|
||||
this(name, c, true, false, red, green, blue);
|
||||
}
|
||||
|
||||
CMIChatColor(char c, Boolean color) {
|
||||
this(c, color, false);
|
||||
public CMIChatColor(String hex) {
|
||||
this.hex = hex;
|
||||
}
|
||||
|
||||
CMIChatColor(char c, Boolean color, Boolean reset) {
|
||||
public CMIChatColor(String name, char c, Boolean color) {
|
||||
this(name, c, color, false);
|
||||
}
|
||||
|
||||
public CMIChatColor(String name, char c, Boolean color, Boolean reset) {
|
||||
this(name, c, color, reset, -1, -1, -1);
|
||||
}
|
||||
|
||||
public CMIChatColor(String name, char c, Boolean color, Boolean reset, int red, int green, int blue) {
|
||||
this.name = name;
|
||||
this.c = c;
|
||||
this.color = color;
|
||||
this.reset = reset;
|
||||
this.pattern = Pattern.compile("(?i)(&[" + c + "])");
|
||||
this.red = red;
|
||||
this.green = green;
|
||||
this.blue = blue;
|
||||
|
||||
if (Version.isCurrentLower(Version.v1_16_R1) && name.equalsIgnoreCase("Hex"))
|
||||
return;
|
||||
|
||||
BY_CHAR.put(Character.valueOf(c), this);
|
||||
BY_NAME.put(this.getName().toLowerCase().replace("_", ""), this);
|
||||
}
|
||||
|
||||
public static String translateAlternateColorCodes(String text) {
|
||||
public static String translate(String text) {
|
||||
if (text == null)
|
||||
return "";
|
||||
|
||||
if (text.contains("#")) {
|
||||
|
||||
Pattern prepattern = Pattern.compile(CMIChatColor.hexColorRegex);
|
||||
|
||||
Matcher match = prepattern.matcher(text);
|
||||
|
||||
while (match.find()) {
|
||||
String string = match.group();
|
||||
|
||||
StringBuilder magic = new StringBuilder("§x");
|
||||
for (char c : string.substring(2, string.length() - 1).toCharArray()) {
|
||||
magic.append('§').append(c);
|
||||
}
|
||||
text = text.replace(string, magic.toString());
|
||||
}
|
||||
}
|
||||
|
||||
return ChatColor.translateAlternateColorCodes('&', text);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String translateAlternateColorCodes(String text) {
|
||||
return translate(text);
|
||||
}
|
||||
|
||||
public static String colorize(String text) {
|
||||
if (text == null)
|
||||
return null;
|
||||
return ChatColor.translateAlternateColorCodes('&', text);
|
||||
}
|
||||
|
||||
public static String deColorize(String text) {
|
||||
if (text == null)
|
||||
return null;
|
||||
return text.replace("§", "&");
|
||||
return text == null ? "" : translate(text);
|
||||
}
|
||||
|
||||
public static List<String> deColorize(List<String> text) {
|
||||
if (text == null)
|
||||
return null;
|
||||
return new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < text.size(); i++) {
|
||||
text.set(i, deColorize(text.get(i)));
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
public static String deColorize(String text) {
|
||||
if (text == null)
|
||||
return "";
|
||||
|
||||
text = CMIChatColor.translate(text);
|
||||
return text.replace("§", "&");
|
||||
}
|
||||
|
||||
public static String stripColor(String text) {
|
||||
if (text == null)
|
||||
return null;
|
||||
text = ChatColor.translateAlternateColorCodes('&', text);
|
||||
return "";
|
||||
text = CMIChatColor.translate(text);
|
||||
return ChatColor.stripColor(text);
|
||||
}
|
||||
|
||||
public static String getLastColors(String text) {
|
||||
if (text == null)
|
||||
return null;
|
||||
text = CMIChatColor.translateAlternateColorCodes(text);
|
||||
return "";
|
||||
// text = CMIChatColor.translate(text);
|
||||
return ChatColor.getLastColors(text);
|
||||
}
|
||||
|
||||
@ -128,18 +194,18 @@ public enum CMIChatColor {
|
||||
|
||||
if (text.length() > 1) {
|
||||
String formated = text.toLowerCase().replace("_", "");
|
||||
for (CMIChatColor one : CMIChatColor.values()) {
|
||||
if (one.name().replace("_", "").equalsIgnoreCase(formated))
|
||||
return one;
|
||||
for (Entry<String, CMIChatColor> one : BY_NAME.entrySet()) {
|
||||
if (one.getKey().equalsIgnoreCase(formated))
|
||||
return one.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
if (or.length() > 1 && String.valueOf(or.charAt(or.length() - 2)).equalsIgnoreCase("&")) {
|
||||
text = text.substring(text.length() - 1, text.length());
|
||||
|
||||
for (CMIChatColor one : CMIChatColor.values()) {
|
||||
if (String.valueOf(one.getChar()).equalsIgnoreCase(text))
|
||||
return one;
|
||||
for (Entry<Character, CMIChatColor> one : BY_CHAR.entrySet()) {
|
||||
if (String.valueOf(one.getKey()).equalsIgnoreCase(text))
|
||||
return one.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
@ -147,11 +213,11 @@ public enum CMIChatColor {
|
||||
}
|
||||
|
||||
public static CMIChatColor getRandomColor() {
|
||||
List<CMIChatColor> ls = new ArrayList<>();
|
||||
for (CMIChatColor one : CMIChatColor.values()) {
|
||||
if (!one.isColor())
|
||||
List<CMIChatColor> ls = new ArrayList<CMIChatColor>();
|
||||
for (Entry<String, CMIChatColor> one : BY_NAME.entrySet()) {
|
||||
if (!one.getValue().isColor())
|
||||
continue;
|
||||
ls.add(one);
|
||||
ls.add(one.getValue());
|
||||
}
|
||||
Collections.shuffle(ls);
|
||||
return ls.get(0);
|
||||
@ -160,4 +226,38 @@ public enum CMIChatColor {
|
||||
public Pattern getPattern() {
|
||||
return pattern;
|
||||
}
|
||||
|
||||
public Color getRGBColor() {
|
||||
return blue < 0 ? null : Color.fromBGR(blue, green, red);
|
||||
}
|
||||
|
||||
public String getHex() {
|
||||
return hex;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getCleanName() {
|
||||
return name.replace("_", "");
|
||||
}
|
||||
|
||||
public static Map<String, CMIChatColor> getByName() {
|
||||
return BY_NAME;
|
||||
}
|
||||
|
||||
public static String getHexFromCoord(int x, int y) {
|
||||
x = x < 0 ? 0 : x > 255 ? 255 : x;
|
||||
y = y < 0 ? 0 : y > 255 ? 255 : y;
|
||||
|
||||
int blue = (int) (255 - y * 255 * (1.0 + Math.sin(6.3 * x)) / 2);
|
||||
int green = (int) (255 - y * 255 * (1.0 + Math.cos(6.3 * x)) / 2);
|
||||
int red = (int) (255 - y * 255 * (1.0 - Math.sin(6.3 * x)) / 2);
|
||||
String hex = Integer.toHexString((red << 16) + (green << 8) + blue & 0xffffff);
|
||||
while (hex.length() < 6) {
|
||||
hex = "0" + hex;
|
||||
}
|
||||
return "#" + hex;
|
||||
}
|
||||
}
|
||||
|
@ -245,6 +245,14 @@ public enum CMIEntityType {
|
||||
"OTlkYzNmMDBlY2FiMjI0OWJiNmExNmM4YzUxMTVjZWI5ZjIzMjA1YTBkNTVjYzBlOWJhYmQyNTYyZjc5NTljNCJ9fX0==",
|
||||
"ZTZiNzRlMDUyYjc0Mjg4Nzk5YmE2ZDlmMzVjNWQwMjIxY2Y4YjA0MzMxNTQ3ZWMyZjY4ZDczNTk3YWUyYzliIn19fQ==",
|
||||
"YmIxNzc3NDY2MjUxMmQ3ODdlZjc3YjFhNDZhMDRlMmM2ZmQ2Nzc5NGJmN2Y3Nzk1NjZlYjIxYzgxNDNhYWQ5ZSJ9fX0=")),
|
||||
|
||||
// 1.16
|
||||
ZOMBIFIED_PIGLIN(929, "Zombified Piglin", Arrays.asList("N2VhYmFlY2M1ZmFlNWE4YTQ5Yzg4NjNmZjQ4MzFhYWEyODQxOThmMWEyMzk4ODkwYzc2NWUwYThkZTE4ZGE4YyJ9fX0=")),
|
||||
HOGLIN(925, "Hoglin", Arrays.asList("OWJiOWJjMGYwMWRiZDc2MmEwOGQ5ZTc3YzA4MDY5ZWQ3Yzk1MzY0YWEzMGNhMTA3MjIwODU2MWI3MzBlOGQ3NSJ9fX0=")),
|
||||
PIGLIN(926, "Piglin", Arrays.asList("OWYxODEwN2QyNzVmMWNiM2E5Zjk3M2U1OTI4ZDU4NzlmYTQwMzI4ZmYzMjU4MDU0ZGI2ZGQzZTdjMGNhNjMzMCJ9fX0=")),
|
||||
STRIDER(927, "Strider", Arrays.asList("MThhOWFkZjc4MGVjN2RkNDYyNWM5YzA3NzkwNTJlNmExNWE0NTE4NjY2MjM1MTFlNGM4MmU5NjU1NzE0YjNjMSJ9fX0=")),
|
||||
ZOGLIN(928, "Zoglin", Arrays.asList("ZTY3ZTE4NjAyZTAzMDM1YWQ2ODk2N2NlMDkwMjM1ZDg5OTY2NjNmYjllYTQ3NTc4ZDNhN2ViYmM0MmE1Y2NmOSJ9fX0=")),
|
||||
|
||||
// if possible we can remove this string for each texture to save up some space
|
||||
// eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUv
|
||||
UNKNOWN(999, "Unknown");
|
||||
@ -271,6 +279,11 @@ public enum CMIEntityType {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.secondaryName = secondaryName;
|
||||
for (String one : headTextures) {
|
||||
String text = one;
|
||||
if (text.length() < 150)
|
||||
text = "" + text;
|
||||
}
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
|
@ -3,8 +3,11 @@ package com.gamingmesh.jobs.CMILib;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Skull;
|
||||
@ -18,8 +21,8 @@ public enum CMIMaterial {
|
||||
ACACIA_BOAT(447, 0, 27326, "Acacia Boat", "BOAT_ACACIA"),
|
||||
ACACIA_BUTTON(13993, "Acacia Button"),
|
||||
ACACIA_DOOR(430, 0, 23797, "Acacia Door", "ACACIA_DOOR_ITEM"),
|
||||
ACACIA_FENCE(192, 0, 4569, "Acacia Fence"),
|
||||
ACACIA_FENCE_GATE(187, 0, 14145, "Acacia Fence Gate"),
|
||||
ACACIA_FENCE(192, 0, 4569, Arrays.asList(CMIMaterialCriteria.seeThrow), "Acacia Fence"),
|
||||
ACACIA_FENCE_GATE(187, 0, 14145, Arrays.asList(CMIMaterialCriteria.seeThrow), "Acacia Fence Gate"),
|
||||
ACACIA_LEAVES(161, 0, 16606, "Acacia Leaves", "LEAVES_2"),
|
||||
ACACIA_LOG(162, 0, 8385, "Acacia Log", "LOG_2"),
|
||||
ACACIA_PLANKS(5, 4, 31312, "Acacia Wood Plank", "Acacia Planks"),
|
||||
@ -53,8 +56,8 @@ public enum CMIMaterial {
|
||||
BIRCH_BOAT(445, 0, 28104, "Birch Boat", "BOAT_BIRCH"),
|
||||
BIRCH_BUTTON(26934, "Birch Button"),
|
||||
BIRCH_DOOR(428, 0, 14759, "Birch Door", "BIRCH_DOOR_ITEM"),
|
||||
BIRCH_FENCE(189, 0, 17347, "Birch Fence"),
|
||||
BIRCH_FENCE_GATE(184, 0, 6322, "Birch Fence Gate"),
|
||||
BIRCH_FENCE(189, 0, 17347, Arrays.asList(CMIMaterialCriteria.seeThrow), "Birch Fence"),
|
||||
BIRCH_FENCE_GATE(184, 0, 6322, Arrays.asList(CMIMaterialCriteria.seeThrow), "Birch Fence Gate"),
|
||||
BIRCH_LEAVES(18, 2, 12601, "Birch Leaves", "LEAVES"),
|
||||
BIRCH_LOG(17, 2, 26727, "Birch Log", "LOG"),
|
||||
BIRCH_PLANKS(5, 2, 29322, "Birch Wood Plank"),
|
||||
@ -71,8 +74,8 @@ public enum CMIMaterial {
|
||||
BLACK_CONCRETE_POWDER(252, 15, 16150, "Black Concrete Powder", "CONCRETE_POWDER"),
|
||||
BLACK_GLAZED_TERRACOTTA(250, 0, 29678, "Black Glazed Terracotta"),
|
||||
BLACK_SHULKER_BOX(234, 0, 24076, "Black Shulker Box"),
|
||||
BLACK_STAINED_GLASS(95, 15, 13941, "Black Stained Glass", "STAINED_GLASS"),
|
||||
BLACK_STAINED_GLASS_PANE(160, 15, 13201, "Black Stained Glass Pane", "STAINED_GLASS_PANE"),
|
||||
BLACK_STAINED_GLASS(95, 15, 13941, Arrays.asList(CMIMaterialCriteria.seeThrow), "Black Stained Glass", "STAINED_GLASS"),
|
||||
BLACK_STAINED_GLASS_PANE(160, 15, 13201, Arrays.asList(CMIMaterialCriteria.seeThrow), "Black Stained Glass Pane", "STAINED_GLASS_PANE"),
|
||||
BLACK_TERRACOTTA(159, 15, 26691, "Black Terracotta", "STAINED_CLAY"),
|
||||
BLACK_WALL_BANNER(177, 0, 4919, "Black Banner"),
|
||||
BLACK_WOOL(35, 15, 16693, "Black Wool"),
|
||||
@ -88,8 +91,8 @@ public enum CMIMaterial {
|
||||
BLUE_ICE(22449, "Blue Ice"),
|
||||
BLUE_ORCHID(38, 1, 13432, "Blue Orchid"),
|
||||
BLUE_SHULKER_BOX(230, 0, 11476, "Blue Shulker Box"),
|
||||
BLUE_STAINED_GLASS(95, 11, 7107, "Blue Stained Glass"),
|
||||
BLUE_STAINED_GLASS_PANE(160, 11, 28484, "Blue Stained Glass Pane"),
|
||||
BLUE_STAINED_GLASS(95, 11, 7107, Arrays.asList(CMIMaterialCriteria.seeThrow), "Blue Stained Glass"),
|
||||
BLUE_STAINED_GLASS_PANE(160, 11, 28484, Arrays.asList(CMIMaterialCriteria.seeThrow), "Blue Stained Glass Pane"),
|
||||
BLUE_TERRACOTTA(159, 11, 5236, "Blue Terracotta"),
|
||||
BLUE_WALL_BANNER(177, 4, 17757, "Blue Banner"),
|
||||
BLUE_WOOL(35, 11, 15738, "Blue Wool"),
|
||||
@ -119,8 +122,8 @@ public enum CMIMaterial {
|
||||
BROWN_MUSHROOM(39, 0, 9665, "Brown Mushroom"),
|
||||
BROWN_MUSHROOM_BLOCK(99, 0, 6291, "Brown Mushroom Block", "HUGE_MUSHROOM_1"),
|
||||
BROWN_SHULKER_BOX(231, 0, 24230, "Brown Shulker Box"),
|
||||
BROWN_STAINED_GLASS(95, 12, 20945, "Brown Stained Glass"),
|
||||
BROWN_STAINED_GLASS_PANE(160, 12, 17557, "Brown Stained Glass Pane"),
|
||||
BROWN_STAINED_GLASS(95, 12, 20945, Arrays.asList(CMIMaterialCriteria.seeThrow), "Brown Stained Glass"),
|
||||
BROWN_STAINED_GLASS_PANE(160, 12, 17557, Arrays.asList(CMIMaterialCriteria.seeThrow), "Brown Stained Glass Pane"),
|
||||
BROWN_TERRACOTTA(159, 12, 23664, "Brown Terracotta"),
|
||||
BROWN_WALL_BANNER(177, 3, 14731, "Brown Banner"),
|
||||
BROWN_WOOL(35, 12, 32638, "Brown Wool"),
|
||||
@ -169,7 +172,7 @@ public enum CMIMaterial {
|
||||
COBBLESTONE_SLAB(44, 3, 6340, "Cobblestone Slab"),
|
||||
COBBLESTONE_STAIRS(67, 0, 24715, "Cobblestone Stairs"),
|
||||
COBBLESTONE_WALL(139, 0, 12616, "Cobblestone Wall", "COBBLE_WALL"),
|
||||
COBWEB(30, 0, 9469, "Cobweb", "WEB"),
|
||||
COBWEB(30, 0, 9469, Arrays.asList(CMIMaterialCriteria.seeThrow), "Cobweb", "WEB"),
|
||||
COCOA(127, 0, 29709, "Cocoa"),
|
||||
COCOA_BEANS(351, 3, 27381, "Coco Beans"),
|
||||
COD(24691, "Raw Cod"),
|
||||
@ -204,8 +207,8 @@ public enum CMIMaterial {
|
||||
CYAN_DYE(351, 6, 8043, "Cyan Dye"),
|
||||
CYAN_GLAZED_TERRACOTTA(244, 0, 9550, "Cyan Glazed Terracotta"),
|
||||
CYAN_SHULKER_BOX(228, 0, 28123, "Cyan Shulker Box"),
|
||||
CYAN_STAINED_GLASS(95, 9, 30604, "Cyan Stained Glass"),
|
||||
CYAN_STAINED_GLASS_PANE(160, 9, 11784, "Cyan Stained Glass Pane"),
|
||||
CYAN_STAINED_GLASS(95, 9, 30604, Arrays.asList(CMIMaterialCriteria.seeThrow), "Cyan Stained Glass"),
|
||||
CYAN_STAINED_GLASS_PANE(160, 9, 11784, Arrays.asList(CMIMaterialCriteria.seeThrow), "Cyan Stained Glass Pane"),
|
||||
CYAN_TERRACOTTA(159, 9, 25940, "Cyan Terracotta"),
|
||||
CYAN_WALL_BANNER(177, 6, 10889, "Cyan Banner"),
|
||||
CYAN_WOOL(35, 9, 12221, "Cyan Wool"),
|
||||
@ -215,8 +218,8 @@ public enum CMIMaterial {
|
||||
DARK_OAK_BOAT(448, 0, 28618, "Dark Oak Boat", "BOAT_DARK_OAK"),
|
||||
DARK_OAK_BUTTON(6214, "Dark Oak Button"),
|
||||
DARK_OAK_DOOR(431, 0, 10669, "Dark Oak Door", "DARK_OAK_DOOR_ITEM"),
|
||||
DARK_OAK_FENCE(191, 0, 21767, "Dark Oak Fence"),
|
||||
DARK_OAK_FENCE_GATE(186, 0, 10679, "Dark Oak Fence Gate"),
|
||||
DARK_OAK_FENCE(191, 0, 21767, Arrays.asList(CMIMaterialCriteria.seeThrow), "Dark Oak Fence"),
|
||||
DARK_OAK_FENCE_GATE(186, 0, 10679, Arrays.asList(CMIMaterialCriteria.seeThrow), "Dark Oak Fence Gate"),
|
||||
DARK_OAK_LEAVES(161, 1, 22254, "Dark Oak Leaves"),
|
||||
DARK_OAK_LOG(162, 1, 14831, "Dark Oak Log"),
|
||||
DARK_OAK_PLANKS(5, 5, 20869, "Dark Oak Wood Plank"),
|
||||
@ -324,9 +327,9 @@ public enum CMIMaterial {
|
||||
FURNACE_MINECART(343, 0, 14196, "Minecart with Furnace", "POWERED_MINECART"),
|
||||
GHAST_SPAWN_EGG(383, 56, 9970, "Ghast Spawn Egg", "Spawn Ghast"),
|
||||
GHAST_TEAR(370, 0, 18222, "Ghast Tear"),
|
||||
GLASS(20, 0, 6195, "Glass"),
|
||||
GLASS(20, 0, 6195, Arrays.asList(CMIMaterialCriteria.seeThrow), "Glass"),
|
||||
GLASS_BOTTLE(374, 0, 6116, "Glass Bottle"),
|
||||
GLASS_PANE(102, 0, 5709, "Glass Pane", "THIN_GLASS"),
|
||||
GLASS_PANE(102, 0, 5709, Arrays.asList(CMIMaterialCriteria.seeThrow), "Glass Pane", "THIN_GLASS"),
|
||||
GLISTERING_MELON_SLICE(382, 0, 20158, "Glistering Melon", "speckledmelon"),
|
||||
GLOWSTONE(89, 0, 32713, "Glowstone"),
|
||||
GLOWSTONE_DUST(348, 0, 6665, "Glowstone Dust"),
|
||||
@ -359,8 +362,8 @@ public enum CMIMaterial {
|
||||
GRAY_DYE(351, 8, 9184, "Gray Dye"),
|
||||
GRAY_GLAZED_TERRACOTTA(242, 0, 6256, "Gray Glazed Terracotta"),
|
||||
GRAY_SHULKER_BOX(226, 0, 12754, "Gray Shulker Box"),
|
||||
GRAY_STAINED_GLASS(95, 7, 29979, "Gray Stained Glass"),
|
||||
GRAY_STAINED_GLASS_PANE(160, 7, 25272, "Gray Stained Glass Pane"),
|
||||
GRAY_STAINED_GLASS(95, 7, 29979, Arrays.asList(CMIMaterialCriteria.seeThrow), "Gray Stained Glass"),
|
||||
GRAY_STAINED_GLASS_PANE(160, 7, 25272, Arrays.asList(CMIMaterialCriteria.seeThrow), "Gray Stained Glass Pane"),
|
||||
GRAY_TERRACOTTA(159, 7, 18004, "Gray Terracotta"),
|
||||
GRAY_WALL_BANNER(177, 8, 24275, "Gray Banner"),
|
||||
GRAY_WOOL(35, 7, 27209, "Gray Wool"),
|
||||
@ -371,8 +374,8 @@ public enum CMIMaterial {
|
||||
GREEN_CONCRETE_POWDER(252, 13, 6904, "Green Concrete Powder"),
|
||||
GREEN_GLAZED_TERRACOTTA(248, 0, 6958, "Green Glazed Terracotta"),
|
||||
GREEN_SHULKER_BOX(232, 0, 9377, "Green Shulker Box"),
|
||||
GREEN_STAINED_GLASS(95, 13, 22503, "Green Stained Glass"),
|
||||
GREEN_STAINED_GLASS_PANE(160, 13, 4767, "Green Stained Glass Pane"),
|
||||
GREEN_STAINED_GLASS(95, 13, 22503, Arrays.asList(CMIMaterialCriteria.seeThrow), "Green Stained Glass"),
|
||||
GREEN_STAINED_GLASS_PANE(160, 13, 4767, Arrays.asList(CMIMaterialCriteria.seeThrow), "Green Stained Glass Pane"),
|
||||
GREEN_TERRACOTTA(159, 13, 4105, "Green Terracotta"),
|
||||
GREEN_WALL_BANNER(177, 2, 15046, "Green Banner"),
|
||||
GREEN_WOOL(35, 13, 25085, "Green Wool"),
|
||||
@ -398,7 +401,7 @@ public enum CMIMaterial {
|
||||
INFESTED_STONE_BRICKS(97, 2, 19749, "Infested Stone Bricks"),
|
||||
INK_SAC(351, 0, 7184, "Ink Sac", "Ink Sack"),
|
||||
IRON_AXE(258, 0, 15894, "Iron Axe"),
|
||||
IRON_BARS(101, 0, 9378, "Iron Bars", "IRON_FENCE"),
|
||||
IRON_BARS(101, 0, 9378, Arrays.asList(CMIMaterialCriteria.seeThrow), "Iron Bars", "IRON_FENCE"),
|
||||
IRON_BLOCK(42, 0, 24754, "Block of Iron"),
|
||||
IRON_BOOTS(309, 0, 8531, "Iron Boots"),
|
||||
IRON_CHESTPLATE(307, 0, 28112, "Iron Chestplate"),
|
||||
@ -420,8 +423,8 @@ public enum CMIMaterial {
|
||||
JUNGLE_BOAT(446, 0, 4495, "Jungle Boat", "BOAT_JUNGLE"),
|
||||
JUNGLE_BUTTON(25317, "Jungle Button"),
|
||||
JUNGLE_DOOR(429, 0, 28163, "Jungle Door", "JUNGLE_DOOR_ITEM"),
|
||||
JUNGLE_FENCE(190, 0, 14358, "Jungle Fence"),
|
||||
JUNGLE_FENCE_GATE(185, 0, 21360, "Jungle Fence Gate"),
|
||||
JUNGLE_FENCE(190, 0, 14358, Arrays.asList(CMIMaterialCriteria.seeThrow), "Jungle Fence"),
|
||||
JUNGLE_FENCE_GATE(185, 0, 21360, Arrays.asList(CMIMaterialCriteria.seeThrow), "Jungle Fence Gate", "JUNGLE_FENCE_GATE"),
|
||||
JUNGLE_LEAVES(18, 3, 5133, "Jungle Leaves"),
|
||||
JUNGLE_LOG(17, 3, 20721, "Jungle Log"),
|
||||
JUNGLE_PLANKS(5, 3, 26445, "Jungle Wood Plank", "Jungle Planks"),
|
||||
@ -456,8 +459,8 @@ public enum CMIMaterial {
|
||||
LIGHT_BLUE_DYE(351, 12, 28738, "Light Blue Dye"),
|
||||
LIGHT_BLUE_GLAZED_TERRACOTTA(238, 0, 4336, "Light Blue Glazed Terracotta"),
|
||||
LIGHT_BLUE_SHULKER_BOX(222, 0, 18226, "Light Blue Shulker Box"),
|
||||
LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, "Light Blue Stained Glass"),
|
||||
LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, "Light Blue Stained Glass Pane"),
|
||||
LIGHT_BLUE_STAINED_GLASS(95, 3, 17162, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Blue Stained Glass"),
|
||||
LIGHT_BLUE_STAINED_GLASS_PANE(160, 3, 18721, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Blue Stained Glass Pane"),
|
||||
LIGHT_BLUE_TERRACOTTA(159, 3, 31779, "Light Blue Terracotta"),
|
||||
LIGHT_BLUE_WALL_BANNER(177, 12, 12011, "Light Blue Banner"),
|
||||
LIGHT_BLUE_WOOL(35, 3, 21073, "Light Blue Wool"),
|
||||
@ -469,8 +472,8 @@ public enum CMIMaterial {
|
||||
LIGHT_GRAY_DYE(351, 7, 27643, "Light Gray Dye"),
|
||||
LIGHT_GRAY_GLAZED_TERRACOTTA(243, 0, 10707, "Light Gray Glazed Terracotta", "SILVER_GLAZED_TERRACOTTA"),
|
||||
LIGHT_GRAY_SHULKER_BOX(227, 0, 21345, "Light Gray Shulker Box", "SILVER_SHULKER_BOX"),
|
||||
LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, "Light Gray Stained Glass"),
|
||||
LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, "Light Gray Stained Glass Pane"),
|
||||
LIGHT_GRAY_STAINED_GLASS(95, 8, 5843, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Gray Stained Glass"),
|
||||
LIGHT_GRAY_STAINED_GLASS_PANE(160, 8, 19008, Arrays.asList(CMIMaterialCriteria.seeThrow), "Light Gray Stained Glass Pane"),
|
||||
LIGHT_GRAY_TERRACOTTA(159, 8, 26388, "Light Gray Terracotta"),
|
||||
LIGHT_GRAY_WALL_BANNER(177, 7, 31088, "Light Gray Banner"),
|
||||
LIGHT_GRAY_WOOL(35, 8, 22936, "Light Gray Wool"),
|
||||
@ -485,8 +488,8 @@ public enum CMIMaterial {
|
||||
LIME_DYE(351, 10, 6147, "Lime Dye"),
|
||||
LIME_GLAZED_TERRACOTTA(240, 0, 13861, "Lime Glazed Terracotta"),
|
||||
LIME_SHULKER_BOX(224, 0, 28360, "Lime Shulker Box"),
|
||||
LIME_STAINED_GLASS(95, 5, 24266, "Lime Stained Glass"),
|
||||
LIME_STAINED_GLASS_PANE(160, 5, 10610, "Lime Stained Glass Pane"),
|
||||
LIME_STAINED_GLASS(95, 5, 24266, Arrays.asList(CMIMaterialCriteria.seeThrow), "Lime Stained Glass"),
|
||||
LIME_STAINED_GLASS_PANE(160, 5, 10610, Arrays.asList(CMIMaterialCriteria.seeThrow), "Lime Stained Glass Pane"),
|
||||
LIME_TERRACOTTA(159, 5, 24013, "Lime Terracotta"),
|
||||
LIME_WALL_BANNER(177, 10, 21422, "Lime Banner"),
|
||||
LIME_WOOL(35, 5, 10443, "Lime Wool"),
|
||||
@ -500,8 +503,8 @@ public enum CMIMaterial {
|
||||
MAGENTA_DYE(351, 13, 11788, "Magenta Dye"),
|
||||
MAGENTA_GLAZED_TERRACOTTA(237, 0, 8067, "Magenta Glazed Terracotta"),
|
||||
MAGENTA_SHULKER_BOX(221, 0, 21566, "Magenta Shulker Box"),
|
||||
MAGENTA_STAINED_GLASS(95, 2, 26814, "Magenta Stained Glass"),
|
||||
MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, "Magenta Stained Glass Pane"),
|
||||
MAGENTA_STAINED_GLASS(95, 2, 26814, Arrays.asList(CMIMaterialCriteria.seeThrow), "Magenta Stained Glass"),
|
||||
MAGENTA_STAINED_GLASS_PANE(160, 2, 14082, Arrays.asList(CMIMaterialCriteria.seeThrow), "Magenta Stained Glass Pane"),
|
||||
MAGENTA_TERRACOTTA(159, 2, 25900, "Magenta Terracotta"),
|
||||
MAGENTA_WALL_BANNER(177, 13, 23291, "Magenta Banner"),
|
||||
MAGENTA_WOOL(35, 2, 11853, "Magenta Wool"),
|
||||
@ -542,7 +545,7 @@ public enum CMIMaterial {
|
||||
NETHERRACK(87, 0, 23425, "Netherrack"),
|
||||
NETHER_BRICK(405, 0, 19996, "Nether Brick", "Nether Brick Item"),
|
||||
NETHER_BRICKS(112, 0, 27802, "Nether Bricks"),
|
||||
NETHER_BRICK_FENCE(113, 0, 5286, "Nether Brick Fence", "NETHER_FENCE"),
|
||||
NETHER_BRICK_FENCE(113, 0, 5286, Arrays.asList(CMIMaterialCriteria.seeThrow), "Nether Brick Fence", "NETHER_FENCE"),
|
||||
NETHER_BRICK_SLAB(44, 6, 26586, "Nether Brick Slab"),
|
||||
NETHER_BRICK_STAIRS(114, 0, 12085, "Nether Brick Stairs"),
|
||||
NETHER_PORTAL(90, 0, 19469, "Nether Portal", "PORTAL"),
|
||||
@ -554,8 +557,8 @@ public enum CMIMaterial {
|
||||
OAK_BOAT(333, 0, 17570, "Boat", "Oak Boat"),
|
||||
OAK_BUTTON(143, 0, 13510, "Oak Button", "Wooden_button"),
|
||||
OAK_DOOR(324, 0, 20341, "Wooden Door", "Wood Door", "Door"),
|
||||
OAK_FENCE(85, 0, 6442, "Oak Fence", "FENCE"),
|
||||
OAK_FENCE_GATE(107, 0, 16689, "Oak Fence Gate", "FENCE_GATE"),
|
||||
OAK_FENCE(85, 0, 6442, Arrays.asList(CMIMaterialCriteria.seeThrow), "Oak Fence", "FENCE"),
|
||||
OAK_FENCE_GATE(107, 0, 16689, Arrays.asList(CMIMaterialCriteria.seeThrow), "Oak Fence Gate", "FENCE_GATE"),
|
||||
OAK_LEAVES(18, 0, 4385, "Oak Leaves"),
|
||||
OAK_LOG(17, 0, 26723, "Oak Log"),
|
||||
OAK_PLANKS(5, 0, 14905, "Oak Wood Plank", "Oak Planks"),
|
||||
@ -576,8 +579,8 @@ public enum CMIMaterial {
|
||||
ORANGE_DYE(351, 14, 13866, "Orange Dye"),
|
||||
ORANGE_GLAZED_TERRACOTTA(236, 0, 27451, "Orange Glazed Terracotta"),
|
||||
ORANGE_SHULKER_BOX(220, 0, 21673, "Orange Shulker Box"),
|
||||
ORANGE_STAINED_GLASS(95, 1, 25142, "Orange Stained Glass"),
|
||||
ORANGE_STAINED_GLASS_PANE(160, 1, 21089, "Orange Stained Glass Pane"),
|
||||
ORANGE_STAINED_GLASS(95, 1, 25142, Arrays.asList(CMIMaterialCriteria.seeThrow), "Orange Stained Glass"),
|
||||
ORANGE_STAINED_GLASS_PANE(160, 1, 21089, Arrays.asList(CMIMaterialCriteria.seeThrow), "Orange Stained Glass Pane"),
|
||||
ORANGE_TERRACOTTA(159, 1, 18684, "Orange Terracotta"),
|
||||
ORANGE_TULIP(38, 5, 26038, "Orange Tulip"),
|
||||
ORANGE_WALL_BANNER(177, 114, 9936, "Orange Banner"),
|
||||
@ -600,8 +603,8 @@ public enum CMIMaterial {
|
||||
PINK_DYE(351, 9, 31151, "Pink Dye"),
|
||||
PINK_GLAZED_TERRACOTTA(241, 0, 10260, "Pink Glazed Terracotta"),
|
||||
PINK_SHULKER_BOX(225, 0, 24968, "Pink Shulker Box"),
|
||||
PINK_STAINED_GLASS(95, 6, 16164, "Pink Stained Glass"),
|
||||
PINK_STAINED_GLASS_PANE(160, 6, 24637, "Pink Stained Glass Pane"),
|
||||
PINK_STAINED_GLASS(95, 6, 16164, Arrays.asList(CMIMaterialCriteria.seeThrow), "Pink Stained Glass"),
|
||||
PINK_STAINED_GLASS_PANE(160, 6, 24637, Arrays.asList(CMIMaterialCriteria.seeThrow), "Pink Stained Glass Pane"),
|
||||
PINK_TERRACOTTA(159, 6, 23727, "Pink Terracotta"),
|
||||
PINK_TULIP(38, 7, 27319, "Pink Tulip"),
|
||||
PINK_WALL_BANNER(177, 9, 9421, "Pink Banner"),
|
||||
@ -667,8 +670,8 @@ public enum CMIMaterial {
|
||||
PURPLE_DYE(351, 5, 6347, "Purple Dye"),
|
||||
PURPLE_GLAZED_TERRACOTTA(245, 0, 4818, "Purple Glazed Terracotta"),
|
||||
PURPLE_SHULKER_BOX(229, 0, 10373, "Purple Shulker Box"),
|
||||
PURPLE_STAINED_GLASS(95, 10, 21845, "Purple Stained Glass"),
|
||||
PURPLE_STAINED_GLASS_PANE(160, 10, 10948, "Purple Stained Glass Pane"),
|
||||
PURPLE_STAINED_GLASS(95, 10, 21845, Arrays.asList(CMIMaterialCriteria.seeThrow), "Purple Stained Glass"),
|
||||
PURPLE_STAINED_GLASS_PANE(160, 10, 10948, Arrays.asList(CMIMaterialCriteria.seeThrow), "Purple Stained Glass Pane"),
|
||||
PURPLE_TERRACOTTA(159, 10, 10387, "Purple Terracotta"),
|
||||
PURPLE_WALL_BANNER(177, 5, 14298, "Purple Banner"),
|
||||
PURPLE_WOOL(35, 10, 11922, "Purple Wool"),
|
||||
@ -708,8 +711,8 @@ public enum CMIMaterial {
|
||||
RED_SANDSTONE_SLAB(182, 0, 17550, "Red Sandstone Slab", "STONE_SLAB2"),
|
||||
RED_SANDSTONE_STAIRS(180, 0, 25466, "Red Sandstone Stairs"),
|
||||
RED_SHULKER_BOX(233, 0, 32448, "Red Shulker Box"),
|
||||
RED_STAINED_GLASS(95, 14, 9717, "Red Stained Glass"),
|
||||
RED_STAINED_GLASS_PANE(160, 14, 8630, "Red Stained Glass Pane"),
|
||||
RED_STAINED_GLASS(95, 14, 9717, Arrays.asList(CMIMaterialCriteria.seeThrow), "Red Stained Glass"),
|
||||
RED_STAINED_GLASS_PANE(160, 14, 8630, Arrays.asList(CMIMaterialCriteria.seeThrow), "Red Stained Glass Pane"),
|
||||
RED_TERRACOTTA(159, 14, 5086, "Red Terracotta"),
|
||||
RED_TULIP(38, 4, 16781, "Red Tulip"),
|
||||
RED_WALL_BANNER(177, 1, 4378, "Red Banner"),
|
||||
@ -763,8 +766,8 @@ public enum CMIMaterial {
|
||||
SPRUCE_BOAT(444, 0, 9606, "Spruce Boat", "BOAT_SPRUCE"),
|
||||
SPRUCE_BUTTON(23281, "Spruce Button"),
|
||||
SPRUCE_DOOR(427, 0, 10642, "Spruce Door", "SPRUCE_DOOR_ITEM"),
|
||||
SPRUCE_FENCE(188, 0, 25416, "Spruce Fence"),
|
||||
SPRUCE_FENCE_GATE(183, 0, 26423, "Spruce Fence Gate"),
|
||||
SPRUCE_FENCE(188, 0, 25416, Arrays.asList(CMIMaterialCriteria.seeThrow), "Spruce Fence"),
|
||||
SPRUCE_FENCE_GATE(183, 0, 26423, Arrays.asList(CMIMaterialCriteria.seeThrow), "Spruce Fence Gate"),
|
||||
SPRUCE_LEAVES(18, 1, 20039, "Spruce Leaves"),
|
||||
SPRUCE_LOG(17, 1, 9726, "Spruce Log"),
|
||||
SPRUCE_PLANKS(5, 1, 14593, "Spruce Wood Plank", "Spruce Planks"),
|
||||
@ -833,7 +836,7 @@ public enum CMIMaterial {
|
||||
VEX_SPAWN_EGG(383, 35, 27751, "Vex Spawn Egg", "Spawn Vex"),
|
||||
VILLAGER_SPAWN_EGG(383, 120, 30348, "Villager Spawn Egg", "Spawn Villager"),
|
||||
VINDICATOR_SPAWN_EGG(383, 36, 25324, "Vindicator Spawn Egg", "Spawn Vindicator"),
|
||||
VINE(106, 0, 14564, "Vines", "VINE"),
|
||||
VINE(106, 0, 14564, Arrays.asList(CMIMaterialCriteria.seeThrow), "Vines", "VINE"),
|
||||
VOID_AIR(13668, "Void Air"),
|
||||
WALL_SIGN(68, 0, 10644, "Wall Sign"),
|
||||
WALL_TORCH(50, 0, 25890, "Wall Torch"),
|
||||
@ -849,8 +852,8 @@ public enum CMIMaterial {
|
||||
WHITE_CONCRETE_POWDER(252, 0, 10363, "White Concrete Powder"),
|
||||
WHITE_GLAZED_TERRACOTTA(235, 0, 11326, "White Glazed Terracotta"),
|
||||
WHITE_SHULKER_BOX(219, 0, 31750, "White Shulker Box"),
|
||||
WHITE_STAINED_GLASS(95, 0, 31190, "White Stained Glass"),
|
||||
WHITE_STAINED_GLASS_PANE(160, 0, 10557, "White Stained Glass Pane"),
|
||||
WHITE_STAINED_GLASS(95, 0, 31190, Arrays.asList(CMIMaterialCriteria.seeThrow), "White Stained Glass"),
|
||||
WHITE_STAINED_GLASS_PANE(160, 0, 10557, Arrays.asList(CMIMaterialCriteria.seeThrow), "White Stained Glass Pane"),
|
||||
WHITE_TERRACOTTA(159, 0, 20975, "White Terracotta"),
|
||||
WHITE_TULIP(38, 6, 9742, "White Tulip"),
|
||||
WHITE_WALL_BANNER(425, 15, 15967, "White Banner"),
|
||||
@ -874,8 +877,8 @@ public enum CMIMaterial {
|
||||
YELLOW_CONCRETE_POWDER(252, 4, 10655, "Yellow Concrete Powder"),
|
||||
YELLOW_GLAZED_TERRACOTTA(239, 0, 10914, "Yellow Glazed Terracotta"),
|
||||
YELLOW_SHULKER_BOX(223, 0, 28700, "Yellow Shulker Box"),
|
||||
YELLOW_STAINED_GLASS(95, 4, 12182, "Yellow Stained Glass"),
|
||||
YELLOW_STAINED_GLASS_PANE(160, 4, 20298, "Yellow Stained Glass Pane"),
|
||||
YELLOW_STAINED_GLASS(95, 4, 12182, Arrays.asList(CMIMaterialCriteria.seeThrow), "Yellow Stained Glass"),
|
||||
YELLOW_STAINED_GLASS_PANE(160, 4, 20298, Arrays.asList(CMIMaterialCriteria.seeThrow), "Yellow Stained Glass Pane"),
|
||||
YELLOW_TERRACOTTA(159, 4, 32129, "Yellow Terracotta"),
|
||||
YELLOW_WALL_BANNER(425, 11, 32004, "Yellow Banner"),
|
||||
YELLOW_WOOL(35, 4, 29507, "Yellow Wool"),
|
||||
@ -994,12 +997,116 @@ public enum CMIMaterial {
|
||||
//1.15
|
||||
BEEHIVE("Beehive"),
|
||||
BEE_NEST("Bee Nest"),
|
||||
BEE_SPAWN_EGG(383, null, 15434, "Bee Spawn Egg"),
|
||||
BEE_SPAWN_EGG("Bee Spawn Egg"),
|
||||
HONEYCOMB("Honeycomb"),
|
||||
HONEYCOMB_BLOCK("Honeycomb Block"),
|
||||
HONEY_BLOCK("Honey Block"),
|
||||
HONEY_BOTTLE("Honey Bottle"),
|
||||
|
||||
//1.16
|
||||
ANCIENT_DEBRIS("ancient debris"),
|
||||
BASALT("basalt"),
|
||||
BLACKSTONE("blackstone"),
|
||||
BLACKSTONE_SLAB("blackstone slab"),
|
||||
BLACKSTONE_STAIRS("blackstone stairs"),
|
||||
BLACKSTONE_WALL("blackstone wall"),
|
||||
CHAIN("chain"),
|
||||
CHISELED_NETHER_BRICKS("chiseled nether bricks"),
|
||||
CHISELED_POLISHED_BLACKSTONE("chiseled polished blackstone"),
|
||||
CRACKED_NETHER_BRICKS("cracked nether bricks"),
|
||||
CRACKED_POLISHED_BLACKSTONE_BRICKS("cracked polished blackstone bricks"),
|
||||
CRIMSON_BUTTON("crimson button"),
|
||||
CRIMSON_DOOR("crimson door"),
|
||||
CRIMSON_FENCE("crimson fence"),
|
||||
CRIMSON_FENCE_GATE("crimson fence gate"),
|
||||
CRIMSON_FUNGUS("crimson fungus"),
|
||||
CRIMSON_HYPHAE("crimson hyphae"),
|
||||
CRIMSON_NYLIUM("crimson nylium"),
|
||||
CRIMSON_PLANKS("crimson planks"),
|
||||
CRIMSON_PRESSURE_PLATE("crimson pressure plate"),
|
||||
CRIMSON_ROOTS("crimson roots"),
|
||||
CRIMSON_SIGN("crimson sign"),
|
||||
CRIMSON_SLAB("crimson slab"),
|
||||
CRIMSON_STAIRS("crimson stairs"),
|
||||
CRIMSON_STEM("crimson stem"),
|
||||
CRIMSON_TRAPDOOR("crimson trapdoor"),
|
||||
CRIMSON_WALL_SIGN("crimson wall sign"),
|
||||
CRYING_OBSIDIAN("crying obsidian"),
|
||||
GILDED_BLACKSTONE("gilded blackstone"),
|
||||
HOGLIN_SPAWN_EGG("hoglin spawn egg"),
|
||||
LODESTONE("lodestone"),
|
||||
MUSIC_DISC_PIGSTEP("music disc pigstep"),
|
||||
NETHERITE_AXE("netherite axe"),
|
||||
NETHERITE_BLOCK("netherite block"),
|
||||
NETHERITE_BOOTS("netherite boots"),
|
||||
NETHERITE_CHESTPLATE("netherite chestplate"),
|
||||
NETHERITE_HELMET("netherite helmet"),
|
||||
NETHERITE_HOE("netherite hoe"),
|
||||
NETHERITE_INGOT("netherite ingot"),
|
||||
NETHERITE_LEGGINGS("netherite leggings"),
|
||||
NETHERITE_PICKAXE("netherite pickaxe"),
|
||||
NETHERITE_SCRAP("netherite scrap"),
|
||||
NETHERITE_SHOVEL("netherite shovel"),
|
||||
NETHERITE_SWORD("netherite sword"),
|
||||
NETHER_GOLD_ORE("nether gold ore"),
|
||||
NETHER_SPROUTS("nether sprouts"),
|
||||
PIGLIN_BANNER_PATTERN("piglin banner pattern"),
|
||||
PIGLIN_SPAWN_EGG("piglin spawn egg"),
|
||||
POLISHED_BASALT("polished basalt"),
|
||||
POLISHED_BLACKSTONE("polished blackstone"),
|
||||
POLISHED_BLACKSTONE_BRICKS("polished blackstone bricks"),
|
||||
POLISHED_BLACKSTONE_BRICK_SLAB("polished blackstone brick slab"),
|
||||
POLISHED_BLACKSTONE_BRICK_STAIRS("polished blackstone brick stairs"),
|
||||
POLISHED_BLACKSTONE_BRICK_WALL("polished blackstone brick wall"),
|
||||
POLISHED_BLACKSTONE_BUTTON("polished blackstone button"),
|
||||
POLISHED_BLACKSTONE_PRESSURE_PLATE("polished blackstone pressure plate"),
|
||||
POLISHED_BLACKSTONE_SLAB("polished blackstone slab"),
|
||||
POLISHED_BLACKSTONE_STAIRS("polished blackstone stairs"),
|
||||
POLISHED_BLACKSTONE_WALL("polished blackstone wall"),
|
||||
POTTED_CRIMSON_FUNGUS("potted crimson fungus"),
|
||||
POTTED_CRIMSON_ROOTS("potted crimson roots"),
|
||||
POTTED_WARPED_FUNGUS("potted warped fungus"),
|
||||
POTTED_WARPED_ROOTS("potted warped roots"),
|
||||
QUARTZ_BRICKS("quartz bricks"),
|
||||
RESPAWN_ANCHOR("respawn anchor"),
|
||||
SHROOMLIGHT("shroomlight"),
|
||||
SOUL_CAMPFIRE("soul campfire"),
|
||||
SOUL_FIRE("soul fire"),
|
||||
SOUL_LANTERN("soul lantern"),
|
||||
SOUL_SOIL("soul soil"),
|
||||
SOUL_TORCH("soul torch"),
|
||||
SOUL_WALL_TORCH("soul wall torch"),
|
||||
STRIDER_SPAWN_EGG("strider spawn egg"),
|
||||
STRIPPED_CRIMSON_HYPHAE("stripped crimson hyphae"),
|
||||
STRIPPED_CRIMSON_STEM("stripped crimson stem"),
|
||||
STRIPPED_WARPED_HYPHAE("stripped warped hyphae"),
|
||||
STRIPPED_WARPED_STEM("stripped warped stem"),
|
||||
TARGET("target"),
|
||||
TWISTING_VINES("twisting vines"),
|
||||
TWISTING_VINES_PLANT("twisting vines plant"),
|
||||
WARPED_BUTTON("warped button"),
|
||||
WARPED_DOOR("warped door"),
|
||||
WARPED_FENCE("warped fence"),
|
||||
WARPED_FENCE_GATE("warped fence gate"),
|
||||
WARPED_FUNGUS("warped fungus"),
|
||||
WARPED_FUNGUS_ON_A_STICK("warped fungus on a stick"),
|
||||
WARPED_HYPHAE("warped hyphae"),
|
||||
WARPED_NYLIUM("warped nylium"),
|
||||
WARPED_PLANKS("warped planks"),
|
||||
WARPED_PRESSURE_PLATE("warped pressure plate"),
|
||||
WARPED_ROOTS("warped roots"),
|
||||
WARPED_SIGN("warped sign"),
|
||||
WARPED_SLAB("warped slab"),
|
||||
WARPED_STAIRS("warped stairs"),
|
||||
WARPED_STEM("warped stem"),
|
||||
WARPED_TRAPDOOR("warped trapdoor"),
|
||||
WARPED_WALL_SIGN("warped wall sign"),
|
||||
WARPED_WART_BLOCK("warped wart block"),
|
||||
WEEPING_VINES("weeping vines"),
|
||||
WEEPING_VINES_PLANT("weeping vines plant"),
|
||||
ZOGLIN_SPAWN_EGG("zoglin spawn egg"),
|
||||
ZOMBIFIED_PIGLIN_SPAWN_EGG("zombified piglin spawn egg"),
|
||||
|
||||
// Legacy
|
||||
LEGACY_STATIONARY_WATER(9, 0, null, "Stationary Water"),
|
||||
LEGACY_STATIONARY_LAVA(11, 0, null, "Stationary Lava"),
|
||||
@ -1047,16 +1154,18 @@ public enum CMIMaterial {
|
||||
private String name;
|
||||
private List<String> legacyName;
|
||||
private String bukkitName;
|
||||
private String mojangName;
|
||||
private Set<CMIMaterialCriteria> criteria;
|
||||
Material mat;
|
||||
|
||||
CMIMaterial(Integer id, String name) {
|
||||
this(null, null, id, name, "");
|
||||
}
|
||||
|
||||
CMIMaterial(Integer id, String name, String... legacyName) {
|
||||
this(null, null, id, name, legacyName);
|
||||
}
|
||||
|
||||
CMIMaterial(Integer id, String name) {
|
||||
this(null, null, id, name, "");
|
||||
}
|
||||
|
||||
CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name) {
|
||||
this(legacyId, legacyData, id, name, "");
|
||||
}
|
||||
@ -1066,12 +1175,19 @@ public enum CMIMaterial {
|
||||
}
|
||||
|
||||
CMIMaterial(Integer legacyId, Integer legacyData, Integer id, String name, String... legacyName) {
|
||||
this(legacyId, legacyData, id, null, name, legacyName);
|
||||
}
|
||||
|
||||
CMIMaterial(Integer legacyId, Integer legacyData, Integer id, List<CMIMaterialCriteria> criteria, String name, String... legacyName) {
|
||||
this.legacyId = legacyId;
|
||||
this.legacyData = legacyData;
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
if (legacyName != null && legacyName.length > 0 && !legacyName[0].isEmpty())
|
||||
this.legacyName = Arrays.asList(legacyName);
|
||||
|
||||
if (criteria != null)
|
||||
this.criteria = new HashSet<>(criteria);
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
@ -1096,8 +1212,6 @@ public enum CMIMaterial {
|
||||
}
|
||||
|
||||
public void updateMaterial() {
|
||||
if (this.equals(CMIMaterial.NONE))
|
||||
return;
|
||||
if (mat == null) {
|
||||
for (Material one : Material.class.getEnumConstants()) {
|
||||
if (!one.name().replace("LEGACY_", "").replace("_", "").equalsIgnoreCase(this.name().replace("_", "")))
|
||||
@ -1144,9 +1258,14 @@ public enum CMIMaterial {
|
||||
if (mat == null) {
|
||||
updateMaterial();
|
||||
}
|
||||
|
||||
if (mat == null) {
|
||||
return new ItemStack(Material.STONE);
|
||||
}
|
||||
|
||||
if (!mat.isItem())
|
||||
return new ItemStack(Material.STONE);
|
||||
|
||||
if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) {
|
||||
ItemStack stack = new ItemStack(mat == null ? Material.STONE : mat);
|
||||
stack.setAmount(amount);
|
||||
@ -1165,9 +1284,11 @@ public enum CMIMaterial {
|
||||
if (mat == null) {
|
||||
updateMaterial();
|
||||
}
|
||||
|
||||
if (mat == null) {
|
||||
return new CMIItemStack(CMIMaterial.STONE);
|
||||
}
|
||||
|
||||
if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) {
|
||||
CMIItemStack stack = new CMIItemStack(mat == null ? Material.STONE : mat);
|
||||
stack.setAmount(amount);
|
||||
@ -1195,7 +1316,7 @@ public enum CMIMaterial {
|
||||
List<CMIMaterial> ls = new ArrayList<>();
|
||||
|
||||
for (CMIMaterial one : CMIMaterial.values()) {
|
||||
if (!one.getLegacyId().equals(mat.getLegacyId()))
|
||||
if (one.getLegacyId() == null || !one.getLegacyId().equals(mat.getLegacyId()))
|
||||
continue;
|
||||
ls.add(one);
|
||||
}
|
||||
@ -1224,7 +1345,7 @@ public enum CMIMaterial {
|
||||
if (mat == null)
|
||||
return CMIMaterial.NONE;
|
||||
for (CMIMaterial one : CMIMaterial.values()) {
|
||||
if (!one.getLegacyId().equals(mat.getLegacyId()))
|
||||
if (one.getLegacyId() == null || !one.getLegacyId().equals(mat.getLegacyId()))
|
||||
continue;
|
||||
if (one.getLegacyData() == id)
|
||||
return one;
|
||||
@ -1337,16 +1458,16 @@ public enum CMIMaterial {
|
||||
if (block == null)
|
||||
return CMIMaterial.NONE;
|
||||
|
||||
CMIMaterial mat = null;
|
||||
|
||||
if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) {
|
||||
mat = ItemManager.byRealMaterial.get(block.getType());
|
||||
if (mat == null)
|
||||
try {
|
||||
if (Bukkit.getWorld(block.getWorld().getUID()) == null)
|
||||
return CMIMaterial.NONE;
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if (mat != null)
|
||||
return mat;
|
||||
if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) {
|
||||
return ItemManager.byRealMaterial.get(block.getType());
|
||||
}
|
||||
|
||||
byte data = Version.isCurrentEqualOrLower(Version.v1_13_R1) ? getBlockData(block) : 0;
|
||||
if (block.getState() instanceof Skull) {
|
||||
@ -1354,6 +1475,12 @@ public enum CMIMaterial {
|
||||
data = (byte) skull.getSkullType().ordinal();
|
||||
}
|
||||
|
||||
CMIMaterial mat = null;
|
||||
|
||||
if (Version.isCurrentEqualOrHigher(Version.v1_14_R1)) {
|
||||
mat = ItemManager.byRealMaterial.get(block.getType());
|
||||
}
|
||||
|
||||
mat = ItemManager.byName.get(block.getType().toString().replace("_", "").toLowerCase());
|
||||
|
||||
if (mat == null && Version.isCurrentEqualOrLower(Version.v1_13_R2)) {
|
||||
@ -1459,6 +1586,7 @@ public enum CMIMaterial {
|
||||
case TURTLE_EGG:
|
||||
case TURTLE_SPAWN_EGG:
|
||||
|
||||
// 1.14
|
||||
case CAT_SPAWN_EGG:
|
||||
case FOX_SPAWN_EGG:
|
||||
case PANDA_SPAWN_EGG:
|
||||
@ -1466,6 +1594,16 @@ public enum CMIMaterial {
|
||||
case RAVAGER_SPAWN_EGG:
|
||||
case TRADER_LLAMA_SPAWN_EGG:
|
||||
case WANDERING_TRADER_SPAWN_EGG:
|
||||
|
||||
// 1.15
|
||||
case BEE_SPAWN_EGG:
|
||||
|
||||
// 1.16
|
||||
case HOGLIN_SPAWN_EGG:
|
||||
case PIGLIN_SPAWN_EGG:
|
||||
case STRIDER_SPAWN_EGG:
|
||||
case ZOGLIN_SPAWN_EGG:
|
||||
case ZOMBIFIED_PIGLIN_SPAWN_EGG:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -1547,6 +1685,12 @@ public enum CMIMaterial {
|
||||
case SMOOTH_RED_SANDSTONE_STAIRS:
|
||||
case SMOOTH_SANDSTONE_STAIRS:
|
||||
case STONE_STAIRS:
|
||||
|
||||
case BLACKSTONE_STAIRS:
|
||||
case CRIMSON_STAIRS:
|
||||
case POLISHED_BLACKSTONE_BRICK_STAIRS:
|
||||
case POLISHED_BLACKSTONE_STAIRS:
|
||||
case WARPED_STAIRS:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -1637,6 +1781,8 @@ public enum CMIMaterial {
|
||||
case OAK_BUTTON:
|
||||
case SPRUCE_BUTTON:
|
||||
case STONE_BUTTON:
|
||||
case POLISHED_BLACKSTONE_BUTTON:
|
||||
case WARPED_BUTTON:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -1698,6 +1844,9 @@ public enum CMIMaterial {
|
||||
case OAK_PRESSURE_PLATE:
|
||||
case SPRUCE_PRESSURE_PLATE:
|
||||
case STONE_PRESSURE_PLATE:
|
||||
case CRIMSON_PRESSURE_PLATE:
|
||||
case POLISHED_BLACKSTONE_PRESSURE_PLATE:
|
||||
case WARPED_PRESSURE_PLATE:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -1831,21 +1980,25 @@ public enum CMIMaterial {
|
||||
|
||||
public boolean isArmor() {
|
||||
switch (this) {
|
||||
case NETHERITE_HELMET:
|
||||
case CHAINMAIL_HELMET:
|
||||
case DIAMOND_HELMET:
|
||||
case GOLDEN_HELMET:
|
||||
case IRON_HELMET:
|
||||
case LEATHER_HELMET:
|
||||
case NETHERITE_CHESTPLATE:
|
||||
case CHAINMAIL_CHESTPLATE:
|
||||
case DIAMOND_CHESTPLATE:
|
||||
case GOLDEN_CHESTPLATE:
|
||||
case IRON_CHESTPLATE:
|
||||
case LEATHER_CHESTPLATE:
|
||||
case NETHERITE_LEGGINGS:
|
||||
case CHAINMAIL_LEGGINGS:
|
||||
case DIAMOND_LEGGINGS:
|
||||
case GOLDEN_LEGGINGS:
|
||||
case IRON_LEGGINGS:
|
||||
case LEATHER_LEGGINGS:
|
||||
case NETHERITE_BOOTS:
|
||||
case CHAINMAIL_BOOTS:
|
||||
case DIAMOND_BOOTS:
|
||||
case GOLDEN_BOOTS:
|
||||
@ -1877,6 +2030,7 @@ public enum CMIMaterial {
|
||||
case BOW:
|
||||
case CROSSBOW:
|
||||
case TRIDENT:
|
||||
case NETHERITE_SWORD:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -1893,21 +2047,25 @@ public enum CMIMaterial {
|
||||
|
||||
public boolean isTool() {
|
||||
switch (this) {
|
||||
case NETHERITE_PICKAXE:
|
||||
case DIAMOND_PICKAXE:
|
||||
case GOLDEN_PICKAXE:
|
||||
case IRON_PICKAXE:
|
||||
case STONE_PICKAXE:
|
||||
case WOODEN_PICKAXE:
|
||||
case NETHERITE_SHOVEL:
|
||||
case DIAMOND_SHOVEL:
|
||||
case GOLDEN_SHOVEL:
|
||||
case IRON_SHOVEL:
|
||||
case STONE_SHOVEL:
|
||||
case WOODEN_SHOVEL:
|
||||
case NETHERITE_AXE:
|
||||
case DIAMOND_AXE:
|
||||
case GOLDEN_AXE:
|
||||
case IRON_AXE:
|
||||
case STONE_AXE:
|
||||
case WOODEN_AXE:
|
||||
case NETHERITE_HOE:
|
||||
case DIAMOND_HOE:
|
||||
case GOLDEN_HOE:
|
||||
case IRON_HOE:
|
||||
@ -1922,6 +2080,10 @@ public enum CMIMaterial {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isNone() {
|
||||
return this.equals(CMIMaterial.NONE);
|
||||
}
|
||||
|
||||
public static boolean isAir(Material mat) {
|
||||
CMIMaterial m = CMIMaterial.get(mat);
|
||||
if (m == null)
|
||||
@ -2032,6 +2194,8 @@ public enum CMIMaterial {
|
||||
// case IRON_DOOR_BLOCK:
|
||||
case JUNGLE_DOOR:
|
||||
case SPRUCE_DOOR:
|
||||
case CRIMSON_DOOR:
|
||||
case WARPED_DOOR:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -2055,6 +2219,8 @@ public enum CMIMaterial {
|
||||
case JUNGLE_FENCE_GATE:
|
||||
case OAK_FENCE_GATE:
|
||||
case SPRUCE_FENCE_GATE:
|
||||
case CRIMSON_FENCE_GATE:
|
||||
case WARPED_FENCE_GATE:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -2078,6 +2244,8 @@ public enum CMIMaterial {
|
||||
case NETHER_BRICK_FENCE:
|
||||
case OAK_FENCE:
|
||||
case SPRUCE_FENCE:
|
||||
case CRIMSON_FENCE:
|
||||
case WARPED_FENCE:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -2150,7 +2318,6 @@ public enum CMIMaterial {
|
||||
case SIGN:
|
||||
case WALL_SIGN:
|
||||
case LEGACY_SIGN_POST:
|
||||
|
||||
case ACACIA_SIGN:
|
||||
case ACACIA_WALL_SIGN:
|
||||
case BIRCH_SIGN:
|
||||
@ -2163,7 +2330,10 @@ public enum CMIMaterial {
|
||||
case OAK_WALL_SIGN:
|
||||
case SPRUCE_SIGN:
|
||||
case SPRUCE_WALL_SIGN:
|
||||
|
||||
case CRIMSON_SIGN:
|
||||
case CRIMSON_WALL_SIGN:
|
||||
case WARPED_SIGN:
|
||||
case WARPED_WALL_SIGN:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -2242,6 +2412,8 @@ public enum CMIMaterial {
|
||||
case JUNGLE_TRAPDOOR:
|
||||
case OAK_TRAPDOOR:
|
||||
case SPRUCE_TRAPDOOR:
|
||||
case CRIMSON_TRAPDOOR:
|
||||
case WARPED_TRAPDOOR:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -2368,6 +2540,11 @@ public enum CMIMaterial {
|
||||
case SMOOTH_RED_SANDSTONE_SLAB:
|
||||
case SMOOTH_SANDSTONE_SLAB:
|
||||
case SMOOTH_STONE_SLAB:
|
||||
case BLACKSTONE_SLAB:
|
||||
case CRIMSON_SLAB:
|
||||
case POLISHED_BLACKSTONE_BRICK_SLAB:
|
||||
case POLISHED_BLACKSTONE_SLAB:
|
||||
case WARPED_SLAB:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@ -2483,14 +2660,12 @@ public enum CMIMaterial {
|
||||
}
|
||||
|
||||
public List<String> getLegacyNames() {
|
||||
if (legacyName == null)
|
||||
return new ArrayList<String>();
|
||||
return legacyName;
|
||||
return legacyName == null ? new ArrayList<>() : legacyName;
|
||||
}
|
||||
|
||||
public void addLegacyName(String legacyName) {
|
||||
if (legacyName == null)
|
||||
this.legacyName = new ArrayList<String>();
|
||||
this.legacyName = new ArrayList<>();
|
||||
this.legacyName.add(legacyName);
|
||||
}
|
||||
|
||||
@ -2504,6 +2679,24 @@ public enum CMIMaterial {
|
||||
this.bukkitName = bukkitName;
|
||||
}
|
||||
|
||||
public String getMojangName() {
|
||||
if (mojangName == null)
|
||||
mojangName = Reflections.getItemMinecraftName(this.newItemStack());
|
||||
return mojangName;
|
||||
}
|
||||
|
||||
public void setMojangName(String mojangName) {
|
||||
this.mojangName = mojangName;
|
||||
}
|
||||
|
||||
public Set<CMIMaterialCriteria> getCriteria() {
|
||||
return criteria;
|
||||
}
|
||||
|
||||
public boolean containsCriteria(CMIMaterialCriteria criteria) {
|
||||
return this.criteria == null || criteria == null ? false : this.criteria.contains(criteria);
|
||||
}
|
||||
|
||||
public static String getGeneralMaterialName(String fullName) {
|
||||
String newName = fullName.toUpperCase();
|
||||
if (newName.startsWith("STRIPPED")) {
|
||||
|
@ -0,0 +1,7 @@
|
||||
package com.gamingmesh.jobs.CMILib;
|
||||
|
||||
public enum CMIMaterialCriteria {
|
||||
|
||||
seeThrow, stars, slab, door, carpet, wool, monsteregg;
|
||||
|
||||
}
|
@ -1,36 +1,30 @@
|
||||
package com.gamingmesh.jobs.CMILib;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.gamingmesh.jobs.CMILib.VersionChecker.Version;
|
||||
|
||||
public class RawMessage {
|
||||
|
||||
private List<String> parts = new ArrayList<>();
|
||||
private List<String> cleanParts = new ArrayList<>();
|
||||
private String colorReplacerPlaceholder = "%#%";
|
||||
List<String> parts = new ArrayList<>();
|
||||
List<String> cleanParts = new ArrayList<>();
|
||||
|
||||
private String unfinished = "";
|
||||
private String unfinishedClean = "";
|
||||
|
||||
private String combined = "";
|
||||
private String combinedClean = "";
|
||||
String combinedClean = "";
|
||||
private boolean dontBreakLine = false;
|
||||
private boolean combineHoverOver = false;
|
||||
|
||||
// private boolean colorizeEntireWithLast = true;
|
||||
|
||||
@ -58,7 +52,6 @@ public class RawMessage {
|
||||
hover += "\n";
|
||||
hover += one;
|
||||
}
|
||||
|
||||
return add(text, hover.isEmpty() ? null : hover, null, null, null);
|
||||
}
|
||||
|
||||
@ -70,19 +63,33 @@ public class RawMessage {
|
||||
return add(text, hoverText, command, suggestion, null);
|
||||
}
|
||||
|
||||
private Set<CMIChatColor> formats = new HashSet<>();
|
||||
private CMIChatColor lastColor = null;
|
||||
Set<CMIChatColor> formats = new HashSet<>();
|
||||
CMIChatColor lastColor = null;
|
||||
|
||||
private Set<CMIChatColor> savedFormats = new HashSet<>();
|
||||
private CMIChatColor savedLastColor = null;
|
||||
Set<CMIChatColor> savedFormats = new HashSet<>();
|
||||
CMIChatColor savedLastColor = null;
|
||||
|
||||
private CMIChatColor firstBlockColor = null;
|
||||
CMIChatColor firstBlockColor = null;
|
||||
|
||||
private String makeMessyText(String text) {
|
||||
private String intoJsonColored(String text) {
|
||||
if (text.equalsIgnoreCase(" "))
|
||||
return text;
|
||||
|
||||
text = CMIChatColor.deColorize(text);
|
||||
List<String> splited = new ArrayList<String>();
|
||||
|
||||
Pattern decolpattern = Pattern.compile(CMIChatColor.hexColorDecolRegex);
|
||||
|
||||
Matcher decolmatch = decolpattern.matcher(text);
|
||||
while (decolmatch.find()) {
|
||||
|
||||
String string = decolmatch.group();
|
||||
|
||||
string = "{#" + string.substring(2).replace("&", "") + "}";
|
||||
|
||||
text = text.replaceAll(decolmatch.group(), string);
|
||||
}
|
||||
|
||||
List<String> splited = new ArrayList<>();
|
||||
if (text.contains(" ")) {
|
||||
for (String one : text.split(" ")) {
|
||||
// if (this.isBreakLine() && one.contains("\\n")) {
|
||||
@ -91,7 +98,7 @@ public class RawMessage {
|
||||
// if (i < split.length - 1) {
|
||||
// splited.add(split[i] + "\n");
|
||||
// } else {
|
||||
// splited.add(split[i]);
|
||||
// splited.add(split[i]);
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
@ -109,26 +116,95 @@ public class RawMessage {
|
||||
} else
|
||||
splited.add(text);
|
||||
|
||||
Pattern prepattern = Pattern.compile(CMIChatColor.hexColorRegex);
|
||||
|
||||
List<String> plt = new ArrayList<>(splited);
|
||||
splited.clear();
|
||||
for (String one : plt) {
|
||||
Matcher match = prepattern.matcher(one);
|
||||
|
||||
boolean found = false;
|
||||
|
||||
String prev = null;
|
||||
String end = null;
|
||||
while (match.find()) {
|
||||
if (match.group(2) == null)
|
||||
continue;
|
||||
found = true;
|
||||
|
||||
CMIChatColor c = new CMIChatColor(match.group(2));
|
||||
|
||||
String[] spl = one.split("\\{\\#" + c.getHex() + "\\}");
|
||||
if (spl.length == 0 || spl[0].isEmpty()) {
|
||||
prev = match.group();
|
||||
if (spl.length > 0)
|
||||
end = spl[1];
|
||||
continue;
|
||||
}
|
||||
|
||||
// if (prev != null) {
|
||||
// splited.add(spl[0]);
|
||||
// } else {
|
||||
splited.add(spl[0]);
|
||||
// }
|
||||
|
||||
if (spl.length > 0)
|
||||
end = spl[1];
|
||||
|
||||
one = one.substring(spl[0].length());
|
||||
prev = match.group();
|
||||
match = prepattern.matcher(one);
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
if (prev != null) {
|
||||
if (end != null)
|
||||
splited.add(prev + end);
|
||||
else
|
||||
splited.add(prev);
|
||||
} else {
|
||||
if (end != null)
|
||||
splited.add(end);
|
||||
}
|
||||
|
||||
splited.add(one);
|
||||
} else {
|
||||
|
||||
if (prev != null) {
|
||||
if (end != null)
|
||||
splited.add(prev + end);
|
||||
} else {
|
||||
if (end != null)
|
||||
splited.add(end);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String newText = "";
|
||||
|
||||
Pattern pattern = Pattern.compile("(&[0123456789abcdefklmnorABCDEFKLMNOR])|" + CMIChatColor.hexColorRegex);
|
||||
|
||||
newText += "{\"text\":\"";
|
||||
|
||||
for (String one : splited) {
|
||||
|
||||
String colorString = "";
|
||||
if (lastColor != null)
|
||||
colorString += lastColor.getColorCode();
|
||||
else
|
||||
colorString += CMIChatColor.WHITE.getColorCode();
|
||||
for (CMIChatColor oneC : formats) {
|
||||
colorString = colorString + oneC.getColorCode();
|
||||
}
|
||||
// if (lastColor != null)
|
||||
// colorString += lastColor.getColorCode();
|
||||
// else
|
||||
// colorString += CMIChatColor.WHITE.getColorCode();
|
||||
// for (CMIChatColor oneC : formats) {
|
||||
// colorString = colorString + oneC.getColorCode();
|
||||
// }
|
||||
|
||||
if (one.contains("&")) {
|
||||
Pattern pattern = Pattern.compile("(&[0123456789abcdefklmnorABCDEFKLMNOR])");
|
||||
if (one.contains("&") || one.contains("{") && one.contains("}")) {
|
||||
Matcher match = pattern.matcher(one);
|
||||
while (match.find()) {
|
||||
|
||||
String color = CMIChatColor.getLastColors(match.group(0));
|
||||
CMIChatColor c = CMIChatColor.getColor(color);
|
||||
if (c == null && match.group(3) != null) {
|
||||
c = new CMIChatColor(match.group(3));
|
||||
}
|
||||
if (c != null) {
|
||||
if (c.isFormat()) {
|
||||
formats.add(c);
|
||||
@ -137,102 +213,50 @@ public class RawMessage {
|
||||
lastColor = null;
|
||||
// firstBlockColor = null;
|
||||
} else if (c.isColor()) {
|
||||
lastColor = c;
|
||||
if (c.getHex() == null)
|
||||
lastColor = c;
|
||||
formats.clear();
|
||||
firstBlockColor = c;
|
||||
|
||||
if (c.getHex() != null) {
|
||||
one = "\"},{\"color\":\"#" + c.getHex() + "\",\"text\":\"" + one;
|
||||
}
|
||||
}
|
||||
|
||||
if (c.isFormat()) {
|
||||
} else if (c.isReset()) {
|
||||
} else if (c.isColor()) {
|
||||
} else if (c.isColor() && c.getHex() == null) {
|
||||
String form = "";
|
||||
for (CMIChatColor oneC : formats) {
|
||||
form += oneC.getColorCode();
|
||||
}
|
||||
one = one.replace(c.getColorCode(), c.getColorCode() + form);
|
||||
}
|
||||
} else if (c.getHex() != null) {
|
||||
//String form = "";
|
||||
//for (CMIChatColor oneC : formats) {
|
||||
//form += oneC.getColorCode();
|
||||
//}
|
||||
|
||||
// CMIDebug.d("*"+net.md_5.bungee.api.ChatColor.of("#" + c.getHex())+ "_"+net.md_5.bungee.api.ChatColor.of("#FF00FF")+ "+");
|
||||
|
||||
// one = one.replace("{#" + c.getHex() + "}", "\u00A7x\u00A76\u00A76\u00A70\u00A70\u00A7c\u00A7c" + form);
|
||||
}
|
||||
if (c.getHex() != null) {
|
||||
one = one.replace("{#" + c.getHex() + "}", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
newText += colorString + one;
|
||||
|
||||
}
|
||||
|
||||
newText += "\"}";
|
||||
return newText;
|
||||
}
|
||||
|
||||
public RawMessage addText(String text) {
|
||||
if (text == null)
|
||||
return this;
|
||||
text = provessText(text);
|
||||
if (dontBreakLine) {
|
||||
text = text.replace("\\\\\\n", "\\\\n");
|
||||
}
|
||||
|
||||
unfinishedClean = text;
|
||||
unfinished += "\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\"";
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage addHoverText(List<String> hoverText) {
|
||||
String hover = "";
|
||||
if (hoverText != null)
|
||||
for (String one : hoverText) {
|
||||
if (!hover.isEmpty())
|
||||
hover += "\n";
|
||||
hover += one;
|
||||
}
|
||||
return addHoverText(hover);
|
||||
}
|
||||
|
||||
public RawMessage addHoverText(String hoverText) {
|
||||
if (hoverText != null && !hoverText.isEmpty()) {
|
||||
hoverText = hoverText.replace(" \n", " \\n");
|
||||
hoverText = hoverText.replace("\n", "\\n");
|
||||
unfinished += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText) + "\"}]}}";
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage addCommand(String command) {
|
||||
if (command != null) {
|
||||
if (!command.startsWith("/"))
|
||||
command = "/" + command;
|
||||
unfinished += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}";
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage addSuggestion(String suggestion) {
|
||||
if (suggestion != null)
|
||||
unfinished += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}";
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage addUrl(String url) {
|
||||
if (url != null) {
|
||||
if (!url.toLowerCase().startsWith("http://") || !url.toLowerCase().startsWith("https://"))
|
||||
url = "http://" + url;
|
||||
unfinished += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}";
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage build() {
|
||||
if (unfinished.isEmpty())
|
||||
return this;
|
||||
unfinished = unfinished.startsWith("{") ? unfinished : "{" + unfinished + "}";
|
||||
parts.add(unfinished);
|
||||
cleanParts.add(ChatColor.translateAlternateColorCodes('&', unfinishedClean));
|
||||
|
||||
unfinished = "";
|
||||
unfinishedClean = "";
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
private String provessText(String text) {
|
||||
private String processText(String text) {
|
||||
Random rand = new Random();
|
||||
|
||||
String breakLine0 = String.valueOf(rand.nextInt(Integer.MAX_VALUE));
|
||||
@ -255,38 +279,184 @@ public class RawMessage {
|
||||
return text;
|
||||
}
|
||||
|
||||
public RawMessage add(String text, String hoverText, String command, String suggestion, String url) {
|
||||
|
||||
public RawMessage addText(String text) {
|
||||
if (text == null)
|
||||
return this;
|
||||
text = provessText(text);
|
||||
text = processText(text);
|
||||
|
||||
if (dontBreakLine)
|
||||
if (dontBreakLine) {
|
||||
text = text.replace("\n", "\\\\n");
|
||||
text = text.replace("\\n", "\\\\n");
|
||||
text = text.replace("\\\\\\n", "\\\\n");
|
||||
|
||||
String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', makeMessyText(text)).replace(colorReplacerPlaceholder, "&") + "\"";
|
||||
|
||||
if (hoverText != null && !hoverText.isEmpty()) {
|
||||
hoverText = provessText(hoverText);
|
||||
hoverText = hoverText.replace(" \n", " \\n");
|
||||
hoverText = hoverText.replace("\n", "\\n");
|
||||
f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText) + "\"}]}}";
|
||||
}
|
||||
|
||||
text = text.replace("\n", "\\n");
|
||||
|
||||
unfinishedClean = text;
|
||||
|
||||
unfinished = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]";
|
||||
if (firstBlockColor != null) {
|
||||
if (firstBlockColor.getHex() == null)
|
||||
unfinished += ",\"color\":\"" + firstBlockColor.getName().toLowerCase() + "\"";
|
||||
else {
|
||||
unfinished += ",\"color\":\"#" + firstBlockColor.getHex() + "\"";
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
// public RawMessage addHoverText(List<Object> hoverText) {
|
||||
// String hover = "";
|
||||
// if (hoverText != null)
|
||||
// for (Object one : hoverText) {
|
||||
// if (!hover.isEmpty())
|
||||
// hover += "\n";
|
||||
// hover += one.toString();
|
||||
// }
|
||||
// return addHoverText(hover);
|
||||
// }
|
||||
|
||||
public RawMessage addHoverText(List<String> hoverText) {
|
||||
String hover = "";
|
||||
if (hoverText != null) {
|
||||
for (String one : hoverText) {
|
||||
if (!hover.isEmpty())
|
||||
hover += "\n";
|
||||
hover += one;
|
||||
}
|
||||
}
|
||||
return addHoverText(hover);
|
||||
}
|
||||
|
||||
public RawMessage addHoverText(String hoverText) {
|
||||
if (hoverText != null && !hoverText.isEmpty()) {
|
||||
hoverText = processText(hoverText);
|
||||
hoverText = hoverText.replace(" \n", " \\n");
|
||||
hoverText = hoverText.replace("\n", "\\n");
|
||||
unfinished += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(hoverText)) + "]}}";
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage addCommand(String command) {
|
||||
if (command != null) {
|
||||
if (!command.startsWith("/"))
|
||||
command = "/" + command;
|
||||
unfinished += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}";
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage addInsertion(String suggestion) {
|
||||
if (suggestion != null) {
|
||||
|
||||
suggestion = provessText(suggestion);
|
||||
suggestion = processText(suggestion);
|
||||
|
||||
suggestion = suggestion.replace("\\n", "\\\\n");
|
||||
suggestion = suggestion.replace(" \\n", " \\\\n");
|
||||
suggestion = suggestion.replace(" \n", " \\\\n");
|
||||
|
||||
if (suggestion != null)
|
||||
f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}";
|
||||
unfinished += ",\"insertion\":\"" + suggestion + "\"";
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage addSuggestion(String suggestion) {
|
||||
if (suggestion != null) {
|
||||
|
||||
suggestion = processText(suggestion);
|
||||
|
||||
suggestion = suggestion.replace("\\n", "\\\\n");
|
||||
suggestion = suggestion.replace(" \\n", " \\\\n");
|
||||
suggestion = suggestion.replace(" \n", " \\\\n");
|
||||
|
||||
unfinished += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}";
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage addUrl(String url) {
|
||||
if (url != null) {
|
||||
url = processText(url);
|
||||
if (!url.toLowerCase().startsWith("http://") || !url.toLowerCase().startsWith("https://"))
|
||||
url = "http://" + url;
|
||||
unfinished += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}";
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage build() {
|
||||
if (unfinished.isEmpty())
|
||||
return this;
|
||||
|
||||
unfinished += "}";
|
||||
unfinished = unfinished.startsWith("{") ? unfinished : "{" + unfinished + "}";
|
||||
parts.add(unfinished);
|
||||
cleanParts.add(CMIChatColor.translate(unfinishedClean));
|
||||
|
||||
unfinished = "";
|
||||
unfinishedClean = "";
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage add(String text, String hoverText, String command, String suggestion, String url) {
|
||||
return add(text, hoverText, command, suggestion, url, null);
|
||||
}
|
||||
|
||||
public RawMessage add(String text, String hoverText, String command, String suggestion, String url, String insertion) {
|
||||
if (text == null)
|
||||
return this;
|
||||
|
||||
text = processText(text);
|
||||
|
||||
if (dontBreakLine) {
|
||||
text = text.replace("\n", "\\\\n");
|
||||
text = text.replace("\\n", "\\\\n");
|
||||
text = text.replace("\\\\\\n", "\\\\n");
|
||||
}
|
||||
|
||||
text = text.replace("\n", "\\n");
|
||||
|
||||
String f = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]";
|
||||
if (firstBlockColor != null) {
|
||||
if (firstBlockColor.getHex() == null)
|
||||
f += ",\"color\":\"" + firstBlockColor.getName().toLowerCase() + "\"";
|
||||
else {
|
||||
f += ",\"color\":\"#" + firstBlockColor.getHex() + "\"";
|
||||
}
|
||||
}
|
||||
|
||||
// f+=",\"extra\":[{\"text\":\"Extra\"},{\"text\":\"Extra1\"}]";
|
||||
|
||||
if (insertion != null) {
|
||||
insertion = processText(insertion);
|
||||
f += ",\"insertion\":\"" + insertion + "\"";
|
||||
}
|
||||
|
||||
if (hoverText != null && !hoverText.isEmpty()) {
|
||||
hoverText = processText(hoverText);
|
||||
hoverText = hoverText.replace(" \n", " \\n");
|
||||
hoverText = hoverText.replace("\n", "\\n");
|
||||
f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(hoverText)) + "]}}";
|
||||
}
|
||||
|
||||
if (suggestion != null) {
|
||||
|
||||
suggestion = processText(suggestion);
|
||||
|
||||
suggestion = suggestion.replace("\\n", "\\\\n");
|
||||
suggestion = suggestion.replace(" \\n", " \\\\n");
|
||||
suggestion = suggestion.replace(" \n", " \\\\n");
|
||||
|
||||
f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + CMIChatColor.deColorize(suggestion) + "\"}";
|
||||
}
|
||||
if (url != null) {
|
||||
url = provessText(url);
|
||||
if (!url.toLowerCase().startsWith("http://") || !url.toLowerCase().startsWith("https://"))
|
||||
url = processText(url);
|
||||
if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://"))
|
||||
url = "http://" + url;
|
||||
f += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}";
|
||||
}
|
||||
@ -294,7 +464,7 @@ public class RawMessage {
|
||||
if (command != null) {
|
||||
if (!command.startsWith("/"))
|
||||
command = "/" + command;
|
||||
command = provessText(command);
|
||||
command = processText(command);
|
||||
f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}";
|
||||
}
|
||||
// }
|
||||
@ -302,7 +472,12 @@ public class RawMessage {
|
||||
f += "}";
|
||||
|
||||
parts.add(f);
|
||||
cleanParts.add(ChatColor.translateAlternateColorCodes('&', text));
|
||||
cleanParts.add(CMIChatColor.translate(text));
|
||||
// if (this.isCombineHoverOver() && hoverText != null) {
|
||||
// for (String one : hoverText.split("\\\\n")) {
|
||||
// cleanParts.add("\n"+CMIChatColor.translate(one));
|
||||
// }
|
||||
// }
|
||||
// firstBlockColor = null;
|
||||
return this;
|
||||
}
|
||||
@ -315,16 +490,21 @@ public class RawMessage {
|
||||
if (text == null)
|
||||
return this;
|
||||
|
||||
text = text.replace("\\", "\\\\");
|
||||
text = text.replace("\"", "\\\"");
|
||||
String f = "{\"text\":\"" + CMIChatColor.colorize(text).replace(colorReplacerPlaceholder, "&") + "\"";
|
||||
text = processText(text);
|
||||
String f = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]";
|
||||
if (firstBlockColor != null) {
|
||||
f += ",\"color\":\"" + firstBlockColor.name().toLowerCase() + "\"";
|
||||
if (firstBlockColor.getHex() == null)
|
||||
f += ",\"color\":\"" + firstBlockColor.getName().toLowerCase() + "\"";
|
||||
else {
|
||||
f += ",\"color\":\"#" + firstBlockColor.getHex() + "\"";
|
||||
}
|
||||
}
|
||||
if (hoverText != null && !hoverText.isEmpty()) {
|
||||
|
||||
hoverText = processText(hoverText);
|
||||
hoverText = hoverText.startsWith(" ") ? hoverText.substring(1) : hoverText;
|
||||
f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', hoverText).replace(
|
||||
colorReplacerPlaceholder, "&") + "\"}]}}";
|
||||
f += ",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(hoverText)).replace(
|
||||
CMIChatColor.colorReplacerPlaceholder, "&") + "]}}";
|
||||
}
|
||||
|
||||
url = url.endsWith(" ") ? url.substring(0, url.length() - 1) : url;
|
||||
@ -333,17 +513,24 @@ public class RawMessage {
|
||||
if (url != null && !url.isEmpty()) {
|
||||
if (!url.toLowerCase().startsWith("http://") && !url.toLowerCase().startsWith("https://"))
|
||||
url = "http://" + url;
|
||||
url = processText(url);
|
||||
f += ",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + url + "\"}";
|
||||
}
|
||||
f += "}";
|
||||
parts.add(f);
|
||||
cleanParts.add(ChatColor.translateAlternateColorCodes('&', text));
|
||||
cleanParts.add(CMIChatColor.translate(text));
|
||||
// if (this.isCombineHoverOver() && hoverText != null) {
|
||||
// for (String one : hoverText.split("\\n")) {
|
||||
// cleanParts.add(CMIChatColor.translate(one));
|
||||
// }
|
||||
// }
|
||||
// firstBlockColor = null;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public RawMessage addItem(String text, ItemStack item, List<String> extraLore, String command, String suggestion) {
|
||||
public RawMessage addItem(String text, ItemStack item, String command, String suggestion, String insertion) {
|
||||
|
||||
if (text == null)
|
||||
return this;
|
||||
if (item == null)
|
||||
@ -351,112 +538,33 @@ public class RawMessage {
|
||||
|
||||
item = item.clone();
|
||||
|
||||
text = makeMessyText(text);
|
||||
String f = "{\"text\":\"\",\"extra\":[" + CMIChatColor.translate(intoJsonColored(text)).replace(CMIChatColor.colorReplacerPlaceholder, "&") + "]";
|
||||
|
||||
String f = "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', text) + "\"";
|
||||
|
||||
CMIItemStack cm = ItemManager.getItem(item);
|
||||
|
||||
String ItemName = "&r&f" + cm.getDisplayName();
|
||||
String Enchants = getItemEnchants(item);
|
||||
|
||||
if (!Enchants.isEmpty()) {
|
||||
if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) {
|
||||
Enchants = ",Enchantments:" + Enchants;
|
||||
} else {
|
||||
Enchants = ",ench:" + Enchants;
|
||||
}
|
||||
if (insertion != null) {
|
||||
insertion = processText(insertion);
|
||||
f += ",\"insertion\":\"" + insertion + "\"";
|
||||
}
|
||||
|
||||
List<String> Lore = new ArrayList<>();
|
||||
String res = Reflections.toJson(item);
|
||||
|
||||
// if (CMIMaterial.isShulkerBox(item.getType())) {
|
||||
// List<ItemStack> items = CMI.getInstance().getShulkerBoxManager().getShulkerBoxContents(item);
|
||||
// for (ItemStack one : items) {
|
||||
// if (one == null)
|
||||
// continue;
|
||||
// CMIItemStack cim = ItemManager.getItem(one);
|
||||
// if (cim == null)
|
||||
// continue;
|
||||
// Lore.add(CMIChatColor.translateAlternateColorCodes("&7" + cim.getRealName() + " x" + cim.getAmount()));
|
||||
// }
|
||||
// }
|
||||
f += ",\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"" + res + "\"}";
|
||||
|
||||
if (item.hasItemMeta() && item.getItemMeta().hasLore())
|
||||
Lore.addAll(item.getItemMeta().getLore());
|
||||
if (extraLore != null)
|
||||
Lore.addAll(extraLore);
|
||||
|
||||
String itemName = cm.getBukkitName();
|
||||
|
||||
if (cm.getMojangName() != null)
|
||||
itemName = cm.getMojangName();
|
||||
|
||||
if (itemName.equalsIgnoreCase("Air")) {
|
||||
itemName = "Stone";
|
||||
ItemName = "Hand";
|
||||
}
|
||||
|
||||
if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) {
|
||||
itemName = org.bukkit.NamespacedKey.minecraft(cm.getType().name().toLowerCase()).getKey();
|
||||
}
|
||||
|
||||
String loreS = convertLore(Lore);
|
||||
if (!Lore.isEmpty()) {
|
||||
loreS = ",Lore:[" + loreS + "]";
|
||||
}
|
||||
f += ",\"hoverEvent\":{\"action\":\"show_item\",\"value\":\"{id:" + itemName + ",Count:1b,tag:{display:{Name:\\\"" + CMIChatColor.translateAlternateColorCodes(ItemName) + "\\\"" + loreS
|
||||
+ "}"
|
||||
+ Enchants + "}}\"}";
|
||||
|
||||
if (suggestion != null)
|
||||
if (suggestion != null) {
|
||||
suggestion = processText(suggestion);
|
||||
f += ",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"" + suggestion + "\"}";
|
||||
}
|
||||
if (command != null) {
|
||||
command = processText(command);
|
||||
if (!command.startsWith("/"))
|
||||
command = "/" + command;
|
||||
f += ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + command + "\"}";
|
||||
}
|
||||
f += "}";
|
||||
|
||||
parts.add(f);
|
||||
return this;
|
||||
}
|
||||
|
||||
private static String getItemEnchants(ItemStack item) {
|
||||
String Enchants = "";
|
||||
if (item.getEnchantments().isEmpty())
|
||||
return Enchants;
|
||||
|
||||
Enchants = "";
|
||||
for (Entry<Enchantment, Integer> one : item.getEnchantments().entrySet()) {
|
||||
if (!Enchants.isEmpty())
|
||||
Enchants += ",";
|
||||
if (Version.isCurrentEqualOrHigher(Version.v1_13_R1))
|
||||
Enchants += "{id:" + one.getKey().getKey().getKey() + ",lvl:" + one.getValue() + "s}";
|
||||
else {
|
||||
try {
|
||||
Enchants += "{id:" + String.valueOf(one.getKey().getClass().getMethod("getId").invoke(one.getKey())) + ",lvl:" + one.getValue() + "}";
|
||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!Enchants.isEmpty()) {
|
||||
Enchants = "[" + Enchants;
|
||||
Enchants += "]";
|
||||
}
|
||||
return Enchants;
|
||||
}
|
||||
|
||||
private static String convertLore(List<String> lore) {
|
||||
String lr = "";
|
||||
for (String one : lore) {
|
||||
if (!lr.isEmpty())
|
||||
lr += ",";
|
||||
lr += "\\\"" + one + "\\\"";
|
||||
}
|
||||
return lr;
|
||||
}
|
||||
|
||||
public List<String> softCombine() {
|
||||
List<String> ls = new ArrayList<>();
|
||||
String f = "";
|
||||
@ -520,10 +628,12 @@ public class RawMessage {
|
||||
for (String one : softCombine()) {
|
||||
if (one.isEmpty())
|
||||
continue;
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + one);
|
||||
RawMessageManager.send(player, one);
|
||||
// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tellraw " + player.getName() + " " + one);
|
||||
}
|
||||
} else {
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + combined);
|
||||
RawMessageManager.send(player, combined);
|
||||
// Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tellraw " + player.getName() + " " + combined);
|
||||
}
|
||||
|
||||
return this;
|
||||
@ -546,10 +656,12 @@ public class RawMessage {
|
||||
public RawMessage show(CommandSender sender) {
|
||||
if (combined.isEmpty())
|
||||
combine();
|
||||
if (sender instanceof Player)
|
||||
this.build();
|
||||
if (sender instanceof Player) {
|
||||
show((Player) sender);
|
||||
else
|
||||
sender.sendMessage(this.combineClean().combinedClean);
|
||||
} else {
|
||||
Bukkit.getConsoleSender().sendMessage(CMIChatColor.translate(this.combineClean().combinedClean));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -581,11 +693,6 @@ public class RawMessage {
|
||||
this.combined = combined;
|
||||
}
|
||||
|
||||
// Set<CMIChatColor> formats = new HashSet<CMIChatColor>();
|
||||
// CMIChatColor lastColor = null;
|
||||
//
|
||||
// Set<CMIChatColor> savedFormats = new HashSet<CMIChatColor>();
|
||||
// CMIChatColor savedLastColor = null;
|
||||
public void resetColorFormats() {
|
||||
formats.clear();
|
||||
lastColor = null;
|
||||
@ -602,4 +709,12 @@ public class RawMessage {
|
||||
formats.addAll(savedFormats);
|
||||
lastColor = savedLastColor;
|
||||
}
|
||||
|
||||
public boolean isCombineHoverOver() {
|
||||
return combineHoverOver;
|
||||
}
|
||||
|
||||
public void setCombineHoverOver(boolean combineHoverOver) {
|
||||
this.combineHoverOver = combineHoverOver;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,92 @@
|
||||
package com.gamingmesh.jobs.CMILib;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gamingmesh.jobs.Jobs;
|
||||
import com.gamingmesh.jobs.CMILib.VersionChecker.Version;
|
||||
|
||||
public class RawMessageManager {
|
||||
|
||||
private static Object packet;
|
||||
private static Method getHandle;
|
||||
private static Method sendPacket;
|
||||
private static Field playerConnection;
|
||||
private static Class<?> nmsChatSerializer;
|
||||
private static Class<?> nmsIChatBaseComponent;
|
||||
private static Class<?> packetType;
|
||||
|
||||
private static Class<?> ChatMessageclz;
|
||||
private static Class<?> sub;
|
||||
private static Object[] consts;
|
||||
|
||||
static {
|
||||
Version version = Version.getCurrent();
|
||||
try {
|
||||
packetType = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat");
|
||||
Class<?> typeCraftPlayer = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");
|
||||
Class<?> typeNMSPlayer = Class.forName("net.minecraft.server." + version + ".EntityPlayer");
|
||||
Class<?> typePlayerConnection = Class.forName("net.minecraft.server." + version + ".PlayerConnection");
|
||||
nmsChatSerializer = Class.forName(getChatSerializerClasspath());
|
||||
nmsIChatBaseComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent");
|
||||
getHandle = typeCraftPlayer.getMethod("getHandle");
|
||||
playerConnection = typeNMSPlayer.getField("playerConnection");
|
||||
sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"));
|
||||
if (Version.isCurrentHigher(Version.v1_11_R1)) {
|
||||
ChatMessageclz = Class.forName("net.minecraft.server." + version + ".ChatMessageType");
|
||||
consts = ChatMessageclz.getEnumConstants();
|
||||
sub = consts[2].getClass();
|
||||
}
|
||||
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | NoSuchFieldException ex) {
|
||||
Jobs.consoleMsg("Error {0} ");
|
||||
Jobs.consoleMsg(ex.toString());
|
||||
}
|
||||
}
|
||||
|
||||
public static void send(CommandSender receivingPacket, String msg) {
|
||||
if (receivingPacket instanceof Player)
|
||||
send((Player) receivingPacket, msg);
|
||||
else
|
||||
receivingPacket.sendMessage(msg);
|
||||
}
|
||||
|
||||
public static void send(Player receivingPacket, String json) {
|
||||
if (receivingPacket == null)
|
||||
return;
|
||||
if (!receivingPacket.isOnline())
|
||||
return;
|
||||
if (json == null)
|
||||
return;
|
||||
|
||||
try {
|
||||
Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, json);
|
||||
if (Version.isCurrentHigher(Version.v1_15_R1))
|
||||
packet = packetType.getConstructor(nmsIChatBaseComponent, sub, UUID.class).newInstance(serialized, consts[1], receivingPacket.getUniqueId());
|
||||
else if (Version.isCurrentHigher(Version.v1_11_R1))
|
||||
packet = packetType.getConstructor(nmsIChatBaseComponent, sub).newInstance(serialized, consts[1]);
|
||||
else if (Version.isCurrentHigher(Version.v1_7_R4)) {
|
||||
packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 1);
|
||||
} else {
|
||||
packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 1);
|
||||
}
|
||||
Object player = getHandle.invoke(receivingPacket);
|
||||
Object connection = playerConnection.get(player);
|
||||
sendPacket.invoke(connection, packet);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
Jobs.consoleMsg("Failed to show json message with packets, using command approach");
|
||||
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "minecraft:tellraw \"" + receivingPacket.getName() + "\" " + json);
|
||||
}
|
||||
}
|
||||
|
||||
private static String getChatSerializerClasspath() {
|
||||
if (!Version.isCurrentHigher(Version.v1_8_R2))
|
||||
return "net.minecraft.server." + Version.getCurrent() + ".ChatSerializer";
|
||||
return "net.minecraft.server." + Version.getCurrent() + ".IChatBaseComponent$ChatSerializer";// 1_8_R2 moved to IChatBaseComponent
|
||||
}
|
||||
}
|
@ -4,18 +4,21 @@
|
||||
|
||||
package com.gamingmesh.jobs.CMILib;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.gamingmesh.jobs.Jobs;
|
||||
import com.gamingmesh.jobs.CMILib.VersionChecker.Version;
|
||||
|
||||
public class Reflections {
|
||||
|
||||
private Class<?> CraftServerClass;
|
||||
private Object CraftServer;
|
||||
|
||||
private static Class<?> Item;
|
||||
private static Class<?> NBTTagCompound;
|
||||
private Class<?> NBTBase;
|
||||
// private Class<?> NBTTagList;
|
||||
@ -45,12 +48,30 @@ public class Reflections {
|
||||
} catch (ClassNotFoundException | SecurityException | IllegalArgumentException e) {
|
||||
e.printStackTrace();
|
||||
}*/
|
||||
Item = getMinecraftClass("Item");
|
||||
IStack = getMinecraftClass("ItemStack");
|
||||
} catch (ClassCastException | ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static String toJson(ItemStack item) {
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
Object nmsStack = asNMSCopy(item);
|
||||
|
||||
try {
|
||||
Method meth = IStack.getMethod("save", NBTTagCompound);
|
||||
Object res = meth.invoke(nmsStack, NBTTagCompound.newInstance());
|
||||
return res.toString();
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Class<?> getBukkitClass(String nmsClassString) throws ClassNotFoundException {
|
||||
return Class.forName("org.bukkit.craftbukkit." + Jobs.getVersionCheckManager().getVersion() + "." + nmsClassString);
|
||||
}
|
||||
@ -268,4 +289,29 @@ public class Reflections {
|
||||
return CraftServer;
|
||||
}
|
||||
|
||||
public static String getItemMinecraftName(ItemStack item) {
|
||||
try {
|
||||
|
||||
Object nmsStack = asNMSCopy(item);
|
||||
|
||||
if (Version.isCurrentEqualOrHigher(Version.v1_13_R1)) {
|
||||
Object pre = nmsStack.getClass().getMethod("getItem").invoke(nmsStack);
|
||||
Object n = pre.getClass().getMethod("getName").invoke(pre);
|
||||
Class<?> ll = Class.forName("net.minecraft.server." + Version.getCurrent() + ".LocaleLanguage");
|
||||
Object lla = ll.getMethod("a").invoke(ll);
|
||||
return (String) lla.getClass().getMethod("a", String.class).invoke(lla, (String) n);
|
||||
}
|
||||
|
||||
Field field = Item.getField("REGISTRY");
|
||||
Object reg = field.get(field);
|
||||
Method meth = reg.getClass().getMethod("b", Object.class);
|
||||
meth.setAccessible(true);
|
||||
Method secmeth = nmsStack.getClass().getMethod("getItem");
|
||||
Object res2 = secmeth.invoke(nmsStack);
|
||||
Object res = meth.invoke(reg, res2);
|
||||
return res.toString();
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user