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