From f41cedb5762a95c2b23f9a9120b72c64e77fa748 Mon Sep 17 00:00:00 2001 From: BSDevelopment-BOT <111607905+BSDevelopment-BOT@users.noreply.github.com> Date: Tue, 13 Jun 2023 21:50:45 -0400 Subject: [PATCH 1/6] [Automated Task] Added the 'Version_1.20.1' module to the parent pom file --- pom.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index d32d8d9c..8d6eeb2c 100644 --- a/pom.xml +++ b/pom.xml @@ -26,6 +26,7 @@ Version_1.19.3 Version_1.19.4 Version_1.20 + Version_1.20.1 DIST @@ -67,13 +68,13 @@ 0 5.0-BUILD-${jenkins.buildNumber} - B115 + B116 - 1.20 + 1.20.1 ${minecraft.version}-R0.1-SNAPSHOT v1_20_R1 - 1.6.8-CUSTOM + 1.6.9-CUSTOM From f5b4b5e9c14e137dcc85bbf534742358c4922b69 Mon Sep 17 00:00:00 2001 From: BSDevelopment-BOT <111607905+BSDevelopment-BOT@users.noreply.github.com> Date: Tue, 13 Jun 2023 21:50:45 -0400 Subject: [PATCH 2/6] [Automated Task] Added the 'Version_1.20.1' module to the DIST pom file --- DIST/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/DIST/pom.xml b/DIST/pom.xml index b46b4d7d..4297cc2b 100644 --- a/DIST/pom.xml +++ b/DIST/pom.xml @@ -139,5 +139,12 @@ jar compile + + simplepets.brainsynder + Version_1.20.1 + ${module.version} + jar + compile + \ No newline at end of file From df89fe0bbe70c3c7379fbb299d8d5247b54918fb Mon Sep 17 00:00:00 2001 From: BSDevelopment-BOT <111607905+BSDevelopment-BOT@users.noreply.github.com> Date: Tue, 13 Jun 2023 21:50:47 -0400 Subject: [PATCH 3/6] [Automated Task] Added the pom.xml class file to the 1.20.1 module --- Version_1.20.1/pom.xml | 170 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 Version_1.20.1/pom.xml diff --git a/Version_1.20.1/pom.xml b/Version_1.20.1/pom.xml new file mode 100644 index 00000000..fe296c1d --- /dev/null +++ b/Version_1.20.1/pom.xml @@ -0,0 +1,170 @@ + + + + SimplePets + simplepets.brainsynder + 1.0-SNAPSHOT + + 4.0.0 + ${module.version} + + Version_${minecraft.version} + + + 1.20.1 + + v1_20_1 + v1_20_1_R1 + + + 17 + 17 + UTF-8 + + + ${minecraft.version}-R0.1-SNAPSHOT + -${minecraft.version} + + + + src/main/java + + + org.apache.maven.plugins + maven-shade-plugin + 3.4.1 + + false + false + false + /tmp + + + + package + + shade + + + + + ${groupId}.nms + ${groupId}.versions.${current-module.version} + + + org.bukkit.craftbukkit.${spigot.nms} + org.bukkit.craftbukkit.${current-module.nms} + + + + + org.apache.commons + ${groupId}.internal.apache + + + anvil.brainsynder + ${groupId}.internal.anvil + + + com.jeff_media.updatechecker + ${groupId}.internal.updatechecker + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 17 + 17 + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + net.md-5 + specialsource-maven-plugin + 1.2.5 + + + package + + remap + + remap-obf + + org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang + true + org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang + true + 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 + + + + + + + + ${project.parent.basedir}/src/main/resources + true + + + + + + + org.spigotmc + spigot + ${spigot.version} + remapped-mojang + provided + + + simplepets.brainsynder + API + ${module.version} + + + simplepets.brainsynder + MAIN + ${module.version} + + + anvil.brainsynder + anvilgui + + + com.jeff_media + SpigotUpdateChecker + + + + + simplepets.brainsynder + NMS_Master + ${module.version} + compile + + + \ No newline at end of file From 586031c08bbc54270e9b4d6111f3da9f98fb1700 Mon Sep 17 00:00:00 2001 From: BSDevelopment-BOT <111607905+BSDevelopment-BOT@users.noreply.github.com> Date: Tue, 13 Jun 2023 21:50:47 -0400 Subject: [PATCH 4/6] [Automated Task] Added the EntityBase.java class file to the 1.20.1 module --- .../brainsynder/nms/entity/EntityBase.java | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 Version_1.20.1/src/main/java/simplepets/brainsynder/nms/entity/EntityBase.java diff --git a/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/entity/EntityBase.java b/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/entity/EntityBase.java new file mode 100644 index 00000000..676394f4 --- /dev/null +++ b/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/entity/EntityBase.java @@ -0,0 +1,113 @@ +package simplepets.brainsynder.nms.entity; + +import net.minecraft.core.DefaultedRegistry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.level.Level; +import org.bukkit.craftbukkit.v1_20_1_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_20_1_R1.entity.CraftLivingEntity; +import simplepets.brainsynder.api.pet.PetType; +import simplepets.brainsynder.api.user.PetUser; +import simplepets.brainsynder.nms.VersionTranslator; + +import java.lang.reflect.Field; +import java.util.IdentityHashMap; + +public class EntityBase extends Mob { + protected final EntityType entityType; + protected final EntityType originalEntityType; + private PetUser user; + private PetType petType; + + protected EntityBase(EntityType entitytypes, Level world) { + super(entitytypes, world); + entityType = getEntityType(entitytypes, containsFields()); + originalEntityType = entitytypes; + getBukkitEntity().remove(); + } + + public EntityBase(EntityType entitytypes, PetType type, PetUser user) { + super(entitytypes, VersionTranslator.getWorldHandle(user.getPlayer().getLocation().getWorld())); + this.user = user; + this.petType = type; + entityType = getEntityType(entitytypes, containsFields()); + originalEntityType = entitytypes; + } + + // 1.20.1+ Replaces boolean rideableUnderWater() + @Override + public boolean dismountsUnderwater() { + return false; + } + + public PetType getPetType() { + return petType; + } + + public PetUser getUser() { + return user; + } + + /** + * This literally fixed the shit with p2 and i'm so fucking mad + */ + public CraftEntity getBukkitEntity() { + return new CraftLivingEntity(VersionTranslator.getEntityLevel(this).getCraftServer(), this) { + @Override + public org.bukkit.entity.EntityType getType() { + return petType.getEntityType(); + } + }; + } + + // TODO: THIS METHOD NEEDS TO BE LOOKED AT CAUSES SOME ISSUES ON 1.19.3 + EntityType getEntityType(EntityType originalType, boolean checkFields) { + try { + Field field = EntityType.class.getDeclaredField(VersionTranslator.ENTITY_FACTORY_FIELD); + field.setAccessible(true); + EntityType.Builder builder = + EntityType.Builder.of((EntityType.EntityFactory) field.get(originalType), + MobCategory.AMBIENT); + builder.sized(0.1f, 0.1f); + DefaultedRegistry> registry = BuiltInRegistries.ENTITY_TYPE; + // frozen field + Field frozen = null; + if (checkFields) { + frozen = registry.getClass().getSuperclass().getDeclaredField(VersionTranslator.REGISTRY_FROZEN_FIELD); + frozen.setAccessible(true); + frozen.set(registry, false); + } + // map field + if (checkFields) { + Field map = registry.getClass().getSuperclass().getDeclaredField(VersionTranslator.REGISTRY_ENTRY_MAP_FIELD); + map.setAccessible(true); + map.set(registry, new IdentityHashMap<>()); + } + // screw you mojang, my power is unlimited + EntityType mob = builder.build(petType.name().toLowerCase()); + if (checkFields && (frozen != null)) frozen.set(registry, true); + return mob; + } catch (IllegalAccessException | NoSuchFieldException e) { + e.printStackTrace(); + return originalType; + } + } + + private boolean containsFields() { + try { + BuiltInRegistries.ENTITY_TYPE.getClass().getSuperclass().getDeclaredField(VersionTranslator.REGISTRY_FROZEN_FIELD); + return true; + } catch (Exception e) { + return false; + } + } + + @Override + public Packet getAddEntityPacket() { + return VersionTranslator.getAddEntityPacket(this, originalEntityType, VersionTranslator.getPosition(this)); + } +} From 187d32e15da968206509cc34fab53e5f277cfbe3 Mon Sep 17 00:00:00 2001 From: BSDevelopment-BOT <111607905+BSDevelopment-BOT@users.noreply.github.com> Date: Tue, 13 Jun 2023 21:50:47 -0400 Subject: [PATCH 5/6] [Automated Task] Added the VersionTranslator.java class file to the 1.20.1 module --- .../brainsynder/nms/VersionTranslator.java | 262 ++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 Version_1.20.1/src/main/java/simplepets/brainsynder/nms/VersionTranslator.java diff --git a/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/VersionTranslator.java b/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/VersionTranslator.java new file mode 100644 index 00000000..ffdfae57 --- /dev/null +++ b/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/VersionTranslator.java @@ -0,0 +1,262 @@ +package simplepets.brainsynder.nms; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import lib.brainsynder.ServerVersion; +import lib.brainsynder.nbt.JsonToNBT; +import lib.brainsynder.nbt.StorageTagCompound; +import lib.brainsynder.nbt.other.NBTException; +import lib.brainsynder.storage.RandomCollection; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.TagParser; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; +import net.minecraft.network.syncher.EntityDataSerializer; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.World; +import org.bukkit.block.data.BlockData; +import org.bukkit.craftbukkit.v1_20_1_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_20_1_R1.block.data.CraftBlockData; +import org.bukkit.craftbukkit.v1_20_1_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_20_1_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_20_1_R1.util.CraftNamespacedKey; +import org.bukkit.event.entity.CreatureSpawnEvent; +import simplepets.brainsynder.api.entity.misc.IFlyableEntity; +import simplepets.brainsynder.nms.entity.EntityPet; +import simplepets.brainsynder.nms.utils.FieldUtils; +import simplepets.brainsynder.nms.utils.InvalidInputException; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Optional; + +public class VersionTranslator { + // net.minecraft.network.syncher.DataWatcher + // private static final it.unimi.dsi.fastutil.objects.Object2IntMap> + public static final String ENTITY_DATA_MAP = "b"; + // net.minecraft.world.entity.EntityTypes + // private final net.minecraft.world.entity.EntityTypes.b + public static final String ENTITY_FACTORY_FIELD = "bA"; + + // net.minecraft.core.RegistryMaterials + // private boolean + public static final String REGISTRY_FROZEN_FIELD = "l"; + // net.minecraft.core.RegistryMaterials + // @Nullable private java.util.Map> + public static final String REGISTRY_ENTRY_MAP_FIELD = "m"; + + private static Field jumpingField = null; + + public static Field getJumpField() { + if (jumpingField != null) return jumpingField; + + try { + /* + net.minecraft.world.entity.EntityLiving + + protected int bg + public float bh + protected boolean bi <---- This one + public float bj + public float bk + public float bl + protected int bm + */ + Field jumpingField = LivingEntity.class.getDeclaredField("bk"); // For 1.20.1 + jumpingField.setAccessible(true); + return VersionTranslator.jumpingField = jumpingField; + } catch (Exception ex) { + throw new UnsupportedOperationException("Unable to find the correct jumpingField name for " + ServerVersion.getVersion().name()); + } + } + + public static void setAttributes(EntityPet entityPet, double walkSpeed, double flySpeed) { + if (walkSpeed != -1) entityPet.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(walkSpeed); + if ((flySpeed != -1) && (entityPet instanceof IFlyableEntity) && entityPet.getAttribute(Attributes.FLYING_SPEED) != null) { + entityPet.getAttribute(Attributes.FLYING_SPEED).setBaseValue(flySpeed); + } + } + + public static void setItemSlot(ArmorStand stand, EquipmentSlot enumitemslot, ItemStack itemstack, boolean silent) { + stand.setItemSlot(enumitemslot, itemstack, silent); + } + + public static boolean addEntity(Level level, Entity entity, CreatureSpawnEvent.SpawnReason reason) { + return level.addFreshEntity(entity, CreatureSpawnEvent.SpawnReason.CUSTOM); + } + + public static T getEntityHandle(org.bukkit.entity.Entity entity) { + return (T) ((CraftEntity) entity).getHandle(); + } + + public static T getWorldHandle(World world) { + return (T) ((CraftWorld) world).getHandle(); + } + + public static BlockState getBlockState(BlockData blockData) { + return ((CraftBlockData) blockData).getState(); + } + + public static BlockData fromNMS(BlockState blockData) { + return CraftBlockData.fromData(blockData); + } + + public static ItemStack toNMSStack(org.bukkit.inventory.ItemStack itemStack) { + return CraftItemStack.asNMSCopy(itemStack); + } + + public static org.bukkit.inventory.ItemStack toBukkit(ItemStack itemStack) { + return CraftItemStack.asBukkitCopy(itemStack); + } + + public static BlockPos subtract(BlockPos blockPos, Vec3i vec) { + return blockPos.subtract(vec); + } + + public static BlockPos relative(BlockPos blockPos) { + return blockPos.relative(RandomCollection.fromCollection(Arrays.asList( + Direction.NORTH, + Direction.EAST, + Direction.SOUTH, + Direction.WEST + )).next()); + } + + public static void modifyGlowData(SynchedEntityData toCloneDataWatcher, SynchedEntityData newDataWatcher, + boolean glow) throws IllegalAccessException { + Int2ObjectMap> newMap = + (Int2ObjectMap>) FieldUtils.readDeclaredField(toCloneDataWatcher, + ENTITY_DATA_MAP, true); + + SynchedEntityData.DataItem item = newMap.get(0); + byte initialBitMask = item.getValue(); + byte bitMaskIndex = (byte) 6; + if (glow) { + item.setValue((byte) (initialBitMask | 1 << bitMaskIndex)); + } else { + item.setValue((byte) (initialBitMask & ~(1 << bitMaskIndex))); + } + FieldUtils.writeDeclaredField(newDataWatcher, ENTITY_DATA_MAP, newMap, true); + } + + public static org.bukkit.inventory.ItemStack toItemStack(StorageTagCompound compound) { + if (!compound.hasKey("id")) { // The ID MUST be set, otherwise it will be considered invalid and AIR + return new org.bukkit.inventory.ItemStack(Material.AIR); + } else { + // Item has to be AT LEAST 1 otherwise it will be AIR + if (!compound.hasKey("Count")) compound.setByte("Count", (byte) 1); + + try { + CompoundTag compoundTag = TagParser.parseTag(compound.toString()); + ItemStack nmsItem = ItemStack.of(compoundTag); + return CraftItemStack.asBukkitCopy(nmsItem); + } catch (CommandSyntaxException e) { + throw new InvalidInputException("Failed to parse Item NBT", e); + } + } + } + + public static StorageTagCompound fromItemStack(org.bukkit.inventory.ItemStack item) { + CompoundTag compoundTag = new CompoundTag(); + ItemStack nmsItem = CraftItemStack.asNMSCopy(item); + compoundTag = nmsItem.save(compoundTag); + + try { + return JsonToNBT.getTagFromJson(compoundTag.toString()); + } catch (NBTException exception) { + throw new InvalidInputException("Failed to convert item to NBT", exception); + } + } + + public static float cube(float f) { + return f * f * f; + } + + public static EntityType fetchEntityType(String name) { + // The EntityType.byString() method requires the name to start with `minecraft:` and the name of the mob to + // be lowercase + Optional> optional = EntityType.byString("minecraft:" + name.toLowerCase()); + if (optional.isPresent()) return optional.get(); + + // This is a simple placeholder mob that does not have any datawatchers just in case the code fails + return EntityType.GIANT; + } + + public static Packet getAddEntityPacket(LivingEntity livingEntity, EntityType originalEntityType, BlockPos pos) { + Packet packet; + try { + // y'all here sum'n? + packet = new ClientboundAddEntityPacket(livingEntity); + } catch (Exception ex) { + ex.printStackTrace(); + return new ClientboundAddEntityPacket(livingEntity, 0, pos); + } + + try { + Field type = packet.getClass().getDeclaredField(VersionTranslator.getEntityTypeVariable()); + type.setAccessible(true); + type.set(packet, VersionTranslator.useInteger() ? BuiltInRegistries.ENTITY_TYPE.getId(originalEntityType) : originalEntityType); + return packet; + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + return new ClientboundAddEntityPacket(livingEntity, 0, pos); + } + + // net.minecraft.network.protocol.game.PacketPlayOutSpawnEntity + // private final net.minecraft.world.entity.EntityTypes + public static String getEntityTypeVariable() { + return "e"; + } + + public static boolean useInteger() { + return false; + } + + + // ADDED DURING 1.20.1 DEVELOPMENT + public static final EntityDataSerializer> OPTIONAL_BLOCK_STATE = EntityDataSerializers.OPTIONAL_BLOCK_STATE; + + public static void calculateEntityAnimation (LivingEntity entity, boolean var) { + entity.calculateEntityAnimation(var); + } + + public static void setMapUpStep (Entity entity, float value) { + entity.setMaxUpStep(value); + } + public static BlockPos getPosition (Entity entity) { + return BlockPos.containing(new Vec3(entity.getX(), entity.getY(), entity.getZ())); + } + + public static ResourceLocation toMinecraftResource (NamespacedKey key) { + return CraftNamespacedKey.toMinecraft(key); + } + + public static NamespacedKey toBukkitNamespace (ResourceLocation resource) { + return CraftNamespacedKey.fromMinecraft(resource); + } + + // ADDED DURING 1.20.1 DEVELOPMENT + public static Level getEntityLevel (Entity entity) { + return entity.level(); + } +} \ No newline at end of file From 9ea47de35a60b759d6eeb5d0bfeea3ad02f0599d Mon Sep 17 00:00:00 2001 From: brainsynder Date: Wed, 14 Jun 2023 23:54:03 -0400 Subject: [PATCH 6/6] Fixed the updater bugs --- Version_1.20.1/pom.xml | 2 +- .../simplepets/brainsynder/nms/VersionTranslator.java | 10 +++++----- .../simplepets/brainsynder/nms/entity/EntityBase.java | 4 ++-- pom.xml | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Version_1.20.1/pom.xml b/Version_1.20.1/pom.xml index fe296c1d..38a87696 100644 --- a/Version_1.20.1/pom.xml +++ b/Version_1.20.1/pom.xml @@ -16,7 +16,7 @@ 1.20.1 v1_20_1 - v1_20_1_R1 + v1_20_R1 17 diff --git a/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/VersionTranslator.java b/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/VersionTranslator.java index ffdfae57..418bb5d8 100644 --- a/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/VersionTranslator.java +++ b/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/VersionTranslator.java @@ -34,11 +34,11 @@ import org.bukkit.NamespacedKey; import org.bukkit.World; import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_20_1_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_1_R1.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_20_1_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_20_1_R1.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_20_1_R1.util.CraftNamespacedKey; +import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_20_R1.block.data.CraftBlockData; +import org.bukkit.craftbukkit.v1_20_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_20_R1.util.CraftNamespacedKey; import org.bukkit.event.entity.CreatureSpawnEvent; import simplepets.brainsynder.api.entity.misc.IFlyableEntity; import simplepets.brainsynder.nms.entity.EntityPet; diff --git a/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/entity/EntityBase.java b/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/entity/EntityBase.java index 676394f4..169df81d 100644 --- a/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/entity/EntityBase.java +++ b/Version_1.20.1/src/main/java/simplepets/brainsynder/nms/entity/EntityBase.java @@ -8,8 +8,8 @@ import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.Level; -import org.bukkit.craftbukkit.v1_20_1_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_20_1_R1.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_20_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_20_R1.entity.CraftLivingEntity; import simplepets.brainsynder.api.pet.PetType; import simplepets.brainsynder.api.user.PetUser; import simplepets.brainsynder.nms.VersionTranslator; diff --git a/pom.xml b/pom.xml index 8d6eeb2c..0e071a66 100644 --- a/pom.xml +++ b/pom.xml @@ -74,7 +74,7 @@ ${minecraft.version}-R0.1-SNAPSHOT v1_20_R1 - 1.6.9-CUSTOM + 1.6.10-CUSTOM