mirror of
https://github.com/IHasName/CustomHeads.git
synced 2025-02-17 19:21:28 +01:00
NBT Updates
Added DataComponents Handler NBTGenericWrapper now just uses asNumber when converting to any other Number Added Data Getters to Wrapper Classes Accidentally let IntelliJ Auto Format the whole Project and forgot about it so... Cleanup?
This commit is contained in:
parent
cf109ba528
commit
d1ca464b76
@ -194,7 +194,7 @@ public class Category extends BaseCategory {
|
||||
subCategoryIcons = editedSubCategoryIcons;
|
||||
}
|
||||
category.setCategoryIcon(subCategoryIcons.isEmpty() || (categoryJson.has("fixed-icon") && categoryJson.get("fixed-icon").getAsBoolean()) ? CustomHeads.getTagEditor().setTags(JsonToItem.convertFromJson(categoryJson.get("icon").toString()), "openCategory", "category#>" + categoryJson.get("id").getAsString(), "icon-fixed") : subCategoryIcons.get(0));
|
||||
category.setIcons(subCategoryIcons.isEmpty() || (categoryJson.has("fixed-icon") && category.setFixedIcon(categoryJson.get("fixed-icon").getAsBoolean())) ? Arrays.asList(CustomHeads.getTagEditor().setTags(JsonToItem.convertFromJson(categoryJson.get("icon").toString()), "openCategory", "category#>" + categoryJson.get("id").getAsString(), "icon-fixed")) : subCategoryIcons);
|
||||
category.setIcons(subCategoryIcons.isEmpty() || (categoryJson.has("fixed-icon") && category.setFixedIcon(categoryJson.get("fixed-icon").getAsBoolean())) ? Collections.singletonList(CustomHeads.getTagEditor().setTags(JsonToItem.convertFromJson(categoryJson.get("icon").toString()), "openCategory", "category#>" + categoryJson.get("id").getAsString(), "icon-fixed")) : subCategoryIcons);
|
||||
} else {
|
||||
for (JsonElement rawHeadObject : categoryJson.get("heads").getAsJsonArray()) {
|
||||
JsonObject headObject = rawHeadObject.getAsJsonObject();
|
||||
|
@ -229,7 +229,7 @@ public class CustomHeadsCommand implements CommandExecutor {
|
||||
for (String hoverInfoCategory : CustomHeads.getLanguageManager().CATEGORIES_BASECOMMAND_HOVERINFO_CATEGORY) {
|
||||
hoverInfoCategoryBuilder.append(hoverInfoCategory).append("\n");
|
||||
}
|
||||
hoverInfoCategoryBuilder = new StringBuilder(hoverInfoCategoryBuilder.toString().replace("{ID}", "" + cCategory.getId()).replace("{CATEGORY}", cCategory.getName()).replace("{PERMISSION}", cCategory.getPermission()).replace("{USED}", cCategory.isUsed() ? CustomHeads.getLanguageManager().YES : CustomHeads.getLanguageManager().NO));
|
||||
hoverInfoCategoryBuilder = new StringBuilder(hoverInfoCategoryBuilder.toString().replace("{ID}", cCategory.getId()).replace("{CATEGORY}", cCategory.getName()).replace("{PERMISSION}", cCategory.getPermission()).replace("{USED}", cCategory.isUsed() ? CustomHeads.getLanguageManager().YES : CustomHeads.getLanguageManager().NO));
|
||||
hoverInfoCategoryBuilder = new StringBuilder(hoverInfoCategoryBuilder.substring(0, hoverInfoCategoryBuilder.length() - 1));
|
||||
hoverInfoCategoryBuilder.append("\"}");
|
||||
|
||||
@ -242,7 +242,7 @@ public class CustomHeadsCommand implements CommandExecutor {
|
||||
for (String hoverInfoSubCategory : CustomHeads.getLanguageManager().CATEGORIES_BASECOMMAND_HOVERINFO_SUBCATEGORY) {
|
||||
hoverInfoSubCategoryBuilder.append(hoverInfoSubCategory).append("\n");
|
||||
}
|
||||
hoverInfoSubCategoryBuilder = new StringBuilder(hoverInfoSubCategoryBuilder.toString().replace("{ID}", "" + cCategory.getId()).replace("{CATEGORY}", cCategory.getName()).replace("{USED}", cSubCategory.isUsed() ? CustomHeads.getLanguageManager().YES : CustomHeads.getLanguageManager().NO));
|
||||
hoverInfoSubCategoryBuilder = new StringBuilder(hoverInfoSubCategoryBuilder.toString().replace("{ID}", cCategory.getId()).replace("{CATEGORY}", cCategory.getName()).replace("{USED}", cSubCategory.isUsed() ? CustomHeads.getLanguageManager().YES : CustomHeads.getLanguageManager().NO));
|
||||
hoverInfoSubCategoryBuilder = new StringBuilder(hoverInfoSubCategoryBuilder.substring(0, hoverInfoSubCategoryBuilder.length() - 1));
|
||||
hoverInfoSubCategoryBuilder.append("\"}");
|
||||
|
||||
|
@ -144,7 +144,6 @@ public void setSkull(Block block, String texture, BlockFace blockFace) {
|
||||
Object blockDataState = craftBlockDataClass.getMethod("getState").invoke(blockDataInstance);
|
||||
Object positionInstance = blockPositionConstructor.newInstance(location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
||||
MethodWrappers.WORLD_SET_TYPE_AND_DATA.invokeOn(nmsWorld, positionInstance, blockDataState, 3);
|
||||
//nmsWorld.getClass().getMethod("setTypeAndData", blockPositionClass, ReflectionUtils.getMCServerClassByName("IBlockData", "world.level.block.state"), int.class).invoke(nmsWorld, positionInstance, blockDataState, 3);
|
||||
|
||||
// Actually Update the Skull now
|
||||
switch(Version.getCurrentVersion()) {
|
||||
@ -160,6 +159,8 @@ public void setSkull(Block block, String texture, BlockFace blockFace) {
|
||||
nmsWorld.getClass().getMethod("setTileEntity", blockPositionClass, ReflectionUtils.getMCServerClassByName("TileEntity", "world.level.block.entity")).invoke(nmsWorld, positionInstance, skullInstance);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
LoggingUtils.logOnce(Level.WARNING, "Setting a Textured Skull may be broken for this Version (" + Version.getCurrentVersion() + ")");
|
||||
case V1_17_R1:
|
||||
case V1_18_R1:
|
||||
case V1_18_R2:
|
||||
@ -169,7 +170,6 @@ public void setSkull(Block block, String texture, BlockFace blockFace) {
|
||||
case V1_20_R1: {
|
||||
Object skullInstance = tileEntitySkullClass.getConstructor(blockPositionClass, ReflectionUtils.getMCServerClassByName("IBlockData", "world.level.block.state")).newInstance(positionInstance, blockDataState);
|
||||
MethodWrappers.WORLD_SET_TILE_ENTITY.invokeOn(nmsWorld, skullInstance);
|
||||
//nmsWorld.getClass().getMethod("setTileEntity", ReflectionUtils.getMCServerClassByName("TileEntity", "world.level.block.entity")).invoke(nmsWorld, skullInstance);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -189,7 +189,6 @@ public void setSkull(Block block, String texture, BlockFace blockFace) {
|
||||
Object nmsWorld = ReflectionUtils.getWorldHandle(block.getWorld());
|
||||
Object craftSkull = tileEntitySkullClass.cast(MethodWrappers.WORLD_GET_TILE_ENTITY.invokeOn(nmsWorld, blockPositionConstructor.newInstance(block.getX(), block.getY(), block.getZ())));
|
||||
MethodWrappers.TILE_ENTITY_SET_GAME_PROFILE.invokeOn(craftSkull, GameProfileBuilder.createProfileWithTexture(texture));
|
||||
//tileEntitySkullClass.getMethod("setGameProfile", GameProfile.class).invoke(craftSkull, GameProfileBuilder.createProfileWithTexture(texture));
|
||||
} catch (Exception e) {
|
||||
CustomHeads.getPluginLogger().log(Level.WARNING, "Failed to set Skull Texture", e);
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ import java.util.Random;
|
||||
public class CategoryEditor {
|
||||
|
||||
private final Category category;
|
||||
private Player player;
|
||||
private final Player player;
|
||||
|
||||
public CategoryEditor(Category category, Player editor) {
|
||||
this.category = category;
|
||||
|
@ -11,7 +11,6 @@ import de.likewhat.customheads.utils.reflection.nbt.NBTTagUtils;
|
||||
import de.likewhat.customheads.utils.reflection.nbt.NBTType;
|
||||
import de.likewhat.customheads.utils.reflection.nbt.errors.NBTException;
|
||||
import de.likewhat.customheads.utils.reflection.nbt.errors.NBTVerifyException;
|
||||
import org.apache.commons.lang3.NotImplementedException;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
@ -158,7 +157,8 @@ public class ItemEditor {
|
||||
if (!ReflectionUtils.setField(meta, "profile", profile)) {
|
||||
throw new IllegalStateException("Unable to inject GameProfile");
|
||||
}
|
||||
if (Version.getCurrentVersion().isNewerThan(Version.V1_17_R1)) {
|
||||
// Game Profiles only get pre-serialized between 1.17 and 1.20.4 apparently
|
||||
if (Version.getCurrentVersion().isNewerThan(Version.V1_17_R1) && Version.getCurrentVersion().isOlderThan(Version.V1_20_R3)) {
|
||||
Object serializedProfile = MethodWrappers.GAMEPROFILE_SERIALIZE.invokeOn(null, NBTType.COMPOUND.createInstance(), profile);
|
||||
ReflectionUtils.setField(meta, "serializedProfile", serializedProfile);
|
||||
}
|
||||
@ -205,9 +205,8 @@ public class ItemEditor {
|
||||
return this;
|
||||
}
|
||||
|
||||
// TODO Add a Deserializer to NBT Data
|
||||
public JsonObject getNBT() throws NBTException {
|
||||
throw new NotImplementedException("getNBT is not yet implemented");
|
||||
return NBTTagUtils.nbtToJsonObject(ItemNBTUtils.getTagFromItem(this.getItem()).getNBTObject(), true).getAsJsonObject();
|
||||
}
|
||||
|
||||
public ItemStack getItem() {
|
||||
|
@ -16,7 +16,6 @@ import de.likewhat.customheads.utils.reflection.helpers.Version;
|
||||
import de.likewhat.customheads.utils.reflection.helpers.wrappers.instances.ClassWrappers;
|
||||
import de.likewhat.customheads.utils.reflection.helpers.wrappers.instances.ConstructorWrappers;
|
||||
import de.likewhat.customheads.utils.reflection.helpers.wrappers.instances.MethodWrappers;
|
||||
import de.likewhat.customheads.utils.reflection.nbt.ItemNBTUtils;
|
||||
import de.likewhat.customheads.utils.updaters.FetchResult;
|
||||
import de.likewhat.customheads.utils.updaters.GitHubDownloader;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -69,8 +68,6 @@ public class Utils {
|
||||
|
||||
public static final String TEXT_JSON_FORMAT = "{\"text\":\"%s\"}";
|
||||
|
||||
private static final HashMap<String, List<String>> PERMISSION_CACHE = new HashMap<>();
|
||||
|
||||
public static String getTextureFromProfile(GameProfile profile) {
|
||||
String value = "";
|
||||
for (Property prop : profile.getProperties().get("textures")) {
|
||||
@ -422,18 +419,10 @@ public class Utils {
|
||||
}
|
||||
|
||||
public static boolean hasCustomTexture(ItemStack itemStack) {
|
||||
if (itemStack == null) return false;
|
||||
try {
|
||||
Object nmscopy = ItemNBTUtils.asNMSCopy(itemStack);
|
||||
Object tag = nmscopy.getClass().getMethod("getTag").invoke(nmscopy);
|
||||
Object so = tag.getClass().getMethod("getCompound", String.class).invoke(tag, "SkullOwner");
|
||||
Object prop = so.getClass().getMethod("getCompound", String.class).invoke(so, "Properties");
|
||||
Object tex = prop.getClass().getMethod("getList", String.class, int.class).invoke(prop, "textures", 10);
|
||||
Object list = tex.getClass().getMethod("get", int.class).invoke(tex, 0);
|
||||
return list.getClass().getMethod("getString", String.class).invoke(list, "Value").toString() != null;
|
||||
} catch (Exception ignored) {
|
||||
if (itemStack == null) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
return CustomHeads.getApi().getSkullTexture(itemStack) != null;
|
||||
}
|
||||
|
||||
public static void runSynced(BukkitRunnable runnable) {
|
||||
|
@ -166,10 +166,8 @@ public class AnvilGUI {
|
||||
case V1_19_R2:
|
||||
case V1_19_R3:
|
||||
case V1_20_R1: {
|
||||
Class<?> containersClass = ReflectionUtils.getMCServerClassByName("Containers", "world.inventory");
|
||||
Class<?> containerAccessClass = ReflectionUtils.getMCServerClassByName("ContainerAccess", "world.inventory");
|
||||
containerAnvil = ClassWrappers.CONTAINER_ANVIL.resolve().getConstructor(int.class, playerInventoryClass, containerAccessClass).newInstance(nextContainerId, ReflectionUtils.getFieldValue(playerInventoryField, playerHandle), MethodWrappers.CONTAINER_ACCESS_AT.invokeOn(containerAccessClass, playerWorld, ReflectionUtils.getMCServerClassByName("BlockPosition", "core").getConstructor(int.class, int.class, int.class).newInstance(location.getBlockX(), location.getBlockY(), location.getBlockZ())));
|
||||
packet = ClassWrappers.PACKET_PLAY_OUT_OPEN_WINDOW.resolve().getConstructor(int.class, containersClass, ReflectionUtils.getMCServerClassByName("IChatBaseComponent", "network.chat")).newInstance(nextContainerId, FieldWrappers.CONTAINERS_ANVIL.getInstance(containersClass), titleObject);
|
||||
containerAnvil = ClassWrappers.CONTAINER_ANVIL.resolve().getConstructor(int.class, playerInventoryClass, ClassWrappers.CONTAINER_ACCESS.resolve()).newInstance(nextContainerId, ReflectionUtils.getFieldValue(playerInventoryField, playerHandle), MethodWrappers.CONTAINER_ACCESS_AT.invokeOn(ClassWrappers.CONTAINER_ACCESS.resolve(), playerWorld, ReflectionUtils.getMCServerClassByName("BlockPosition", "core").getConstructor(int.class, int.class, int.class).newInstance(location.getBlockX(), location.getBlockY(), location.getBlockZ())));
|
||||
packet = ClassWrappers.PACKET_PLAY_OUT_OPEN_WINDOW.resolve().getConstructor(int.class, ClassWrappers.CONTAINERS.resolve(), ReflectionUtils.getMCServerClassByName("IChatBaseComponent", "network.chat")).newInstance(nextContainerId, FieldWrappers.CONTAINERS_ANVIL.getInstance(ClassWrappers.CONTAINERS.resolve()), titleObject);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,84 @@
|
||||
package de.likewhat.customheads.utils.reflection.helpers;
|
||||
|
||||
import de.likewhat.customheads.utils.reflection.helpers.wrappers.FieldWrapper;
|
||||
import de.likewhat.customheads.utils.reflection.helpers.wrappers.instances.ClassWrappers;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
/**
|
||||
* @since MC-1.20.5
|
||||
*/
|
||||
public enum DataComponentTypes {
|
||||
|
||||
CUSTOM_DATA("CUSTOM_DATA"),
|
||||
MAX_STACK_SIZE("MAX_STACK_SIZE"),
|
||||
MAX_DAMAGE("MAX_DAMAGE"),
|
||||
DAMAGE("DAMAGE"),
|
||||
UNBREAKABLE("UNBREAKABLE"),
|
||||
CUSTOM_NAME("CUSTOM_NAME"),
|
||||
ITEM_NAME("ITEM_NAME"),
|
||||
LORE("LORE"),
|
||||
RARITY("RARITY"),
|
||||
ENCHANTMENTS("ENCHANTMENTS"),
|
||||
CAN_PLACE_ON("CAN_PLACE_ON"),
|
||||
CAN_BREAK("CAN_BREAK"),
|
||||
ATTRIBUTE_MODIFIERS("ATTRIBUTE_MODIFIERS"),
|
||||
CUSTOM_MODEL_DATA("CUSTOM_MODEL_DATA"),
|
||||
HIDE_ADDITIONAL_TOOLTIP("HIDE_ADDITIONAL_TOOLTIP"),
|
||||
HIDE_TOOLTIP("HIDE_TOOLTIP"),
|
||||
REPAIR_COST("REPAIR_COST"),
|
||||
CREATIVE_SLOT_LOCK("CREATIVE_SLOT_LOCK"),
|
||||
ENCHANTMENT_GLINT_OVERRIDE("ENCHANTMENT_GLINT_OVERRIDE"),
|
||||
INTANGIBLE_PROJECTILE("INTANGIBLE_PROJECTILE"),
|
||||
FOOD("FOOD"),
|
||||
FIRE_RESISTANT("FIRE_RESISTANT"),
|
||||
TOOL("TOOL"),
|
||||
STORED_ENCHANTMENTS("STORED_ENCHANTMENTS"),
|
||||
DYED_COLOR("DYED_COLOR"),
|
||||
MAP_COLOR("MAP_COLOR"),
|
||||
MAP_ID("MAP_ID"),
|
||||
MAP_DECORATIONS("MAP_DECORATIONS"),
|
||||
MAP_POST_PROCESSING("MAP_POST_PROCESSING"),
|
||||
CHARGED_PROJECTILES("CHARGED_PROJECTILES"),
|
||||
BUNDLE_CONTENTS("BUNDLE_CONTENTS"),
|
||||
POTION_CONTENTS("POTION_CONTENTS"),
|
||||
SUSPICIOUS_STEW_EFFECTS("SUSPICIOUS_STEW_EFFECTS"),
|
||||
WRITABLE_BOOK_CONTENT("WRITABLE_BOOK_CONTENT"),
|
||||
WRITTEN_BOOK_CONTENT("WRITTEN_BOOK_CONTENT"),
|
||||
TRIM("TRIM"),
|
||||
DEBUG_STICK_STATE("DEBUG_STICK_STATE"),
|
||||
ENTITY_DATA("ENTITY_DATA"),
|
||||
BUCKET_ENTITY_DATA("BUCKET_ENTITY_DATA"),
|
||||
BLOCK_ENTITY_DATA("BLOCK_ENTITY_DATA"),
|
||||
INSTRUMENT("INSTRUMENT"),
|
||||
OMINOUS_BOTTLE_AMPLIFIER("OMINOUS_BOTTLE_AMPLIFIER"),
|
||||
RECIPES("RECIPES"),
|
||||
LODESTONE_TRACKER("LODESTONE_TRACKER"),
|
||||
FIREWORK_EXPLOSION("FIREWORK_EXPLOSION"),
|
||||
FIREWORKS("FIREWORKS"),
|
||||
PROFILE("PROFILE"),
|
||||
NOTE_BLOCK_SOUND("NOTE_BLOCK_SOUND"),
|
||||
BANNER_PATTERNS("BANNER_PATTERNS"),
|
||||
BASE_COLOR("BASE_COLOR"),
|
||||
POT_DECORATIONS("POT_DECORATIONS"),
|
||||
CONTAINER("CONTAINER"),
|
||||
BLOCK_STATE("BLOCK_STATE"),
|
||||
BEES("BEES"),
|
||||
LOCK("LOCK"),
|
||||
CONTAINER_LOOT("CONTAINER_LOOT");
|
||||
|
||||
private final FieldWrapper fieldWrapper;
|
||||
|
||||
// Does this even need a Field Name?
|
||||
DataComponentTypes(String fieldName) {
|
||||
this.fieldWrapper = new FieldWrapper(ClassWrappers.DATA_COMPONENTS, fieldName, Version.V1_20_5, null);
|
||||
}
|
||||
|
||||
public Field getField() {
|
||||
return this.fieldWrapper.resolve();
|
||||
}
|
||||
|
||||
public Object getInstance() throws IllegalAccessException {
|
||||
return this.fieldWrapper.getInstance(null);
|
||||
}
|
||||
}
|
@ -15,24 +15,40 @@ public class ClassWrappers {
|
||||
public static final MinecraftServerClassWrapper CHAT_MESSAGE_TYPE = new MinecraftServerClassWrapper("ChatMessageType", "network.chat");
|
||||
public static final MinecraftServerClassWrapper MINECRAFT_ITEMSTACK = new MinecraftServerClassWrapper("ItemStack", "world.item");
|
||||
|
||||
private static final MinecraftServerClassWrapper NBT_BASE_V1205 = new MinecraftServerClassWrapper(Version.V1_20_5, null, "Tag", "nbt");
|
||||
public static final MinecraftServerClassWrapper NBT_BASE = new MinecraftServerClassWrapper(null, Version.V1_20_R3, "NBTBase", "nbt", NBT_BASE_V1205);
|
||||
public static final MinecraftServerClassWrapper GAMEPROFILE_SERIALIZER = new MinecraftServerClassWrapper("GameProfileSerializer", "nbt");
|
||||
private static final MinecraftServerClassWrapper TAG = new MinecraftServerClassWrapper(Version.V1_20_5, null, "Tag", "nbt");
|
||||
public static final MinecraftServerClassWrapper NBT_BASE = new MinecraftServerClassWrapper(null, Version.V1_20_R3, "NBTBase", "nbt", TAG);
|
||||
|
||||
public static final MinecraftServerClassWrapper GAMEPROFILE_SERIALIZER = new MinecraftServerClassWrapper(Version.V1_18_R1, Version.V1_20_R3, "GameProfileSerializer", "nbt");
|
||||
|
||||
public static final MinecraftServerClassWrapper CONTAINER_ANVIL = new MinecraftServerClassWrapper("ContainerAnvil", "world.inventory");
|
||||
public static final MinecraftServerClassWrapper PACKET_PLAY_OUT_OPEN_WINDOW = new MinecraftServerClassWrapper("PacketPlayOutOpenWindow", "network.protocol.game");
|
||||
public static final MinecraftServerClassWrapper CONTAINER = new MinecraftServerClassWrapper("Container", "world.inventory");
|
||||
public static final MinecraftServerClassWrapper CONTAINERS = new MinecraftServerClassWrapper(Version.V1_14_R1, null, "Containers", "world.inventory");
|
||||
public static final MinecraftServerClassWrapper CONTAINER_ACCESS = new MinecraftServerClassWrapper(Version.V1_16_R3, null, "ContainerAccess", "world.inventory");
|
||||
|
||||
public static final MinecraftServerClassWrapper WORLD = new MinecraftServerClassWrapper("World", "world.level");
|
||||
public static final MinecraftServerClassWrapper BLOCK_POSITION = new MinecraftServerClassWrapper("BlockPosition", "core");
|
||||
public static final MinecraftServerClassWrapper BLOCK_DATA_INTERFACE = new MinecraftServerClassWrapper("IBlockData", "world.level.block.state");
|
||||
public static final MinecraftServerClassWrapper TILE_ENTITY = new MinecraftServerClassWrapper("TileEntity", "world.level.block.entity");
|
||||
public static final MinecraftServerClassWrapper TILE_ENTITY_SKULL = new MinecraftServerClassWrapper("TileEntitySkull", "world.level.block.entity");
|
||||
private static final MinecraftServerClassWrapper CONTAINER_LEVEL_ACCESS = new MinecraftServerClassWrapper(Version.V1_20_5, null, "ContainerLevelAccess", "world.inventory");
|
||||
public static final MinecraftServerClassWrapper CONTAINER_ACCESS = new MinecraftServerClassWrapper(Version.V1_16_R3, Version.V1_20_R3, "ContainerAccess", "world.inventory", CONTAINER_LEVEL_ACCESS);
|
||||
|
||||
public static final MinecraftServerClassWrapper LEVEL = new MinecraftServerClassWrapper(Version.V1_20_5, null, "World", "world.level");
|
||||
public static final MinecraftServerClassWrapper WORLD = new MinecraftServerClassWrapper(null, Version.V1_20_R3, "World", "world.level", LEVEL);
|
||||
|
||||
private static final MinecraftServerClassWrapper BLOCK_POS = new MinecraftServerClassWrapper("BlockPosition", "core");
|
||||
public static final MinecraftServerClassWrapper BLOCK_POSITION = new MinecraftServerClassWrapper(null, Version.V1_20_R3, "BlockPosition", "core", BLOCK_POS);
|
||||
|
||||
public static final MinecraftServerClassWrapper BLOCK_STATE = new MinecraftServerClassWrapper("BlockState", "world.level.block.state");
|
||||
public static final MinecraftServerClassWrapper I_BLOCK_DATA = new MinecraftServerClassWrapper(null, Version.V1_20_R3, "IBlockData", "world.level.block.state", BLOCK_STATE);
|
||||
|
||||
private static final MinecraftServerClassWrapper BLOCK_ENTITY = new MinecraftServerClassWrapper("BlockEntity", "world.level.block.entity");
|
||||
public static final MinecraftServerClassWrapper TILE_ENTITY = new MinecraftServerClassWrapper(null, Version.V1_20_R3, "TileEntity", "world.level.block.entity", BLOCK_ENTITY);
|
||||
|
||||
private static final MinecraftServerClassWrapper SKULL_BLOCK_ENTITY = new MinecraftServerClassWrapper(Version.V1_20_5, null, "SkullBlockEntity", "world.level.block.entity");
|
||||
public static final MinecraftServerClassWrapper TILE_ENTITY_SKULL = new MinecraftServerClassWrapper(null, Version.V1_20_R3, "TileEntitySkull", "world.level.block.entity", SKULL_BLOCK_ENTITY);
|
||||
|
||||
public static final MinecraftServerClassWrapper SERVER_PLAYER = new MinecraftServerClassWrapper(Version.V1_20_5, null, "ServerPlayer", "server.level");
|
||||
public static final MinecraftServerClassWrapper ENTITY_PLAYER = new MinecraftServerClassWrapper(null, Version.V1_20_R3, "EntityPlayer", "server.level", SERVER_PLAYER);
|
||||
|
||||
public static final MinecraftServerClassWrapper PLAYER = new MinecraftServerClassWrapper(Version.V1_20_5, null, "Player", "world.entity.player");
|
||||
public static final MinecraftServerClassWrapper ENTITY_HUMAN = new MinecraftServerClassWrapper(null, Version.V1_20_R3, "EntityHuman", "world.entity.player", PLAYER);
|
||||
|
||||
public static final MinecraftServerClassWrapper ENTITY_PLAYER = new MinecraftServerClassWrapper("EntityPlayer", "server.level");
|
||||
public static final MinecraftServerClassWrapper ENTITY_HUMAN = new MinecraftServerClassWrapper("EntityHuman", "world.entity.player");
|
||||
public static final MinecraftServerClassWrapper ENTITY = new MinecraftServerClassWrapper("Entity", "world.entity");
|
||||
|
||||
public static final MinecraftServerClassWrapper PLAYER_INVENTORY = new MinecraftServerClassWrapper("PlayerInventory", "world.entity.player");
|
||||
@ -40,6 +56,17 @@ public class ClassWrappers {
|
||||
|
||||
public static final MinecraftServerClassWrapper RESOURCE_KEY = new MinecraftServerClassWrapper("ResourceKey", "resources");
|
||||
|
||||
// DataComponents
|
||||
public static final MinecraftServerClassWrapper DATA_COMPONENT_TYPE = new MinecraftServerClassWrapper(Version.V1_20_5, null, "DataComponentType", "core.component");
|
||||
|
||||
public static final MinecraftServerClassWrapper DATA_COMPONENTS = new MinecraftServerClassWrapper(Version.V1_20_5, null, "DataComponents", "core.component");
|
||||
|
||||
public static final MinecraftServerClassWrapper DATA_COMPONENT_MAP = new MinecraftServerClassWrapper(Version.V1_20_5, null, "DataComponentMap", "core.component");
|
||||
|
||||
// Item Components
|
||||
public static final MinecraftServerClassWrapper COMPONENT_CUSTOM_DATA = new MinecraftServerClassWrapper(Version.V1_20_5, null, "CustomData", "world.item.component");
|
||||
|
||||
// CraftBukkit
|
||||
public static final CraftBukkitClassWrapper CRAFTBUKKIT_ITEMSTACK = new CraftBukkitClassWrapper("inventory.CraftItemStack");
|
||||
public static final CraftBukkitClassWrapper CRAFTBUKKIT_CRAFT_PLAYER = new CraftBukkitClassWrapper("entity.CraftPlayer");
|
||||
public static final CraftBukkitClassWrapper CRAFTBUKKIT_CRAFT_WORLD = new CraftBukkitClassWrapper("CraftWorld");
|
||||
|
@ -5,27 +5,29 @@ import de.likewhat.customheads.utils.reflection.helpers.wrappers.FieldWrapper;
|
||||
|
||||
public class FieldWrappers {
|
||||
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1123 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "cm", Version.V1_20_R3, Version.V1_20_R3);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1122 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "cn", Version.V1_20_R2, Version.V1_20_R2, PLAYER_INVENTORY_V1123);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1121 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "cl", Version.V1_20_R1, Version.V1_20_R1, PLAYER_INVENTORY_V1122);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1193 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "ck", Version.V1_19_R3, Version.V1_19_R3, PLAYER_INVENTORY_V1121);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1205 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "inventory", Version.V1_20_5, null); // Inventory
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1203 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "cm", Version.V1_20_R3, Version.V1_20_R3, PLAYER_INVENTORY_V1205);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1202 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "cn", Version.V1_20_R2, Version.V1_20_R2, PLAYER_INVENTORY_V1203);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1201 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "cl", Version.V1_20_R1, Version.V1_20_R1, PLAYER_INVENTORY_V1202);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1193 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "ck", Version.V1_19_R3, Version.V1_19_R3, PLAYER_INVENTORY_V1201);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1192 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "co", Version.V1_19_R2, Version.V1_19_R2, PLAYER_INVENTORY_V1193);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1191 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "cp", Version.V1_19_R1, Version.V1_19_R1, PLAYER_INVENTORY_V1192);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1182 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "co", Version.V1_18_R2, Version.V1_18_R2, PLAYER_INVENTORY_V1191);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1181 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "cp", Version.V1_18_R1, Version.V1_18_R1, PLAYER_INVENTORY_V1182);
|
||||
private static final FieldWrapper PLAYER_INVENTORY_V1171 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "co", Version.V1_17_R1, Version.V1_17_R1, PLAYER_INVENTORY_V1181);
|
||||
public static final FieldWrapper PLAYER_INVENTORY = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "inventory", null, Version.V1_16_R3, PLAYER_INVENTORY_V1171);
|
||||
public static final FieldWrapper PLAYER_INVENTORY = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "inventory", null, Version.V1_16_R3, PLAYER_INVENTORY_V1171); // PlayerInventory
|
||||
|
||||
|
||||
private static final FieldWrapper PLAYER_ACTIVE_CONTAINER_V1202 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "bS", Version.V1_20_R2, Version.V1_20_R3);
|
||||
private static final FieldWrapper PLAYER_ACTIVE_CONTAINER_V1205 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "containerMenu", Version.V1_20_5, null); // AbstractContainerMenu
|
||||
private static final FieldWrapper PLAYER_ACTIVE_CONTAINER_V1202 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "bS", Version.V1_20_R2, Version.V1_20_R3, PLAYER_ACTIVE_CONTAINER_V1205);
|
||||
private static final FieldWrapper PLAYER_ACTIVE_CONTAINER_V1201 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "bR", Version.V1_20_R1, Version.V1_20_R1, PLAYER_ACTIVE_CONTAINER_V1202);
|
||||
private static final FieldWrapper PLAYER_ACTIVE_CONTAINER_V1193 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "bP", Version.V1_19_R3, Version.V1_19_R3, PLAYER_ACTIVE_CONTAINER_V1201);
|
||||
private static final FieldWrapper PLAYER_ACTIVE_CONTAINER_V1182 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "bU", Version.V1_18_R2, Version.V1_19_R2, PLAYER_ACTIVE_CONTAINER_V1193);
|
||||
private static final FieldWrapper PLAYER_ACTIVE_CONTAINER_V1181 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "bW", Version.V1_18_R1, Version.V1_18_R1, PLAYER_ACTIVE_CONTAINER_V1182);
|
||||
private static final FieldWrapper PLAYER_ACTIVE_CONTAINER_V1171 = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "bV", Version.V1_17_R1, Version.V1_17_R1, PLAYER_ACTIVE_CONTAINER_V1181);
|
||||
public static final FieldWrapper PLAYER_ACTIVE_CONTAINER = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "activeContainer", null, Version.V1_16_R3, PLAYER_ACTIVE_CONTAINER_V1171);
|
||||
public static final FieldWrapper PLAYER_ACTIVE_CONTAINER = new FieldWrapper(ClassWrappers.ENTITY_HUMAN, "activeContainer", null, Version.V1_16_R3, PLAYER_ACTIVE_CONTAINER_V1171); // Container
|
||||
|
||||
private static final FieldWrapper PLAYER_CONNECTION_V1201 = new FieldWrapper(ClassWrappers.ENTITY_PLAYER, "c", Version.V1_20_R1, Version.V1_20_R3);
|
||||
private static final FieldWrapper PLAYER_CONNECTION_V1205 = new FieldWrapper(ClassWrappers.ENTITY_PLAYER, "connection", Version.V1_20_5, null);
|
||||
private static final FieldWrapper PLAYER_CONNECTION_V1201 = new FieldWrapper(ClassWrappers.ENTITY_PLAYER, "c", Version.V1_20_R1, Version.V1_20_R3, PLAYER_CONNECTION_V1205);
|
||||
private static final FieldWrapper PLAYER_CONNECTION_V1171 = new FieldWrapper(ClassWrappers.ENTITY_PLAYER, "b", Version.V1_17_R1, Version.V1_19_R3, PLAYER_CONNECTION_V1201);
|
||||
public static final FieldWrapper PLAYER_CONNECTION = new FieldWrapper(ClassWrappers.ENTITY_PLAYER, "playerConnection", null, Version.V1_16_R3, PLAYER_CONNECTION_V1171);
|
||||
|
||||
@ -42,4 +44,6 @@ public class FieldWrappers {
|
||||
private static final FieldWrapper CONTAINERS_ANVIL_V1201 = new FieldWrapper(ClassWrappers.CONTAINERS, "h", Version.V1_16_R3, Version.V1_20_R2, CONTAINERS_ANVIL_V1204);
|
||||
public static final FieldWrapper CONTAINERS_ANVIL = new FieldWrapper(ClassWrappers.CONTAINERS, "ANVIL", Version.V1_14_R1, Version.V1_16_R3, CONTAINERS_ANVIL_V1201);
|
||||
|
||||
public static final FieldWrapper DATA_COMPONENTS_CUSTOM_DATA = new FieldWrapper(ClassWrappers.DATA_COMPONENTS, "CUSTOM_DATA", Version.V1_20_5, null);
|
||||
|
||||
}
|
||||
|
@ -10,39 +10,58 @@ import org.bukkit.inventory.ItemStack;
|
||||
public class MethodWrappers {
|
||||
|
||||
// ItemStack
|
||||
private static final MethodWrapper<Boolean> ITEMSTACK_HASTAG_V1201 = new MethodWrapper<>(Version.V1_20_R1, null, "u", ClassWrappers.MINECRAFT_ITEMSTACK.resolve());
|
||||
// Versions since 1.20.5 are now using DataComponents to get their NBT Data... yay
|
||||
private static final MethodWrapper<Boolean> ITEMSTACK_HASTAG_V1201 = new MethodWrapper<>(Version.V1_20_R1, Version.V1_20_R3, "u", ClassWrappers.MINECRAFT_ITEMSTACK.resolve());
|
||||
private static final MethodWrapper<Boolean> ITEMSTACK_HASTAG_V1191 = new MethodWrapper<>(Version.V1_19_R1, Version.V1_19_R3, "t", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), ITEMSTACK_HASTAG_V1201);
|
||||
private static final MethodWrapper<Boolean> ITEMSTACK_HASTAG_V1182 = new MethodWrapper<>(Version.V1_18_R2, Version.V1_18_R2, "s", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), ITEMSTACK_HASTAG_V1191);
|
||||
private static final MethodWrapper<Boolean> ITEMSTACK_HASTAG_V1181 = new MethodWrapper<>(Version.V1_18_R1, Version.V1_18_R1, "r", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), ITEMSTACK_HASTAG_V1182);
|
||||
public static final MethodWrapper<Boolean> ITEMSTACK_HASTAG = new MethodWrapper<>(null, Version.V1_17_R1, "hasTag", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), ITEMSTACK_HASTAG_V1181);
|
||||
|
||||
private static final MethodWrapper<Object> ITEMSTACK_GETTAG_V1201 = new MethodWrapper<>(Version.V1_20_R1, null, "v", ClassWrappers.MINECRAFT_ITEMSTACK.resolve());
|
||||
private static final MethodWrapper<Object> ITEMSTACK_GETTAG_V1201 = new MethodWrapper<>(Version.V1_20_R1, Version.V1_20_R3, "v", ClassWrappers.MINECRAFT_ITEMSTACK.resolve());
|
||||
private static final MethodWrapper<Object> ITEMSTACK_GETTAG_V1191 = new MethodWrapper<>(Version.V1_19_R1, Version.V1_19_R3, "u", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), ITEMSTACK_GETTAG_V1201);
|
||||
private static final MethodWrapper<Object> ITEMSTACK_GETTAG_V1182 = new MethodWrapper<>(Version.V1_18_R2, Version.V1_18_R2, "t", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), ITEMSTACK_GETTAG_V1191);
|
||||
private static final MethodWrapper<Object> ITEMSTACK_GETTAG_V1181 = new MethodWrapper<>(Version.V1_18_R1, Version.V1_18_R1, "s", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), ITEMSTACK_GETTAG_V1182);
|
||||
public static final MethodWrapper<Object> ITEMSTACK_GETTAG = new MethodWrapper<>(null, Version.V1_17_R1, "getTag", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), ITEMSTACK_GETTAG_V1181);
|
||||
|
||||
private static final MethodWrapper<Void> ITEMSTACK_SETTAG_V1181 = new MethodWrapper<>(Version.V1_18_R1, null, "c", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), NBTType.COMPOUND.getNBTClass());
|
||||
private static final MethodWrapper<Void> ITEMSTACK_SETTAG_V1181 = new MethodWrapper<>(Version.V1_18_R1, Version.V1_20_R3, "c", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), NBTType.COMPOUND.getNBTClass());
|
||||
public static final MethodWrapper<Void> ITEMSTACK_SETTAG = new MethodWrapper<>(null, Version.V1_17_R1, "setTag", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), ITEMSTACK_SETTAG_V1181, NBTType.COMPOUND.getNBTClass());
|
||||
|
||||
// mmmh yes... Universal Type Declarations... into the Object Pile it goes
|
||||
public static final MethodWrapper<Object> ITEMSTACK_DATA_GET = new MethodWrapper<>(Version.V1_20_5, null, "get", ClassWrappers.MINECRAFT_ITEMSTACK, ClassWrappers.DATA_COMPONENT_TYPE);
|
||||
|
||||
public static final MethodWrapper<Object> ITEMSTACK_DATA_GET_OR_DEFAULT = new MethodWrapper<>(Version.V1_20_5, null, "getOrDefault", ClassWrappers.MINECRAFT_ITEMSTACK.resolve(), ClassWrappers.DATA_COMPONENT_TYPE.resolve(), Object.class);
|
||||
|
||||
public static final MethodWrapper<Boolean> ITEMSTACK_DATA_HAS = new MethodWrapper<>(Version.V1_20_5, null, "has", ClassWrappers.MINECRAFT_ITEMSTACK, ClassWrappers.DATA_COMPONENT_TYPE);
|
||||
|
||||
public static final MethodWrapper<Void> ITEMSTACK_DATA_SET = new MethodWrapper<>(Version.V1_20_5, null, "set", ClassWrappers.MINECRAFT_ITEMSTACK, ClassWrappers.DATA_COMPONENT_TYPE, ClassWrappers.COMPONENT_CUSTOM_DATA);
|
||||
|
||||
|
||||
public static final MethodWrapper<Object> COMPONENT_CUSTOM_DATA_OF = new MethodWrapper<>(Version.V1_20_5, null, "of", ClassWrappers.COMPONENT_CUSTOM_DATA.resolve(), NBTType.COMPOUND.getNBTClass());
|
||||
|
||||
public static final MethodWrapper<Object> COMPONENT_CUSTOM_DATA_COPY_TAG = new MethodWrapper<>(Version.V1_20_5, null, "copyTag", ClassWrappers.COMPONENT_CUSTOM_DATA);
|
||||
|
||||
// GameProfile
|
||||
public static final MethodWrapper<Object> GAMEPROFILE_SERIALIZE = new MethodWrapper<>(Version.V1_18_R1, null, "a", ClassWrappers.GAMEPROFILE_SERIALIZER.resolve(), NBTType.COMPOUND.getNBTClass(), GameProfile.class);
|
||||
public static final MethodWrapper<Object> GAMEPROFILE_SERIALIZE = new MethodWrapper<>(Version.V1_18_R1, Version.V1_20_R3, "a", ClassWrappers.GAMEPROFILE_SERIALIZER.resolve(), NBTType.COMPOUND.getNBTClass(), GameProfile.class);
|
||||
|
||||
// Player Packet Handling
|
||||
private static final MethodWrapper<Void> PLAYER_SEND_PACKET_V1181 = new MethodWrapper<>(Version.V1_18_R1, null, "a", ClassWrappers.PLAYER_CONNECTION.resolve(), ClassWrappers.PACKET.resolve());
|
||||
private static final MethodWrapper<Void> PLAYER_SEND_PACKET_V1205 = new MethodWrapper<>(Version.V1_20_5, null, "send", ClassWrappers.PLAYER_CONNECTION.resolve(), ClassWrappers.PACKET.resolve()); // Inherited from ServerPlayerConnection
|
||||
private static final MethodWrapper<Void> PLAYER_SEND_PACKET_V1181 = new MethodWrapper<>(Version.V1_18_R1, Version.V1_20_R3, "a", ClassWrappers.PLAYER_CONNECTION.resolve(), PLAYER_SEND_PACKET_V1205, ClassWrappers.PACKET.resolve());
|
||||
public static final MethodWrapper<Void> PLAYER_SEND_PACKET = new MethodWrapper<>(null, Version.V1_17_R1, "sendPacket", ClassWrappers.PLAYER_CONNECTION.resolve(), PLAYER_SEND_PACKET_V1181, ClassWrappers.PACKET.resolve());
|
||||
|
||||
private static final MethodWrapper<Object> CONTAINER_ACCESS_AT_V1182 = new MethodWrapper<>(Version.V1_18_R2, null, "a", ClassWrappers.CONTAINER_ACCESS, ClassWrappers.WORLD, ClassWrappers.BLOCK_POSITION);
|
||||
private static final MethodWrapper<Object> CONTAINER_ACCESS_AT_V1205 = new MethodWrapper<>(Version.V1_20_5, null, "create", ClassWrappers.CONTAINER_ACCESS, ClassWrappers.WORLD, ClassWrappers.BLOCK_POSITION);
|
||||
private static final MethodWrapper<Object> CONTAINER_ACCESS_AT_V1182 = new MethodWrapper<>(Version.V1_18_R2, Version.V1_20_R3, "a", ClassWrappers.CONTAINER_ACCESS, CONTAINER_ACCESS_AT_V1205, ClassWrappers.WORLD, ClassWrappers.BLOCK_POSITION);
|
||||
public static final MethodWrapper<Object> CONTAINER_ACCESS_AT = new MethodWrapper<>(null, Version.V1_18_R1, "at", ClassWrappers.CONTAINER_ACCESS, CONTAINER_ACCESS_AT_V1182, ClassWrappers.WORLD, ClassWrappers.BLOCK_POSITION);
|
||||
|
||||
// Other
|
||||
public static final MethodWrapper<Object> CHAT_COMPONENT_SERIALIZE = new MethodWrapper<>(null, null, "a", ClassWrappers.CHAT_SERIALIZER.resolve(), String.class);
|
||||
|
||||
// World
|
||||
private static final MethodWrapper<Boolean> WORLD_SET_TYPE_AND_DATA_V1181 = new MethodWrapper<>(Version.V1_18_R1, null, "a", ClassWrappers.WORLD.resolve(), ClassWrappers.BLOCK_POSITION.resolve(), ClassWrappers.BLOCK_DATA_INTERFACE.resolve(), int.class);
|
||||
public static final MethodWrapper<Boolean> WORLD_SET_TYPE_AND_DATA = new MethodWrapper<>(null, Version.V1_17_R1, "setTypeAndData", ClassWrappers.WORLD.resolve(), WORLD_SET_TYPE_AND_DATA_V1181, ClassWrappers.BLOCK_POSITION.resolve(), ClassWrappers.BLOCK_DATA_INTERFACE.resolve(), int.class);
|
||||
private static final MethodWrapper<Boolean> WORLD_SET_TYPE_AND_DATA_V1205 = new MethodWrapper<>(Version.V1_20_5, null, "setBlock", ClassWrappers.WORLD.resolve(), ClassWrappers.BLOCK_POSITION.resolve(), ClassWrappers.I_BLOCK_DATA.resolve(), int.class);
|
||||
private static final MethodWrapper<Boolean> WORLD_SET_TYPE_AND_DATA_V1181 = new MethodWrapper<>(Version.V1_18_R1, Version.V1_20_R3, "a", ClassWrappers.WORLD.resolve(), WORLD_SET_TYPE_AND_DATA_V1205, ClassWrappers.BLOCK_POSITION.resolve(), ClassWrappers.I_BLOCK_DATA.resolve(), int.class);
|
||||
public static final MethodWrapper<Boolean> WORLD_SET_TYPE_AND_DATA = new MethodWrapper<>(null, Version.V1_17_R1, "setTypeAndData", ClassWrappers.WORLD.resolve(), WORLD_SET_TYPE_AND_DATA_V1181, ClassWrappers.BLOCK_POSITION.resolve(), ClassWrappers.I_BLOCK_DATA.resolve(), int.class);
|
||||
|
||||
private static final MethodWrapper<Void> WORLD_SET_TILE_ENTITY_V1181 = new MethodWrapper<>(Version.V1_18_R1, null, "a", ClassWrappers.WORLD, ClassWrappers.TILE_ENTITY);
|
||||
private static final MethodWrapper<Void> WORLD_SET_TILE_ENTITY_V1205 = new MethodWrapper<>(Version.V1_20_5, null, "setLevel", ClassWrappers.WORLD, ClassWrappers.TILE_ENTITY);
|
||||
private static final MethodWrapper<Void> WORLD_SET_TILE_ENTITY_V1181 = new MethodWrapper<>(Version.V1_18_R1, Version.V1_20_R3, "a", ClassWrappers.WORLD, WORLD_SET_TILE_ENTITY_V1205, ClassWrappers.TILE_ENTITY);
|
||||
public static final MethodWrapper<Void> WORLD_SET_TILE_ENTITY = new MethodWrapper<>(null, Version.V1_17_R1, "setTileEntity", ClassWrappers.WORLD, WORLD_SET_TILE_ENTITY_V1181, ClassWrappers.TILE_ENTITY);
|
||||
|
||||
private static final MethodWrapper<Void> WORLD_GET_TILE_ENTITY_V1181 = new MethodWrapper<>(Version.V1_18_R1, null, "c_", ClassWrappers.WORLD, ClassWrappers.BLOCK_POSITION);
|
||||
|
@ -41,6 +41,11 @@ public class NBTGenericWrapper implements NBTBaseWrapper {
|
||||
private static final MethodWrapper<Double> NBT_AS_DOUBLE_V1181 = new MethodWrapper<>(Version.V1_18_R1, Version.V1_19_R1, "i", NBTType.ANY_NUMERIC.getNBTClass(), NBT_AS_DOUBLE_V1201);
|
||||
private static final MethodWrapper<Double> NBT_AS_DOUBLE = new MethodWrapper<>(null, Version.V1_17_R1, "asDouble", NBTType.ANY_NUMERIC.getNBTClass(), NBT_AS_DOUBLE_V1181);
|
||||
|
||||
private static final MethodWrapper<Number> NBT_AS_NUMBER_V1205 = new MethodWrapper<>(Version.V1_20_5, null, "getAsNumber", NBTType.ANY_NUMERIC.getNBTClass());
|
||||
private static final MethodWrapper<Number> NBT_AS_NUMBER_V1201 = new MethodWrapper<>(Version.V1_20_R1, Version.V1_20_R3, "l", NBTType.ANY_NUMERIC.getNBTClass(), NBT_AS_NUMBER_V1205);
|
||||
private static final MethodWrapper<Number> NBT_AS_NUMBER_V1181 = new MethodWrapper<>(Version.V1_18_R1, Version.V1_19_R1, "k", NBTType.ANY_NUMERIC.getNBTClass(), NBT_AS_NUMBER_V1201);
|
||||
private static final MethodWrapper<Number> NBT_AS_NUMBER = new MethodWrapper<>(null, Version.V1_17_R1, "asNumber", NBTType.ANY_NUMERIC.getNBTClass(), NBT_AS_NUMBER_V1181);
|
||||
|
||||
// At this point I could just use toString =/
|
||||
private static final MethodWrapper<String> NBT_AS_STRING_V1205 = new MethodWrapper<>(Version.V1_20_5, null, "getAsString", ClassWrappers.NBT_BASE);
|
||||
private static final MethodWrapper<String> NBT_AS_STRING_V1203 = new MethodWrapper<>(Version.V1_20_R3, Version.V1_20_R3, "t_", ClassWrappers.NBT_BASE, NBT_AS_STRING_V1205);
|
||||
@ -145,48 +150,55 @@ public class NBTGenericWrapper implements NBTBaseWrapper {
|
||||
// TODO Throw an Error instead of returning a Value?
|
||||
public byte asByte() {
|
||||
if(type.isNumber()) {
|
||||
return ReflectionUtils.callWrapperAndGetOrDefault(this.nbtObject, NBT_AS_BYTE, (byte) 0);
|
||||
return this.asNumber().byteValue();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public short asShort() {
|
||||
if(type.isNumber()) {
|
||||
return ReflectionUtils.callWrapperAndGetOrDefault(this.nbtObject, NBT_AS_SHORT, (short) 0);
|
||||
return this.asNumber().shortValue();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int asInt() {
|
||||
if(type.isNumber()) {
|
||||
return ReflectionUtils.callWrapperAndGetOrDefault(this.nbtObject, NBT_AS_INT, 0);
|
||||
return this.asNumber().intValue();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public long asLong() {
|
||||
if(type.isNumber()) {
|
||||
return ReflectionUtils.callWrapperAndGetOrDefault(this.nbtObject, NBT_AS_LONG, 0L);
|
||||
return this.asNumber().longValue();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public float asFloat() {
|
||||
if(type.isNumber()) {
|
||||
return ReflectionUtils.callWrapperAndGetOrDefault(this.nbtObject, NBT_AS_FLOAT, 0f);
|
||||
return this.asNumber().floatValue();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public double asDouble() {
|
||||
if(type.isNumber()) {
|
||||
return ReflectionUtils.callWrapperAndGetOrDefault(this.nbtObject, NBT_AS_DOUBLE, 0d);
|
||||
return this.asNumber().doubleValue();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public Number asNumber() {
|
||||
if(type.isNumber()) {
|
||||
return ReflectionUtils.callWrapperAndGetOrDefault(this.nbtObject, NBT_AS_NUMBER, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String asString() {
|
||||
return ReflectionUtils.callWrapperAndGetOrDefault(this.nbtObject, NBT_AS_STRING, "");
|
||||
return ReflectionUtils.callWrapperAndGetOrNull(this.nbtObject, NBT_AS_STRING);
|
||||
}
|
||||
|
||||
public byte[] asByteArray() {
|
||||
|
@ -1,6 +1,8 @@
|
||||
package de.likewhat.customheads.utils.reflection.nbt;
|
||||
|
||||
import de.likewhat.customheads.CustomHeads;
|
||||
import de.likewhat.customheads.utils.reflection.helpers.DataComponentTypes;
|
||||
import de.likewhat.customheads.utils.reflection.helpers.Version;
|
||||
import de.likewhat.customheads.utils.reflection.helpers.wrappers.instances.MethodWrappers;
|
||||
import de.likewhat.customheads.utils.reflection.helpers.wrappers.instances.nbt.NBTTagCompoundWrapper;
|
||||
import de.likewhat.customheads.utils.reflection.nbt.errors.NBTException;
|
||||
@ -31,10 +33,17 @@ public class ItemNBTUtils {
|
||||
}
|
||||
|
||||
public static boolean hasNBTTag(ItemStack item) {
|
||||
return nmsItemHasTag(ItemNBTUtils.asNMSCopy(item));
|
||||
}
|
||||
|
||||
private static boolean nmsItemHasTag(Object nmsItem) {
|
||||
try {
|
||||
Object nmsCopy = ItemNBTUtils.asNMSCopy(item);
|
||||
if(nmsCopy != null) {
|
||||
return MethodWrappers.ITEMSTACK_HASTAG.invokeOn(nmsCopy);
|
||||
if(nmsItem != null) {
|
||||
if(Version.getCurrentVersion().isNewerThan(Version.V1_20_R3)) {
|
||||
return MethodWrappers.ITEMSTACK_HASTAG.invokeOn(nmsItem);
|
||||
} else {
|
||||
return MethodWrappers.ITEMSTACK_DATA_HAS.invokeOn(nmsItem, DataComponentTypes.CUSTOM_DATA.getInstance());
|
||||
}
|
||||
}
|
||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||
CustomHeads.getPluginLogger().log(Level.SEVERE, "Failed to check NBT on Item", e);
|
||||
@ -47,12 +56,22 @@ public class ItemNBTUtils {
|
||||
}
|
||||
|
||||
public static NBTTagCompoundWrapper getTagFromItem(ItemStack itemStack, boolean force) throws NBTException {
|
||||
if(!force && !hasNBTTag(itemStack)) {
|
||||
return getTagFromNMSItem(ItemNBTUtils.asNMSCopy(itemStack), force);
|
||||
}
|
||||
|
||||
private static NBTTagCompoundWrapper getTagFromNMSItem(Object nmsItem, boolean force) throws NBTException {
|
||||
if(!force && !nmsItemHasTag(nmsItem)) {
|
||||
return new NBTTagCompoundWrapper();
|
||||
}
|
||||
try {
|
||||
Object nmsCopy = ItemNBTUtils.asNMSCopy(itemStack);
|
||||
return NBTTagCompoundWrapper.of(MethodWrappers.ITEMSTACK_GETTAG.invokeOn(nmsCopy));
|
||||
Object tag;
|
||||
if(Version.getCurrentVersion().isNewerThan(Version.V1_20_R3)) {
|
||||
tag = MethodWrappers.ITEMSTACK_GETTAG.invokeOn(nmsItem);
|
||||
} else {
|
||||
Object customData = MethodWrappers.ITEMSTACK_DATA_GET.invokeOn(nmsItem, DataComponentTypes.CUSTOM_DATA.getInstance());
|
||||
tag = MethodWrappers.COMPONENT_CUSTOM_DATA_COPY_TAG.invokeOn(customData);
|
||||
}
|
||||
return NBTTagCompoundWrapper.of(tag);
|
||||
} catch(InvocationTargetException | IllegalAccessException e) {
|
||||
throw new NBTException(e);
|
||||
}
|
||||
@ -66,10 +85,14 @@ public class ItemNBTUtils {
|
||||
|
||||
public static void setTagOnItem(Object nmsItem, Object nbt) throws NBTException, NBTVerifyException {
|
||||
try {
|
||||
MethodWrappers.ITEMSTACK_SETTAG.invokeOn(nmsItem, nbt);
|
||||
if(Version.getCurrentVersion().isNewerThan(Version.V1_20_R3)) {
|
||||
MethodWrappers.ITEMSTACK_SETTAG.invokeOn(nmsItem, nbt);
|
||||
} else {
|
||||
MethodWrappers.ITEMSTACK_DATA_SET.invokeOn(nmsItem, nbt);
|
||||
}
|
||||
|
||||
// Verify NBT Set
|
||||
Object tagToVerify = MethodWrappers.ITEMSTACK_GETTAG.invokeOn(nmsItem);
|
||||
Object tagToVerify = getTagFromNMSItem(nmsItem, false).getNBTObject();
|
||||
if (!tagToVerify.equals(nbt)) {
|
||||
throw new NBTVerifyException("Failed to verify NBT");
|
||||
}
|
||||
|
@ -133,19 +133,11 @@ public class NBTTagUtils {
|
||||
}
|
||||
break;
|
||||
case SHORT:
|
||||
result = new JsonPrimitive(generic.asShort());
|
||||
break;
|
||||
case INT:
|
||||
result = new JsonPrimitive(generic.asInt());
|
||||
break;
|
||||
case LONG:
|
||||
result = new JsonPrimitive(generic.asLong());
|
||||
break;
|
||||
case FLOAT:
|
||||
result = new JsonPrimitive(generic.asFloat());
|
||||
break;
|
||||
case DOUBLE:
|
||||
result = new JsonPrimitive(generic.asDouble());
|
||||
result = new JsonPrimitive(generic.asNumber());
|
||||
break;
|
||||
case STRING:
|
||||
result = new JsonPrimitive(generic.asString());
|
||||
|
Loading…
Reference in New Issue
Block a user