diff --git a/.github/workflows/buildtools.sh b/.github/workflows/buildtools.sh index 24294de..b07819f 100644 --- a/.github/workflows/buildtools.sh +++ b/.github/workflows/buildtools.sh @@ -27,4 +27,5 @@ checkVersion () { checkVersion "1.19" "17" checkVersion "1.19.3" "17" -checkVersion "1.19.4" "17" \ No newline at end of file +checkVersion "1.19.4" "17" +checkVersion "1.20" "17" \ No newline at end of file diff --git a/pom.xml b/pom.xml index 31798ec..5145f2b 100644 --- a/pom.xml +++ b/pom.xml @@ -29,9 +29,9 @@ 1.2.7 1.2.4 - 16 - 16 - 16 + 17 + 17 + 17 UTF-8 @@ -56,7 +56,7 @@ maven-compiler-plugin ${plugin.compile.version} - 16 + 17 diff --git a/zip-nms/pom.xml b/zip-nms/pom.xml index 0d45189..c1c1f02 100644 --- a/zip-nms/pom.xml +++ b/zip-nms/pom.xml @@ -15,5 +15,6 @@ zip-nms-v1_19_R1 zip-nms-v1_19_R2 zip-nms-v1_19_R3 + zip-nms-v1_20_R1 \ No newline at end of file diff --git a/zip-nms/zip-nms-v1_20_R1/pom.xml b/zip-nms/zip-nms-v1_20_R1/pom.xml new file mode 100644 index 0000000..59faf60 --- /dev/null +++ b/zip-nms/zip-nms-v1_20_R1/pom.xml @@ -0,0 +1,66 @@ + + 4.0.0 + + + net.imprex + zip-nms + ${revision} + + + zip-nms-v1_20_R1 + jar + + + + net.imprex + zip-nms-api + ${revision} + provided + + + org.spigotmc + spigot + 1.20-R0.1-SNAPSHOT + remapped-mojang + provided + + + + + + + net.md-5 + specialsource-maven-plugin + ${plugin.specialsource.version} + + + package + + remap + + remap-obf + + org.spigotmc:minecraft-server:1.20-R0.1-SNAPSHOT:txt:maps-mojang + true + org.spigotmc:spigot:1.20-R0.1-SNAPSHOT:jar:remapped-mojang + true + remapped-obf + + + + package + + remap + + remap-spigot + + ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar + org.spigotmc:minecraft-server:1.20-R0.1-SNAPSHOT:csrg:maps-spigot + org.spigotmc:spigot:1.20-R0.1-SNAPSHOT:jar:remapped-obf + + + + + + + \ No newline at end of file diff --git a/zip-nms/zip-nms-v1_20_R1/src/main/java/net/imprex/zip/nms/v1_20_R1/ZipNmsManager.java b/zip-nms/zip-nms-v1_20_R1/src/main/java/net/imprex/zip/nms/v1_20_R1/ZipNmsManager.java new file mode 100644 index 0000000..ecc1f92 --- /dev/null +++ b/zip-nms/zip-nms-v1_20_R1/src/main/java/net/imprex/zip/nms/v1_20_R1/ZipNmsManager.java @@ -0,0 +1,92 @@ +package net.imprex.zip.nms.v1_20_R1; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; + +import net.imprex.zip.common.ReflectionUtil; +import net.imprex.zip.nms.api.NmsManager; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtIo; +import net.minecraft.nbt.Tag; + +public class ZipNmsManager implements NmsManager { + + private static final Class CRAFTMETASKULL_CLASS = ReflectionUtil.getCraftBukkitClass("inventory.CraftMetaSkull"); + private static final Method CRAFTMETASKULL_SET_PROFILE = ReflectionUtil.getMethod(CRAFTMETASKULL_CLASS, + "setProfile", GameProfile.class); + + public byte[] nbtToBinary(CompoundTag compound) { + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + NbtIo.writeCompressed(compound, outputStream); + return outputStream.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public CompoundTag binaryToNBT(byte[] binary) { + try (ByteArrayInputStream inputStream = new ByteArrayInputStream(binary)) { + return NbtIo.readCompressed(inputStream); + } catch (Exception e) { + e.printStackTrace(); + } + return new CompoundTag(); + } + + @Override + public byte[] itemstackToBinary(ItemStack[] items) { + CompoundTag inventory = new CompoundTag(); + ListTag list = new ListTag(); + for (ItemStack itemStack : items) { + net.minecraft.world.item.ItemStack craftItem = CraftItemStack.asNMSCopy(itemStack); + list.add(craftItem.save(new CompoundTag())); + } + inventory.put("i", list); + return nbtToBinary(inventory); + } + + @Override + public List binaryToItemStack(byte[] binary) { + CompoundTag nbt = binaryToNBT(binary); + List items = new ArrayList<>(); + if (nbt.contains("i", 9)) { + ListTag list = nbt.getList("i", 10); + for (Tag base : list) { + if (base instanceof CompoundTag) { + items.add(CraftItemStack.asBukkitCopy(net.minecraft.world.item.ItemStack.of((CompoundTag) base))); + } + } + } + return items; + } + + @Override + public void setSkullProfile(SkullMeta meta, String texture) { + try { + GameProfile gameProfile = new GameProfile(UUID.randomUUID(), ""); + gameProfile.getProperties().put("textures", new Property("textures", texture)); + CRAFTMETASKULL_SET_PROFILE.invoke(meta, gameProfile); + } catch (Exception e) { + throw new ClassCastException("Error by setting skull profile"); + } + } + + @Override + public boolean isAir(Material material) { + return material == null || material == Material.AIR; + } +} \ No newline at end of file diff --git a/zip-plugin/pom.xml b/zip-plugin/pom.xml index 766988a..24034a3 100644 --- a/zip-plugin/pom.xml +++ b/zip-plugin/pom.xml @@ -65,5 +65,11 @@ ${revision} compile + + net.imprex + zip-nms-v1_20_R1 + ${revision} + compile + \ No newline at end of file diff --git a/zip-plugin/src/main/java/net/imprex/zip/UpdateSystem.java b/zip-plugin/src/main/java/net/imprex/zip/UpdateSystem.java index 710eea3..b650306 100644 --- a/zip-plugin/src/main/java/net/imprex/zip/UpdateSystem.java +++ b/zip-plugin/src/main/java/net/imprex/zip/UpdateSystem.java @@ -26,7 +26,7 @@ /** * @author Imprex-Development - * @see https://github.com/Imprex-Development/orebfuscator/blob/master/orebfuscator-plugin/src/main/java/net/imprex/orebfuscator/UpdateSystem.java + * @see UpdateSystem.java */ public class UpdateSystem { diff --git a/zip-plugin/src/main/resources/config/config-1.20.yml b/zip-plugin/src/main/resources/config/config-1.20.yml new file mode 100644 index 0000000..b4b5562 --- /dev/null +++ b/zip-plugin/src/main/resources/config/config-1.20.yml @@ -0,0 +1,63 @@ +general: + checkForUpdates: true + verbose: false + locale: en_US +type: + big: + uniqueName: 'big' + displayName: '&7Big &eBackpack' + inventoryRows: 6 + customModelData: 3 + texture: 'ewogICJ0aW1lc3RhbXAiIDogMTYzMzg2MjQwNTg4NSwKICAicHJvZmlsZUlkIiA6ICI1NjY3NWIyMjMyZjA0ZWUwODkxNzllOWM5MjA2Y2ZlOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGVJbmRyYSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9kYTMzMTY5YjcyY2Y4OTE4YjgyYzViZDI3Y2JhOWVlNmMwZWI4OTE2NDA0MDQ4MGJiMjdmODUzNGUwZmE1ODA3IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0=' + lore: + - '&aA Big Backpack' + recipe: + discover: true + group: 'null' + patternOne: 'LCL' + patternTwo: 'ECE' + patternThree: 'DCD' + patternMapping: + L: LEATHER + E: LEAD + C: CHEST + D: DIAMOND + medium: + uniqueName: 'medium' + displayName: '&7Medium &eBackpack' + inventoryRows: 3 + customModelData: 2 + texture: 'ewogICJ0aW1lc3RhbXAiIDogMTY3NDM0NDQ0MzY4NywKICAicHJvZmlsZUlkIiA6ICIxMzdmMjg3MjUwOTE0ZmI4YjA0ZTYwYjg4MWUwZWE2YiIsCiAgInByb2ZpbGVOYW1lIiA6ICJub3JtYWxpc2luZyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9lZjhlZDY4NWIzYzNjYWI4NDM1ZDBmNmIwZDJkZGI0NmRmYTNhYzk2ZmUyZjlhNmQ3NDhmNzExOTFjMGI1MjJiIgogICAgfQogIH0KfQ==' + lore: + - '&aA Medium Backpack' + recipe: + discover: true + group: 'null' + patternOne: 'LSL' + patternTwo: 'ECE' + patternThree: 'ICI' + patternMapping: + L: LEATHER + S: STICK + E: LEAD + C: CHEST + I: IRON_INGOT + small: + uniqueName: 'small' + displayName: '&7Small &eBackpack' + inventoryRows: 1 + customModelData: 1 + texture: 'ewogICJ0aW1lc3RhbXAiIDogMTYxMzM4Nzk2NDUxNSwKICAicHJvZmlsZUlkIiA6ICJkZTU3MWExMDJjYjg0ODgwOGZlN2M5ZjQ0OTZlY2RhZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJNSEZfTWluZXNraW4iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGFlMTg3MTQ1ZWU3MzJlN2MwMDkwNWE5YzE2ZWQxZTQzYmE4OGQ1NjI0YTZmNGFmODI5ZjEwNDUzZmNjOTE2NSIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9' + lore: + - '&aA Small Backpack' + recipe: + discover: true + group: 'null' + patternOne: 'LSL' + patternTwo: 'ECE' + patternThree: 'LLL' + patternMapping: + L: LEATHER + S: STICK + E: LEAD + C: CHEST \ No newline at end of file