/
ItemHelperImpl.java
107 lines (95 loc) · 4.99 KB
/
ItemHelperImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package com.denizenscript.denizen.nms.v1_13.helpers;
import com.denizenscript.denizen.nms.interfaces.ItemHelper;
import com.denizenscript.denizen.nms.util.PlayerProfile;
import com.denizenscript.denizen.nms.util.jnbt.*;
import com.denizenscript.denizen.nms.v1_13.impl.jnbt.CompoundTagImpl;
import com.google.common.collect.Iterables;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import net.minecraft.server.v1_13_R2.GameProfileSerializer;
import net.minecraft.server.v1_13_R2.NBTTagCompound;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import java.util.HashMap;
public class ItemHelperImpl extends ItemHelper {
@Override
public String getInternalNameFromMaterial(Material material) {
// In 1.13+ Material names match their internal name
return "minecraft:" + CoreUtilities.toLowerCase(material.name());
}
@Override
public Material getMaterialFromInternalName(String internalName) {
return Material.matchMaterial(internalName);
}
@Override
public String getJsonString(ItemStack itemStack) {
String json = CraftItemStack.asNMSCopy(itemStack).A().getChatModifier().toString().replace("\\", "\\\\").replace("\"", "\\\"");
return json.substring(176, json.length() - 185);
}
@Override
public PlayerProfile getSkullSkin(ItemStack is) {
net.minecraft.server.v1_13_R2.ItemStack itemStack = CraftItemStack.asNMSCopy(is);
if (itemStack.hasTag()) {
NBTTagCompound tag = itemStack.getTag();
if (tag.hasKeyOfType("SkullOwner", 10)) {
GameProfile profile = GameProfileSerializer.deserialize(tag.getCompound("SkullOwner"));
if (profile != null) {
Property property = Iterables.getFirst(profile.getProperties().get("textures"), null);
return new PlayerProfile(profile.getName(), profile.getId(),
property != null ? property.getValue() : null,
property != null ? property.getSignature() : null);
}
}
}
return null;
}
@Override
public ItemStack setSkullSkin(ItemStack itemStack, PlayerProfile playerProfile) {
GameProfile gameProfile = new GameProfile(playerProfile.getUniqueId(), playerProfile.getName());
if (playerProfile.hasTexture()) {
gameProfile.getProperties().get("textures").clear();
if (playerProfile.getTextureSignature() != null) {
gameProfile.getProperties().put("textures", new Property("textures", playerProfile.getTexture(), playerProfile.getTextureSignature()));
}
else {
gameProfile.getProperties().put("textures", new Property("textures", playerProfile.getTexture()));
}
}
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(itemStack);
NBTTagCompound tag = nmsItemStack.hasTag() ? nmsItemStack.getTag() : new NBTTagCompound();
tag.set("SkullOwner", GameProfileSerializer.serialize(new NBTTagCompound(), gameProfile));
nmsItemStack.setTag(tag);
return CraftItemStack.asBukkitCopy(nmsItemStack);
}
@Override
public ItemStack addNbtData(ItemStack itemStack, String key, Tag value) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(itemStack);
NBTTagCompound tag = nmsItemStack.hasTag() ? nmsItemStack.getTag() : new NBTTagCompound();
CompoundTag compound = CompoundTagImpl.fromNMSTag(tag).createBuilder().put(key, value).build();
nmsItemStack.setTag(((CompoundTagImpl) compound).toNMSTag());
return CraftItemStack.asBukkitCopy(nmsItemStack);
}
@Override
public CompoundTag getNbtData(ItemStack itemStack) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(itemStack);
if (nmsItemStack != null && nmsItemStack.hasTag()) {
return CompoundTagImpl.fromNMSTag(nmsItemStack.getTag());
}
return new CompoundTagImpl(new HashMap<>());
}
@Override
public ItemStack setNbtData(ItemStack itemStack, CompoundTag compoundTag) {
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(itemStack);
nmsItemStack.setTag(((CompoundTagImpl) compoundTag).toNMSTag());
return CraftItemStack.asBukkitCopy(nmsItemStack);
}
@Override
public PotionEffect getPotionEffect(PotionEffectType type, int duration, int amplifier, boolean ambient, boolean particles, Color color, boolean icon) {
return new PotionEffect(type, duration, amplifier, ambient, particles, icon);
}
}