SPIGOT-1916: Attribute modifiers for ItemStacks

By: Senmori <thesenmori@gmail.com>
This commit is contained in:
CraftBukkit/Spigot
2018-09-21 20:47:37 +10:00
parent 1f501261b1
commit 5df4c4d300
3 changed files with 317 additions and 55 deletions

View File

@@ -65,11 +65,11 @@ public class CraftAttributeInstance implements AttributeInstance {
return handle.getAttribute().getDefault();
}
private static net.minecraft.server.AttributeModifier convert(AttributeModifier bukkit) {
public static net.minecraft.server.AttributeModifier convert(AttributeModifier bukkit) {
return new net.minecraft.server.AttributeModifier(bukkit.getUniqueId(), bukkit.getName(), bukkit.getAmount(), bukkit.getOperation().ordinal());
}
private static AttributeModifier convert(net.minecraft.server.AttributeModifier nms) {
public static AttributeModifier convert(net.minecraft.server.AttributeModifier nms) {
return new AttributeModifier(nms.a(), nms.b(), nms.d(), AttributeModifier.Operation.values()[nms.c()]);
}
}

View File

@@ -1,7 +1,10 @@
package org.bukkit.craftbukkit.attribute;
import com.google.common.base.CaseFormat;
import com.google.common.base.Preconditions;
import java.util.Locale;
import net.minecraft.server.AttributeMapBase;
import org.apache.commons.lang3.EnumUtils;
import org.bukkit.attribute.Attributable;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance;
@@ -22,7 +25,7 @@ public class CraftAttributeMap implements Attributable {
return (nms == null) ? null : new CraftAttributeInstance(nms, attribute);
}
static String toMinecraft(String bukkit) {
public static String toMinecraft(String bukkit) {
int first = bukkit.indexOf('_');
int second = bukkit.indexOf('_', first + 1);
@@ -36,4 +39,17 @@ public class CraftAttributeMap implements Attributable {
return sb.toString();
}
public static String toMinecraft(Attribute attribute) {
return toMinecraft(attribute.name());
}
public static Attribute fromMinecraft(String nms) {
String[] split = nms.split("\\.", 2);
String generic = split[0];
String descriptor = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, split[1]); // movementSpeed -> MOVEMENT_SPEED
String fin = generic + "_" + descriptor;
return EnumUtils.getEnum(Attribute.class, fin.toUpperCase(Locale.ROOT)); // so we can return null without throwing exceptions
}
}