Compare commits

...
10 Commits
Author SHA1 Message Date
Nassim Jahnke 07baf2d068 5.7.2 Release 2026-03-01 16:37:00 +01:00
Nassim Jahnke 53a45d6ab6 [ci skip] Add gradle to dependabot config 2026-02-20 22:17:57 +01:00
Nassim Jahnke 831da784e6 Handle 1.21.11->1.21.9 biome sounds and particles 2026-02-20 13:56:30 +01:00
Florian Reuth 69620f894b [ci skip] Update my donation URL (#1198) 2026-02-05 17:09:24 +01:00
dependabot[bot] e5be7a8260 [ci skip] Bump actions/checkout from 6.0.1 to 6.0.2 (#1196)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-02 14:08:24 +01:00
dependabot[bot] a20f6db968 [ci skip] Bump actions/setup-java from 5.1.0 to 5.2.0 (#1197)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-02 14:08:10 +01:00
Nassim Jahnke a5949b9d4b [ci skip] Update supported Velocity versions 2026-01-31 12:05:07 +01:00
FlorianMichael e433fb3066 Add config option for code of conduct emulation in 1.21.9->1.21.7 (#1194) 2026-01-28 17:16:23 +01:00
Nassim Jahnke f3be21ed9d Fix trusted tag limiting
Fixes ViaVersion/ViaVersion#4792
2026-01-25 13:16:36 +01:00
FlorianMichael 2a2150beed [ci skip] Remove Gradle wrapper update action (#1192) 2026-01-24 19:25:46 +01:00
29 changed files with 148 additions and 72 deletions

No files matched your search

+1 -1
View File
@@ -1,3 +1,3 @@
github: kennytv
patreon: kennytv
custom: ['https://florianmichael.de/donate']
custom: ['https://florianreuth.de/donate']
+6
View File
@@ -6,3 +6,9 @@ updates:
directory: "/"
schedule:
interval: "monthly"
- package-ecosystem: "gradle"
cooldown:
default-days: 7
directory: "/"
schedule:
interval: "monthly"
+3 -3
View File
@@ -11,13 +11,13 @@ jobs:
timeout-minutes: 30
steps:
- name: Checkout Repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # 6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
with:
persist-credentials: false
- name: Set up Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # 5.0.0
uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # 5.0.1
- name: Set up JDK 17
uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # 5.1.0
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # 5.2.0
with:
distribution: 'temurin'
java-version: 17
+3 -3
View File
@@ -16,13 +16,13 @@ jobs:
timeout-minutes: 30
steps:
- name: Checkout Repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # 6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
with:
persist-credentials: false
- name: Set up Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # 5.0.0
uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # 5.0.1
- name: Set up JDK 17
uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # 5.1.0
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # 5.2.0
with:
distribution: 'temurin'
java-version: 17
@@ -1,22 +0,0 @@
name: Update Gradle Wrapper
on:
workflow_dispatch:
schedule:
- cron: "0 0 * * 0"
permissions:
contents: write
pull-requests: write
jobs:
update-gradle-wrapper:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Checkout Repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # 6.0.1
with:
fetch-depth: 0
persist-credentials: false
- name: Update Gradle Wrapper
uses: gradle-update/update-gradle-wrapper-action@512b1875f3b6270828abfe77b247d5895a2da1e5 # 2.1.0
@@ -46,6 +46,7 @@ public class ViaBackwardsConfig extends Config implements com.viaversion.viaback
private boolean suppressEmulationWarnings;
private boolean dialogsViaChests;
private DialogStyleConfig dialogStyleConfig;
private boolean codeOfConductAsDialog;
public ViaBackwardsConfig(File configFile, Logger logger) {
super(configFile, logger);
@@ -73,6 +74,7 @@ public class ViaBackwardsConfig extends Config implements com.viaversion.viaback
suppressEmulationWarnings = getBoolean("suppress-emulation-warnings", false);
dialogsViaChests = getBoolean("dialogs-via-chests", true);
dialogStyleConfig = loadDialogStyleConfig(getSection("dialog-style"));
codeOfConductAsDialog = getBoolean("code-of-conduct-as-dialog", true);
}
private DialogStyleConfig loadDialogStyleConfig(final ConfigSection section) {
@@ -172,6 +174,11 @@ public class ViaBackwardsConfig extends Config implements com.viaversion.viaback
return dialogStyleConfig;
}
@Override
public boolean codeOfConductAsDialog() {
return codeOfConductAsDialog;
}
@Override
public URL getDefaultConfigURL() {
return getClass().getClassLoader().getResource("assets/viabackwards/config.yml");
@@ -126,4 +126,11 @@ public interface ViaBackwardsConfig extends Config {
* @return the dialog style configuration
*/
DialogStyleConfig dialogStyleConfig();
/**
* If true, the code of conduct will be displayed as a dialog for 1.21.7 clients on 1.21.9+ servers.
*
* @return true if enabled
*/
boolean codeOfConductAsDialog();
}
@@ -78,7 +78,7 @@ import java.util.logging.Logger;
public interface ViaBackwardsPlatform {
String MINIMUM_VV_VERSION = "5.7.1";
String MINIMUM_VV_VERSION = "5.7.2";
default void init(final File configFile) {
init(new ViaBackwardsConfig(configFile, getLogger()));
@@ -112,7 +112,7 @@ public final class BlockItemPacketRewriter1_20_2 extends BackwardsItemRewriter<C
protocol.registerClientbound(ClientboundPackets1_20_2.BLOCK_ENTITY_DATA, wrapper -> {
wrapper.passthrough(Types.BLOCK_POSITION1_14); // Position
wrapper.passthrough(Types.VAR_INT); // Type
wrapper.write(Types.NAMED_COMPOUND_TAG, handleBlockEntity(wrapper.read(Types.COMPOUND_TAG)));
wrapper.write(Types.NAMED_COMPOUND_TAG, handleBlockEntity(wrapper.read(Types.TRUSTED_COMPOUND_TAG)));
});
protocol.registerClientbound(ClientboundPackets1_20_2.LEVEL_CHUNK_WITH_LIGHT, wrapper -> {
@@ -363,13 +363,13 @@ public final class Protocol1_20_3To1_20_2 extends BackwardsProtocol<ClientboundP
}
private void convertComponent(final PacketWrapper wrapper) {
final Tag tag = wrapper.read(Types.TAG);
final Tag tag = wrapper.read(Types.TRUSTED_TAG);
translatableRewriter.processTag(wrapper.user(), tag);
wrapper.write(Types.COMPONENT, ComponentUtil.tagToJson(tag));
}
private void convertOptionalComponent(final PacketWrapper wrapper) {
final Tag tag = wrapper.read(Types.OPTIONAL_TAG);
final Tag tag = wrapper.read(Types.TRUSTED_OPTIONAL_TAG);
translatableRewriter.processTag(wrapper.user(), tag);
wrapper.write(Types.OPTIONAL_COMPONENT, ComponentUtil.tagToJson(tag));
}
@@ -130,7 +130,7 @@ public final class Protocol1_20_5To1_20_3 extends BackwardsProtocol<ClientboundP
});
registerClientbound(ClientboundPackets1_20_5.SERVER_DATA, wrapper -> {
wrapper.passthrough(Types.TAG); // MOTD
wrapper.passthrough(Types.TRUSTED_TAG); // MOTD
wrapper.passthrough(Types.OPTIONAL_BYTE_ARRAY_PRIMITIVE); // Icon
wrapper.write(Types.BOOLEAN, wrapper.user().get(SecureChatStorage.class).enforcesSecureChat());
});
@@ -71,7 +71,7 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem
protocol.registerClientbound(ClientboundPackets1_20_5.BLOCK_ENTITY_DATA, wrapper -> {
wrapper.passthrough(Types.BLOCK_POSITION1_14); // Position
wrapper.passthrough(Types.VAR_INT); // Block entity type
final CompoundTag tag = wrapper.passthrough(Types.COMPOUND_TAG);
final CompoundTag tag = wrapper.passthrough(Types.TRUSTED_COMPOUND_TAG);
blockRewriter.updateBlockEntityTag(tag);
});
@@ -196,7 +196,7 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem
wrapper.passthrough(Types.BYTE); // X
wrapper.passthrough(Types.BYTE); // Y
wrapper.passthrough(Types.BYTE); // Rotation
wrapper.passthrough(Types.OPTIONAL_TAG); // Display name
wrapper.passthrough(Types.TRUSTED_OPTIONAL_TAG); // Display name
}
}
});
@@ -130,7 +130,6 @@ public final class Protocol1_21_11To1_21_9 extends BackwardsProtocol<Clientbound
final CompoundTag attributes = tag.getCompoundTag("attributes");
moveAttribute(tag, attributes, "visual/cloud_height", "cloud_height", Function.identity(), null);
moveAttribute(tag, attributes, "gameplay/can_start_raid", "has_raids", Function.identity(), trueTag);
moveAttribute(tag, attributes, "gameplay/can_start_raid", "has_raids", Function.identity(), trueTag);
moveAttribute(tag, attributes, "gameplay/piglins_zombify", "piglin_safe", attributeTag -> ((NumberTag) attributeTag).asBoolean() ? ByteTag.ZERO : trueTag, ByteTag.ZERO);
moveAttribute(tag, attributes, "gameplay/respawn_anchor_works", "respawn_anchor_works", Function.identity(), trueTag);
moveAttribute(tag, attributes, "gameplay/bed_rule", "bed_works", attributeTag -> {
@@ -143,15 +142,86 @@ public final class Protocol1_21_11To1_21_9 extends BackwardsProtocol<Clientbound
registryDataRewriter.addHandler("worldgen/biome", (key, tag) -> {
final CompoundTag effects = tag.getCompoundTag("effects");
// Colors
moveAttribute(effects, effects, "water_color", "water_color", this::mapColor, new IntTag(4159204));
moveAttribute(effects, effects, "foliage_color", "foliage_color", this::mapColor, null);
moveAttribute(effects, effects, "dry_foliage_color", "dry_foliage_color", this::mapColor, null);
moveAttribute(effects, effects, "grass_color", "grass_color", this::mapColor, null);
final CompoundTag attributes = tag.removeUnchecked("attributes");
moveAttribute(effects, attributes, "visual/sky_color", "sky_color", this::mapColor, new IntTag(0));
moveAttribute(effects, attributes, "visual/water_fog_color", "water_fog_color", this::mapColor, new IntTag(-16448205));
moveAttribute(effects, attributes, "visual/fog_color", "fog_color", this::mapColor, new IntTag(Key.equals(key, "the_end") ? END_FOG_COLOR : OVERWORLD_FOG_COLOR)); // overworld fog color as default
moveAttribute(effects, effects, "water_color", "water_color", this::mapColor, new IntTag(4159204));
moveAttribute(effects, effects, "foliage_color", "foliage_color", this::mapColor, null);
moveAttribute(effects, effects, "dry_foliage_color", "dry_foliage_color", this::mapColor, null);
moveAttribute(effects, effects, "grass_color", "grass_color", this::mapColor, null);
if (attributes == null) {
return;
}
// Music and sounds
final CompoundTag backgroundMusic = TagUtil.getNamespacedCompoundTag(attributes, "audio/background_music");
if (backgroundMusic != null) {
final CompoundTag def = backgroundMusic.getCompoundTag("default");
if (def != null) {
final CompoundTag data = new CompoundTag();
final Tag maxDelay = def.get("max_delay");
final Tag minDelay = def.get("min_delay");
final Tag sound = def.get("sound");
if (maxDelay != null) {
data.put("max_delay", maxDelay);
}
if (minDelay != null) {
data.put("min_delay", minDelay);
}
if (sound != null) {
data.put("sound", sound);
}
// Assume this by default
if (!data.contains("replace_current_music")) {
data.putBoolean("replace_current_music", false);
}
final CompoundTag entry = new CompoundTag();
entry.put("data", data);
entry.putInt("weight", 1);
final ListTag<CompoundTag> musicList = new ListTag<>(CompoundTag.class);
musicList.add(entry);
effects.put("music", musicList);
}
}
final CompoundTag ambientSounds = TagUtil.getNamespacedCompoundTag(attributes, "audio/ambient_sounds");
if (ambientSounds != null) {
final Tag loop = ambientSounds.get("loop");
if (loop != null) {
effects.put("ambient_sound", loop);
}
final Tag mood = ambientSounds.get("mood");
if (mood != null) {
effects.put("mood_sound", mood);
}
final Tag additions = ambientSounds.get("additions");
if (additions != null) {
effects.put("additions_sound", additions);
}
}
// Particles
final ListTag<CompoundTag> ambientParticles = TagUtil.getNamespacedCompoundTagList(attributes, "visual/ambient_particles");
if (ambientParticles != null && !ambientParticles.isEmpty()) {
final CompoundTag first = ambientParticles.get(0);
final Tag probability = first.get("probability");
final CompoundTag particle = first.getCompoundTag("particle");
// Single particle
final CompoundTag options = new CompoundTag();
options.put("probability", probability);
options.put("options", particle);
effects.put("particle", options);
}
});
registryDataRewriter.addHandler("enchantment", (key, tag) -> {
final CompoundTag effects = tag.getCompoundTag("effects");
@@ -402,7 +402,7 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
wrapper.passthrough(Types.VAR_INT); // Latency
}
if (actions.get(5)) {
final Tag displayName = wrapper.passthrough(Types.OPTIONAL_TAG);
final Tag displayName = wrapper.passthrough(Types.TRUSTED_OPTIONAL_TAG);
protocol.getComponentRewriter().processTag(wrapper.user(), displayName);
}
@@ -152,7 +152,7 @@ public final class Protocol1_21_4To1_21_2 extends BackwardsProtocol<ClientboundP
wrapper.passthrough(Types.VAR_INT); // Latency
}
if (actions.get(5)) {
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.OPTIONAL_TAG));
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.TRUSTED_OPTIONAL_TAG));
}
if (actions.get(6)) {
wrapper.passthrough(Types.VAR_INT); // List order
@@ -154,7 +154,7 @@ public final class Protocol1_21_5To1_21_4 extends BackwardsProtocol<ClientboundP
}
}
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.OPTIONAL_TAG)); // Unsigned content
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.TRUSTED_OPTIONAL_TAG)); // Unsigned content
final int filterMaskType = wrapper.passthrough(Types.VAR_INT);
if (filterMaskType == 2) { // Partially filtered
@@ -162,8 +162,8 @@ public final class Protocol1_21_5To1_21_4 extends BackwardsProtocol<ClientboundP
}
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
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.TRUSTED_TAG)); // Name
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.TRUSTED_OPTIONAL_TAG)); // Target Name
});
registerServerbound(ServerboundPackets1_21_4.CHAT_COMMAND_SIGNED, wrapper -> {
wrapper.passthrough(Types.STRING); // Command
@@ -225,8 +225,8 @@ public final class BlockItemPacketRewriter1_21_5 extends BackwardsStructuredItem
// Display data
if (wrapper.passthrough(Types.BOOLEAN)) {
final Tag title = wrapper.passthrough(Types.TAG);
final Tag description = wrapper.passthrough(Types.TAG);
final Tag title = wrapper.passthrough(Types.TRUSTED_TAG);
final Tag description = wrapper.passthrough(Types.TRUSTED_TAG);
final ComponentRewriter componentRewriter = protocol.getComponentRewriter();
if (componentRewriter != null) {
componentRewriter.processTag(wrapper.user(), title);
@@ -169,7 +169,7 @@ public final class Protocol1_21_6To1_21_5 extends BackwardsProtocol<ClientboundP
final int id = wrapper.read(Types.VAR_INT) - 1;
CompoundTag tag;
if (id == -1) {
tag = (CompoundTag) wrapper.read(Types.TAG);
tag = (CompoundTag) wrapper.read(Types.TRUSTED_TAG);
} else {
tag = registryAndTags.fromRegistry(id);
}
@@ -185,7 +185,7 @@ public final class Protocol1_21_6To1_21_5 extends BackwardsProtocol<ClientboundP
final RegistryAndTags registryAndTags = wrapper.user().get(RegistryAndTags.class);
final ServerLinks serverLinks = wrapper.user().get(ServerLinks.class);
final CompoundTag tag = (CompoundTag) wrapper.read(Types.TAG);
final CompoundTag tag = (CompoundTag) wrapper.read(Types.TRUSTED_TAG);
final DialogViewProvider provider = Via.getManager().getProviders().get(DialogViewProvider.class);
provider.openDialog(wrapper.user(), new Dialog(registryAndTags, serverLinks, tag));
@@ -317,7 +317,7 @@ public final class Protocol1_21_6To1_21_5 extends BackwardsProtocol<ClientboundP
final String url = wrapper.passthrough(Types.STRING);
serverLinks.storeLink(id, url);
} else {
final Tag tag = wrapper.passthrough(Types.TAG);
final Tag tag = wrapper.passthrough(Types.TRUSTED_TAG);
final String url = wrapper.passthrough(Types.STRING);
serverLinks.storeLink(tag, url);
}
@@ -113,7 +113,7 @@ public class ChestDialogViewProvider implements DialogViewProvider {
final PacketWrapper openScreen = PacketWrapper.create(ClientboundPackets1_21_5.OPEN_SCREEN, connection);
openScreen.write(Types.VAR_INT, storage.containerId());
openScreen.write(Types.VAR_INT, 2); // Container type id
openScreen.write(Types.TAG, handleTag(connection, storage.dialog().title()));
openScreen.write(Types.TRUSTED_TAG, handleTag(connection, storage.dialog().title()));
openScreen.send(Protocol1_21_6To1_21_5.class);
updateDialog(connection, storage.dialog());
}
@@ -457,7 +457,7 @@ public class ChestDialogViewProvider implements DialogViewProvider {
final PacketWrapper openScreen = PacketWrapper.create(ClientboundPackets1_21_5.OPEN_SCREEN, connection);
openScreen.write(Types.VAR_INT, storage.containerId());
openScreen.write(Types.VAR_INT, 8); // Container type id
openScreen.write(Types.TAG, title);
openScreen.write(Types.TRUSTED_TAG, title);
openScreen.send(Protocol1_21_6To1_21_5.class);
final Item[] items = new Item[1];
@@ -18,6 +18,7 @@
package com.viaversion.viabackwards.protocol.v1_21_9to1_21_7;
import com.viaversion.nbt.tag.CompoundTag;
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;
@@ -139,8 +140,9 @@ public final class Protocol1_21_9To1_21_7 extends BackwardsProtocol<ClientboundP
});
registerClientbound(ClientboundConfigurationPackets1_21_9.CODE_OF_CONDUCT, ClientboundConfigurationPackets1_21_6.SHOW_DIALOG, wrapper -> {
if (wrapper.user().getProtocolInfo().protocolVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5)) {
// TODO Remove once we implement dialogs during the configuration state in 1.21.6->1.21.5
// TODO Remove once we implement dialogs during the configuration state in 1.21.6->1.21.5
final boolean supportsDialogs = wrapper.user().getProtocolInfo().protocolVersion().newerThan(ProtocolVersion.v1_21_5);
if (!ViaBackwards.getConfig().codeOfConductAsDialog() || !supportsDialogs) {
wrapper.cancel();
final PacketWrapper acceptPacket = wrapper.create(ServerboundConfigurationPackets1_21_9.ACCEPT_CODE_OF_CONDUCT);
@@ -181,7 +183,7 @@ public final class Protocol1_21_9To1_21_7 extends BackwardsProtocol<ClientboundP
no.put("action", disconnectAction);
tag.put("no", no);
wrapper.write(Types.TAG, tag);
wrapper.write(Types.TRUSTED_TAG, tag);
});
registerServerbound(ServerboundConfigurationPackets1_21_6.CUSTOM_CLICK_ACTION, wrapper -> {
@@ -277,7 +277,7 @@ public final class EntityPacketRewriter1_21_9 extends EntityRewriter<Clientbound
playerInfo.write(Types.VAR_INT, 0); // Gamemode
playerInfo.write(Types.BOOLEAN, false); // Listed
playerInfo.write(Types.VAR_INT, 0); // Latency
playerInfo.write(Types.OPTIONAL_TAG, null);
playerInfo.write(Types.TRUSTED_OPTIONAL_TAG, null);
playerInfo.write(Types.VAR_INT, 1000); // List order
playerInfo.write(Types.BOOLEAN, true); // Show hat
playerInfo.send(Protocol1_21_9To1_21_7.class);
@@ -292,7 +292,7 @@ public final class EntityPacketRewriter1_21_9 extends EntityRewriter<Clientbound
playerInfo.write(Types.PROFILE_ACTIONS_ENUM1_21_4, actions);
playerInfo.write(Types.VAR_INT, 1);
playerInfo.write(Types.UUID, mannequinData.uuid());
playerInfo.write(Types.OPTIONAL_TAG, displayName);
playerInfo.write(Types.TRUSTED_OPTIONAL_TAG, displayName);
playerInfo.send(Protocol1_21_9To1_21_7.class);
sendPlayerTeamDisplayName(connection, mannequinData, displayName);
@@ -304,13 +304,13 @@ public final class EntityPacketRewriter1_21_9 extends EntityRewriter<Clientbound
final PacketWrapper addTeam = PacketWrapper.create(ClientboundPackets1_21_6.SET_PLAYER_TEAM, connection);
addTeam.write(Types.STRING, mannequinData.name());
addTeam.write(Types.BYTE, mannequinData.hasTeam() ? (byte) 2 : 0); // Mode
addTeam.write(Types.TAG, nonNullDisplayName); // Display Name
addTeam.write(Types.TRUSTED_TAG, nonNullDisplayName); // Display Name
addTeam.write(Types.BYTE, (byte) 0); // Flags
addTeam.write(Types.VAR_INT, 0); // Nametag visibility
addTeam.write(Types.VAR_INT, 0); // Collision rule
addTeam.write(Types.VAR_INT, 15); // Color
addTeam.write(Types.TAG, nonNullDisplayName); // Prefix
addTeam.write(Types.TAG, new StringTag("")); // Suffix
addTeam.write(Types.TRUSTED_TAG, nonNullDisplayName); // Prefix
addTeam.write(Types.TRUSTED_TAG, new StringTag("")); // Suffix
if (!mannequinData.hasTeam()) {
addTeam.write(Types.STRING_ARRAY, new String[]{mannequinData.name()});
mannequinData.setHasTeam(true);
@@ -110,7 +110,7 @@ public final class Protocol1_21To1_20_5 extends BackwardsProtocol<ClientboundPac
cancelClientbound(ClientboundConfigurationPackets1_21.SERVER_LINKS);
registerClientbound(ClientboundPackets1_21.DISGUISED_CHAT, wrapper -> {
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.TAG)); // Message
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.TRUSTED_TAG)); // Message
final Holder<ChatType> chatType = wrapper.read(ChatType.TYPE);
if (chatType.isDirect()) {
@@ -137,7 +137,7 @@ public final class Protocol1_21To1_20_5 extends BackwardsProtocol<ClientboundPac
}
}
wrapper.passthrough(Types.OPTIONAL_TAG); // Unsigned content
wrapper.passthrough(Types.TRUSTED_OPTIONAL_TAG); // Unsigned content
final int filterMaskType = wrapper.passthrough(Types.VAR_INT);
if (filterMaskType == 2) {
@@ -152,8 +152,8 @@ public final class Protocol1_21To1_20_5 extends BackwardsProtocol<ClientboundPac
wrapper.write(Types.VAR_INT, chatType.id());
}
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.TAG)); // Name
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.OPTIONAL_TAG)); // Target Name
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.TRUSTED_TAG)); // Name
translatableRewriter.processTag(wrapper.user(), wrapper.passthrough(Types.TRUSTED_OPTIONAL_TAG)); // Target Name
});
registerClientbound(ClientboundPackets1_21.UPDATE_ATTRIBUTES, wrapper -> {
@@ -63,3 +63,8 @@ dialog-style:
previous-option: "&9Right click: &6Go to previous option"
set-text: "&9Left click/close: &6Set text"
close: "&9Left click: &6Close"
#
# If enabled, the code of conduct will be shown as a dialog for 1.21.7 clients on 1.21.9+ servers.
# Note that this is not supported for clients below 1.21.6 right now due to missing support for
# dialogs during the configuration phase.
code-of-conduct-as-dialog: true
+2 -2
View File
@@ -1,9 +1,9 @@
projectVersion=5.7.1
projectVersion=5.7.2
# Smile emoji (note that modrinth may not have added the version on release yet)
mcVersions=1.21.11, 1.21.10, 1.21.9, 1.21.8, 1.21.7, 1.21.6, 1.21.5, 1.21.4, 1.21.3, 1.21.2, 1.21.1, 1.21, 1.20.6, 1.20.5, 1.20.4, 1.20.3, 1.20.2, 1.20.1, 1.20, 1.19.4, 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.16, 1.15.2, 1.15.1, 1.15, 1.14.4, 1.14.3, 1.14.2, 1.14.1, 1.14, 1.13.2, 1.13.1, 1.13, 1.12.2, 1.12.1, 1.12, 1.11.2, 1.11.1, 1.11, 1.10.2, 1.10.1, 1.10
mcVersionRange=1.10-1.21.11
velocityVersion=3.4
velocityVersion=3.4-3.5
org.gradle.configureondemand=true
org.gradle.parallel=true
+2 -2
View File
@@ -3,7 +3,7 @@ metadata.format.version = "1.1"
[versions]
# ViaVersion
viaver = "5.7.1"
viaver = "5.7.2-SNAPSHOT"
# Common provided
netty = "4.0.20.Final"
@@ -14,7 +14,7 @@ checkerQual = "3.52.1"
# Platforms
paper = "1.16.5-R0.1-SNAPSHOT"
velocity = "3.1.1"
velocity = "3.4.0"
fabricLoader = "0.11.6"
viaProxy = "[3.0.0,4.0.0)"
Binary file not shown.
+2 -2
View File
@@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=72f44c9f8ebcb1af43838f45ee5c4aa9c5444898b3468ab3f4af7b6076c5bc3f
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
distributionSha256Sum=b266d5ff6b90eada6dc3b20cb090e3731302e553a27c5d3e4df1f0d76beaff06
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
@@ -47,7 +47,7 @@
},
{
"id": "viaversion",
"version": "[5.7.1-SNAPSHOT,)"
"version": "[5.7.2-SNAPSHOT,)"
}
]
},
@@ -48,6 +48,7 @@ public class VelocityPlugin implements ViaBackwardsPlatform {
@DataDirectory
private Path configPath;
@SuppressWarnings("deprecation")
@Subscribe(order = PostOrder.LATE)
public void onProxyStart(ProxyInitializeEvent event) {
this.logger = new LoggerWrapper(loggerSlf4j);