mirror of
https://github.com/ViaVersion/ViaBackwards.git
synced 2026-11-04 17:00:16 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b90b573f1d | ||
|
|
74aeadd688 | ||
|
|
6f27988cf6 | ||
|
|
81aad86d9f | ||
|
|
1e7dbf38fd | ||
|
|
0404184e15 | ||
|
|
64a7d9f8bd | ||
|
|
924346882c | ||
|
|
1d7332101f | ||
|
|
30e63ebc3b | ||
|
|
217c9459f5 | ||
|
|
ead2c6f330 | ||
|
|
1a972da613 | ||
|
|
44dbbf37e2 | ||
|
|
def010c2bf | ||
|
|
75744d5525 | ||
|
|
7f66786b76 | ||
|
|
6993308019 | ||
|
|
a69b0b499c | ||
|
|
a48731ded2 | ||
|
|
11857f1abe | ||
|
|
fdf2d5e87b | ||
|
|
069c537dbb | ||
|
|
22e86fb127 | ||
|
|
d08da420b2 | ||
|
|
5bddf285e3 | ||
|
|
3ba77829fe | ||
|
|
3c3cd07fd7 | ||
|
|
5a2d3b6b31 | ||
|
|
0c21ddfe40 | ||
|
|
9b65b59411 | ||
|
|
d3248037d8 | ||
|
|
e0f3a98d79 | ||
|
|
39a4d4e973 | ||
|
|
8a9bf708f2 | ||
|
|
5070e51b04 | ||
|
|
12baac5cbd | ||
|
|
8669c17512 | ||
|
|
fe993fc2a7 | ||
|
|
54af45da27 | ||
|
|
175daef7da | ||
|
|
986ecaaf8d | ||
|
|
b42c19752c | ||
|
|
d98de382fc | ||
|
|
13bc18b496 | ||
|
|
4160b37f13 | ||
|
|
f9f7a24dda | ||
|
|
21fd034c02 | ||
|
|
6a59e887c8 | ||
|
|
32488cf2ff | ||
|
|
774a35db17 | ||
|
|
32f41382fa | ||
|
|
c9573a1cfd | ||
|
|
def9df84b4 | ||
|
|
fd4bc59058 | ||
|
|
aecd74425d | ||
|
|
53584b01f7 | ||
|
|
7f97ae80c3 | ||
|
|
4dd4b2f53b | ||
|
|
8a9cc8bd9b | ||
|
|
9e3861fb21 | ||
|
|
b74ac19d9d | ||
|
|
4cca914c5d | ||
|
|
fa90711056 | ||
|
|
d5d4073857 | ||
|
|
b8e0b39eeb | ||
|
|
6ec175dff2 | ||
|
|
9bd1785886 | ||
|
|
9fabc4b11e | ||
|
|
3969186439 | ||
|
|
422826a9b8 | ||
|
|
ddcaa78b61 | ||
|
|
d3c6065367 | ||
|
|
df5353be29 | ||
|
|
9e8e23d308 | ||
|
|
3693ec6021 | ||
|
|
0a5ba125f7 | ||
|
|
8f861f670c | ||
|
|
0f806f1016 | ||
|
|
fbba2dc81b | ||
|
|
61f537e9b9 | ||
|
|
ba84a588f1 | ||
|
|
4ec0969b45 | ||
|
|
19a04666e5 | ||
|
|
9a5e2f8e8c | ||
|
|
a33feff59b | ||
|
|
612a6b3696 | ||
|
|
b42e466248 | ||
|
|
e4ea6aa5e2 | ||
|
|
c40e092b48 | ||
|
|
46a33a42ec | ||
|
|
d31892513c | ||
|
|
e6af10a0b6 | ||
|
|
f6dcd149cb | ||
|
|
1fb2bd410f | ||
|
|
b1e667fadb | ||
|
|
7eb0522150 | ||
|
|
3f6c172d7b | ||
|
|
9e7fad2840 | ||
|
|
2f3c869f4d | ||
|
|
c6b287bfac | ||
|
|
0f59bf96c8 | ||
|
|
ca5028a7fa | ||
|
|
9740910d98 | ||
|
|
cb9907743d | ||
|
|
4617e6e416 | ||
|
|
de0c869dbb | ||
|
|
29ec02687c | ||
|
|
481b06cd2a | ||
|
|
624fb6acd4 |
No files matched your search
@@ -22,4 +22,4 @@ jobs:
|
||||
java-version: 17
|
||||
check-latest: true
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build
|
||||
run: ./gradlew build --refresh-dependencies
|
||||
@@ -4,6 +4,7 @@ on:
|
||||
branches:
|
||||
- master
|
||||
- dev
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
@@ -26,4 +27,4 @@ jobs:
|
||||
env:
|
||||
HANGAR_TOKEN: ${{ secrets.HANGAR_TOKEN }}
|
||||
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
|
||||
run: ./gradlew build modrinth publishAllPublicationsToHangar --stacktrace
|
||||
run: ./gradlew build modrinth publishAllPublicationsToHangar --refresh-dependencies --stacktrace
|
||||
@@ -108,5 +108,8 @@ nbactions.xml
|
||||
nb-configuration.xml
|
||||
.nb-gradle/
|
||||
|
||||
### MacOS ###
|
||||
.DS_Store
|
||||
|
||||
### Run Folder (ViaProxy) ###
|
||||
common/run/
|
||||
@@ -1,12 +1,12 @@
|
||||
# ViaBackwards
|
||||
|
||||
[](https://github.com/ViaVersion/ViaBackwards/releases)
|
||||
[](https://github.com/ViaVersion/ViaBackwards/actions)
|
||||
[](https://github.com/ViaVersion/ViaBackwards/actions)
|
||||
[](https://viaversion.com/discord)
|
||||
|
||||
**Allows the connection of older clients to newer server versions for Minecraft servers.**
|
||||
|
||||
Requires [ViaVersion](https://hangar.papermc.io/ViaVersion/ViaVersion) to be installed..
|
||||
Requires [ViaVersion](https://hangar.papermc.io/ViaVersion/ViaVersion) to be installed.
|
||||
|
||||
Supported Versions
|
||||
-
|
||||
@@ -42,7 +42,7 @@ Known issues
|
||||
1.17 will not be able to see or interact with blocks below y=0 and above y=255
|
||||
* <1.17 clients on 1.17+ servers might experience inventory desyncs on certain inventory click actions
|
||||
* Sound mappings are incomplete ([see here](https://github.com/ViaVersion/ViaBackwards/issues/326))
|
||||
* <1.19.4 clients on 1.20+ servers won't be able to use the smithing table, this can be fixed by
|
||||
* <1.19.4 clients on 1.20+ servers won't be able to use the smithing table. This can be fixed by
|
||||
installing [AxSmithing](https://github.com/ViaVersionAddons/AxSmithing)
|
||||
|
||||
Other Links
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you discover a **security vulnerability**, please **do not** open a public issue. Instead, use one of the following **confidential contact methods**:
|
||||
|
||||
* **Email:** [security@viaversion.com](mailto:security@viaversion.com)
|
||||
* **Discord:** Join our [Discord server](https://discord.gg/viaversion) and visit the [#exploit-report](https://discord.com/channels/316206679014244363/1388847764137316485) channel for further instructions.
|
||||
|
||||
If your issue is **not security-related** (e.g., bug reports, feature requests, or usage questions), please use the [GitHub Issues page](https://github.com/ViaVersion/ViaBackwards/issues) or contact us via the [Discord server](https://discord.gg/viaversion).
|
||||
@@ -8,5 +8,5 @@ repositories {
|
||||
|
||||
dependencies {
|
||||
// version must be manually kept in sync with the one in root project settings.gradle.kts
|
||||
implementation("com.gradleup.shadow", "shadow-gradle-plugin", "8.3.0")
|
||||
implementation("com.gradleup.shadow", "shadow-gradle-plugin", "8.3.6")
|
||||
}
|
||||
@@ -1,6 +1,12 @@
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.JavaPluginExtension
|
||||
import org.gradle.api.provider.ListProperty
|
||||
import org.gradle.api.provider.ValueSource
|
||||
import org.gradle.api.provider.ValueSourceParameters
|
||||
import org.gradle.jvm.toolchain.JavaLanguageVersion
|
||||
import org.gradle.process.ExecOperations
|
||||
import java.io.ByteArrayOutputStream
|
||||
import javax.inject.Inject
|
||||
|
||||
fun Project.latestCommitHash(): String {
|
||||
return runGitCommand(listOf("rev-parse", "--short", "HEAD"))
|
||||
@@ -15,11 +21,36 @@ fun Project.branchName(): String {
|
||||
}
|
||||
|
||||
fun Project.runGitCommand(args: List<String>): String {
|
||||
return providers.exec {
|
||||
commandLine = listOf("git") + args
|
||||
}.standardOutput.asBytes.get().toString(Charsets.UTF_8).trim()
|
||||
return providers.of(GitCommand::class.java) { parameters.args.set(args) }.getOrNull() ?: "unknown"
|
||||
}
|
||||
|
||||
abstract class GitCommand : ValueSource<String, GitCommand.GitCommandParameters> {
|
||||
|
||||
@get:Inject
|
||||
abstract val execOperations: ExecOperations
|
||||
|
||||
interface GitCommandParameters : ValueSourceParameters {
|
||||
val args: ListProperty<String>
|
||||
}
|
||||
|
||||
override fun obtain(): String? {
|
||||
try {
|
||||
val command = listOf("git") + parameters.args.get()
|
||||
val output = ByteArrayOutputStream()
|
||||
execOperations.exec {
|
||||
commandLine = command
|
||||
standardOutput = output
|
||||
isIgnoreExitValue = true
|
||||
}
|
||||
|
||||
return output.toString(Charsets.UTF_8).trim().takeIf { it.isNotBlank() }
|
||||
} catch (e: Exception) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun Project.parseMinecraftSnapshotVersion(version: String): String? {
|
||||
val separatorIndex = version.indexOf('-')
|
||||
val lastSeparatorIndex = version.lastIndexOf('-')
|
||||
|
||||
+1
-2
@@ -13,8 +13,7 @@ val main = setOf(
|
||||
projects.viabackwards,
|
||||
projects.viabackwardsCommon,
|
||||
projects.viabackwardsBukkit,
|
||||
projects.viabackwardsVelocity,
|
||||
projects.viabackwardsFabric
|
||||
projects.viabackwardsVelocity
|
||||
).map { it.path }
|
||||
|
||||
subprojects {
|
||||
|
||||
+24
-16
@@ -27,29 +27,37 @@ java {
|
||||
|
||||
// Task to quickly test/debug code changes using https://github.com/ViaVersion/ViaProxy
|
||||
// For further instructions see the ViaProxy repository README
|
||||
tasks.register<JavaExec>("runViaProxy") {
|
||||
dependsOn(tasks.shadowJar)
|
||||
val prepareViaProxyFiles by tasks.registering(Copy::class) {
|
||||
dependsOn(project.tasks.shadowJar)
|
||||
|
||||
val viaProxyConfiguration = configurations.create("viaProxy")
|
||||
viaProxyConfiguration.dependencies.add(dependencies.create(rootProject.libs.viaProxy.get().copy().setTransitive(false)))
|
||||
from(project.tasks.shadowJar.get().archiveFile.get().asFile)
|
||||
into(layout.projectDirectory.dir("run/jars"))
|
||||
|
||||
val projectName = project.name
|
||||
rename { "${projectName}.jar" }
|
||||
}
|
||||
|
||||
val cleanupViaProxyFiles by tasks.registering(Delete::class) {
|
||||
delete(
|
||||
layout.projectDirectory.file("run/jars/${project.name}.jar"),
|
||||
layout.projectDirectory.dir("run/logs")
|
||||
)
|
||||
}
|
||||
|
||||
val viaProxyConfiguration: Configuration by configurations.creating {
|
||||
dependencies.add(rootProject.libs.viaProxy.get().copy().setTransitive(false))
|
||||
}
|
||||
|
||||
tasks.register<JavaExec>("runViaProxy") {
|
||||
dependsOn(prepareViaProxyFiles)
|
||||
finalizedBy(cleanupViaProxyFiles)
|
||||
|
||||
mainClass.set("net.raphimc.viaproxy.ViaProxy")
|
||||
classpath = viaProxyConfiguration
|
||||
workingDir = file("run")
|
||||
workingDir = layout.projectDirectory.dir("run").asFile
|
||||
jvmArgs = listOf("-DskipUpdateCheck")
|
||||
|
||||
if (System.getProperty("viaproxy.gui.autoStart") != null) {
|
||||
jvmArgs("-Dviaproxy.gui.autoStart")
|
||||
}
|
||||
|
||||
doFirst {
|
||||
val jarsDir = file("$workingDir/jars")
|
||||
jarsDir.mkdirs()
|
||||
file("$jarsDir/${project.name}.jar").writeBytes(tasks.shadowJar.get().archiveFile.get().asFile.readBytes())
|
||||
}
|
||||
|
||||
doLast {
|
||||
file("$workingDir/jars/${project.name}.jar").delete()
|
||||
file("$workingDir/logs").deleteRecursively()
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2023 ViaVersion and contributors
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -36,8 +36,10 @@ public class ViaBackwardsConfig extends Config implements com.viaversion.viaback
|
||||
private boolean handlePingsAsInvAcknowledgements;
|
||||
private boolean bedrockAtY0;
|
||||
private boolean sculkShriekersToCryingObsidian;
|
||||
private boolean scaffoldingToWater;
|
||||
private boolean mapDarknessEffect;
|
||||
private boolean mapCustomModelData;
|
||||
private boolean mapDisplayEntities;
|
||||
private boolean suppressEmulationWarnings;
|
||||
|
||||
public ViaBackwardsConfig(File configFile, Logger logger) {
|
||||
@@ -59,8 +61,10 @@ public class ViaBackwardsConfig extends Config implements com.viaversion.viaback
|
||||
handlePingsAsInvAcknowledgements = getBoolean("handle-pings-as-inv-acknowledgements", false);
|
||||
bedrockAtY0 = getBoolean("bedrock-at-y-0", false);
|
||||
sculkShriekersToCryingObsidian = getBoolean("sculk-shriekers-to-crying-obsidian", false);
|
||||
scaffoldingToWater = getBoolean("scaffolding-to-water", false);
|
||||
mapDarknessEffect = getBoolean("map-darkness-effect", true);
|
||||
mapCustomModelData = getBoolean("map-custom-model-data", true);
|
||||
mapDisplayEntities = getBoolean("map-display-entities", true);
|
||||
suppressEmulationWarnings = getBoolean("suppress-emulation-warnings", false);
|
||||
}
|
||||
|
||||
@@ -104,6 +108,11 @@ public class ViaBackwardsConfig extends Config implements com.viaversion.viaback
|
||||
return sculkShriekersToCryingObsidian;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scaffoldingToWater() {
|
||||
return scaffoldingToWater;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mapDarknessEffect() {
|
||||
return mapDarknessEffect;
|
||||
@@ -114,6 +123,11 @@ public class ViaBackwardsConfig extends Config implements com.viaversion.viaback
|
||||
return mapCustomModelData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mapDisplayEntities() {
|
||||
return mapDisplayEntities;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean suppressEmulationWarnings() {
|
||||
return suppressEmulationWarnings;
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
package com.viaversion.viabackwards.api;
|
||||
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.TranslatableRewriter;
|
||||
import com.viaversion.viaversion.api.Via;
|
||||
import com.viaversion.viaversion.api.protocol.AbstractProtocol;
|
||||
import com.viaversion.viaversion.api.protocol.Protocol;
|
||||
@@ -66,7 +66,7 @@ public abstract class BackwardsProtocol<CU extends ClientboundPacketType, CM ext
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable TranslatableRewriter<CU> getComponentRewriter() {
|
||||
public @Nullable TranslatableRewriter getComponentRewriter() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -78,6 +78,13 @@ public interface ViaBackwardsConfig extends Config {
|
||||
*/
|
||||
boolean sculkShriekerToCryingObsidian();
|
||||
|
||||
/**
|
||||
* Shows scaffolding as water for 1.13.2 clients on 1.14+ servers. This fixes collision issues.
|
||||
*
|
||||
* @return true if enabled
|
||||
*/
|
||||
boolean scaffoldingToWater();
|
||||
|
||||
/**
|
||||
* Maps the darkness effect to blindness for 1.18.2 clients on 1.19+ servers.
|
||||
*
|
||||
@@ -92,6 +99,13 @@ public interface ViaBackwardsConfig extends Config {
|
||||
*/
|
||||
boolean mapCustomModelData();
|
||||
|
||||
/**
|
||||
* If enabled, 1.19.3 clients will receive display entities as armor stands with custom entity data on 1.19.4+ servers.
|
||||
*
|
||||
* @return true if enabled
|
||||
*/
|
||||
boolean mapDisplayEntities();
|
||||
|
||||
/**
|
||||
* Suppresses warnings of missing emulations for certain features that are not supported (e.g. world height in 1.17+).
|
||||
*
|
||||
|
||||
@@ -20,47 +20,51 @@ package com.viaversion.viabackwards.api;
|
||||
|
||||
import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.ViaBackwardsConfig;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_11to1_10.Protocol1_11To1_10;
|
||||
import com.viaversion.viabackwards.protocol.v1_12to1_11_1.Protocol1_12To1_11_1;
|
||||
import com.viaversion.viabackwards.api.data.TranslatableMappings;
|
||||
import com.viaversion.viabackwards.protocol.v1_10to1_9_3.Protocol1_10To1_9_3;
|
||||
import com.viaversion.viabackwards.protocol.v1_11_1to1_11.Protocol1_11_1To1_11;
|
||||
import com.viaversion.viabackwards.protocol.v1_12_2to1_12_1.Protocol1_12_2To1_12_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_13to1_12_2.Protocol1_13To1_12_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_11to1_10.Protocol1_11To1_10;
|
||||
import com.viaversion.viabackwards.protocol.v1_12_1to1_12.Protocol1_12_1To1_12;
|
||||
import com.viaversion.viabackwards.protocol.v1_13_2to1_13_1.Protocol1_13_2To1_13_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.Protocol1_14To1_13_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_12_2to1_12_1.Protocol1_12_2To1_12_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_12to1_11_1.Protocol1_12To1_11_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_13_1to1_13.Protocol1_13_1To1_13;
|
||||
import com.viaversion.viabackwards.protocol.v1_13_2to1_13_1.Protocol1_13_2To1_13_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_13to1_12_2.Protocol1_13To1_12_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_14_1to1_14.Protocol1_14_1To1_14;
|
||||
import com.viaversion.viabackwards.protocol.v1_14_2to1_14_1.Protocol1_14_2To1_14_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_14_3to1_14_2.Protocol1_14_3To1_14_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_14_4to1_14_3.Protocol1_14_4To1_14_3;
|
||||
import com.viaversion.viabackwards.protocol.v1_15to1_14_4.Protocol1_15To1_14_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_14_1to1_14.Protocol1_14_1To1_14;
|
||||
import com.viaversion.viabackwards.protocol.v1_15_2to1_15_1.Protocol1_15_2To1_15_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_16to1_15_2.Protocol1_16To1_15_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.Protocol1_14To1_13_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_15_1to1_15.Protocol1_15_1To1_15;
|
||||
import com.viaversion.viabackwards.protocol.v1_15_2to1_15_1.Protocol1_15_2To1_15_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_15to1_14_4.Protocol1_15To1_14_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_16_1to1_16.Protocol1_16_1To1_16;
|
||||
import com.viaversion.viabackwards.protocol.v1_16_2to1_16_1.Protocol1_16_2To1_16_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_16_3to1_16_2.Protocol1_16_3To1_16_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_16_4to1_16_3.Protocol1_16_4To1_16_3;
|
||||
import com.viaversion.viabackwards.protocol.v1_17to1_16_4.Protocol1_17To1_16_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_16_1to1_16.Protocol1_16_1To1_16;
|
||||
import com.viaversion.viabackwards.protocol.v1_18to1_17_1.Protocol1_18To1_17_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_16to1_15_2.Protocol1_16To1_15_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_17_1to1_17.Protocol1_17_1To1_17;
|
||||
import com.viaversion.viabackwards.protocol.v1_19to1_18_2.Protocol1_19To1_18_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_17to1_16_4.Protocol1_17To1_16_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_18_2to1_18.Protocol1_18_2To1_18;
|
||||
import com.viaversion.viabackwards.protocol.v1_18to1_17_1.Protocol1_18To1_17_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_1to1_19.Protocol1_19_1To1_19;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_3to1_19_1.Protocol1_19_3To1_19_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_4to1_19_3.Protocol1_19_4To1_19_3;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_4to1_21_2.Protocol1_21_4To1_21_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_20to1_19_4.Protocol1_20To1_19_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_1to1_19.Protocol1_19_1To1_19;
|
||||
import com.viaversion.viabackwards.protocol.v1_19to1_18_2.Protocol1_19To1_18_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_2to1_20.Protocol1_20_2To1_20;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.Protocol1_20_3To1_20_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.Protocol1_20_5To1_20_3;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_2to1_20.Protocol1_20_2To1_20;
|
||||
import com.viaversion.viabackwards.protocol.v1_20to1_19_4.Protocol1_20To1_19_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.Protocol1_21_2To1_21;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.task.PlayerPacketsTickTask;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_4to1_21_2.Protocol1_21_4To1_21_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.Protocol1_21_5To1_21_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_6to1_21_5.Protocol1_21_6To1_21_5;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_6to1_21_5.task.ChestDialogViewTask;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_7to1_21_6.Protocol1_21_7To1_21_6;
|
||||
import com.viaversion.viabackwards.protocol.v1_21to1_20_5.Protocol1_21To1_20_5;
|
||||
import com.viaversion.viabackwards.protocol.v1_9_3to1_9_1.Protocol1_9_3To1_9_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_10to1_9_3.Protocol1_10To1_9_3;
|
||||
import com.viaversion.viabackwards.protocol.v1_9_1to1_9.Protocol1_9_1To1_9;
|
||||
import com.viaversion.viabackwards.protocol.v1_9_3to1_9_1.Protocol1_9_3To1_9_1;
|
||||
import com.viaversion.viabackwards.utils.VersionInfo;
|
||||
import com.viaversion.viaversion.api.Via;
|
||||
import com.viaversion.viaversion.api.protocol.ProtocolManager;
|
||||
@@ -72,7 +76,7 @@ import java.util.logging.Logger;
|
||||
|
||||
public interface ViaBackwardsPlatform {
|
||||
|
||||
String MINIMUM_VV_VERSION = "5.2.1";
|
||||
String MINIMUM_VV_VERSION = "5.4.0";
|
||||
|
||||
/**
|
||||
* Initialize ViaBackwards.
|
||||
@@ -92,7 +96,7 @@ public interface ViaBackwardsPlatform {
|
||||
Via.getManager().getSubPlatforms().add(VersionInfo.getImplementationVersion());
|
||||
|
||||
getLogger().info("Loading translations...");
|
||||
TranslatableRewriter.loadTranslatables();
|
||||
TranslatableMappings.loadTranslatables();
|
||||
|
||||
getLogger().info("Registering protocols...");
|
||||
final ProtocolManager protocolManager = Via.getManager().getProtocolManager();
|
||||
@@ -146,6 +150,10 @@ public interface ViaBackwardsPlatform {
|
||||
protocolManager.registerProtocol(new Protocol1_21To1_20_5(), ProtocolVersion.v1_20_5, ProtocolVersion.v1_21);
|
||||
protocolManager.registerProtocol(new Protocol1_21_2To1_21(), ProtocolVersion.v1_21, ProtocolVersion.v1_21_2);
|
||||
protocolManager.registerProtocol(new Protocol1_21_4To1_21_2(), ProtocolVersion.v1_21_2, ProtocolVersion.v1_21_4);
|
||||
protocolManager.registerProtocol(new Protocol1_21_5To1_21_4(), ProtocolVersion.v1_21_4, ProtocolVersion.v1_21_5);
|
||||
|
||||
protocolManager.registerProtocol(new Protocol1_21_6To1_21_5(), ProtocolVersion.v1_21_5, ProtocolVersion.v1_21_6);
|
||||
protocolManager.registerProtocol(new Protocol1_21_7To1_21_6(), ProtocolVersion.v1_21_6, ProtocolVersion.v1_21_7);
|
||||
}
|
||||
|
||||
default void enable() {
|
||||
@@ -153,6 +161,10 @@ public interface ViaBackwardsPlatform {
|
||||
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_21_2)) {
|
||||
Via.getPlatform().runRepeatingSync(new PlayerPacketsTickTask(), 1L);
|
||||
}
|
||||
|
||||
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_21_6)) {
|
||||
Via.getPlatform().runRepeatingSync(new ChestDialogViewTask(), 20L);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+13
-38
@@ -15,26 +15,19 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.api.rewriters;
|
||||
package com.viaversion.viabackwards.api.data;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingDataLoader;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||
import com.viaversion.viaversion.api.protocol.Protocol;
|
||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||
import com.viaversion.viaversion.libs.gson.JsonObject;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public class TranslatableRewriter<C extends ClientboundPacketType> extends ComponentRewriter<C> {
|
||||
public final class TranslatableMappings {
|
||||
|
||||
private static final Map<String, Map<String, String>> TRANSLATABLES = new HashMap<>();
|
||||
private final Map<String, String> translatables;
|
||||
|
||||
public static void loadTranslatables() {
|
||||
if (!TRANSLATABLES.isEmpty()) {
|
||||
@@ -53,42 +46,24 @@ public class TranslatableRewriter<C extends ClientboundPacketType> extends Compo
|
||||
}
|
||||
}
|
||||
|
||||
public TranslatableRewriter(final BackwardsProtocol<C, ?, ?, ?> protocol, final ReadType type) {
|
||||
this(protocol, type, protocol.getClass().getSimpleName().replace("Protocol", "").split("To")[0].replace("_", "."));
|
||||
public static Map<String, String> translatablesFor(final Protocol<?, ?, ?, ?> protocol) {
|
||||
final String version = protocol.getClass().getSimpleName()
|
||||
.replace("Protocol", "")
|
||||
.split("To")[0]
|
||||
.replace("_", ".");
|
||||
return translatablesFor(version);
|
||||
}
|
||||
|
||||
public TranslatableRewriter(final BackwardsProtocol<C, ?, ?, ?> protocol, final ReadType type, final String version) {
|
||||
super(protocol, type);
|
||||
public static Map<String, String> translatablesFor(final String version) {
|
||||
final Map<String, String> translatableMappings = getTranslatableMappings(version);
|
||||
if (translatableMappings == null) {
|
||||
ViaBackwards.getPlatform().getLogger().warning("Missing " + version + " translatables!");
|
||||
this.translatables = new HashMap<>();
|
||||
} else {
|
||||
this.translatables = translatableMappings;
|
||||
return new HashMap<>();
|
||||
}
|
||||
return translatableMappings;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleTranslate(final JsonObject root, final String translate) {
|
||||
final String newTranslate = mappedTranslationKey(translate);
|
||||
if (newTranslate != null) {
|
||||
root.addProperty("translate", newTranslate);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleTranslate(final UserConnection connection, final CompoundTag parentTag, final StringTag translateTag) {
|
||||
final String newTranslate = mappedTranslationKey(translateTag.getValue());
|
||||
if (newTranslate != null) {
|
||||
parentTag.put("translate", new StringTag(newTranslate));
|
||||
}
|
||||
}
|
||||
|
||||
public @Nullable String mappedTranslationKey(final String translationKey) {
|
||||
return translatables.get(translationKey);
|
||||
}
|
||||
|
||||
public static Map<String, String> getTranslatableMappings(final String sectionIdentifier) {
|
||||
public static @Nullable Map<String, String> getTranslatableMappings(final String sectionIdentifier) {
|
||||
return TRANSLATABLES.get(sectionIdentifier);
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.api.rewriters;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viaversion.api.minecraft.RegistryEntry;
|
||||
import com.viaversion.viaversion.rewriter.RegistryDataRewriter;
|
||||
|
||||
public class BackwardsRegistryRewriter extends RegistryDataRewriter {
|
||||
|
||||
private final BackwardsProtocol<?, ?, ?, ?> protocol;
|
||||
|
||||
public BackwardsRegistryRewriter(final BackwardsProtocol<?, ?, ?, ?> protocol) {
|
||||
super(protocol);
|
||||
this.protocol = protocol;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateJukeboxSongs(final RegistryEntry[] entries) {
|
||||
for (final RegistryEntry entry : entries) {
|
||||
if (entry.tag() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final StringTag soundEvent = ((CompoundTag) entry.tag()).getStringTag("sound_event");
|
||||
if (soundEvent != null) {
|
||||
final String mappedNamedSound = protocol.getMappingData().getMappedNamedSound(soundEvent.getValue());
|
||||
if (mappedNamedSound != null) {
|
||||
soundEvent.setValue(mappedNamedSound);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+137
-62
@@ -18,6 +18,7 @@
|
||||
package com.viaversion.viabackwards.api.rewriters;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.FloatTag;
|
||||
import com.viaversion.nbt.tag.IntArrayTag;
|
||||
import com.viaversion.nbt.tag.IntTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
@@ -27,8 +28,10 @@ import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.data.MappedItem;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.EitherHolder;
|
||||
import com.viaversion.viaversion.api.minecraft.Holder;
|
||||
import com.viaversion.viaversion.api.minecraft.HolderSet;
|
||||
import com.viaversion.viaversion.api.minecraft.SoundEvent;
|
||||
import com.viaversion.viaversion.api.minecraft.data.StructuredDataContainer;
|
||||
import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
|
||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||
@@ -36,8 +39,8 @@ import com.viaversion.viaversion.api.minecraft.item.data.CustomModelData1_21_4;
|
||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
|
||||
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
||||
import com.viaversion.viaversion.api.type.Type;
|
||||
import com.viaversion.viaversion.rewriter.StructuredItemRewriter;
|
||||
import com.viaversion.viaversion.util.Key;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.BiConsumer;
|
||||
@@ -47,47 +50,24 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
public class BackwardsStructuredItemRewriter<C extends ClientboundPacketType, S extends ServerboundPacketType,
|
||||
T extends BackwardsProtocol<C, ?, ?, S>> extends StructuredItemRewriter<C, S, T> {
|
||||
|
||||
public BackwardsStructuredItemRewriter(
|
||||
T protocol,
|
||||
Type<Item> itemType, Type<Item[]> itemArrayType, Type<Item> mappedItemType, Type<Item[]> mappedItemArrayType,
|
||||
Type<Item> itemCostType, Type<Item> optionalItemCostType, Type<Item> mappedItemCostType, Type<Item> mappedOptionalItemCostType
|
||||
) {
|
||||
super(protocol, itemType, itemArrayType, mappedItemType, mappedItemArrayType, itemCostType, optionalItemCostType, mappedItemCostType, mappedOptionalItemCostType);
|
||||
}
|
||||
private static final int[] EMPTY_INT_ARRAY = new int[0];
|
||||
|
||||
public BackwardsStructuredItemRewriter(final T protocol, final Type<Item> itemType, final Type<Item[]> itemArrayType, final Type<Item> mappedItemType, final Type<Item[]> mappedItemArrayType) {
|
||||
super(protocol, itemType, itemArrayType, mappedItemType, mappedItemArrayType);
|
||||
}
|
||||
|
||||
public BackwardsStructuredItemRewriter(final T protocol, final Type<Item> itemType, final Type<Item[]> itemArrayType) {
|
||||
super(protocol, itemType, itemArrayType);
|
||||
public BackwardsStructuredItemRewriter(T protocol) {
|
||||
super(protocol);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item handleItemToClient(final UserConnection connection, final Item item) {
|
||||
if (item.isEmpty()) {
|
||||
return item;
|
||||
}
|
||||
|
||||
final StructuredDataContainer dataContainer = item.dataContainer();
|
||||
updateItemDataComponentTypeIds(dataContainer, true);
|
||||
protected void backupInconvertibleData(final UserConnection connection, final Item item, final StructuredDataContainer dataContainer, final CompoundTag backupTag) {
|
||||
super.backupInconvertibleData(connection, item, dataContainer, backupTag);
|
||||
|
||||
final BackwardsMappingData mappingData = protocol.getMappingData();
|
||||
final MappedItem mappedItem = mappingData != null ? mappingData.getMappedItem(item.identifier()) : null;
|
||||
if (mappedItem == null) {
|
||||
// Just rewrite the id
|
||||
if (mappingData != null && mappingData.getItemMappings() != null) {
|
||||
item.setIdentifier(mappingData.getNewItemId(item.identifier()));
|
||||
}
|
||||
|
||||
updateItemDataComponents(connection, item, true);
|
||||
return item;
|
||||
return;
|
||||
}
|
||||
|
||||
// Save original id, set remapped id
|
||||
final CompoundTag tag = createCustomTag(item);
|
||||
tag.putInt(nbtTagName("id"), item.identifier());
|
||||
item.setIdentifier(mappedItem.id());
|
||||
final CompoundTag customTag = createCustomTag(item);
|
||||
customTag.putInt(nbtTagName("id"), item.identifier()); // Save original id
|
||||
|
||||
// Add custom model data
|
||||
if (mappedItem.customModelData() != null) {
|
||||
@@ -97,7 +77,7 @@ public class BackwardsStructuredItemRewriter<C extends ClientboundPacketType, S
|
||||
new float[]{mappedItem.customModelData().floatValue()},
|
||||
new boolean[0],
|
||||
new String[0],
|
||||
new int[0]
|
||||
EMPTY_INT_ARRAY
|
||||
));
|
||||
}
|
||||
} else if (!dataContainer.has(StructuredDataKey.CUSTOM_MODEL_DATA1_20_5)) {
|
||||
@@ -108,38 +88,17 @@ public class BackwardsStructuredItemRewriter<C extends ClientboundPacketType, S
|
||||
// Set custom name - only done if there is no original one
|
||||
if (!dataContainer.has(StructuredDataKey.CUSTOM_NAME)) {
|
||||
dataContainer.set(StructuredDataKey.CUSTOM_NAME, mappedItem.tagName());
|
||||
tag.putBoolean(nbtTagName("added_custom_name"), true);
|
||||
customTag.putBoolean(nbtTagName("added_custom_name"), true);
|
||||
}
|
||||
|
||||
updateItemDataComponents(connection, item, true);
|
||||
return item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item handleItemToServer(final UserConnection connection, final Item item) {
|
||||
if (item.isEmpty()) {
|
||||
return item;
|
||||
protected void restoreBackupData(final Item item, final StructuredDataContainer container, final CompoundTag customData) {
|
||||
super.restoreBackupData(item, container, customData);
|
||||
if (removeBackupTag(customData, "id") instanceof final IntTag originalTag) {
|
||||
item.setIdentifier(originalTag.asInt());
|
||||
removeCustomTag(container, customData);
|
||||
}
|
||||
|
||||
final StructuredDataContainer dataContainer = item.dataContainer();
|
||||
updateItemDataComponentTypeIds(dataContainer, false);
|
||||
|
||||
final BackwardsMappingData mappingData = protocol.getMappingData();
|
||||
if (mappingData != null && mappingData.getItemMappings() != null) {
|
||||
item.setIdentifier(mappingData.getOldItemId(item.identifier()));
|
||||
}
|
||||
|
||||
final CompoundTag customData = dataContainer.get(StructuredDataKey.CUSTOM_DATA);
|
||||
if (customData != null) {
|
||||
if (customData.remove(nbtTagName("id")) instanceof final IntTag originalTag) {
|
||||
item.setIdentifier(originalTag.asInt());
|
||||
removeCustomTag(dataContainer, customData);
|
||||
}
|
||||
}
|
||||
|
||||
restoreTextComponents(item);
|
||||
updateItemDataComponents(connection, item, false);
|
||||
return item;
|
||||
}
|
||||
|
||||
protected void saveListTag(CompoundTag tag, ListTag<?> original, String name) {
|
||||
@@ -195,7 +154,7 @@ public class BackwardsStructuredItemRewriter<C extends ClientboundPacketType, S
|
||||
protected HolderSet restoreHolderSet(final CompoundTag tag, final String key) {
|
||||
final Tag savedTag = tag.get(key);
|
||||
if (savedTag == null) {
|
||||
return HolderSet.of(new int[0]);
|
||||
return HolderSet.of(EMPTY_INT_ARRAY);
|
||||
}
|
||||
|
||||
if (savedTag instanceof StringTag tagKey) {
|
||||
@@ -203,7 +162,7 @@ public class BackwardsStructuredItemRewriter<C extends ClientboundPacketType, S
|
||||
} else if (savedTag instanceof IntArrayTag idsTag) {
|
||||
return HolderSet.of(idsTag.getValue());
|
||||
} else {
|
||||
return HolderSet.of(new int[0]);
|
||||
return HolderSet.of(EMPTY_INT_ARRAY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,6 +176,28 @@ public class BackwardsStructuredItemRewriter<C extends ClientboundPacketType, S
|
||||
}
|
||||
}
|
||||
|
||||
protected <V> Tag eitherHolderToTag(final EitherHolder<V> holder, final BiConsumer<V, CompoundTag> valueSaveFunction) {
|
||||
if (holder.hasKey()) {
|
||||
return new StringTag(holder.key());
|
||||
} else {
|
||||
return holderToTag(holder.holder(), valueSaveFunction);
|
||||
}
|
||||
}
|
||||
|
||||
protected <V> void saveEitherHolderData(final StructuredDataKey<EitherHolder<V>> key, final StructuredDataContainer data, final CompoundTag backupTag, final BiConsumer<V, CompoundTag> valueSaveFunction) {
|
||||
final EitherHolder<V> holder = data.get(key);
|
||||
if (holder != null) {
|
||||
backupTag.put(key.identifier(), eitherHolderToTag(holder, valueSaveFunction));
|
||||
}
|
||||
}
|
||||
|
||||
protected <V> void saveHolderData(final StructuredDataKey<Holder<V>> key, final StructuredDataContainer data, final CompoundTag backupTag, final BiConsumer<V, CompoundTag> valueSaveFunction) {
|
||||
final Holder<V> holder = data.get(key);
|
||||
if (holder != null) {
|
||||
backupTag.put(key.identifier(), holderToTag(holder, valueSaveFunction));
|
||||
}
|
||||
}
|
||||
|
||||
protected <V> Holder<V> restoreHolder(final CompoundTag tag, final String key, final Function<CompoundTag, V> valueRestoreFunction) {
|
||||
final Tag savedTag = tag.get(key);
|
||||
if (savedTag == null) {
|
||||
@@ -232,6 +213,100 @@ public class BackwardsStructuredItemRewriter<C extends ClientboundPacketType, S
|
||||
}
|
||||
}
|
||||
|
||||
protected <V> EitherHolder<V> restoreEitherHolder(final CompoundTag tag, final String key, final Function<CompoundTag, V> valueRestoreFunction) {
|
||||
final Tag savedTag = tag.get(key);
|
||||
if (savedTag == null) {
|
||||
return EitherHolder.of(Holder.of(0));
|
||||
}
|
||||
|
||||
if (savedTag instanceof StringTag keyTag) {
|
||||
return EitherHolder.of(keyTag.getValue());
|
||||
} else {
|
||||
return EitherHolder.of(restoreHolder(tag, key, valueRestoreFunction));
|
||||
}
|
||||
}
|
||||
|
||||
protected <V> void restoreHolderData(final StructuredDataKey<Holder<V>> key, final StructuredDataContainer data, final CompoundTag backupTag, final Function<CompoundTag, V> valueRestoreFunction) {
|
||||
if (backupTag.contains(key.identifier())) {
|
||||
data.set(key, restoreHolder(backupTag, key.identifier(), valueRestoreFunction));
|
||||
}
|
||||
}
|
||||
|
||||
protected void saveStringData(final StructuredDataKey<String> key, final StructuredDataContainer data, final CompoundTag backupTag) {
|
||||
final String value = data.get(key);
|
||||
if (value != null) {
|
||||
backupTag.putString(key.identifier(), value);
|
||||
}
|
||||
}
|
||||
|
||||
protected void restoreStringData(final StructuredDataKey<String> key, final StructuredDataContainer data, final CompoundTag backupTag) {
|
||||
final String value = backupTag.getString(key.identifier());
|
||||
if (value != null) {
|
||||
data.set(key, value);
|
||||
}
|
||||
}
|
||||
|
||||
protected void saveKeyData(final StructuredDataKey<Key> key, final StructuredDataContainer data, final CompoundTag backupTag) {
|
||||
final Key value = data.get(key);
|
||||
if (value != null) {
|
||||
backupTag.putString(key.identifier(), value.original());
|
||||
}
|
||||
}
|
||||
|
||||
protected void restoreKeyData(final StructuredDataKey<Key> key, final StructuredDataContainer data, final CompoundTag backupTag) {
|
||||
final String value = backupTag.getString(key.identifier());
|
||||
if (value != null) {
|
||||
data.set(key, Key.of(value));
|
||||
}
|
||||
}
|
||||
|
||||
protected void saveIntData(final StructuredDataKey<Integer> key, final StructuredDataContainer data, final CompoundTag backupTag) {
|
||||
final Integer variant = data.get(key);
|
||||
if (variant != null) {
|
||||
backupTag.putInt(key.identifier(), variant);
|
||||
}
|
||||
}
|
||||
|
||||
protected void restoreIntData(final StructuredDataKey<Integer> key, final StructuredDataContainer data, final CompoundTag backupTag) {
|
||||
final IntTag variant = backupTag.getIntTag(key.identifier());
|
||||
if (variant != null) {
|
||||
data.set(key, variant.asInt());
|
||||
}
|
||||
}
|
||||
|
||||
protected void saveFloatData(final StructuredDataKey<Float> key, final StructuredDataContainer data, final CompoundTag backupTag) {
|
||||
final Float variant = data.get(key);
|
||||
if (variant != null) {
|
||||
backupTag.putFloat(key.identifier(), variant);
|
||||
}
|
||||
}
|
||||
|
||||
protected void restoreFloatData(final StructuredDataKey<Float> key, final StructuredDataContainer data, final CompoundTag backupTag) {
|
||||
final FloatTag variant = backupTag.getFloatTag(key.identifier());
|
||||
if (variant != null) {
|
||||
data.set(key, variant.asFloat());
|
||||
}
|
||||
}
|
||||
|
||||
protected void saveSoundEventHolder(final CompoundTag tag, final Holder<SoundEvent> holder) {
|
||||
tag.put("sound_event", holderToTag(holder, this::saveSoundEvent));
|
||||
}
|
||||
|
||||
protected void saveSoundEvent(final SoundEvent soundEvent, final CompoundTag tag) {
|
||||
tag.putString("identifier", soundEvent.identifier());
|
||||
if (soundEvent.fixedRange() != null) {
|
||||
tag.putFloat("fixed_range", soundEvent.fixedRange());
|
||||
}
|
||||
}
|
||||
|
||||
protected Holder<SoundEvent> restoreSoundEventHolder(final CompoundTag tag) {
|
||||
return restoreHolder(tag, "sound_event", soundEventTag -> {
|
||||
final String identifier = soundEventTag.getString("identifier");
|
||||
final FloatTag fixedRange = soundEventTag.getFloatTag("fixed_range");
|
||||
return new SoundEvent(identifier, fixedRange != null ? fixedRange.asFloat() : null);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public String nbtTagName() {
|
||||
return "VB|" + protocol.getClass().getSimpleName();
|
||||
|
||||
+23
-30
@@ -24,7 +24,6 @@ import com.viaversion.viaversion.api.minecraft.entitydata.EntityDataType;
|
||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_14;
|
||||
|
||||
@@ -40,40 +39,34 @@ public abstract class EntityRewriter<C extends ClientboundPacketType, T extends
|
||||
|
||||
@Override
|
||||
public void registerTrackerWithData(C packetType, EntityType fallingBlockType) {
|
||||
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||
@Override
|
||||
public void register() {
|
||||
map(Types.VAR_INT); // 0 - Entity id
|
||||
map(Types.UUID); // 1 - Entity UUID
|
||||
map(Types.VAR_INT); // 2 - Entity Type
|
||||
map(Types.DOUBLE); // 3 - X
|
||||
map(Types.DOUBLE); // 4 - Y
|
||||
map(Types.DOUBLE); // 5 - Z
|
||||
map(Types.BYTE); // 6 - Pitch
|
||||
map(Types.BYTE); // 7 - Yaw
|
||||
map(Types.INT); // 8 - Data
|
||||
handler(getSpawnTrackerWithDataHandler(fallingBlockType));
|
||||
}
|
||||
protocol.registerClientbound(packetType, wrapper -> {
|
||||
wrapper.passthrough(Types.VAR_INT); // Entity ID
|
||||
wrapper.passthrough(Types.UUID); // Entity UUID
|
||||
wrapper.passthrough(Types.VAR_INT); // Entity Type
|
||||
wrapper.passthrough(Types.DOUBLE); // X
|
||||
wrapper.passthrough(Types.DOUBLE); // Y
|
||||
wrapper.passthrough(Types.DOUBLE); // Z
|
||||
wrapper.passthrough(Types.BYTE); // Pitch
|
||||
wrapper.passthrough(Types.BYTE); // Yaw
|
||||
wrapper.passthrough(Types.INT); // Data
|
||||
getSpawnTrackerWithDataHandler(fallingBlockType).handle(wrapper);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerTrackerWithData1_19(C packetType, EntityType fallingBlockType) {
|
||||
protocol.registerClientbound(packetType, new PacketHandlers() {
|
||||
@Override
|
||||
public void register() {
|
||||
map(Types.VAR_INT); // Entity id
|
||||
map(Types.UUID); // Entity UUID
|
||||
map(Types.VAR_INT); // Entity type
|
||||
map(Types.DOUBLE); // X
|
||||
map(Types.DOUBLE); // Y
|
||||
map(Types.DOUBLE); // Z
|
||||
map(Types.BYTE); // Pitch
|
||||
map(Types.BYTE); // Yaw
|
||||
map(Types.BYTE); // Head yaw
|
||||
map(Types.VAR_INT); // Data
|
||||
handler(getSpawnTrackerWithDataHandler1_19(fallingBlockType));
|
||||
}
|
||||
protocol.registerClientbound(packetType, wrapper -> {
|
||||
wrapper.passthrough(Types.VAR_INT); // Entity id
|
||||
wrapper.passthrough(Types.UUID); // Entity UUID
|
||||
wrapper.passthrough(Types.VAR_INT); // Entity type
|
||||
wrapper.passthrough(Types.DOUBLE); // X
|
||||
wrapper.passthrough(Types.DOUBLE); // Y
|
||||
wrapper.passthrough(Types.DOUBLE); // Z
|
||||
wrapper.passthrough(Types.BYTE); // Pitch
|
||||
wrapper.passthrough(Types.BYTE); // Yaw
|
||||
wrapper.passthrough(Types.BYTE); // Head yaw
|
||||
wrapper.passthrough(Types.VAR_INT); // Data
|
||||
getSpawnTrackerWithDataHandler1_19(fallingBlockType).handle(wrapper);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+11
-12
@@ -18,9 +18,16 @@
|
||||
|
||||
package com.viaversion.viabackwards.api.rewriters;
|
||||
|
||||
import com.viaversion.nbt.tag.ByteTag;
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.IntTag;
|
||||
import com.viaversion.nbt.tag.NumberTag;
|
||||
import com.viaversion.nbt.tag.ShortTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.nbt.tag.Tag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.MappedLegacyBlockItem;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingDataLoader;
|
||||
import com.viaversion.viabackwards.api.data.MappedLegacyBlockItem;
|
||||
import com.viaversion.viabackwards.protocol.v1_12to1_11_1.data.BlockColors1_11_1;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.BlockChangeRecord;
|
||||
@@ -41,17 +48,10 @@ import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||
import com.viaversion.viaversion.libs.gson.JsonObject;
|
||||
import com.viaversion.viaversion.libs.gson.JsonPrimitive;
|
||||
import com.viaversion.nbt.tag.ByteTag;
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.IntTag;
|
||||
import com.viaversion.nbt.tag.NumberTag;
|
||||
import com.viaversion.nbt.tag.ShortTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.nbt.tag.Tag;
|
||||
import com.viaversion.viaversion.util.ComponentUtil;
|
||||
import com.viaversion.viaversion.util.IdAndData;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import com.viaversion.viaversion.util.IdAndData;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S extends ServerboundPacketType,
|
||||
@@ -226,10 +226,9 @@ public abstract class LegacyBlockItemRewriter<C extends ClientboundPacketType, S
|
||||
|
||||
public PacketHandler getFallingBlockHandler() {
|
||||
return wrapper -> {
|
||||
final EntityTypes1_12.ObjectType type = EntityTypes1_12.ObjectType.findById(wrapper.get(Types.BYTE, 0));
|
||||
final int objectData = wrapper.get(Types.INT, 0);
|
||||
final EntityTypes1_12.ObjectType type = EntityTypes1_12.ObjectType.findById(wrapper.get(Types.BYTE, 0), objectData);
|
||||
if (type == EntityTypes1_12.ObjectType.FALLING_BLOCK) {
|
||||
final int objectData = wrapper.get(Types.INT, 0);
|
||||
|
||||
final IdAndData block = handleBlock(objectData & 4095, objectData >> 12 & 15);
|
||||
if (block == null) return;
|
||||
|
||||
|
||||
+18
-9
@@ -36,7 +36,6 @@ import com.viaversion.viaversion.api.type.Types;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public abstract class LegacyEntityRewriter<C extends ClientboundPacketType, T extends BackwardsProtocol<C, ?, ?, ?>> extends EntityRewriterBase<C, T> {
|
||||
@@ -125,7 +124,9 @@ public abstract class LegacyEntityRewriter<C extends ClientboundPacketType, T ex
|
||||
|
||||
protected PacketHandler getObjectTrackerHandler() {
|
||||
return wrapper -> {
|
||||
EntityType type = objectTypeFromId(wrapper.get(Types.BYTE, 0));
|
||||
int id = wrapper.get(Types.BYTE, 0);
|
||||
int data = wrapper.get(Types.INT, 0);
|
||||
EntityType type = objectTypeFromId(id, data);
|
||||
if (type == null) {
|
||||
return;
|
||||
}
|
||||
@@ -142,18 +143,20 @@ public abstract class LegacyEntityRewriter<C extends ClientboundPacketType, T ex
|
||||
};
|
||||
}
|
||||
|
||||
protected PacketHandler getObjectRewriter(Function<Byte, ObjectType> objectGetter) {
|
||||
protected PacketHandler getObjectRewriter(ObjectTypeGetter objectGetter) {
|
||||
return wrapper -> {
|
||||
ObjectType type = objectGetter.apply(wrapper.get(Types.BYTE, 0));
|
||||
int id = wrapper.get(Types.BYTE, 0);
|
||||
int data = wrapper.get(Types.INT, 0);
|
||||
ObjectType type = objectGetter.get(id, data);
|
||||
if (type == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
EntityReplacement data = getObjectData(type);
|
||||
if (data != null) {
|
||||
wrapper.set(Types.BYTE, 0, (byte) data.replacementId());
|
||||
if (data.objectData() != -1) {
|
||||
wrapper.set(Types.INT, 0, data.objectData());
|
||||
EntityReplacement replacement = getObjectData(type);
|
||||
if (replacement != null) {
|
||||
wrapper.set(Types.BYTE, 0, (byte) replacement.replacementId());
|
||||
if (replacement.objectData() != -1) {
|
||||
wrapper.set(Types.INT, 0, replacement.objectData());
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -169,4 +172,10 @@ public abstract class LegacyEntityRewriter<C extends ClientboundPacketType, T ex
|
||||
|
||||
void setId(PacketWrapper wrapper, int id);
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
protected interface ObjectTypeGetter {
|
||||
|
||||
ObjectType get(int id, int data);
|
||||
}
|
||||
}
|
||||
+36
-26
@@ -17,13 +17,47 @@
|
||||
*/
|
||||
package com.viaversion.viabackwards.api.rewriters;
|
||||
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
||||
import com.viaversion.viaversion.api.type.Type;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.rewriter.IdRewriteFunction;
|
||||
|
||||
public final class MapColorRewriter {
|
||||
|
||||
/**
|
||||
* Rewrite map colors using the provided id rewriter.
|
||||
*
|
||||
* @param wrapper packet wrapper
|
||||
* @param rewriter id rewriter returning mapped colors, or -1 if unmapped
|
||||
* @param iconCount number of icons to read
|
||||
*/
|
||||
public static void rewriteMapColors(PacketWrapper wrapper, IdRewriteFunction rewriter, int iconCount) {
|
||||
for (int i = 0; i < iconCount; i++) {
|
||||
wrapper.passthrough(Types.VAR_INT); // Type
|
||||
wrapper.passthrough(Types.BYTE); // X
|
||||
wrapper.passthrough(Types.BYTE); // Z
|
||||
wrapper.passthrough(Types.BYTE); // Direction
|
||||
wrapper.passthrough(Types.OPTIONAL_COMPONENT); // Display Name
|
||||
}
|
||||
|
||||
short columns = wrapper.passthrough(Types.UNSIGNED_BYTE);
|
||||
if (columns < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
wrapper.passthrough(Types.UNSIGNED_BYTE); // Rows
|
||||
wrapper.passthrough(Types.UNSIGNED_BYTE); // X
|
||||
wrapper.passthrough(Types.UNSIGNED_BYTE); // Z
|
||||
byte[] data = wrapper.passthrough(Types.BYTE_ARRAY_PRIMITIVE);
|
||||
for (int i = 0; i < data.length; i++) {
|
||||
int color = data[i] & 0xFF;
|
||||
int mappedColor = rewriter.rewrite(color);
|
||||
if (mappedColor != -1) {
|
||||
data[i] = (byte) mappedColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a packethandler to rewrite map data color ids. Reading starts from the icon count.
|
||||
*
|
||||
@@ -31,30 +65,6 @@ public final class MapColorRewriter {
|
||||
* @return packethandler to rewrite map data color ids
|
||||
*/
|
||||
public static PacketHandler getRewriteHandler(IdRewriteFunction rewriter) {
|
||||
return wrapper -> {
|
||||
int iconCount = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int i = 0; i < iconCount; i++) {
|
||||
wrapper.passthrough(Types.VAR_INT); // Type
|
||||
wrapper.passthrough(Types.BYTE); // X
|
||||
wrapper.passthrough(Types.BYTE); // Z
|
||||
wrapper.passthrough(Types.BYTE); // Direction
|
||||
wrapper.passthrough(Types.OPTIONAL_COMPONENT); // Display Name
|
||||
}
|
||||
|
||||
short columns = wrapper.passthrough(Types.UNSIGNED_BYTE);
|
||||
if (columns < 1) return;
|
||||
|
||||
wrapper.passthrough(Types.UNSIGNED_BYTE); // Rows
|
||||
wrapper.passthrough(Types.UNSIGNED_BYTE); // X
|
||||
wrapper.passthrough(Types.UNSIGNED_BYTE); // Z
|
||||
byte[] data = wrapper.passthrough(Types.BYTE_ARRAY_PRIMITIVE);
|
||||
for (int i = 0; i < data.length; i++) {
|
||||
int color = data[i] & 0xFF;
|
||||
int mappedColor = rewriter.rewrite(color);
|
||||
if (mappedColor != -1) {
|
||||
data[i] = (byte) mappedColor;
|
||||
}
|
||||
}
|
||||
};
|
||||
return wrapper -> rewriteMapColors(wrapper, rewriter, wrapper.passthrough(Types.VAR_INT));
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -59,16 +59,16 @@ public class StructuredEnchantmentRewriter {
|
||||
final String remappedName = mappingData.mappedEnchantmentName(id);
|
||||
return ComponentUtil.jsonStringToTag(ChatUtil.legacyToJsonString("§7" + remappedName, ENCHANTMENT_LEVEL_TRANSLATION.formatted(level), true));
|
||||
};
|
||||
rewriteEnchantmentsToClient(data, StructuredDataKey.ENCHANTMENTS, idRewriteFunction, descriptionSupplier, false);
|
||||
rewriteEnchantmentsToClient(data, StructuredDataKey.STORED_ENCHANTMENTS, idRewriteFunction, descriptionSupplier, true);
|
||||
rewriteEnchantmentsToClient(data, StructuredDataKey.ENCHANTMENTS1_20_5, idRewriteFunction, descriptionSupplier, false);
|
||||
rewriteEnchantmentsToClient(data, StructuredDataKey.STORED_ENCHANTMENTS1_20_5, idRewriteFunction, descriptionSupplier, true);
|
||||
}
|
||||
|
||||
public void handleToServer(final Item item) {
|
||||
final StructuredDataContainer data = item.dataContainer();
|
||||
final CompoundTag customData = data.get(StructuredDataKey.CUSTOM_DATA);
|
||||
if (customData != null) {
|
||||
rewriteEnchantmentsToServer(data, customData, StructuredDataKey.ENCHANTMENTS);
|
||||
rewriteEnchantmentsToServer(data, customData, StructuredDataKey.STORED_ENCHANTMENTS);
|
||||
rewriteEnchantmentsToServer(data, customData, StructuredDataKey.ENCHANTMENTS1_20_5);
|
||||
rewriteEnchantmentsToServer(data, customData, StructuredDataKey.STORED_ENCHANTMENTS1_20_5);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.api.rewriters.text;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.TranslatableMappings;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||
import com.viaversion.viaversion.libs.gson.JsonObject;
|
||||
import java.util.Map;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public class JsonNBTComponentRewriter<C extends ClientboundPacketType> extends com.viaversion.viaversion.rewriter.text.JsonNBTComponentRewriter<C> implements TranslatableRewriter {
|
||||
|
||||
private final Map<String, String> translatables;
|
||||
|
||||
public JsonNBTComponentRewriter(final BackwardsProtocol<C, ?, ?, ?> protocol, final ReadType type) {
|
||||
super(protocol, type);
|
||||
this.translatables = TranslatableMappings.translatablesFor(protocol);
|
||||
}
|
||||
|
||||
public JsonNBTComponentRewriter(final BackwardsProtocol<C, ?, ?, ?> protocol, final ReadType type, final String version) {
|
||||
super(protocol, type);
|
||||
this.translatables = TranslatableMappings.translatablesFor(version);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleTranslate(final JsonObject root, final String translate) {
|
||||
final String newTranslate = mappedTranslationKey(translate);
|
||||
if (newTranslate != null) {
|
||||
root.addProperty("translate", newTranslate);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleTranslate(final UserConnection connection, final CompoundTag parentTag, final StringTag translateTag) {
|
||||
final String newTranslate = mappedTranslationKey(translateTag.getValue());
|
||||
if (newTranslate != null) {
|
||||
parentTag.put("translate", new StringTag(newTranslate));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String mappedTranslationKey(final String translationKey) {
|
||||
return translatables.get(translationKey);
|
||||
}
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.api.rewriters.text;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.TranslatableMappings;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
|
||||
import com.viaversion.viaversion.libs.gson.JsonObject;
|
||||
import java.util.Map;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public class NBTComponentRewriter<C extends ClientboundPacketType> extends com.viaversion.viaversion.rewriter.text.NBTComponentRewriter<C> implements TranslatableRewriter {
|
||||
|
||||
private final Map<String, String> translatables;
|
||||
|
||||
public NBTComponentRewriter(final BackwardsProtocol<C, ?, ?, ?> protocol) {
|
||||
super(protocol);
|
||||
this.translatables = TranslatableMappings.translatablesFor(protocol);
|
||||
}
|
||||
|
||||
public NBTComponentRewriter(final BackwardsProtocol<C, ?, ?, ?> protocol, final String version) {
|
||||
super(protocol);
|
||||
this.translatables = TranslatableMappings.translatablesFor(version);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleTranslate(final JsonObject root, final String translate) {
|
||||
final String newTranslate = mappedTranslationKey(translate);
|
||||
if (newTranslate != null) {
|
||||
root.addProperty("translate", newTranslate);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleTranslate(final UserConnection connection, final CompoundTag parentTag, final StringTag translateTag) {
|
||||
final String newTranslate = mappedTranslationKey(translateTag.getValue());
|
||||
if (newTranslate != null) {
|
||||
parentTag.put("translate", new StringTag(newTranslate));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String mappedTranslationKey(final String translationKey) {
|
||||
return translatables.get(translationKey);
|
||||
}
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.api.rewriters.text;
|
||||
|
||||
import com.viaversion.viaversion.api.rewriter.ComponentRewriter;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public interface TranslatableRewriter extends ComponentRewriter {
|
||||
|
||||
@Nullable
|
||||
String mappedTranslationKey(String translationKey);
|
||||
}
|
||||
+39
-15
@@ -17,28 +17,28 @@
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.template;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.viabackwards.api.rewriters.BackwardsStructuredItemRewriter;
|
||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_4;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.data.StructuredDataContainer;
|
||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21_2to1_21_4.packet.ServerboundPacket1_21_4;
|
||||
import com.viaversion.viaversion.protocols.v1_21_2to1_21_4.packet.ServerboundPackets1_21_4;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.rewriter.RecipeDisplayRewriter1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
|
||||
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
||||
import com.viaversion.viaversion.rewriter.RecipeDisplayRewriter;
|
||||
|
||||
// To replace if needed:
|
||||
// ChunkType1_20_2
|
||||
// ChunkType1_21_5
|
||||
// RecipeDisplayRewriter
|
||||
// Types1_21_4
|
||||
final class BlockItemPacketRewriter1_99 extends BackwardsStructuredItemRewriter<ClientboundPacket1_21_2, ServerboundPacket1_21_4, Protocol1_98To1_99> {
|
||||
final class BlockItemPacketRewriter1_99 extends BackwardsStructuredItemRewriter<ClientboundPacket1_21_2, ServerboundPacket1_21_4, Protocol1_99To1_98> {
|
||||
|
||||
public BlockItemPacketRewriter1_99(final Protocol1_98To1_99 protocol) {
|
||||
super(protocol, Types1_21_4.ITEM, Types1_21_4.ITEM_ARRAY);
|
||||
/*super(protocol,
|
||||
Types1_21_4.ITEM, Types1_21_4.ITEM_ARRAY, Types1_OLD.ITEM, Types1_OLD.ITEM_ARRAY,
|
||||
Types1_21_4.ITEM_COST, Types1_21_4.OPTIONAL_ITEM_COST, Types1_OLD.ITEM_COST, Types1_OLD.OPTIONAL_ITEM_COST
|
||||
);*/
|
||||
public BlockItemPacketRewriter1_99(final Protocol1_99To1_98 protocol) {
|
||||
super(protocol);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -48,11 +48,11 @@ final class BlockItemPacketRewriter1_99 extends BackwardsStructuredItemRewriter<
|
||||
blockRewriter.registerBlockUpdate(ClientboundPackets1_21_2.BLOCK_UPDATE);
|
||||
blockRewriter.registerSectionBlocksUpdate1_20(ClientboundPackets1_21_2.SECTION_BLOCKS_UPDATE);
|
||||
blockRewriter.registerLevelEvent1_21(ClientboundPackets1_21_2.LEVEL_EVENT, 2001);
|
||||
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_21_2.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_20_2::new);
|
||||
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_21_2.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_21_5::new);
|
||||
blockRewriter.registerBlockEntityData(ClientboundPackets1_21_2.BLOCK_ENTITY_DATA);
|
||||
|
||||
// registerOpenScreen(ClientboundPackets1_21_2.OPEN_SCREEN);
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.SET_CURSOR_ITEM, this::passthroughClientboundItem);
|
||||
registerSetCursorItem(ClientboundPackets1_21_2.SET_CURSOR_ITEM);
|
||||
registerSetPlayerInventory(ClientboundPackets1_21_2.SET_PLAYER_INVENTORY);
|
||||
registerCooldown1_21_2(ClientboundPackets1_21_2.COOLDOWN);
|
||||
registerSetContent1_21_2(ClientboundPackets1_21_2.CONTAINER_SET_CONTENT);
|
||||
@@ -60,12 +60,36 @@ final class BlockItemPacketRewriter1_99 extends BackwardsStructuredItemRewriter<
|
||||
registerAdvancements1_20_3(ClientboundPackets1_21_2.UPDATE_ADVANCEMENTS);
|
||||
registerSetEquipment(ClientboundPackets1_21_2.SET_EQUIPMENT);
|
||||
registerMerchantOffers1_20_5(ClientboundPackets1_21_2.MERCHANT_OFFERS);
|
||||
registerContainerClick1_21_2(ServerboundPackets1_21_4.CONTAINER_CLICK);
|
||||
registerSetCreativeModeSlot(ServerboundPackets1_21_4.SET_CREATIVE_MODE_SLOT);
|
||||
registerContainerClick1_21_5(ServerboundPackets1_21_4.CONTAINER_CLICK);
|
||||
registerSetCreativeModeSlot1_21_5(ServerboundPackets1_21_4.SET_CREATIVE_MODE_SLOT);
|
||||
|
||||
final RecipeDisplayRewriter<ClientboundPacket1_21_2> recipeRewriter = new RecipeDisplayRewriter<>(protocol);
|
||||
final RecipeDisplayRewriter<ClientboundPacket1_21_2> recipeRewriter = new RecipeDisplayRewriter1_21_5<>(protocol);
|
||||
recipeRewriter.registerUpdateRecipes(ClientboundPackets1_21_2.UPDATE_RECIPES);
|
||||
recipeRewriter.registerRecipeBookAdd(ClientboundPackets1_21_2.RECIPE_BOOK_ADD);
|
||||
recipeRewriter.registerPlaceGhostRecipe(ClientboundPackets1_21_2.PLACE_GHOST_RECIPE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleItemDataComponentsToClient(final UserConnection connection, final Item item, final StructuredDataContainer container) {
|
||||
super.handleItemDataComponentsToClient(connection, item, container);
|
||||
// downgradeData(item, container); // static import VV method
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleItemDataComponentsToServer(final UserConnection connection, final Item item, final StructuredDataContainer container) {
|
||||
super.handleItemDataComponentsToServer(connection, item, container);
|
||||
// upgradeData(item, container); // static import VV method
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void restoreBackupData(final Item item, final StructuredDataContainer container, final CompoundTag customData) {
|
||||
super.restoreBackupData(item, container, customData);
|
||||
// restore any data if needed here
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void backupInconvertibleData(final UserConnection connection, final Item item, final StructuredDataContainer dataContainer, final CompoundTag backupTag) {
|
||||
super.backupInconvertibleData(connection, item, dataContainer, backupTag);
|
||||
// back up any data if needed here, called before the method below
|
||||
}
|
||||
}
|
||||
+4
-10
@@ -19,15 +19,14 @@ package com.viaversion.viabackwards.protocol.template;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.NBTComponentRewriter;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||
import com.viaversion.viaversion.util.SerializerVersion;
|
||||
|
||||
final class ComponentRewriter1_99 extends TranslatableRewriter<ClientboundPacket1_21_2> {
|
||||
final class ComponentRewriter1_99 extends NBTComponentRewriter<ClientboundPacket1_21_2> {
|
||||
|
||||
public ComponentRewriter1_99(final BackwardsProtocol<ClientboundPacket1_21_2, ?, ?, ?> protocol) {
|
||||
super(protocol, ReadType.NBT);
|
||||
super(protocol);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -38,11 +37,6 @@ final class ComponentRewriter1_99 extends TranslatableRewriter<ClientboundPacket
|
||||
}
|
||||
|
||||
// Remove or update data from componentsTag
|
||||
// New added data which is not handled otherwise needs to be removed to prevent errors on the client
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SerializerVersion inputSerializerVersion() {
|
||||
return SerializerVersion.V1_21_4;
|
||||
// Newly added data which is not handled otherwise needs to be removed to prevent errors on the client
|
||||
}
|
||||
}
|
||||
+22
-40
@@ -17,59 +17,42 @@
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.template;
|
||||
|
||||
import com.viaversion.viabackwards.api.rewriters.BackwardsRegistryRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.EntityRewriter;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_4;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_4;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_21_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundConfigurationPackets1_21;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
|
||||
import com.viaversion.viaversion.rewriter.RegistryDataRewriter;
|
||||
|
||||
// Replace if needed
|
||||
// Types1_OLD
|
||||
// Types1_21_4
|
||||
final class EntityPacketRewriter1_99 extends EntityRewriter<ClientboundPacket1_21_2, Protocol1_98To1_99> {
|
||||
// VersionedTypes
|
||||
final class EntityPacketRewriter1_99 extends EntityRewriter<ClientboundPacket1_21_2, Protocol1_99To1_98> {
|
||||
|
||||
public EntityPacketRewriter1_99(final Protocol1_98To1_99 protocol) {
|
||||
super(protocol, Types1_21_4.ENTITY_DATA_TYPES.optionalComponentType, Types1_21_4.ENTITY_DATA_TYPES.booleanType);
|
||||
public EntityPacketRewriter1_99(final Protocol1_99To1_98 protocol) {
|
||||
super(protocol, VersionedTypes.V1_21_4.entityDataTypes.optionalComponentType, VersionedTypes.V1_21_4.entityDataTypes.booleanType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerPackets() {
|
||||
registerTrackerWithData1_19(ClientboundPackets1_21_2.ADD_ENTITY, EntityTypes1_21_4.FALLING_BLOCK);
|
||||
registerSetEntityData(ClientboundPackets1_21_2.SET_ENTITY_DATA, /*Types1_OLD.ENTITY_DATA_LIST, */Types1_21_4.ENTITY_DATA_LIST); // Specify old and new entity data list if changed
|
||||
registerSetEntityData(ClientboundPackets1_21_2.SET_ENTITY_DATA);
|
||||
registerRemoveEntities(ClientboundPackets1_21_2.REMOVE_ENTITIES);
|
||||
registerPlayerAbilities(ClientboundPackets1_21_2.PLAYER_ABILITIES);
|
||||
registerGameEvent(ClientboundPackets1_21_2.GAME_EVENT);
|
||||
registerLogin1_20_5(ClientboundPackets1_21_2.LOGIN);
|
||||
registerRespawn1_20_5(ClientboundPackets1_21_2.RESPAWN);
|
||||
|
||||
final RegistryDataRewriter registryDataRewriter = new RegistryDataRewriter(protocol);
|
||||
final RegistryDataRewriter registryDataRewriter = new BackwardsRegistryRewriter(protocol);
|
||||
protocol.registerClientbound(ClientboundConfigurationPackets1_21.REGISTRY_DATA, registryDataRewriter::handle);
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.LOGIN, wrapper -> {
|
||||
final int entityId = wrapper.passthrough(Types.INT); // Entity id
|
||||
wrapper.passthrough(Types.BOOLEAN); // Hardcore
|
||||
wrapper.passthrough(Types.STRING_ARRAY); // World List
|
||||
wrapper.passthrough(Types.VAR_INT); // Max players
|
||||
wrapper.passthrough(Types.VAR_INT); // View distance
|
||||
wrapper.passthrough(Types.VAR_INT); // Simulation distance
|
||||
wrapper.passthrough(Types.BOOLEAN); // Reduced debug info
|
||||
wrapper.passthrough(Types.BOOLEAN); // Show death screen
|
||||
wrapper.passthrough(Types.BOOLEAN); // Limited crafting
|
||||
final int dimensionId = wrapper.passthrough(Types.VAR_INT);
|
||||
final String world = wrapper.passthrough(Types.STRING);
|
||||
trackWorldDataByKey1_20_5(wrapper.user(), dimensionId, world);
|
||||
trackPlayer(wrapper.user(), entityId);
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.RESPAWN, wrapper -> {
|
||||
final int dimensionId = wrapper.passthrough(Types.VAR_INT);
|
||||
final String world = wrapper.passthrough(Types.STRING);
|
||||
trackWorldDataByKey1_20_5(wrapper.user(), dimensionId, world); // Tracks world height and name for chunk data and entity (un)tracking
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerRewrites() {
|
||||
final EntityDataTypes1_21_2 mappedEntityDataTypes = VersionedTypes.V1_21_4.entityDataTypes;
|
||||
/*filter().handler((event, data) -> {
|
||||
int id = data.dataType().typeId();
|
||||
if (id >= ac) {
|
||||
@@ -78,19 +61,18 @@ final class EntityPacketRewriter1_99 extends EntityRewriter<ClientboundPacket1_2
|
||||
id--;
|
||||
}
|
||||
|
||||
data.setDataType(Types1_21_4.ENTITY_DATA_TYPES.byId(id));
|
||||
data.setDataType(mappedEntityDataTypess.byId(id));
|
||||
});*/
|
||||
|
||||
registerEntityDataTypeHandler1_20_3(
|
||||
Types1_21_4.ENTITY_DATA_TYPES.itemType,
|
||||
Types1_21_4.ENTITY_DATA_TYPES.blockStateType,
|
||||
Types1_21_4.ENTITY_DATA_TYPES.optionalBlockStateType,
|
||||
Types1_21_4.ENTITY_DATA_TYPES.particleType,
|
||||
Types1_21_4.ENTITY_DATA_TYPES.particlesType,
|
||||
Types1_21_4.ENTITY_DATA_TYPES.componentType,
|
||||
Types1_21_4.ENTITY_DATA_TYPES.optionalComponentType
|
||||
mappedEntityDataTypes.itemType,
|
||||
mappedEntityDataTypes.blockStateType,
|
||||
mappedEntityDataTypes.optionalBlockStateType,
|
||||
mappedEntityDataTypes.particleType,
|
||||
mappedEntityDataTypes.particlesType,
|
||||
mappedEntityDataTypes.componentType,
|
||||
mappedEntityDataTypes.optionalComponentType
|
||||
);
|
||||
registerBlockStateHandler(EntityTypes1_21_4.ABSTRACT_MINECART, 11);
|
||||
|
||||
// Remove entity data of new entity type
|
||||
// filter().type(EntityTypes1_21_4.SNIFFER).removeIndex(newIndex);
|
||||
|
||||
+31
-15
@@ -20,13 +20,15 @@ package com.viaversion.viabackwards.protocol.template;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.NBTComponentRewriter;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_4;
|
||||
import com.viaversion.viaversion.api.protocol.packet.provider.PacketTypesProvider;
|
||||
import com.viaversion.viaversion.api.protocol.packet.provider.SimplePacketTypesProvider;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_4;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypesHolder;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.data.item.ItemHasherBase;
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundConfigurationPackets1_20_5;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.Protocol1_20_5To1_21;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundConfigurationPackets1_21;
|
||||
@@ -37,6 +39,7 @@ import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacke
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
import com.viaversion.viaversion.util.SerializerVersion;
|
||||
|
||||
import static com.viaversion.viaversion.util.ProtocolUtil.packetTypeMap;
|
||||
|
||||
@@ -48,19 +51,20 @@ import static com.viaversion.viaversion.util.ProtocolUtil.packetTypeMap;
|
||||
// ClientboundConfigurationPackets1_21
|
||||
// ServerboundConfigurationPackets1_20_5
|
||||
// EntityTypes1_21_4 (UNMAPPED type)
|
||||
// Types1_21_4.PARTICLE
|
||||
// VersionedTypes.V1_21_5
|
||||
// SerializerVersion.V1_21_5
|
||||
// 1.99, 1.98
|
||||
final class Protocol1_98To1_99 extends BackwardsProtocol<ClientboundPacket1_21_2, ClientboundPacket1_21_2, ServerboundPacket1_21_4, ServerboundPacket1_21_4> {
|
||||
final class Protocol1_99To1_98 extends BackwardsProtocol<ClientboundPacket1_21_2, ClientboundPacket1_21_2, ServerboundPacket1_21_4, ServerboundPacket1_21_4> {
|
||||
|
||||
// ViaBackwards uses its own mappings and also needs a translatablerewriter for translation mappings
|
||||
public static final BackwardsMappingData MAPPINGS = new BackwardsMappingData("1.99", "1.98", Protocol1_20_5To1_21.class);
|
||||
public static final BackwardsMappingData MAPPINGS = new BackwardsMappingData("1.99", "1.98", Protocol1_20_5To1_21.class); // Change the VV (!) protocol class
|
||||
private final EntityPacketRewriter1_99 entityRewriter = new EntityPacketRewriter1_99(this);
|
||||
private final BlockItemPacketRewriter1_99 itemRewriter = new BlockItemPacketRewriter1_99(this);
|
||||
private final ParticleRewriter<ClientboundPacket1_21_2> particleRewriter = new ParticleRewriter<>(this, Types1_21_4.PARTICLE/*, Types1_OLD.PARTICLE*/);
|
||||
private final TranslatableRewriter<ClientboundPacket1_21_2> translatableRewriter = new ComponentRewriter1_99(this);
|
||||
private final ParticleRewriter<ClientboundPacket1_21_2> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final NBTComponentRewriter<ClientboundPacket1_21_2> translatableRewriter = new ComponentRewriter1_99(this);
|
||||
private final TagRewriter<ClientboundPacket1_21_2> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_98To1_99() {
|
||||
public Protocol1_99To1_98() {
|
||||
super(ClientboundPacket1_21_2.class, ClientboundPacket1_21_2.class, ServerboundPacket1_21_4.class, ServerboundPacket1_21_4.class);
|
||||
}
|
||||
|
||||
@@ -80,7 +84,7 @@ final class Protocol1_98To1_99 extends BackwardsProtocol<ClientboundPacket1_21_2
|
||||
//new AttributeRewriter<>(this).register1_21(ClientboundPackets1_21_2.UPDATE_ATTRIBUTES);
|
||||
|
||||
// Registers translatable mappings (missing a whole bunch still)
|
||||
//translatableRewriter.registerOpenScreen(ClientboundPackets1_21_2.OPEN_SCREEN); // Handled by registerOpenScreen in item rewriters
|
||||
//translatableRewriter.registerOpenScreen1_14(ClientboundPackets1_21_2.OPEN_SCREEN); // Handled by registerOpenScreen in item rewriters
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SET_ACTION_BAR_TEXT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SET_TITLE_TEXT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SET_SUBTITLE_TEXT);
|
||||
@@ -88,19 +92,21 @@ final class Protocol1_98To1_99 extends BackwardsProtocol<ClientboundPacket1_21_2
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.DISCONNECT);
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_21_2.TAB_LIST);
|
||||
translatableRewriter.registerPlayerCombatKill1_20(ClientboundPackets1_21_2.PLAYER_COMBAT_KILL);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SYSTEM_CHAT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.DISGUISED_CHAT);
|
||||
translatableRewriter.registerPlayerInfoUpdate1_21_4(ClientboundPackets1_21_2.PLAYER_INFO_UPDATE);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SYSTEM_CHAT);
|
||||
translatableRewriter.registerDisguisedChat(ClientboundPackets1_21_2.DISGUISED_CHAT);
|
||||
translatableRewriter.registerPlayerChat1_21_5(ClientboundPackets1_21_2.PLAYER_CHAT);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
// If needed for any particle, item, or block changes. Extend ParticleRewriter for particle serializer changes
|
||||
particleRewriter.registerLevelParticles1_20_5(ClientboundPackets1_21_2.LEVEL_PARTICLES);
|
||||
particleRewriter.registerLevelParticles1_21_4(ClientboundPackets1_21_2.LEVEL_PARTICLES);
|
||||
particleRewriter.registerExplode1_21_2(ClientboundPackets1_21_2.EXPLODE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(final UserConnection user) {
|
||||
addEntityTracker(user, new EntityTrackerBase(user, EntityTypes1_21_4.PLAYER));
|
||||
public void init(final UserConnection connection) {
|
||||
addEntityTracker(connection, new EntityTrackerBase(connection, EntityTypes1_21_4.PLAYER));
|
||||
addItemHasher(connection, new ItemHasherBase(this, connection, SerializerVersion.V1_21_5, SerializerVersion.V1_21_5));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -124,7 +130,7 @@ final class Protocol1_98To1_99 extends BackwardsProtocol<ClientboundPacket1_21_2
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPacket1_21_2> getComponentRewriter() {
|
||||
public NBTComponentRewriter<ClientboundPacket1_21_2> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
@@ -133,6 +139,16 @@ final class Protocol1_98To1_99 extends BackwardsProtocol<ClientboundPacket1_21_2
|
||||
return tagRewriter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VersionedTypesHolder types() {
|
||||
return VersionedTypes.V1_21_5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VersionedTypesHolder mappedTypes() {
|
||||
return VersionedTypes.V1_21_5;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PacketTypesProvider<ClientboundPacket1_21_2, ClientboundPacket1_21_2, ServerboundPacket1_21_4, ServerboundPacket1_21_4> createPacketTypesProvider() {
|
||||
return new SimplePacketTypesProvider<>(
|
||||
+3
-3
@@ -21,7 +21,7 @@ package com.viaversion.viabackwards.protocol.v1_10to1_9_3;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_10to1_9_3.rewriter.BlockItemPacketRewriter1_10;
|
||||
import com.viaversion.viabackwards.protocol.v1_10to1_9_3.rewriter.EntityPacketRewriter1_10;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
@@ -34,7 +34,7 @@ import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ClientboundPackets1_9_3;
|
||||
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ServerboundPackets1_9_3;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
|
||||
public class Protocol1_10To1_9_3 extends BackwardsProtocol<ClientboundPackets1_9_3, ClientboundPackets1_9_3, ServerboundPackets1_9_3, ServerboundPackets1_9_3> {
|
||||
|
||||
@@ -92,7 +92,7 @@ public class Protocol1_10To1_9_3 extends BackwardsProtocol<ClientboundPackets1_9
|
||||
}
|
||||
});
|
||||
|
||||
TranslatableRewriter<ClientboundPackets1_9_3> componentRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
JsonNBTComponentRewriter<ClientboundPackets1_9_3> componentRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
componentRewriter.registerComponentPacket(ClientboundPackets1_9_3.CHAT);
|
||||
}
|
||||
|
||||
|
||||
+8
-9
@@ -29,7 +29,6 @@ import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_9;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_9;
|
||||
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ClientboundPackets1_9_3;
|
||||
import java.util.List;
|
||||
|
||||
@@ -80,7 +79,7 @@ public class EntityPacketRewriter1_10 extends LegacyEntityRewriter<ClientboundPa
|
||||
map(Types.SHORT); // 9 - Velocity X
|
||||
map(Types.SHORT); // 10 - Velocity Y
|
||||
map(Types.SHORT); // 11 - Velocity Z
|
||||
map(Types1_9.ENTITY_DATA_LIST); // 12 - Entity data
|
||||
map(Types.ENTITY_DATA_LIST1_9); // 12 - Entity data
|
||||
|
||||
// Track entity
|
||||
handler(getTrackerHandler(Types.UNSIGNED_BYTE, 0));
|
||||
@@ -93,7 +92,7 @@ public class EntityPacketRewriter1_10 extends LegacyEntityRewriter<ClientboundPa
|
||||
return;
|
||||
}
|
||||
|
||||
List<EntityData> entityDataList = wrapper.get(Types1_9.ENTITY_DATA_LIST, 0);
|
||||
List<EntityData> entityDataList = wrapper.get(Types.ENTITY_DATA_LIST1_9, 0);
|
||||
handleEntityData(wrapper.get(Types.VAR_INT, 0), entityDataList, wrapper.user());
|
||||
|
||||
EntityReplacement entityReplacement = entityDataForType(type);
|
||||
@@ -122,14 +121,14 @@ public class EntityPacketRewriter1_10 extends LegacyEntityRewriter<ClientboundPa
|
||||
map(Types.DOUBLE); // 4 - Z
|
||||
map(Types.BYTE); // 5 - Yaw
|
||||
map(Types.BYTE); // 6 - Pitch
|
||||
map(Types1_9.ENTITY_DATA_LIST); // 7 - Entity data list
|
||||
map(Types.ENTITY_DATA_LIST1_9); // 7 - Entity data list
|
||||
|
||||
handler(getTrackerAndDataHandler(Types1_9.ENTITY_DATA_LIST, EntityTypes1_11.EntityType.PLAYER));
|
||||
handler(getTrackerAndDataHandler(Types.ENTITY_DATA_LIST1_9, EntityTypes1_11.EntityType.PLAYER));
|
||||
}
|
||||
});
|
||||
|
||||
registerRemoveEntities(ClientboundPackets1_9_3.REMOVE_ENTITIES);
|
||||
registerSetEntityData(ClientboundPackets1_9_3.SET_ENTITY_DATA, Types1_9.ENTITY_DATA_LIST);
|
||||
registerSetEntityData(ClientboundPackets1_9_3.SET_ENTITY_DATA, Types.ENTITY_DATA_LIST1_9);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -164,11 +163,11 @@ public class EntityPacketRewriter1_10 extends LegacyEntityRewriter<ClientboundPa
|
||||
|
||||
@Override
|
||||
public EntityType typeFromId(int typeId) {
|
||||
return EntityTypes1_10.getTypeFromId(typeId, false);
|
||||
return EntityTypes1_10.EntityType.findById(typeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType objectTypeFromId(int typeId) {
|
||||
return EntityTypes1_10.getTypeFromId(typeId, true);
|
||||
public EntityType objectTypeFromId(int typeId, int data) {
|
||||
return EntityTypes1_10.ObjectType.getEntityType(typeId, data);
|
||||
}
|
||||
}
|
||||
+8
-9
@@ -24,7 +24,6 @@ import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_11;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_9;
|
||||
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ClientboundPackets1_9_3;
|
||||
|
||||
public class EntityPacketRewriter1_11_1 extends LegacyEntityRewriter<ClientboundPackets1_9_3, Protocol1_11_1To1_11> {
|
||||
@@ -72,13 +71,13 @@ public class EntityPacketRewriter1_11_1 extends LegacyEntityRewriter<Clientbound
|
||||
map(Types.SHORT); // 9 - Velocity X
|
||||
map(Types.SHORT); // 10 - Velocity Y
|
||||
map(Types.SHORT); // 11 - Velocity Z
|
||||
map(Types1_9.ENTITY_DATA_LIST); // 12 - Entity data
|
||||
map(Types.ENTITY_DATA_LIST1_9); // 12 - Entity data
|
||||
|
||||
// Track entity
|
||||
handler(getTrackerHandler());
|
||||
|
||||
// Rewrite entity type / data
|
||||
handler(getMobSpawnRewriter1_11(Types1_9.ENTITY_DATA_LIST));
|
||||
handler(getMobSpawnRewriter1_11(Types.ENTITY_DATA_LIST1_9));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -96,14 +95,14 @@ public class EntityPacketRewriter1_11_1 extends LegacyEntityRewriter<Clientbound
|
||||
map(Types.DOUBLE); // 4 - Z
|
||||
map(Types.BYTE); // 5 - Yaw
|
||||
map(Types.BYTE); // 6 - Pitch
|
||||
map(Types1_9.ENTITY_DATA_LIST); // 7 - Entity data list
|
||||
map(Types.ENTITY_DATA_LIST1_9); // 7 - Entity data list
|
||||
|
||||
handler(getTrackerAndDataHandler(Types1_9.ENTITY_DATA_LIST, EntityTypes1_11.EntityType.PLAYER));
|
||||
handler(getTrackerAndDataHandler(Types.ENTITY_DATA_LIST1_9, EntityTypes1_11.EntityType.PLAYER));
|
||||
}
|
||||
});
|
||||
|
||||
registerRemoveEntities(ClientboundPackets1_9_3.REMOVE_ENTITIES);
|
||||
registerSetEntityData(ClientboundPackets1_9_3.SET_ENTITY_DATA, Types1_9.ENTITY_DATA_LIST);
|
||||
registerSetEntityData(ClientboundPackets1_9_3.SET_ENTITY_DATA, Types.ENTITY_DATA_LIST1_9);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -117,11 +116,11 @@ public class EntityPacketRewriter1_11_1 extends LegacyEntityRewriter<Clientbound
|
||||
|
||||
@Override
|
||||
public EntityType typeFromId(int typeId) {
|
||||
return EntityTypes1_11.getTypeFromId(typeId, false);
|
||||
return EntityTypes1_11.EntityType.findById(typeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType objectTypeFromId(int typeId) {
|
||||
return EntityTypes1_11.getTypeFromId(typeId, true);
|
||||
public EntityType objectTypeFromId(int typeId, int data) {
|
||||
return EntityTypes1_11.ObjectType.getEntityType(typeId, data);
|
||||
}
|
||||
}
|
||||
+5
-6
@@ -21,7 +21,7 @@ package com.viaversion.viabackwards.protocol.v1_11to1_10;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_11to1_10.rewriter.BlockItemPacketRewriter1_11;
|
||||
import com.viaversion.viabackwards.protocol.v1_11to1_10.rewriter.EntityPacketRewriter1_11;
|
||||
import com.viaversion.viabackwards.protocol.v1_11to1_10.rewriter.PlayerPacketRewriter1_11;
|
||||
@@ -30,17 +30,16 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.ClientWorld;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_11;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.protocols.v1_11_1to1_12.packet.ClientboundPackets1_12;
|
||||
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ClientboundPackets1_9_3;
|
||||
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ServerboundPackets1_9_3;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
|
||||
public class Protocol1_11To1_10 extends BackwardsProtocol<ClientboundPackets1_9_3, ClientboundPackets1_9_3, ServerboundPackets1_9_3, ServerboundPackets1_9_3> {
|
||||
|
||||
public static final BackwardsMappingData MAPPINGS = new BackwardsMappingData("1.11", "1.10");
|
||||
private final EntityPacketRewriter1_11 entityRewriter = new EntityPacketRewriter1_11(this);
|
||||
private final BlockItemPacketRewriter1_11 itemRewriter = new BlockItemPacketRewriter1_11(this);
|
||||
private TranslatableRewriter<ClientboundPackets1_9_3> componentRewriter;
|
||||
private JsonNBTComponentRewriter<ClientboundPackets1_9_3> componentRewriter;
|
||||
|
||||
public Protocol1_11To1_10() {
|
||||
super(ClientboundPackets1_9_3.class, ClientboundPackets1_9_3.class, ServerboundPackets1_9_3.class, ServerboundPackets1_9_3.class);
|
||||
@@ -56,7 +55,7 @@ public class Protocol1_11To1_10 extends BackwardsProtocol<ClientboundPackets1_9_
|
||||
soundRewriter.registerNamedSound(ClientboundPackets1_9_3.CUSTOM_SOUND);
|
||||
soundRewriter.registerSound(ClientboundPackets1_9_3.SOUND);
|
||||
|
||||
componentRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
componentRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
componentRewriter.registerComponentPacket(ClientboundPackets1_9_3.CHAT);
|
||||
}
|
||||
|
||||
@@ -85,7 +84,7 @@ public class Protocol1_11To1_10 extends BackwardsProtocol<ClientboundPackets1_9_
|
||||
return itemRewriter;
|
||||
}
|
||||
|
||||
public TranslatableRewriter<ClientboundPackets1_9_3> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_9_3> getComponentRewriter() {
|
||||
return componentRewriter;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -60,7 +60,7 @@ public class BlockItemPacketRewriter1_11 extends LegacyBlockItemRewriter<Clientb
|
||||
protocol.registerClientbound(ClientboundPackets1_9_3.CONTAINER_SET_SLOT, new PacketHandlers() {
|
||||
@Override
|
||||
public void register() {
|
||||
map(Types.UNSIGNED_BYTE); // 0 - Window ID
|
||||
map(Types.BYTE); // 0 - Window ID
|
||||
map(Types.SHORT); // 1 - Slot ID
|
||||
map(Types.ITEM1_8); // 2 - Slot Value
|
||||
|
||||
@@ -118,7 +118,7 @@ public class BlockItemPacketRewriter1_11 extends LegacyBlockItemRewriter<Clientb
|
||||
protocol.registerServerbound(ServerboundPackets1_9_3.CONTAINER_CLICK, new PacketHandlers() {
|
||||
@Override
|
||||
public void register() {
|
||||
map(Types.UNSIGNED_BYTE); // 0 - Window ID
|
||||
map(Types.BYTE); // 0 - Window ID
|
||||
map(Types.SHORT); // 1 - Slot
|
||||
map(Types.BYTE); // 2 - Button
|
||||
map(Types.SHORT); // 3 - Action number
|
||||
|
||||
+10
-11
@@ -30,7 +30,6 @@ import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_9;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_9;
|
||||
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ClientboundPackets1_9_3;
|
||||
import java.util.List;
|
||||
|
||||
@@ -104,17 +103,17 @@ public class EntityPacketRewriter1_11 extends LegacyEntityRewriter<ClientboundPa
|
||||
map(Types.SHORT); // 9 - Velocity X
|
||||
map(Types.SHORT); // 10 - Velocity Y
|
||||
map(Types.SHORT); // 11 - Velocity Z
|
||||
map(Types1_9.ENTITY_DATA_LIST); // 12 - Entity data
|
||||
map(Types.ENTITY_DATA_LIST1_9); // 12 - Entity data
|
||||
|
||||
// Track entity
|
||||
handler(getTrackerHandler(Types.UNSIGNED_BYTE, 0));
|
||||
|
||||
// Rewrite entity type / data
|
||||
handler(getMobSpawnRewriter(Types1_9.ENTITY_DATA_LIST));
|
||||
handler(getMobSpawnRewriter(Types.ENTITY_DATA_LIST1_9));
|
||||
|
||||
// Sub 1.11 clients will error if the list is empty
|
||||
handler(wrapper -> {
|
||||
List<EntityData> entityDataList = wrapper.get(Types1_9.ENTITY_DATA_LIST, 0);
|
||||
List<EntityData> entityDataList = wrapper.get(Types.ENTITY_DATA_LIST1_9, 0);
|
||||
if (entityDataList.isEmpty()) {
|
||||
entityDataList.add(new EntityData(0, EntityDataTypes1_9.BYTE, (byte) 0));
|
||||
}
|
||||
@@ -136,12 +135,12 @@ public class EntityPacketRewriter1_11 extends LegacyEntityRewriter<ClientboundPa
|
||||
map(Types.DOUBLE); // 4 - Z
|
||||
map(Types.BYTE); // 5 - Yaw
|
||||
map(Types.BYTE); // 6 - Pitch
|
||||
map(Types1_9.ENTITY_DATA_LIST); // 7 - Entity data list
|
||||
map(Types.ENTITY_DATA_LIST1_9); // 7 - Entity data list
|
||||
|
||||
handler(getTrackerAndDataHandler(Types1_9.ENTITY_DATA_LIST, EntityTypes1_11.EntityType.PLAYER));
|
||||
handler(getTrackerAndDataHandler(Types.ENTITY_DATA_LIST1_9, EntityTypes1_11.EntityType.PLAYER));
|
||||
handler(wrapper -> {
|
||||
// Sub 1.11 clients will cry if the list is empty
|
||||
List<EntityData> entityDataList = wrapper.get(Types1_9.ENTITY_DATA_LIST, 0);
|
||||
List<EntityData> entityDataList = wrapper.get(Types.ENTITY_DATA_LIST1_9, 0);
|
||||
if (entityDataList.isEmpty()) {
|
||||
entityDataList.add(new EntityData(0, EntityDataTypes1_9.BYTE, (byte) 0));
|
||||
}
|
||||
@@ -150,7 +149,7 @@ public class EntityPacketRewriter1_11 extends LegacyEntityRewriter<ClientboundPa
|
||||
});
|
||||
|
||||
registerRemoveEntities(ClientboundPackets1_9_3.REMOVE_ENTITIES);
|
||||
registerSetEntityData(ClientboundPackets1_9_3.SET_ENTITY_DATA, Types1_9.ENTITY_DATA_LIST);
|
||||
registerSetEntityData(ClientboundPackets1_9_3.SET_ENTITY_DATA, Types.ENTITY_DATA_LIST1_9);
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_9_3.ENTITY_EVENT, new PacketHandlers() {
|
||||
@Override
|
||||
@@ -364,11 +363,11 @@ public class EntityPacketRewriter1_11 extends LegacyEntityRewriter<ClientboundPa
|
||||
|
||||
@Override
|
||||
public EntityType typeFromId(int typeId) {
|
||||
return EntityTypes1_11.getTypeFromId(typeId, false);
|
||||
return EntityTypes1_11.EntityType.findById(typeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType objectTypeFromId(int typeId) {
|
||||
return EntityTypes1_11.getTypeFromId(typeId, true);
|
||||
public EntityType objectTypeFromId(int typeId, int data) {
|
||||
return EntityTypes1_11.ObjectType.getEntityType(typeId, data);
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -95,7 +95,7 @@ public class BlockItemPacketRewriter1_12 extends LegacyBlockItemRewriter<Clientb
|
||||
protocol.registerServerbound(ServerboundPackets1_9_3.CONTAINER_CLICK, new PacketHandlers() {
|
||||
@Override
|
||||
public void register() {
|
||||
map(Types.UNSIGNED_BYTE); // 0 - Window ID
|
||||
map(Types.BYTE); // 0 - Window ID
|
||||
map(Types.SHORT); // 1 - Slot
|
||||
map(Types.BYTE); // 2 - Button
|
||||
map(Types.SHORT); // 3 - Action number
|
||||
@@ -112,7 +112,7 @@ public class BlockItemPacketRewriter1_12 extends LegacyBlockItemRewriter<Clientb
|
||||
|
||||
// Apologize (may happen in some cases, maybe if inventory is full?)
|
||||
PacketWrapper confirm = wrapper.create(ServerboundPackets1_12.CONTAINER_ACK);
|
||||
confirm.write(Types.UNSIGNED_BYTE, wrapper.get(Types.UNSIGNED_BYTE, 0));
|
||||
confirm.write(Types.BYTE, wrapper.get(Types.BYTE, 0));
|
||||
confirm.write(Types.SHORT, wrapper.get(Types.SHORT, 1));
|
||||
confirm.write(Types.BOOLEAN, false); // Success - not used
|
||||
|
||||
|
||||
+4
-4
@@ -18,18 +18,18 @@
|
||||
|
||||
package com.viaversion.viabackwards.protocol.v1_12to1_11_1.rewriter;
|
||||
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_12to1_11_1.Protocol1_12To1_11_1;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||
import com.viaversion.viaversion.libs.gson.JsonObject;
|
||||
import com.viaversion.viaversion.protocols.v1_11_1to1_12.packet.ClientboundPackets1_12;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
|
||||
public class ComponentRewriter1_12 extends TranslatableRewriter<ClientboundPackets1_12> {
|
||||
public class ComponentRewriter1_12 extends JsonNBTComponentRewriter<ClientboundPackets1_12> {
|
||||
|
||||
public ComponentRewriter1_12(Protocol1_12To1_11_1 protocol) {
|
||||
super(protocol, ComponentRewriter.ReadType.JSON);
|
||||
super(protocol, ComponentRewriterBase.ReadType.JSON);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+9
-11
@@ -18,6 +18,7 @@
|
||||
|
||||
package com.viaversion.viabackwards.protocol.v1_12to1_11_1.rewriter;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.viabackwards.api.rewriters.LegacyEntityRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_12to1_11_1.Protocol1_12To1_11_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_12to1_11_1.storage.ParrotStorage;
|
||||
@@ -30,12 +31,9 @@ import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_12;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_9;
|
||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||
import com.viaversion.viaversion.protocols.v1_11_1to1_12.packet.ClientboundPackets1_12;
|
||||
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ClientboundPackets1_9_3;
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
|
||||
public class EntityPacketRewriter1_12 extends LegacyEntityRewriter<ClientboundPackets1_12, Protocol1_12To1_11_1> {
|
||||
|
||||
@@ -84,13 +82,13 @@ public class EntityPacketRewriter1_12 extends LegacyEntityRewriter<ClientboundPa
|
||||
map(Types.SHORT); // 9 - Velocity X
|
||||
map(Types.SHORT); // 10 - Velocity Y
|
||||
map(Types.SHORT); // 11 - Velocity Z
|
||||
map(Types1_12.ENTITY_DATA_LIST, Types1_9.ENTITY_DATA_LIST); // 12 - Entity data
|
||||
map(Types.ENTITY_DATA_LIST1_12, Types.ENTITY_DATA_LIST1_9); // 12 - Entity data
|
||||
|
||||
// Track entity
|
||||
handler(getTrackerHandler());
|
||||
|
||||
// Rewrite entity type / data
|
||||
handler(getMobSpawnRewriter1_11(Types1_9.ENTITY_DATA_LIST));
|
||||
handler(getMobSpawnRewriter1_11(Types.ENTITY_DATA_LIST1_9));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -106,9 +104,9 @@ public class EntityPacketRewriter1_12 extends LegacyEntityRewriter<ClientboundPa
|
||||
map(Types.DOUBLE); // 4 - Z
|
||||
map(Types.BYTE); // 5 - Yaw
|
||||
map(Types.BYTE); // 6 - Pitch
|
||||
map(Types1_12.ENTITY_DATA_LIST, Types1_9.ENTITY_DATA_LIST); // 7 - Entity data list
|
||||
map(Types.ENTITY_DATA_LIST1_12, Types.ENTITY_DATA_LIST1_9); // 7 - Entity data list
|
||||
|
||||
handler(getTrackerAndDataHandler(Types1_9.ENTITY_DATA_LIST, EntityTypes1_12.EntityType.PLAYER));
|
||||
handler(getTrackerAndDataHandler(Types.ENTITY_DATA_LIST1_9, EntityTypes1_12.EntityType.PLAYER));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -142,7 +140,7 @@ public class EntityPacketRewriter1_12 extends LegacyEntityRewriter<ClientboundPa
|
||||
|
||||
registerRespawn(ClientboundPackets1_12.RESPAWN);
|
||||
registerRemoveEntities(ClientboundPackets1_12.REMOVE_ENTITIES);
|
||||
registerSetEntityData(ClientboundPackets1_12.SET_ENTITY_DATA, Types1_12.ENTITY_DATA_LIST, Types1_9.ENTITY_DATA_LIST);
|
||||
registerSetEntityData(ClientboundPackets1_12.SET_ENTITY_DATA, Types.ENTITY_DATA_LIST1_12, Types.ENTITY_DATA_LIST1_9);
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_12.UPDATE_ATTRIBUTES, new PacketHandlers() {
|
||||
@Override
|
||||
@@ -285,11 +283,11 @@ public class EntityPacketRewriter1_12 extends LegacyEntityRewriter<ClientboundPa
|
||||
|
||||
@Override
|
||||
public EntityType typeFromId(int typeId) {
|
||||
return EntityTypes1_12.getTypeFromId(typeId, false);
|
||||
return EntityTypes1_12.EntityType.findById(typeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType objectTypeFromId(int typeId) {
|
||||
return EntityTypes1_12.getTypeFromId(typeId, true);
|
||||
public EntityType objectTypeFromId(int typeId, int data) {
|
||||
return EntityTypes1_12.ObjectType.getEntityType(typeId, data);
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.v1_13_1to1_13;
|
||||
import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_13_1to1_13.rewriter.CommandRewriter1_13_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_13_1to1_13.rewriter.EntityPacketRewriter1_13_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_13_1to1_13.rewriter.ItemPacketRewriter1_13_1;
|
||||
@@ -40,7 +40,7 @@ import com.viaversion.viaversion.libs.gson.JsonObject;
|
||||
import com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ClientboundPackets1_13;
|
||||
import com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ServerboundPackets1_13;
|
||||
import com.viaversion.viaversion.protocols.v1_13to1_13_1.Protocol1_13To1_13_1;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
@@ -52,7 +52,7 @@ public class Protocol1_13_1To1_13 extends BackwardsProtocol<ClientboundPackets1_
|
||||
private final EntityPacketRewriter1_13_1 entityRewriter = new EntityPacketRewriter1_13_1(this);
|
||||
private final ItemPacketRewriter1_13_1 itemRewriter = new ItemPacketRewriter1_13_1(this);
|
||||
private final ParticleRewriter<ClientboundPackets1_13> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_13> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_13> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
private final TagRewriter<ClientboundPackets1_13> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_13_1To1_13() {
|
||||
@@ -230,7 +230,7 @@ public class Protocol1_13_1To1_13 extends BackwardsProtocol<ClientboundPackets1_
|
||||
return particleRewriter;
|
||||
}
|
||||
|
||||
public TranslatableRewriter<ClientboundPackets1_13> translatableRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_13> translatableRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -55,14 +55,14 @@ public class EntityPacketRewriter1_13_1 extends LegacyEntityRewriter<Clientbound
|
||||
handler(wrapper -> {
|
||||
int entityId = wrapper.get(Types.VAR_INT, 0);
|
||||
byte type = wrapper.get(Types.BYTE, 0);
|
||||
EntityTypes1_13.EntityType entType = EntityTypes1_13.getTypeFromId(type, true);
|
||||
int data = wrapper.get(Types.INT, 0);
|
||||
EntityTypes1_13.EntityType entType = EntityTypes1_13.ObjectType.getEntityType(type, data);
|
||||
if (entType == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Rewrite falling block
|
||||
if (entType.is(EntityTypes1_13.EntityType.FALLING_BLOCK)) {
|
||||
int data = wrapper.get(Types.INT, 0);
|
||||
wrapper.set(Types.INT, 0, protocol.getMappingData().getNewBlockStateId(data));
|
||||
}
|
||||
|
||||
@@ -159,11 +159,11 @@ public class EntityPacketRewriter1_13_1 extends LegacyEntityRewriter<Clientbound
|
||||
|
||||
@Override
|
||||
public EntityType typeFromId(int typeId) {
|
||||
return EntityTypes1_13.getTypeFromId(typeId, false);
|
||||
return EntityTypes1_13.EntityType.findById(typeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType objectTypeFromId(int typeId) {
|
||||
return EntityTypes1_13.getTypeFromId(typeId, true);
|
||||
public EntityType objectTypeFromId(int typeId, int data) {
|
||||
return EntityTypes1_13.ObjectType.getEntityType(typeId, data);
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -30,7 +30,7 @@ public class ItemPacketRewriter1_13_2 {
|
||||
protocol.registerClientbound(ClientboundPackets1_13.CONTAINER_SET_SLOT, new PacketHandlers() {
|
||||
@Override
|
||||
public void register() {
|
||||
map(Types.UNSIGNED_BYTE); // 0 - Window ID
|
||||
map(Types.BYTE); // 0 - Window ID
|
||||
map(Types.SHORT); // 1 - Slot ID
|
||||
map(Types.ITEM1_13_2, Types.ITEM1_13); // 2 - Slot Value
|
||||
}
|
||||
@@ -117,7 +117,7 @@ public class ItemPacketRewriter1_13_2 {
|
||||
protocol.registerServerbound(ServerboundPackets1_13.CONTAINER_CLICK, new PacketHandlers() {
|
||||
@Override
|
||||
public void register() {
|
||||
map(Types.UNSIGNED_BYTE); // 0 - Window ID
|
||||
map(Types.BYTE); // 0 - Window ID
|
||||
map(Types.SHORT); // 1 - Slot
|
||||
map(Types.BYTE); // 2 - Button
|
||||
map(Types.SHORT); // 3 - Action number
|
||||
|
||||
+5
-5
@@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.v1_13to1_12_2;
|
||||
|
||||
import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_13to1_12_2.data.BackwardsMappingData1_13;
|
||||
import com.viaversion.viabackwards.protocol.v1_13to1_12_2.data.PaintingNames1_13;
|
||||
import com.viaversion.viabackwards.protocol.v1_13to1_12_2.provider.BackwardsBlockEntityProvider;
|
||||
@@ -45,7 +45,7 @@ import com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ServerboundPacke
|
||||
import com.viaversion.viaversion.protocols.v1_12to1_12_1.packet.ClientboundPackets1_12_1;
|
||||
import com.viaversion.viaversion.protocols.v1_12to1_12_1.packet.ServerboundPackets1_12_1;
|
||||
import com.viaversion.viaversion.protocols.v1_12_2to1_13.Protocol1_12_2To1_13;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.util.ComponentUtil;
|
||||
import com.viaversion.viaversion.util.ProtocolLogger;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
@@ -56,7 +56,7 @@ public class Protocol1_13To1_12_2 extends BackwardsProtocol<ClientboundPackets1_
|
||||
public static final ProtocolLogger LOGGER = new ProtocolLogger(Protocol1_13To1_12_2.class);
|
||||
private final EntityPacketRewriter1_13 entityRewriter = new EntityPacketRewriter1_13(this);
|
||||
private final BlockItemPacketRewriter1_13 blockItemPackets = new BlockItemPacketRewriter1_13(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_13> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON) {
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_13> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON) {
|
||||
@Override
|
||||
protected void handleTranslate(JsonObject root, String translate) {
|
||||
String mappedKey = mappedTranslationKey(translate);
|
||||
@@ -65,7 +65,7 @@ public class Protocol1_13To1_12_2 extends BackwardsProtocol<ClientboundPackets1_
|
||||
}
|
||||
}
|
||||
};
|
||||
private final TranslatableRewriter<ClientboundPackets1_13> translatableToLegacyRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON) {
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_13> translatableToLegacyRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON) {
|
||||
@Override
|
||||
protected void handleTranslate(JsonObject root, String translate) {
|
||||
String mappedKey = mappedTranslationKey(translate);
|
||||
@@ -148,7 +148,7 @@ public class Protocol1_13To1_12_2 extends BackwardsProtocol<ClientboundPackets1_
|
||||
}
|
||||
|
||||
// Don't override the parent method
|
||||
public TranslatableRewriter<ClientboundPackets1_13> translatableRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_13> translatableRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -270,7 +270,7 @@ public class BlockItemPacketRewriter1_13 extends BackwardsItemRewriter<Clientbou
|
||||
protocol.registerClientbound(ClientboundPackets1_13.CONTAINER_SET_SLOT, new PacketHandlers() {
|
||||
@Override
|
||||
public void register() {
|
||||
map(Types.UNSIGNED_BYTE);
|
||||
map(Types.BYTE);
|
||||
map(Types.SHORT);
|
||||
map(Types.ITEM1_13, Types.ITEM1_8);
|
||||
|
||||
@@ -464,7 +464,7 @@ public class BlockItemPacketRewriter1_13 extends BackwardsItemRewriter<Clientbou
|
||||
protocol.registerServerbound(ServerboundPackets1_12_1.CONTAINER_CLICK, new PacketHandlers() {
|
||||
@Override
|
||||
public void register() {
|
||||
map(Types.UNSIGNED_BYTE);
|
||||
map(Types.BYTE);
|
||||
map(Types.SHORT);
|
||||
map(Types.BYTE);
|
||||
map(Types.SHORT);
|
||||
|
||||
+13
-14
@@ -38,7 +38,6 @@ import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_12;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_13;
|
||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||
import com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ClientboundPackets1_13;
|
||||
@@ -90,14 +89,14 @@ public class EntityPacketRewriter1_13 extends LegacyEntityRewriter<ClientboundPa
|
||||
handler(getObjectTrackerHandler());
|
||||
|
||||
handler(wrapper -> {
|
||||
EntityTypes1_13.ObjectType type = EntityTypes1_13.ObjectType.findById(wrapper.get(Types.BYTE, 0));
|
||||
int id = wrapper.get(Types.BYTE, 0);
|
||||
int data = wrapper.get(Types.INT, 0);
|
||||
EntityTypes1_13.ObjectType type = EntityTypes1_13.ObjectType.findById(id, data);
|
||||
if (type == EntityTypes1_13.ObjectType.FALLING_BLOCK) {
|
||||
int blockState = wrapper.get(Types.INT, 0);
|
||||
int combined = Protocol1_13To1_12_2.MAPPINGS.getNewBlockStateId(blockState);
|
||||
int combined = Protocol1_13To1_12_2.MAPPINGS.getNewBlockStateId(data);
|
||||
combined = ((combined >> 4) & 0xFFF) | ((combined & 0xF) << 12);
|
||||
wrapper.set(Types.INT, 0, combined);
|
||||
} else if (type == EntityTypes1_13.ObjectType.ITEM_FRAME) {
|
||||
int data = wrapper.get(Types.INT, 0);
|
||||
data = switch (data) {
|
||||
case 3 -> 0;
|
||||
case 4 -> 1;
|
||||
@@ -130,11 +129,11 @@ public class EntityPacketRewriter1_13 extends LegacyEntityRewriter<ClientboundPa
|
||||
map(Types.SHORT);
|
||||
map(Types.SHORT);
|
||||
map(Types.SHORT);
|
||||
map(Types1_13.ENTITY_DATA_LIST, Types1_12.ENTITY_DATA_LIST);
|
||||
map(Types1_13.ENTITY_DATA_LIST, Types.ENTITY_DATA_LIST1_12);
|
||||
|
||||
handler(wrapper -> {
|
||||
int type = wrapper.get(Types.VAR_INT, 1);
|
||||
EntityType entityType = EntityTypes1_13.getTypeFromId(type, false);
|
||||
EntityType entityType = EntityTypes1_13.EntityType.findById(type);
|
||||
if (entityType == null) {
|
||||
return;
|
||||
}
|
||||
@@ -152,7 +151,7 @@ public class EntityPacketRewriter1_13 extends LegacyEntityRewriter<ClientboundPa
|
||||
});
|
||||
|
||||
// Rewrite entity type / ddata
|
||||
handler(getMobSpawnRewriter1_11(Types1_12.ENTITY_DATA_LIST));
|
||||
handler(getMobSpawnRewriter1_11(Types.ENTITY_DATA_LIST1_12));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -166,9 +165,9 @@ public class EntityPacketRewriter1_13 extends LegacyEntityRewriter<ClientboundPa
|
||||
map(Types.DOUBLE);
|
||||
map(Types.BYTE);
|
||||
map(Types.BYTE);
|
||||
map(Types1_13.ENTITY_DATA_LIST, Types1_12.ENTITY_DATA_LIST);
|
||||
map(Types1_13.ENTITY_DATA_LIST, Types.ENTITY_DATA_LIST1_12);
|
||||
|
||||
handler(getTrackerAndDataHandler(Types1_12.ENTITY_DATA_LIST, EntityTypes1_13.EntityType.PLAYER));
|
||||
handler(getTrackerAndDataHandler(Types.ENTITY_DATA_LIST1_12, EntityTypes1_13.EntityType.PLAYER));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -208,7 +207,7 @@ public class EntityPacketRewriter1_13 extends LegacyEntityRewriter<ClientboundPa
|
||||
});
|
||||
|
||||
registerRemoveEntities(ClientboundPackets1_13.REMOVE_ENTITIES);
|
||||
registerSetEntityData(ClientboundPackets1_13.SET_ENTITY_DATA, Types1_13.ENTITY_DATA_LIST, Types1_12.ENTITY_DATA_LIST);
|
||||
registerSetEntityData(ClientboundPackets1_13.SET_ENTITY_DATA, Types1_13.ENTITY_DATA_LIST, Types.ENTITY_DATA_LIST1_12);
|
||||
|
||||
// Face Player (new packet)
|
||||
protocol.registerClientbound(ClientboundPackets1_13.PLAYER_LOOK_AT, null, wrapper -> {
|
||||
@@ -358,12 +357,12 @@ public class EntityPacketRewriter1_13 extends LegacyEntityRewriter<ClientboundPa
|
||||
|
||||
@Override
|
||||
public EntityType typeFromId(int typeId) {
|
||||
return EntityTypes1_13.getTypeFromId(typeId, false);
|
||||
return EntityTypes1_13.EntityType.findById(typeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType objectTypeFromId(int typeId) {
|
||||
return EntityTypes1_13.getTypeFromId(typeId, true);
|
||||
public EntityType objectTypeFromId(int typeId, int data) {
|
||||
return EntityTypes1_13.ObjectType.getEntityType(typeId, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-6
@@ -150,12 +150,7 @@ public class PlayerPacketRewriter1_13 extends RewriterBase<Protocol1_13To1_12_2>
|
||||
if (action == 0) { // Add
|
||||
String name = packetWrapper.passthrough(Types.STRING);
|
||||
storage.usernames().put(uuid, name);
|
||||
int nProperties = packetWrapper.passthrough(Types.VAR_INT);
|
||||
for (int j = 0; j < nProperties; j++) {
|
||||
packetWrapper.passthrough(Types.STRING);
|
||||
packetWrapper.passthrough(Types.STRING);
|
||||
packetWrapper.passthrough(Types.OPTIONAL_STRING);
|
||||
}
|
||||
packetWrapper.passthrough(Types.PROFILE_PROPERTY_ARRAY);
|
||||
packetWrapper.passthrough(Types.VAR_INT);
|
||||
packetWrapper.passthrough(Types.VAR_INT);
|
||||
packetWrapper.passthrough(Types.OPTIONAL_COMPONENT);
|
||||
|
||||
+2
@@ -20,6 +20,7 @@ package com.viaversion.viabackwards.protocol.v1_14_1to1_14;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.protocol.v1_14_1to1_14.rewriter.EntityPacketRewriter1_14_1;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.ClientWorld;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_15;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ClientboundPackets1_14;
|
||||
@@ -41,6 +42,7 @@ public class Protocol1_14_1To1_14 extends BackwardsProtocol<ClientboundPackets1_
|
||||
@Override
|
||||
public void init(UserConnection user) {
|
||||
user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, EntityTypes1_15.PLAYER));
|
||||
user.addClientWorld(this.getClass(), new ClientWorld());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-2
@@ -23,7 +23,6 @@ import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_14;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Type;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_14;
|
||||
import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ClientboundPackets1_14;
|
||||
@@ -41,7 +40,8 @@ public class EntityPacketRewriter1_14_1 extends LegacyEntityRewriter<Clientbound
|
||||
registerTracker(ClientboundPackets1_14.ADD_GLOBAL_ENTITY, EntityTypes1_14.LIGHTNING_BOLT);
|
||||
registerTracker(ClientboundPackets1_14.ADD_PAINTING, EntityTypes1_14.PAINTING);
|
||||
registerTracker(ClientboundPackets1_14.ADD_PLAYER, EntityTypes1_14.PLAYER);
|
||||
registerTracker(ClientboundPackets1_14.LOGIN, EntityTypes1_14.PLAYER, Types.INT);
|
||||
registerJoinGame(ClientboundPackets1_14.LOGIN, EntityTypes1_14.PLAYER);
|
||||
registerRespawn(ClientboundPackets1_14.RESPAWN);
|
||||
registerRemoveEntities(ClientboundPackets1_14.REMOVE_ENTITIES);
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_14.ADD_ENTITY, new PacketHandlers() {
|
||||
|
||||
+6
-6
@@ -19,7 +19,8 @@ package com.viaversion.viabackwards.protocol.v1_14to1_13_2;
|
||||
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.data.BackwardsMappingData1_14;
|
||||
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.rewriter.BlockItemPacketRewriter1_14;
|
||||
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.rewriter.CommandRewriter1_14;
|
||||
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.rewriter.EntityPacketRewriter1_14;
|
||||
@@ -34,20 +35,19 @@ import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ClientboundPackets1_13;
|
||||
import com.viaversion.viaversion.protocols.v1_12_2to1_13.packet.ServerboundPackets1_13;
|
||||
import com.viaversion.viaversion.protocols.v1_13_2to1_14.Protocol1_13_2To1_14;
|
||||
import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ClientboundPackets1_14;
|
||||
import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ServerboundPackets1_14;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
|
||||
public class Protocol1_14To1_13_2 extends BackwardsProtocol<ClientboundPackets1_14, ClientboundPackets1_13, ServerboundPackets1_14, ServerboundPackets1_13> {
|
||||
|
||||
public static final BackwardsMappingData MAPPINGS = new BackwardsMappingData("1.14", "1.13.2", Protocol1_13_2To1_14.class);
|
||||
public static final BackwardsMappingData1_14 MAPPINGS = new BackwardsMappingData1_14();
|
||||
private final EntityPacketRewriter1_14 entityRewriter = new EntityPacketRewriter1_14(this);
|
||||
private final BlockItemPacketRewriter1_14 itemRewriter = new BlockItemPacketRewriter1_14(this);
|
||||
private final ParticleRewriter<ClientboundPackets1_14> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_14> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_14> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
|
||||
public Protocol1_14To1_13_2() {
|
||||
super(ClientboundPackets1_14.class, ClientboundPackets1_13.class, ServerboundPackets1_14.class, ServerboundPackets1_13.class);
|
||||
@@ -197,7 +197,7 @@ public class Protocol1_14To1_13_2 extends BackwardsProtocol<ClientboundPackets1_
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPackets1_14> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_14> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_14to1_13_2.data;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viaversion.protocols.v1_13_2to1_14.Protocol1_13_2To1_14;
|
||||
|
||||
public final class BackwardsMappingData1_14 extends BackwardsMappingData {
|
||||
|
||||
public BackwardsMappingData1_14() {
|
||||
super("1.14", "1.13.2", Protocol1_13_2To1_14.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadExtras(final CompoundTag data) {
|
||||
super.loadExtras(data);
|
||||
|
||||
if (ViaBackwards.getConfig().scaffoldingToWater()) {
|
||||
for (int i = 11099; i <= 11130; i++) {
|
||||
blockStateMappings.setNewId(i, 49);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -21,9 +21,9 @@ import com.google.common.collect.ImmutableSet;
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.viabackwards.api.data.TranslatableMappings;
|
||||
import com.viaversion.viabackwards.api.rewriters.BackwardsItemRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.EnchantmentRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.Protocol1_14To1_13_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.storage.ChunkLightStorage;
|
||||
import com.viaversion.viaversion.api.Via;
|
||||
@@ -479,7 +479,7 @@ public class BlockItemPacketRewriter1_14 extends BackwardsItemRewriter<Clientbou
|
||||
continue;
|
||||
}
|
||||
TextUtils.setTranslator(component, s -> Protocol1_12_2To1_13.MAPPINGS.getMojangTranslation().
|
||||
getOrDefault(s, TranslatableRewriter.getTranslatableMappings("1.14").get(s)));
|
||||
getOrDefault(s, TranslatableMappings.getTranslatableMappings("1.14").get(s)));
|
||||
loreEntry.setValue(component.asLegacyFormatString());
|
||||
}
|
||||
} catch (final JsonParseException e) {
|
||||
|
||||
+1
-1
@@ -138,7 +138,7 @@ public class EntityPacketRewriter1_14 extends LegacyEntityRewriter<ClientboundPa
|
||||
handler(wrapper -> {
|
||||
int id = wrapper.get(Types.BYTE, 0);
|
||||
int mappedId = newEntityId(id);
|
||||
EntityTypes1_13.EntityType entityType = EntityTypes1_13.getTypeFromId(mappedId, false);
|
||||
EntityTypes1_13.EntityType entityType = EntityTypes1_13.EntityType.findById(mappedId);
|
||||
if (entityType == null) {
|
||||
// Would be EntityType.PIG on a 1.14 client, but later discarded anyway since not an object type
|
||||
return;
|
||||
|
||||
+5
-5
@@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.v1_15to1_14_4;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_15to1_14_4.rewriter.BlockItemPacketRewriter1_15;
|
||||
import com.viaversion.viabackwards.protocol.v1_15to1_14_4.rewriter.EntityPacketRewriter1_15;
|
||||
import com.viaversion.viabackwards.protocol.v1_15to1_14_4.storage.ImmediateRespawnStorage;
|
||||
@@ -36,7 +36,7 @@ import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ServerboundPacke
|
||||
import com.viaversion.viaversion.protocols.v1_14_3to1_14_4.packet.ClientboundPackets1_14_4;
|
||||
import com.viaversion.viaversion.protocols.v1_14_4to1_15.Protocol1_14_4To1_15;
|
||||
import com.viaversion.viaversion.protocols.v1_14_4to1_15.packet.ClientboundPackets1_15;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
@@ -47,7 +47,7 @@ public class Protocol1_15To1_14_4 extends BackwardsProtocol<ClientboundPackets1_
|
||||
private final EntityPacketRewriter1_15 entityRewriter = new EntityPacketRewriter1_15(this);
|
||||
private final BlockItemPacketRewriter1_15 blockItemPackets = new BlockItemPacketRewriter1_15(this);
|
||||
private final ParticleRewriter<ClientboundPackets1_15> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_15> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_15> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
private final TagRewriter<ClientboundPackets1_15> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_15To1_14_4() {
|
||||
@@ -62,7 +62,7 @@ public class Protocol1_15To1_14_4 extends BackwardsProtocol<ClientboundPackets1_
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_15.CHAT);
|
||||
translatableRewriter.registerPlayerCombat(ClientboundPackets1_15.PLAYER_COMBAT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_15.DISCONNECT);
|
||||
translatableRewriter.registerOpenScreen(ClientboundPackets1_15.OPEN_SCREEN);
|
||||
translatableRewriter.registerOpenScreen1_14(ClientboundPackets1_15.OPEN_SCREEN);
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_15.TAB_LIST);
|
||||
translatableRewriter.registerTitle(ClientboundPackets1_15.SET_TITLES);
|
||||
translatableRewriter.registerPing();
|
||||
@@ -137,7 +137,7 @@ public class Protocol1_15To1_14_4 extends BackwardsProtocol<ClientboundPackets1_
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPackets1_15> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_15> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
}
|
||||
+1
@@ -106,6 +106,7 @@ public class EntityPacketRewriter1_15 extends EntityRewriter<ClientboundPackets1
|
||||
map(Types.INT); // 0 - Entity ID
|
||||
map(Types.UNSIGNED_BYTE); // 1 - Gamemode
|
||||
map(Types.INT); // 2 - Dimension
|
||||
handler(getDimensionHandler(1));
|
||||
|
||||
read(Types.LONG); // Seed
|
||||
|
||||
|
||||
+5
-5
@@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.v1_16_2to1_16_1;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_16_2to1_16_1.rewriter.BlockItemPacketRewriter1_16_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_16_2to1_16_1.rewriter.CommandRewriter1_16_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_16_2to1_16_1.rewriter.EntityPacketRewriter1_16_2;
|
||||
@@ -37,7 +37,7 @@ import com.viaversion.viaversion.protocols.v1_15_2to1_16.packet.ServerboundPacke
|
||||
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.Protocol1_16_1To1_16_2;
|
||||
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ClientboundPackets1_16_2;
|
||||
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ServerboundPackets1_16_2;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
@@ -50,7 +50,7 @@ public class Protocol1_16_2To1_16_1 extends BackwardsProtocol<ClientboundPackets
|
||||
private final EntityPacketRewriter1_16_2 entityRewriter = new EntityPacketRewriter1_16_2(this);
|
||||
private final BlockItemPacketRewriter1_16_2 blockItemPackets = new BlockItemPacketRewriter1_16_2(this);
|
||||
private final ParticleRewriter<ClientboundPackets1_16_2> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_16_2> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_16_2> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
private final TagRewriter<ClientboundPackets1_16_2> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_16_2To1_16_1() {
|
||||
@@ -66,7 +66,7 @@ public class Protocol1_16_2To1_16_1 extends BackwardsProtocol<ClientboundPackets
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_16_2.DISCONNECT);
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_16_2.TAB_LIST);
|
||||
translatableRewriter.registerTitle(ClientboundPackets1_16_2.SET_TITLES);
|
||||
translatableRewriter.registerOpenScreen(ClientboundPackets1_16_2.OPEN_SCREEN);
|
||||
translatableRewriter.registerOpenScreen1_14(ClientboundPackets1_16_2.OPEN_SCREEN);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
particleRewriter.registerLevelParticles1_13(ClientboundPackets1_16_2.LEVEL_PARTICLES, Types.DOUBLE);
|
||||
@@ -131,7 +131,7 @@ public class Protocol1_16_2To1_16_1 extends BackwardsProtocol<ClientboundPackets
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPackets1_16_2> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_16_2> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+10
-5
@@ -18,6 +18,10 @@
|
||||
package com.viaversion.viabackwards.protocol.v1_16_2to1_16_1.rewriter;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
import com.viaversion.nbt.tag.NumberTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.api.rewriters.EntityRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_16_2to1_16_1.Protocol1_16_2To1_16_1;
|
||||
@@ -29,10 +33,6 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_16;
|
||||
import com.viaversion.viaversion.protocols.v1_15_2to1_16.data.DimensionRegistries1_16;
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
import com.viaversion.nbt.tag.NumberTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ClientboundPackets1_16_2;
|
||||
import com.viaversion.viaversion.util.Key;
|
||||
import com.viaversion.viaversion.util.TagUtil;
|
||||
@@ -95,6 +95,10 @@ public class EntityPacketRewriter1_16_2 extends EntityRewriter<ClientboundPacket
|
||||
wrapper.write(Types.STRING, getDimensionFromData(dimensionData));
|
||||
});
|
||||
map(Types.STRING); // Dimension
|
||||
handler(wrapper -> {
|
||||
final String world = wrapper.get(Types.STRING, 1);
|
||||
trackWorld(wrapper.user(), world);
|
||||
});
|
||||
map(Types.LONG); // Seed
|
||||
handler(wrapper -> {
|
||||
int maxPlayers = wrapper.read(Types.VAR_INT);
|
||||
@@ -109,7 +113,8 @@ public class EntityPacketRewriter1_16_2 extends EntityRewriter<ClientboundPacket
|
||||
CompoundTag dimensionData = wrapper.read(Types.NAMED_COMPOUND_TAG);
|
||||
wrapper.write(Types.STRING, getDimensionFromData(dimensionData));
|
||||
|
||||
tracker(wrapper.user()).clearEntities();
|
||||
final String world = wrapper.passthrough(Types.STRING);
|
||||
trackWorld(wrapper.user(), world);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+1
-6
@@ -230,12 +230,7 @@ public class EntityPacketRewriter1_16 extends EntityRewriter<ClientboundPackets1
|
||||
wrapper.passthrough(Types.UUID);
|
||||
if (action == 0) { // Add
|
||||
wrapper.passthrough(Types.STRING);
|
||||
int properties = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int j = 0; j < properties; j++) {
|
||||
wrapper.passthrough(Types.STRING);
|
||||
wrapper.passthrough(Types.STRING);
|
||||
wrapper.passthrough(Types.OPTIONAL_STRING);
|
||||
}
|
||||
wrapper.passthrough(Types.PROFILE_PROPERTY_ARRAY);
|
||||
wrapper.passthrough(Types.VAR_INT);
|
||||
wrapper.passthrough(Types.VAR_INT);
|
||||
// Display Name
|
||||
|
||||
+10
-2
@@ -17,7 +17,7 @@
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_16to1_15_2.rewriter;
|
||||
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_16to1_15_2.Protocol1_16To1_15_2;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||
@@ -27,7 +27,7 @@ import com.viaversion.viaversion.protocols.v1_15_2to1_16.packet.ClientboundPacke
|
||||
import com.viaversion.viaversion.util.ComponentUtil;
|
||||
import com.viaversion.viaversion.util.SerializerVersion;
|
||||
|
||||
public class TranslatableRewriter1_16 extends TranslatableRewriter<ClientboundPackets1_16> {
|
||||
public class TranslatableRewriter1_16 extends JsonNBTComponentRewriter<ClientboundPackets1_16> {
|
||||
|
||||
private static final ChatColor[] COLORS = {
|
||||
new ChatColor("black", 0x000000),
|
||||
@@ -70,6 +70,14 @@ public class TranslatableRewriter1_16 extends TranslatableRewriter<ClientboundPa
|
||||
}
|
||||
}
|
||||
|
||||
JsonObject clickEvent = object.getAsJsonObject("clickEvent");
|
||||
if (clickEvent != null && clickEvent.has("action")) {
|
||||
String action = clickEvent.get("action").getAsString();
|
||||
if (action.equals("copy_to_clipboard")) {
|
||||
clickEvent.addProperty("action", "suggest_command");
|
||||
}
|
||||
}
|
||||
|
||||
JsonObject hoverEvent = object.getAsJsonObject("hoverEvent");
|
||||
if (hoverEvent == null || !hoverEvent.has("contents")) {
|
||||
return;
|
||||
|
||||
+3
-3
@@ -61,7 +61,7 @@ public final class Protocol1_17_1To1_17 extends BackwardsProtocol<ClientboundPac
|
||||
wrapper.user().get(InventoryStateIds.class).removeStateId(containerId);
|
||||
});
|
||||
registerClientbound(ClientboundPackets1_17_1.CONTAINER_SET_SLOT, wrapper -> {
|
||||
short containerId = wrapper.passthrough(Types.UNSIGNED_BYTE);
|
||||
byte containerId = wrapper.passthrough(Types.BYTE);
|
||||
int stateId = wrapper.read(Types.VAR_INT);
|
||||
wrapper.user().get(InventoryStateIds.class).setStateId(containerId, stateId);
|
||||
});
|
||||
@@ -88,11 +88,11 @@ public final class Protocol1_17_1To1_17 extends BackwardsProtocol<ClientboundPac
|
||||
});
|
||||
|
||||
registerServerbound(ServerboundPackets1_17.CONTAINER_CLOSE, wrapper -> {
|
||||
short containerId = wrapper.passthrough(Types.UNSIGNED_BYTE);
|
||||
byte containerId = wrapper.passthrough(Types.BYTE);
|
||||
wrapper.user().get(InventoryStateIds.class).removeStateId(containerId);
|
||||
});
|
||||
registerServerbound(ServerboundPackets1_17.CONTAINER_CLICK, wrapper -> {
|
||||
short containerId = wrapper.passthrough(Types.UNSIGNED_BYTE);
|
||||
byte containerId = wrapper.passthrough(Types.BYTE);
|
||||
int stateId = wrapper.user().get(InventoryStateIds.class).removeStateId(containerId);
|
||||
wrapper.write(Types.VAR_INT, stateId == Integer.MAX_VALUE ? 0 : stateId);
|
||||
});
|
||||
|
||||
+2
-3
@@ -25,15 +25,14 @@ public final class InventoryStateIds implements StorableObject {
|
||||
private final Int2IntMap ids = new Int2IntOpenHashMap();
|
||||
|
||||
public InventoryStateIds() {
|
||||
// Inventory ids are unsigned bytes, so this is safe to do
|
||||
ids.defaultReturnValue(Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
public void setStateId(short containerId, int id) {
|
||||
public void setStateId(int containerId, int id) {
|
||||
ids.put(containerId, id);
|
||||
}
|
||||
|
||||
public int removeStateId(short containerId) {
|
||||
public int removeStateId(int containerId) {
|
||||
return ids.remove(containerId);
|
||||
}
|
||||
}
|
||||
+5
-5
@@ -21,7 +21,7 @@ import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_17to1_16_4.rewriter.BlockItemPacketRewriter1_17;
|
||||
import com.viaversion.viabackwards.protocol.v1_17to1_16_4.rewriter.EntityPacketRewriter1_17;
|
||||
import com.viaversion.viabackwards.protocol.v1_17to1_16_4.storage.PlayerLastCursorItem;
|
||||
@@ -40,7 +40,7 @@ import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ServerboundPac
|
||||
import com.viaversion.viaversion.protocols.v1_16_4to1_17.Protocol1_16_4To1_17;
|
||||
import com.viaversion.viaversion.protocols.v1_16_4to1_17.packet.ClientboundPackets1_17;
|
||||
import com.viaversion.viaversion.protocols.v1_16_4to1_17.packet.ServerboundPackets1_17;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.rewriter.IdRewriteFunction;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
@@ -59,7 +59,7 @@ public final class Protocol1_17To1_16_4 extends BackwardsProtocol<ClientboundPac
|
||||
private final EntityPacketRewriter1_17 entityRewriter = new EntityPacketRewriter1_17(this);
|
||||
private final BlockItemPacketRewriter1_17 blockItemPackets = new BlockItemPacketRewriter1_17(this);
|
||||
private final ParticleRewriter<ClientboundPackets1_17> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_17> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_17> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
private final TagRewriter<ClientboundPackets1_17> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_17To1_16_4() {
|
||||
@@ -74,7 +74,7 @@ public final class Protocol1_17To1_16_4 extends BackwardsProtocol<ClientboundPac
|
||||
translatableRewriter.registerBossEvent(ClientboundPackets1_17.BOSS_EVENT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_17.DISCONNECT);
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_17.TAB_LIST);
|
||||
translatableRewriter.registerOpenScreen(ClientboundPackets1_17.OPEN_SCREEN);
|
||||
translatableRewriter.registerOpenScreen1_14(ClientboundPackets1_17.OPEN_SCREEN);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
SoundRewriter<ClientboundPackets1_17> soundRewriter = new SoundRewriter<>(this);
|
||||
@@ -229,7 +229,7 @@ public final class Protocol1_17To1_16_4 extends BackwardsProtocol<ClientboundPac
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPackets1_17> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_17> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+10
-7
@@ -90,7 +90,7 @@ public final class BlockItemPacketRewriter1_17 extends BackwardsItemRewriter<Cli
|
||||
protocol.registerServerbound(ServerboundPackets1_16_2.CONTAINER_CLICK, new PacketHandlers() {
|
||||
@Override
|
||||
public void register() {
|
||||
map(Types.UNSIGNED_BYTE);
|
||||
map(Types.BYTE);
|
||||
handler(wrapper -> {
|
||||
short slot = wrapper.passthrough(Types.SHORT); // Slot
|
||||
byte button = wrapper.passthrough(Types.BYTE); // Button
|
||||
@@ -138,7 +138,7 @@ public final class BlockItemPacketRewriter1_17 extends BackwardsItemRewriter<Cli
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_17.CONTAINER_SET_SLOT, wrapper -> {
|
||||
short windowId = wrapper.passthrough(Types.UNSIGNED_BYTE);
|
||||
byte windowId = wrapper.passthrough(Types.BYTE);
|
||||
short slot = wrapper.passthrough(Types.SHORT);
|
||||
|
||||
Item carried = wrapper.read(Types.ITEM1_13_2);
|
||||
@@ -163,7 +163,7 @@ public final class BlockItemPacketRewriter1_17 extends BackwardsItemRewriter<Cli
|
||||
}
|
||||
|
||||
// Handle ping packet replacement
|
||||
short inventoryId = wrapper.read(Types.UNSIGNED_BYTE);
|
||||
byte inventoryId = wrapper.read(Types.BYTE);
|
||||
short confirmationId = wrapper.read(Types.SHORT);
|
||||
boolean accepted = wrapper.read(Types.BOOLEAN);
|
||||
if (inventoryId == 0 && accepted) {
|
||||
@@ -422,12 +422,15 @@ public final class BlockItemPacketRewriter1_17 extends BackwardsItemRewriter<Cli
|
||||
handler(wrapper -> wrapper.write(Types.BOOLEAN, true)); // Tracking position
|
||||
map(Types.BOOLEAN); // Locked
|
||||
handler(wrapper -> {
|
||||
boolean hasMarkers = wrapper.read(Types.BOOLEAN);
|
||||
if (!hasMarkers) {
|
||||
wrapper.write(Types.VAR_INT, 0); // Array size
|
||||
final int iconCount;
|
||||
final boolean hasMarkers = wrapper.read(Types.BOOLEAN);
|
||||
if (hasMarkers) {
|
||||
iconCount = wrapper.passthrough(Types.VAR_INT);
|
||||
} else {
|
||||
MapColorRewriter.getRewriteHandler(MapColorMappings1_16_4::getMappedColor).handle(wrapper);
|
||||
wrapper.write(Types.VAR_INT, 0); // Add icon count
|
||||
iconCount = 0;
|
||||
}
|
||||
MapColorRewriter.rewriteMapColors(wrapper, MapColorMappings1_16_4::getMappedColor, iconCount);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
+2
@@ -214,6 +214,8 @@ public final class EntityPacketRewriter1_17 extends EntityRewriter<ClientboundPa
|
||||
|
||||
filter().type(EntityTypes1_17.SHULKER).addIndex(17); // TODO Handle attachment pos?
|
||||
|
||||
registerBlockStateHandler(EntityTypes1_17.ABSTRACT_MINECART, 11);
|
||||
|
||||
filter().removeIndex(7); // Ticks frozen
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -19,7 +19,7 @@ package com.viaversion.viabackwards.protocol.v1_18to1_17_1;
|
||||
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_18to1_17_1.data.BackwardsMappingData1_18;
|
||||
import com.viaversion.viabackwards.protocol.v1_18to1_17_1.rewriter.BlockItemPacketRewriter1_18;
|
||||
import com.viaversion.viabackwards.protocol.v1_18to1_17_1.rewriter.EntityPacketRewriter1_18;
|
||||
@@ -33,7 +33,7 @@ import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.protocols.v1_16_4to1_17.packet.ServerboundPackets1_17;
|
||||
import com.viaversion.viaversion.protocols.v1_17_1to1_18.packet.ClientboundPackets1_18;
|
||||
import com.viaversion.viaversion.protocols.v1_17to1_17_1.packet.ClientboundPackets1_17_1;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
|
||||
@@ -43,7 +43,7 @@ public final class Protocol1_18To1_17_1 extends BackwardsProtocol<ClientboundPac
|
||||
private final EntityPacketRewriter1_18 entityRewriter = new EntityPacketRewriter1_18(this);
|
||||
private final BlockItemPacketRewriter1_18 itemRewriter = new BlockItemPacketRewriter1_18(this);
|
||||
private final ParticleRewriter<ClientboundPackets1_18> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_18> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_18> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
private final TagRewriter<ClientboundPackets1_18> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_18To1_17_1() {
|
||||
@@ -61,7 +61,7 @@ public final class Protocol1_18To1_17_1 extends BackwardsProtocol<ClientboundPac
|
||||
translatableRewriter.registerBossEvent(ClientboundPackets1_18.BOSS_EVENT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_18.DISCONNECT);
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_18.TAB_LIST);
|
||||
translatableRewriter.registerOpenScreen(ClientboundPackets1_18.OPEN_SCREEN);
|
||||
translatableRewriter.registerOpenScreen1_14(ClientboundPackets1_18.OPEN_SCREEN);
|
||||
translatableRewriter.registerPlayerCombatKill(ClientboundPackets1_18.PLAYER_COMBAT_KILL);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
@@ -158,7 +158,7 @@ public final class Protocol1_18To1_17_1 extends BackwardsProtocol<ClientboundPac
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPackets1_18> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_18> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+5
-7
@@ -17,9 +17,8 @@
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_19_1to1_19;
|
||||
|
||||
import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_1to1_19.rewriter.EntityPacketRewriter1_19_1;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_1to1_19.storage.ChatRegistryStorage;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_1to1_19.storage.ChatRegistryStorage1_19_1;
|
||||
@@ -38,7 +37,6 @@ import com.viaversion.viaversion.api.protocol.Protocol;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Type;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||
@@ -53,7 +51,7 @@ import com.viaversion.viaversion.protocols.v1_19to1_19_1.Protocol1_19To1_19_1;
|
||||
import com.viaversion.viaversion.protocols.v1_19to1_19_1.packet.ClientboundPackets1_19_1;
|
||||
import com.viaversion.viaversion.protocols.v1_19to1_19_1.packet.ServerboundPackets1_19_1;
|
||||
import com.viaversion.viaversion.protocols.v1_18_2to1_19.Protocol1_18_2To1_19;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.util.CipherUtil;
|
||||
import com.viaversion.viaversion.util.ComponentUtil;
|
||||
import com.viaversion.viaversion.util.Pair;
|
||||
@@ -70,7 +68,7 @@ public final class Protocol1_19_1To1_19 extends BackwardsProtocol<ClientboundPac
|
||||
private static final UUID ZERO_UUID = new UUID(0, 0);
|
||||
private static final byte[] EMPTY_BYTES = new byte[0];
|
||||
private final EntityPacketRewriter1_19_1 entityRewriter = new EntityPacketRewriter1_19_1(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_19_1> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_19_1> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
|
||||
public Protocol1_19_1To1_19() {
|
||||
super(ClientboundPackets1_19_1.class, ClientboundPackets1_19.class, ServerboundPackets1_19_1.class, ServerboundPackets1_19.class);
|
||||
@@ -84,7 +82,7 @@ public final class Protocol1_19_1To1_19 extends BackwardsProtocol<ClientboundPac
|
||||
translatableRewriter.registerBossEvent(ClientboundPackets1_19_1.BOSS_EVENT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_19_1.DISCONNECT);
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_19_1.TAB_LIST);
|
||||
translatableRewriter.registerOpenScreen(ClientboundPackets1_19_1.OPEN_SCREEN);
|
||||
translatableRewriter.registerOpenScreen1_14(ClientboundPackets1_19_1.OPEN_SCREEN);
|
||||
translatableRewriter.registerPlayerCombatKill(ClientboundPackets1_19_1.PLAYER_COMBAT_KILL);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
@@ -395,7 +393,7 @@ public final class Protocol1_19_1To1_19 extends BackwardsProtocol<ClientboundPac
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPackets1_19_1> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_19_1> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.v1_19_3to1_19_1;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_1to1_19.Protocol1_19_1To1_19;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_3to1_19_1.data.BackwardsMappingData1_19_3;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_3to1_19_1.rewriter.BlockItemPacketRewriter1_19_3;
|
||||
@@ -54,7 +54,7 @@ import com.viaversion.viaversion.protocols.v1_19_1to1_19_3.packet.ServerboundPac
|
||||
import com.viaversion.viaversion.protocols.v1_19to1_19_1.packet.ClientboundPackets1_19_1;
|
||||
import com.viaversion.viaversion.protocols.v1_19to1_19_1.packet.ServerboundPackets1_19_1;
|
||||
import com.viaversion.viaversion.rewriter.CommandRewriter;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
@@ -74,7 +74,7 @@ public final class Protocol1_19_3To1_19_1 extends BackwardsProtocol<ClientboundP
|
||||
private final EntityPacketRewriter1_19_3 entityRewriter = new EntityPacketRewriter1_19_3(this);
|
||||
private final BlockItemPacketRewriter1_19_3 itemRewriter = new BlockItemPacketRewriter1_19_3(this);
|
||||
private final ParticleRewriter<ClientboundPackets1_19_3> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_19_3> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_19_3> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
private final TagRewriter<ClientboundPackets1_19_3> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_19_3To1_19_1() {
|
||||
@@ -92,7 +92,7 @@ public final class Protocol1_19_3To1_19_1 extends BackwardsProtocol<ClientboundP
|
||||
translatableRewriter.registerBossEvent(ClientboundPackets1_19_3.BOSS_EVENT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_19_3.DISCONNECT);
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_19_3.TAB_LIST);
|
||||
translatableRewriter.registerOpenScreen(ClientboundPackets1_19_3.OPEN_SCREEN);
|
||||
translatableRewriter.registerOpenScreen1_14(ClientboundPackets1_19_3.OPEN_SCREEN);
|
||||
translatableRewriter.registerPlayerCombatKill(ClientboundPackets1_19_3.PLAYER_COMBAT_KILL);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
@@ -406,7 +406,7 @@ public final class Protocol1_19_3To1_19_1 extends BackwardsProtocol<ClientboundP
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPackets1_19_3> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_19_3> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+1
-8
@@ -131,14 +131,7 @@ public final class EntityPacketRewriter1_19_3 extends EntityRewriter<Clientbound
|
||||
for (int i = 0; i < entries; i++) {
|
||||
playerInfoPacket.write(Types.UUID, wrapper.read(Types.UUID));
|
||||
playerInfoPacket.write(Types.STRING, wrapper.read(Types.STRING)); // Player Name
|
||||
|
||||
final int properties = wrapper.read(Types.VAR_INT);
|
||||
playerInfoPacket.write(Types.VAR_INT, properties);
|
||||
for (int j = 0; j < properties; j++) {
|
||||
playerInfoPacket.write(Types.STRING, wrapper.read(Types.STRING)); // Name
|
||||
playerInfoPacket.write(Types.STRING, wrapper.read(Types.STRING)); // Value
|
||||
playerInfoPacket.write(Types.OPTIONAL_STRING, wrapper.read(Types.OPTIONAL_STRING)); // Signature
|
||||
}
|
||||
playerInfoPacket.write(Types.PROFILE_PROPERTY_ARRAY, wrapper.read(Types.PROFILE_PROPERTY_ARRAY));
|
||||
|
||||
// Now check for the other parts individually and add dummy values if not present
|
||||
final ProfileKey profileKey;
|
||||
|
||||
+4
-4
@@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.v1_19_4to1_19_3;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_4to1_19_3.rewriter.BlockItemPacketRewriter1_19_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_4to1_19_3.rewriter.EntityPacketRewriter1_19_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_4to1_19_3.storage.EntityTracker1_19_4;
|
||||
@@ -34,7 +34,7 @@ import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.Protocol1_19_3To1_19_
|
||||
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.packet.ClientboundPackets1_19_4;
|
||||
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.packet.ServerboundPackets1_19_4;
|
||||
import com.viaversion.viaversion.rewriter.CommandRewriter;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
@@ -47,7 +47,7 @@ public final class Protocol1_19_4To1_19_3 extends BackwardsProtocol<ClientboundP
|
||||
private final EntityPacketRewriter1_19_4 entityRewriter = new EntityPacketRewriter1_19_4(this);
|
||||
private final BlockItemPacketRewriter1_19_4 itemRewriter = new BlockItemPacketRewriter1_19_4(this);
|
||||
private final ParticleRewriter<ClientboundPackets1_19_4> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_19_4> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_19_4> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
private final TagRewriter<ClientboundPackets1_19_4> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_19_4To1_19_3() {
|
||||
@@ -137,7 +137,7 @@ public final class Protocol1_19_4To1_19_3 extends BackwardsProtocol<ClientboundP
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPackets1_19_4> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_19_4> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+9
@@ -20,6 +20,7 @@ package com.viaversion.viabackwards.protocol.v1_19_4to1_19_3.rewriter;
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
import com.viaversion.nbt.tag.NumberTag;
|
||||
import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.api.entities.storage.EntityPositionHandler;
|
||||
import com.viaversion.viabackwards.api.entities.storage.EntityReplacement;
|
||||
import com.viaversion.viabackwards.api.rewriters.EntityRewriter;
|
||||
@@ -70,6 +71,13 @@ public final class EntityPacketRewriter1_19_4 extends EntityRewriter<Clientbound
|
||||
final int entityId = wrapper.get(Types.VAR_INT, 0);
|
||||
final int entityType = wrapper.get(Types.VAR_INT, 1);
|
||||
|
||||
if (!ViaBackwards.getConfig().mapDisplayEntities()) {
|
||||
if (entityType == EntityTypes1_19_4.BLOCK_DISPLAY.getId() || entityType == EntityTypes1_19_4.ITEM_DISPLAY.getId() || entityType == EntityTypes1_19_4.TEXT_DISPLAY.getId()) {
|
||||
wrapper.cancel();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// First track (and remap) entity, then put storage for block display entity
|
||||
getSpawnTrackerWithDataHandler1_19(EntityTypes1_19_4.FALLING_BLOCK).handle(wrapper);
|
||||
if (entityType != EntityTypes1_19_4.BLOCK_DISPLAY.getId()) {
|
||||
@@ -220,6 +228,7 @@ public final class EntityPacketRewriter1_19_4 extends EntityRewriter<Clientbound
|
||||
filter().handler((event, data) -> {
|
||||
int id = data.dataType().typeId();
|
||||
if (id >= 25) { // Sniffer state, Vector3f, Quaternion types
|
||||
event.cancel();
|
||||
return;
|
||||
} else if (id >= 15) { // Optional block state - just map down to block state
|
||||
id--;
|
||||
|
||||
+6
-13
@@ -21,7 +21,7 @@ import com.google.common.primitives.Longs;
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_19_1to1_19.Protocol1_19_1To1_19;
|
||||
import com.viaversion.viabackwards.protocol.v1_19to1_18_2.data.BackwardsMappingData1_19;
|
||||
import com.viaversion.viabackwards.protocol.v1_19to1_18_2.rewriter.BlockItemPacketRewriter1_19;
|
||||
@@ -50,7 +50,7 @@ import com.viaversion.viaversion.protocols.v1_18_2to1_19.packet.ServerboundPacke
|
||||
import com.viaversion.viaversion.protocols.v1_19to1_19_1.Protocol1_19To1_19_1;
|
||||
import com.viaversion.viaversion.protocols.v1_19to1_19_1.data.ChatDecorationResult;
|
||||
import com.viaversion.viaversion.rewriter.CommandRewriter;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
@@ -69,7 +69,7 @@ public final class Protocol1_19To1_18_2 extends BackwardsProtocol<ClientboundPac
|
||||
private final EntityPacketRewriter1_19 entityRewriter = new EntityPacketRewriter1_19(this);
|
||||
private final BlockItemPacketRewriter1_19 blockItemPackets = new BlockItemPacketRewriter1_19(this);
|
||||
private final ParticleRewriter<ClientboundPackets1_19> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPackets1_19> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_19> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
private final TagRewriter<ClientboundPackets1_19> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_19To1_18_2() {
|
||||
@@ -86,7 +86,7 @@ public final class Protocol1_19To1_18_2 extends BackwardsProtocol<ClientboundPac
|
||||
translatableRewriter.registerBossEvent(ClientboundPackets1_19.BOSS_EVENT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_19.DISCONNECT);
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_19.TAB_LIST);
|
||||
translatableRewriter.registerOpenScreen(ClientboundPackets1_19.OPEN_SCREEN);
|
||||
translatableRewriter.registerOpenScreen1_14(ClientboundPackets1_19.OPEN_SCREEN);
|
||||
translatableRewriter.registerPlayerCombatKill(ClientboundPackets1_19.PLAYER_COMBAT_KILL);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
@@ -296,14 +296,7 @@ public final class Protocol1_19To1_18_2 extends BackwardsProtocol<ClientboundPac
|
||||
public void register() {
|
||||
map(Types.UUID); // UUID
|
||||
map(Types.STRING); // Name
|
||||
handler(wrapper -> {
|
||||
final int properties = wrapper.read(Types.VAR_INT);
|
||||
for (int i = 0; i < properties; i++) {
|
||||
wrapper.read(Types.STRING); // Name
|
||||
wrapper.read(Types.STRING); // Value
|
||||
wrapper.read(Types.OPTIONAL_STRING); // Optional signature
|
||||
}
|
||||
});
|
||||
read(Types.PROFILE_PROPERTY_ARRAY);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -372,7 +365,7 @@ public final class Protocol1_19To1_18_2 extends BackwardsProtocol<ClientboundPac
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPackets1_19> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_19> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+7
-17
@@ -17,21 +17,19 @@
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_19to1_18_2.data;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
import com.viaversion.nbt.tag.NumberTag;
|
||||
import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingDataLoader;
|
||||
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
|
||||
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
import com.viaversion.nbt.tag.NumberTag;
|
||||
import com.viaversion.viaversion.protocols.v1_18_2to1_19.Protocol1_18_2To1_19;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class BackwardsMappingData1_19 extends BackwardsMappingData {
|
||||
|
||||
private final boolean sculkShriekerToCryingObsidian = ViaBackwards.getConfig().sculkShriekerToCryingObsidian();
|
||||
|
||||
private final Int2ObjectMap<CompoundTag> defaultChatTypes = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
public BackwardsMappingData1_19() {
|
||||
@@ -40,15 +38,15 @@ public final class BackwardsMappingData1_19 extends BackwardsMappingData {
|
||||
|
||||
@Override
|
||||
protected void loadExtras(final CompoundTag data) {
|
||||
super.loadExtras(data);
|
||||
|
||||
if (sculkShriekerToCryingObsidian) {
|
||||
blockMappings.setNewId(850, 750);
|
||||
if (ViaBackwards.getConfig().sculkShriekerToCryingObsidian()) {
|
||||
for (int i = 18900; i <= 18907; i++) {
|
||||
blockStateMappings.setNewId(i, 16082);
|
||||
}
|
||||
itemMappings.setNewId(329, 1065);
|
||||
}
|
||||
|
||||
super.loadExtras(data);
|
||||
|
||||
final ListTag<CompoundTag> chatTypes = BackwardsMappingDataLoader.INSTANCE.loadNBT("chat-types-1.19.1.nbt").getListTag("values", CompoundTag.class);
|
||||
for (final CompoundTag chatType : chatTypes) {
|
||||
final NumberTag idTag = chatType.getNumberTag("id");
|
||||
@@ -56,14 +54,6 @@ public final class BackwardsMappingData1_19 extends BackwardsMappingData {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNewItemId(final int id) {
|
||||
if (sculkShriekerToCryingObsidian && id == 329) {
|
||||
return 1065;
|
||||
}
|
||||
return super.getNewItemId(id);
|
||||
}
|
||||
|
||||
public @Nullable CompoundTag chatType(final int id) {
|
||||
return defaultChatTypes.get(id);
|
||||
}
|
||||
|
||||
+2
-9
@@ -190,7 +190,7 @@ public final class EntityPacketRewriter1_19 extends EntityRewriter<ClientboundPa
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
throw new IllegalStateException("Could not find dimension " + dimensionKey + " in dimension registry");
|
||||
throw new IllegalArgumentException("Could not find dimension " + dimensionKey + " in dimension registry");
|
||||
}
|
||||
|
||||
// Add biome category and track biomes
|
||||
@@ -268,14 +268,7 @@ public final class EntityPacketRewriter1_19 extends EntityRewriter<ClientboundPa
|
||||
wrapper.passthrough(Types.UUID); // UUID
|
||||
if (action == 0) { // Add player
|
||||
wrapper.passthrough(Types.STRING); // Player Name
|
||||
|
||||
final int properties = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int j = 0; j < properties; j++) {
|
||||
wrapper.passthrough(Types.STRING); // Name
|
||||
wrapper.passthrough(Types.STRING); // Value
|
||||
wrapper.passthrough(Types.OPTIONAL_STRING); // Signature
|
||||
}
|
||||
|
||||
wrapper.passthrough(Types.PROFILE_PROPERTY_ARRAY);
|
||||
wrapper.passthrough(Types.VAR_INT); // Gamemode
|
||||
wrapper.passthrough(Types.VAR_INT); // Ping
|
||||
wrapper.passthrough(Types.OPTIONAL_COMPONENT); // Display name
|
||||
|
||||
+1
-1
@@ -198,7 +198,7 @@ public final class EntityPacketRewriter1_20_2 extends EntityRewriter<Clientbound
|
||||
|
||||
@Override
|
||||
protected void registerRewrites() {
|
||||
filter().handler((event, data) -> data.setDataType(Types1_20.ENTITY_DATA_TYPES.byId(data.dataType().typeId())));
|
||||
filter().mapDataType(Types1_20.ENTITY_DATA_TYPES::byId);
|
||||
registerEntityDataTypeHandler(Types1_20.ENTITY_DATA_TYPES.itemType, Types1_20.ENTITY_DATA_TYPES.blockStateType, Types1_20.ENTITY_DATA_TYPES.optionalBlockStateType, Types1_20.ENTITY_DATA_TYPES.particleType, null, null);
|
||||
registerBlockStateHandler(EntityTypes1_19_4.ABSTRACT_MINECART, 11);
|
||||
|
||||
|
||||
+5
-11
@@ -21,7 +21,7 @@ import com.viaversion.nbt.tag.Tag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.rewriter.BlockItemPacketRewriter1_20_3;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.rewriter.EntityPacketRewriter1_20_3;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.storage.ResourcepackIDStorage;
|
||||
@@ -50,10 +50,10 @@ import com.viaversion.viaversion.protocols.v1_20to1_20_2.packet.ClientboundPacke
|
||||
import com.viaversion.viaversion.protocols.v1_20to1_20_2.packet.ServerboundConfigurationPackets1_20_2;
|
||||
import com.viaversion.viaversion.protocols.v1_20to1_20_2.packet.ServerboundPacket1_20_2;
|
||||
import com.viaversion.viaversion.protocols.v1_20to1_20_2.packet.ServerboundPackets1_20_2;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter.ReadType;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.util.ComponentUtil;
|
||||
import java.util.BitSet;
|
||||
import java.util.UUID;
|
||||
@@ -66,7 +66,7 @@ public final class Protocol1_20_3To1_20_2 extends BackwardsProtocol<ClientboundP
|
||||
private final EntityPacketRewriter1_20_3 entityRewriter = new EntityPacketRewriter1_20_3(this);
|
||||
private final BlockItemPacketRewriter1_20_3 itemRewriter = new BlockItemPacketRewriter1_20_3(this);
|
||||
private final ParticleRewriter<ClientboundPacket1_20_3> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPacket1_20_3> translatableRewriter = new TranslatableRewriter<>(this, ReadType.NBT);
|
||||
private final JsonNBTComponentRewriter<ClientboundPacket1_20_3> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.NBT);
|
||||
private final TagRewriter<ClientboundPacket1_20_3> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_20_3To1_20_2() {
|
||||
@@ -291,13 +291,7 @@ public final class Protocol1_20_3To1_20_2 extends BackwardsProtocol<ClientboundP
|
||||
wrapper.passthrough(Types.UUID);
|
||||
if (actions.get(0)) {
|
||||
wrapper.passthrough(Types.STRING); // Player Name
|
||||
|
||||
final int properties = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int j = 0; j < properties; j++) {
|
||||
wrapper.passthrough(Types.STRING); // Name
|
||||
wrapper.passthrough(Types.STRING); // Value
|
||||
wrapper.passthrough(Types.OPTIONAL_STRING); // Signature
|
||||
}
|
||||
wrapper.passthrough(Types.PROFILE_PROPERTY_ARRAY);
|
||||
}
|
||||
if (actions.get(1) && wrapper.passthrough(Types.BOOLEAN)) {
|
||||
wrapper.passthrough(Types.UUID); // Session UUID
|
||||
@@ -405,7 +399,7 @@ public final class Protocol1_20_3To1_20_2 extends BackwardsProtocol<ClientboundP
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPacket1_20_3> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPacket1_20_3> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+33
-2
@@ -17,20 +17,30 @@
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.rewriter;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.viabackwards.api.rewriters.BackwardsItemRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.Protocol1_20_3To1_20_2;
|
||||
import com.viaversion.viaversion.api.Via;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.data.ParticleMappings;
|
||||
import com.viaversion.viaversion.api.minecraft.blockentity.BlockEntity;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_20_3;
|
||||
import com.viaversion.viaversion.libs.gson.JsonElement;
|
||||
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ClientboundPacket1_20_3;
|
||||
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ClientboundPackets1_20_3;
|
||||
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.rewriter.RecipeRewriter1_20_3;
|
||||
import com.viaversion.viaversion.protocols.v1_20to1_20_2.packet.ServerboundPacket1_20_2;
|
||||
import com.viaversion.viaversion.protocols.v1_20to1_20_2.packet.ServerboundPackets1_20_2;
|
||||
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
||||
import com.viaversion.viaversion.util.ComponentUtil;
|
||||
import com.viaversion.viaversion.util.SerializerVersion;
|
||||
import com.viaversion.viaversion.util.StringUtil;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public final class BlockItemPacketRewriter1_20_3 extends BackwardsItemRewriter<ClientboundPacket1_20_3, ServerboundPacket1_20_2, Protocol1_20_3To1_20_2> {
|
||||
|
||||
@@ -45,8 +55,8 @@ public final class BlockItemPacketRewriter1_20_3 extends BackwardsItemRewriter<C
|
||||
blockRewriter.registerBlockUpdate(ClientboundPackets1_20_3.BLOCK_UPDATE);
|
||||
blockRewriter.registerSectionBlocksUpdate1_20(ClientboundPackets1_20_3.SECTION_BLOCKS_UPDATE);
|
||||
blockRewriter.registerLevelEvent(ClientboundPackets1_20_3.LEVEL_EVENT, 1010, 2001);
|
||||
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_20_3.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_20_2::new);
|
||||
blockRewriter.registerBlockEntityData(ClientboundPackets1_20_3.BLOCK_ENTITY_DATA);
|
||||
blockRewriter.registerLevelChunk1_19(ClientboundPackets1_20_3.LEVEL_CHUNK_WITH_LIGHT, ChunkType1_20_2::new, this::updateBlockEntity);
|
||||
blockRewriter.registerBlockEntityData(ClientboundPackets1_20_3.BLOCK_ENTITY_DATA, this::updateBlockEntity);
|
||||
|
||||
registerCooldown(ClientboundPackets1_20_3.COOLDOWN);
|
||||
registerSetContent1_17_1(ClientboundPackets1_20_3.CONTAINER_SET_CONTENT);
|
||||
@@ -156,4 +166,25 @@ public final class BlockItemPacketRewriter1_20_3 extends BackwardsItemRewriter<C
|
||||
wrapper.read(Types.OPTIONAL_FLOAT); // Sound range
|
||||
});
|
||||
}
|
||||
|
||||
private void updateBlockEntity(final UserConnection connection, final BlockEntity blockEntity) {
|
||||
final CompoundTag tag = blockEntity.tag();
|
||||
if (tag == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final StringTag customName = tag.getStringTag("CustomName");
|
||||
if (customName == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
final JsonElement updatedComponent = ComponentUtil.convertJson(customName.getValue(), SerializerVersion.V1_20_3, SerializerVersion.V1_19_4);
|
||||
customName.setValue(updatedComponent.toString());
|
||||
} catch (final Exception e) {
|
||||
if (!Via.getConfig().isSuppressTextComponentConversionWarnings()) {
|
||||
protocol.getLogger().log(Level.SEVERE, "Error during custom name conversion: " + StringUtil.forLogging(customName.getValue()), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+23
-14
@@ -17,12 +17,14 @@
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_20_5to1_20_3;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.provider.TransferProvider;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.rewriter.BlockItemPacketRewriter1_20_5;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.rewriter.ComponentRewriter1_20_5;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.rewriter.EntityPacketRewriter1_20_5;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.storage.CookieStorage;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.storage.RegistryDataStorage;
|
||||
@@ -38,6 +40,8 @@ import com.viaversion.viaversion.api.protocol.packet.State;
|
||||
import com.viaversion.viaversion.api.protocol.packet.provider.PacketTypesProvider;
|
||||
import com.viaversion.viaversion.api.protocol.packet.provider.SimplePacketTypesProvider;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypesHolder;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets;
|
||||
import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets;
|
||||
@@ -57,7 +61,6 @@ import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPac
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.storage.ArmorTrimStorage;
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.storage.BannerPatternStorage;
|
||||
import com.viaversion.viaversion.protocols.v1_20to1_20_2.packet.ServerboundConfigurationPackets1_20_2;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter.ReadType;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
@@ -70,7 +73,7 @@ public final class Protocol1_20_5To1_20_3 extends BackwardsProtocol<ClientboundP
|
||||
private final EntityPacketRewriter1_20_5 entityRewriter = new EntityPacketRewriter1_20_5(this);
|
||||
private final BlockItemPacketRewriter1_20_5 itemRewriter = new BlockItemPacketRewriter1_20_5(this);
|
||||
private final ParticleRewriter<ClientboundPacket1_20_5> particleRewriter = new ParticleRewriter<>(this);
|
||||
private final TranslatableRewriter<ClientboundPacket1_20_5> translatableRewriter = new TranslatableRewriter<>(this, ReadType.NBT);
|
||||
private final JsonNBTComponentRewriter<ClientboundPacket1_20_5> translatableRewriter = new ComponentRewriter1_20_5(this);
|
||||
private final TagRewriter<ClientboundPacket1_20_5> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_20_5To1_20_3() {
|
||||
@@ -111,6 +114,7 @@ public final class Protocol1_20_5To1_20_3 extends BackwardsProtocol<ClientboundP
|
||||
translatableRewriter.registerPlayerCombatKill1_20(ClientboundPackets1_20_5.PLAYER_COMBAT_KILL);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_20_5.SYSTEM_CHAT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_20_5.DISGUISED_CHAT);
|
||||
translatableRewriter.registerPlayerChat(ClientboundPackets1_20_5.PLAYER_CHAT, Types.VAR_INT);
|
||||
translatableRewriter.registerPlayerInfoUpdate1_20_3(ClientboundPackets1_20_5.PLAYER_INFO_UPDATE);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
@@ -163,14 +167,7 @@ public final class Protocol1_20_5To1_20_3 extends BackwardsProtocol<ClientboundP
|
||||
registerClientbound(State.LOGIN, ClientboundLoginPackets.LOGIN_FINISHED, wrapper -> {
|
||||
wrapper.passthrough(Types.UUID); // UUID
|
||||
wrapper.passthrough(Types.STRING); // Name
|
||||
|
||||
final int properties = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int i = 0; i < properties; i++) {
|
||||
wrapper.passthrough(Types.STRING); // Name
|
||||
wrapper.passthrough(Types.STRING); // Value
|
||||
wrapper.passthrough(Types.OPTIONAL_STRING); // Signature
|
||||
}
|
||||
|
||||
wrapper.passthrough(Types.PROFILE_PROPERTY_ARRAY);
|
||||
wrapper.read(Types.BOOLEAN); // Strict error handling
|
||||
});
|
||||
|
||||
@@ -180,9 +177,11 @@ public final class Protocol1_20_5To1_20_3 extends BackwardsProtocol<ClientboundP
|
||||
|
||||
private void sendRegistryData(final UserConnection connection) {
|
||||
final RegistryDataStorage registryDataStorage = connection.get(RegistryDataStorage.class);
|
||||
if (!registryDataStorage.sentRegistryData()) {
|
||||
|
||||
final CompoundTag registryData = registryDataStorage.registryData();
|
||||
if (!registryDataStorage.sentRegistryData() && !registryData.isEmpty()) {
|
||||
final PacketWrapper registryDataPacket = PacketWrapper.create(ClientboundConfigurationPackets1_20_3.REGISTRY_DATA, connection);
|
||||
registryDataPacket.write(Types.COMPOUND_TAG, registryDataStorage.registryData().copy());
|
||||
registryDataPacket.write(Types.COMPOUND_TAG, registryData.copy());
|
||||
registryDataPacket.send(Protocol1_20_5To1_20_3.class);
|
||||
registryDataStorage.setSentRegistryData();
|
||||
}
|
||||
@@ -255,7 +254,7 @@ public final class Protocol1_20_5To1_20_3 extends BackwardsProtocol<ClientboundP
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPacket1_20_5> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPacket1_20_5> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
@@ -264,6 +263,16 @@ public final class Protocol1_20_5To1_20_3 extends BackwardsProtocol<ClientboundP
|
||||
return tagRewriter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VersionedTypesHolder types() {
|
||||
return VersionedTypes.V1_20_5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VersionedTypesHolder mappedTypes() {
|
||||
return new Types1_20_3();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PacketTypesProvider<ClientboundPacket1_20_5, ClientboundPacket1_20_3, ServerboundPacket1_20_5, ServerboundPacket1_20_3> createPacketTypesProvider() {
|
||||
return new SimplePacketTypesProvider<>(
|
||||
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_20_5to1_20_3;
|
||||
|
||||
import com.viaversion.viaversion.api.minecraft.Particle;
|
||||
import com.viaversion.viaversion.api.minecraft.data.StructuredData;
|
||||
import com.viaversion.viaversion.api.minecraft.data.version.VersionedStructuredDataKeys;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.types.AbstractEntityDataTypes;
|
||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||
import com.viaversion.viaversion.api.type.Type;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.ArrayType;
|
||||
import com.viaversion.viaversion.api.type.types.item.StructuredDataType;
|
||||
import com.viaversion.viaversion.api.type.types.misc.ParticleType;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypesHolder;
|
||||
import java.util.List;
|
||||
|
||||
final class Types1_20_3 implements VersionedTypesHolder {
|
||||
@Override
|
||||
public Type<Item> item() {
|
||||
return Types.ITEM1_20_2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type<Item[]> itemArray() {
|
||||
return Types.ITEM1_20_2_ARRAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type<Item> itemCost() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type<Item> optionalItemCost() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type<Item> lengthPrefixedItem() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StructuredDataType structuredData() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type<StructuredData<?>[]> structuredDataArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VersionedStructuredDataKeys structuredDataKeys() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParticleType particle() {
|
||||
return com.viaversion.viaversion.api.type.types.version.Types1_20_3.PARTICLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayType<Particle> particles() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractEntityDataTypes entityDataTypes() {
|
||||
return com.viaversion.viaversion.api.type.types.version.Types1_20_3.ENTITY_DATA_TYPES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type<List<EntityData>> entityDataList() {
|
||||
return com.viaversion.viaversion.api.type.types.version.Types1_20_3.ENTITY_DATA_LIST;
|
||||
}
|
||||
}
|
||||
+25
-12
@@ -27,6 +27,7 @@ import com.viaversion.viabackwards.api.rewriters.StructuredEnchantmentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.Protocol1_20_5To1_20_3;
|
||||
import com.viaversion.viaversion.api.Via;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.data.item.ItemHasher;
|
||||
import com.viaversion.viaversion.api.minecraft.Holder;
|
||||
import com.viaversion.viaversion.api.minecraft.Particle;
|
||||
import com.viaversion.viaversion.api.minecraft.SoundEvent;
|
||||
@@ -39,7 +40,7 @@ import com.viaversion.viaversion.api.minecraft.item.data.Fireworks;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_20_3;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_20_5;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ServerboundPacket1_20_3;
|
||||
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ServerboundPackets1_20_3;
|
||||
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.rewriter.RecipeRewriter1_20_3;
|
||||
@@ -59,7 +60,7 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem
|
||||
private final StructuredEnchantmentRewriter enchantmentRewriter = new StructuredEnchantmentRewriter(this);
|
||||
|
||||
public BlockItemPacketRewriter1_20_5(final Protocol1_20_5To1_20_3 protocol) {
|
||||
super(protocol, Types1_20_5.ITEM, Types1_20_5.ITEM_ARRAY, Types.ITEM1_20_2, Types.ITEM1_20_2_ARRAY);
|
||||
super(protocol);
|
||||
enchantmentRewriter.setRewriteIds(false); // Let VV handle it
|
||||
}
|
||||
|
||||
@@ -106,7 +107,7 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem
|
||||
wrapper.passthrough(Types.INT); // Particle Count
|
||||
|
||||
// Move it to the beginning, move out arguments here
|
||||
final Particle particle = wrapper.read(Types1_20_5.PARTICLE);
|
||||
final Particle particle = wrapper.read(VersionedTypes.V1_20_5.particle());
|
||||
protocol.getParticleRewriter().rewriteParticle(wrapper.user(), particle);
|
||||
if (particle.id() == protocol.getMappingData().getParticleMappings().mappedId("entity_effect")) {
|
||||
// Remove color argument
|
||||
@@ -141,8 +142,8 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem
|
||||
wrapper.passthrough(Types.FLOAT); // Knockback Z
|
||||
wrapper.passthrough(Types.VAR_INT); // Block interaction type
|
||||
|
||||
final Particle smallExplosionParticle = wrapper.passthroughAndMap(Types1_20_5.PARTICLE, Types1_20_3.PARTICLE);
|
||||
final Particle largeExplosionParticle = wrapper.passthroughAndMap(Types1_20_5.PARTICLE, Types1_20_3.PARTICLE);
|
||||
final Particle smallExplosionParticle = wrapper.passthroughAndMap(VersionedTypes.V1_20_5.particle(), Types1_20_3.PARTICLE);
|
||||
final Particle largeExplosionParticle = wrapper.passthroughAndMap(VersionedTypes.V1_20_5.particle(), Types1_20_3.PARTICLE);
|
||||
protocol.getParticleRewriter().rewriteParticle(wrapper.user(), smallExplosionParticle);
|
||||
protocol.getParticleRewriter().rewriteParticle(wrapper.user(), largeExplosionParticle);
|
||||
|
||||
@@ -163,14 +164,14 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem
|
||||
wrapper.passthrough(Types.VAR_INT); // Container id
|
||||
final int size = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int i = 0; i < size; i++) {
|
||||
final Item input = handleItemToClient(wrapper.user(), wrapper.read(Types1_20_5.ITEM_COST));
|
||||
final Item input = handleItemToClient(wrapper.user(), wrapper.read(VersionedTypes.V1_20_5.itemCost()));
|
||||
cleanInput(input);
|
||||
wrapper.write(Types.ITEM1_20_2, input);
|
||||
|
||||
final Item result = handleItemToClient(wrapper.user(), wrapper.read(Types1_20_5.ITEM));
|
||||
final Item result = handleItemToClient(wrapper.user(), wrapper.read(VersionedTypes.V1_20_5.item()));
|
||||
wrapper.write(Types.ITEM1_20_2, result);
|
||||
|
||||
Item secondInput = wrapper.read(Types1_20_5.OPTIONAL_ITEM_COST);
|
||||
Item secondInput = wrapper.read(VersionedTypes.V1_20_5.optionalItemCost());
|
||||
if (secondInput != null) {
|
||||
secondInput = handleItemToClient(wrapper.user(), secondInput);
|
||||
cleanInput(secondInput);
|
||||
@@ -360,8 +361,8 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem
|
||||
super.handleItemToClient(connection, item);
|
||||
|
||||
// Text components since we skip the usual rewrite method
|
||||
updateComponent(connection, item, StructuredDataKey.ITEM_NAME, "item_name");
|
||||
updateComponent(connection, item, StructuredDataKey.CUSTOM_NAME, "custom_name");
|
||||
updateTextComponent(connection, item, StructuredDataKey.ITEM_NAME, "item_name");
|
||||
updateTextComponent(connection, item, StructuredDataKey.CUSTOM_NAME, "custom_name");
|
||||
final Tag[] lore = data.get(StructuredDataKey.LORE);
|
||||
if (lore != null) {
|
||||
for (final Tag tag : lore) {
|
||||
@@ -391,9 +392,21 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem
|
||||
return oldItem;
|
||||
}
|
||||
|
||||
// Items and data within components are handled in this protocol
|
||||
@Override
|
||||
protected void updateItemDataComponents(final UserConnection connection, final Item item, final boolean clientbound) {
|
||||
// Items and data within components are handled in this protocol
|
||||
protected void handleItemDataComponentsToClient(final UserConnection connection, final Item item, final StructuredDataContainer container) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleItemDataComponentsToServer(final UserConnection connection, final Item item, final StructuredDataContainer container) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleRewritablesToClient(final UserConnection connection, final StructuredDataContainer container, @Nullable final ItemHasher itemHasher) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleRewritablesToServer(final UserConnection connection, final StructuredDataContainer container) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.rewriter;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.data.StructuredData;
|
||||
import com.viaversion.viaversion.api.minecraft.data.StructuredDataContainer;
|
||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||
import com.viaversion.viaversion.api.minecraft.item.StructuredItem;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ClientboundPacket1_20_5;
|
||||
import com.viaversion.viaversion.util.ComponentUtil;
|
||||
import com.viaversion.viaversion.util.SerializerVersion;
|
||||
import java.util.List;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class ComponentRewriter1_20_5 extends JsonNBTComponentRewriter<ClientboundPacket1_20_5> {
|
||||
|
||||
private final com.viaversion.viaversion.protocols.v1_20_3to1_20_5.rewriter.ComponentRewriter1_20_5<ClientboundPacket1_20_5> vvRewriter;
|
||||
|
||||
public ComponentRewriter1_20_5(final BackwardsProtocol<ClientboundPacket1_20_5, ?, ?, ?> protocol) {
|
||||
super(protocol, ReadType.NBT);
|
||||
vvRewriter = new com.viaversion.viaversion.protocols.v1_20_3to1_20_5.rewriter.ComponentRewriter1_20_5<>(protocol, VersionedTypes.V1_20_5.structuredData());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleShowItem(final UserConnection connection, final CompoundTag itemTag, @Nullable final CompoundTag componentsTag) {
|
||||
super.handleShowItem(connection, itemTag, componentsTag);
|
||||
if (componentsTag == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final StringTag idTag = itemTag.getStringTag("id");
|
||||
if (idTag == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final List<StructuredData<?>> data = vvRewriter.toData(connection, componentsTag);
|
||||
if (data.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
final int identifier = this.protocol.getMappingData().getFullItemMappings().id(idTag.getValue());
|
||||
|
||||
final StructuredItem structuredItem = new StructuredItem(identifier, 1, new StructuredDataContainer(data.toArray(StructuredData[]::new)));
|
||||
final Item dataItem = protocol.getItemRewriter().handleItemToClient(connection, structuredItem);
|
||||
if (dataItem.tag() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
itemTag.remove("components");
|
||||
|
||||
final StringTag tag = new StringTag(outputSerializerVersion().toSNBT(dataItem.tag()));
|
||||
itemTag.put("tag", ComponentUtil.trimStrings(tag));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SerializerVersion inputSerializerVersion() {
|
||||
return SerializerVersion.V1_20_5;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SerializerVersion outputSerializerVersion() {
|
||||
return SerializerVersion.V1_20_3;
|
||||
}
|
||||
}
|
||||
+10
-7
@@ -40,7 +40,7 @@ import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_20_3;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_20_5;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.data.entity.DimensionDataImpl;
|
||||
import com.viaversion.viaversion.protocols.v1_20_2to1_20_3.packet.ClientboundPackets1_20_3;
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.Protocol1_20_3To1_20_5;
|
||||
@@ -67,7 +67,7 @@ public final class EntityPacketRewriter1_20_5 extends EntityRewriter<Clientbound
|
||||
@Override
|
||||
public void registerPackets() {
|
||||
registerTrackerWithData1_19(ClientboundPackets1_20_5.ADD_ENTITY, EntityTypes1_20_5.FALLING_BLOCK);
|
||||
registerSetEntityData(ClientboundPackets1_20_5.SET_ENTITY_DATA, Types1_20_5.ENTITY_DATA_LIST, Types1_20_3.ENTITY_DATA_LIST);
|
||||
registerSetEntityData(ClientboundPackets1_20_5.SET_ENTITY_DATA, VersionedTypes.V1_20_5.entityDataList(), Types1_20_3.ENTITY_DATA_LIST);
|
||||
registerRemoveEntities(ClientboundPackets1_20_5.REMOVE_ENTITIES);
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_20_5.SET_EQUIPMENT, wrapper -> {
|
||||
@@ -76,7 +76,7 @@ public final class EntityPacketRewriter1_20_5 extends EntityRewriter<Clientbound
|
||||
byte slot;
|
||||
do {
|
||||
slot = wrapper.read(Types.BYTE);
|
||||
final Item item = protocol.getItemRewriter().handleItemToClient(wrapper.user(), wrapper.read(Types1_20_5.ITEM));
|
||||
final Item item = protocol.getItemRewriter().handleItemToClient(wrapper.user(), wrapper.read(VersionedTypes.V1_20_5.item()));
|
||||
final int rawSlot = slot & 0x7F;
|
||||
|
||||
if (rawSlot == 6) {
|
||||
@@ -408,7 +408,7 @@ public final class EntityPacketRewriter1_20_5 extends EntityRewriter<Clientbound
|
||||
protected void registerRewrites() {
|
||||
filter().handler((event, data) -> {
|
||||
final int typeId = data.dataType().typeId();
|
||||
if (typeId == Types1_20_5.ENTITY_DATA_TYPES.particlesType.typeId()) {
|
||||
if (typeId == VersionedTypes.V1_20_5.entityDataTypes.particlesType.typeId()) {
|
||||
final Particle[] particles = data.value();
|
||||
int color = 0;
|
||||
for (final Particle particle : particles) {
|
||||
@@ -419,16 +419,19 @@ public final class EntityPacketRewriter1_20_5 extends EntityRewriter<Clientbound
|
||||
}
|
||||
data.setTypeAndValue(Types1_20_3.ENTITY_DATA_TYPES.varIntType, removeAlpha(color));
|
||||
return;
|
||||
} else if (typeId == VersionedTypes.V1_20_5.entityDataTypes.armadilloState.typeId() || typeId == VersionedTypes.V1_20_5.entityDataTypes.wolfVariantType.typeId()) {
|
||||
event.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
int id = typeId;
|
||||
if (typeId >= Types1_20_5.ENTITY_DATA_TYPES.armadilloState.typeId()) {
|
||||
if (typeId >= VersionedTypes.V1_20_5.entityDataTypes.armadilloState.typeId()) {
|
||||
id--;
|
||||
}
|
||||
if (typeId >= Types1_20_5.ENTITY_DATA_TYPES.wolfVariantType.typeId()) {
|
||||
if (typeId >= VersionedTypes.V1_20_5.entityDataTypes.wolfVariantType.typeId()) {
|
||||
id--;
|
||||
}
|
||||
if (typeId >= Types1_20_5.ENTITY_DATA_TYPES.particlesType.typeId()) {
|
||||
if (typeId >= VersionedTypes.V1_20_5.entityDataTypes.particlesType.typeId()) {
|
||||
id--;
|
||||
}
|
||||
data.setDataType(Types1_20_3.ENTITY_DATA_TYPES.byId(id));
|
||||
|
||||
+4
-4
@@ -19,7 +19,7 @@ package com.viaversion.viabackwards.protocol.v1_20to1_19_4;
|
||||
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_20to1_19_4.data.BackwardsMappingData1_20;
|
||||
import com.viaversion.viabackwards.protocol.v1_20to1_19_4.rewriter.BlockItemPacketRewriter1_20;
|
||||
import com.viaversion.viabackwards.protocol.v1_20to1_19_4.rewriter.EntityPacketRewriter1_20;
|
||||
@@ -30,7 +30,7 @@ import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.packet.ClientboundPackets1_19_4;
|
||||
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.packet.ServerboundPackets1_19_4;
|
||||
import com.viaversion.viaversion.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.rewriter.text.ComponentRewriterBase;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
@@ -39,7 +39,7 @@ import com.viaversion.viaversion.util.ArrayUtil;
|
||||
public final class Protocol1_20To1_19_4 extends BackwardsProtocol<ClientboundPackets1_19_4, ClientboundPackets1_19_4, ServerboundPackets1_19_4, ServerboundPackets1_19_4> {
|
||||
|
||||
public static final BackwardsMappingData1_20 MAPPINGS = new BackwardsMappingData1_20();
|
||||
private final TranslatableRewriter<ClientboundPackets1_19_4> translatableRewriter = new TranslatableRewriter<>(this, ComponentRewriter.ReadType.JSON);
|
||||
private final JsonNBTComponentRewriter<ClientboundPackets1_19_4> translatableRewriter = new JsonNBTComponentRewriter<>(this, ComponentRewriterBase.ReadType.JSON);
|
||||
private final EntityPacketRewriter1_20 entityRewriter = new EntityPacketRewriter1_20(this);
|
||||
private final BlockItemPacketRewriter1_20 itemRewriter = new BlockItemPacketRewriter1_20(this);
|
||||
private final ParticleRewriter<ClientboundPackets1_19_4> particleRewriter = new ParticleRewriter<>(this);
|
||||
@@ -117,7 +117,7 @@ public final class Protocol1_20To1_19_4 extends BackwardsProtocol<ClientboundPac
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPackets1_19_4> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPackets1_19_4> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -122,7 +122,7 @@ public final class EntityPacketRewriter1_20 extends EntityRewriter<ClientboundPa
|
||||
|
||||
@Override
|
||||
protected void registerRewrites() {
|
||||
filter().handler((event, data) -> data.setDataType(Types1_19_4.ENTITY_DATA_TYPES.byId(data.dataType().typeId())));
|
||||
filter().mapDataType(Types1_19_4.ENTITY_DATA_TYPES::byId);
|
||||
registerEntityDataTypeHandler(Types1_19_4.ENTITY_DATA_TYPES.itemType, Types1_19_4.ENTITY_DATA_TYPES.blockStateType, Types1_19_4.ENTITY_DATA_TYPES.optionalBlockStateType,
|
||||
Types1_19_4.ENTITY_DATA_TYPES.particleType, Types1_19_4.ENTITY_DATA_TYPES.componentType, Types1_19_4.ENTITY_DATA_TYPES.optionalComponentType);
|
||||
registerBlockStateHandler(EntityTypes1_19_4.ABSTRACT_MINECART, 11);
|
||||
|
||||
+19
-12
@@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.v1_21_2to1_21;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.rewriter.BlockItemPacketRewriter1_21_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.rewriter.ComponentRewriter1_21_2;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.rewriter.EntityPacketRewriter1_21_2;
|
||||
@@ -31,11 +31,14 @@ import com.viaversion.viabackwards.protocol.v1_21_2to1_21.storage.PlayerStorage;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.storage.RecipeStorage;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_20_5;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.ChatType;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||
import com.viaversion.viaversion.api.protocol.packet.provider.PacketTypesProvider;
|
||||
import com.viaversion.viaversion.api.protocol.packet.provider.SimplePacketTypesProvider;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypesHolder;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets;
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundConfigurationPackets1_20_5;
|
||||
@@ -62,7 +65,7 @@ public final class Protocol1_21_2To1_21 extends BackwardsProtocol<ClientboundPac
|
||||
private final EntityPacketRewriter1_21_2 entityRewriter = new EntityPacketRewriter1_21_2(this);
|
||||
private final BlockItemPacketRewriter1_21_2 itemRewriter = new BlockItemPacketRewriter1_21_2(this);
|
||||
private final ParticleRewriter1_21_2 particleRewriter = new ParticleRewriter1_21_2(this);
|
||||
private final TranslatableRewriter<ClientboundPacket1_21_2> translatableRewriter = new ComponentRewriter1_21_2(this);
|
||||
private final JsonNBTComponentRewriter<ClientboundPacket1_21_2> translatableRewriter = new ComponentRewriter1_21_2(this);
|
||||
private final TagRewriter<ClientboundPacket1_21_2> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_21_2To1_21() {
|
||||
@@ -94,7 +97,8 @@ public final class Protocol1_21_2To1_21 extends BackwardsProtocol<ClientboundPac
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_21_2.TAB_LIST);
|
||||
translatableRewriter.registerPlayerCombatKill1_20(ClientboundPackets1_21_2.PLAYER_COMBAT_KILL);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SYSTEM_CHAT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.DISGUISED_CHAT);
|
||||
translatableRewriter.registerDisguisedChat(ClientboundPackets1_21_2.DISGUISED_CHAT);
|
||||
translatableRewriter.registerPlayerChat(ClientboundPackets1_21_2.PLAYER_CHAT, ChatType.TYPE);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
registerServerbound(ServerboundPackets1_20_5.CLIENT_INFORMATION, this::clientInformation);
|
||||
@@ -110,14 +114,7 @@ public final class Protocol1_21_2To1_21 extends BackwardsProtocol<ClientboundPac
|
||||
registerClientbound(State.LOGIN, ClientboundLoginPackets.LOGIN_FINISHED, wrapper -> {
|
||||
wrapper.passthrough(Types.UUID); // UUID
|
||||
wrapper.passthrough(Types.STRING); // Name
|
||||
|
||||
final int properties = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int i = 0; i < properties; i++) {
|
||||
wrapper.passthrough(Types.STRING); // Name
|
||||
wrapper.passthrough(Types.STRING); // Value
|
||||
wrapper.passthrough(Types.OPTIONAL_STRING); // Signature
|
||||
}
|
||||
|
||||
wrapper.passthrough(Types.PROFILE_PROPERTY_ARRAY);
|
||||
wrapper.write(Types.BOOLEAN, true); // Strict error handling. Always enabled for newer clients, so mimic that behavior
|
||||
});
|
||||
|
||||
@@ -185,7 +182,7 @@ public final class Protocol1_21_2To1_21 extends BackwardsProtocol<ClientboundPac
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPacket1_21_2> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPacket1_21_2> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
@@ -194,6 +191,16 @@ public final class Protocol1_21_2To1_21 extends BackwardsProtocol<ClientboundPac
|
||||
return tagRewriter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VersionedTypesHolder types() {
|
||||
return VersionedTypes.V1_21_2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VersionedTypesHolder mappedTypes() {
|
||||
return VersionedTypes.V1_21;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PacketTypesProvider<ClientboundPacket1_21_2, ClientboundPacket1_21, ServerboundPacket1_21_2, ServerboundPacket1_20_5> createPacketTypesProvider() {
|
||||
return new SimplePacketTypesProvider<>(
|
||||
|
||||
+59
-60
@@ -19,7 +19,6 @@ package com.viaversion.viabackwards.protocol.v1_21_2to1_21.rewriter;
|
||||
|
||||
import com.viaversion.nbt.tag.ByteTag;
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.FloatTag;
|
||||
import com.viaversion.nbt.tag.IntTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
import com.viaversion.nbt.tag.Tag;
|
||||
@@ -38,6 +37,8 @@ import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
|
||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.Consumable1_21_2;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.DeathProtection;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.Enchantable;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.Enchantments;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.Equippable;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.FoodProperties1_20_5;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.Instrument1_21_2;
|
||||
@@ -47,8 +48,7 @@ import com.viaversion.viaversion.api.minecraft.item.data.UseCooldown;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPacket1_20_5;
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPackets1_20_5;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundPackets1_21;
|
||||
@@ -66,10 +66,7 @@ import static com.viaversion.viaversion.protocols.v1_21to1_21_2.rewriter.BlockIt
|
||||
public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItemRewriter<ClientboundPacket1_21_2, ServerboundPacket1_20_5, Protocol1_21_2To1_21> {
|
||||
|
||||
public BlockItemPacketRewriter1_21_2(final Protocol1_21_2To1_21 protocol) {
|
||||
super(protocol,
|
||||
Types1_21_2.ITEM, Types1_21_2.ITEM_ARRAY, Types1_21.ITEM, Types1_21.ITEM_ARRAY,
|
||||
Types1_21_2.ITEM_COST, Types1_21_2.OPTIONAL_ITEM_COST, Types1_21.ITEM_COST, Types1_21.OPTIONAL_ITEM_COST
|
||||
);
|
||||
super(protocol);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -100,7 +97,7 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.SET_CURSOR_ITEM, ClientboundPackets1_21.CONTAINER_SET_SLOT, wrapper -> {
|
||||
wrapper.write(Types.UNSIGNED_BYTE, (short) -1); // Player inventory
|
||||
wrapper.write(Types.BYTE, (byte) -1); // Player inventory
|
||||
wrapper.write(Types.VAR_INT, wrapper.user().get(InventoryStateIdStorage.class).stateId()); // State id; re-use the last known one
|
||||
wrapper.write(Types.SHORT, (short) -1); // Cursor
|
||||
passthroughClientboundItem(wrapper);
|
||||
@@ -119,7 +116,7 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.CONTAINER_SET_CONTENT, wrapper -> {
|
||||
updateContainerId(wrapper);
|
||||
varIntToUnsignedByte(wrapper);
|
||||
|
||||
final int stateId = wrapper.passthrough(Types.VAR_INT);
|
||||
wrapper.user().get(InventoryStateIdStorage.class).setStateId(stateId);
|
||||
@@ -132,7 +129,7 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
passthroughClientboundItem(wrapper);
|
||||
});
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.CONTAINER_SET_SLOT, wrapper -> {
|
||||
updateContainerId(wrapper);
|
||||
varIntToByte(wrapper);
|
||||
|
||||
final int stateId = wrapper.passthrough(Types.VAR_INT);
|
||||
wrapper.user().get(InventoryStateIdStorage.class).setStateId(stateId);
|
||||
@@ -141,7 +138,7 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
passthroughClientboundItem(wrapper);
|
||||
});
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.CONTAINER_SET_DATA, wrapper -> {
|
||||
updateContainerId(wrapper);
|
||||
varIntToUnsignedByte(wrapper);
|
||||
|
||||
if (wrapper.user().get(InventoryStateIdStorage.class).smithingTableOpen()) {
|
||||
// Cancel new data for smithing table
|
||||
@@ -149,17 +146,17 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
}
|
||||
});
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.CONTAINER_CLOSE, wrapper -> {
|
||||
updateContainerId(wrapper);
|
||||
varIntToUnsignedByte(wrapper);
|
||||
wrapper.user().get(InventoryStateIdStorage.class).setSmithingTableOpen(false);
|
||||
});
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.SET_HELD_SLOT, ClientboundPackets1_21.SET_CARRIED_ITEM);
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.HORSE_SCREEN_OPEN, this::updateContainerId);
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.HORSE_SCREEN_OPEN, this::varIntToUnsignedByte);
|
||||
protocol.registerServerbound(ServerboundPackets1_20_5.CONTAINER_CLOSE, wrapper -> {
|
||||
updateContainerIdServerbound(wrapper);
|
||||
byteToVarInt(wrapper);
|
||||
wrapper.user().get(InventoryStateIdStorage.class).setSmithingTableOpen(false);
|
||||
});
|
||||
protocol.registerServerbound(ServerboundPackets1_20_5.CONTAINER_CLICK, wrapper -> {
|
||||
updateContainerIdServerbound(wrapper);
|
||||
byteToVarInt(wrapper);
|
||||
wrapper.passthrough(Types.VAR_INT); // State id
|
||||
wrapper.passthrough(Types.SHORT); // Slot
|
||||
wrapper.passthrough(Types.BYTE); // Button
|
||||
@@ -167,9 +164,9 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
final int length = Limit.max(wrapper.passthrough(Types.VAR_INT), 128);
|
||||
for (int i = 0; i < length; i++) {
|
||||
wrapper.passthrough(Types.SHORT); // Slot
|
||||
passthroughServerboundItem(wrapper);
|
||||
wrapper.write(itemType(), handleItemToServer(wrapper.user(), wrapper.read(mappedItemType())));
|
||||
}
|
||||
passthroughServerboundItem(wrapper);
|
||||
wrapper.write(itemType(), handleItemToServer(wrapper.user(), wrapper.read(mappedItemType())));
|
||||
});
|
||||
|
||||
protocol.registerServerbound(ServerboundPackets1_20_5.USE_ITEM_ON, wrapper -> {
|
||||
@@ -184,7 +181,7 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.SET_PLAYER_INVENTORY, ClientboundPackets1_21.CONTAINER_SET_SLOT, wrapper -> {
|
||||
wrapper.write(Types.UNSIGNED_BYTE, (short) -2); // Player inventory
|
||||
wrapper.write(Types.BYTE, (byte) -2); // Player inventory
|
||||
wrapper.write(Types.VAR_INT, 0); // 0 state id
|
||||
final int slot = wrapper.read(Types.VAR_INT);
|
||||
wrapper.write(Types.SHORT, (short) slot);
|
||||
@@ -214,11 +211,11 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
|
||||
wrapper.write(Types.VAR_INT, 0); // Block interaction type
|
||||
|
||||
final Particle explosionParticle = wrapper.read(Types1_21.PARTICLE);
|
||||
final Particle explosionParticle = wrapper.read(VersionedTypes.V1_21.particle());
|
||||
protocol.getParticleRewriter().rewriteParticle(wrapper.user(), explosionParticle);
|
||||
// As small and large explosion particle
|
||||
wrapper.write(Types1_21_2.PARTICLE, explosionParticle);
|
||||
wrapper.write(Types1_21_2.PARTICLE, explosionParticle);
|
||||
wrapper.write(VersionedTypes.V1_21_2.particle(), explosionParticle);
|
||||
wrapper.write(VersionedTypes.V1_21_2.particle(), explosionParticle);
|
||||
|
||||
new SoundRewriter<>(protocol).soundHolderHandler().handle(wrapper);
|
||||
});
|
||||
@@ -268,11 +265,11 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
wrapper.cancel();
|
||||
});
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.PLACE_GHOST_RECIPE, wrapper -> {
|
||||
this.updateContainerId(wrapper);
|
||||
this.varIntToByte(wrapper);
|
||||
wrapper.cancel(); // Full recipe display, this doesn't look mappable
|
||||
});
|
||||
protocol.registerServerbound(ServerboundPackets1_20_5.PLACE_RECIPE, wrapper -> {
|
||||
this.updateContainerIdServerbound(wrapper);
|
||||
this.byteToVarInt(wrapper);
|
||||
|
||||
final String recipe = Key.stripMinecraftNamespace(wrapper.read(Types.STRING));
|
||||
wrapper.write(Types.VAR_INT, Integer.parseInt(recipe));
|
||||
@@ -283,15 +280,19 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
});
|
||||
}
|
||||
|
||||
private void updateContainerId(final PacketWrapper wrapper) {
|
||||
private void varIntToUnsignedByte(final PacketWrapper wrapper) {
|
||||
final int containerId = wrapper.read(Types.VAR_INT);
|
||||
wrapper.write(Types.UNSIGNED_BYTE, (short) containerId);
|
||||
}
|
||||
|
||||
private void updateContainerIdServerbound(final PacketWrapper wrapper) {
|
||||
final short containerId = wrapper.read(Types.UNSIGNED_BYTE);
|
||||
final int intId = (byte) containerId;
|
||||
wrapper.write(Types.VAR_INT, intId);
|
||||
private void varIntToByte(final PacketWrapper wrapper) {
|
||||
final int containerId = wrapper.read(Types.VAR_INT);
|
||||
wrapper.write(Types.BYTE, (byte) containerId);
|
||||
}
|
||||
|
||||
private void byteToVarInt(final PacketWrapper wrapper) {
|
||||
final byte containerId = wrapper.read(Types.BYTE);
|
||||
wrapper.write(Types.VAR_INT, (int) containerId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -316,6 +317,21 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
|
||||
updateItemData(item);
|
||||
restoreInconvertibleData(item);
|
||||
|
||||
// Enchantments with level 0 are not supported anymore, if an older client for some reason sends it (for example
|
||||
// using stored items in the hotbar lists), we need to remove it.
|
||||
final Enchantments enchantments = data.get(StructuredDataKey.ENCHANTMENTS1_20_5);
|
||||
if (enchantments != null) {
|
||||
// The enchantments might be used to create a glint, set glint override to true if the enchantments are empty after filtering
|
||||
final boolean removed = enchantments.enchantments().values().removeIf(level -> level == 0);
|
||||
if (removed && enchantments.size() == 0) {
|
||||
data.set(StructuredDataKey.ENCHANTMENT_GLINT_OVERRIDE, true);
|
||||
}
|
||||
}
|
||||
final Enchantments storedEnchantments = data.get(StructuredDataKey.STORED_ENCHANTMENTS1_20_5);
|
||||
if (storedEnchantments != null) {
|
||||
storedEnchantments.enchantments().values().removeIf(level -> level == 0);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
@@ -336,9 +352,9 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
backupTag.put("repairable", holderSetToTag(repairable));
|
||||
}
|
||||
|
||||
final Integer enchantable = data.get(StructuredDataKey.ENCHANTABLE);
|
||||
final Enchantable enchantable = data.get(StructuredDataKey.ENCHANTABLE);
|
||||
if (enchantable != null) {
|
||||
backupTag.putInt("enchantable", enchantable);
|
||||
backupTag.putInt("enchantable", enchantable.value());
|
||||
}
|
||||
|
||||
final UseCooldown useCooldown = data.get(StructuredDataKey.USE_COOLDOWN);
|
||||
@@ -351,17 +367,17 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
backupTag.put("use_cooldown", tag);
|
||||
}
|
||||
|
||||
final String itemModel = data.get(StructuredDataKey.ITEM_MODEL);
|
||||
final Key itemModel = data.get(StructuredDataKey.ITEM_MODEL);
|
||||
if (itemModel != null) {
|
||||
backupTag.putString("item_model", itemModel);
|
||||
backupTag.putString("item_model", itemModel.original());
|
||||
}
|
||||
|
||||
final Equippable equippable = data.get(StructuredDataKey.EQUIPPABLE);
|
||||
final Equippable equippable = data.get(StructuredDataKey.EQUIPPABLE1_21_2);
|
||||
if (equippable != null) {
|
||||
final CompoundTag tag = new CompoundTag();
|
||||
|
||||
tag.putInt("equipment_slot", equippable.equipmentSlot());
|
||||
convertSoundEventHolder(tag, equippable.soundEvent());
|
||||
saveSoundEventHolder(tag, equippable.soundEvent());
|
||||
final String model = equippable.model();
|
||||
if (model != null) {
|
||||
tag.putString("model", model);
|
||||
@@ -385,9 +401,9 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
backupTag.putBoolean("glider", true);
|
||||
}
|
||||
|
||||
final String tooltipStyle = data.get(StructuredDataKey.TOOLTIP_STYLE);
|
||||
final Key tooltipStyle = data.get(StructuredDataKey.TOOLTIP_STYLE);
|
||||
if (tooltipStyle != null) {
|
||||
backupTag.putString("tooltip_style", tooltipStyle);
|
||||
backupTag.putString("tooltip_style", tooltipStyle.original());
|
||||
}
|
||||
|
||||
final DeathProtection deathProtection = data.get(StructuredDataKey.DEATH_PROTECTION);
|
||||
@@ -433,7 +449,7 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
} else if (effect.type() == Types.SOUND_EVENT && effect.value() instanceof Holder sound) {
|
||||
tag.putString("type", "play_sound");
|
||||
|
||||
convertSoundEventHolder(tag, sound);
|
||||
saveSoundEventHolder(tag, sound);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -450,15 +466,6 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
}
|
||||
}
|
||||
|
||||
private void convertSoundEventHolder(final CompoundTag tag, final Holder<SoundEvent> holder) {
|
||||
tag.put("sound_event", holderToTag(holder, (event, soundEventTag) -> {
|
||||
soundEventTag.putString("identifier", event.identifier());
|
||||
if (event.fixedRange() != null) {
|
||||
soundEventTag.putFloat("fixed_range", event.fixedRange());
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
private Consumable1_21_2.ConsumeEffect<?> convertConsumableEffect(final CompoundTag tag) {
|
||||
final int id = tag.getInt("id");
|
||||
final String type = tag.getString("type");
|
||||
@@ -482,7 +489,7 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
final float probability = tag.getFloat("probability");
|
||||
return new Consumable1_21_2.ConsumeEffect<>(id, Types.FLOAT, probability);
|
||||
} else if ("play_sound".equals(type)) {
|
||||
final Holder<SoundEvent> sound = convertSoundEventHolder(tag);
|
||||
final Holder<SoundEvent> sound = restoreSoundEventHolder(tag);
|
||||
return new Consumable1_21_2.ConsumeEffect<>(id, Types.SOUND_EVENT, sound);
|
||||
}
|
||||
return null;
|
||||
@@ -498,14 +505,6 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
return new PotionEffectData(amplifier, duration, ambient, showParticles, showIcon, hiddenEffect != null ? convertPotionEffectData(hiddenEffect) : null);
|
||||
}
|
||||
|
||||
private Holder<SoundEvent> convertSoundEventHolder(final CompoundTag tag) {
|
||||
return restoreHolder(tag, "sound_event", soundEventTag -> {
|
||||
final String identifier = soundEventTag.getString("identifier");
|
||||
final FloatTag fixedRange = soundEventTag.getFloatTag("fixed_range");
|
||||
return new SoundEvent(identifier, fixedRange != null ? fixedRange.asFloat() : null);
|
||||
});
|
||||
}
|
||||
|
||||
private void restoreInconvertibleData(final Item item) {
|
||||
final StructuredDataContainer data = item.dataContainer();
|
||||
final CompoundTag customData = data.get(StructuredDataKey.CUSTOM_DATA);
|
||||
@@ -528,7 +527,7 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
|
||||
final IntTag enchantable = backupTag.getIntTag("enchantable");
|
||||
if (enchantable != null) {
|
||||
data.set(StructuredDataKey.ENCHANTABLE, enchantable.asInt());
|
||||
data.set(StructuredDataKey.ENCHANTABLE, new Enchantable(enchantable.asInt()));
|
||||
}
|
||||
|
||||
final CompoundTag useCooldown = backupTag.getCompoundTag("use_cooldown");
|
||||
@@ -540,20 +539,20 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
|
||||
final String itemModel = backupTag.getString("item_model");
|
||||
if (itemModel != null) {
|
||||
data.set(StructuredDataKey.ITEM_MODEL, itemModel);
|
||||
data.set(StructuredDataKey.ITEM_MODEL, Key.of(itemModel));
|
||||
}
|
||||
|
||||
final CompoundTag equippable = backupTag.getCompoundTag("equippable");
|
||||
if (equippable != null) {
|
||||
final int equipmentSlot = equippable.getInt("equipment_slot");
|
||||
final Holder<SoundEvent> soundEvent = convertSoundEventHolder(equippable);
|
||||
final Holder<SoundEvent> soundEvent = restoreSoundEventHolder(equippable);
|
||||
final String model = equippable.getString("model");
|
||||
final String cameraOverlay = equippable.getString("camera_overlay");
|
||||
final HolderSet allowedEntities = equippable.contains("allowed_entities") ? restoreHolderSet(equippable, "allowed_entities") : null;
|
||||
final boolean dispensable = equippable.getBoolean("dispensable");
|
||||
final boolean swappable = equippable.getBoolean("swappable");
|
||||
final boolean damageOnHurt = equippable.getBoolean("damage_on_hurt");
|
||||
data.set(StructuredDataKey.EQUIPPABLE, new Equippable(equipmentSlot, soundEvent, model, cameraOverlay, allowedEntities, dispensable, swappable, damageOnHurt));
|
||||
data.set(StructuredDataKey.EQUIPPABLE1_21_2, new Equippable(equipmentSlot, soundEvent, model, cameraOverlay, allowedEntities, dispensable, swappable, damageOnHurt));
|
||||
}
|
||||
|
||||
final ByteTag glider = backupTag.getByteTag("glider");
|
||||
@@ -563,7 +562,7 @@ public final class BlockItemPacketRewriter1_21_2 extends BackwardsStructuredItem
|
||||
|
||||
final String tooltipStyle = backupTag.getString("tooltip_style");
|
||||
if (tooltipStyle != null) {
|
||||
data.set(StructuredDataKey.TOOLTIP_STYLE, tooltipStyle);
|
||||
data.set(StructuredDataKey.TOOLTIP_STYLE, Key.of(tooltipStyle));
|
||||
}
|
||||
|
||||
final ListTag<CompoundTag> deathProtection = backupTag.getListTag("death_protection", CompoundTag.class);
|
||||
|
||||
+6
-14
@@ -18,14 +18,16 @@
|
||||
package com.viaversion.viabackwards.protocol.v1_21_2to1_21.rewriter;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.Protocol1_21_2To1_21;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.rewriter.BlockItemPacketRewriter1_21_2;
|
||||
import com.viaversion.viaversion.util.SerializerVersion;
|
||||
import com.viaversion.viaversion.util.TagUtil;
|
||||
|
||||
public final class ComponentRewriter1_21_2 extends TranslatableRewriter<ClientboundPacket1_21_2> {
|
||||
public final class ComponentRewriter1_21_2 extends JsonNBTComponentRewriter<ClientboundPacket1_21_2> {
|
||||
|
||||
public ComponentRewriter1_21_2(final Protocol1_21_2To1_21 protocol) {
|
||||
super(protocol, ReadType.NBT);
|
||||
@@ -54,18 +56,8 @@ public final class ComponentRewriter1_21_2 extends TranslatableRewriter<Clientbo
|
||||
food.putFloat("eat_seconds", 1.6F);
|
||||
}
|
||||
|
||||
TagUtil.removeNamespaced(componentsTag, "repairable");
|
||||
TagUtil.removeNamespaced(componentsTag, "enchantable");
|
||||
TagUtil.removeNamespaced(componentsTag, "consumable");
|
||||
TagUtil.removeNamespaced(componentsTag, "use_remainder");
|
||||
TagUtil.removeNamespaced(componentsTag, "use_cooldown");
|
||||
TagUtil.removeNamespaced(componentsTag, "item_model");
|
||||
TagUtil.removeNamespaced(componentsTag, "equippable");
|
||||
TagUtil.removeNamespaced(componentsTag, "glider");
|
||||
TagUtil.removeNamespaced(componentsTag, "tooltip_style");
|
||||
TagUtil.removeNamespaced(componentsTag, "death_protection");
|
||||
TagUtil.removeNamespaced(componentsTag, "damage_resistant");
|
||||
TagUtil.removeNamespaced(componentsTag, "lock");
|
||||
removeDataComponents(componentsTag, BlockItemPacketRewriter1_21_2.NEW_DATA_TO_REMOVE);
|
||||
removeDataComponents(componentsTag, StructuredDataKey.DAMAGE_RESISTANT, StructuredDataKey.LOCK); // No point in updating these
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+38
-39
@@ -36,8 +36,7 @@ import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPackets1_20_5;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundConfigurationPackets1_21;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundPackets1_21;
|
||||
@@ -66,12 +65,12 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
private boolean warned = ViaBackwards.getConfig().suppressEmulationWarnings();
|
||||
|
||||
public EntityPacketRewriter1_21_2(final Protocol1_21_2To1_21 protocol) {
|
||||
super(protocol, Types1_21.ENTITY_DATA_TYPES.optionalComponentType, Types1_21.ENTITY_DATA_TYPES.booleanType);
|
||||
super(protocol, VersionedTypes.V1_21.entityDataTypes.optionalComponentType, VersionedTypes.V1_21.entityDataTypes.booleanType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerPackets() {
|
||||
registerSetEntityData(ClientboundPackets1_21_2.SET_ENTITY_DATA, Types1_21_2.ENTITY_DATA_LIST, Types1_21.ENTITY_DATA_LIST);
|
||||
registerSetEntityData(ClientboundPackets1_21_2.SET_ENTITY_DATA);
|
||||
registerRemoveEntities(ClientboundPackets1_21_2.REMOVE_ENTITIES);
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.ADD_ENTITY, wrapper -> {
|
||||
final int entityId = wrapper.passthrough(Types.VAR_INT);
|
||||
@@ -94,11 +93,11 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
// Add boat type to entity data
|
||||
final List<EntityData> data = new ArrayList<>();
|
||||
final int boatType = type.isOrHasParent(EntityTypes1_21_2.ABSTRACT_CHEST_BOAT) ? chestBoatTypeFromEntityType(type) : boatTypeFromEntityType(type);
|
||||
data.add(new EntityData(11, Types1_21.ENTITY_DATA_TYPES.varIntType, boatType));
|
||||
data.add(new EntityData(11, VersionedTypes.V1_21.entityDataTypes.varIntType, boatType));
|
||||
|
||||
final PacketWrapper entityDataPacket = wrapper.create(ClientboundPackets1_21.SET_ENTITY_DATA);
|
||||
entityDataPacket.write(Types.VAR_INT, entityId);
|
||||
entityDataPacket.write(Types1_21.ENTITY_DATA_LIST, data);
|
||||
entityDataPacket.write(VersionedTypes.V1_21.entityDataList, data);
|
||||
entityDataPacket.send(Protocol1_21_2To1_21.class);
|
||||
}
|
||||
});
|
||||
@@ -193,8 +192,8 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_2.PLAYER_ROTATION, ClientboundPackets1_21.PLAYER_LOOK_AT, wrapper -> {
|
||||
final float yaw = wrapper.passthrough(Types.FLOAT);
|
||||
final float pitch = wrapper.passthrough(Types.FLOAT);
|
||||
final float yaw = wrapper.read(Types.FLOAT);
|
||||
final float pitch = wrapper.read(Types.FLOAT);
|
||||
|
||||
final double yRadians = Math.toRadians(yaw);
|
||||
final double xRadians = Math.toRadians(pitch);
|
||||
@@ -291,15 +290,15 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
|
||||
byte updatedFlags = 0;
|
||||
if (forward > 0) {
|
||||
updatedFlags |= 1;
|
||||
updatedFlags |= 1; // Forward
|
||||
} else if (forward < 0) {
|
||||
updatedFlags |= 1 << 1;
|
||||
updatedFlags |= 1 << 1; // Backward
|
||||
}
|
||||
|
||||
if (sideways < 0) {
|
||||
updatedFlags |= 1 << 2;
|
||||
} else if (sideways > 0) {
|
||||
updatedFlags |= 1 << 3;
|
||||
if (sideways > 0) {
|
||||
updatedFlags |= 1 << 2; // Left
|
||||
} else if (sideways < 0) {
|
||||
updatedFlags |= 1 << 3; // Right
|
||||
}
|
||||
|
||||
if ((flags & 1) != 0) { // Jumping
|
||||
@@ -317,14 +316,7 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
|
||||
// Player input no longer sets the sneaking state on the server
|
||||
// Send the change separately if needed (= when in a vehicle and player commands aren't sent by the old client)
|
||||
final PlayerStorage sneakingStorage = wrapper.user().get(PlayerStorage.class);
|
||||
if (sneakingStorage.setSneaking(sneaking)) {
|
||||
final PacketWrapper playerCommandPacket = wrapper.create(ServerboundPackets1_21_2.PLAYER_COMMAND);
|
||||
playerCommandPacket.write(Types.VAR_INT, tracker(wrapper.user()).clientEntityId());
|
||||
playerCommandPacket.write(Types.VAR_INT, sneaking ? 0 : 1); // Start/stop sneaking
|
||||
playerCommandPacket.write(Types.VAR_INT, 0); // Data
|
||||
playerCommandPacket.sendToServer(Protocol1_21_2To1_21.class);
|
||||
}
|
||||
sendSneakingPlayerCommand(wrapper, sneaking);
|
||||
});
|
||||
|
||||
protocol.registerServerbound(ServerboundPackets1_20_5.MOVE_PLAYER_POS, wrapper -> {
|
||||
@@ -385,13 +377,7 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
wrapper.passthrough(Types.UUID);
|
||||
if (actions.get(0)) {
|
||||
wrapper.passthrough(Types.STRING); // Player Name
|
||||
|
||||
final int properties = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int j = 0; j < properties; j++) {
|
||||
wrapper.passthrough(Types.STRING); // Name
|
||||
wrapper.passthrough(Types.STRING); // Value
|
||||
wrapper.passthrough(Types.OPTIONAL_STRING); // Signature
|
||||
}
|
||||
wrapper.passthrough(Types.PROFILE_PROPERTY_ARRAY);
|
||||
}
|
||||
if (actions.get(1) && wrapper.passthrough(Types.BOOLEAN)) {
|
||||
wrapper.passthrough(Types.UUID); // Session UUID
|
||||
@@ -423,6 +409,7 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
final ClientVehicleStorage storage = wrapper.user().get(ClientVehicleStorage.class);
|
||||
if (storage != null && vehicleId == storage.vehicleId()) {
|
||||
wrapper.user().remove(ClientVehicleStorage.class);
|
||||
sendSneakingPlayerCommand(wrapper, false);
|
||||
}
|
||||
|
||||
final int clientEntityId = tracker(wrapper.user()).clientEntityId();
|
||||
@@ -443,6 +430,7 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
for (final int entityId : entityIds) {
|
||||
if (entityId == vehicleStorage.vehicleId()) {
|
||||
wrapper.user().remove(ClientVehicleStorage.class);
|
||||
sendSneakingPlayerCommand(wrapper, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -544,8 +532,8 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
explosionPacket.write(Types.FLOAT, (float) movementY);
|
||||
explosionPacket.write(Types.FLOAT, (float) movementZ);
|
||||
explosionPacket.write(Types.VAR_INT, 0); // Block interaction
|
||||
explosionPacket.write(Types1_21.PARTICLE, new Particle(0)); // Small explosion
|
||||
explosionPacket.write(Types1_21.PARTICLE, new Particle(0)); // Large explosion
|
||||
explosionPacket.write(VersionedTypes.V1_21.particle(), new Particle(0)); // Small explosion
|
||||
explosionPacket.write(VersionedTypes.V1_21.particle(), new Particle(0)); // Large explosion
|
||||
explosionPacket.write(Types.SOUND_EVENT, Holder.of(new SoundEvent("", null))); // Explosion sound
|
||||
|
||||
explosionPacket.send(Protocol1_21_2To1_21.class);
|
||||
@@ -568,6 +556,17 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
}
|
||||
}
|
||||
|
||||
private void sendSneakingPlayerCommand(final PacketWrapper wrapper, final boolean sneaking) {
|
||||
final PlayerStorage sneakingStorage = wrapper.user().get(PlayerStorage.class);
|
||||
if (sneakingStorage.setSneaking(sneaking)) {
|
||||
final PacketWrapper playerCommandPacket = wrapper.create(ServerboundPackets1_21_2.PLAYER_COMMAND);
|
||||
playerCommandPacket.write(Types.VAR_INT, tracker(wrapper.user()).clientEntityId());
|
||||
playerCommandPacket.write(Types.VAR_INT, sneaking ? 0 : 1); // Start/stop sneaking
|
||||
playerCommandPacket.write(Types.VAR_INT, 0); // Data
|
||||
playerCommandPacket.sendToServer(Protocol1_21_2To1_21.class);
|
||||
}
|
||||
}
|
||||
|
||||
private int boatTypeFromEntityType(final EntityType type) {
|
||||
if (type == EntityTypes1_21_2.OAK_BOAT) {
|
||||
return 0;
|
||||
@@ -623,15 +622,15 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
||||
|
||||
@Override
|
||||
protected void registerRewrites() {
|
||||
filter().mapDataType(Types1_21.ENTITY_DATA_TYPES::byId);
|
||||
filter().mapDataType(VersionedTypes.V1_21.entityDataTypes::byId);
|
||||
registerEntityDataTypeHandler1_20_3(
|
||||
Types1_21.ENTITY_DATA_TYPES.itemType,
|
||||
Types1_21.ENTITY_DATA_TYPES.blockStateType,
|
||||
Types1_21.ENTITY_DATA_TYPES.optionalBlockStateType,
|
||||
Types1_21.ENTITY_DATA_TYPES.particleType,
|
||||
Types1_21.ENTITY_DATA_TYPES.particlesType,
|
||||
Types1_21.ENTITY_DATA_TYPES.componentType,
|
||||
Types1_21.ENTITY_DATA_TYPES.optionalComponentType
|
||||
VersionedTypes.V1_21.entityDataTypes.itemType,
|
||||
VersionedTypes.V1_21.entityDataTypes.blockStateType,
|
||||
VersionedTypes.V1_21.entityDataTypes.optionalBlockStateType,
|
||||
VersionedTypes.V1_21.entityDataTypes.particleType,
|
||||
VersionedTypes.V1_21.entityDataTypes.particlesType,
|
||||
VersionedTypes.V1_21.entityDataTypes.componentType,
|
||||
VersionedTypes.V1_21.entityDataTypes.optionalComponentType
|
||||
);
|
||||
registerBlockStateHandler(EntityTypes1_21_2.ABSTRACT_MINECART, 11);
|
||||
|
||||
|
||||
+1
-3
@@ -21,15 +21,13 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.Particle;
|
||||
import com.viaversion.viaversion.api.protocol.Protocol;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_2;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
|
||||
public final class ParticleRewriter1_21_2 extends ParticleRewriter<ClientboundPacket1_21_2> {
|
||||
|
||||
public ParticleRewriter1_21_2(final Protocol<ClientboundPacket1_21_2, ?, ?, ?> protocol) {
|
||||
super(protocol, Types1_21_2.PARTICLE, Types1_21.PARTICLE);
|
||||
super(protocol);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
-4
@@ -26,7 +26,7 @@ import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||
import com.viaversion.viaversion.api.minecraft.item.StructuredItem;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundPackets1_21;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
@@ -77,11 +77,11 @@ public final class RecipeStorage implements StorableObject {
|
||||
for (int i = 0; i < ingredient.length; i++) {
|
||||
copy[i] = ingredient[i].copy();
|
||||
}
|
||||
wrapper.write(Types1_21_2.ITEM_ARRAY, copy);
|
||||
wrapper.write(VersionedTypes.V1_21_2.itemArray(), copy);
|
||||
}
|
||||
|
||||
void writeResult(final PacketWrapper wrapper, final Item result) {
|
||||
wrapper.write(Types1_21_2.ITEM, result.copy());
|
||||
wrapper.write(VersionedTypes.V1_21_2.item(), result.copy());
|
||||
}
|
||||
|
||||
void writeCategory(final PacketWrapper wrapper) {
|
||||
@@ -286,7 +286,7 @@ public final class RecipeStorage implements StorableObject {
|
||||
yield new Item[]{new StructuredItem(rewriteItemId(id), 1)};
|
||||
}
|
||||
case 3 -> {
|
||||
final Item item = wrapper.read(Types1_21_2.ITEM);
|
||||
final Item item = wrapper.read(VersionedTypes.V1_21_2.item());
|
||||
protocol.getItemRewriter().handleItemToClient(wrapper.user(), item);
|
||||
if (item.isEmpty()) {
|
||||
protocol.getLogger().warning("Empty item in recipe");
|
||||
|
||||
+31
-29
@@ -20,46 +20,48 @@ package com.viaversion.viabackwards.protocol.v1_21_2to1_21.task;
|
||||
import com.viaversion.viabackwards.ViaBackwards;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.Protocol1_21_2To1_21;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.storage.PlayerStorage;
|
||||
import com.viaversion.viaversion.api.Via;
|
||||
import com.viaversion.viaversion.api.connection.ProtocolInfo;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.packet.State;
|
||||
import com.viaversion.viaversion.protocol.ProtocolRunnable;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ServerboundPackets1_21_2;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.storage.ClientVehicleStorage;
|
||||
import io.netty.channel.Channel;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public final class PlayerPacketsTickTask implements Runnable {
|
||||
public final class PlayerPacketsTickTask extends ProtocolRunnable {
|
||||
|
||||
public PlayerPacketsTickTask() {
|
||||
super(Protocol1_21_2To1_21.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (final UserConnection user : Via.getManager().getConnectionManager().getConnections()) {
|
||||
final ProtocolInfo protocolInfo = user.getProtocolInfo();
|
||||
if (protocolInfo.getClientState() != State.PLAY || protocolInfo.getServerState() != State.PLAY || !protocolInfo.getPipeline().contains(Protocol1_21_2To1_21.class)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final Channel channel = user.getChannel();
|
||||
channel.eventLoop().submit(() -> {
|
||||
if (!channel.isActive() || protocolInfo.getClientState() != State.PLAY || protocolInfo.getServerState() != State.PLAY) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (!user.has(ClientVehicleStorage.class)) {
|
||||
final PlayerStorage playerStorage = user.get(PlayerStorage.class);
|
||||
playerStorage.tick(user);
|
||||
}
|
||||
} catch (final Throwable t) {
|
||||
ViaBackwards.getPlatform().getLogger().log(Level.SEVERE, "Error while sending player input packet.", t);
|
||||
}
|
||||
try {
|
||||
final PacketWrapper clientTickEndPacket = PacketWrapper.create(ServerboundPackets1_21_2.CLIENT_TICK_END, user);
|
||||
clientTickEndPacket.sendToServer(Protocol1_21_2To1_21.class);
|
||||
} catch (final Throwable t) {
|
||||
ViaBackwards.getPlatform().getLogger().log(Level.SEVERE, "Error while sending client tick end packet.", t);
|
||||
}
|
||||
});
|
||||
public void run(final UserConnection connection) {
|
||||
final ProtocolInfo protocolInfo = connection.getProtocolInfo();
|
||||
if (protocolInfo.getClientState() != State.PLAY || protocolInfo.getServerState() != State.PLAY) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Channel channel = connection.getChannel();
|
||||
channel.eventLoop().submit(() -> {
|
||||
if (!channel.isActive() || protocolInfo.getClientState() != State.PLAY || protocolInfo.getServerState() != State.PLAY) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (!connection.has(ClientVehicleStorage.class)) {
|
||||
final PlayerStorage playerStorage = connection.get(PlayerStorage.class);
|
||||
playerStorage.tick(connection);
|
||||
}
|
||||
} catch (final Throwable t) {
|
||||
ViaBackwards.getPlatform().getLogger().log(Level.SEVERE, "Error while sending player input packet.", t);
|
||||
}
|
||||
try {
|
||||
final PacketWrapper clientTickEndPacket = PacketWrapper.create(ServerboundPackets1_21_2.CLIENT_TICK_END, connection);
|
||||
clientTickEndPacket.sendToServer(Protocol1_21_2To1_21.class);
|
||||
} catch (final Throwable t) {
|
||||
ViaBackwards.getPlatform().getLogger().log(Level.SEVERE, "Error while sending client tick end packet.", t);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+21
-15
@@ -20,7 +20,7 @@ package com.viaversion.viabackwards.protocol.v1_21_4to1_21_2;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_4to1_21_2.rewriter.BlockItemPacketRewriter1_21_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_4to1_21_2.rewriter.ComponentRewriter1_21_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_4to1_21_2.rewriter.EntityPacketRewriter1_21_4;
|
||||
@@ -29,11 +29,12 @@ import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.Particle;
|
||||
import com.viaversion.viaversion.api.minecraft.RegistryType;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_4;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.ChatType;
|
||||
import com.viaversion.viaversion.api.protocol.packet.provider.PacketTypesProvider;
|
||||
import com.viaversion.viaversion.api.protocol.packet.provider.SimplePacketTypesProvider;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_4;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypesHolder;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundConfigurationPackets1_20_5;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundConfigurationPackets1_21;
|
||||
@@ -59,7 +60,7 @@ public final class Protocol1_21_4To1_21_2 extends BackwardsProtocol<ClientboundP
|
||||
private final EntityPacketRewriter1_21_4 entityRewriter = new EntityPacketRewriter1_21_4(this);
|
||||
private final BlockItemPacketRewriter1_21_4 itemRewriter = new BlockItemPacketRewriter1_21_4(this);
|
||||
private final ParticleRewriter<ClientboundPacket1_21_2> particleRewriter = new ParticleRewriter1_21_4(this);
|
||||
private final TranslatableRewriter<ClientboundPacket1_21_2> translatableRewriter = new ComponentRewriter1_21_4(this);
|
||||
private final JsonNBTComponentRewriter<ClientboundPacket1_21_2> translatableRewriter = new ComponentRewriter1_21_4(this);
|
||||
private final TagRewriter<ClientboundPacket1_21_2> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_21_4To1_21_2() {
|
||||
@@ -81,7 +82,7 @@ public final class Protocol1_21_4To1_21_2 extends BackwardsProtocol<ClientboundP
|
||||
new StatisticsRewriter<>(this).register(ClientboundPackets1_21_2.AWARD_STATS);
|
||||
new AttributeRewriter<>(this).register1_21(ClientboundPackets1_21_2.UPDATE_ATTRIBUTES);
|
||||
|
||||
translatableRewriter.registerOpenScreen(ClientboundPackets1_21_2.OPEN_SCREEN);
|
||||
translatableRewriter.registerOpenScreen1_14(ClientboundPackets1_21_2.OPEN_SCREEN);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SET_ACTION_BAR_TEXT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SET_TITLE_TEXT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SET_SUBTITLE_TEXT);
|
||||
@@ -90,7 +91,8 @@ public final class Protocol1_21_4To1_21_2 extends BackwardsProtocol<ClientboundP
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_21_2.TAB_LIST);
|
||||
translatableRewriter.registerPlayerCombatKill1_20(ClientboundPackets1_21_2.PLAYER_COMBAT_KILL);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.SYSTEM_CHAT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_2.DISGUISED_CHAT);
|
||||
translatableRewriter.registerDisguisedChat(ClientboundPackets1_21_2.DISGUISED_CHAT);
|
||||
translatableRewriter.registerPlayerChat(ClientboundPackets1_21_2.PLAYER_CHAT, ChatType.TYPE);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
particleRewriter.registerExplode1_21_2(ClientboundPackets1_21_2.EXPLODE);
|
||||
@@ -105,7 +107,7 @@ public final class Protocol1_21_4To1_21_2 extends BackwardsProtocol<ClientboundP
|
||||
wrapper.passthrough(Types.FLOAT); // Offset Z
|
||||
wrapper.passthrough(Types.FLOAT); // Particle Data
|
||||
wrapper.passthrough(Types.INT); // Particle Count
|
||||
final Particle particle = wrapper.passthroughAndMap(Types1_21_4.PARTICLE, Types1_21_2.PARTICLE);
|
||||
final Particle particle = wrapper.passthroughAndMap(VersionedTypes.V1_21_4.particle(), VersionedTypes.V1_21_2.particle());
|
||||
particleRewriter.rewriteParticle(wrapper.user(), particle);
|
||||
});
|
||||
|
||||
@@ -130,13 +132,7 @@ public final class Protocol1_21_4To1_21_2 extends BackwardsProtocol<ClientboundP
|
||||
wrapper.passthrough(Types.UUID);
|
||||
if (actions.get(0)) {
|
||||
wrapper.passthrough(Types.STRING); // Player Name
|
||||
|
||||
final int properties = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int j = 0; j < properties; j++) {
|
||||
wrapper.passthrough(Types.STRING); // Name
|
||||
wrapper.passthrough(Types.STRING); // Value
|
||||
wrapper.passthrough(Types.OPTIONAL_STRING); // Signature
|
||||
}
|
||||
wrapper.passthrough(Types.PROFILE_PROPERTY_ARRAY);
|
||||
}
|
||||
if (actions.get(1) && wrapper.passthrough(Types.BOOLEAN)) {
|
||||
wrapper.passthrough(Types.UUID); // Session UUID
|
||||
@@ -199,7 +195,7 @@ public final class Protocol1_21_4To1_21_2 extends BackwardsProtocol<ClientboundP
|
||||
}
|
||||
|
||||
@Override
|
||||
public TranslatableRewriter<ClientboundPacket1_21_2> getComponentRewriter() {
|
||||
public JsonNBTComponentRewriter<ClientboundPacket1_21_2> getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
@@ -208,6 +204,16 @@ public final class Protocol1_21_4To1_21_2 extends BackwardsProtocol<ClientboundP
|
||||
return tagRewriter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VersionedTypesHolder types() {
|
||||
return VersionedTypes.V1_21_4;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VersionedTypesHolder mappedTypes() {
|
||||
return VersionedTypes.V1_21_2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PacketTypesProvider<ClientboundPacket1_21_2, ClientboundPacket1_21_2, ServerboundPacket1_21_4, ServerboundPacket1_21_2> createPacketTypesProvider() {
|
||||
return new SimplePacketTypesProvider<>(
|
||||
|
||||
+1
-6
@@ -32,8 +32,6 @@ import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.CustomModelData1_21_4;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_4;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ServerboundPacket1_21_2;
|
||||
@@ -47,10 +45,7 @@ import static com.viaversion.viaversion.protocols.v1_21_2to1_21_4.rewriter.Block
|
||||
public final class BlockItemPacketRewriter1_21_4 extends BackwardsStructuredItemRewriter<ClientboundPacket1_21_2, ServerboundPacket1_21_2, Protocol1_21_4To1_21_2> {
|
||||
|
||||
public BlockItemPacketRewriter1_21_4(final Protocol1_21_4To1_21_2 protocol) {
|
||||
super(protocol,
|
||||
Types1_21_4.ITEM, Types1_21_4.ITEM_ARRAY, Types1_21_2.ITEM, Types1_21_2.ITEM_ARRAY,
|
||||
Types1_21_4.ITEM_COST, Types1_21_4.OPTIONAL_ITEM_COST, Types1_21_2.ITEM_COST, Types1_21_2.OPTIONAL_ITEM_COST
|
||||
);
|
||||
super(protocol);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
-5
@@ -19,13 +19,13 @@ package com.viaversion.viabackwards.protocol.v1_21_4to1_21_2.rewriter;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.JsonNBTComponentRewriter;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||
import com.viaversion.viaversion.util.SerializerVersion;
|
||||
import com.viaversion.viaversion.util.TagUtil;
|
||||
|
||||
public final class ComponentRewriter1_21_4 extends TranslatableRewriter<ClientboundPacket1_21_2> {
|
||||
public final class ComponentRewriter1_21_4 extends JsonNBTComponentRewriter<ClientboundPacket1_21_2> {
|
||||
|
||||
public ComponentRewriter1_21_4(final BackwardsProtocol<ClientboundPacket1_21_2, ?, ?, ?> protocol) {
|
||||
super(protocol, ReadType.NBT);
|
||||
@@ -38,8 +38,7 @@ public final class ComponentRewriter1_21_4 extends TranslatableRewriter<Clientbo
|
||||
return;
|
||||
}
|
||||
|
||||
TagUtil.removeNamespaced(componentsTag, "custom_model_data");
|
||||
TagUtil.removeNamespaced(componentsTag, "trim");
|
||||
removeDataComponents(componentsTag, StructuredDataKey.CUSTOM_MODEL_DATA1_21_4, StructuredDataKey.TRIM1_21_4);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+12
-13
@@ -27,8 +27,7 @@ import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_4;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_4;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundConfigurationPackets1_21;
|
||||
import com.viaversion.viaversion.protocols.v1_21_2to1_21_4.packet.ServerboundPackets1_21_4;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||
@@ -40,13 +39,13 @@ import com.viaversion.viaversion.util.Key;
|
||||
public final class EntityPacketRewriter1_21_4 extends EntityRewriter<ClientboundPacket1_21_2, Protocol1_21_4To1_21_2> {
|
||||
|
||||
public EntityPacketRewriter1_21_4(final Protocol1_21_4To1_21_2 protocol) {
|
||||
super(protocol, Types1_21_4.ENTITY_DATA_TYPES.optionalComponentType, Types1_21_4.ENTITY_DATA_TYPES.booleanType);
|
||||
super(protocol, VersionedTypes.V1_21_4.entityDataTypes.optionalComponentType, VersionedTypes.V1_21_4.entityDataTypes.booleanType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerPackets() {
|
||||
registerTrackerWithData1_19(ClientboundPackets1_21_2.ADD_ENTITY, EntityTypes1_21_4.FALLING_BLOCK);
|
||||
registerSetEntityData(ClientboundPackets1_21_2.SET_ENTITY_DATA, Types1_21_4.ENTITY_DATA_LIST, Types1_21_2.ENTITY_DATA_LIST);
|
||||
registerSetEntityData(ClientboundPackets1_21_2.SET_ENTITY_DATA);
|
||||
registerRemoveEntities(ClientboundPackets1_21_2.REMOVE_ENTITIES);
|
||||
|
||||
final RegistryDataRewriter registryDataRewriter = new RegistryDataRewriter(protocol) {
|
||||
@@ -147,15 +146,15 @@ public final class EntityPacketRewriter1_21_4 extends EntityRewriter<Clientbound
|
||||
|
||||
@Override
|
||||
protected void registerRewrites() {
|
||||
filter().mapDataType(Types1_21_2.ENTITY_DATA_TYPES::byId);
|
||||
filter().mapDataType(VersionedTypes.V1_21_2.entityDataTypes::byId);
|
||||
registerEntityDataTypeHandler1_20_3(
|
||||
Types1_21_2.ENTITY_DATA_TYPES.itemType,
|
||||
Types1_21_2.ENTITY_DATA_TYPES.blockStateType,
|
||||
Types1_21_2.ENTITY_DATA_TYPES.optionalBlockStateType,
|
||||
Types1_21_2.ENTITY_DATA_TYPES.particleType,
|
||||
Types1_21_2.ENTITY_DATA_TYPES.particlesType,
|
||||
Types1_21_2.ENTITY_DATA_TYPES.componentType,
|
||||
Types1_21_2.ENTITY_DATA_TYPES.optionalComponentType
|
||||
VersionedTypes.V1_21_2.entityDataTypes.itemType,
|
||||
VersionedTypes.V1_21_2.entityDataTypes.blockStateType,
|
||||
VersionedTypes.V1_21_2.entityDataTypes.optionalBlockStateType,
|
||||
VersionedTypes.V1_21_2.entityDataTypes.particleType,
|
||||
VersionedTypes.V1_21_2.entityDataTypes.particlesType,
|
||||
VersionedTypes.V1_21_2.entityDataTypes.componentType,
|
||||
VersionedTypes.V1_21_2.entityDataTypes.optionalComponentType
|
||||
);
|
||||
registerBlockStateHandler(EntityTypes1_21_4.ABSTRACT_MINECART, 11);
|
||||
|
||||
@@ -168,7 +167,7 @@ public final class EntityPacketRewriter1_21_4 extends EntityRewriter<Clientbound
|
||||
case 2 -> "large";
|
||||
default -> "medium";
|
||||
};
|
||||
data.setTypeAndValue(Types1_21_4.ENTITY_DATA_TYPES.stringType, type);
|
||||
data.setTypeAndValue(VersionedTypes.V1_21_4.entityDataTypes.stringType, type);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+1
-3
@@ -20,15 +20,13 @@ package com.viaversion.viabackwards.protocol.v1_21_4to1_21_2.rewriter;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.Particle;
|
||||
import com.viaversion.viaversion.api.protocol.Protocol;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_2;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_21_4;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
|
||||
public final class ParticleRewriter1_21_4 extends ParticleRewriter<ClientboundPacket1_21_2> {
|
||||
|
||||
public ParticleRewriter1_21_4(final Protocol<ClientboundPacket1_21_2, ?, ?, ?> protocol) {
|
||||
super(protocol, Types1_21_4.PARTICLE, Types1_21_2.PARTICLE);
|
||||
super(protocol);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+240
@@ -0,0 +1,240 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_21_5to1_21_4;
|
||||
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
|
||||
import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.rewriter.BlockItemPacketRewriter1_21_5;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.rewriter.ComponentRewriter1_21_5;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.rewriter.EntityPacketRewriter1_21_5;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.storage.HashedItemConverterStorage;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.minecraft.Particle;
|
||||
import com.viaversion.viaversion.api.minecraft.data.version.StructuredDataKeys1_21_2;
|
||||
import com.viaversion.viaversion.api.minecraft.data.version.StructuredDataKeys1_21_5;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_4;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_21_2;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_21_5;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.ChatType;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.protocol.packet.provider.PacketTypesProvider;
|
||||
import com.viaversion.viaversion.api.protocol.packet.provider.SimplePacketTypesProvider;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.Types1_20_5;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.data.entity.EntityTrackerBase;
|
||||
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.rewriter.CommandRewriter1_19_4;
|
||||
import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundConfigurationPackets1_20_5;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundConfigurationPackets1_21;
|
||||
import com.viaversion.viaversion.protocols.v1_21_2to1_21_4.packet.ServerboundPacket1_21_4;
|
||||
import com.viaversion.viaversion.protocols.v1_21_2to1_21_4.packet.ServerboundPackets1_21_4;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.Protocol1_21_4To1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ClientboundPacket1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ClientboundPackets1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ServerboundPacket1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ServerboundPackets1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPacket1_21_2;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
|
||||
import com.viaversion.viaversion.rewriter.ParticleRewriter;
|
||||
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
|
||||
import com.viaversion.viaversion.rewriter.TagRewriter;
|
||||
import com.viaversion.viaversion.util.Key;
|
||||
|
||||
import static com.viaversion.viaversion.util.ProtocolUtil.packetTypeMap;
|
||||
|
||||
public final class Protocol1_21_5To1_21_4 extends BackwardsProtocol<ClientboundPacket1_21_5, ClientboundPacket1_21_2, ServerboundPacket1_21_5, ServerboundPacket1_21_4> {
|
||||
|
||||
public static final BackwardsMappingData MAPPINGS = new BackwardsMappingData("1.21.5", "1.21.4", Protocol1_21_4To1_21_5.class);
|
||||
private final EntityPacketRewriter1_21_5 entityRewriter = new EntityPacketRewriter1_21_5(this);
|
||||
private final BlockItemPacketRewriter1_21_5 itemRewriter = new BlockItemPacketRewriter1_21_5(this);
|
||||
private final ParticleRewriter<ClientboundPacket1_21_5> particleRewriter = new ParticleRewriter<>(this) {
|
||||
@Override
|
||||
public void rewriteParticle(final UserConnection connection, final Particle particle) {
|
||||
if (particle.id() == MAPPINGS.getParticleMappings().id("tinted_leaves")) {
|
||||
particle.getArguments().clear();
|
||||
}
|
||||
super.rewriteParticle(connection, particle);
|
||||
}
|
||||
};
|
||||
private final ComponentRewriter1_21_5 translatableRewriter = new ComponentRewriter1_21_5(this);
|
||||
private final TagRewriter<ClientboundPacket1_21_5> tagRewriter = new TagRewriter<>(this);
|
||||
|
||||
public Protocol1_21_5To1_21_4() {
|
||||
super(ClientboundPacket1_21_5.class, ClientboundPacket1_21_2.class, ServerboundPacket1_21_5.class, ServerboundPacket1_21_4.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerPackets() {
|
||||
super.registerPackets();
|
||||
|
||||
tagRewriter.registerGeneric(ClientboundPackets1_21_5.UPDATE_TAGS);
|
||||
tagRewriter.registerGeneric(ClientboundConfigurationPackets1_21.UPDATE_TAGS);
|
||||
|
||||
final SoundRewriter<ClientboundPacket1_21_5> soundRewriter = new SoundRewriter<>(this);
|
||||
soundRewriter.registerSound1_19_3(ClientboundPackets1_21_5.SOUND);
|
||||
soundRewriter.registerSound1_19_3(ClientboundPackets1_21_5.SOUND_ENTITY);
|
||||
soundRewriter.registerStopSound(ClientboundPackets1_21_5.STOP_SOUND);
|
||||
|
||||
new StatisticsRewriter<>(this).register(ClientboundPackets1_21_5.AWARD_STATS);
|
||||
|
||||
translatableRewriter.registerOpenScreen1_14(ClientboundPackets1_21_5.OPEN_SCREEN);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_5.SET_ACTION_BAR_TEXT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_5.SET_TITLE_TEXT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_5.SET_SUBTITLE_TEXT);
|
||||
translatableRewriter.registerBossEvent(ClientboundPackets1_21_5.BOSS_EVENT);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_5.DISCONNECT);
|
||||
translatableRewriter.registerTabList(ClientboundPackets1_21_5.TAB_LIST);
|
||||
translatableRewriter.registerPlayerCombatKill1_20(ClientboundPackets1_21_5.PLAYER_COMBAT_KILL);
|
||||
translatableRewriter.registerComponentPacket(ClientboundPackets1_21_5.SYSTEM_CHAT);
|
||||
translatableRewriter.registerDisguisedChat(ClientboundPackets1_21_5.DISGUISED_CHAT);
|
||||
translatableRewriter.registerPlayerInfoUpdate1_21_4(ClientboundPackets1_21_5.PLAYER_INFO_UPDATE);
|
||||
translatableRewriter.registerPing();
|
||||
|
||||
particleRewriter.registerLevelParticles1_21_4(ClientboundPackets1_21_5.LEVEL_PARTICLES);
|
||||
particleRewriter.registerExplode1_21_2(ClientboundPackets1_21_5.EXPLODE);
|
||||
|
||||
new CommandRewriter1_19_4<>(this) {
|
||||
@Override
|
||||
public void handleArgument(final PacketWrapper wrapper, final String argumentType) {
|
||||
if (argumentType.equals("minecraft:resource")) {
|
||||
String resource = wrapper.read(Types.STRING);
|
||||
if (Key.equals(resource, "test_instance")) {
|
||||
resource = "minecraft:item"; // Just give it anything else
|
||||
}
|
||||
wrapper.write(Types.STRING, resource);
|
||||
} else if (argumentType.equals("minecraft:resource_selector")) {
|
||||
wrapper.read(Types.STRING); // Selector
|
||||
wrapper.write(Types.VAR_INT, 1); // Quotable string
|
||||
} else {
|
||||
super.handleArgument(wrapper, argumentType);
|
||||
}
|
||||
}
|
||||
}.registerDeclareCommands1_19(ClientboundPackets1_21_5.COMMANDS);
|
||||
|
||||
registerClientbound(ClientboundPackets1_21_5.PLAYER_CHAT, wrapper -> {
|
||||
wrapper.read(Types.VAR_INT); // Index
|
||||
|
||||
wrapper.passthrough(Types.UUID); // Sender
|
||||
wrapper.passthrough(Types.VAR_INT); // Index
|
||||
wrapper.passthrough(Types.OPTIONAL_SIGNATURE_BYTES); // Signature
|
||||
wrapper.passthrough(Types.STRING); // Plain content
|
||||
wrapper.passthrough(Types.LONG); // Timestamp
|
||||
wrapper.passthrough(Types.LONG); // Salt
|
||||
|
||||
final int lastSeen = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int i = 0; i < lastSeen; i++) {
|
||||
final int index = wrapper.passthrough(Types.VAR_INT);
|
||||
if (index == 0) {
|
||||
wrapper.passthrough(Types.SIGNATURE_BYTES);
|
||||
}
|
||||
}
|
||||
|
||||
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.OPTIONAL_TAG)); // Unsigned content
|
||||
|
||||
final int filterMaskType = wrapper.passthrough(Types.VAR_INT);
|
||||
if (filterMaskType == 2) { // Partially filtered
|
||||
wrapper.passthrough(Types.LONG_ARRAY_PRIMITIVE); // Mask
|
||||
}
|
||||
|
||||
wrapper.passthrough(ChatType.TYPE); // Chat Type
|
||||
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.TAG)); // Name
|
||||
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.OPTIONAL_TAG)); // Target Name
|
||||
});
|
||||
registerServerbound(ServerboundPackets1_21_4.CHAT_COMMAND_SIGNED, wrapper -> {
|
||||
wrapper.passthrough(Types.STRING); // Command
|
||||
wrapper.passthrough(Types.LONG); // Timestamp
|
||||
wrapper.passthrough(Types.LONG); // Salt
|
||||
final int signatures = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int i = 0; i < signatures; i++) {
|
||||
wrapper.passthrough(Types.STRING); // Argument name
|
||||
wrapper.passthrough(Types.SIGNATURE_BYTES); // Signature
|
||||
}
|
||||
wrapper.passthrough(Types.VAR_INT); // Offset
|
||||
wrapper.passthrough(Types.ACKNOWLEDGED_BIT_SET); // Acknowledged
|
||||
wrapper.write(Types.BYTE, (byte) 0); // Checksum
|
||||
});
|
||||
registerServerbound(ServerboundPackets1_21_4.CHAT, wrapper -> {
|
||||
wrapper.passthrough(Types.STRING); // Message
|
||||
wrapper.passthrough(Types.LONG); // Timestamp
|
||||
wrapper.passthrough(Types.LONG); // Salt
|
||||
wrapper.passthrough(Types.OPTIONAL_SIGNATURE_BYTES); // Signature
|
||||
wrapper.passthrough(Types.VAR_INT); // Offset
|
||||
wrapper.passthrough(Types.ACKNOWLEDGED_BIT_SET); // Acknowledged
|
||||
wrapper.write(Types.BYTE, (byte) 0); // Checksum
|
||||
});
|
||||
|
||||
cancelClientbound(ClientboundPackets1_21_5.TEST_INSTANCE_BLOCK_STATUS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(final UserConnection user) {
|
||||
addEntityTracker(user, new EntityTrackerBase(user, EntityTypes1_21_4.PLAYER));
|
||||
user.put(new HashedItemConverterStorage(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BackwardsMappingData getMappingData() {
|
||||
return MAPPINGS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityPacketRewriter1_21_5 getEntityRewriter() {
|
||||
return entityRewriter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockItemPacketRewriter1_21_5 getItemRewriter() {
|
||||
return itemRewriter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParticleRewriter<ClientboundPacket1_21_5> getParticleRewriter() {
|
||||
return particleRewriter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComponentRewriter1_21_5 getComponentRewriter() {
|
||||
return translatableRewriter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TagRewriter<ClientboundPacket1_21_5> getTagRewriter() {
|
||||
return tagRewriter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Types1_20_5<StructuredDataKeys1_21_5, EntityDataTypes1_21_5> types() {
|
||||
return VersionedTypes.V1_21_5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Types1_20_5<StructuredDataKeys1_21_2, EntityDataTypes1_21_2> mappedTypes() {
|
||||
return VersionedTypes.V1_21_4;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PacketTypesProvider<ClientboundPacket1_21_5, ClientboundPacket1_21_2, ServerboundPacket1_21_5, ServerboundPacket1_21_4> createPacketTypesProvider() {
|
||||
return new SimplePacketTypesProvider<>(
|
||||
packetTypeMap(unmappedClientboundPacketType, ClientboundPackets1_21_5.class, ClientboundConfigurationPackets1_21.class),
|
||||
packetTypeMap(mappedClientboundPacketType, ClientboundPackets1_21_2.class, ClientboundConfigurationPackets1_21.class),
|
||||
packetTypeMap(mappedServerboundPacketType, ServerboundPackets1_21_5.class, ServerboundConfigurationPackets1_20_5.class),
|
||||
packetTypeMap(unmappedServerboundPacketType, ServerboundPackets1_21_4.class, ServerboundConfigurationPackets1_20_5.class)
|
||||
);
|
||||
}
|
||||
}
|
||||
+592
@@ -0,0 +1,592 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.rewriter;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.FloatTag;
|
||||
import com.viaversion.nbt.tag.IntArrayTag;
|
||||
import com.viaversion.nbt.tag.IntTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
import com.viaversion.nbt.tag.LongArrayTag;
|
||||
import com.viaversion.nbt.tag.Tag;
|
||||
import com.viaversion.viabackwards.api.rewriters.BackwardsStructuredItemRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.Protocol1_21_5To1_21_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.storage.HashedItemConverterStorage;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.storage.HorseDataStorage;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.data.Mappings;
|
||||
import com.viaversion.viaversion.api.data.entity.EntityTracker;
|
||||
import com.viaversion.viaversion.api.data.entity.TrackedEntity;
|
||||
import com.viaversion.viaversion.api.minecraft.Holder;
|
||||
import com.viaversion.viaversion.api.minecraft.HolderSet;
|
||||
import com.viaversion.viaversion.api.minecraft.PaintingVariant;
|
||||
import com.viaversion.viaversion.api.minecraft.SoundEvent;
|
||||
import com.viaversion.viaversion.api.minecraft.blockentity.BlockEntity;
|
||||
import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
|
||||
import com.viaversion.viaversion.api.minecraft.chunks.Chunk1_18;
|
||||
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
|
||||
import com.viaversion.viaversion.api.minecraft.chunks.Heightmap;
|
||||
import com.viaversion.viaversion.api.minecraft.data.StructuredDataContainer;
|
||||
import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_5;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
|
||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.ArmorTrimMaterial;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.ArmorTrimPattern;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.BlocksAttacks;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.BlocksAttacks.DamageReduction;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.BlocksAttacks.ItemDamageFunction;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.Equippable;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.ProvidesTrimMaterial;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.ToolProperties;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.TooltipDisplay;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.TropicalFishPattern;
|
||||
import com.viaversion.viaversion.api.minecraft.item.data.Weapon;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.rewriter.ComponentRewriter;
|
||||
import com.viaversion.viaversion.api.type.Type;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkBiomesType1_19_4;
|
||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkBiomesType1_21_5;
|
||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2;
|
||||
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_21_5;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.data.item.ItemHasherBase;
|
||||
import com.viaversion.viaversion.libs.fastutil.ints.IntLinkedOpenHashSet;
|
||||
import com.viaversion.viaversion.protocols.v1_21_2to1_21_4.packet.ServerboundPacket1_21_4;
|
||||
import com.viaversion.viaversion.protocols.v1_21_2to1_21_4.packet.ServerboundPackets1_21_4;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ClientboundPacket1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ClientboundPackets1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
|
||||
import com.viaversion.viaversion.rewriter.BlockRewriter;
|
||||
import com.viaversion.viaversion.rewriter.RecipeDisplayRewriter;
|
||||
import com.viaversion.viaversion.util.Either;
|
||||
import com.viaversion.viaversion.util.Key;
|
||||
import com.viaversion.viaversion.util.Limit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.viaversion.viaversion.protocols.v1_21_4to1_21_5.rewriter.BlockItemPacketRewriter1_21_5.downgradeItemData;
|
||||
import static com.viaversion.viaversion.protocols.v1_21_4to1_21_5.rewriter.BlockItemPacketRewriter1_21_5.updateItemData;
|
||||
import static com.viaversion.viaversion.util.MathUtil.ceilLog2;
|
||||
|
||||
public final class BlockItemPacketRewriter1_21_5 extends BackwardsStructuredItemRewriter<ClientboundPacket1_21_5, ServerboundPacket1_21_4, Protocol1_21_5To1_21_4> {
|
||||
private static final int SIGN_BOCK_ENTITY_ID = 7;
|
||||
private static final int HANGING_SIGN_BOCK_ENTITY_ID = 8;
|
||||
private static final int SADDLE_EQUIPMENT_SLOT = 7;
|
||||
static final byte SADDLED_FLAG = 4;
|
||||
|
||||
public BlockItemPacketRewriter1_21_5(final Protocol1_21_5To1_21_4 protocol) {
|
||||
super(protocol);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerPackets() {
|
||||
final BlockRewriter<ClientboundPacket1_21_5> blockRewriter = BlockRewriter.for1_20_2(protocol);
|
||||
blockRewriter.registerBlockEvent(ClientboundPackets1_21_5.BLOCK_EVENT);
|
||||
blockRewriter.registerBlockUpdate(ClientboundPackets1_21_5.BLOCK_UPDATE);
|
||||
blockRewriter.registerSectionBlocksUpdate1_20(ClientboundPackets1_21_5.SECTION_BLOCKS_UPDATE);
|
||||
blockRewriter.registerLevelEvent1_21(ClientboundPackets1_21_5.LEVEL_EVENT, 2001);
|
||||
blockRewriter.registerBlockEntityData(ClientboundPackets1_21_5.BLOCK_ENTITY_DATA, this::handleBlockEntity);
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_5.LEVEL_CHUNK_WITH_LIGHT, wrapper -> {
|
||||
final EntityTracker tracker = protocol.getEntityRewriter().tracker(wrapper.user());
|
||||
final Mappings blockStateMappings = protocol.getMappingData().getBlockStateMappings();
|
||||
final Type<Chunk> chunkType = new ChunkType1_21_5(tracker.currentWorldSectionHeight(), ceilLog2(blockStateMappings.size()), ceilLog2(tracker.biomesSent()));
|
||||
final Chunk chunk = wrapper.read(chunkType);
|
||||
blockRewriter.handleChunk(chunk);
|
||||
blockRewriter.handleBlockEntities(null, chunk, wrapper.user());
|
||||
|
||||
final Type<Chunk> newChunkType = new ChunkType1_20_2(tracker.currentWorldSectionHeight(), ceilLog2(blockStateMappings.mappedSize()), ceilLog2(tracker.biomesSent()));
|
||||
final CompoundTag heightmapTag = new CompoundTag();
|
||||
for (final Heightmap heightmap : chunk.heightmaps()) {
|
||||
final String typeKey = heightmapType(heightmap.type());
|
||||
if (typeKey == null) {
|
||||
protocol.getLogger().warning("Unknown heightmap type id: " + heightmap.type());
|
||||
continue;
|
||||
}
|
||||
|
||||
heightmapTag.put(typeKey, new LongArrayTag(heightmap.data()));
|
||||
}
|
||||
|
||||
final Chunk mappedChunk = new Chunk1_18(chunk.getX(), chunk.getZ(), chunk.getSections(), heightmapTag, chunk.blockEntities());
|
||||
blockRewriter.handleBlockEntities(this::handleBlockEntity, chunk, wrapper.user());
|
||||
wrapper.write(newChunkType, mappedChunk);
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_5.CHUNKS_BIOMES, wrapper -> {
|
||||
final EntityTracker tracker = protocol.getEntityRewriter().tracker(wrapper.user());
|
||||
final int globalPaletteBiomeBits = ceilLog2(tracker.biomesSent());
|
||||
final Type<DataPalette[]> biomesType = new ChunkBiomesType1_21_5(tracker.currentWorldSectionHeight(), globalPaletteBiomeBits);
|
||||
final Type<DataPalette[]> newBiomesType = new ChunkBiomesType1_19_4(tracker.currentWorldSectionHeight(), globalPaletteBiomeBits);
|
||||
|
||||
final int size = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int i = 0; i < size; i++) {
|
||||
wrapper.passthrough(Types.CHUNK_POSITION);
|
||||
wrapper.passthroughAndMap(biomesType, newBiomesType);
|
||||
}
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_5.SET_CURSOR_ITEM, this::passthroughClientboundItem);
|
||||
registerSetPlayerInventory(ClientboundPackets1_21_5.SET_PLAYER_INVENTORY);
|
||||
registerCooldown1_21_2(ClientboundPackets1_21_5.COOLDOWN);
|
||||
registerSetContent1_21_2(ClientboundPackets1_21_5.CONTAINER_SET_CONTENT);
|
||||
registerSetSlot1_21_2(ClientboundPackets1_21_5.CONTAINER_SET_SLOT);
|
||||
registerMerchantOffers1_20_5(ClientboundPackets1_21_5.MERCHANT_OFFERS);
|
||||
|
||||
protocol.registerServerbound(ServerboundPackets1_21_4.SET_CREATIVE_MODE_SLOT, wrapper -> {
|
||||
wrapper.passthrough(Types.SHORT); // Slot
|
||||
|
||||
final Item item = handleItemToServer(wrapper.user(), wrapper.read(mappedItemType()));
|
||||
wrapper.write(VersionedTypes.V1_21_5.lengthPrefixedItem(), item);
|
||||
});
|
||||
|
||||
protocol.registerServerbound(ServerboundPackets1_21_4.CONTAINER_CLICK, wrapper -> {
|
||||
wrapper.passthrough(Types.VAR_INT); // Container id
|
||||
wrapper.passthrough(Types.VAR_INT); // State id
|
||||
wrapper.passthrough(Types.SHORT); // Slot
|
||||
wrapper.passthrough(Types.BYTE); // Button
|
||||
wrapper.passthrough(Types.VAR_INT); // Mode
|
||||
|
||||
// Try our best to get a hashed item out of it - will be wrong for some data component types that don't have their conversion implemented
|
||||
final HashedItemConverterStorage hashedItemConverter = wrapper.user().get(HashedItemConverterStorage.class);
|
||||
final int affectedItems = Limit.max(wrapper.passthrough(Types.VAR_INT), 128);
|
||||
for (int i = 0; i < affectedItems; i++) {
|
||||
wrapper.passthrough(Types.SHORT); // Slot
|
||||
final Item item = handleItemToServer(wrapper.user(), wrapper.read(mappedItemType()));
|
||||
wrapper.write(Types.HASHED_ITEM, ItemHasherBase.toHashedItem(hashedItemConverter.hasher(), item));
|
||||
}
|
||||
|
||||
final Item carriedItem = handleItemToServer(wrapper.user(), wrapper.read(mappedItemType()));
|
||||
wrapper.write(Types.HASHED_ITEM, ItemHasherBase.toHashedItem(hashedItemConverter.hasher(), carriedItem));
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_5.SET_EQUIPMENT, wrapper -> {
|
||||
final int entityId = wrapper.passthrough(Types.VAR_INT);
|
||||
final TrackedEntity trackedEntity = protocol.getEntityRewriter().tracker(wrapper.user()).entity(entityId);
|
||||
byte value;
|
||||
do {
|
||||
value = wrapper.passthrough(Types.BYTE);
|
||||
final int equipmentSlot = value & 0x7F;
|
||||
if (equipmentSlot == SADDLE_EQUIPMENT_SLOT) {
|
||||
if (trackedEntity != null && trackedEntity.entityType().isOrHasParent(EntityTypes1_21_5.ABSTRACT_HORSE)) {
|
||||
final Item item = wrapper.read(itemType());
|
||||
sendSaddledEntityData(wrapper.user(), trackedEntity, entityId, item.identifier() == 800);
|
||||
}
|
||||
wrapper.cancel();
|
||||
return;
|
||||
}
|
||||
passthroughClientboundItem(wrapper);
|
||||
} while (value < 0);
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_5.UPDATE_ADVANCEMENTS, wrapper -> {
|
||||
wrapper.passthrough(Types.BOOLEAN); // Reset/clear
|
||||
int size = wrapper.passthrough(Types.VAR_INT); // Mapping size
|
||||
for (int i = 0; i < size; i++) {
|
||||
wrapper.passthrough(Types.STRING); // Identifier
|
||||
wrapper.passthrough(Types.OPTIONAL_STRING); // Parent
|
||||
|
||||
// Display data
|
||||
if (wrapper.passthrough(Types.BOOLEAN)) {
|
||||
final Tag title = wrapper.passthrough(Types.TAG);
|
||||
final Tag description = wrapper.passthrough(Types.TAG);
|
||||
final ComponentRewriter componentRewriter = protocol.getComponentRewriter();
|
||||
if (componentRewriter != null) {
|
||||
componentRewriter.processTag(wrapper.user(), title);
|
||||
componentRewriter.processTag(wrapper.user(), description);
|
||||
}
|
||||
|
||||
passthroughClientboundItem(wrapper); // Icon
|
||||
wrapper.passthrough(Types.VAR_INT); // Frame type
|
||||
int flags = wrapper.passthrough(Types.INT); // Flags
|
||||
if ((flags & 1) != 0) {
|
||||
convertClientAsset(wrapper);
|
||||
}
|
||||
wrapper.passthrough(Types.FLOAT); // X
|
||||
wrapper.passthrough(Types.FLOAT); // Y
|
||||
}
|
||||
|
||||
int requirements = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int array = 0; array < requirements; array++) {
|
||||
wrapper.passthrough(Types.STRING_ARRAY);
|
||||
}
|
||||
|
||||
wrapper.passthrough(Types.BOOLEAN); // Send telemetry
|
||||
}
|
||||
|
||||
wrapper.passthrough(Types.STRING_ARRAY); // Removed
|
||||
final int progressSize = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int i = 0; i < progressSize; i++) {
|
||||
wrapper.passthrough(Types.STRING); // Key
|
||||
|
||||
final int criterionSize = wrapper.passthrough(Types.VAR_INT);
|
||||
for (int j = 0; j < criterionSize; j++) {
|
||||
wrapper.passthrough(Types.STRING); // Key
|
||||
wrapper.passthrough(Types.OPTIONAL_LONG); // Obtained instant
|
||||
}
|
||||
}
|
||||
|
||||
wrapper.read(Types.BOOLEAN); // Show advancements
|
||||
});
|
||||
|
||||
final RecipeDisplayRewriter<ClientboundPacket1_21_5> recipeRewriter = new RecipeDisplayRewriter<>(protocol) {
|
||||
@Override
|
||||
protected void handleSmithingTrimSlotDisplay(final PacketWrapper wrapper) {
|
||||
handleSlotDisplay(wrapper); // Base
|
||||
handleSlotDisplay(wrapper); // Material
|
||||
wrapper.read(ArmorTrimPattern.TYPE1_21_5); // Patterm
|
||||
// Add empty slot display...
|
||||
wrapper.write(Types.VAR_INT, 0);
|
||||
}
|
||||
};
|
||||
recipeRewriter.registerUpdateRecipes(ClientboundPackets1_21_5.UPDATE_RECIPES);
|
||||
recipeRewriter.registerRecipeBookAdd(ClientboundPackets1_21_5.RECIPE_BOOK_ADD);
|
||||
recipeRewriter.registerPlaceGhostRecipe(ClientboundPackets1_21_5.PLACE_GHOST_RECIPE);
|
||||
}
|
||||
|
||||
private void convertClientAsset(final PacketWrapper wrapper) {
|
||||
final String background = wrapper.read(Types.STRING);
|
||||
final String namespace = Key.namespace(background);
|
||||
final String path = Key.stripNamespace(background);
|
||||
wrapper.write(Types.STRING, namespace + ":textures/" + path + ".png");
|
||||
}
|
||||
|
||||
private void sendSaddledEntityData(final UserConnection connection, final TrackedEntity trackedEntity, final int entityId, final boolean saddled) {
|
||||
byte data = 0;
|
||||
if (trackedEntity.hasData()) {
|
||||
final HorseDataStorage horseDataStorage = trackedEntity.data().get(HorseDataStorage.class);
|
||||
if (horseDataStorage != null) {
|
||||
if (horseDataStorage.saddled() == saddled) {
|
||||
return;
|
||||
}
|
||||
|
||||
data = horseDataStorage.data();
|
||||
}
|
||||
}
|
||||
|
||||
trackedEntity.data().put(new HorseDataStorage(data, saddled));
|
||||
|
||||
if (saddled) {
|
||||
data = (byte) (data | SADDLED_FLAG);
|
||||
}
|
||||
|
||||
final PacketWrapper entityDataPacket = PacketWrapper.create(ClientboundPackets1_21_2.SET_ENTITY_DATA, connection);
|
||||
final List<EntityData> entityDataList = new ArrayList<>();
|
||||
entityDataList.add(new EntityData(17, VersionedTypes.V1_21_4.entityDataTypes.byteType, data));
|
||||
entityDataPacket.write(Types.VAR_INT, entityId);
|
||||
entityDataPacket.write(VersionedTypes.V1_21_4.entityDataList, entityDataList);
|
||||
entityDataPacket.send(Protocol1_21_5To1_21_4.class);
|
||||
}
|
||||
|
||||
private void handleBlockEntity(final UserConnection connection, final BlockEntity blockEntity) {
|
||||
final CompoundTag tag = blockEntity.tag();
|
||||
if (tag != null && (blockEntity.typeId() == SIGN_BOCK_ENTITY_ID || blockEntity.typeId() == HANGING_SIGN_BOCK_ENTITY_ID)) {
|
||||
updateSignMessages(connection, tag.getCompoundTag("front_text"));
|
||||
updateSignMessages(connection, tag.getCompoundTag("back_text"));
|
||||
}
|
||||
}
|
||||
|
||||
private void updateSignMessages(final UserConnection connection, final CompoundTag tag) {
|
||||
if (tag == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final ListTag<?> messages = tag.getListTag("messages");
|
||||
tag.put("messages", protocol.getComponentRewriter().updateComponentList(connection, messages));
|
||||
|
||||
final ListTag<?> filteredMessages = tag.getListTag("filtered_messages");
|
||||
if (filteredMessages != null) {
|
||||
tag.put("filtered_messages", protocol.getComponentRewriter().updateComponentList(connection, filteredMessages));
|
||||
}
|
||||
}
|
||||
|
||||
private String heightmapType(final int id) {
|
||||
return switch (id) {
|
||||
case 0 -> "WORLD_SURFACE_WG";
|
||||
case 1 -> "WORLD_SURFACE";
|
||||
case 2 -> "OCEAN_FLOOR_WG";
|
||||
case 3 -> "OCEAN_FLOOR";
|
||||
case 4 -> "MOTION_BLOCKING";
|
||||
case 5 -> "MOTION_BLOCKING_NO_LEAVES";
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void backupInconvertibleData(final UserConnection connection, final Item item, final StructuredDataContainer dataContainer, final CompoundTag backupTag) {
|
||||
super.backupInconvertibleData(connection, item, dataContainer, backupTag);
|
||||
final ToolProperties toolProperties = dataContainer.get(StructuredDataKey.TOOL1_21_5);
|
||||
if (toolProperties != null && toolProperties.canDestroyBlocksInCreative()) {
|
||||
backupTag.putBoolean("tool", true);
|
||||
}
|
||||
|
||||
final Equippable equippable = dataContainer.get(StructuredDataKey.EQUIPPABLE1_21_5);
|
||||
if (equippable != null && equippable.equipOnInteract()) {
|
||||
backupTag.putBoolean("equippable", true);
|
||||
}
|
||||
|
||||
final Weapon weapon = dataContainer.get(StructuredDataKey.WEAPON);
|
||||
if (weapon != null) {
|
||||
final CompoundTag weaponTag = new CompoundTag();
|
||||
backupTag.put("weapon", weaponTag);
|
||||
weaponTag.putInt("item_damage_per_attack", weapon.itemDamagePerAttack());
|
||||
weaponTag.putFloat("disable_blocking_for_seconds", weapon.disableBlockingForSeconds());
|
||||
}
|
||||
|
||||
final ProvidesTrimMaterial providesTrimMaterial = dataContainer.get(StructuredDataKey.PROVIDES_TRIM_MATERIAL);
|
||||
if (providesTrimMaterial != null) {
|
||||
final Tag materialTag = eitherHolderToTag(providesTrimMaterial.material(), (material, tag) -> {
|
||||
tag.putString("asset_name", material.assetName());
|
||||
tag.putInt("item_id", material.itemId());
|
||||
tag.putFloat("item_model_index", material.itemModelIndex());
|
||||
final CompoundTag overrideArmorMaterials = new CompoundTag();
|
||||
material.overrideArmorMaterials().forEach(overrideArmorMaterials::putString);
|
||||
tag.put("override_armor_materials", overrideArmorMaterials);
|
||||
tag.put("description", material.description());
|
||||
});
|
||||
backupTag.put("provides_trim_material", materialTag);
|
||||
}
|
||||
|
||||
final BlocksAttacks blocksAttacks = dataContainer.get(StructuredDataKey.BLOCKS_ATTACKS);
|
||||
if (blocksAttacks != null) {
|
||||
final CompoundTag blocksAttackTag = new CompoundTag();
|
||||
backupTag.put("blocks_attack", blocksAttackTag);
|
||||
blocksAttackTag.putFloat("block_delay_seconds", blocksAttacks.blockDelaySeconds());
|
||||
blocksAttackTag.putFloat("disable_cooldown_scale", blocksAttacks.disableCooldownScale());
|
||||
|
||||
final ListTag<CompoundTag> damageReductions = new ListTag<>(CompoundTag.class);
|
||||
blocksAttackTag.put("damage_reductions", damageReductions);
|
||||
for (final DamageReduction damageReduction : blocksAttacks.damageReductions()) {
|
||||
final CompoundTag damageReductionTag = new CompoundTag();
|
||||
damageReductionTag.putFloat("horizontal_blocking_angle", damageReduction.horizontalBlockingAngle());
|
||||
if (damageReduction.type() != null) {
|
||||
damageReductionTag.put("type", holderSetToTag(damageReduction.type()));
|
||||
}
|
||||
damageReductionTag.putFloat("base", damageReduction.base());
|
||||
damageReductionTag.putFloat("factor", damageReduction.factor());
|
||||
damageReductions.add(damageReductionTag);
|
||||
}
|
||||
|
||||
final CompoundTag itemDamageTag = new CompoundTag();
|
||||
blocksAttackTag.put("item_damage", itemDamageTag);
|
||||
itemDamageTag.putFloat("threshold", blocksAttacks.itemDamage().threshold());
|
||||
itemDamageTag.putFloat("base", blocksAttacks.itemDamage().base());
|
||||
itemDamageTag.putFloat("factor", blocksAttacks.itemDamage().factor());
|
||||
if (blocksAttacks.bypassedByTag() != null) {
|
||||
itemDamageTag.putString("bypassed_by", blocksAttacks.bypassedByTag());
|
||||
}
|
||||
if (blocksAttacks.blockSound() != null) {
|
||||
blocksAttackTag.put("block_sound", holderToTag(blocksAttacks.blockSound(), this::saveSoundEvent));
|
||||
}
|
||||
if (blocksAttacks.disableSound() != null) {
|
||||
blocksAttackTag.put("disable_sound", holderToTag(blocksAttacks.disableSound(), this::saveSoundEvent));
|
||||
}
|
||||
}
|
||||
|
||||
final TooltipDisplay tooltipDisplay = dataContainer.get(StructuredDataKey.TOOLTIP_DISPLAY);
|
||||
if (tooltipDisplay != null) {
|
||||
backupTag.put("hidden_components", new IntArrayTag(tooltipDisplay.hiddenComponents().toIntArray()));
|
||||
}
|
||||
|
||||
final TropicalFishPattern tropicalFishPattern = dataContainer.get(StructuredDataKey.TROPICAL_FISH_PATTERN);
|
||||
if (tropicalFishPattern != null) {
|
||||
backupTag.putInt("tropical_fish_pattern", tropicalFishPattern.packedId());
|
||||
}
|
||||
|
||||
saveKeyData(StructuredDataKey.PROVIDES_BANNER_PATTERNS, dataContainer, backupTag);
|
||||
saveFloatData(StructuredDataKey.POTION_DURATION_SCALE, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.VILLAGER_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.FOX_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.SALMON_SIZE, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.PARROT_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.TROPICAL_FISH_BASE_COLOR, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.TROPICAL_FISH_PATTERN_COLOR, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.MOOSHROOM_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.RABBIT_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.FROG_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.HORSE_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.LLAMA_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.AXOLOTL_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.CAT_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.CAT_COLLAR, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.SHEEP_COLOR, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.SHULKER_COLOR, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.WOLF_SOUND_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.COW_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.PIG_VARIANT, dataContainer, backupTag);
|
||||
saveIntData(StructuredDataKey.WOLF_VARIANT, dataContainer, backupTag);
|
||||
|
||||
final Either<Integer, String> chickenVariant = dataContainer.get(StructuredDataKey.CHICKEN_VARIANT);
|
||||
if (chickenVariant != null) {
|
||||
if (chickenVariant.isLeft()) {
|
||||
backupTag.putInt("chicken_variant", chickenVariant.left());
|
||||
} else {
|
||||
backupTag.putString("chicken_variant", chickenVariant.right());
|
||||
}
|
||||
}
|
||||
|
||||
saveHolderData(StructuredDataKey.PAINTING_VARIANT, dataContainer, backupTag, (paintingVariant, tag) -> {
|
||||
tag.putInt("width", paintingVariant.width());
|
||||
tag.putInt("height", paintingVariant.height());
|
||||
tag.putString("asset_id", paintingVariant.assetId());
|
||||
if (paintingVariant.title() != null) {
|
||||
tag.put("title", paintingVariant.title());
|
||||
}
|
||||
if (paintingVariant.author() != null) {
|
||||
tag.put("author", paintingVariant.author());
|
||||
}
|
||||
});
|
||||
|
||||
saveHolderData(StructuredDataKey.BREAK_SOUND, dataContainer, backupTag, this::saveSoundEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleItemDataComponentsToClient(final UserConnection connection, final Item item, final StructuredDataContainer dataContainer) {
|
||||
super.handleItemDataComponentsToClient(connection, item, dataContainer);
|
||||
downgradeItemData(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleItemDataComponentsToServer(final UserConnection connection, final Item item, final StructuredDataContainer container) {
|
||||
super.handleItemDataComponentsToServer(connection, item, container);
|
||||
updateItemData(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void restoreBackupData(final Item item, final StructuredDataContainer data, final CompoundTag customData) {
|
||||
super.restoreBackupData(item, data, customData);
|
||||
if (!(customData.remove(nbtTagName("backup")) instanceof final CompoundTag backupTag)) {
|
||||
return;
|
||||
}
|
||||
|
||||
final IntArrayTag hiddenComponentsTag = backupTag.getIntArrayTag("hidden_components");
|
||||
if (hiddenComponentsTag != null) {
|
||||
data.set(StructuredDataKey.TOOLTIP_DISPLAY, new TooltipDisplay(data.has(StructuredDataKey.HIDE_TOOLTIP), new IntLinkedOpenHashSet(hiddenComponentsTag.getValue())));
|
||||
}
|
||||
|
||||
if (backupTag.getBoolean("tool")) {
|
||||
data.replace(StructuredDataKey.TOOL1_20_5, StructuredDataKey.TOOL1_21_5, t -> new ToolProperties(t.rules(), t.defaultMiningSpeed(), t.damagePerBlock(), true));
|
||||
}
|
||||
|
||||
if (backupTag.getBoolean("equippable")) {
|
||||
data.replace(StructuredDataKey.EQUIPPABLE1_21_2, StructuredDataKey.EQUIPPABLE1_21_5, e -> new Equippable(e.equipmentSlot(), e.soundEvent(), e.model(), e.cameraOverlay(), e.allowedEntities(), e.dispensable(), e.swappable(), e.damageOnHurt(), true));
|
||||
}
|
||||
|
||||
final CompoundTag weaponTag = backupTag.getCompoundTag("weapon");
|
||||
if (weaponTag != null) {
|
||||
data.set(StructuredDataKey.WEAPON, new Weapon(weaponTag.getInt("item_damage_per_attack"), weaponTag.getFloat("disable_blocking_for_seconds")));
|
||||
}
|
||||
|
||||
final Tag materialTag = backupTag.get("provides_trim_material");
|
||||
if (materialTag != null) {
|
||||
data.set(StructuredDataKey.PROVIDES_TRIM_MATERIAL, new ProvidesTrimMaterial(restoreEitherHolder(backupTag, "provides_trim_material", tag -> {
|
||||
final String assetName = tag.getString("asset_name");
|
||||
final int itemId = tag.getInt("item_id");
|
||||
final float itemModelIndex = tag.getFloat("item_model_index");
|
||||
final CompoundTag overrideArmorMaterialsTag = tag.getCompoundTag("override_armor_materials");
|
||||
final Map<String, String> overrideArmorMaterials = new HashMap<>();
|
||||
for (final String key : overrideArmorMaterialsTag.keySet()) {
|
||||
overrideArmorMaterials.put(key, overrideArmorMaterialsTag.getString(key));
|
||||
}
|
||||
final Tag description = tag.get("description");
|
||||
return new ArmorTrimMaterial(assetName, itemId, itemModelIndex, overrideArmorMaterials, description);
|
||||
})));
|
||||
}
|
||||
|
||||
final CompoundTag blocksAttackTag = backupTag.getCompoundTag("blocks_attack");
|
||||
if (blocksAttackTag != null) {
|
||||
final float blockDelaySeconds = blocksAttackTag.getFloat("block_delay_seconds");
|
||||
final float disableCooldownScale = blocksAttackTag.getFloat("disable_cooldown_scale");
|
||||
final CompoundTag itemDamageTag = blocksAttackTag.getCompoundTag("item_damage");
|
||||
final ItemDamageFunction itemDamage = new ItemDamageFunction(itemDamageTag.getFloat("threshold"), itemDamageTag.getFloat("base"), itemDamageTag.getFloat("factor"));
|
||||
final String bypassedBy = blocksAttackTag.getString("bypassed_by");
|
||||
final Holder<SoundEvent> blockSound = blocksAttackTag.contains("block_sound") ? restoreHolder(blocksAttackTag, "block_sound", this::tagToSound) : null;
|
||||
final Holder<SoundEvent> disableSound = blocksAttackTag.contains("disable_sound") ? restoreHolder(blocksAttackTag, "disable_sound", this::tagToSound) : null;
|
||||
|
||||
final List<DamageReduction> damageReductions = new ArrayList<>();
|
||||
for (final CompoundTag damageReductionTag : blocksAttackTag.getListTag("damage_reductions", CompoundTag.class)) {
|
||||
final float horizontalBlockingAngle = damageReductionTag.getFloat("horizontal_blocking_angle");
|
||||
final HolderSet type = damageReductionTag.contains("type") ? restoreHolderSet(damageReductionTag, "type") : null;
|
||||
final float base = damageReductionTag.getFloat("base");
|
||||
final float factor = damageReductionTag.getFloat("factor");
|
||||
damageReductions.add(new DamageReduction(horizontalBlockingAngle, type, base, factor));
|
||||
}
|
||||
|
||||
data.set(StructuredDataKey.BLOCKS_ATTACKS, new BlocksAttacks(blockDelaySeconds, disableCooldownScale, damageReductions.toArray(new DamageReduction[0]), itemDamage, bypassedBy, blockSound, disableSound));
|
||||
}
|
||||
|
||||
final IntTag chickenVariant = backupTag.getIntTag("chicken_variant");
|
||||
if (chickenVariant != null) {
|
||||
data.set(StructuredDataKey.CHICKEN_VARIANT, Either.left(chickenVariant.asInt()));
|
||||
} else {
|
||||
final String chickenVariantKey = backupTag.getString("chicken_variant");
|
||||
if (chickenVariantKey != null) {
|
||||
data.set(StructuredDataKey.CHICKEN_VARIANT, Either.right(chickenVariantKey));
|
||||
}
|
||||
}
|
||||
|
||||
final IntTag tropicalFishPattern = backupTag.getIntTag("tropical_fish_pattern");
|
||||
if (tropicalFishPattern != null) {
|
||||
data.set(StructuredDataKey.TROPICAL_FISH_PATTERN, new TropicalFishPattern(tropicalFishPattern.asInt()));
|
||||
}
|
||||
|
||||
restoreKeyData(StructuredDataKey.PROVIDES_BANNER_PATTERNS, data, backupTag);
|
||||
restoreFloatData(StructuredDataKey.POTION_DURATION_SCALE, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.VILLAGER_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.FOX_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.SALMON_SIZE, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.PARROT_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.TROPICAL_FISH_BASE_COLOR, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.TROPICAL_FISH_PATTERN_COLOR, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.MOOSHROOM_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.RABBIT_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.FROG_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.HORSE_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.LLAMA_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.AXOLOTL_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.CAT_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.CAT_COLLAR, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.SHEEP_COLOR, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.SHULKER_COLOR, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.WOLF_SOUND_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.COW_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.PIG_VARIANT, data, backupTag);
|
||||
restoreIntData(StructuredDataKey.WOLF_VARIANT, data, backupTag);
|
||||
|
||||
restoreHolderData(StructuredDataKey.BREAK_SOUND, data, backupTag, this::tagToSound);
|
||||
restoreHolderData(StructuredDataKey.PAINTING_VARIANT, data, backupTag, tag -> {
|
||||
final int width = tag.getInt("width");
|
||||
final int height = tag.getInt("height");
|
||||
final String assetId = tag.getString("asset_id");
|
||||
final Tag title = tag.get("title");
|
||||
final Tag author = tag.get("author");
|
||||
return new PaintingVariant(width, height, assetId, title, author);
|
||||
});
|
||||
|
||||
removeCustomTag(data, customData);
|
||||
}
|
||||
|
||||
private SoundEvent tagToSound(final CompoundTag tag) {
|
||||
final String identifier = tag.getString("identifier");
|
||||
final FloatTag fixedRangeTag = tag.getFloatTag("fixed_range");
|
||||
return new SoundEvent(identifier, fixedRangeTag != null ? fixedRangeTag.asFloat() : null);
|
||||
}
|
||||
}
|
||||
+280
@@ -0,0 +1,280 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.rewriter;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
import com.viaversion.nbt.tag.NumberTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.nbt.tag.Tag;
|
||||
import com.viaversion.viabackwards.api.BackwardsProtocol;
|
||||
import com.viaversion.viabackwards.api.rewriters.text.NBTComponentRewriter;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ClientboundPacket1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.rewriter.BlockItemPacketRewriter1_21_5;
|
||||
import com.viaversion.viaversion.util.Key;
|
||||
import com.viaversion.viaversion.util.SerializerVersion;
|
||||
import com.viaversion.viaversion.util.TagUtil;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import static com.viaversion.viaversion.util.TagUtil.getNamespacedCompoundTag;
|
||||
import static com.viaversion.viaversion.util.TagUtil.getNamespacedCompoundTagList;
|
||||
import static com.viaversion.viaversion.util.TagUtil.getNamespacedNumberTag;
|
||||
import static com.viaversion.viaversion.util.TagUtil.removeNamespaced;
|
||||
|
||||
public final class ComponentRewriter1_21_5 extends NBTComponentRewriter<ClientboundPacket1_21_5> {
|
||||
|
||||
public ComponentRewriter1_21_5(final BackwardsProtocol<ClientboundPacket1_21_5, ?, ?, ?> protocol) {
|
||||
super(protocol);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void processCompoundTag(final UserConnection connection, final CompoundTag tag) {
|
||||
super.processCompoundTag(connection, tag);
|
||||
if (tag.remove("hover_event") instanceof final CompoundTag hoverEvent) {
|
||||
tag.put("hoverEvent", hoverEvent);
|
||||
}
|
||||
|
||||
if (tag.remove("click_event") instanceof final CompoundTag clickEvent) {
|
||||
tag.put("clickEvent", clickEvent);
|
||||
updateClickEvent(clickEvent);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleHoverEvent(final UserConnection connection, final CompoundTag hoverEventTag) {
|
||||
final String action = hoverEventTag.getString("action");
|
||||
if (action == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (action) {
|
||||
case "show_text" -> updateShowTextHover(hoverEventTag);
|
||||
case "show_entity" -> updateShowEntityHover(hoverEventTag);
|
||||
case "show_item" -> updateShowItemHover(connection, hoverEventTag);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateClickEvent(final CompoundTag clickEventTag) {
|
||||
final String action = clickEventTag.getString("action");
|
||||
if (action == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (action) {
|
||||
case "open_url" -> clickEventTag.put("value", clickEventTag.getStringTag("url"));
|
||||
case "change_page" -> clickEventTag.putString("value", Integer.toString(clickEventTag.getInt("page")));
|
||||
case "run_command" -> {
|
||||
final StringTag command = clickEventTag.getStringTag("command");
|
||||
if (command != null && !command.getValue().startsWith("/")) {
|
||||
command.setValue("/" + command.getValue());
|
||||
}
|
||||
clickEventTag.put("value", command);
|
||||
}
|
||||
case "suggest_command" -> clickEventTag.put("value", clickEventTag.getStringTag("command"));
|
||||
}
|
||||
}
|
||||
|
||||
private void updateShowTextHover(final CompoundTag hoverEventTag) {
|
||||
final Tag text = hoverEventTag.remove("value");
|
||||
hoverEventTag.put("contents", text);
|
||||
}
|
||||
|
||||
private void updateShowItemHover(final UserConnection connection, final CompoundTag hoverEventTag) {
|
||||
final CompoundTag contents = new CompoundTag();
|
||||
hoverEventTag.put("contents", contents);
|
||||
|
||||
if (hoverEventTag.get("count") instanceof NumberTag countTag) {
|
||||
contents.put("count", countTag);
|
||||
}
|
||||
if (hoverEventTag.get("id") instanceof StringTag idTag) {
|
||||
contents.put("id", idTag);
|
||||
}
|
||||
|
||||
final CompoundTag componentsTag = hoverEventTag.getCompoundTag("components");
|
||||
handleShowItem(connection, contents, componentsTag);
|
||||
if (componentsTag != null) {
|
||||
hoverEventTag.remove("components");
|
||||
contents.put("components", componentsTag);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleShowItem(final UserConnection connection, final CompoundTag itemTag, @Nullable final CompoundTag componentsTag) {
|
||||
super.handleShowItem(connection, itemTag, componentsTag);
|
||||
if (componentsTag == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
insertUglyJson(componentsTag, connection);
|
||||
updateDataComponents(componentsTag);
|
||||
|
||||
removeDataComponents(componentsTag, BlockItemPacketRewriter1_21_5.NEW_DATA_TO_REMOVE);
|
||||
}
|
||||
|
||||
private void updateDataComponents(final CompoundTag componentsTag) {
|
||||
final CompoundTag tooltipDisplay = getNamespacedCompoundTag(componentsTag, "tooltip_display");
|
||||
Set<String> hiddenComponents = Set.of();
|
||||
if (tooltipDisplay != null) {
|
||||
final ListTag<StringTag> hiddenComponentsTag = tooltipDisplay.getListTag("hidden_components", StringTag.class);
|
||||
if (hiddenComponentsTag != null) {
|
||||
hiddenComponents = new HashSet<>(hiddenComponentsTag.size());
|
||||
for (final StringTag stringTag : hiddenComponentsTag) {
|
||||
hiddenComponents.add(Key.stripMinecraftNamespace(stringTag.getValue()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final ListTag<CompoundTag> attributeModifiers = getNamespacedCompoundTagList(componentsTag, "attribute_modifiers");
|
||||
if (attributeModifiers != null) {
|
||||
removeNamespaced(componentsTag, "attribute_modifiers");
|
||||
final CompoundTag attributesParent = new CompoundTag();
|
||||
attributesParent.put("modifiers", attributeModifiers);
|
||||
attributesParent.putBoolean("show_in_tooltip", hiddenComponents.contains("attribute_modifiers"));
|
||||
componentsTag.put("attribute_modifiers", attributesParent);
|
||||
}
|
||||
|
||||
final NumberTag dyedColor = getNamespacedNumberTag(componentsTag, "dyed_color");
|
||||
if (dyedColor != null) {
|
||||
removeNamespaced(componentsTag, "dyed_color");
|
||||
final CompoundTag dyedColorParent = new CompoundTag();
|
||||
dyedColorParent.put("rgb", dyedColor);
|
||||
dyedColorParent.putBoolean("show_in_tooltip", hiddenComponents.contains("dyed_color"));
|
||||
componentsTag.put("dyed_color", dyedColorParent);
|
||||
}
|
||||
|
||||
updateShowInTooltip(componentsTag, "unbreakable", hiddenComponents);
|
||||
updateShowInTooltip(componentsTag, "dyed_color", hiddenComponents);
|
||||
updateShowInTooltip(componentsTag, "trim", hiddenComponents);
|
||||
updateShowInTooltip(componentsTag, "jukebox_playable", hiddenComponents);
|
||||
handleAdventureModePredicate(componentsTag, "can_place_on", hiddenComponents);
|
||||
handleAdventureModePredicate(componentsTag, "can_break", hiddenComponents);
|
||||
handleEnchantments(componentsTag, "enchantments", hiddenComponents);
|
||||
handleEnchantments(componentsTag, "stored_enchantments", hiddenComponents);
|
||||
}
|
||||
|
||||
private void updateShowInTooltip(final CompoundTag tag, final String key, final Set<String> hiddenComponents) {
|
||||
final CompoundTag data = getNamespacedCompoundTag(tag, key);
|
||||
if (data != null) {
|
||||
data.putBoolean("show_in_tooltip", hiddenComponents.contains(key));
|
||||
}
|
||||
}
|
||||
|
||||
private void handleAdventureModePredicate(final CompoundTag componentsTag, final String key, final Set<String> hiddenComponents) {
|
||||
final ListTag<CompoundTag> blockPredicates = getNamespacedCompoundTagList(componentsTag, key);
|
||||
if (blockPredicates == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
removeDataComponents(componentsTag, key);
|
||||
final CompoundTag predicate = new CompoundTag();
|
||||
predicate.put("predicates", blockPredicates);
|
||||
predicate.putBoolean("show_in_tooltip", hiddenComponents.contains(key));
|
||||
componentsTag.put(key, predicate);
|
||||
}
|
||||
|
||||
private void handleEnchantments(final CompoundTag componentsTag, final String key, final Set<String> hiddenComponents) {
|
||||
final CompoundTag levels = getNamespacedCompoundTag(componentsTag, key);
|
||||
if (levels != null) {
|
||||
removeNamespaced(componentsTag, key);
|
||||
final CompoundTag enchantments = new CompoundTag();
|
||||
enchantments.put("levels", levels);
|
||||
enchantments.putBoolean("show_in_tooltip", hiddenComponents.contains(key));
|
||||
componentsTag.put(key, enchantments);
|
||||
}
|
||||
}
|
||||
|
||||
private void insertUglyJson(final CompoundTag componentsTag, final UserConnection connection) {
|
||||
insertUglyJson(componentsTag, "item_name", connection);
|
||||
insertUglyJson(componentsTag, "custom_name", connection);
|
||||
|
||||
final String loreKey = TagUtil.getNamespacedTagKey(componentsTag, "lore");
|
||||
final ListTag<?> lore = componentsTag.getListTag(loreKey);
|
||||
if (lore != null) {
|
||||
componentsTag.put(loreKey, updateComponentList(connection, lore));
|
||||
}
|
||||
}
|
||||
|
||||
public ListTag<StringTag> updateComponentList(final UserConnection connection, final ListTag<?> messages) {
|
||||
final ListTag<StringTag> updatedMessages = new ListTag<>(StringTag.class);
|
||||
for (final Tag message : messages) {
|
||||
updatedMessages.add(new StringTag(toUglyJson(connection, message)));
|
||||
}
|
||||
return updatedMessages;
|
||||
}
|
||||
|
||||
private void insertUglyJson(final CompoundTag componentsTag, final String key, final UserConnection connection) {
|
||||
final String actualKey = TagUtil.getNamespacedTagKey(componentsTag, key);
|
||||
final Tag tag = componentsTag.get(actualKey);
|
||||
if (tag == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
componentsTag.putString(actualKey, toUglyJson(connection, tag));
|
||||
}
|
||||
|
||||
private void updateShowEntityHover(final CompoundTag hoverEventTag) {
|
||||
final CompoundTag contents = new CompoundTag();
|
||||
hoverEventTag.put("contents", contents);
|
||||
|
||||
final Tag nameTag = hoverEventTag.remove("name");
|
||||
if (nameTag != null) {
|
||||
contents.put("name", nameTag);
|
||||
}
|
||||
|
||||
if (hoverEventTag.remove("id") instanceof StringTag idTag) {
|
||||
idTag.setValue(protocol.getEntityRewriter().mappedEntityIdentifier(idTag.getValue()));
|
||||
contents.put("type", idTag);
|
||||
}
|
||||
|
||||
final Tag uuidTag = hoverEventTag.remove("uuid");
|
||||
if (uuidTag != null) {
|
||||
contents.put("id", uuidTag);
|
||||
}
|
||||
}
|
||||
|
||||
private String toUglyJson(final UserConnection connection, final Tag value) {
|
||||
processTag(connection, value);
|
||||
return SerializerVersion.V1_21_4.toString(SerializerVersion.V1_21_4.toComponent(value));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleWrittenBookContents(final UserConnection connection, final CompoundTag tag) {
|
||||
final CompoundTag book = TagUtil.getNamespacedCompoundTag(tag, "written_book_content");
|
||||
if (book == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final ListTag<CompoundTag> pagesTag = book.getListTag("pages", CompoundTag.class);
|
||||
if (pagesTag == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (final CompoundTag compoundTag : pagesTag) {
|
||||
final Tag raw = compoundTag.get("raw");
|
||||
compoundTag.putString("raw", toUglyJson(connection, raw));
|
||||
|
||||
final Tag filtered = compoundTag.get("filtered");
|
||||
if (filtered != null) {
|
||||
compoundTag.putString("filtered", toUglyJson(connection, raw));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+347
@@ -0,0 +1,347 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.rewriter;
|
||||
|
||||
import com.viaversion.nbt.tag.CompoundTag;
|
||||
import com.viaversion.nbt.tag.ListTag;
|
||||
import com.viaversion.nbt.tag.StringTag;
|
||||
import com.viaversion.viabackwards.api.rewriters.EntityRewriter;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.Protocol1_21_5To1_21_4;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.storage.HashedItemConverterStorage;
|
||||
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.storage.HorseDataStorage;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.api.data.entity.TrackedEntity;
|
||||
import com.viaversion.viaversion.api.minecraft.Holder;
|
||||
import com.viaversion.viaversion.api.minecraft.RegistryEntry;
|
||||
import com.viaversion.viaversion.api.minecraft.WolfVariant;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
|
||||
import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_21_5;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_21_2;
|
||||
import com.viaversion.viaversion.api.minecraft.entitydata.types.EntityDataTypes1_21_5;
|
||||
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
|
||||
import com.viaversion.viaversion.api.type.Types;
|
||||
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
|
||||
import com.viaversion.viaversion.protocols.v1_20_5to1_21.packet.ClientboundConfigurationPackets1_21;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ClientboundPacket1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ClientboundPackets1_21_5;
|
||||
import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ClientboundPackets1_21_2;
|
||||
import com.viaversion.viaversion.rewriter.RegistryDataRewriter;
|
||||
import com.viaversion.viaversion.util.Key;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public final class EntityPacketRewriter1_21_5 extends EntityRewriter<ClientboundPacket1_21_5, Protocol1_21_5To1_21_4> {
|
||||
|
||||
private static final Set<String> NEW_REGISTRIES = Set.of("pig_variant", "cow_variant", "frog_variant", "cat_variant",
|
||||
"chicken_variant", "test_environment", "test_instance", "wolf_sound_variant");
|
||||
|
||||
public EntityPacketRewriter1_21_5(final Protocol1_21_5To1_21_4 protocol) {
|
||||
super(protocol, protocol.mappedTypes().entityDataTypes().optionalComponentType, protocol.mappedTypes().entityDataTypes().booleanType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerPackets() {
|
||||
registerSetEntityData(ClientboundPackets1_21_5.SET_ENTITY_DATA);
|
||||
registerRemoveEntities(ClientboundPackets1_21_5.REMOVE_ENTITIES);
|
||||
|
||||
protocol.appendClientbound(ClientboundPackets1_21_5.ADD_ENTITY, wrapper -> {
|
||||
final int entityId = wrapper.passthrough(Types.VAR_INT);
|
||||
|
||||
final UUID uuid = wrapper.read(Types.UUID);
|
||||
final int entityType = wrapper.read(Types.VAR_INT);
|
||||
if (entityType != EntityTypes1_21_5.EXPERIENCE_ORB.getId()) {
|
||||
wrapper.write(Types.UUID, uuid);
|
||||
wrapper.write(Types.VAR_INT, entityType);
|
||||
wrapper.passthrough(Types.DOUBLE); // X
|
||||
wrapper.passthrough(Types.DOUBLE); // Y
|
||||
wrapper.passthrough(Types.DOUBLE); // Z
|
||||
wrapper.passthrough(Types.BYTE); // Pitch
|
||||
wrapper.passthrough(Types.BYTE); // Yaw
|
||||
wrapper.passthrough(Types.BYTE); // Head yaw
|
||||
wrapper.passthrough(Types.VAR_INT); // Data
|
||||
getSpawnTrackerWithDataHandler1_19(EntityTypes1_21_5.FALLING_BLOCK).handle(wrapper);
|
||||
return;
|
||||
}
|
||||
|
||||
tracker(wrapper.user()).addEntity(entityId, EntityTypes1_21_5.EXPERIENCE_ORB);
|
||||
|
||||
// Back to its own special packet
|
||||
wrapper.setPacketType(ClientboundPackets1_21_2.ADD_EXPERIENCE_ORB);
|
||||
wrapper.passthrough(Types.DOUBLE); // X
|
||||
wrapper.passthrough(Types.DOUBLE); // Y
|
||||
wrapper.passthrough(Types.DOUBLE); // Z
|
||||
wrapper.read(Types.BYTE); // Pitch
|
||||
wrapper.read(Types.BYTE); // Yaw
|
||||
wrapper.read(Types.BYTE); // Head yaw
|
||||
|
||||
final int data = wrapper.read(Types.VAR_INT);
|
||||
wrapper.write(Types.SHORT, (short) data);
|
||||
|
||||
final short velocityX = wrapper.read(Types.SHORT);
|
||||
final short velocityY = wrapper.read(Types.SHORT);
|
||||
final short velocityZ = wrapper.read(Types.SHORT);
|
||||
if (velocityX != 0 || velocityY != 0 || velocityZ != 0) {
|
||||
// Send movement separately
|
||||
final PacketWrapper motionPacket = wrapper.create(ClientboundPackets1_21_2.SET_ENTITY_MOTION);
|
||||
motionPacket.write(Types.VAR_INT, entityId);
|
||||
motionPacket.write(Types.SHORT, velocityX);
|
||||
motionPacket.write(Types.SHORT, velocityY);
|
||||
motionPacket.write(Types.SHORT, velocityZ);
|
||||
wrapper.send(Protocol1_21_5To1_21_4.class);
|
||||
motionPacket.send(Protocol1_21_5To1_21_4.class);
|
||||
wrapper.cancel();
|
||||
}
|
||||
});
|
||||
|
||||
final RegistryDataRewriter registryDataRewriter = new RegistryDataRewriter(protocol) {
|
||||
@Override
|
||||
public RegistryEntry[] handle(final UserConnection connection, final String key, final RegistryEntry[] entries) {
|
||||
final boolean trimPatternRegistry = key.equals("trim_pattern");
|
||||
if (trimPatternRegistry || key.equals("trim_material")) {
|
||||
updateTrim(entries, trimPatternRegistry ? "template_item" : "ingredient");
|
||||
return super.handle(connection, key, entries);
|
||||
}
|
||||
|
||||
if (key.equals("enchantment")) {
|
||||
updateEnchantment(entries);
|
||||
return super.handle(connection, key, entries);
|
||||
}
|
||||
|
||||
if (!key.equals("wolf_variant")) {
|
||||
return super.handle(connection, key, entries);
|
||||
}
|
||||
|
||||
for (final RegistryEntry entry : entries) {
|
||||
if (entry.tag() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final CompoundTag variant = (CompoundTag) entry.tag();
|
||||
final CompoundTag assets = (CompoundTag) variant.remove("assets");
|
||||
variant.put("wild_texture", assets.get("wild"));
|
||||
variant.put("tame_texture", assets.get("tame"));
|
||||
variant.put("angry_texture", assets.get("angry"));
|
||||
variant.put("biomes", new ListTag<>(StringTag.class));
|
||||
}
|
||||
return entries;
|
||||
}
|
||||
|
||||
private void updateTrim(final RegistryEntry[] entries, final String itemKey) {
|
||||
for (final RegistryEntry entry : entries) {
|
||||
if (entry.tag() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final CompoundTag tag = (CompoundTag) entry.tag();
|
||||
tag.putString(itemKey, "stone"); // dummy ingredient
|
||||
}
|
||||
}
|
||||
};
|
||||
protocol.registerClientbound(ClientboundConfigurationPackets1_21.REGISTRY_DATA, wrapper -> {
|
||||
final String registryKey = Key.stripMinecraftNamespace(wrapper.passthrough(Types.STRING));
|
||||
if (NEW_REGISTRIES.contains(registryKey)) {
|
||||
wrapper.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
final RegistryEntry[] entries = wrapper.read(Types.REGISTRY_ENTRY_ARRAY);
|
||||
if (registryKey.equals("enchantment")) {
|
||||
final List<String> identifiers = new ArrayList<>(entries.length);
|
||||
for (final RegistryEntry entry : entries) {
|
||||
identifiers.add(entry.key());
|
||||
}
|
||||
wrapper.user().get(HashedItemConverterStorage.class).setEnchantments(identifiers);
|
||||
}
|
||||
|
||||
wrapper.write(Types.REGISTRY_ENTRY_ARRAY, registryDataRewriter.handle(wrapper.user(), registryKey, entries));
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_5.LOGIN, wrapper -> {
|
||||
final int entityId = wrapper.passthrough(Types.INT); // Entity id
|
||||
wrapper.passthrough(Types.BOOLEAN); // Hardcore
|
||||
wrapper.passthrough(Types.STRING_ARRAY); // World List
|
||||
wrapper.passthrough(Types.VAR_INT); // Max players
|
||||
wrapper.passthrough(Types.VAR_INT); // View distance
|
||||
wrapper.passthrough(Types.VAR_INT); // Simulation distance
|
||||
wrapper.passthrough(Types.BOOLEAN); // Reduced debug info
|
||||
wrapper.passthrough(Types.BOOLEAN); // Show death screen
|
||||
wrapper.passthrough(Types.BOOLEAN); // Limited crafting
|
||||
final int dimensionId = wrapper.passthrough(Types.VAR_INT);
|
||||
final String world = wrapper.passthrough(Types.STRING);
|
||||
trackWorldDataByKey1_20_5(wrapper.user(), dimensionId, world);
|
||||
trackPlayer(wrapper.user(), entityId);
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_5.RESPAWN, wrapper -> {
|
||||
final int dimensionId = wrapper.passthrough(Types.VAR_INT);
|
||||
final String world = wrapper.passthrough(Types.STRING);
|
||||
trackWorldDataByKey1_20_5(wrapper.user(), dimensionId, world);
|
||||
});
|
||||
|
||||
protocol.registerClientbound(ClientboundPackets1_21_5.SET_PLAYER_TEAM, wrapper -> {
|
||||
wrapper.passthrough(Types.STRING); // Team Name
|
||||
final byte action = wrapper.passthrough(Types.BYTE); // Mode
|
||||
if (action == 0 || action == 2) {
|
||||
wrapper.passthrough(Types.TAG); // Display Name
|
||||
wrapper.passthrough(Types.BYTE); // Flags
|
||||
|
||||
final int nametagVisibility = wrapper.read(Types.VAR_INT);
|
||||
final int collisionRule = wrapper.read(Types.VAR_INT);
|
||||
wrapper.write(Types.STRING, visibility(nametagVisibility));
|
||||
wrapper.write(Types.STRING, collision(collisionRule));
|
||||
|
||||
wrapper.passthrough(Types.VAR_INT); // Color
|
||||
wrapper.passthrough(Types.TAG); // Prefix
|
||||
wrapper.passthrough(Types.TAG); // Suffix
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateEnchantment(final RegistryEntry[] entries) {
|
||||
for (final RegistryEntry entry : entries) {
|
||||
if (entry.tag() == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final CompoundTag enchantment = (CompoundTag) entry.tag();
|
||||
final ListTag<StringTag> slots = enchantment.getListTag("slots", StringTag.class);
|
||||
if (slots != null) {
|
||||
slots.getValue().removeIf(tag -> tag.getValue().equals("saddle")); // Remove saddle slot
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String visibility(final int id) {
|
||||
return switch (id) {
|
||||
case 0 -> "always";
|
||||
case 1 -> "never";
|
||||
case 2 -> "hideForOtherTeams";
|
||||
case 3 -> "hideForOwnTeam";
|
||||
default -> "always";
|
||||
};
|
||||
}
|
||||
|
||||
private String collision(final int id) {
|
||||
return switch (id) {
|
||||
case 0 -> "always";
|
||||
case 1 -> "never";
|
||||
case 2 -> "pushOtherTeams";
|
||||
case 3 -> "pushOwnTeam";
|
||||
default -> "always";
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerRewrites() {
|
||||
final EntityDataTypes1_21_5 entityDataTypes = VersionedTypes.V1_21_5.entityDataTypes;
|
||||
final EntityDataTypes1_21_2 mappedEntityDataTypes = VersionedTypes.V1_21_4.entityDataTypes;
|
||||
filter().handler((event, data) -> {
|
||||
final int id = data.dataType().typeId();
|
||||
if (id == entityDataTypes.wolfVariantType.typeId()) {
|
||||
final int type = data.value();
|
||||
final Holder<WolfVariant> variant = Holder.of(type);
|
||||
data.setTypeAndValue(mappedEntityDataTypes.wolfVariantType, variant);
|
||||
return;
|
||||
}
|
||||
|
||||
int mappedId = id;
|
||||
if (id == entityDataTypes.cowVariantType.typeId()
|
||||
|| id == entityDataTypes.pigVariantType.typeId()
|
||||
|| id == entityDataTypes.chickenVariantType.typeId()
|
||||
|| id == entityDataTypes.wolfSoundVariantType.typeId()) {
|
||||
event.cancel();
|
||||
return;
|
||||
} else if (id > entityDataTypes.chickenVariantType.typeId()) {
|
||||
mappedId -= 4;
|
||||
} else if (id > entityDataTypes.pigVariantType.typeId()) {
|
||||
mappedId -= 3;
|
||||
} else if (id > entityDataTypes.wolfSoundVariantType.typeId()) {
|
||||
mappedId -= 2;
|
||||
} else if (id > entityDataTypes.cowVariantType.typeId()) {
|
||||
mappedId -= 1;
|
||||
}
|
||||
data.setDataType(mappedEntityDataTypes.byId(mappedId));
|
||||
});
|
||||
|
||||
registerEntityDataTypeHandler1_20_3(
|
||||
mappedEntityDataTypes.itemType,
|
||||
mappedEntityDataTypes.blockStateType,
|
||||
mappedEntityDataTypes.optionalBlockStateType,
|
||||
mappedEntityDataTypes.particleType,
|
||||
mappedEntityDataTypes.particlesType,
|
||||
mappedEntityDataTypes.componentType,
|
||||
mappedEntityDataTypes.optionalComponentType
|
||||
);
|
||||
|
||||
filter().type(EntityTypes1_21_5.ABSTRACT_MINECART).addIndex(13); // Custom display
|
||||
filter().type(EntityTypes1_21_5.ABSTRACT_MINECART).index(11).handler((event, data) -> {
|
||||
final int state = (int) data.getValue();
|
||||
final int mappedBlockState = protocol.getMappingData().getNewBlockStateId(state);
|
||||
data.setTypeAndValue(entityDataTypes.varIntType, mappedBlockState);
|
||||
event.createExtraData(new EntityData(13, mappedEntityDataTypes.booleanType, true));
|
||||
});
|
||||
|
||||
filter().type(EntityTypes1_21_5.MOOSHROOM).index(17).handler(((event, data) -> {
|
||||
final int typeId = data.value();
|
||||
final String typeName = typeId == 0 ? "red" : "brown";
|
||||
data.setTypeAndValue(entityDataTypes.stringType, typeName);
|
||||
}));
|
||||
|
||||
filter().type(EntityTypes1_21_5.ABSTRACT_HORSE).index(17).handler((event, data) -> {
|
||||
// Store data and set saddled flag if needed
|
||||
final TrackedEntity entity = event.trackedEntity();
|
||||
final byte horseData = data.value();
|
||||
boolean saddled = false;
|
||||
|
||||
final HorseDataStorage horseDataStorage;
|
||||
if (entity.hasData() && (horseDataStorage = entity.data().get(HorseDataStorage.class)) != null && horseDataStorage.saddled()) {
|
||||
saddled = true;
|
||||
data.setValue((byte) (horseData | BlockItemPacketRewriter1_21_5.SADDLED_FLAG));
|
||||
}
|
||||
|
||||
entity.data().put(new HorseDataStorage(horseData, saddled));
|
||||
});
|
||||
|
||||
filter().type(EntityTypes1_21_5.CHICKEN).cancel(17); // Chicken variant
|
||||
filter().type(EntityTypes1_21_5.COW).cancel(17); // Cow variant
|
||||
filter().type(EntityTypes1_21_5.PIG).cancel(19); // Pig variant
|
||||
filter().type(EntityTypes1_21_5.WOLF).cancel(23); // Sound variant
|
||||
filter().type(EntityTypes1_21_5.EXPERIENCE_ORB).cancel(8); // Value
|
||||
|
||||
filter().type(EntityTypes1_21_5.DOLPHIN).addIndex(17); // Treasure pos
|
||||
filter().type(EntityTypes1_21_5.TURTLE).addIndex(17); // Home pos
|
||||
|
||||
// Saddled
|
||||
filter().type(EntityTypes1_21_5.PIG).addIndex(17);
|
||||
filter().type(EntityTypes1_21_5.STRIDER).addIndex(19);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMappingDataLoaded() {
|
||||
mapTypes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType typeFromId(final int type) {
|
||||
return EntityTypes1_21_5.getTypeFromId(type);
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.storage;
|
||||
|
||||
import com.viaversion.viaversion.api.connection.StorableObject;
|
||||
import com.viaversion.viaversion.api.minecraft.codec.CodecContext;
|
||||
import com.viaversion.viaversion.api.minecraft.codec.CodecContext.RegistryAccess;
|
||||
import com.viaversion.viaversion.api.minecraft.codec.hash.Hasher;
|
||||
import com.viaversion.viaversion.api.protocol.Protocol;
|
||||
import com.viaversion.viaversion.codec.CodecRegistryContext;
|
||||
import com.viaversion.viaversion.codec.hash.HashFunction;
|
||||
import com.viaversion.viaversion.codec.hash.HashOps;
|
||||
import com.viaversion.viaversion.util.SerializerVersion;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class HashedItemConverterStorage implements StorableObject {
|
||||
|
||||
private final List<String> enchantments = new ArrayList<>();
|
||||
private final Hasher hasher;
|
||||
|
||||
public HashedItemConverterStorage(final Protocol<?, ?, ?, ?> protocol) {
|
||||
final RegistryAccess registryAccess = RegistryAccess.of(this.enchantments, protocol.getMappingData());
|
||||
final CodecContext context = new CodecRegistryContext(protocol, SerializerVersion.V1_21_5, SerializerVersion.V1_21_5, registryAccess, false);
|
||||
this.hasher = new HashOps(context, HashFunction.CRC32C);
|
||||
}
|
||||
|
||||
public void setEnchantments(final List<String> enchantments) {
|
||||
this.enchantments.clear();
|
||||
this.enchantments.addAll(enchantments);
|
||||
}
|
||||
|
||||
public Hasher hasher() {
|
||||
return hasher; // reusable
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
|
||||
* Copyright (C) 2016-2025 ViaVersion and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.storage;
|
||||
|
||||
public record HorseDataStorage(byte data, boolean saddled) {
|
||||
}
|
||||
Loaded 100 of 147 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user