1
0
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:
montlikadani 2020-06-27 13:21:25 +02:00
parent 66a51df12b
commit 1c8316a4c1
7 changed files with 921 additions and 355 deletions

View File

@ -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;
}
}

View File

@ -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() {

View File

@ -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")) {

View File

@ -0,0 +1,7 @@
package com.gamingmesh.jobs.CMILib;
public enum CMIMaterialCriteria {
seeThrow, stars, slab, door, carpet, wool, monsteregg;
}

View File

@ -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;
}
}

View File

@ -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
}
}

View File

@ -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;
}
}
}