diff --git a/inventoryaccess/inventory-access-r1/pom.xml b/inventoryaccess/inventory-access-r1/pom.xml index fb1ca42..f70cd72 100644 --- a/inventoryaccess/inventory-access-r1/pom.xml +++ b/inventoryaccess/inventory-access-r1/pom.xml @@ -21,7 +21,7 @@ org.spigotmc spigot - 1.14.4-R0.1-SNAPSHOT + 1.14-R0.1-SNAPSHOT provided diff --git a/inventoryaccess/inventory-access-r1/src/main/java/xyz/xenondevs/inventoryaccess/r1/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r1/src/main/java/xyz/xenondevs/inventoryaccess/r1/CartographyInventoryImpl.java index c5c32f0..0e42d59 100644 --- a/inventoryaccess/inventory-access-r1/src/main/java/xyz/xenondevs/inventoryaccess/r1/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r1/src/main/java/xyz/xenondevs/inventoryaccess/r1/CartographyInventoryImpl.java @@ -17,7 +17,7 @@ import java.lang.reflect.Field; class CartographyInventoryImpl extends ContainerCartography implements CartographyInventory { - private static final Field RESULT_CONTAINER_FIELD = ReflectionUtils.getField(ContainerCartography.class, true, "resultInventory"); + private static final Field RESULT_CONTAINER_FIELD = ReflectionUtils.getField(ContainerCartography.class, true, "f"); private final InventoryCraftResult resultInventory = ReflectionUtils.getFieldValue(RESULT_CONTAINER_FIELD, this); private final IChatBaseComponent title; diff --git a/inventoryaccess/inventory-access-r1/src/main/java/xyz/xenondevs/inventoryaccess/r1/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r1/src/main/java/xyz/xenondevs/inventoryaccess/r1/ItemUtilsImpl.java index f46418c..7622912 100644 --- a/inventoryaccess/inventory-access-r1/src/main/java/xyz/xenondevs/inventoryaccess/r1/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r1/src/main/java/xyz/xenondevs/inventoryaccess/r1/ItemUtilsImpl.java @@ -1,5 +1,6 @@ package xyz.xenondevs.inventoryaccess.r1; +import com.mojang.authlib.GameProfile; import net.minecraft.server.v1_14_R1.ItemStack; import net.minecraft.server.v1_14_R1.NBTCompressedStreamTools; import net.minecraft.server.v1_14_R1.NBTTagCompound; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Field; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Field CRAFT_META_SKULL_GAME_PROFILE_FIELD = ReflectionUtils.getField( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "profile" + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.setFieldValue(CRAFT_META_SKULL_GAME_PROFILE_FIELD, itemMeta, gameProfile); + } + } diff --git a/inventoryaccess/inventory-access-r10/pom.xml b/inventoryaccess/inventory-access-r10/pom.xml index 9c04ead..40a4398 100644 --- a/inventoryaccess/inventory-access-r10/pom.xml +++ b/inventoryaccess/inventory-access-r10/pom.xml @@ -15,7 +15,7 @@ 17 17 - 1.19-R0.1-SNAPSHOT + 1.18-R0.1-SNAPSHOT diff --git a/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/AnvilInventoryImpl.java index 4038aa0..d90a5f7 100644 --- a/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/AnvilInventoryImpl.java @@ -14,11 +14,11 @@ import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.inventory.ContainerLevelAccess; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_18_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/CartographyInventoryImpl.java index 43bf092..ebef270 100644 --- a/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/CartographyInventoryImpl.java @@ -10,11 +10,11 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.inventory.*; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_18_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/InventoryUtilsImpl.java index d1a125e..a998a5b 100644 --- a/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/InventoryUtilsImpl.java @@ -7,11 +7,11 @@ import net.minecraft.world.Container; import net.minecraft.world.MenuProvider; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_19_R1.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_18_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_18_R1.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/ItemUtilsImpl.java index d50de84..2c7c998 100644 --- a/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r10; +import com.mojang.authlib.GameProfile; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/PlayerUtilsImpl.java index a00f08c..66e8f7f 100644 --- a/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r10/src/main/java/xyz/xenondevs/inventoryaccess/r10/PlayerUtilsImpl.java @@ -8,8 +8,8 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.saveddata.maps.MapDecoration; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_19_R1.CraftServer; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_18_R1.CraftServer; +import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/inventoryaccess/inventory-access-r11/pom.xml b/inventoryaccess/inventory-access-r11/pom.xml index d1823c7..4e05721 100644 --- a/inventoryaccess/inventory-access-r11/pom.xml +++ b/inventoryaccess/inventory-access-r11/pom.xml @@ -15,7 +15,7 @@ 17 17 - 1.19.1-R0.1-SNAPSHOT + 1.18.2-R0.1-SNAPSHOT diff --git a/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/AnvilInventoryImpl.java index 9b78b49..ed4be5d 100644 --- a/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/AnvilInventoryImpl.java @@ -14,11 +14,11 @@ import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.inventory.ContainerLevelAccess; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_18_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -186,4 +186,5 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { // empty } + } diff --git a/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/CartographyInventoryImpl.java index 80216b1..913cbd7 100644 --- a/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/CartographyInventoryImpl.java @@ -10,11 +10,11 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.inventory.*; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_18_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/InventoryUtilsImpl.java index 22abe2d..e12c7a4 100644 --- a/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/InventoryUtilsImpl.java @@ -7,11 +7,11 @@ import net.minecraft.world.Container; import net.minecraft.world.MenuProvider; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_19_R1.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_18_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_18_R2.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/ItemUtilsImpl.java index 307039d..6090c91 100644 --- a/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r11; +import com.mojang.authlib.GameProfile; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/PlayerUtilsImpl.java index d486c31..30e60b2 100644 --- a/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r11/src/main/java/xyz/xenondevs/inventoryaccess/r11/PlayerUtilsImpl.java @@ -8,8 +8,8 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.saveddata.maps.MapDecoration; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_19_R1.CraftServer; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_18_R2.CraftServer; +import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/inventoryaccess/inventory-access-r12/pom.xml b/inventoryaccess/inventory-access-r12/pom.xml index cd5d660..35d85e6 100644 --- a/inventoryaccess/inventory-access-r12/pom.xml +++ b/inventoryaccess/inventory-access-r12/pom.xml @@ -15,7 +15,7 @@ 17 17 - 1.19.3-R0.1-SNAPSHOT + 1.19-R0.1-SNAPSHOT diff --git a/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/AnvilInventoryImpl.java index 60a0cbb..2e1aa83 100644 --- a/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/AnvilInventoryImpl.java @@ -14,11 +14,11 @@ import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.inventory.ContainerLevelAccess; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -186,4 +186,5 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { // empty } + } diff --git a/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/CartographyInventoryImpl.java index 6b39561..2503178 100644 --- a/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/CartographyInventoryImpl.java @@ -10,11 +10,11 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.inventory.*; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/InventoryUtilsImpl.java index 1f4e24e..14446a8 100644 --- a/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/InventoryUtilsImpl.java @@ -7,11 +7,11 @@ import net.minecraft.world.Container; import net.minecraft.world.MenuProvider; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_19_R2.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R1.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/ItemUtilsImpl.java index fe61752..2cc2342 100644 --- a/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r12; +import com.mojang.authlib.GameProfile; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/PlayerUtilsImpl.java index a114830..48d50f9 100644 --- a/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r12/src/main/java/xyz/xenondevs/inventoryaccess/r12/PlayerUtilsImpl.java @@ -8,8 +8,8 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.saveddata.maps.MapDecoration; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_19_R2.CraftServer; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.CraftServer; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/inventoryaccess/inventory-access-r13/pom.xml b/inventoryaccess/inventory-access-r13/pom.xml index 6502151..17a0875 100644 --- a/inventoryaccess/inventory-access-r13/pom.xml +++ b/inventoryaccess/inventory-access-r13/pom.xml @@ -15,7 +15,7 @@ 17 17 - 1.19.4-R0.1-SNAPSHOT + 1.19.1-R0.1-SNAPSHOT diff --git a/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/AnvilInventoryImpl.java index 4f08c10..08f0d25 100644 --- a/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/AnvilInventoryImpl.java @@ -14,11 +14,11 @@ import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.inventory.ContainerLevelAccess; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R3.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/CartographyInventoryImpl.java index 3988868..440b1ba 100644 --- a/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/CartographyInventoryImpl.java @@ -10,11 +10,11 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.inventory.*; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R3.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/InventoryUtilsImpl.java index 824e0e1..c038360 100644 --- a/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/InventoryUtilsImpl.java @@ -7,11 +7,11 @@ import net.minecraft.world.Container; import net.minecraft.world.MenuProvider; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R3.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_19_R3.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R1.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/ItemUtilsImpl.java index ebff945..50214eb 100644 --- a/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r13; +import com.mojang.authlib.GameProfile; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/PlayerUtilsImpl.java index 6838a17..fbcd523 100644 --- a/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r13/src/main/java/xyz/xenondevs/inventoryaccess/r13/PlayerUtilsImpl.java @@ -8,8 +8,8 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.saveddata.maps.MapDecoration; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_19_R3.CraftServer; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.CraftServer; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -92,7 +92,7 @@ class PlayerUtilsImpl implements PlayerUtils { force, InventoryUtilsImpl.createNMSComponent(prompt) ); - serverPlayer.connection.send(packet); + serverPlayer.connection.connection.send(packet); } } diff --git a/inventoryaccess/inventory-access-r14/pom.xml b/inventoryaccess/inventory-access-r14/pom.xml index bab37d9..3aad389 100644 --- a/inventoryaccess/inventory-access-r14/pom.xml +++ b/inventoryaccess/inventory-access-r14/pom.xml @@ -15,7 +15,7 @@ 17 17 - 1.20-R0.1-SNAPSHOT + 1.19.3-R0.1-SNAPSHOT diff --git a/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/AnvilInventoryImpl.java index 2d84cfe..2d40005 100644 --- a/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/AnvilInventoryImpl.java @@ -14,11 +14,11 @@ import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.inventory.ContainerLevelAccess; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_20_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -30,6 +30,7 @@ import java.util.function.Consumer; class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { + private final Component title; private final List> renameHandlers; private final CraftInventoryView view; private final ServerPlayer player; @@ -43,9 +44,9 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { public AnvilInventoryImpl(ServerPlayer player, Component title, List> renameHandlers) { super(player.nextContainerCounter(), player.getInventory(), - ContainerLevelAccess.create(player.level(), new BlockPos(0, 0, 0))); + ContainerLevelAccess.create(player.level, new BlockPos(0, 0, 0))); - setTitle(title); + this.title = title; this.renameHandlers = renameHandlers; this.player = player; @@ -64,7 +65,7 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { player.containerMenu = this; // send open packet - player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, getTitle())); + player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, title)); // send initial items NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); @@ -141,7 +142,7 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { * @param s The new rename text */ @Override - public boolean setItemName(String s) { + public void setItemName(String s) { // save rename text text = s; @@ -149,10 +150,8 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { if (renameHandlers != null) renameHandlers.forEach(handler -> handler.accept(s)); - // the client expects the item to change to its new name and removes it from the inventory, so it needs to be sent again + // the client expects the item to change to it's new name and removes it from the inventory, so it needs to be sent again sendItem(2); - - return false; } /** diff --git a/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/CartographyInventoryImpl.java index de6dcda..a7f3c33 100644 --- a/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/CartographyInventoryImpl.java @@ -10,17 +10,17 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.inventory.*; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_20_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack; +import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.inventory.CartographyInventory; import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; -import net.minecraft.world.entity.player.Player; import java.lang.reflect.Field; @@ -39,12 +39,12 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp private boolean open; - public CartographyInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title) { + public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) { this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); } public CartographyInventoryImpl(ServerPlayer player, Component title) { - super(player.nextContainerCounter(), player.getInventory(), ContainerLevelAccess.create(player.level(), new BlockPos(0, 0, 0))); + super(player.nextContainerCounter(), player.getInventory(), ContainerLevelAccess.create(player.level, new BlockPos(0, 0, 0))); this.player = player; this.title = title; @@ -115,7 +115,7 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp } @Override - public ItemStack quickMoveStack(Player player, int i) { + public ItemStack quickMoveStack(net.minecraft.world.entity.player.Player entityhuman, int i) { return ItemStack.EMPTY; } @@ -125,12 +125,12 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp } @Override - public boolean stillValid(Player player) { + public boolean stillValid(net.minecraft.world.entity.player.Player entityhuman) { return true; } @Override - protected void clearContainer(Player player, Container container) { + protected void clearContainer(net.minecraft.world.entity.player.Player entityhuman, Container container) { // empty } diff --git a/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/InventoryUtilsImpl.java index 5f16d11..b8f5ea3 100644 --- a/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/InventoryUtilsImpl.java @@ -7,11 +7,11 @@ import net.minecraft.world.Container; import net.minecraft.world.MenuProvider; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_20_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_20_R1.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R2.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/ItemUtilsImpl.java index c6ceac2..320a030 100644 --- a/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r14; +import com.mojang.authlib.GameProfile; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/PlayerUtilsImpl.java index dac8b23..2d52fe0 100644 --- a/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r14/src/main/java/xyz/xenondevs/inventoryaccess/r14/PlayerUtilsImpl.java @@ -8,8 +8,8 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.saveddata.maps.MapDecoration; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_20_R1.CraftServer; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R2.CraftServer; +import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -92,7 +92,7 @@ class PlayerUtilsImpl implements PlayerUtils { force, InventoryUtilsImpl.createNMSComponent(prompt) ); - serverPlayer.connection.send(packet); + serverPlayer.connection.connection.send(packet); } } diff --git a/inventoryaccess/inventory-access-r15/pom.xml b/inventoryaccess/inventory-access-r15/pom.xml index 4155115..b6c61fc 100644 --- a/inventoryaccess/inventory-access-r15/pom.xml +++ b/inventoryaccess/inventory-access-r15/pom.xml @@ -15,7 +15,7 @@ 17 17 - 1.20.2-R0.1-SNAPSHOT + 1.19.4-R0.1-SNAPSHOT diff --git a/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/AnvilInventoryImpl.java index 2f9c025..f90cb57 100644 --- a/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/AnvilInventoryImpl.java @@ -14,11 +14,11 @@ import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.inventory.ContainerLevelAccess; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R3.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -30,6 +30,7 @@ import java.util.function.Consumer; class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { + private final Component title; private final List> renameHandlers; private final CraftInventoryView view; private final ServerPlayer player; @@ -43,9 +44,9 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { public AnvilInventoryImpl(ServerPlayer player, Component title, List> renameHandlers) { super(player.nextContainerCounter(), player.getInventory(), - ContainerLevelAccess.create(player.level(), new BlockPos(0, 0, 0))); + ContainerLevelAccess.create(player.level, new BlockPos(0, 0, 0))); - setTitle(title); + this.title = title; this.renameHandlers = renameHandlers; this.player = player; @@ -64,7 +65,7 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { player.containerMenu = this; // send open packet - player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, getTitle())); + player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, title)); // send initial items NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); @@ -141,7 +142,7 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { * @param s The new rename text */ @Override - public boolean setItemName(String s) { + public void setItemName(String s) { // save rename text text = s; @@ -149,10 +150,8 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { if (renameHandlers != null) renameHandlers.forEach(handler -> handler.accept(s)); - // the client expects the item to change to its new name and removes it from the inventory, so it needs to be sent again + // the client expects the item to change to it's new name and removes it from the inventory, so it needs to be sent again sendItem(2); - - return false; } /** diff --git a/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/CartographyInventoryImpl.java index ee60a45..f12ea43 100644 --- a/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/CartographyInventoryImpl.java @@ -10,17 +10,17 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.inventory.*; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R3.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; +import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.inventory.CartographyInventory; import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; -import net.minecraft.world.entity.player.Player; import java.lang.reflect.Field; @@ -39,12 +39,12 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp private boolean open; - public CartographyInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title) { + public CartographyInventoryImpl(Player player, @NotNull ComponentWrapper title) { this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); } public CartographyInventoryImpl(ServerPlayer player, Component title) { - super(player.nextContainerCounter(), player.getInventory(), ContainerLevelAccess.create(player.level(), new BlockPos(0, 0, 0))); + super(player.nextContainerCounter(), player.getInventory(), ContainerLevelAccess.create(player.level, new BlockPos(0, 0, 0))); this.player = player; this.title = title; @@ -115,7 +115,7 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp } @Override - public ItemStack quickMoveStack(Player player, int i) { + public ItemStack quickMoveStack(net.minecraft.world.entity.player.Player entityhuman, int i) { return ItemStack.EMPTY; } @@ -125,12 +125,12 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp } @Override - public boolean stillValid(Player player) { + public boolean stillValid(net.minecraft.world.entity.player.Player entityhuman) { return true; } @Override - protected void clearContainer(Player player, Container container) { + protected void clearContainer(net.minecraft.world.entity.player.Player entityhuman, Container container) { // empty } diff --git a/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/InventoryUtilsImpl.java index 030751b..5b5ce77 100644 --- a/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/InventoryUtilsImpl.java @@ -7,11 +7,11 @@ import net.minecraft.world.Container; import net.minecraft.world.MenuProvider; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_20_R2.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R3.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R3.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/ItemUtilsImpl.java index 969903b..c50a725 100644 --- a/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r15; +import com.mojang.authlib.GameProfile; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/PlayerUtilsImpl.java index 46f5c9c..0f59ff8 100644 --- a/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r15/src/main/java/xyz/xenondevs/inventoryaccess/r15/PlayerUtilsImpl.java @@ -1,15 +1,15 @@ package xyz.xenondevs.inventoryaccess.r15; -import net.minecraft.network.protocol.common.ClientboundResourcePackPacket; import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; +import net.minecraft.network.protocol.game.ClientboundResourcePackPacket; import net.minecraft.server.PlayerAdvancements; import net.minecraft.server.ServerAdvancementManager; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.saveddata.maps.MapDecoration; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_20_R2.CraftServer; -import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R3.CraftServer; +import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/inventoryaccess/inventory-access-r16/pom.xml b/inventoryaccess/inventory-access-r16/pom.xml new file mode 100644 index 0000000..d7fb20e --- /dev/null +++ b/inventoryaccess/inventory-access-r16/pom.xml @@ -0,0 +1,139 @@ + + + + xyz.xenondevs.invui + invui-parent + 1.20 + ../../pom.xml + + 4.0.0 + + inventory-access-r16 + + + 17 + 17 + 1.20-R0.1-SNAPSHOT + + + + + org.spigotmc + spigot + ${spigot.version} + remapped-mojang + provided + + + xyz.xenondevs.invui + inventory-access + ${project.parent.version} + + + + + + + xyz.xenondevs.string-remapper + string-remapper-maven-plugin + 1.2 + + + + remap-spigot + + remap + + + ${spigot.version} + spigot + ${project.build.directory}/classes + ${project.build.directory}/classes-spigot + + + + + remap-mojang + + remap + + + ${spigot.version} + mojang + ${project.build.directory}/classes + ${project.build.directory}/classes-mojang + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.2 + + + default-jar + none + + + spigot + + jar + + + ${project.build.directory}/classes-spigot + + + + mojang + + jar + + + ${project.build.directory}/classes-mojang + remapped-mojang + + + + + + + net.md-5 + specialsource-maven-plugin + 1.2.2 + + + package + + remap + + remap-obf + + org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang + true + org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang + false + ${project.artifactId}-${project.version}-remapped-obf + + + + package + + remap + + remap-spigot + + ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar + org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot + org.spigotmc:spigot:${spigot.version}:jar:remapped-obf + + + + + + + + \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/AnvilInventoryImpl.java new file mode 100644 index 0000000..2a7bf3b --- /dev/null +++ b/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/AnvilInventoryImpl.java @@ -0,0 +1,190 @@ +package xyz.xenondevs.inventoryaccess.r16; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.AnvilMenu; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_20_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.event.inventory.PrepareAnvilEvent; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.inventoryaccess.abstraction.inventory.AnvilInventory; +import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; + +import java.util.List; +import java.util.function.Consumer; + +class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { + + private final List> renameHandlers; + private final CraftInventoryView view; + private final ServerPlayer player; + + private String text; + private boolean open; + + public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title, List> renameHandlers) { + this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandlers); + } + + public AnvilInventoryImpl(ServerPlayer player, Component title, List> renameHandlers) { + super(player.nextContainerCounter(), player.getInventory(), + ContainerLevelAccess.create(player.level(), new BlockPos(0, 0, 0))); + + setTitle(title); + this.renameHandlers = renameHandlers; + this.player = player; + + CraftInventoryAnvil inventory = new CraftInventoryAnvil(access.getLocation(), + inputSlots, resultSlots, this); + this.view = new CraftInventoryView(player.getBukkitEntity(), inventory, this); + } + + public void open() { + open = true; + + // call the InventoryOpenEvent + CraftEventFactory.callInventoryOpenEvent(player, this); + + // set active container + player.containerMenu = this; + + // send open packet + player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, getTitle())); + + // send initial items + NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); + player.connection.send(new ClientboundContainerSetContentPacket(getActiveWindowId(player), incrementStateId(), itemsList, ItemStack.EMPTY)); + + // init menu + player.initMenu(this); + } + + public void sendItem(int slot) { + player.connection.send(new ClientboundContainerSetSlotPacket(getActiveWindowId(player), incrementStateId(), slot, getItem(slot))); + } + + public void setItem(int slot, ItemStack item) { + if (slot < 2) inputSlots.setItem(slot, item); + else resultSlots.setItem(0, item); + + if (open) sendItem(slot); + } + + private ItemStack getItem(int slot) { + if (slot < 2) return inputSlots.getItem(slot); + else return resultSlots.getItem(0); + } + + private int getActiveWindowId(ServerPlayer player) { + AbstractContainerMenu container = player.containerMenu; + return container == null ? -1 : container.containerId; + } + + @Override + public void setItem(int slot, org.bukkit.inventory.ItemStack itemStack) { + setItem(slot, CraftItemStack.asNMSCopy(itemStack)); + } + + @Override + public @NotNull Inventory getBukkitInventory() { + return view.getTopInventory(); + } + + @Override + public String getRenameText() { + return text; + } + + @Override + public boolean isOpen() { + return open; + } + + // --- AnvilMenu --- + + @Override + public CraftInventoryView getBukkitView() { + return view; + } + + /** + * Called every tick to see if the {@link Player} can still use that container. + * (Used to for checking the distance between the {@link Player} and the container + * and closing the window when the distance gets too big.) + * + * @param player The {@link Player} + * @return If the {@link Player} can still use that container + */ + @Override + public boolean stillValid(Player player) { + return true; + } + + /** + * Called when the rename text gets changed. + * + * @param s The new rename text + */ + @Override + public boolean setItemName(String s) { + // save rename text + text = s; + + // call rename handlers + if (renameHandlers != null) + renameHandlers.forEach(handler -> handler.accept(s)); + + // the client expects the item to change to its new name and removes it from the inventory, so it needs to be sent again + sendItem(2); + + return false; + } + + /** + * Called when the container is closed to give the items back. + * + * @param player The {@link Player} that closed this container + */ + @Override + public void removed(Player player) { + open = false; + } + + + /** + * Called when the container gets closed to put items back into a players + * inventory or drop them in the world. + * + * @param player The {@link Player} that closed this container + * @param container The container + */ + @Override + protected void clearContainer(Player player, Container container) { + open = false; + } + + /** + * Called when both items in the {@link AnvilMenu#inputSlots} were set to create + * the resulting product, calculate the level cost and call the {@link PrepareAnvilEvent}. + */ + @Override + public void createResult() { + // empty + } + +} diff --git a/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/CartographyInventoryImpl.java new file mode 100644 index 0000000..bf745d0 --- /dev/null +++ b/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/CartographyInventoryImpl.java @@ -0,0 +1,137 @@ +package xyz.xenondevs.inventoryaccess.r16; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_20_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.inventoryaccess.abstraction.inventory.CartographyInventory; +import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; +import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; +import net.minecraft.world.entity.player.Player; + +import java.lang.reflect.Field; + +class CartographyInventoryImpl extends CartographyTableMenu implements CartographyInventory { + + private static final Field RESULT_CONTAINER_FIELD = ReflectionUtils.getField( + CartographyTableMenu.class, + true, + "SRF(net.minecraft.world.inventory.CartographyTableMenu resultContainer)" + ); + + private final ResultContainer resultContainer = ReflectionUtils.getFieldValue(RESULT_CONTAINER_FIELD, this); + private final Component title; + private final CraftInventoryView view; + private final ServerPlayer player; + + private boolean open; + + public CartographyInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title) { + this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); + } + + public CartographyInventoryImpl(ServerPlayer player, Component title) { + super(player.nextContainerCounter(), player.getInventory(), ContainerLevelAccess.create(player.level(), new BlockPos(0, 0, 0))); + + this.player = player; + this.title = title; + CraftInventoryCartography inventory = new CraftInventoryCartography(container, resultContainer); + view = new CraftInventoryView(player.getBukkitEntity(), inventory, this); + } + + public void open() { + open = true; + + // call the InventoryOpenEvent + CraftEventFactory.callInventoryOpenEvent(player, this); + + // set active container + player.containerMenu = this; + + // send open packet + player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.CARTOGRAPHY_TABLE, title)); + + // send initial items + NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); + player.connection.send(new ClientboundContainerSetContentPacket(InventoryUtilsImpl.getActiveWindowId(player), incrementStateId(), itemsList, ItemStack.EMPTY)); + + // init menu + player.initMenu(this); + } + + @Override + public boolean isOpen() { + return open; + } + + public void sendItem(int slot) { + player.connection.send(new ClientboundContainerSetSlotPacket(InventoryUtilsImpl.getActiveWindowId(player), slot, incrementStateId(), getItem(slot))); + } + + public void setItem(int slot, ItemStack item) { + if (slot < 2) container.setItem(slot, item); + else resultContainer.setItem(0, item); + + if (open) sendItem(slot); + } + + private ItemStack getItem(int slot) { + if (slot < 2) return container.getItem(slot); + else return resultContainer.getItem(0); + } + + @Override + public void setItem(int slot, org.bukkit.inventory.ItemStack itemStack) { + setItem(slot, CraftItemStack.asNMSCopy(itemStack)); + } + + @Override + public Inventory getBukkitInventory() { + return view.getTopInventory(); + } + + // --- CartographyTableMenu --- + + @Override + public CraftInventoryView getBukkitView() { + return view; + } + + @Override + public void slotsChanged(Container container) { + } + + @Override + public ItemStack quickMoveStack(Player player, int i) { + return ItemStack.EMPTY; + } + + @Override + public boolean canTakeItemForPickAll(ItemStack itemstack, Slot slot) { + return true; + } + + @Override + public boolean stillValid(Player player) { + return true; + } + + @Override + protected void clearContainer(Player player, Container container) { + // empty + } + +} diff --git a/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/InventoryUtilsImpl.java new file mode 100644 index 0000000..0df79ce --- /dev/null +++ b/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/InventoryUtilsImpl.java @@ -0,0 +1,73 @@ +package xyz.xenondevs.inventoryaccess.r16; + +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.Container; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_20_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_20_R1.util.CraftChatMessage; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import xyz.xenondevs.inventoryaccess.abstraction.util.InventoryUtils; +import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; + +class InventoryUtilsImpl implements InventoryUtils { + + public static Component createNMSComponent(ComponentWrapper component) { + if (component == null) return null; + return CraftChatMessage.fromJSON(component.serializeToJson()); + } + + public static int getActiveWindowId(ServerPlayer player) { + AbstractContainerMenu container = player.containerMenu; + return container == null ? -1 : container.containerId; + } + + @Override + public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory) { + openCustomInventory(player, inventory, null); + } + + @Override + public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + MenuType menuType = CraftContainer.getNotchInventoryType(inventory); + + if (serverPlayer.connection != null) { + AbstractContainerMenu menu = new CraftContainer(inventory, serverPlayer, serverPlayer.nextContainerCounter()); + menu = CraftEventFactory.callInventoryOpenEvent(serverPlayer, menu); + if (menu != null) { + Container container = ((CraftInventory) inventory).getInventory(); + Component titleComponent; + if (title == null) { + if (container instanceof MenuProvider) + titleComponent = ((MenuProvider) container).getDisplayName(); + else titleComponent = CraftChatMessage.fromString(menu.getBukkitView().getTitle())[0]; + } else titleComponent = createNMSComponent(title); + + menu.checkReachable = false; + serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menuType, titleComponent)); + serverPlayer.containerMenu = menu; + serverPlayer.initMenu(menu); + } + } + + } + + @Override + public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + AbstractContainerMenu menu = serverPlayer.containerMenu; + serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title))); + serverPlayer.initMenu(menu); + } + +} diff --git a/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/ItemUtilsImpl.java new file mode 100644 index 0000000..fb59278 --- /dev/null +++ b/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/ItemUtilsImpl.java @@ -0,0 +1,102 @@ +package xyz.xenondevs.inventoryaccess.r16; + +import com.mojang.authlib.GameProfile; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtIo; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; +import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; +import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; +import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; + +import java.io.*; +import java.lang.reflect.Method; +import java.util.List; +import java.util.stream.Collectors; + +class ItemUtilsImpl implements ItemUtils { + + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + + @Override + public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + serializeItemStack(itemStack, out, compressed); + return out.toByteArray(); + } + + @Override + public void serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, @NotNull OutputStream outputStream, boolean compressed) { + try { + ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); + CompoundTag nbt = nmsStack.save(new CompoundTag()); + + if (compressed) { + NbtIo.writeCompressed(nbt, outputStream); + } else { + DataOutputStream dataOut = new DataOutputStream(outputStream); + NbtIo.write(nbt, dataOut); + } + + outputStream.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public org.bukkit.inventory.ItemStack deserializeItemStack(byte[] data, boolean compressed) { + ByteArrayInputStream in = new ByteArrayInputStream(data); + return deserializeItemStack(in, compressed); + } + + @Override + public org.bukkit.inventory.ItemStack deserializeItemStack(@NotNull InputStream inputStream, boolean compressed) { + try { + CompoundTag nbt; + if (compressed) { + nbt = NbtIo.readCompressed(inputStream); + } else { + DataInputStream dataIn = new DataInputStream(inputStream); + nbt = NbtIo.read(dataIn); + } + + ItemStack itemStack = ItemStack.of(nbt); + + return CraftItemStack.asCraftMirror(itemStack); + } catch (IOException e) { + e.printStackTrace(); + } + + return null; + } + + @Override + public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) { + ReflectionUtils.setFieldValue( + ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, + itemMeta, + name.serializeToJson() + ); + } + + @Override + public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) { + ReflectionUtils.setFieldValue( + ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, + itemMeta, + lore.stream().map(ComponentWrapper::serializeToJson).collect(Collectors.toList()) + ); + } + + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + +} \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/PlayerUtilsImpl.java new file mode 100644 index 0000000..ec74bf7 --- /dev/null +++ b/inventoryaccess/inventory-access-r16/src/main/java/xyz/xenondevs/inventoryaccess/r16/PlayerUtilsImpl.java @@ -0,0 +1,98 @@ +package xyz.xenondevs.inventoryaccess.r16; + +import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; +import net.minecraft.network.protocol.game.ClientboundResourcePackPacket; +import net.minecraft.server.PlayerAdvancements; +import net.minecraft.server.ServerAdvancementManager; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.saveddata.maps.MapDecoration; +import net.minecraft.world.level.saveddata.maps.MapItemSavedData; +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_20_R1.CraftServer; +import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import xyz.xenondevs.inventoryaccess.abstraction.util.PlayerUtils; +import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; +import xyz.xenondevs.inventoryaccess.map.MapIcon; +import xyz.xenondevs.inventoryaccess.map.MapPatch; +import xyz.xenondevs.inventoryaccess.util.DataUtils; +import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +class PlayerUtilsImpl implements PlayerUtils { + + private static final Method REGISTER_LISTENERS_METHOD = ReflectionUtils.getMethod( + PlayerAdvancements.class, + true, + "ASRM(net/minecraft/server/PlayerAdvancements.registerListeners(Lnet/minecraft/server/ServerAdvancementManager;)V)", + ServerAdvancementManager.class + ); + + @Override + public void stopAdvancementListening(@NotNull Player player) { + stopAdvancementListening(((CraftPlayer) player).getHandle()); + } + + @Override + public void stopAdvancementListening(@NotNull Object player) { + ((ServerPlayer) player).getAdvancements().stopListening(); + } + + @Override + public void startAdvancementListening(@NotNull Player player) { + startAdvancementListening(((CraftPlayer) player).getHandle()); + } + + @Override + public void startAdvancementListening(@NotNull Object player) { + PlayerAdvancements advancements = ((ServerPlayer) player).getAdvancements(); + ServerAdvancementManager manager = ((CraftServer) Bukkit.getServer()).getServer().getAdvancements(); + ReflectionUtils.invokeMethod(REGISTER_LISTENERS_METHOD, advancements, manager); + } + + @Override + public void sendMapUpdate(@NotNull Player player, int mapId, byte scale, boolean locked, @Nullable MapPatch mapPatch, @Nullable List icons) { + List decorations = icons != null ? icons.stream().map(this::toMapDecoration).collect(Collectors.toCollection(ArrayList::new)) : null; + MapItemSavedData.MapPatch patch = toMapPatch(mapPatch); + ClientboundMapItemDataPacket packet = new ClientboundMapItemDataPacket(mapId, scale, locked, decorations, patch); + ((CraftPlayer) player).getHandle().connection.send(packet); + } + + private MapDecoration toMapDecoration(MapIcon icon) { + return new MapDecoration( + MapDecoration.Type.byIcon(icon.getType().getId()), + icon.getX(), icon.getY(), + icon.getRot(), + icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null + ); + } + + private MapItemSavedData.MapPatch toMapPatch(MapPatch patch) { + if (patch == null) return null; + + return new MapItemSavedData.MapPatch( + patch.getStartX(), patch.getStartY(), + patch.getWidth(), patch.getHeight(), + patch.getColors() + ); + } + + @Override + public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable ComponentWrapper prompt, boolean force) { + var serverPlayer = ((CraftPlayer) player).getHandle(); + var packet = new ClientboundResourcePackPacket( + url, + DataUtils.toHexadecimalString(hash), + force, + InventoryUtilsImpl.createNMSComponent(prompt) + ); + serverPlayer.connection.send(packet); + } + +} diff --git a/inventoryaccess/inventory-access-r17/pom.xml b/inventoryaccess/inventory-access-r17/pom.xml new file mode 100644 index 0000000..7e811a7 --- /dev/null +++ b/inventoryaccess/inventory-access-r17/pom.xml @@ -0,0 +1,139 @@ + + + + xyz.xenondevs.invui + invui-parent + 1.20 + ../../pom.xml + + 4.0.0 + + inventory-access-r17 + + + 17 + 17 + 1.20.2-R0.1-SNAPSHOT + + + + + org.spigotmc + spigot + ${spigot.version} + remapped-mojang + provided + + + xyz.xenondevs.invui + inventory-access + ${project.parent.version} + + + + + + + xyz.xenondevs.string-remapper + string-remapper-maven-plugin + 1.2 + + + + remap-spigot + + remap + + + ${spigot.version} + spigot + ${project.build.directory}/classes + ${project.build.directory}/classes-spigot + + + + + remap-mojang + + remap + + + ${spigot.version} + mojang + ${project.build.directory}/classes + ${project.build.directory}/classes-mojang + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.2 + + + default-jar + none + + + spigot + + jar + + + ${project.build.directory}/classes-spigot + + + + mojang + + jar + + + ${project.build.directory}/classes-mojang + remapped-mojang + + + + + + + net.md-5 + specialsource-maven-plugin + 1.2.2 + + + package + + remap + + remap-obf + + org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang + true + org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang + false + ${project.artifactId}-${project.version}-remapped-obf + + + + package + + remap + + remap-spigot + + ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar + org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot + org.spigotmc:spigot:${spigot.version}:jar:remapped-obf + + + + + + + + \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/AnvilInventoryImpl.java new file mode 100644 index 0000000..ad9d427 --- /dev/null +++ b/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/AnvilInventoryImpl.java @@ -0,0 +1,190 @@ +package xyz.xenondevs.inventoryaccess.r17; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.AnvilMenu; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack; +import org.bukkit.event.inventory.PrepareAnvilEvent; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.inventoryaccess.abstraction.inventory.AnvilInventory; +import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; + +import java.util.List; +import java.util.function.Consumer; + +class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { + + private final List> renameHandlers; + private final CraftInventoryView view; + private final ServerPlayer player; + + private String text; + private boolean open; + + public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title, List> renameHandlers) { + this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandlers); + } + + public AnvilInventoryImpl(ServerPlayer player, Component title, List> renameHandlers) { + super(player.nextContainerCounter(), player.getInventory(), + ContainerLevelAccess.create(player.level(), new BlockPos(0, 0, 0))); + + setTitle(title); + this.renameHandlers = renameHandlers; + this.player = player; + + CraftInventoryAnvil inventory = new CraftInventoryAnvil(access.getLocation(), + inputSlots, resultSlots, this); + this.view = new CraftInventoryView(player.getBukkitEntity(), inventory, this); + } + + public void open() { + open = true; + + // call the InventoryOpenEvent + CraftEventFactory.callInventoryOpenEvent(player, this); + + // set active container + player.containerMenu = this; + + // send open packet + player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, getTitle())); + + // send initial items + NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); + player.connection.send(new ClientboundContainerSetContentPacket(getActiveWindowId(player), incrementStateId(), itemsList, ItemStack.EMPTY)); + + // init menu + player.initMenu(this); + } + + public void sendItem(int slot) { + player.connection.send(new ClientboundContainerSetSlotPacket(getActiveWindowId(player), incrementStateId(), slot, getItem(slot))); + } + + public void setItem(int slot, ItemStack item) { + if (slot < 2) inputSlots.setItem(slot, item); + else resultSlots.setItem(0, item); + + if (open) sendItem(slot); + } + + private ItemStack getItem(int slot) { + if (slot < 2) return inputSlots.getItem(slot); + else return resultSlots.getItem(0); + } + + private int getActiveWindowId(ServerPlayer player) { + AbstractContainerMenu container = player.containerMenu; + return container == null ? -1 : container.containerId; + } + + @Override + public void setItem(int slot, org.bukkit.inventory.ItemStack itemStack) { + setItem(slot, CraftItemStack.asNMSCopy(itemStack)); + } + + @Override + public @NotNull Inventory getBukkitInventory() { + return view.getTopInventory(); + } + + @Override + public String getRenameText() { + return text; + } + + @Override + public boolean isOpen() { + return open; + } + + // --- AnvilMenu --- + + @Override + public CraftInventoryView getBukkitView() { + return view; + } + + /** + * Called every tick to see if the {@link Player} can still use that container. + * (Used to for checking the distance between the {@link Player} and the container + * and closing the window when the distance gets too big.) + * + * @param player The {@link Player} + * @return If the {@link Player} can still use that container + */ + @Override + public boolean stillValid(Player player) { + return true; + } + + /** + * Called when the rename text gets changed. + * + * @param s The new rename text + */ + @Override + public boolean setItemName(String s) { + // save rename text + text = s; + + // call rename handlers + if (renameHandlers != null) + renameHandlers.forEach(handler -> handler.accept(s)); + + // the client expects the item to change to its new name and removes it from the inventory, so it needs to be sent again + sendItem(2); + + return false; + } + + /** + * Called when the container is closed to give the items back. + * + * @param player The {@link Player} that closed this container + */ + @Override + public void removed(Player player) { + open = false; + } + + + /** + * Called when the container gets closed to put items back into a players + * inventory or drop them in the world. + * + * @param player The {@link Player} that closed this container + * @param container The container + */ + @Override + protected void clearContainer(Player player, Container container) { + open = false; + } + + /** + * Called when both items in the {@link AnvilMenu#inputSlots} were set to create + * the resulting product, calculate the level cost and call the {@link PrepareAnvilEvent}. + */ + @Override + public void createResult() { + // empty + } + +} diff --git a/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/CartographyInventoryImpl.java new file mode 100644 index 0000000..0d40abf --- /dev/null +++ b/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/CartographyInventoryImpl.java @@ -0,0 +1,137 @@ +package xyz.xenondevs.inventoryaccess.r17; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.inventoryaccess.abstraction.inventory.CartographyInventory; +import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; +import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; +import net.minecraft.world.entity.player.Player; + +import java.lang.reflect.Field; + +class CartographyInventoryImpl extends CartographyTableMenu implements CartographyInventory { + + private static final Field RESULT_CONTAINER_FIELD = ReflectionUtils.getField( + CartographyTableMenu.class, + true, + "SRF(net.minecraft.world.inventory.CartographyTableMenu resultContainer)" + ); + + private final ResultContainer resultContainer = ReflectionUtils.getFieldValue(RESULT_CONTAINER_FIELD, this); + private final Component title; + private final CraftInventoryView view; + private final ServerPlayer player; + + private boolean open; + + public CartographyInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title) { + this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); + } + + public CartographyInventoryImpl(ServerPlayer player, Component title) { + super(player.nextContainerCounter(), player.getInventory(), ContainerLevelAccess.create(player.level(), new BlockPos(0, 0, 0))); + + this.player = player; + this.title = title; + CraftInventoryCartography inventory = new CraftInventoryCartography(container, resultContainer); + view = new CraftInventoryView(player.getBukkitEntity(), inventory, this); + } + + public void open() { + open = true; + + // call the InventoryOpenEvent + CraftEventFactory.callInventoryOpenEvent(player, this); + + // set active container + player.containerMenu = this; + + // send open packet + player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.CARTOGRAPHY_TABLE, title)); + + // send initial items + NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); + player.connection.send(new ClientboundContainerSetContentPacket(InventoryUtilsImpl.getActiveWindowId(player), incrementStateId(), itemsList, ItemStack.EMPTY)); + + // init menu + player.initMenu(this); + } + + @Override + public boolean isOpen() { + return open; + } + + public void sendItem(int slot) { + player.connection.send(new ClientboundContainerSetSlotPacket(InventoryUtilsImpl.getActiveWindowId(player), slot, incrementStateId(), getItem(slot))); + } + + public void setItem(int slot, ItemStack item) { + if (slot < 2) container.setItem(slot, item); + else resultContainer.setItem(0, item); + + if (open) sendItem(slot); + } + + private ItemStack getItem(int slot) { + if (slot < 2) return container.getItem(slot); + else return resultContainer.getItem(0); + } + + @Override + public void setItem(int slot, org.bukkit.inventory.ItemStack itemStack) { + setItem(slot, CraftItemStack.asNMSCopy(itemStack)); + } + + @Override + public Inventory getBukkitInventory() { + return view.getTopInventory(); + } + + // --- CartographyTableMenu --- + + @Override + public CraftInventoryView getBukkitView() { + return view; + } + + @Override + public void slotsChanged(Container container) { + } + + @Override + public ItemStack quickMoveStack(Player player, int i) { + return ItemStack.EMPTY; + } + + @Override + public boolean canTakeItemForPickAll(ItemStack itemstack, Slot slot) { + return true; + } + + @Override + public boolean stillValid(Player player) { + return true; + } + + @Override + protected void clearContainer(Player player, Container container) { + // empty + } + +} diff --git a/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/InventoryUtilsImpl.java new file mode 100644 index 0000000..9f8b534 --- /dev/null +++ b/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/InventoryUtilsImpl.java @@ -0,0 +1,73 @@ +package xyz.xenondevs.inventoryaccess.r17; + +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.Container; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_20_R2.util.CraftChatMessage; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import xyz.xenondevs.inventoryaccess.abstraction.util.InventoryUtils; +import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; + +class InventoryUtilsImpl implements InventoryUtils { + + public static Component createNMSComponent(ComponentWrapper component) { + if (component == null) return null; + return CraftChatMessage.fromJSON(component.serializeToJson()); + } + + public static int getActiveWindowId(ServerPlayer player) { + AbstractContainerMenu container = player.containerMenu; + return container == null ? -1 : container.containerId; + } + + @Override + public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory) { + openCustomInventory(player, inventory, null); + } + + @Override + public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + MenuType menuType = CraftContainer.getNotchInventoryType(inventory); + + if (serverPlayer.connection != null) { + AbstractContainerMenu menu = new CraftContainer(inventory, serverPlayer, serverPlayer.nextContainerCounter()); + menu = CraftEventFactory.callInventoryOpenEvent(serverPlayer, menu); + if (menu != null) { + Container container = ((CraftInventory) inventory).getInventory(); + Component titleComponent; + if (title == null) { + if (container instanceof MenuProvider) + titleComponent = ((MenuProvider) container).getDisplayName(); + else titleComponent = CraftChatMessage.fromString(menu.getBukkitView().getTitle())[0]; + } else titleComponent = createNMSComponent(title); + + menu.checkReachable = false; + serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menuType, titleComponent)); + serverPlayer.containerMenu = menu; + serverPlayer.initMenu(menu); + } + } + + } + + @Override + public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) { + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + AbstractContainerMenu menu = serverPlayer.containerMenu; + serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title))); + serverPlayer.initMenu(menu); + } + +} diff --git a/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/ItemUtilsImpl.java new file mode 100644 index 0000000..f8420cf --- /dev/null +++ b/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/ItemUtilsImpl.java @@ -0,0 +1,102 @@ +package xyz.xenondevs.inventoryaccess.r17; + +import com.mojang.authlib.GameProfile; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtIo; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; +import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; +import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; +import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; +import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; + +import java.io.*; +import java.lang.reflect.Method; +import java.util.List; +import java.util.stream.Collectors; + +class ItemUtilsImpl implements ItemUtils { + + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + + @Override + public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + serializeItemStack(itemStack, out, compressed); + return out.toByteArray(); + } + + @Override + public void serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, @NotNull OutputStream outputStream, boolean compressed) { + try { + ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); + CompoundTag nbt = nmsStack.save(new CompoundTag()); + + if (compressed) { + NbtIo.writeCompressed(nbt, outputStream); + } else { + DataOutputStream dataOut = new DataOutputStream(outputStream); + NbtIo.write(nbt, dataOut); + } + + outputStream.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public org.bukkit.inventory.ItemStack deserializeItemStack(byte[] data, boolean compressed) { + ByteArrayInputStream in = new ByteArrayInputStream(data); + return deserializeItemStack(in, compressed); + } + + @Override + public org.bukkit.inventory.ItemStack deserializeItemStack(@NotNull InputStream inputStream, boolean compressed) { + try { + CompoundTag nbt; + if (compressed) { + nbt = NbtIo.readCompressed(inputStream); + } else { + DataInputStream dataIn = new DataInputStream(inputStream); + nbt = NbtIo.read(dataIn); + } + + ItemStack itemStack = ItemStack.of(nbt); + + return CraftItemStack.asCraftMirror(itemStack); + } catch (IOException e) { + e.printStackTrace(); + } + + return null; + } + + @Override + public void setDisplayName(@NotNull ItemMeta itemMeta, @NotNull ComponentWrapper name) { + ReflectionUtils.setFieldValue( + ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, + itemMeta, + name.serializeToJson() + ); + } + + @Override + public void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore) { + ReflectionUtils.setFieldValue( + ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, + itemMeta, + lore.stream().map(ComponentWrapper::serializeToJson).collect(Collectors.toList()) + ); + } + + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + +} \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/PlayerUtilsImpl.java new file mode 100644 index 0000000..7e53906 --- /dev/null +++ b/inventoryaccess/inventory-access-r17/src/main/java/xyz/xenondevs/inventoryaccess/r17/PlayerUtilsImpl.java @@ -0,0 +1,98 @@ +package xyz.xenondevs.inventoryaccess.r17; + +import net.minecraft.network.protocol.common.ClientboundResourcePackPacket; +import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; +import net.minecraft.server.PlayerAdvancements; +import net.minecraft.server.ServerAdvancementManager; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.saveddata.maps.MapDecoration; +import net.minecraft.world.level.saveddata.maps.MapItemSavedData; +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_20_R2.CraftServer; +import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import xyz.xenondevs.inventoryaccess.abstraction.util.PlayerUtils; +import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; +import xyz.xenondevs.inventoryaccess.map.MapIcon; +import xyz.xenondevs.inventoryaccess.map.MapPatch; +import xyz.xenondevs.inventoryaccess.util.DataUtils; +import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +class PlayerUtilsImpl implements PlayerUtils { + + private static final Method REGISTER_LISTENERS_METHOD = ReflectionUtils.getMethod( + PlayerAdvancements.class, + true, + "ASRM(net/minecraft/server/PlayerAdvancements.registerListeners(Lnet/minecraft/server/ServerAdvancementManager;)V)", + ServerAdvancementManager.class + ); + + @Override + public void stopAdvancementListening(@NotNull Player player) { + stopAdvancementListening(((CraftPlayer) player).getHandle()); + } + + @Override + public void stopAdvancementListening(@NotNull Object player) { + ((ServerPlayer) player).getAdvancements().stopListening(); + } + + @Override + public void startAdvancementListening(@NotNull Player player) { + startAdvancementListening(((CraftPlayer) player).getHandle()); + } + + @Override + public void startAdvancementListening(@NotNull Object player) { + PlayerAdvancements advancements = ((ServerPlayer) player).getAdvancements(); + ServerAdvancementManager manager = ((CraftServer) Bukkit.getServer()).getServer().getAdvancements(); + ReflectionUtils.invokeMethod(REGISTER_LISTENERS_METHOD, advancements, manager); + } + + @Override + public void sendMapUpdate(@NotNull Player player, int mapId, byte scale, boolean locked, @Nullable MapPatch mapPatch, @Nullable List icons) { + List decorations = icons != null ? icons.stream().map(this::toMapDecoration).collect(Collectors.toCollection(ArrayList::new)) : null; + MapItemSavedData.MapPatch patch = toMapPatch(mapPatch); + ClientboundMapItemDataPacket packet = new ClientboundMapItemDataPacket(mapId, scale, locked, decorations, patch); + ((CraftPlayer) player).getHandle().connection.send(packet); + } + + private MapDecoration toMapDecoration(MapIcon icon) { + return new MapDecoration( + MapDecoration.Type.byIcon(icon.getType().getId()), + icon.getX(), icon.getY(), + icon.getRot(), + icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null + ); + } + + private MapItemSavedData.MapPatch toMapPatch(MapPatch patch) { + if (patch == null) return null; + + return new MapItemSavedData.MapPatch( + patch.getStartX(), patch.getStartY(), + patch.getWidth(), patch.getHeight(), + patch.getColors() + ); + } + + @Override + public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable ComponentWrapper prompt, boolean force) { + var serverPlayer = ((CraftPlayer) player).getHandle(); + var packet = new ClientboundResourcePackPacket( + url, + DataUtils.toHexadecimalString(hash), + force, + InventoryUtilsImpl.createNMSComponent(prompt) + ); + serverPlayer.connection.send(packet); + } + +} diff --git a/inventoryaccess/inventory-access-r2/pom.xml b/inventoryaccess/inventory-access-r2/pom.xml index 0581b16..bc5aba4 100644 --- a/inventoryaccess/inventory-access-r2/pom.xml +++ b/inventoryaccess/inventory-access-r2/pom.xml @@ -21,7 +21,7 @@ org.spigotmc spigot - 1.15.2-R0.1-SNAPSHOT + 1.14-R0.1-SNAPSHOT provided diff --git a/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/AnvilInventoryImpl.java index e07832f..5e410aa 100644 --- a/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/AnvilInventoryImpl.java @@ -1,11 +1,11 @@ package xyz.xenondevs.inventoryaccess.r2; -import net.minecraft.server.v1_15_R1.*; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; +import net.minecraft.server.v1_14_R1.*; +import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; diff --git a/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/CartographyInventoryImpl.java index d64be69..7355f65 100644 --- a/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/CartographyInventoryImpl.java @@ -1,11 +1,11 @@ package xyz.xenondevs.inventoryaccess.r2; -import net.minecraft.server.v1_15_R1.*; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; +import net.minecraft.server.v1_14_R1.*; +import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -49,7 +49,7 @@ class CartographyInventoryImpl extends ContainerCartography implements Cartograp player.activeContainer = this; // send open packet - player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.CARTOGRAPHY_TABLE, title)); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.CARTOGRAPHY, title)); // send initial items NonNullList itemsList = NonNullList.a(ItemStack.a, getItem(0), getItem(1), getItem(2)); diff --git a/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/InventoryUtilsImpl.java index 1c62a00..e901e34 100644 --- a/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/InventoryUtilsImpl.java @@ -1,11 +1,12 @@ package xyz.xenondevs.inventoryaccess.r2; -import net.minecraft.server.v1_15_R1.*; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventory; +import net.minecraft.server.v1_14_R1.*; +import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventory; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -14,6 +15,28 @@ import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; class InventoryUtilsImpl implements InventoryUtils { + private static Containers getNotchInventoryType(Inventory inventory) { + InventoryType type = inventory.getType(); + if (type == InventoryType.CHEST) { + switch (inventory.getSize()) { + case 9: + return Containers.GENERIC_9X1; + case 18: + return Containers.GENERIC_9X2; + case 27: + return Containers.GENERIC_9X3; + case 36: + return Containers.GENERIC_9X4; + case 45: + return Containers.GENERIC_9X5; + case 54: + return Containers.GENERIC_9X6; + default: + throw new IllegalArgumentException("Unsupported custom inventory size " + inventory.getSize()); + } + } else return CraftContainer.getNotchInventoryType(type); + } + public static IChatBaseComponent createNMSComponent(ComponentWrapper component) { return IChatBaseComponent.ChatSerializer.a(component.serializeToJson()); } @@ -31,7 +54,7 @@ class InventoryUtilsImpl implements InventoryUtils { @Override public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) { EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - Containers windowType = CraftContainer.getNotchInventoryType(inventory); + Containers windowType = getNotchInventoryType(inventory); if (entityPlayer.playerConnection != null) { Container container = new CraftContainer(inventory, entityPlayer, entityPlayer.nextContainerCounter()); diff --git a/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/ItemUtilsImpl.java index 2bcbb42..a020b32 100644 --- a/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r2; -import net.minecraft.server.v1_15_R1.ItemStack; -import net.minecraft.server.v1_15_R1.NBTCompressedStreamTools; -import net.minecraft.server.v1_15_R1.NBTTagCompound; -import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; +import com.mojang.authlib.GameProfile; +import net.minecraft.server.v1_14_R1.ItemStack; +import net.minecraft.server.v1_14_R1.NBTCompressedStreamTools; +import net.minecraft.server.v1_14_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Field; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Field CRAFT_META_SKULL_GAME_PROFILE_FIELD = ReflectionUtils.getField( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "profile" + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.setFieldValue(CRAFT_META_SKULL_GAME_PROFILE_FIELD, itemMeta, gameProfile); + } + } diff --git a/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/PlayerUtilsImpl.java index 8f4282d..1b412cc 100644 --- a/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r2/src/main/java/xyz/xenondevs/inventoryaccess/r2/PlayerUtilsImpl.java @@ -1,10 +1,10 @@ package xyz.xenondevs.inventoryaccess.r2; -import net.minecraft.server.v1_15_R1.AdvancementDataPlayer; -import net.minecraft.server.v1_15_R1.EntityPlayer; -import net.minecraft.server.v1_15_R1.MapIcon; -import net.minecraft.server.v1_15_R1.PacketPlayOutMap; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; +import net.minecraft.server.v1_14_R1.AdvancementDataPlayer; +import net.minecraft.server.v1_14_R1.EntityPlayer; +import net.minecraft.server.v1_14_R1.MapIcon; +import net.minecraft.server.v1_14_R1.PacketPlayOutMap; +import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/inventoryaccess/inventory-access-r3/pom.xml b/inventoryaccess/inventory-access-r3/pom.xml index 10257ca..7e42292 100644 --- a/inventoryaccess/inventory-access-r3/pom.xml +++ b/inventoryaccess/inventory-access-r3/pom.xml @@ -21,7 +21,7 @@ org.spigotmc spigot - 1.16.1-R0.1-SNAPSHOT + 1.14.4-R0.1-SNAPSHOT provided diff --git a/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/AnvilInventoryImpl.java index ded76e9..c90303e 100644 --- a/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/AnvilInventoryImpl.java @@ -1,28 +1,37 @@ package xyz.xenondevs.inventoryaccess.r3; -import net.minecraft.server.v1_16_R1.*; -import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; +import net.minecraft.server.v1_14_R1.*; +import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.inventory.AnvilInventory; import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; +import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; +import java.lang.reflect.Field; import java.util.List; import java.util.function.Consumer; class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { + private static final Field CONTAINER_ACCESS_FIELD = ReflectionUtils.getField(ContainerAnvil.class, true, "containerAccess"); + private static final Field REPAIR_INVENTORY_FIELD = ReflectionUtils.getField(ContainerAnvil.class, true, "repairInventory"); + private static final Field RESULT_INVENTORY_FIELD = ReflectionUtils.getField(ContainerAnvil.class, true, "resultInventory"); + private final IChatBaseComponent title; private final List> renameHandlers; private final CraftInventoryView view; private final EntityPlayer player; + private final IInventory repairInventory; + private final IInventory resultInventory; + private String text; private boolean open; @@ -38,6 +47,10 @@ class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { this.renameHandlers = renameHandlers; this.player = player; + repairInventory = ReflectionUtils.getFieldValue(REPAIR_INVENTORY_FIELD, this); + resultInventory = ReflectionUtils.getFieldValue(RESULT_INVENTORY_FIELD, this); + ContainerAccess containerAccess = ReflectionUtils.getFieldValue(CONTAINER_ACCESS_FIELD, this); + CraftInventoryAnvil inventory = new CraftInventoryAnvil(containerAccess.getLocation(), repairInventory, resultInventory, this); this.view = new CraftInventoryView(player.getBukkitEntity(), inventory, this); @@ -56,7 +69,7 @@ class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, title)); // send initial items - NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); + NonNullList itemsList = NonNullList.a(ItemStack.a, getItem(0), getItem(1), getItem(2)); player.playerConnection.sendPacket(new PacketPlayOutWindowItems(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); } @@ -146,7 +159,7 @@ class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { } /** - * Called when both items in the {@link ContainerAnvil#repairInventory} were set to create + * Called when both items in the {@link AnvilInventoryImpl#repairInventory} were set to create * the resulting product, calculate the level cost and call the {@link PrepareAnvilEvent}. */ @Override diff --git a/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/CartographyInventoryImpl.java index 81cf9d7..1841a77 100644 --- a/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/CartographyInventoryImpl.java @@ -1,11 +1,11 @@ package xyz.xenondevs.inventoryaccess.r3; -import net.minecraft.server.v1_16_R1.*; -import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; +import net.minecraft.server.v1_14_R1.*; +import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -49,10 +49,10 @@ class CartographyInventoryImpl extends ContainerCartography implements Cartograp player.activeContainer = this; // send open packet - player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.CARTOGRAPHY_TABLE, title)); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.CARTOGRAPHY, title)); // send initial items - NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); + NonNullList itemsList = NonNullList.a(ItemStack.a, getItem(0), getItem(1), getItem(2)); player.playerConnection.sendPacket(new PacketPlayOutWindowItems(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); } @@ -100,7 +100,7 @@ class CartographyInventoryImpl extends ContainerCartography implements Cartograp @Override public ItemStack shiftClick(EntityHuman entityhuman, int i) { - return ItemStack.b; + return ItemStack.a; } @Override diff --git a/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/InventoryUtilsImpl.java index 79143e0..4d25996 100644 --- a/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/InventoryUtilsImpl.java @@ -1,12 +1,12 @@ package xyz.xenondevs.inventoryaccess.r3; -import net.minecraft.server.v1_16_R1.*; -import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_16_R1.util.CraftChatMessage; +import net.minecraft.server.v1_14_R1.*; +import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventory; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -15,6 +15,28 @@ import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; class InventoryUtilsImpl implements InventoryUtils { + private static Containers getNotchInventoryType(Inventory inventory) { + InventoryType type = inventory.getType(); + if (type == InventoryType.CHEST) { + switch (inventory.getSize()) { + case 9: + return Containers.GENERIC_9X1; + case 18: + return Containers.GENERIC_9X2; + case 27: + return Containers.GENERIC_9X3; + case 36: + return Containers.GENERIC_9X4; + case 45: + return Containers.GENERIC_9X5; + case 54: + return Containers.GENERIC_9X6; + default: + throw new IllegalArgumentException("Unsupported custom inventory size " + inventory.getSize()); + } + } else return CraftContainer.getNotchInventoryType(type); + } + public static IChatBaseComponent createNMSComponent(ComponentWrapper component) { return IChatBaseComponent.ChatSerializer.a(component.serializeToJson()); } @@ -32,7 +54,7 @@ class InventoryUtilsImpl implements InventoryUtils { @Override public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) { EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); - Containers windowType = CraftContainer.getNotchInventoryType(inventory); + Containers windowType = getNotchInventoryType(inventory); if (entityPlayer.playerConnection != null) { Container container = new CraftContainer(inventory, entityPlayer, entityPlayer.nextContainerCounter()); @@ -43,7 +65,7 @@ class InventoryUtilsImpl implements InventoryUtils { if (title == null) { if (iinventory instanceof ITileInventory) titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName(); - else titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0]; + else titleComponent = new ChatComponentText(container.getBukkitView().getTitle()); } else titleComponent = createNMSComponent(title); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent)); diff --git a/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/ItemUtilsImpl.java index 400e6ec..5908ecf 100644 --- a/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r3; -import net.minecraft.server.v1_16_R1.ItemStack; -import net.minecraft.server.v1_16_R1.NBTCompressedStreamTools; -import net.minecraft.server.v1_16_R1.NBTTagCompound; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; +import com.mojang.authlib.GameProfile; +import net.minecraft.server.v1_14_R1.ItemStack; +import net.minecraft.server.v1_14_R1.NBTCompressedStreamTools; +import net.minecraft.server.v1_14_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } diff --git a/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/PlayerUtilsImpl.java index 14daa21..b6985fa 100644 --- a/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r3/src/main/java/xyz/xenondevs/inventoryaccess/r3/PlayerUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r3; -import net.minecraft.server.v1_16_R1.*; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_16_R1.CraftServer; -import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; +import net.minecraft.server.v1_14_R1.AdvancementDataPlayer; +import net.minecraft.server.v1_14_R1.EntityPlayer; +import net.minecraft.server.v1_14_R1.MapIcon; +import net.minecraft.server.v1_14_R1.PacketPlayOutMap; +import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -19,7 +20,7 @@ import java.util.stream.Collectors; class PlayerUtilsImpl implements PlayerUtils { private static final Method REGISTER_LISTENERS_METHOD = - ReflectionUtils.getMethod(AdvancementDataPlayer.class, true, "b", AdvancementDataWorld.class); + ReflectionUtils.getMethod(AdvancementDataPlayer.class, true, "d"); @Override public void stopAdvancementListening(@NotNull Player player) { @@ -39,8 +40,7 @@ class PlayerUtilsImpl implements PlayerUtils { @Override public void startAdvancementListening(@NotNull Object player) { AdvancementDataPlayer advancements = ((EntityPlayer) player).getAdvancementData(); - AdvancementDataWorld manager = ((CraftServer) Bukkit.getServer()).getServer().getAdvancementData(); - ReflectionUtils.invokeMethod(REGISTER_LISTENERS_METHOD, advancements, manager); + ReflectionUtils.invokeMethod(REGISTER_LISTENERS_METHOD, advancements); } @Override diff --git a/inventoryaccess/inventory-access-r4/pom.xml b/inventoryaccess/inventory-access-r4/pom.xml index b971ae0..619b403 100644 --- a/inventoryaccess/inventory-access-r4/pom.xml +++ b/inventoryaccess/inventory-access-r4/pom.xml @@ -21,7 +21,7 @@ org.spigotmc spigot - 1.16.2-R0.1-SNAPSHOT + 1.15.2-R0.1-SNAPSHOT provided diff --git a/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/AnvilInventoryImpl.java index dc9b533..e5fc3d5 100644 --- a/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/AnvilInventoryImpl.java @@ -1,28 +1,37 @@ package xyz.xenondevs.inventoryaccess.r4; -import net.minecraft.server.v1_16_R2.*; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack; +import net.minecraft.server.v1_15_R1.*; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.inventory.AnvilInventory; import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; +import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; +import java.lang.reflect.Field; import java.util.List; import java.util.function.Consumer; class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { + private static final Field CONTAINER_ACCESS_FIELD = ReflectionUtils.getField(ContainerAnvil.class, true, "containerAccess"); + private static final Field REPAIR_INVENTORY_FIELD = ReflectionUtils.getField(ContainerAnvil.class, true, "repairInventory"); + private static final Field RESULT_INVENTORY_FIELD = ReflectionUtils.getField(ContainerAnvil.class, true, "resultInventory"); + private final IChatBaseComponent title; private final List> renameHandlers; private final CraftInventoryView view; private final EntityPlayer player; + private final IInventory repairInventory; + private final IInventory resultInventory; + private String text; private boolean open; @@ -38,6 +47,10 @@ class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { this.renameHandlers = renameHandlers; this.player = player; + repairInventory = ReflectionUtils.getFieldValue(REPAIR_INVENTORY_FIELD, this); + resultInventory = ReflectionUtils.getFieldValue(RESULT_INVENTORY_FIELD, this); + ContainerAccess containerAccess = ReflectionUtils.getFieldValue(CONTAINER_ACCESS_FIELD, this); + CraftInventoryAnvil inventory = new CraftInventoryAnvil(containerAccess.getLocation(), repairInventory, resultInventory, this); this.view = new CraftInventoryView(player.getBukkitEntity(), inventory, this); @@ -56,7 +69,7 @@ class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, title)); // send initial items - NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); + NonNullList itemsList = NonNullList.a(ItemStack.a, getItem(0), getItem(1), getItem(2)); player.playerConnection.sendPacket(new PacketPlayOutWindowItems(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); } @@ -146,7 +159,7 @@ class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { } /** - * Called when both items in the {@link ContainerAnvil#repairInventory} were set to create + * Called when both items in the {@link AnvilInventoryImpl#repairInventory} were set to create * the resulting product, calculate the level cost and call the {@link PrepareAnvilEvent}. */ @Override diff --git a/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/CartographyInventoryImpl.java index 2e4f1c6..57e1e1a 100644 --- a/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/CartographyInventoryImpl.java @@ -1,11 +1,11 @@ package xyz.xenondevs.inventoryaccess.r4; -import net.minecraft.server.v1_16_R2.*; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack; +import net.minecraft.server.v1_15_R1.*; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -52,7 +52,7 @@ class CartographyInventoryImpl extends ContainerCartography implements Cartograp player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.CARTOGRAPHY_TABLE, title)); // send initial items - NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); + NonNullList itemsList = NonNullList.a(ItemStack.a, getItem(0), getItem(1), getItem(2)); player.playerConnection.sendPacket(new PacketPlayOutWindowItems(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); } @@ -100,7 +100,7 @@ class CartographyInventoryImpl extends ContainerCartography implements Cartograp @Override public ItemStack shiftClick(EntityHuman entityhuman, int i) { - return ItemStack.b; + return ItemStack.a; } @Override diff --git a/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/InventoryUtilsImpl.java index 1e52f91..a34178c 100644 --- a/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/InventoryUtilsImpl.java @@ -1,11 +1,10 @@ package xyz.xenondevs.inventoryaccess.r4; -import net.minecraft.server.v1_16_R2.*; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_16_R2.util.CraftChatMessage; +import net.minecraft.server.v1_15_R1.*; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventory; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -43,7 +42,7 @@ class InventoryUtilsImpl implements InventoryUtils { if (title == null) { if (iinventory instanceof ITileInventory) titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName(); - else titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0]; + else titleComponent = new ChatComponentText(container.getBukkitView().getTitle()); } else titleComponent = createNMSComponent(title); entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent)); diff --git a/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/ItemUtilsImpl.java index 12b4458..a791eb4 100644 --- a/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r4; -import net.minecraft.server.v1_16_R2.ItemStack; -import net.minecraft.server.v1_16_R2.NBTCompressedStreamTools; -import net.minecraft.server.v1_16_R2.NBTTagCompound; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack; +import com.mojang.authlib.GameProfile; +import net.minecraft.server.v1_15_R1.ItemStack; +import net.minecraft.server.v1_15_R1.NBTCompressedStreamTools; +import net.minecraft.server.v1_15_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -57,7 +63,7 @@ class ItemUtilsImpl implements ItemUtils { nbt = NBTCompressedStreamTools.a(in); } else { DataInputStream dataIn = new DataInputStream(in); - nbt = NBTCompressedStreamTools.a((DataInput) dataIn); + nbt = NBTCompressedStreamTools.a(dataIn); } ItemStack itemStack = ItemStack.a(nbt); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } diff --git a/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/PlayerUtilsImpl.java index 762f25e..f6a0317 100644 --- a/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r4/src/main/java/xyz/xenondevs/inventoryaccess/r4/PlayerUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r4; -import net.minecraft.server.v1_16_R2.*; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_16_R2.CraftServer; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; +import net.minecraft.server.v1_15_R1.AdvancementDataPlayer; +import net.minecraft.server.v1_15_R1.EntityPlayer; +import net.minecraft.server.v1_15_R1.MapIcon; +import net.minecraft.server.v1_15_R1.PacketPlayOutMap; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -19,7 +20,7 @@ import java.util.stream.Collectors; class PlayerUtilsImpl implements PlayerUtils { private static final Method REGISTER_LISTENERS_METHOD = - ReflectionUtils.getMethod(AdvancementDataPlayer.class, true, "b", AdvancementDataWorld.class); + ReflectionUtils.getMethod(AdvancementDataPlayer.class, true, "d"); @Override public void stopAdvancementListening(@NotNull Player player) { @@ -39,8 +40,7 @@ class PlayerUtilsImpl implements PlayerUtils { @Override public void startAdvancementListening(@NotNull Object player) { AdvancementDataPlayer advancements = ((EntityPlayer) player).getAdvancementData(); - AdvancementDataWorld manager = ((CraftServer) Bukkit.getServer()).getServer().getAdvancementData(); - ReflectionUtils.invokeMethod(REGISTER_LISTENERS_METHOD, advancements, manager); + ReflectionUtils.invokeMethod(REGISTER_LISTENERS_METHOD, advancements); } @Override diff --git a/inventoryaccess/inventory-access-r5/pom.xml b/inventoryaccess/inventory-access-r5/pom.xml index e874677..f8dc144 100644 --- a/inventoryaccess/inventory-access-r5/pom.xml +++ b/inventoryaccess/inventory-access-r5/pom.xml @@ -21,7 +21,7 @@ org.spigotmc spigot - 1.16.4-R0.1-SNAPSHOT + 1.16.1-R0.1-SNAPSHOT provided diff --git a/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/AnvilInventoryImpl.java index 910f321..c5f0773 100644 --- a/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/AnvilInventoryImpl.java @@ -1,11 +1,11 @@ package xyz.xenondevs.inventoryaccess.r5; -import net.minecraft.server.v1_16_R3.*; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack; +import net.minecraft.server.v1_16_R1.*; +import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; diff --git a/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/CartographyInventoryImpl.java index 8519c43..06bac43 100644 --- a/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/CartographyInventoryImpl.java @@ -1,11 +1,11 @@ package xyz.xenondevs.inventoryaccess.r5; -import net.minecraft.server.v1_16_R3.*; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack; +import net.minecraft.server.v1_16_R1.*; +import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/InventoryUtilsImpl.java index 374a30b..64dfe87 100644 --- a/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/InventoryUtilsImpl.java @@ -1,11 +1,11 @@ package xyz.xenondevs.inventoryaccess.r5; -import net.minecraft.server.v1_16_R3.*; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_16_R3.util.CraftChatMessage; +import net.minecraft.server.v1_16_R1.*; +import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_16_R1.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/ItemUtilsImpl.java index 1e76422..ee4c416 100644 --- a/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r5; -import net.minecraft.server.v1_16_R3.ItemStack; -import net.minecraft.server.v1_16_R3.NBTCompressedStreamTools; -import net.minecraft.server.v1_16_R3.NBTTagCompound; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack; +import com.mojang.authlib.GameProfile; +import net.minecraft.server.v1_16_R1.ItemStack; +import net.minecraft.server.v1_16_R1.NBTCompressedStreamTools; +import net.minecraft.server.v1_16_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -57,7 +63,7 @@ class ItemUtilsImpl implements ItemUtils { nbt = NBTCompressedStreamTools.a(in); } else { DataInputStream dataIn = new DataInputStream(in); - nbt = NBTCompressedStreamTools.a((DataInput) dataIn); + nbt = NBTCompressedStreamTools.a(dataIn); } ItemStack itemStack = ItemStack.a(nbt); @@ -75,7 +81,7 @@ class ItemUtilsImpl implements ItemUtils { ReflectionUtils.setFieldValue( ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, itemMeta, - name.serializeToJson() + InventoryUtilsImpl.createNMSComponent(name) ); } @@ -84,8 +90,14 @@ class ItemUtilsImpl implements ItemUtils { ReflectionUtils.setFieldValue( ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, itemMeta, - lore.stream().map(ComponentWrapper::serializeToJson).collect(Collectors.toList()) + lore.stream().map(InventoryUtilsImpl::createNMSComponent).collect(Collectors.toList()) ); } + + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/PlayerUtilsImpl.java index 1537123..e4df1e2 100644 --- a/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r5/src/main/java/xyz/xenondevs/inventoryaccess/r5/PlayerUtilsImpl.java @@ -1,9 +1,9 @@ package xyz.xenondevs.inventoryaccess.r5; -import net.minecraft.server.v1_16_R3.*; +import net.minecraft.server.v1_16_R1.*; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_16_R3.CraftServer; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R1.CraftServer; +import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -45,7 +45,7 @@ class PlayerUtilsImpl implements PlayerUtils { @Override public void sendMapUpdate(@NotNull Player player, int mapId, byte scale, boolean locked, @Nullable MapPatch mapPatch, @Nullable List icons) { - List decorations = icons != null + List decorations = icons != null ? icons.stream().map(this::toMapDecoration).collect(Collectors.toCollection(ArrayList::new)) : new ArrayList<>(); diff --git a/inventoryaccess/inventory-access-r6/pom.xml b/inventoryaccess/inventory-access-r6/pom.xml index e7d75d1..96fb2eb 100644 --- a/inventoryaccess/inventory-access-r6/pom.xml +++ b/inventoryaccess/inventory-access-r6/pom.xml @@ -13,17 +13,15 @@ inventory-access-r6 - 17 - 17 - 1.17-R0.1-SNAPSHOT + 11 + 11 org.spigotmc spigot - ${spigot.version} - remapped-mojang + 1.16.2-R0.1-SNAPSHOT provided @@ -33,115 +31,4 @@ - - - - xyz.xenondevs - string-remapper-maven-plugin - 0.6 - - - - remap-spigot - - remap - - - spigot - ${project.build.directory}/classes - ${project.build.directory}/classes-spigot - org.spigotmc:minecraft-server:txt:maps-mojang:${spigot.version} - - org.spigotmc:minecraft-server:csrg:maps-spigot:${spigot.version} - org.spigotmc:minecraft-server:csrg:maps-spigot-members:${spigot.version} - - - - - - remap-mojang - - remap - - - mojang - ${project.build.directory}/classes - ${project.build.directory}/classes-mojang - org.spigotmc:minecraft-server:txt:maps-mojang:${spigot.version} - - org.spigotmc:minecraft-server:csrg:maps-spigot:${spigot.version} - org.spigotmc:minecraft-server:csrg:maps-spigot-members:${spigot.version} - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.2.2 - - - default-jar - none - - - spigot - - jar - - - ${project.build.directory}/classes-spigot - - - - mojang - - jar - - - ${project.build.directory}/classes-mojang - remapped-mojang - - - - - - - net.md-5 - specialsource-maven-plugin - 1.2.2 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang - true - org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang - false - ${project.artifactId}-${project.version}-remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot - org.spigotmc:spigot:${spigot.version}:jar:remapped-obf - - - - - - - \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/AnvilInventoryImpl.java index ef069d8..886042f 100644 --- a/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/AnvilInventoryImpl.java @@ -1,23 +1,12 @@ package xyz.xenondevs.inventoryaccess.r6; -import net.minecraft.core.BlockPos; -import net.minecraft.core.NonNullList; -import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; -import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.Container; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.AnvilMenu; -import net.minecraft.world.inventory.ContainerLevelAccess; -import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; +import net.minecraft.server.v1_16_R2.*; +import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -27,30 +16,30 @@ import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; import java.util.List; import java.util.function.Consumer; -class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { +class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { - private final Component title; + private final IChatBaseComponent title; private final List> renameHandlers; private final CraftInventoryView view; - private final ServerPlayer player; + private final EntityPlayer player; private String text; private boolean open; - public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title, List> renameHandlers) { + public AnvilInventoryImpl(Player player, @NotNull ComponentWrapper title, List> renameHandlers) { this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandlers); } - public AnvilInventoryImpl(ServerPlayer player, Component title, List> renameHandlers) { - super(player.nextContainerCounter(), player.getInventory(), - ContainerLevelAccess.create(player.level, new BlockPos(0, 0, 0))); + public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, List> renameHandlers) { + super(player.nextContainerCounter(), player.inventory, + ContainerAccess.at(player.getWorld(), new BlockPosition(0, 0, 0))); this.title = title; this.renameHandlers = renameHandlers; this.player = player; - CraftInventoryAnvil inventory = new CraftInventoryAnvil(access.getLocation(), - inputSlots, resultSlots, this); + CraftInventoryAnvil inventory = new CraftInventoryAnvil(containerAccess.getLocation(), + repairInventory, resultInventory, this); this.view = new CraftInventoryView(player.getBukkitEntity(), inventory, this); } @@ -61,33 +50,30 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { CraftEventFactory.callInventoryOpenEvent(player, this); // set active container - player.containerMenu = this; + player.activeContainer = this; // send open packet - player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, title)); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, title)); // send initial items - NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); - player.connection.send(new ClientboundContainerSetContentPacket(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); - - // init menu - player.initMenu(this); + NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); + player.playerConnection.sendPacket(new PacketPlayOutWindowItems(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); } public void sendItem(int slot) { - player.connection.send(new ClientboundContainerSetSlotPacket(InventoryUtilsImpl.getActiveWindowId(player), slot, getItem(slot))); + player.playerConnection.sendPacket(new PacketPlayOutSetSlot(InventoryUtilsImpl.getActiveWindowId(player), slot, getItem(slot))); } public void setItem(int slot, ItemStack item) { - if (slot < 2) inputSlots.setItem(slot, item); - else resultSlots.setItem(0, item); + if (slot < 2) repairInventory.setItem(slot, item); + else resultInventory.setItem(0, item); if (open) sendItem(slot); } private ItemStack getItem(int slot) { - if (slot < 2) return inputSlots.getItem(slot); - else return resultSlots.getItem(0); + if (slot < 2) return repairInventory.getItem(slot); + else return resultInventory.getItem(0); } @Override @@ -118,15 +104,15 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { } /** - * Called every tick to see if the {@link Player} can still use that container. - * (Used to for checking the distance between the {@link Player} and the container + * Called every tick to see if the {@link EntityHuman} can still use that container. + * (Used to for checking the distance between the {@link EntityHuman} and the container * and closing the window when the distance gets too big.) * - * @param player The {@link Player} - * @return If the {@link Player} can still use that container + * @param entityhuman The {@link EntityHuman} + * @return If the {@link EntityHuman} can still use that container */ @Override - public boolean stillValid(Player player) { + public boolean canUse(EntityHuman entityhuman) { return true; } @@ -136,7 +122,7 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { * @param s The new rename text */ @Override - public void setItemName(String s) { + public void a(String s) { // save rename text text = s; @@ -151,33 +137,21 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { /** * Called when the container is closed to give the items back. * - * @param player The {@link Player} that closed this container + * @param entityhuman The {@link EntityHuman} that closed this container */ @Override - public void removed(Player player) { - open = false; - } - - - /** - * Called when the container gets closed to put items back into a players - * inventory or drop them in the world. - * - * @param player The {@link Player} that closed this container - * @param container The container - */ - @Override - protected void clearContainer(Player player, Container container) { + public void b(EntityHuman entityhuman) { open = false; + // don't give them the items, they don't own them } /** - * Called when both items in the {@link AnvilMenu#inputSlots} were set to create + * Called when both items in the {@link ContainerAnvil#repairInventory} were set to create * the resulting product, calculate the level cost and call the {@link PrepareAnvilEvent}. */ @Override - public void createResult() { - // empty + public void e() { + // no } diff --git a/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/CartographyInventoryImpl.java index add7d70..9d8c823 100644 --- a/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/CartographyInventoryImpl.java @@ -1,20 +1,11 @@ package xyz.xenondevs.inventoryaccess.r6; -import net.minecraft.core.BlockPos; -import net.minecraft.core.NonNullList; -import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; -import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.Container; -import net.minecraft.world.inventory.*; -import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; +import net.minecraft.server.v1_16_R2.*; +import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -24,18 +15,14 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.lang.reflect.Field; -class CartographyInventoryImpl extends CartographyTableMenu implements CartographyInventory { +class CartographyInventoryImpl extends ContainerCartography implements CartographyInventory { - private static final Field RESULT_CONTAINER_FIELD = ReflectionUtils.getField( - CartographyTableMenu.class, - true, - "SRF(net.minecraft.world.inventory.CartographyTableMenu resultContainer)" - ); + private static final Field RESULT_CONTAINER_FIELD = ReflectionUtils.getField(ContainerCartography.class, true, "resultInventory"); - private final ResultContainer resultContainer = ReflectionUtils.getFieldValue(RESULT_CONTAINER_FIELD, this); - private final Component title; + private final InventoryCraftResult resultInventory = ReflectionUtils.getFieldValue(RESULT_CONTAINER_FIELD, this); + private final IChatBaseComponent title; private final CraftInventoryView view; - private final ServerPlayer player; + private final EntityPlayer player; private boolean open; @@ -43,12 +30,12 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); } - public CartographyInventoryImpl(ServerPlayer player, Component title) { - super(player.nextContainerCounter(), player.getInventory(), ContainerLevelAccess.create(player.level, new BlockPos(0, 0, 0))); + public CartographyInventoryImpl(EntityPlayer player, IChatBaseComponent title) { + super(player.nextContainerCounter(), player.inventory, ContainerAccess.at(player.getWorld(), new BlockPosition(0, 0, 0))); this.player = player; this.title = title; - CraftInventoryCartography inventory = new CraftInventoryCartography(container, resultContainer); + CraftInventoryCartography inventory = new CraftInventoryCartography(this.inventory, resultInventory); view = new CraftInventoryView(player.getBukkitEntity(), inventory, this); } @@ -59,17 +46,14 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp CraftEventFactory.callInventoryOpenEvent(player, this); // set active container - player.containerMenu = this; + player.activeContainer = this; // send open packet - player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.CARTOGRAPHY_TABLE, title)); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.CARTOGRAPHY_TABLE, title)); // send initial items - NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); - player.connection.send(new ClientboundContainerSetContentPacket(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); - - // init menu - player.initMenu(this); + NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); + player.playerConnection.sendPacket(new PacketPlayOutWindowItems(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); } @Override @@ -78,19 +62,19 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp } public void sendItem(int slot) { - player.connection.send(new ClientboundContainerSetSlotPacket(InventoryUtilsImpl.getActiveWindowId(player), slot, getItem(slot))); + player.playerConnection.sendPacket(new PacketPlayOutSetSlot(InventoryUtilsImpl.getActiveWindowId(player), slot, getItem(slot))); } public void setItem(int slot, ItemStack item) { - if (slot < 2) container.setItem(slot, item); - else resultContainer.setItem(0, item); + if (slot < 2) inventory.setItem(slot, item); + else resultInventory.setItem(0, item); if (open) sendItem(slot); } private ItemStack getItem(int slot) { - if (slot < 2) return container.getItem(slot); - else return resultContainer.getItem(0); + if (slot < 2) return inventory.getItem(slot); + else return resultInventory.getItem(0); } @Override @@ -111,26 +95,26 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp } @Override - public void slotsChanged(Container container) { + public void a(IInventory inventory) { } @Override - public ItemStack quickMoveStack(net.minecraft.world.entity.player.Player entityhuman, int i) { - return ItemStack.EMPTY; + public ItemStack shiftClick(EntityHuman entityhuman, int i) { + return ItemStack.b; } @Override - public boolean canTakeItemForPickAll(ItemStack itemstack, Slot slot) { + public boolean a(ItemStack itemstack, Slot slot) { return true; } @Override - public boolean stillValid(net.minecraft.world.entity.player.Player entityhuman) { + public boolean canUse(EntityHuman entityhuman) { return true; } @Override - protected void clearContainer(net.minecraft.world.entity.player.Player entityhuman, Container container) { + public void b(EntityHuman entityHuman) { // empty } diff --git a/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/InventoryUtilsImpl.java index e2e4f42..e510942 100644 --- a/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/InventoryUtilsImpl.java @@ -1,17 +1,11 @@ package xyz.xenondevs.inventoryaccess.r6; -import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.Container; -import net.minecraft.world.MenuProvider; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.inventory.MenuType; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_17_R1.util.CraftChatMessage; +import net.minecraft.server.v1_16_R2.*; +import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_16_R2.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -21,14 +15,13 @@ import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; class InventoryUtilsImpl implements InventoryUtils { - public static Component createNMSComponent(ComponentWrapper component) { - if (component == null) return null; - return CraftChatMessage.fromJSON(component.serializeToJson()); + public static IChatBaseComponent createNMSComponent(ComponentWrapper component) { + return IChatBaseComponent.ChatSerializer.a(component.serializeToJson()); } - public static int getActiveWindowId(ServerPlayer player) { - AbstractContainerMenu container = player.containerMenu; - return container == null ? -1 : container.containerId; + public static int getActiveWindowId(EntityPlayer player) { + Container container = player.activeContainer; + return container == null ? -1 : container.windowId; } @Override @@ -38,36 +31,34 @@ class InventoryUtilsImpl implements InventoryUtils { @Override public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) { - ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); - MenuType menuType = CraftContainer.getNotchInventoryType(inventory); + EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); + Containers windowType = CraftContainer.getNotchInventoryType(inventory); - if (serverPlayer.connection != null) { - AbstractContainerMenu menu = new CraftContainer(inventory, serverPlayer, serverPlayer.nextContainerCounter()); - menu = CraftEventFactory.callInventoryOpenEvent(serverPlayer, menu); - if (menu != null) { - Container container = ((CraftInventory) inventory).getInventory(); - Component titleComponent; + if (entityPlayer.playerConnection != null) { + Container container = new CraftContainer(inventory, entityPlayer, entityPlayer.nextContainerCounter()); + container = CraftEventFactory.callInventoryOpenEvent(entityPlayer, container); + if (container != null) { + IInventory iinventory = ((CraftInventory) inventory).getInventory(); + IChatBaseComponent titleComponent; if (title == null) { - if (container instanceof MenuProvider) - titleComponent = ((MenuProvider) container).getDisplayName(); - else titleComponent = CraftChatMessage.fromString(menu.getBukkitView().getTitle())[0]; + if (iinventory instanceof ITileInventory) + titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName(); + else titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0]; } else titleComponent = createNMSComponent(title); - menu.checkReachable = false; - serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menuType, titleComponent)); - serverPlayer.containerMenu = menu; - serverPlayer.initMenu(menu); + entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent)); + entityPlayer.activeContainer = container; + entityPlayer.activeContainer.addSlotListener(entityPlayer); } } - } @Override public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) { - ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); - AbstractContainerMenu menu = serverPlayer.containerMenu; - serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title))); - serverPlayer.initMenu(menu); + EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); + Container container = entityPlayer.activeContainer; + entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); + entityPlayer.updateInventory(container); } } diff --git a/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/ItemUtilsImpl.java index 559a4ed..a8cb17b 100644 --- a/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r6; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtIo; -import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; +import com.mojang.authlib.GameProfile; +import net.minecraft.server.v1_16_R2.ItemStack; +import net.minecraft.server.v1_16_R2.NBTCompressedStreamTools; +import net.minecraft.server.v1_16_R2.NBTTagCompound; +import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -25,19 +31,19 @@ class ItemUtilsImpl implements ItemUtils { } @Override - public void serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, @NotNull OutputStream outputStream, boolean compressed) { + public void serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, @NotNull OutputStream out, boolean compressed) { try { ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); - CompoundTag nbt = nmsStack.save(new CompoundTag()); + NBTTagCompound nbt = nmsStack.save(new NBTTagCompound()); if (compressed) { - NbtIo.writeCompressed(nbt, outputStream); + NBTCompressedStreamTools.a(nbt, out); } else { - DataOutputStream dataOut = new DataOutputStream(outputStream); - NbtIo.write(nbt, dataOut); + DataOutputStream dataOut = new DataOutputStream(out); + NBTCompressedStreamTools.a(nbt, (DataOutput) dataOut); } - outputStream.flush(); + out.flush(); } catch (IOException e) { e.printStackTrace(); } @@ -50,17 +56,17 @@ class ItemUtilsImpl implements ItemUtils { } @Override - public org.bukkit.inventory.ItemStack deserializeItemStack(@NotNull InputStream inputStream, boolean compressed) { + public org.bukkit.inventory.ItemStack deserializeItemStack(@NotNull InputStream in, boolean compressed) { try { - CompoundTag nbt; + NBTTagCompound nbt; if (compressed) { - nbt = NbtIo.readCompressed(inputStream); + nbt = NBTCompressedStreamTools.a(in); } else { - DataInputStream dataIn = new DataInputStream(inputStream); - nbt = NbtIo.read(dataIn); + DataInputStream dataIn = new DataInputStream(in); + nbt = NBTCompressedStreamTools.a((DataInput) dataIn); } - ItemStack itemStack = ItemStack.of(nbt); + ItemStack itemStack = ItemStack.a(nbt); return CraftItemStack.asCraftMirror(itemStack); } catch (IOException e) { @@ -75,7 +81,7 @@ class ItemUtilsImpl implements ItemUtils { ReflectionUtils.setFieldValue( ReflectionRegistry.CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD, itemMeta, - name.serializeToJson() + InventoryUtilsImpl.createNMSComponent(name) ); } @@ -84,8 +90,13 @@ class ItemUtilsImpl implements ItemUtils { ReflectionUtils.setFieldValue( ReflectionRegistry.CB_CRAFT_META_ITEM_LORE_FIELD, itemMeta, - lore.stream().map(ComponentWrapper::serializeToJson).collect(Collectors.toList()) + lore.stream().map(InventoryUtilsImpl::createNMSComponent).collect(Collectors.toList()) ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/PlayerUtilsImpl.java index 190772c..4ea86d1 100644 --- a/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r6/src/main/java/xyz/xenondevs/inventoryaccess/r6/PlayerUtilsImpl.java @@ -1,23 +1,14 @@ package xyz.xenondevs.inventoryaccess.r6; -import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; -import net.minecraft.network.protocol.game.ClientboundResourcePackPacket; -import net.minecraft.server.PlayerAdvancements; -import net.minecraft.server.ServerAdvancementManager; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.saveddata.maps.MapDecoration; -import net.minecraft.world.level.saveddata.maps.MapItemSavedData; +import net.minecraft.server.v1_16_R2.*; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_17_R1.CraftServer; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R2.CraftServer; +import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.xenondevs.inventoryaccess.abstraction.util.PlayerUtils; -import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; -import xyz.xenondevs.inventoryaccess.map.MapIcon; import xyz.xenondevs.inventoryaccess.map.MapPatch; -import xyz.xenondevs.inventoryaccess.util.DataUtils; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.lang.reflect.Method; @@ -27,12 +18,8 @@ import java.util.stream.Collectors; class PlayerUtilsImpl implements PlayerUtils { - private static final Method REGISTER_LISTENERS_METHOD = ReflectionUtils.getMethod( - PlayerAdvancements.class, - true, - "SRM(net.minecraft.server.PlayerAdvancements registerListeners)", - ServerAdvancementManager.class - ); + private static final Method REGISTER_LISTENERS_METHOD = + ReflectionUtils.getMethod(AdvancementDataPlayer.class, true, "b", AdvancementDataWorld.class); @Override public void stopAdvancementListening(@NotNull Player player) { @@ -41,7 +28,7 @@ class PlayerUtilsImpl implements PlayerUtils { @Override public void stopAdvancementListening(@NotNull Object player) { - ((ServerPlayer) player).getAdvancements().stopListening(); + ((EntityPlayer) player).getAdvancementData().a(); // stops listening } @Override @@ -51,48 +38,41 @@ class PlayerUtilsImpl implements PlayerUtils { @Override public void startAdvancementListening(@NotNull Object player) { - PlayerAdvancements advancements = ((ServerPlayer) player).getAdvancements(); - ServerAdvancementManager manager = ((CraftServer) Bukkit.getServer()).getServer().getAdvancements(); + AdvancementDataPlayer advancements = ((EntityPlayer) player).getAdvancementData(); + AdvancementDataWorld manager = ((CraftServer) Bukkit.getServer()).getServer().getAdvancementData(); ReflectionUtils.invokeMethod(REGISTER_LISTENERS_METHOD, advancements, manager); } @Override - public void sendMapUpdate(@NotNull Player player, int mapId, byte scale, boolean locked, @Nullable MapPatch mapPatch, @Nullable List icons) { - List decorations = icons != null ? icons.stream().map(this::toMapDecoration).collect(Collectors.toCollection(ArrayList::new)) : null; - MapItemSavedData.MapPatch patch = toMapPatch(mapPatch); - ClientboundMapItemDataPacket packet = new ClientboundMapItemDataPacket(mapId, scale, locked, decorations, patch); - ((CraftPlayer) player).getHandle().connection.send(packet); + public void sendMapUpdate(@NotNull Player player, int mapId, byte scale, boolean locked, @Nullable MapPatch mapPatch, @Nullable List icons) { + List decorations = icons != null + ? icons.stream().map(this::toMapDecoration).collect(Collectors.toCollection(ArrayList::new)) + : new ArrayList<>(); + + int width = 0; + int height = 0; + int startX = 0; + int startY = 0; + byte[] colors = new byte[0]; + if (mapPatch != null) { + width = mapPatch.getWidth(); + height = mapPatch.getHeight(); + startX = mapPatch.getStartX(); + startY = mapPatch.getStartY(); + colors = mapPatch.getColors(); + } + + PacketPlayOutMap packet = new PacketPlayOutMap(mapId, scale, !decorations.isEmpty(), locked, decorations, colors, startX, startY, width, height); + ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); } - private MapDecoration toMapDecoration(MapIcon icon) { - return new MapDecoration( - MapDecoration.Type.byIcon(icon.getType().getId()), + private MapIcon toMapDecoration(xyz.xenondevs.inventoryaccess.map.MapIcon icon) { + return new MapIcon( + MapIcon.Type.a(icon.getType().getId()), icon.getX(), icon.getY(), icon.getRot(), icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null ); } - private MapItemSavedData.MapPatch toMapPatch(MapPatch patch) { - if (patch == null) return null; - - return new MapItemSavedData.MapPatch( - patch.getStartX(), patch.getStartY(), - patch.getWidth(), patch.getHeight(), - patch.getColors() - ); - } - - @Override - public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable ComponentWrapper prompt, boolean force) { - var serverPlayer = ((CraftPlayer) player).getHandle(); - var packet = new ClientboundResourcePackPacket( - url, - DataUtils.toHexadecimalString(hash), - force, - InventoryUtilsImpl.createNMSComponent(prompt) - ); - serverPlayer.connection.connection.send(packet); - } - -} \ No newline at end of file +} diff --git a/inventoryaccess/inventory-access-r7/pom.xml b/inventoryaccess/inventory-access-r7/pom.xml index 1a398f6..a748fd8 100644 --- a/inventoryaccess/inventory-access-r7/pom.xml +++ b/inventoryaccess/inventory-access-r7/pom.xml @@ -13,17 +13,15 @@ inventory-access-r7 - 17 - 17 - 1.17.1-R0.1-SNAPSHOT + 11 + 11 org.spigotmc spigot - ${spigot.version} - remapped-mojang + 1.16.4-R0.1-SNAPSHOT provided @@ -33,115 +31,4 @@ - - - - xyz.xenondevs - string-remapper-maven-plugin - 0.6 - - - - remap-spigot - - remap - - - spigot - ${project.build.directory}/classes - ${project.build.directory}/classes-spigot - org.spigotmc:minecraft-server:txt:maps-mojang:${spigot.version} - - org.spigotmc:minecraft-server:csrg:maps-spigot:${spigot.version} - org.spigotmc:minecraft-server:csrg:maps-spigot-members:${spigot.version} - - - - - - remap-mojang - - remap - - - mojang - ${project.build.directory}/classes - ${project.build.directory}/classes-mojang - org.spigotmc:minecraft-server:txt:maps-mojang:${spigot.version} - - org.spigotmc:minecraft-server:csrg:maps-spigot:${spigot.version} - org.spigotmc:minecraft-server:csrg:maps-spigot-members:${spigot.version} - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.2.2 - - - default-jar - none - - - spigot - - jar - - - ${project.build.directory}/classes-spigot - - - - mojang - - jar - - - ${project.build.directory}/classes-mojang - remapped-mojang - - - - - - - net.md-5 - specialsource-maven-plugin - 1.2.2 - - - package - - remap - - remap-obf - - org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang - true - org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang - false - ${project.artifactId}-${project.version}-remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot - org.spigotmc:spigot:${spigot.version}:jar:remapped-obf - - - - - - - \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/AnvilInventoryImpl.java index 6438fbc..9c6f2c8 100644 --- a/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/AnvilInventoryImpl.java @@ -1,24 +1,12 @@ package xyz.xenondevs.inventoryaccess.r7; -import net.minecraft.core.BlockPos; -import net.minecraft.core.NonNullList; -import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; -import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.Container; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.inventory.AnvilMenu; -import net.minecraft.world.inventory.ContainerLevelAccess; -import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; +import net.minecraft.server.v1_16_R3.*; +import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -28,30 +16,30 @@ import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; import java.util.List; import java.util.function.Consumer; -class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { +class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory { - private final Component title; + private final IChatBaseComponent title; private final List> renameHandlers; private final CraftInventoryView view; - private final ServerPlayer player; + private final EntityPlayer player; private String text; private boolean open; - public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title, List> renameHandlers) { + public AnvilInventoryImpl(Player player, @NotNull ComponentWrapper title, List> renameHandlers) { this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandlers); } - public AnvilInventoryImpl(ServerPlayer player, Component title, List> renameHandlers) { - super(player.nextContainerCounter(), player.getInventory(), - ContainerLevelAccess.create(player.level, new BlockPos(0, 0, 0))); + public AnvilInventoryImpl(EntityPlayer player, IChatBaseComponent title, List> renameHandlers) { + super(player.nextContainerCounter(), player.inventory, + ContainerAccess.at(player.getWorld(), new BlockPosition(0, 0, 0))); this.title = title; this.renameHandlers = renameHandlers; this.player = player; - CraftInventoryAnvil inventory = new CraftInventoryAnvil(access.getLocation(), - inputSlots, resultSlots, this); + CraftInventoryAnvil inventory = new CraftInventoryAnvil(containerAccess.getLocation(), + repairInventory, resultInventory, this); this.view = new CraftInventoryView(player.getBukkitEntity(), inventory, this); } @@ -62,38 +50,30 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { CraftEventFactory.callInventoryOpenEvent(player, this); // set active container - player.containerMenu = this; + player.activeContainer = this; // send open packet - player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, title)); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.ANVIL, title)); // send initial items - NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); - player.connection.send(new ClientboundContainerSetContentPacket(getActiveWindowId(player), incrementStateId(), itemsList, ItemStack.EMPTY)); - - // init menu - player.initMenu(this); + NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); + player.playerConnection.sendPacket(new PacketPlayOutWindowItems(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); } public void sendItem(int slot) { - player.connection.send(new ClientboundContainerSetSlotPacket(getActiveWindowId(player), incrementStateId(), slot, getItem(slot))); + player.playerConnection.sendPacket(new PacketPlayOutSetSlot(InventoryUtilsImpl.getActiveWindowId(player), slot, getItem(slot))); } public void setItem(int slot, ItemStack item) { - if (slot < 2) inputSlots.setItem(slot, item); - else resultSlots.setItem(0, item); + if (slot < 2) repairInventory.setItem(slot, item); + else resultInventory.setItem(0, item); if (open) sendItem(slot); } private ItemStack getItem(int slot) { - if (slot < 2) return inputSlots.getItem(slot); - else return resultSlots.getItem(0); - } - - private int getActiveWindowId(ServerPlayer player) { - AbstractContainerMenu container = player.containerMenu; - return container == null ? -1 : container.containerId; + if (slot < 2) return repairInventory.getItem(slot); + else return resultInventory.getItem(0); } @Override @@ -116,7 +96,7 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { return open; } - // --- AnvilMenu --- + // --- ContainerAnvil --- @Override public CraftInventoryView getBukkitView() { @@ -124,15 +104,15 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { } /** - * Called every tick to see if the {@link Player} can still use that container. - * (Used to for checking the distance between the {@link Player} and the container + * Called every tick to see if the {@link EntityHuman} can still use that container. + * (Used to for checking the distance between the {@link EntityHuman} and the container * and closing the window when the distance gets too big.) * - * @param player The {@link Player} - * @return If the {@link Player} can still use that container + * @param entityhuman The {@link EntityHuman} + * @return If the {@link EntityHuman} can still use that container */ @Override - public boolean stillValid(Player player) { + public boolean canUse(EntityHuman entityhuman) { return true; } @@ -142,7 +122,7 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { * @param s The new rename text */ @Override - public void setItemName(String s) { + public void a(String s) { // save rename text text = s; @@ -157,33 +137,21 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { /** * Called when the container is closed to give the items back. * - * @param player The {@link Player} that closed this container + * @param entityhuman The {@link EntityHuman} that closed this container */ @Override - public void removed(Player player) { - open = false; - } - - - /** - * Called when the container gets closed to put items back into a players - * inventory or drop them in the world. - * - * @param player The {@link Player} that closed this container - * @param container The container - */ - @Override - protected void clearContainer(Player player, Container container) { + public void b(EntityHuman entityhuman) { open = false; + // don't give them the items, they don't own them } /** - * Called when both items in the {@link AnvilMenu#inputSlots} were set to create + * Called when both items in the {@link ContainerAnvil#repairInventory} were set to create * the resulting product, calculate the level cost and call the {@link PrepareAnvilEvent}. */ @Override - public void createResult() { - // empty + public void e() { + // no } diff --git a/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/CartographyInventoryImpl.java index fe9fddc..aef1828 100644 --- a/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/CartographyInventoryImpl.java @@ -1,20 +1,11 @@ package xyz.xenondevs.inventoryaccess.r7; -import net.minecraft.core.BlockPos; -import net.minecraft.core.NonNullList; -import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; -import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.Container; -import net.minecraft.world.inventory.*; -import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; +import net.minecraft.server.v1_16_R3.*; +import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -24,18 +15,14 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.lang.reflect.Field; -class CartographyInventoryImpl extends CartographyTableMenu implements CartographyInventory { +class CartographyInventoryImpl extends ContainerCartography implements CartographyInventory { - private static final Field RESULT_CONTAINER_FIELD = ReflectionUtils.getField( - CartographyTableMenu.class, - true, - "SRF(net.minecraft.world.inventory.CartographyTableMenu resultContainer)" - ); + private static final Field RESULT_CONTAINER_FIELD = ReflectionUtils.getField(ContainerCartography.class, true, "resultInventory"); - private final ResultContainer resultContainer = ReflectionUtils.getFieldValue(RESULT_CONTAINER_FIELD, this); - private final Component title; + private final InventoryCraftResult resultInventory = ReflectionUtils.getFieldValue(RESULT_CONTAINER_FIELD, this); + private final IChatBaseComponent title; private final CraftInventoryView view; - private final ServerPlayer player; + private final EntityPlayer player; private boolean open; @@ -43,12 +30,12 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title)); } - public CartographyInventoryImpl(ServerPlayer player, Component title) { - super(player.nextContainerCounter(), player.getInventory(), ContainerLevelAccess.create(player.level, new BlockPos(0, 0, 0))); + public CartographyInventoryImpl(EntityPlayer player, IChatBaseComponent title) { + super(player.nextContainerCounter(), player.inventory, ContainerAccess.at(player.getWorld(), new BlockPosition(0, 0, 0))); this.player = player; this.title = title; - CraftInventoryCartography inventory = new CraftInventoryCartography(container, resultContainer); + CraftInventoryCartography inventory = new CraftInventoryCartography(this.inventory, resultInventory); view = new CraftInventoryView(player.getBukkitEntity(), inventory, this); } @@ -59,17 +46,14 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp CraftEventFactory.callInventoryOpenEvent(player, this); // set active container - player.containerMenu = this; + player.activeContainer = this; // send open packet - player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.CARTOGRAPHY_TABLE, title)); + player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, Containers.CARTOGRAPHY_TABLE, title)); // send initial items - NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); - player.connection.send(new ClientboundContainerSetContentPacket(InventoryUtilsImpl.getActiveWindowId(player), incrementStateId(), itemsList, ItemStack.EMPTY)); - - // init menu - player.initMenu(this); + NonNullList itemsList = NonNullList.a(ItemStack.b, getItem(0), getItem(1), getItem(2)); + player.playerConnection.sendPacket(new PacketPlayOutWindowItems(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); } @Override @@ -78,19 +62,19 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp } public void sendItem(int slot) { - player.connection.send(new ClientboundContainerSetSlotPacket(InventoryUtilsImpl.getActiveWindowId(player), slot, incrementStateId(), getItem(slot))); + player.playerConnection.sendPacket(new PacketPlayOutSetSlot(InventoryUtilsImpl.getActiveWindowId(player), slot, getItem(slot))); } public void setItem(int slot, ItemStack item) { - if (slot < 2) container.setItem(slot, item); - else resultContainer.setItem(0, item); + if (slot < 2) inventory.setItem(slot, item); + else resultInventory.setItem(0, item); if (open) sendItem(slot); } private ItemStack getItem(int slot) { - if (slot < 2) return container.getItem(slot); - else return resultContainer.getItem(0); + if (slot < 2) return inventory.getItem(slot); + else return resultInventory.getItem(0); } @Override @@ -111,26 +95,26 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp } @Override - public void slotsChanged(Container container) { + public void a(IInventory inventory) { } @Override - public ItemStack quickMoveStack(net.minecraft.world.entity.player.Player entityhuman, int i) { - return ItemStack.EMPTY; + public ItemStack shiftClick(EntityHuman entityhuman, int i) { + return ItemStack.b; } @Override - public boolean canTakeItemForPickAll(ItemStack itemstack, Slot slot) { + public boolean a(ItemStack itemstack, Slot slot) { return true; } @Override - public boolean stillValid(net.minecraft.world.entity.player.Player entityhuman) { + public boolean canUse(EntityHuman entityhuman) { return true; } @Override - protected void clearContainer(net.minecraft.world.entity.player.Player entityhuman, Container container) { + public void b(EntityHuman entityHuman) { // empty } diff --git a/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/InventoryUtilsImpl.java index 5c39a3d..9d9bf31 100644 --- a/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/InventoryUtilsImpl.java @@ -1,17 +1,11 @@ package xyz.xenondevs.inventoryaccess.r7; -import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.Container; -import net.minecraft.world.MenuProvider; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.inventory.MenuType; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_17_R1.util.CraftChatMessage; +import net.minecraft.server.v1_16_R3.*; +import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_16_R3.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -21,14 +15,13 @@ import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; class InventoryUtilsImpl implements InventoryUtils { - public static Component createNMSComponent(ComponentWrapper component) { - if (component == null) return null; - return CraftChatMessage.fromJSON(component.serializeToJson()); + public static IChatBaseComponent createNMSComponent(ComponentWrapper component) { + return IChatBaseComponent.ChatSerializer.a(component.serializeToJson()); } - public static int getActiveWindowId(ServerPlayer player) { - AbstractContainerMenu container = player.containerMenu; - return container == null ? -1 : container.containerId; + public static int getActiveWindowId(EntityPlayer player) { + Container container = player.activeContainer; + return container == null ? -1 : container.windowId; } @Override @@ -38,36 +31,34 @@ class InventoryUtilsImpl implements InventoryUtils { @Override public void openCustomInventory(@NotNull Player player, @NotNull Inventory inventory, @Nullable ComponentWrapper title) { - ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); - MenuType menuType = CraftContainer.getNotchInventoryType(inventory); + EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); + Containers windowType = CraftContainer.getNotchInventoryType(inventory); - if (serverPlayer.connection != null) { - AbstractContainerMenu menu = new CraftContainer(inventory, serverPlayer, serverPlayer.nextContainerCounter()); - menu = CraftEventFactory.callInventoryOpenEvent(serverPlayer, menu); - if (menu != null) { - Container container = ((CraftInventory) inventory).getInventory(); - Component titleComponent; + if (entityPlayer.playerConnection != null) { + Container container = new CraftContainer(inventory, entityPlayer, entityPlayer.nextContainerCounter()); + container = CraftEventFactory.callInventoryOpenEvent(entityPlayer, container); + if (container != null) { + IInventory iinventory = ((CraftInventory) inventory).getInventory(); + IChatBaseComponent titleComponent; if (title == null) { - if (container instanceof MenuProvider) - titleComponent = ((MenuProvider) container).getDisplayName(); - else titleComponent = CraftChatMessage.fromString(menu.getBukkitView().getTitle())[0]; + if (iinventory instanceof ITileInventory) + titleComponent = ((ITileInventory) iinventory).getScoreboardDisplayName(); + else titleComponent = CraftChatMessage.fromString(container.getBukkitView().getTitle())[0]; } else titleComponent = createNMSComponent(title); - menu.checkReachable = false; - serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menuType, titleComponent)); - serverPlayer.containerMenu = menu; - serverPlayer.initMenu(menu); + entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, titleComponent)); + entityPlayer.activeContainer = container; + entityPlayer.activeContainer.addSlotListener(entityPlayer); } } - } @Override public void updateOpenInventoryTitle(@NotNull Player player, @NotNull ComponentWrapper title) { - ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); - AbstractContainerMenu menu = serverPlayer.containerMenu; - serverPlayer.connection.send(new ClientboundOpenScreenPacket(menu.containerId, menu.getType(), createNMSComponent(title))); - serverPlayer.initMenu(menu); + EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle(); + Container container = entityPlayer.activeContainer; + entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, container.getType(), createNMSComponent(title))); + entityPlayer.updateInventory(container); } } diff --git a/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/ItemUtilsImpl.java index ea9479e..1479c77 100644 --- a/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r7; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtIo; -import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; +import com.mojang.authlib.GameProfile; +import net.minecraft.server.v1_16_R3.ItemStack; +import net.minecraft.server.v1_16_R3.NBTCompressedStreamTools; +import net.minecraft.server.v1_16_R3.NBTTagCompound; +import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -25,19 +31,19 @@ class ItemUtilsImpl implements ItemUtils { } @Override - public void serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, @NotNull OutputStream outputStream, boolean compressed) { + public void serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, @NotNull OutputStream out, boolean compressed) { try { ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); - CompoundTag nbt = nmsStack.save(new CompoundTag()); + NBTTagCompound nbt = nmsStack.save(new NBTTagCompound()); if (compressed) { - NbtIo.writeCompressed(nbt, outputStream); + NBTCompressedStreamTools.a(nbt, out); } else { - DataOutputStream dataOut = new DataOutputStream(outputStream); - NbtIo.write(nbt, dataOut); + DataOutputStream dataOut = new DataOutputStream(out); + NBTCompressedStreamTools.a(nbt, (DataOutput) dataOut); } - outputStream.flush(); + out.flush(); } catch (IOException e) { e.printStackTrace(); } @@ -50,17 +56,17 @@ class ItemUtilsImpl implements ItemUtils { } @Override - public org.bukkit.inventory.ItemStack deserializeItemStack(@NotNull InputStream inputStream, boolean compressed) { + public org.bukkit.inventory.ItemStack deserializeItemStack(@NotNull InputStream in, boolean compressed) { try { - CompoundTag nbt; + NBTTagCompound nbt; if (compressed) { - nbt = NbtIo.readCompressed(inputStream); + nbt = NBTCompressedStreamTools.a(in); } else { - DataInputStream dataIn = new DataInputStream(inputStream); - nbt = NbtIo.read(dataIn); + DataInputStream dataIn = new DataInputStream(in); + nbt = NBTCompressedStreamTools.a((DataInput) dataIn); } - ItemStack itemStack = ItemStack.of(nbt); + ItemStack itemStack = ItemStack.a(nbt); return CraftItemStack.asCraftMirror(itemStack); } catch (IOException e) { @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/PlayerUtilsImpl.java index 38b5af6..35c917e 100644 --- a/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r7/src/main/java/xyz/xenondevs/inventoryaccess/r7/PlayerUtilsImpl.java @@ -1,23 +1,14 @@ package xyz.xenondevs.inventoryaccess.r7; -import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; -import net.minecraft.network.protocol.game.ClientboundResourcePackPacket; -import net.minecraft.server.PlayerAdvancements; -import net.minecraft.server.ServerAdvancementManager; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.saveddata.maps.MapDecoration; -import net.minecraft.world.level.saveddata.maps.MapItemSavedData; +import net.minecraft.server.v1_16_R3.*; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_17_R1.CraftServer; -import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R3.CraftServer; +import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.xenondevs.inventoryaccess.abstraction.util.PlayerUtils; -import xyz.xenondevs.inventoryaccess.component.ComponentWrapper; -import xyz.xenondevs.inventoryaccess.map.MapIcon; import xyz.xenondevs.inventoryaccess.map.MapPatch; -import xyz.xenondevs.inventoryaccess.util.DataUtils; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.lang.reflect.Method; @@ -27,12 +18,8 @@ import java.util.stream.Collectors; class PlayerUtilsImpl implements PlayerUtils { - private static final Method REGISTER_LISTENERS_METHOD = ReflectionUtils.getMethod( - PlayerAdvancements.class, - true, - "SRM(net.minecraft.server.PlayerAdvancements registerListeners)", - ServerAdvancementManager.class - ); + private static final Method REGISTER_LISTENERS_METHOD = + ReflectionUtils.getMethod(AdvancementDataPlayer.class, true, "b", AdvancementDataWorld.class); @Override public void stopAdvancementListening(@NotNull Player player) { @@ -41,7 +28,7 @@ class PlayerUtilsImpl implements PlayerUtils { @Override public void stopAdvancementListening(@NotNull Object player) { - ((ServerPlayer) player).getAdvancements().stopListening(); + ((EntityPlayer) player).getAdvancementData().a(); // stops listening } @Override @@ -51,48 +38,41 @@ class PlayerUtilsImpl implements PlayerUtils { @Override public void startAdvancementListening(@NotNull Object player) { - PlayerAdvancements advancements = ((ServerPlayer) player).getAdvancements(); - ServerAdvancementManager manager = ((CraftServer) Bukkit.getServer()).getServer().getAdvancements(); + AdvancementDataPlayer advancements = ((EntityPlayer) player).getAdvancementData(); + AdvancementDataWorld manager = ((CraftServer) Bukkit.getServer()).getServer().getAdvancementData(); ReflectionUtils.invokeMethod(REGISTER_LISTENERS_METHOD, advancements, manager); } @Override - public void sendMapUpdate(@NotNull Player player, int mapId, byte scale, boolean locked, @Nullable MapPatch mapPatch, @Nullable List icons) { - List decorations = icons != null ? icons.stream().map(this::toMapDecoration).collect(Collectors.toCollection(ArrayList::new)) : null; - MapItemSavedData.MapPatch patch = toMapPatch(mapPatch); - ClientboundMapItemDataPacket packet = new ClientboundMapItemDataPacket(mapId, scale, locked, decorations, patch); - ((CraftPlayer) player).getHandle().connection.send(packet); + public void sendMapUpdate(@NotNull Player player, int mapId, byte scale, boolean locked, @Nullable MapPatch mapPatch, @Nullable List icons) { + List decorations = icons != null + ? icons.stream().map(this::toMapDecoration).collect(Collectors.toCollection(ArrayList::new)) + : new ArrayList<>(); + + int width = 0; + int height = 0; + int startX = 0; + int startY = 0; + byte[] colors = new byte[0]; + if (mapPatch != null) { + width = mapPatch.getWidth(); + height = mapPatch.getHeight(); + startX = mapPatch.getStartX(); + startY = mapPatch.getStartY(); + colors = mapPatch.getColors(); + } + + PacketPlayOutMap packet = new PacketPlayOutMap(mapId, scale, !decorations.isEmpty(), locked, decorations, colors, startX, startY, width, height); + ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); } - private MapDecoration toMapDecoration(MapIcon icon) { - return new MapDecoration( - MapDecoration.Type.byIcon(icon.getType().getId()), + private MapIcon toMapDecoration(xyz.xenondevs.inventoryaccess.map.MapIcon icon) { + return new MapIcon( + MapIcon.Type.a(icon.getType().getId()), icon.getX(), icon.getY(), icon.getRot(), icon.getComponent() != null ? InventoryUtilsImpl.createNMSComponent(icon.getComponent()) : null ); } - private MapItemSavedData.MapPatch toMapPatch(MapPatch patch) { - if (patch == null) return null; - - return new MapItemSavedData.MapPatch( - patch.getStartX(), patch.getStartY(), - patch.getWidth(), patch.getHeight(), - patch.getColors() - ); - } - - @Override - public void sendResourcePack(@NotNull Player player, @NotNull String url, byte[] hash, @Nullable ComponentWrapper prompt, boolean force) { - var serverPlayer = ((CraftPlayer) player).getHandle(); - var packet = new ClientboundResourcePackPacket( - url, - DataUtils.toHexadecimalString(hash), - force, - InventoryUtilsImpl.createNMSComponent(prompt) - ); - serverPlayer.connection.connection.send(packet); - } - } diff --git a/inventoryaccess/inventory-access-r8/pom.xml b/inventoryaccess/inventory-access-r8/pom.xml index f713bb4..96e5e15 100644 --- a/inventoryaccess/inventory-access-r8/pom.xml +++ b/inventoryaccess/inventory-access-r8/pom.xml @@ -1,6 +1,6 @@ - xyz.xenondevs.invui @@ -15,7 +15,7 @@ 17 17 - 1.18-R0.1-SNAPSHOT + 1.17-R0.1-SNAPSHOT @@ -36,9 +36,9 @@ - xyz.xenondevs.string-remapper + xyz.xenondevs string-remapper-maven-plugin - 1.2 + 0.6 @@ -47,10 +47,14 @@ remap - ${spigot.version} - spigot + spigot ${project.build.directory}/classes ${project.build.directory}/classes-spigot + org.spigotmc:minecraft-server:txt:maps-mojang:${spigot.version} + + org.spigotmc:minecraft-server:csrg:maps-spigot:${spigot.version} + org.spigotmc:minecraft-server:csrg:maps-spigot-members:${spigot.version} + @@ -60,10 +64,14 @@ remap - ${spigot.version} - mojang + mojang ${project.build.directory}/classes ${project.build.directory}/classes-mojang + org.spigotmc:minecraft-server:txt:maps-mojang:${spigot.version} + + org.spigotmc:minecraft-server:csrg:maps-spigot:${spigot.version} + org.spigotmc:minecraft-server:csrg:maps-spigot-members:${spigot.version} + diff --git a/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/AnvilInventoryImpl.java index dc55b8f..7ee3c39 100644 --- a/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/AnvilInventoryImpl.java @@ -9,16 +9,15 @@ import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.inventory.ContainerLevelAccess; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_18_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -69,14 +68,14 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { // send initial items NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); - player.connection.send(new ClientboundContainerSetContentPacket(getActiveWindowId(player), incrementStateId(), itemsList, ItemStack.EMPTY)); + player.connection.send(new ClientboundContainerSetContentPacket(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); // init menu player.initMenu(this); } public void sendItem(int slot) { - player.connection.send(new ClientboundContainerSetSlotPacket(getActiveWindowId(player), incrementStateId(), slot, getItem(slot))); + player.connection.send(new ClientboundContainerSetSlotPacket(InventoryUtilsImpl.getActiveWindowId(player), slot, getItem(slot))); } public void setItem(int slot, ItemStack item) { @@ -91,11 +90,6 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { else return resultSlots.getItem(0); } - private int getActiveWindowId(ServerPlayer player) { - AbstractContainerMenu container = player.containerMenu; - return container == null ? -1 : container.containerId; - } - @Override public void setItem(int slot, org.bukkit.inventory.ItemStack itemStack) { setItem(slot, CraftItemStack.asNMSCopy(itemStack)); @@ -116,7 +110,7 @@ class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory { return open; } - // --- AnvilMenu --- + // --- ContainerAnvil --- @Override public CraftInventoryView getBukkitView() { diff --git a/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/CartographyInventoryImpl.java index 240afb4..7fca1e0 100644 --- a/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/CartographyInventoryImpl.java @@ -10,11 +10,11 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.inventory.*; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_18_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; @@ -66,7 +66,7 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp // send initial items NonNullList itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2)); - player.connection.send(new ClientboundContainerSetContentPacket(InventoryUtilsImpl.getActiveWindowId(player), incrementStateId(), itemsList, ItemStack.EMPTY)); + player.connection.send(new ClientboundContainerSetContentPacket(InventoryUtilsImpl.getActiveWindowId(player), itemsList)); // init menu player.initMenu(this); @@ -78,7 +78,7 @@ class CartographyInventoryImpl extends CartographyTableMenu implements Cartograp } public void sendItem(int slot) { - player.connection.send(new ClientboundContainerSetSlotPacket(InventoryUtilsImpl.getActiveWindowId(player), slot, incrementStateId(), getItem(slot))); + player.connection.send(new ClientboundContainerSetSlotPacket(InventoryUtilsImpl.getActiveWindowId(player), slot, getItem(slot))); } public void setItem(int slot, ItemStack item) { diff --git a/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/InventoryUtilsImpl.java index a534aee..0f35be0 100644 --- a/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/InventoryUtilsImpl.java @@ -7,11 +7,11 @@ import net.minecraft.world.Container; import net.minecraft.world.MenuProvider; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_18_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_18_R1.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_17_R1.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/ItemUtilsImpl.java index 070c97d..6eb82e4 100644 --- a/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r8; +import com.mojang.authlib.GameProfile; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/PlayerUtilsImpl.java index e32a416..9a47b96 100644 --- a/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r8/src/main/java/xyz/xenondevs/inventoryaccess/r8/PlayerUtilsImpl.java @@ -8,8 +8,8 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.saveddata.maps.MapDecoration; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_18_R1.CraftServer; -import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_17_R1.CraftServer; +import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,7 +30,7 @@ class PlayerUtilsImpl implements PlayerUtils { private static final Method REGISTER_LISTENERS_METHOD = ReflectionUtils.getMethod( PlayerAdvancements.class, true, - "ASRM(net/minecraft/server/PlayerAdvancements.registerListeners(Lnet/minecraft/server/ServerAdvancementManager;)V)", + "SRM(net.minecraft.server.PlayerAdvancements registerListeners)", ServerAdvancementManager.class ); @@ -95,4 +95,4 @@ class PlayerUtilsImpl implements PlayerUtils { serverPlayer.connection.connection.send(packet); } -} +} \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r9/pom.xml b/inventoryaccess/inventory-access-r9/pom.xml index eb3d843..1382ffa 100644 --- a/inventoryaccess/inventory-access-r9/pom.xml +++ b/inventoryaccess/inventory-access-r9/pom.xml @@ -1,6 +1,6 @@ - xyz.xenondevs.invui @@ -15,7 +15,7 @@ 17 17 - 1.18.2-R0.1-SNAPSHOT + 1.17.1-R0.1-SNAPSHOT @@ -36,9 +36,9 @@ - xyz.xenondevs.string-remapper + xyz.xenondevs string-remapper-maven-plugin - 1.2 + 0.6 @@ -47,10 +47,14 @@ remap - ${spigot.version} - spigot + spigot ${project.build.directory}/classes ${project.build.directory}/classes-spigot + org.spigotmc:minecraft-server:txt:maps-mojang:${spigot.version} + + org.spigotmc:minecraft-server:csrg:maps-spigot:${spigot.version} + org.spigotmc:minecraft-server:csrg:maps-spigot-members:${spigot.version} + @@ -60,10 +64,14 @@ remap - ${spigot.version} - mojang + mojang ${project.build.directory}/classes ${project.build.directory}/classes-mojang + org.spigotmc:minecraft-server:txt:maps-mojang:${spigot.version} + + org.spigotmc:minecraft-server:csrg:maps-spigot:${spigot.version} + org.spigotmc:minecraft-server:csrg:maps-spigot-members:${spigot.version} + diff --git a/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/AnvilInventoryImpl.java b/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/AnvilInventoryImpl.java index c7a869e..1aea925 100644 --- a/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/AnvilInventoryImpl.java +++ b/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/AnvilInventoryImpl.java @@ -14,11 +14,11 @@ import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.inventory.ContainerLevelAccess; import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_18_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventoryAnvil; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/CartographyInventoryImpl.java b/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/CartographyInventoryImpl.java index 78bd093..8fc1343 100644 --- a/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/CartographyInventoryImpl.java +++ b/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/CartographyInventoryImpl.java @@ -10,11 +10,11 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.inventory.*; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_18_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventoryCartography; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventoryView; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/InventoryUtilsImpl.java b/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/InventoryUtilsImpl.java index cb861fd..012bb74 100644 --- a/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/InventoryUtilsImpl.java +++ b/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/InventoryUtilsImpl.java @@ -7,11 +7,11 @@ import net.minecraft.world.Container; import net.minecraft.world.MenuProvider; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_18_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftContainer; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftInventory; -import org.bukkit.craftbukkit.v1_18_R2.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_17_R1.event.CraftEventFactory; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftContainer; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_17_R1.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; diff --git a/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/ItemUtilsImpl.java b/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/ItemUtilsImpl.java index 6fe06df..c2d1649 100644 --- a/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/ItemUtilsImpl.java +++ b/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/ItemUtilsImpl.java @@ -1,9 +1,10 @@ package xyz.xenondevs.inventoryaccess.r9; +import com.mojang.authlib.GameProfile; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import net.minecraft.world.item.ItemStack; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import xyz.xenondevs.inventoryaccess.abstraction.util.ItemUtils; @@ -12,11 +13,16 @@ import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; import java.io.*; +import java.lang.reflect.Method; import java.util.List; import java.util.stream.Collectors; class ItemUtilsImpl implements ItemUtils { + private static final Method CRAFT_META_SKULL_SET_PROFILE_METHOD = ReflectionUtils.getMethod( + ReflectionRegistry.CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class + ); + @Override public byte[] serializeItemStack(org.bukkit.inventory.@NotNull ItemStack itemStack, boolean compressed) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -88,4 +94,9 @@ class ItemUtilsImpl implements ItemUtils { ); } + @Override + public void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile) { + ReflectionUtils.invokeMethod(CRAFT_META_SKULL_SET_PROFILE_METHOD, itemMeta, gameProfile); + } + } \ No newline at end of file diff --git a/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/PlayerUtilsImpl.java b/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/PlayerUtilsImpl.java index 03b4378..db74084 100644 --- a/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/PlayerUtilsImpl.java +++ b/inventoryaccess/inventory-access-r9/src/main/java/xyz/xenondevs/inventoryaccess/r9/PlayerUtilsImpl.java @@ -8,8 +8,8 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.saveddata.maps.MapDecoration; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_18_R2.CraftServer; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_17_R1.CraftServer; +import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,7 +30,7 @@ class PlayerUtilsImpl implements PlayerUtils { private static final Method REGISTER_LISTENERS_METHOD = ReflectionUtils.getMethod( PlayerAdvancements.class, true, - "ASRM(net/minecraft/server/PlayerAdvancements.registerListeners(Lnet/minecraft/server/ServerAdvancementManager;)V)", + "SRM(net.minecraft.server.PlayerAdvancements registerListeners)", ServerAdvancementManager.class ); diff --git a/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/abstraction/util/ItemUtils.java b/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/abstraction/util/ItemUtils.java index a3c2412..82ef207 100644 --- a/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/abstraction/util/ItemUtils.java +++ b/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/abstraction/util/ItemUtils.java @@ -1,5 +1,6 @@ package xyz.xenondevs.inventoryaccess.abstraction.util; +import com.mojang.authlib.GameProfile; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; @@ -67,4 +68,12 @@ public interface ItemUtils { */ void setLore(@NotNull ItemMeta itemMeta, @NotNull List<@NotNull ComponentWrapper> lore); + /** + * Sets the game profile of a player skull, thereby changing its owner and texture. + * + * @param itemMeta The {@link ItemMeta} of the skull + * @param gameProfile The game profile to apply to the skull + */ + void setSkullGameProfile(@NotNull ItemMeta itemMeta, @NotNull GameProfile gameProfile); + } diff --git a/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/util/ReflectionRegistry.java b/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/util/ReflectionRegistry.java index bdf1898..eaed421 100644 --- a/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/util/ReflectionRegistry.java +++ b/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/util/ReflectionRegistry.java @@ -1,6 +1,5 @@ package xyz.xenondevs.inventoryaccess.util; -import com.mojang.authlib.GameProfile; import org.bukkit.Bukkit; import java.lang.reflect.Field; @@ -20,7 +19,6 @@ public class ReflectionRegistry { // Methods public static final Method PAPER_PLUGIN_CLASS_LOADER_GET_LOADED_JAVA_PLUGIN_METHOD; - public static final Method CB_CRAFT_META_SKULL_SET_PROFILE_METHOD = getMethod(CB_CRAFT_META_SKULL_CLASS, true, "setProfile", GameProfile.class); // Fields public static final Field PLUGIN_CLASS_LOADER_PLUGIN_FIELD = getField(PLUGIN_CLASS_LOADER_CLASS, true, "plugin"); diff --git a/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/version/InventoryAccessRevision.java b/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/version/InventoryAccessRevision.java index 33df554..a78f088 100644 --- a/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/version/InventoryAccessRevision.java +++ b/inventoryaccess/inventory-access/src/main/java/xyz/xenondevs/inventoryaccess/version/InventoryAccessRevision.java @@ -5,20 +5,22 @@ import xyz.xenondevs.inventoryaccess.util.VersionUtils; public enum InventoryAccessRevision { // this order is required - R15("r15", "1.20.2"), - R14("r14", "1.20.0"), - R13("r13", "1.19.4"), - R12("r12", "1.19.3"), - R11("r11", "1.19.1"), - R10("r10", "1.19.0"), - R9("r9", "1.18.2"), - R8("r8", "1.18.0"), - R7("r7", "1.17.1"), - R6("r6", "1.17.0"), - R5("r5", "1.16.4"), - R4("r4", "1.16.2"), - R3("r3", "1.16.0"), - R2("r2", "1.15.0"), + R17("r17", "1.20.2"), + R16("r16", "1.20.0"), + R15("r15", "1.19.4"), + R14("r14", "1.19.3"), + R13("r13", "1.19.1"), + R12("r12", "1.19.0"), + R11("r11", "1.18.2"), + R10("r10", "1.18.0"), + R9("r9", "1.17.1"), + R8("r8", "1.17.0"), + R7("r7", "1.16.4"), + R6("r6", "1.16.2"), + R5("r5", "1.16.0"), + R4("r4", "1.15.0"), + R3("r3", "1.14.4"), + R2("r2", "1.14.1"), R1("r1", "1.14.0"); public static final InventoryAccessRevision REQUIRED_REVISION = getRequiredRevision(); diff --git a/invui-core/pom.xml b/invui-core/pom.xml index eb365d3..aa61a98 100644 --- a/invui-core/pom.xml +++ b/invui-core/pom.xml @@ -22,13 +22,7 @@ org.spigotmc spigot-api - 1.20.2-R0.1-SNAPSHOT - provided - - - it.unimi.dsi - fastutil - 8.5.12 + 1.14-R0.1-SNAPSHOT provided diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/gui/AbstractGui.java b/invui-core/src/main/java/xyz/xenondevs/invui/gui/AbstractGui.java index d6c4d8f..3c63e82 100644 --- a/invui-core/src/main/java/xyz/xenondevs/invui/gui/AbstractGui.java +++ b/invui-core/src/main/java/xyz/xenondevs/invui/gui/AbstractGui.java @@ -1,7 +1,5 @@ package xyz.xenondevs.invui.gui; -import it.unimi.dsi.fastutil.ints.IntOpenHashSet; -import it.unimi.dsi.fastutil.ints.IntSet; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryAction; @@ -10,6 +8,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import xyz.xenondevs.invui.InvUI; import xyz.xenondevs.invui.animation.Animation; import xyz.xenondevs.invui.gui.structure.Marker; import xyz.xenondevs.invui.gui.structure.Structure; @@ -92,41 +91,42 @@ public abstract class AbstractGui implements Gui, GuiParent { Player player = (Player) event.getWhoClicked(); - ItemStack cursor = event.getCursor(); - if (cursor != null && cursor.getType().isAir()) cursor = null; - - ItemStack clicked = event.getCurrentItem(); - if (clicked != null && clicked.getType().isAir()) clicked = null; + ItemStack cursor = ItemUtils.takeUnlessEmpty(event.getCursor()); + ItemStack clicked = ItemUtils.takeUnlessEmpty(event.getCurrentItem()); ItemStack technicallyClicked = inventory.getItem(slot); if (inventory.isSynced(slot, clicked) || didClickBackgroundItem(player, element, inventory, slot, clicked)) { - switch (event.getClick()) { - case LEFT: + // using enum names because SWAP_OFFHAND does not exist on earlier versions + switch (event.getClick().name()) { + case "LEFT": handleInvLeftClick(event, inventory, slot, player, technicallyClicked, cursor); break; - case RIGHT: + case "RIGHT": handleInvRightClick(event, inventory, slot, player, technicallyClicked, cursor); break; - case SHIFT_RIGHT: - case SHIFT_LEFT: + case "SHIFT_RIGHT": + case "SHIFT_LEFT": handleInvItemShift(event, inventory, slot, player, technicallyClicked); break; - case NUMBER_KEY: + case "NUMBER_KEY": handleInvNumberKey(event, inventory, slot, player, technicallyClicked); break; - case SWAP_OFFHAND: + case "SWAP_OFFHAND": handleInvOffHandKey(event, inventory, slot, player, technicallyClicked); break; - case DROP: + case "DROP": handleInvDrop(false, event, inventory, slot, player, technicallyClicked); break; - case CONTROL_DROP: + case "CONTROL_DROP": handleInvDrop(true, event, inventory, slot, player, technicallyClicked); break; - case DOUBLE_CLICK: + case "DOUBLE_CLICK": handleInvDoubleClick(event, inventory, player, cursor); break; + default: + InvUI.getInstance().getLogger().warning("Unknown click type: " + event.getClick().name()); + break; } } } @@ -244,8 +244,7 @@ public abstract class AbstractGui implements Gui, GuiParent { if (window instanceof AbstractSingleWindow) { org.bukkit.inventory.Inventory playerInventory = player.getInventory(); int hotbarButton = event.getHotbarButton(); - ItemStack hotbarItem = playerInventory.getItem(hotbarButton); - if (hotbarItem != null && hotbarItem.getType().isAir()) hotbarItem = null; + ItemStack hotbarItem = ItemUtils.takeUnlessEmpty(playerInventory.getItem(hotbarButton)); UpdateReason updateReason = new PlayerUpdateReason(player, event); @@ -259,8 +258,7 @@ public abstract class AbstractGui implements Gui, GuiParent { Window window = WindowManager.getInstance().getOpenWindow(player); if (window instanceof AbstractSingleWindow) { PlayerInventory playerInventory = player.getInventory(); - ItemStack offhandItem = playerInventory.getItemInOffHand(); - if (offhandItem != null && offhandItem.getType().isAir()) offhandItem = null; + ItemStack offhandItem = ItemUtils.takeUnlessEmpty(playerInventory.getItemInOffHand()); UpdateReason updateReason = new PlayerUpdateReason(player, event); @@ -347,8 +345,8 @@ public abstract class AbstractGui implements Gui, GuiParent { return originalAmount; } - public Map getAllInventorySlots(Inventory... ignored) { - TreeMap slots = new TreeMap<>(Comparator.comparingInt(Inventory::getGuiPriority).reversed()); + public Map> getAllInventorySlots(Inventory... ignored) { + TreeMap> slots = new TreeMap<>(Comparator.comparingInt(Inventory::getGuiPriority).reversed()); Set ignoredSet = Arrays.stream(ignored).collect(Collectors.toSet()); for (SlotElement element : slotElements) { @@ -362,7 +360,7 @@ public abstract class AbstractGui implements Gui, GuiParent { if (ignoredSet.contains(inventory)) continue; - slots.computeIfAbsent(inventory, i -> new IntOpenHashSet()).add(invElement.getSlot()); + slots.computeIfAbsent(inventory, i -> new HashSet<>()).add(invElement.getSlot()); } } @@ -374,9 +372,9 @@ public abstract class AbstractGui implements Gui, GuiParent { return getAllInventorySlots(ignored).keySet(); ArrayList inventories = new ArrayList<>(); - for (Map.Entry entry : getAllInventorySlots(ignored).entrySet()) { + for (Map.Entry> entry : getAllInventorySlots(ignored).entrySet()) { Inventory inventory = entry.getKey(); - IntSet slots = entry.getValue(); + Set slots = entry.getValue(); inventories.add(new ObscuredInventory(inventory, slot -> !slots.contains(slot))); } diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/inventory/ObscuredInventory.java b/invui-core/src/main/java/xyz/xenondevs/invui/inventory/ObscuredInventory.java index 8c152ee..9e751a8 100644 --- a/invui-core/src/main/java/xyz/xenondevs/invui/inventory/ObscuredInventory.java +++ b/invui-core/src/main/java/xyz/xenondevs/invui/inventory/ObscuredInventory.java @@ -1,6 +1,5 @@ package xyz.xenondevs.invui.inventory; -import it.unimi.dsi.fastutil.ints.IntArrayList; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Consumer; import org.jetbrains.annotations.NotNull; @@ -9,6 +8,7 @@ import xyz.xenondevs.invui.inventory.event.ItemPostUpdateEvent; import xyz.xenondevs.invui.inventory.event.ItemPreUpdateEvent; import xyz.xenondevs.invui.inventory.event.UpdateReason; +import java.util.ArrayList; import java.util.function.IntPredicate; /** @@ -28,7 +28,7 @@ public class ObscuredInventory extends Inventory { public ObscuredInventory(@NotNull Inventory inventory, @NotNull IntPredicate isObscured) { this.inventory = inventory; - IntArrayList slots = new IntArrayList(); + ArrayList slots = new ArrayList<>(); for (int slot = 0; slot < inventory.getSize(); slot++) { if (isObscured.test(slot)) continue; @@ -36,7 +36,7 @@ public class ObscuredInventory extends Inventory { slots.add(slot); } - this.slots = slots.toIntArray(); + this.slots = slots.stream().mapToInt(Integer::intValue).toArray(); } @Override diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/item/builder/SkullBuilder.java b/invui-core/src/main/java/xyz/xenondevs/invui/item/builder/SkullBuilder.java index f12d5ac..0d650c8 100644 --- a/invui-core/src/main/java/xyz/xenondevs/invui/item/builder/SkullBuilder.java +++ b/invui-core/src/main/java/xyz/xenondevs/invui/item/builder/SkullBuilder.java @@ -14,8 +14,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import xyz.xenondevs.inventoryaccess.util.ReflectionRegistry; -import xyz.xenondevs.inventoryaccess.util.ReflectionUtils; +import xyz.xenondevs.inventoryaccess.InventoryAccess; import xyz.xenondevs.invui.util.MojangApiUtils; import java.io.Serializable; @@ -68,7 +67,7 @@ public final class SkullBuilder extends AbstractItemBuilder { ItemMeta meta = item.getItemMeta(); if (gameProfile != null) - ReflectionUtils.invokeMethod(ReflectionRegistry.CB_CRAFT_META_SKULL_SET_PROFILE_METHOD, meta, gameProfile); + InventoryAccess.getItemUtils().setSkullGameProfile(meta, gameProfile); item.setItemMeta(meta); diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/util/InventoryUtils.java b/invui-core/src/main/java/xyz/xenondevs/invui/util/InventoryUtils.java index e8eaec6..94fb8d8 100644 --- a/invui-core/src/main/java/xyz/xenondevs/invui/util/InventoryUtils.java +++ b/invui-core/src/main/java/xyz/xenondevs/invui/util/InventoryUtils.java @@ -91,7 +91,7 @@ public class InventoryUtils { continue; ItemStack item = storageContents[i]; - if (item == null || item.getType().isAir()) + if (ItemUtils.isEmpty(item)) return i; } @@ -121,8 +121,7 @@ public class InventoryUtils { public static boolean containsSimilar(@NotNull Inventory inventory, @Nullable ItemStack itemStack) { for (int i = 0; i < inventory.getSize(); i++) { - ItemStack currentStack = inventory.getItem(i); - if (currentStack != null && currentStack.getType().isAir()) currentStack = null; + ItemStack currentStack = ItemUtils.takeUnlessEmpty(inventory.getItem(i)); if ((currentStack == null && itemStack == null) || (currentStack != null && currentStack.isSimilar(itemStack))) return true; diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/util/ItemUtils.java b/invui-core/src/main/java/xyz/xenondevs/invui/util/ItemUtils.java index 9ad3aa4..0b3b1f7 100644 --- a/invui-core/src/main/java/xyz/xenondevs/invui/util/ItemUtils.java +++ b/invui-core/src/main/java/xyz/xenondevs/invui/util/ItemUtils.java @@ -1,5 +1,6 @@ package xyz.xenondevs.invui.util; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -15,7 +16,11 @@ public class ItemUtils { * @return Whether the {@link ItemStack} is empty. */ public static boolean isEmpty(@Nullable ItemStack itemStack) { - return itemStack == null || itemStack.getType().isAir() || itemStack.getAmount() <= 0; + if (itemStack == null || itemStack.getAmount() <= 0) + return true; + + Material type = itemStack.getType(); + return type == Material.AIR || type == Material.CAVE_AIR || type == Material.VOID_AIR; } /** diff --git a/invui-core/src/main/java/xyz/xenondevs/invui/window/WindowManager.java b/invui-core/src/main/java/xyz/xenondevs/invui/window/WindowManager.java index ab7a195..23dd3ad 100644 --- a/invui-core/src/main/java/xyz/xenondevs/invui/window/WindowManager.java +++ b/invui-core/src/main/java/xyz/xenondevs/invui/window/WindowManager.java @@ -113,7 +113,7 @@ public class WindowManager implements Listener { if (window != null) { window.handleClickEvent(event); - if (event.getClick() == ClickType.SWAP_OFFHAND && event.isCancelled()) { + if (event.getClick().name().equals("SWAP_OFFHAND") && event.isCancelled()) { EntityEquipment equipment = event.getWhoClicked().getEquipment(); equipment.setItemInOffHand(equipment.getItemInOffHand()); } diff --git a/invui/pom.xml b/invui/pom.xml index 0d476c9..2ade9be 100644 --- a/invui/pom.xml +++ b/invui/pom.xml @@ -98,6 +98,16 @@ inventory-access-r15 ${project.version} + + xyz.xenondevs.invui + inventory-access-r16 + ${project.version} + + + xyz.xenondevs.invui + inventory-access-r17 + ${project.version} + \ No newline at end of file diff --git a/pom.xml b/pom.xml index c93836c..3bae67b 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,8 @@ inventoryaccess/inventory-access-r13 inventoryaccess/inventory-access-r14 inventoryaccess/inventory-access-r15 + inventoryaccess/inventory-access-r16 + inventoryaccess/inventory-access-r17 invui-core invui-resourcepack invui-kotlin