1.14 supported
This commit is contained in:
parent
483bba8f0a
commit
9a364bb7bc
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
'version': 2
|
'version': 3
|
||||||
'entity_null': '实体'
|
'entity_null': '实体'
|
||||||
'entity_ArmorStand_name': '盔甲架'
|
'entity_ArmorStand_name': '盔甲架'
|
||||||
'entity_Arrow_name': '箭'
|
'entity_Arrow_name': '箭'
|
||||||
|
@ -90,7 +90,21 @@ public class NMSHandlerImpl extends NMSHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName(Entity entity) {
|
public String getName(Entity entity) {
|
||||||
if (TabooLib.getVersionNumber() < 11300) {
|
if (TabooLib.getVersionNumber() >= 11400) {
|
||||||
|
net.minecraft.server.v1_14_R1.MinecraftKey minecraftKey = net.minecraft.server.v1_14_R1.EntityTypes.getName(((org.bukkit.craftbukkit.v1_14_R1.entity.CraftEntity) entity).getHandle().getEntityType());
|
||||||
|
return "entity.minecraft." + minecraftKey.getKey();
|
||||||
|
} else if (TabooLib.getVersionNumber() == 11300) {
|
||||||
|
try {
|
||||||
|
String name = "entity.minecraft." + IRegistry.ENTITY_TYPE.getKey((net.minecraft.server.v1_13_R2.EntityTypes<?>) entityTypesField.get(((org.bukkit.craftbukkit.v1_13_R2.entity.CraftEntity) entity).getHandle())).getKey();
|
||||||
|
if (entity instanceof Villager && ((CraftVillager) entity).getCareer() != null) {
|
||||||
|
name += "." + String.valueOf(((CraftVillager) entity).getCareer()).toLowerCase();
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
} catch (Throwable t) {
|
||||||
|
t.printStackTrace();
|
||||||
|
}
|
||||||
|
return "entity.null";
|
||||||
|
} else {
|
||||||
try {
|
try {
|
||||||
if (entity instanceof Player) {
|
if (entity instanceof Player) {
|
||||||
return "entity.Player.name";
|
return "entity.Player.name";
|
||||||
@ -150,17 +164,6 @@ public class NMSHandlerImpl extends NMSHandler {
|
|||||||
t.printStackTrace();
|
t.printStackTrace();
|
||||||
}
|
}
|
||||||
return "entity.null";
|
return "entity.null";
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
String name = "entity.minecraft." + IRegistry.ENTITY_TYPE.getKey((net.minecraft.server.v1_13_R2.EntityTypes<?>) entityTypesField.get(((org.bukkit.craftbukkit.v1_13_R2.entity.CraftEntity) entity).getHandle())).getKey();
|
|
||||||
if (entity instanceof Villager && ((CraftVillager) entity).getCareer() != null) {
|
|
||||||
name += "." + String.valueOf(((CraftVillager) entity).getCareer()).toLowerCase();
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
return "entity.null";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ public class SimpleI18n {
|
|||||||
} else {
|
} else {
|
||||||
lang = ConfigUtils.load(TabooLib.instance(), localeFile);
|
lang = ConfigUtils.load(TabooLib.instance(), localeFile);
|
||||||
}
|
}
|
||||||
if (lang.getInt("version") < 2 && !released) {
|
if (lang.getInt("version") < 3 && !released) {
|
||||||
released = true;
|
released = true;
|
||||||
FileUtils.deleteAllFile(new File(Main.getInst().getDataFolder(), "simpleI18n"));
|
FileUtils.deleteAllFile(new File(Main.getInst().getDataFolder(), "simpleI18n"));
|
||||||
init();
|
init();
|
||||||
|
@ -15,10 +15,25 @@ public class CronusParser {
|
|||||||
|
|
||||||
public static Location toLocation(Object in) {
|
public static Location toLocation(Object in) {
|
||||||
String str = String.valueOf(in);
|
String str = String.valueOf(in);
|
||||||
if (str.toLowerCase().startsWith("area=")) {
|
// 区域
|
||||||
String[] area = str.substring("area=".length()).split("~");
|
// world:0,80,0~0,90,0
|
||||||
return new Location(Location.Mode.AREA, new org.bukkit.Location[] {toBukkitLocation(area[0]), toBukkitLocation(area[area.length > 1 ? 1 : 0])}, null);
|
if (str.contains(":") && str.contains("~")) {
|
||||||
} else {
|
String[] area = str.split("~");
|
||||||
|
try {
|
||||||
|
return new Location(Location.Mode.AREA, new org.bukkit.Location[] {toBukkitLocation(area[0].replace(":", ",")), toBukkitLocation(area[0].split(":")[0] + "," + area[1])}, null);
|
||||||
|
} catch (Throwable ignored) {
|
||||||
|
return new Location(Location.Mode.AREA, null, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 范围
|
||||||
|
// world:0,80,0 r:10
|
||||||
|
else if (str.contains("r:")) {
|
||||||
|
String[] range = str.split("r:");
|
||||||
|
return new Location(Location.Mode.RANGE, new org.bukkit.Location[] {toBukkitLocation(range[0].replace(":", ","))}, NumberConversions.toInt(range[1]));
|
||||||
|
}
|
||||||
|
// 单项
|
||||||
|
// world,0,80,0;world,0,90,0
|
||||||
|
else {
|
||||||
return new Location(Location.Mode.POINT, null, Arrays.stream(str.split(";")).map(CronusParser::toBukkitLocation).toArray(org.bukkit.Location[]::new));
|
return new Location(Location.Mode.POINT, null, Arrays.stream(str.split(";")).map(CronusParser::toBukkitLocation).toArray(org.bukkit.Location[]::new));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,10 @@ public class CronusUtils {
|
|||||||
return player.getItemInHand().getType() == material ? player.getItemInHand() : player.getInventory().getItemInOffHand();
|
return player.getItemInHand().getType() == material ? player.getItemInHand() : player.getInventory().getItemInOffHand();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean next(int page, int size, int entry) {
|
||||||
|
return size / (double) entry > page + 1;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isInt(String in) {
|
public static boolean isInt(String in) {
|
||||||
try {
|
try {
|
||||||
Integer.parseInt(in);
|
Integer.parseInt(in);
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package me.skymc.taboolib.cronus.bukkit;
|
package me.skymc.taboolib.cronus.bukkit;
|
||||||
|
|
||||||
import me.skymc.taboolib.inventory.ItemUtils;
|
import me.skymc.taboolib.inventory.ItemUtils;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author 坏黑
|
* @Author 坏黑
|
||||||
@ -46,6 +48,40 @@ public class ItemStack {
|
|||||||
return isType(itemStack) && isName(itemStack) && isLore(itemStack) && isDamage(itemStack) && isAmount(itemStack);
|
return isType(itemStack) && isName(itemStack) && isLore(itemStack) && isDamage(itemStack) && isAmount(itemStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasItem(Player player) {
|
||||||
|
int checkAmount = amount;
|
||||||
|
for (org.bukkit.inventory.ItemStack itemStack : player.getInventory().getContents()) {
|
||||||
|
if (itemStack != null && !itemStack.getType().equals(Material.AIR) && isItem(itemStack)) {
|
||||||
|
checkAmount -= itemStack.getAmount();
|
||||||
|
if (checkAmount <= 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean takeItem(Player player) {
|
||||||
|
int takeAmount = amount;
|
||||||
|
org.bukkit.inventory.ItemStack[] contents = player.getInventory().getContents();
|
||||||
|
for (int i = 0; i < contents.length; i++) {
|
||||||
|
org.bukkit.inventory.ItemStack itemStack = contents[i];
|
||||||
|
if (itemStack != null && !itemStack.getType().equals(Material.AIR) && isItem(itemStack)) {
|
||||||
|
takeAmount -= itemStack.getAmount();
|
||||||
|
if (takeAmount < 0) {
|
||||||
|
itemStack.setAmount(itemStack.getAmount() - (takeAmount + itemStack.getAmount()));
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
player.getInventory().setItem(i, null);
|
||||||
|
if (takeAmount == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package me.skymc.taboolib.cronus.bukkit;
|
package me.skymc.taboolib.cronus.bukkit;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -11,6 +13,7 @@ public class Location {
|
|||||||
private Mode mode;
|
private Mode mode;
|
||||||
private org.bukkit.Location[] area;
|
private org.bukkit.Location[] area;
|
||||||
private org.bukkit.Location[] points;
|
private org.bukkit.Location[] points;
|
||||||
|
private int range;
|
||||||
|
|
||||||
public Location(Mode mode, org.bukkit.Location[] area, org.bukkit.Location[] points) {
|
public Location(Mode mode, org.bukkit.Location[] area, org.bukkit.Location[] points) {
|
||||||
this.mode = mode;
|
this.mode = mode;
|
||||||
@ -18,8 +21,14 @@ public class Location {
|
|||||||
this.points = points;
|
this.points = points;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Location(Mode mode, org.bukkit.Location[] points, int range) {
|
||||||
|
this.mode = mode;
|
||||||
|
this.points = points;
|
||||||
|
this.range = range;
|
||||||
|
}
|
||||||
|
|
||||||
public org.bukkit.Location toBukkit() {
|
public org.bukkit.Location toBukkit() {
|
||||||
return points[0];
|
return points != null && points.length > 0 ? points[0] : new org.bukkit.Location(Bukkit.getWorlds().get(0), 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBukkit() {
|
public boolean isBukkit() {
|
||||||
@ -30,36 +39,65 @@ public class Location {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSelect(org.bukkit.Location locationA, org.bukkit.Location locationB) {
|
||||||
|
return locationA.getWorld().equals(locationB.getWorld()) && locationA.getX() == locationB.getX() && locationA.getY() == locationB.getY() && locationA.getZ() == locationB.getZ();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean inSelect(org.bukkit.Location location) {
|
public boolean inSelect(org.bukkit.Location location) {
|
||||||
if (!isSelectWorld(location)) {
|
if (!isSelectWorld(location)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (mode == Mode.AREA) {
|
switch (mode) {
|
||||||
return location.toVector().isInAABB(area[0].toVector(), area[1].toVector());
|
case AREA:
|
||||||
} else {
|
return area != null && location.toVector().isInAABB(area[0].toVector(), area[1].toVector());
|
||||||
return Arrays.asList(points).contains(location);
|
case POINT:
|
||||||
|
return points != null && Arrays.stream(points).anyMatch(p -> isSelect(p, location));
|
||||||
|
case RANGE:
|
||||||
|
return points != null && toBukkit().distance(location) <= range;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSelectWorld(org.bukkit.Location location) {
|
public boolean isSelectWorld(org.bukkit.Location location) {
|
||||||
if (mode == Mode.AREA) {
|
switch (mode) {
|
||||||
return location.getWorld().equals(area[0].getWorld());
|
case AREA:
|
||||||
} else {
|
return area != null && location.getWorld().equals(area[0].getWorld());
|
||||||
return Arrays.stream(points).anyMatch(p -> p.getWorld().equals(location.getWorld()));
|
default:
|
||||||
|
return points != null && Arrays.stream(points).anyMatch(p -> p.getWorld().equals(location.getWorld()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Mode {
|
|
||||||
|
|
||||||
AREA, POINT
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Location{" +
|
return "Location{" +
|
||||||
"mode=" + mode +
|
"mode=" + mode +
|
||||||
", area=" + Arrays.toString(area) +
|
", area=" + Arrays.toString(area) +
|
||||||
", points=" + Arrays.toString(points) +
|
", points=" + Arrays.toString(points) +
|
||||||
|
", range=" + range +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// *********************************
|
||||||
|
//
|
||||||
|
// Getter and Setter
|
||||||
|
//
|
||||||
|
// *********************************
|
||||||
|
|
||||||
|
public Mode getMode() {
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public org.bukkit.Location[] getArea() {
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
|
||||||
|
public org.bukkit.Location[] getPoints() {
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum Mode {
|
||||||
|
|
||||||
|
AREA, POINT, RANGE
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,103 @@
|
|||||||
|
package me.skymc.taboolib.cronus.util;
|
||||||
|
|
||||||
|
import com.ilummc.tlib.logger.TLogger;
|
||||||
|
import com.ilummc.tlib.resources.TLocale;
|
||||||
|
import me.skymc.taboolib.common.inject.TInject;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author 坏黑
|
||||||
|
* @Since 2019-06-07 23:51
|
||||||
|
*/
|
||||||
|
public class StringExpression {
|
||||||
|
|
||||||
|
@TInject
|
||||||
|
private static TLogger logger;
|
||||||
|
private static Pattern pattern = Pattern.compile("(?<symbol>>|>=|<|<=|==|=|!=|≈≈|≈|!≈)[ ]?(?<number>.+)");
|
||||||
|
private String symbol;
|
||||||
|
private StringNumber number;
|
||||||
|
|
||||||
|
public StringExpression(Object in) {
|
||||||
|
Matcher matcher = pattern.matcher(String.valueOf(in));
|
||||||
|
if (!matcher.find()) {
|
||||||
|
logger.error("StringExpression \"" + in + "\" parsing failed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
symbol = matcher.group("symbol");
|
||||||
|
number = new StringNumber(matcher.group("number"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSelect(String string) {
|
||||||
|
switch (symbol) {
|
||||||
|
case "=":
|
||||||
|
case "==":
|
||||||
|
return number.getSource().equals(string);
|
||||||
|
case "!=":
|
||||||
|
return !number.getSource().equals(string);
|
||||||
|
case "≈":
|
||||||
|
case "≈≈":
|
||||||
|
return number.getSource().equalsIgnoreCase(string);
|
||||||
|
case "!≈":
|
||||||
|
return !number.getSource().equalsIgnoreCase(string);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSelect(double number) {
|
||||||
|
if (!this.number.isNumber()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
double v = this.number.getNumber().doubleValue();
|
||||||
|
switch (symbol) {
|
||||||
|
case ">":
|
||||||
|
return number > v;
|
||||||
|
case ">=":
|
||||||
|
return number >= v;
|
||||||
|
case "<":
|
||||||
|
return number < v;
|
||||||
|
case "<=":
|
||||||
|
return number <= v;
|
||||||
|
case "=":
|
||||||
|
case "==":
|
||||||
|
return number == v;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String translate() {
|
||||||
|
switch (symbol) {
|
||||||
|
case ">":
|
||||||
|
return TLocale.asString("translate-expression-0") + " " + number.getSource();
|
||||||
|
case ">=":
|
||||||
|
return TLocale.asString("translate-expression-1") + " " + number.getSource();
|
||||||
|
case "<":
|
||||||
|
return TLocale.asString("translate-expression-2") + " " + number.getSource();
|
||||||
|
case "<=":
|
||||||
|
return TLocale.asString("translate-expression-3") + " " + number.getSource();
|
||||||
|
case "=":
|
||||||
|
case "==":
|
||||||
|
return TLocale.asString("translate-expression-4") + " " + number.getSource();
|
||||||
|
}
|
||||||
|
return symbol + " " + number.getSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "StringExpression{" +
|
||||||
|
"symbol='" + symbol + '\'' +
|
||||||
|
", number=" + number +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSymbol() {
|
||||||
|
return symbol;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StringNumber getNumber() {
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
}
|
135
src/main/scala/me/skymc/taboolib/cronus/util/StringNumber.java
Normal file
135
src/main/scala/me/skymc/taboolib/cronus/util/StringNumber.java
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
package me.skymc.taboolib.cronus.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author 坏黑
|
||||||
|
* @Since 2019-05-29 21:43
|
||||||
|
*/
|
||||||
|
public class StringNumber {
|
||||||
|
|
||||||
|
private NumberType type;
|
||||||
|
private Number number;
|
||||||
|
private String source;
|
||||||
|
|
||||||
|
public StringNumber(long number) {
|
||||||
|
this.number = number;
|
||||||
|
this.type = NumberType.INT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StringNumber(double number) {
|
||||||
|
this.number = number;
|
||||||
|
this.type = NumberType.DOUBLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StringNumber(String source) {
|
||||||
|
this.source = source;
|
||||||
|
try {
|
||||||
|
number = Long.valueOf(source);
|
||||||
|
type = NumberType.INT;
|
||||||
|
} catch (Throwable ignored) {
|
||||||
|
try {
|
||||||
|
number = Double.valueOf(source);
|
||||||
|
type = NumberType.DOUBLE;
|
||||||
|
} catch (Throwable ignored2) {
|
||||||
|
type = NumberType.STRING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public StringNumber add(String v) {
|
||||||
|
StringNumber numberFormat = new StringNumber(v);
|
||||||
|
if (isNumber() && numberFormat.isNumber()) {
|
||||||
|
if (type == NumberType.INT && numberFormat.getType() == NumberType.INT) {
|
||||||
|
number = number.longValue() + numberFormat.getNumber().longValue();
|
||||||
|
} else {
|
||||||
|
number = number.doubleValue() + numberFormat.getNumber().doubleValue();
|
||||||
|
type = NumberType.DOUBLE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
source += numberFormat.getSource();
|
||||||
|
type = NumberType.STRING;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StringNumber subtract(String v) {
|
||||||
|
StringNumber numberFormat = new StringNumber(v);
|
||||||
|
if (isNumber() && numberFormat.isNumber()) {
|
||||||
|
if (type == NumberType.INT && numberFormat.getType() == NumberType.INT) {
|
||||||
|
number = number.longValue() - numberFormat.getNumber().longValue();
|
||||||
|
} else {
|
||||||
|
number = number.doubleValue() - numberFormat.getNumber().doubleValue();
|
||||||
|
type = NumberType.DOUBLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StringNumber multiply(String v) {
|
||||||
|
StringNumber numberFormat = new StringNumber(v);
|
||||||
|
if (isNumber() && numberFormat.isNumber()) {
|
||||||
|
if (type == NumberType.INT && numberFormat.getType() == NumberType.INT) {
|
||||||
|
number = number.longValue() * numberFormat.getNumber().longValue();
|
||||||
|
} else {
|
||||||
|
number = number.doubleValue() * numberFormat.getNumber().doubleValue();
|
||||||
|
type = NumberType.DOUBLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StringNumber division(String v) {
|
||||||
|
StringNumber numberFormat = new StringNumber(v);
|
||||||
|
if (isNumber() && numberFormat.isNumber()) {
|
||||||
|
if (type == NumberType.INT && numberFormat.getType() == NumberType.INT) {
|
||||||
|
number = number.longValue() / numberFormat.getNumber().longValue();
|
||||||
|
} else {
|
||||||
|
number = number.doubleValue() / numberFormat.getNumber().doubleValue();
|
||||||
|
type = NumberType.DOUBLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object get() {
|
||||||
|
switch (type) {
|
||||||
|
case INT:
|
||||||
|
return number.longValue();
|
||||||
|
case DOUBLE:
|
||||||
|
return number.doubleValue();
|
||||||
|
default:
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNumber() {
|
||||||
|
return type == NumberType.INT || type == NumberType.DOUBLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Number getNumber() {
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NumberType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSource() {
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum NumberType {
|
||||||
|
|
||||||
|
DOUBLE, INT, STRING
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "StringNumber{" +
|
||||||
|
"type=" + type +
|
||||||
|
", number=" + number +
|
||||||
|
", source='" + source + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
@ -5,12 +5,13 @@ import me.clip.placeholderapi.PlaceholderAPI;
|
|||||||
import me.skymc.taboolib.Main;
|
import me.skymc.taboolib.Main;
|
||||||
import me.skymc.taboolib.TabooLib;
|
import me.skymc.taboolib.TabooLib;
|
||||||
import me.skymc.taboolib.common.function.TFunction;
|
import me.skymc.taboolib.common.function.TFunction;
|
||||||
|
import me.skymc.taboolib.common.nms.NMSHandler;
|
||||||
|
import me.skymc.taboolib.common.nms.nbt.NBTBase;
|
||||||
|
import me.skymc.taboolib.common.nms.nbt.NBTCompound;
|
||||||
|
import me.skymc.taboolib.common.nms.nbt.NBTList;
|
||||||
import me.skymc.taboolib.common.util.SimpleI18n;
|
import me.skymc.taboolib.common.util.SimpleI18n;
|
||||||
import me.skymc.taboolib.fileutils.ConfigUtils;
|
import me.skymc.taboolib.fileutils.ConfigUtils;
|
||||||
import me.skymc.taboolib.itemnbtapi.NBTItem;
|
import me.skymc.taboolib.itemnbtapi.NBTItem;
|
||||||
import me.skymc.taboolib.itemnbtapi.NBTList;
|
|
||||||
import me.skymc.taboolib.itemnbtapi.NBTListCompound;
|
|
||||||
import me.skymc.taboolib.itemnbtapi.NBTType;
|
|
||||||
import me.skymc.taboolib.other.NumberUtils;
|
import me.skymc.taboolib.other.NumberUtils;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -27,6 +28,7 @@ import org.bukkit.inventory.meta.LeatherArmorMeta;
|
|||||||
import org.bukkit.inventory.meta.PotionMeta;
|
import org.bukkit.inventory.meta.PotionMeta;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
import org.bukkit.util.NumberConversions;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -361,47 +363,46 @@ public class ItemUtils {
|
|||||||
// 元数据
|
// 元数据
|
||||||
item.setItemMeta(meta);
|
item.setItemMeta(meta);
|
||||||
// 数据
|
// 数据
|
||||||
NBTItem nbt = new NBTItem(item);
|
NBTCompound nbt = NMSHandler.getHandler().loadNBT(item);
|
||||||
// 物品标签
|
// 物品标签
|
||||||
if (section.contains("nbt")) {
|
if (section.contains("nbt")) {
|
||||||
for (String name : section.getConfigurationSection("nbt").getKeys(false)) {
|
for (String name : section.getConfigurationSection("nbt").getKeys(false)) {
|
||||||
Object obj = section.get("nbt." + name);
|
Object obj = section.get("nbt." + name);
|
||||||
if (obj instanceof String) {
|
if (obj instanceof String) {
|
||||||
nbt.setString(name, obj.toString());
|
nbt.put(name, new NBTBase(obj.toString()));
|
||||||
} else if (obj instanceof Double) {
|
} else if (obj instanceof Double) {
|
||||||
nbt.setDouble(name, Double.valueOf(obj.toString()));
|
nbt.put(name, new NBTBase(NumberConversions.toDouble(obj)));
|
||||||
} else if (obj instanceof Integer) {
|
} else if (obj instanceof Integer) {
|
||||||
nbt.setInteger(name, Integer.valueOf(obj.toString()));
|
nbt.put(name, new NBTBase(NumberConversions.toInt(obj)));
|
||||||
} else if (obj instanceof Long) {
|
} else if (obj instanceof Long) {
|
||||||
nbt.setLong(name, Long.valueOf(obj.toString()));
|
nbt.put(name, new NBTBase(NumberConversions.toLong(obj)));
|
||||||
} else {
|
|
||||||
nbt.setObject(name, obj);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 物品属性
|
// 物品属性
|
||||||
if (section.contains("attributes")) {
|
if (section.contains("attributes")) {
|
||||||
NBTList attr = nbt.getList("AttributeModifiers", NBTType.NBTTagCompound);
|
NBTList attr = new NBTList();
|
||||||
for (String hand : section.getConfigurationSection("attributes").getKeys(false)) {
|
for (String hand : section.getConfigurationSection("attributes").getKeys(false)) {
|
||||||
for (String name : section.getConfigurationSection("attributes." + hand).getKeys(false)) {
|
for (String name : section.getConfigurationSection("attributes." + hand).getKeys(false)) {
|
||||||
if (asAttribute(name) != null) {
|
if (asAttribute(name) != null) {
|
||||||
try {
|
try {
|
||||||
NBTListCompound _attr = attr.addCompound();
|
NBTCompound a = new NBTCompound();
|
||||||
Object num = section.get("attributes." + hand + "." + name);
|
String num = section.getString("attributes." + hand + "." + name);
|
||||||
if (num.toString().contains("%")) {
|
if (num.endsWith("%")) {
|
||||||
_attr.setDouble("Amount", Double.valueOf(num.toString().replace("%", "")) / 100D);
|
a.put("Amount", new NBTBase(NumberConversions.toDouble(num.substring(0, num.length() - 1)) / 100D));
|
||||||
_attr.setInteger("Operation", 1);
|
a.put("Operation", new NBTBase(1));
|
||||||
} else {
|
} else {
|
||||||
_attr.setDouble("Amount", Double.valueOf(num.toString()));
|
a.put("Amount", new NBTBase(NumberConversions.toDouble(num) / 100D));
|
||||||
_attr.setInteger("Operation", 0);
|
a.put("Operation", new NBTBase(0));
|
||||||
}
|
}
|
||||||
_attr.setString("AttributeName", asAttribute(name));
|
a.put("AttributeName", new NBTBase(asAttribute(name)));
|
||||||
_attr.setInteger("UUIDMost", NumberUtils.getRandom().nextInt(Integer.MAX_VALUE));
|
a.put("UUIDMost", new NBTBase(NumberUtils.getRandom().nextInt(Integer.MAX_VALUE)));
|
||||||
_attr.setInteger("UUIDLeast", NumberUtils.getRandom().nextInt(Integer.MAX_VALUE));
|
a.put("UUIDLeast", new NBTBase(NumberUtils.getRandom().nextInt(Integer.MAX_VALUE)));
|
||||||
_attr.setString("Name", asAttribute(name));
|
a.put("Name", new NBTBase(asAttribute(name)));
|
||||||
if (!"all".equals(hand)) {
|
if (!hand.equals("all")) {
|
||||||
_attr.setString("Slot", hand);
|
a.put("Slot", new NBTBase(hand));
|
||||||
}
|
}
|
||||||
|
attr.add(a);
|
||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -409,44 +410,9 @@ public class ItemUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
nbt.put("AttributeModifiers", attr);
|
||||||
}
|
}
|
||||||
return nbt.getItem();
|
return NMSHandler.getHandler().saveNBT(item, nbt);
|
||||||
}
|
|
||||||
|
|
||||||
public static NBTItem setAttribute(NBTItem nbt, String name, Object num, String hand) {
|
|
||||||
NBTList attr = nbt.getList("AttributeModifiers", NBTType.NBTTagCompound);
|
|
||||||
if (asAttribute(name) != null) {
|
|
||||||
try {
|
|
||||||
NBTListCompound _attr = null;
|
|
||||||
for (int i = 0; i < attr.size(); i++) {
|
|
||||||
NBTListCompound nlc = attr.getCompound(i);
|
|
||||||
if (nlc.getString("AttributeName").equals(asAttribute(name))) {
|
|
||||||
_attr = nlc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (_attr == null) {
|
|
||||||
_attr = attr.addCompound();
|
|
||||||
}
|
|
||||||
if (num.toString().contains("%")) {
|
|
||||||
_attr.setDouble("Amount", Double.valueOf(num.toString().replace("%", "")) / 100D);
|
|
||||||
_attr.setInteger("Operation", 1);
|
|
||||||
} else {
|
|
||||||
_attr.setDouble("Amount", Double.valueOf(num.toString()));
|
|
||||||
_attr.setInteger("Operation", 0);
|
|
||||||
}
|
|
||||||
_attr.setString("AttributeName", asAttribute(name));
|
|
||||||
_attr.setInteger("UUIDMost", NumberUtils.getRandom().nextInt(Integer.MAX_VALUE));
|
|
||||||
_attr.setInteger("UUIDLeast", NumberUtils.getRandom().nextInt(Integer.MAX_VALUE));
|
|
||||||
_attr.setString("Name", asAttribute(name));
|
|
||||||
if (!"all".equals(hand)) {
|
|
||||||
_attr.setString("Slot", hand);
|
|
||||||
}
|
|
||||||
} catch (NumberFormatException ignored) {
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
TLocale.Logger.error("ITEM-UTILS.FAIL-LOAD-POTION", name);
|
|
||||||
}
|
|
||||||
return nbt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// *********************************
|
// *********************************
|
||||||
@ -485,6 +451,11 @@ public class ItemUtils {
|
|||||||
//
|
//
|
||||||
// *********************************
|
// *********************************
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public static NBTItem setAttribute(NBTItem nbt, String name, Object num, String hand) {
|
||||||
|
return nbt;
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public static FileConfiguration getItemdir() {
|
public static FileConfiguration getItemdir() {
|
||||||
return itemDir;
|
return itemDir;
|
||||||
|
@ -9,7 +9,7 @@ import org.bukkit.event.player.PlayerSwapHandItemsEvent;
|
|||||||
* @Author 坏黑
|
* @Author 坏黑
|
||||||
* @Since 2019-05-21 22:04
|
* @Since 2019-05-21 22:04
|
||||||
*/
|
*/
|
||||||
@TListener
|
@TListener(version = ">=10900")
|
||||||
class ClickListener1_9 implements Listener {
|
class ClickListener1_9 implements Listener {
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -14,31 +14,28 @@ import java.lang.annotation.Target;
|
|||||||
public @interface TListener {
|
public @interface TListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注册时执行方法
|
* 注册时执行的方法名
|
||||||
*
|
|
||||||
* @return 方法名
|
|
||||||
*/
|
*/
|
||||||
String register() default "";
|
String register() default "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注销时执行方法
|
* 注销时执行的方法名
|
||||||
*
|
|
||||||
* @return 方法名
|
|
||||||
*/
|
*/
|
||||||
String cancel() default "";
|
String cancel() default "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注册时判断条件
|
* 注册时判断的方法名,需返回布尔值
|
||||||
*
|
|
||||||
* @return 方法名
|
|
||||||
*/
|
*/
|
||||||
String condition() default "";
|
String condition() default "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注册前判断依赖插件
|
* 注册前判断依赖插件
|
||||||
*
|
|
||||||
* @return 依赖插件
|
|
||||||
*/
|
*/
|
||||||
String[] depend() default "";
|
String[] depend() default "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册前判断依赖版本
|
||||||
|
*/
|
||||||
|
String version() default ">0";
|
||||||
|
|
||||||
}
|
}
|
@ -4,6 +4,7 @@ import com.ilummc.tlib.logger.TLogger;
|
|||||||
import com.ilummc.tlib.util.Strings;
|
import com.ilummc.tlib.util.Strings;
|
||||||
import me.skymc.taboolib.TabooLib;
|
import me.skymc.taboolib.TabooLib;
|
||||||
import me.skymc.taboolib.TabooLibLoader;
|
import me.skymc.taboolib.TabooLibLoader;
|
||||||
|
import me.skymc.taboolib.cronus.util.StringExpression;
|
||||||
import me.skymc.taboolib.events.TPluginEnableEvent;
|
import me.skymc.taboolib.events.TPluginEnableEvent;
|
||||||
import me.skymc.taboolib.methods.ReflectionUtils;
|
import me.skymc.taboolib.methods.ReflectionUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -50,6 +51,10 @@ public class TListenerHandler implements Listener {
|
|||||||
if (Listener.class.isAssignableFrom(pluginClass) && pluginClass.isAnnotationPresent(TListener.class)) {
|
if (Listener.class.isAssignableFrom(pluginClass) && pluginClass.isAnnotationPresent(TListener.class)) {
|
||||||
try {
|
try {
|
||||||
TListener tListener = pluginClass.getAnnotation(TListener.class);
|
TListener tListener = pluginClass.getAnnotation(TListener.class);
|
||||||
|
// 检查版本
|
||||||
|
if (!new StringExpression(tListener.version()).isSelect(TabooLib.getVersionNumber())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// 检查注册条件
|
// 检查注册条件
|
||||||
if (tListener.depend().length > 0 && !Strings.isBlank(tListener.depend()[0])) {
|
if (tListener.depend().length > 0 && !Strings.isBlank(tListener.depend()[0])) {
|
||||||
if (Arrays.stream(tListener.depend()).anyMatch(depend -> Bukkit.getPluginManager().getPlugin(depend) == null)) {
|
if (Arrays.stream(tListener.depend()).anyMatch(depend -> Bukkit.getPluginManager().getPlugin(depend) == null)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user