diff --git a/gradle.properties b/gradle.properties
index 5a845e42f..6ed225afb 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,7 +4,7 @@ version = 1.17.1-R0.1-SNAPSHOT
mcVersion = 1.17.1
packageVersion = 1_17_R1
-paperCommit = 7a5025d4617f5946e8ec3af1654d2b22693eab49
+paperCommit = 81a7559b41256a2605b7a6db29b314fd70253f19
org.gradle.caching = true
org.gradle.parallel = true
diff --git a/patches/server/0001-Tuinity-Server-Changes.patch b/patches/server/0001-Tuinity-Server-Changes.patch
index 7edbe65a4..11ccea8e9 100644
--- a/patches/server/0001-Tuinity-Server-Changes.patch
+++ b/patches/server/0001-Tuinity-Server-Changes.patch
@@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
diff --git a/build.gradle.kts b/build.gradle.kts
-index b50463c2356301a1b47a0bf4f50dc1f121d363a1..d658b7502185f1f7c938d510e2f8404fdaa66bb6 100644
+index b50463c2356301a1b47a0bf4f50dc1f121d363a1..66f5e6edc2bac290664c534df213058eaeab3b4e 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,10 +1,16 @@
@@ -37,7 +37,11 @@ index b50463c2356301a1b47a0bf4f50dc1f121d363a1..d658b7502185f1f7c938d510e2f8404f
import shadow.org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor.PLUGIN_CACHE_FILE
import java.nio.file.Files
import java.util.Locale
-@@ -28,8 +34,8 @@ repositories {
+@@ -25,11 +31,12 @@ repositories {
+ }
+ }
+ // Paper end
++ maven("https://repo.velocitypowered.com/snapshots/") // Tuinity
}
dependencies {
@@ -48,7 +52,15 @@ index b50463c2356301a1b47a0bf4f50dc1f121d363a1..d658b7502185f1f7c938d510e2f8404f
// Paper start
implementation("org.jline:jline-terminal-jansi:3.12.1")
implementation("net.minecrell:terminalconsoleappender:1.2.0")
-@@ -80,7 +86,7 @@ tasks.jar {
+@@ -62,6 +69,7 @@ dependencies {
+ implementation("io.netty:netty-all:4.1.65.Final") // Paper
+
+ implementation("org.quiltmc:tiny-mappings-parser:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation
++ implementation("com.velocitypowered:velocity-native:1.1.0-SNAPSHOT") // Tuinity
+
+ testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test
+ testImplementation("junit:junit:4.13.1")
+@@ -80,7 +88,7 @@ tasks.jar {
attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main",
"Implementation-Title" to "CraftBukkit",
@@ -57,7 +69,7 @@ index b50463c2356301a1b47a0bf4f50dc1f121d363a1..d658b7502185f1f7c938d510e2f8404f
"Implementation-Vendor" to date, // Paper
"Specification-Title" to "Bukkit",
"Specification-Version" to project.version,
-@@ -105,6 +111,22 @@ publishing {
+@@ -105,6 +113,22 @@ publishing {
}
}
@@ -80,7 +92,7 @@ index b50463c2356301a1b47a0bf4f50dc1f121d363a1..d658b7502185f1f7c938d510e2f8404f
val generatePom = tasks.named("generatePomFileForMavenPublication")
tasks.shadowJar {
-@@ -176,7 +198,7 @@ tasks.test {
+@@ -176,7 +200,7 @@ tasks.test {
fun TaskContainer.registerRunTask(
name: String, block: JavaExec.() -> Unit
): TaskProvider = register(name) {
@@ -29988,8 +30000,256 @@ index 5e09890ba2fe326503a49b2dbec09845f5c8c5eb..3ad3652f8074de10222fb01c50548b43
this.z = z;
return this;
}
+diff --git a/src/main/java/net/minecraft/network/CipherDecoder.java b/src/main/java/net/minecraft/network/CipherDecoder.java
+index 06d545bc7206dd0d56cf27c31935c0f5ed21ef08..3dfbe08b68b958a52d5f4464b22b70f3ad9a012c 100644
+--- a/src/main/java/net/minecraft/network/CipherDecoder.java
++++ b/src/main/java/net/minecraft/network/CipherDecoder.java
+@@ -7,14 +7,30 @@ import java.util.List;
+ import javax.crypto.Cipher;
+
+ public class CipherDecoder extends MessageToMessageDecoder {
+- private final CipherBase cipher;
++ private final com.velocitypowered.natives.encryption.VelocityCipher cipher; // Tuinity
+
+- public CipherDecoder(Cipher cipher) {
+- this.cipher = new CipherBase(cipher);
++ public CipherDecoder(com.velocitypowered.natives.encryption.VelocityCipher cipher) { // Tuinity
++ this.cipher = cipher; // Tuinity
+ }
+
+ @Override
+ protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List