Skip to content

Commit 64b454d

Browse files
committed
Fix world border scale in 1.21.9->1.21.7
1 parent 433f46e commit 64b454d

File tree

7 files changed

+85
-4
lines changed

7 files changed

+85
-4
lines changed

common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777

7878
public interface ViaBackwardsPlatform {
7979

80-
String MINIMUM_VV_VERSION = "5.5.0";
80+
String MINIMUM_VV_VERSION = "5.5.1";
8181

8282
/**
8383
* Initialize ViaBackwards.

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/Protocol1_21_9To1_21_7.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.rewriter.ComponentRewriter1_21_9;
2727
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.rewriter.EntityPacketRewriter1_21_9;
2828
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.rewriter.ParticleRewriter1_21_9;
29+
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.storage.DimensionScaleStorage;
2930
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.storage.PlayerRotationStorage;
3031
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.tracker.EntityTracker1_21_9;
3132
import com.viaversion.viaversion.api.connection.UserConnection;
@@ -205,6 +206,7 @@ public void init(final UserConnection connection) {
205206
addEntityTracker(connection, new EntityTracker1_21_9(connection, EntityTypes1_21_9.PLAYER));
206207
addItemHasher(connection, new ItemHasherBase(this, connection));
207208
connection.put(new PlayerRotationStorage());
209+
connection.put(new DimensionScaleStorage());
208210
}
209211

210212
@Override

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/BlockItemPacketRewriter1_21_9.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,15 @@
2020
import com.viaversion.nbt.tag.CompoundTag;
2121
import com.viaversion.viabackwards.api.rewriters.BackwardsStructuredItemRewriter;
2222
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.Protocol1_21_9To1_21_7;
23+
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.storage.DimensionScaleStorage;
2324
import com.viaversion.viaversion.api.connection.UserConnection;
25+
import com.viaversion.viaversion.api.data.entity.EntityTracker;
2426
import com.viaversion.viaversion.api.minecraft.ResolvableProfile;
2527
import com.viaversion.viaversion.api.minecraft.data.StructuredDataContainer;
2628
import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
2729
import com.viaversion.viaversion.api.minecraft.item.Item;
30+
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
31+
import com.viaversion.viaversion.api.type.Types;
2832
import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_21_5;
2933
import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.rewriter.RecipeDisplayRewriter1_21_5;
3034
import com.viaversion.viaversion.protocols.v1_21_5to1_21_6.packet.ServerboundPacket1_21_6;
@@ -68,6 +72,9 @@ public void registerPackets() {
6872
recipeRewriter.registerUpdateRecipes(ClientboundPackets1_21_9.UPDATE_RECIPES);
6973
recipeRewriter.registerRecipeBookAdd(ClientboundPackets1_21_9.RECIPE_BOOK_ADD);
7074
recipeRewriter.registerPlaceGhostRecipe(ClientboundPackets1_21_9.PLACE_GHOST_RECIPE);
75+
76+
protocol.registerClientbound(ClientboundPackets1_21_9.INITIALIZE_BORDER, this::updateBorderCenter);
77+
protocol.registerClientbound(ClientboundPackets1_21_9.SET_BORDER_CENTER, this::updateBorderCenter);
7178
}
7279

7380
@Override
@@ -123,4 +130,19 @@ protected void restoreBackupData(final Item item, final StructuredDataContainer
123130
));
124131
}
125132
}
133+
134+
private void updateBorderCenter(final PacketWrapper wrapper) {
135+
double centerX = wrapper.read(Types.DOUBLE);
136+
double centerZ = wrapper.read(Types.DOUBLE);
137+
138+
final EntityTracker tracker = protocol.getEntityRewriter().tracker(wrapper.user());
139+
if (tracker.currentDimensionId() != -1) {
140+
final double scale = wrapper.user().get(DimensionScaleStorage.class).getScale(tracker.currentDimensionId());
141+
centerX *= scale;
142+
centerZ *= scale;
143+
}
144+
145+
wrapper.write(Types.DOUBLE, centerX);
146+
wrapper.write(Types.DOUBLE, centerZ);
147+
}
126148
}

common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/EntityPacketRewriter1_21_9.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@
2323
import com.viaversion.viabackwards.api.rewriters.BackwardsRegistryRewriter;
2424
import com.viaversion.viabackwards.api.rewriters.EntityRewriter;
2525
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.Protocol1_21_9To1_21_7;
26+
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.storage.DimensionScaleStorage;
2627
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.storage.MannequinData;
2728
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.storage.PlayerRotationStorage;
2829
import com.viaversion.viaversion.api.connection.UserConnection;
2930
import com.viaversion.viaversion.api.minecraft.BlockPosition;
3031
import com.viaversion.viaversion.api.minecraft.GameProfile;
3132
import com.viaversion.viaversion.api.minecraft.GlobalBlockPosition;
33+
import com.viaversion.viaversion.api.minecraft.RegistryEntry;
3234
import com.viaversion.viaversion.api.minecraft.ResolvableProfile;
3335
import com.viaversion.viaversion.api.minecraft.Vector3d;
3436
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
@@ -127,7 +129,27 @@ public void registerPackets() {
127129
wrapper.read(Types.FLOAT); // Pitch
128130
});
129131

130-
final RegistryDataRewriter registryDataRewriter = new BackwardsRegistryRewriter(protocol);
132+
final RegistryDataRewriter registryDataRewriter = new BackwardsRegistryRewriter(protocol) {
133+
@Override
134+
public void trackDimensionAndBiomes(final UserConnection connection, final String registryKey, final RegistryEntry[] entries) {
135+
super.trackDimensionAndBiomes(connection, registryKey, entries);
136+
if (!registryKey.equals("dimension_type")) {
137+
return;
138+
}
139+
140+
final DimensionScaleStorage dimensionScaleStorage = connection.get(DimensionScaleStorage.class);
141+
for (int i = 0; i < entries.length; i++) {
142+
final RegistryEntry entry = entries[i];
143+
final CompoundTag dimension = (CompoundTag) entry.tag();
144+
if (dimension == null) {
145+
continue;
146+
}
147+
148+
final double coordinateScale = dimension.getDouble("coordinate_scale", 1);
149+
dimensionScaleStorage.setScale(i, coordinateScale);
150+
}
151+
}
152+
};
131153
protocol.registerClientbound(ClientboundConfigurationPackets1_21_9.REGISTRY_DATA, registryDataRewriter::handle);
132154

133155
protocol.registerServerbound(ServerboundPackets1_21_6.MOVE_PLAYER_POS_ROT, wrapper -> {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
3+
* Copyright (C) 2016-2025 ViaVersion and contributors
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.storage;
19+
20+
import com.viaversion.viaversion.api.connection.StorableObject;
21+
import java.util.HashMap;
22+
import java.util.Map;
23+
24+
public final class DimensionScaleStorage implements StorableObject {
25+
26+
private final Map<Integer, Double> dimensionScales = new HashMap<>(4);
27+
28+
public double getScale(final int dimensionId) {
29+
return dimensionScales.getOrDefault(dimensionId, 1D);
30+
}
31+
32+
public void setScale(final int dimensionId, final double scale) {
33+
dimensionScales.put(dimensionId, scale);
34+
}
35+
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ metadata.format.version = "1.1"
33
[versions]
44

55
# ViaVersion
6-
viaver = "5.5.0"
6+
viaver = "5.5.1-SNAPSHOT"
77

88
# Common provided
99
netty = "4.0.20.Final"

sponge/src/main/resources/META-INF/sponge_plugins.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
},
4848
{
4949
"id": "viaversion",
50-
"version": "[5.5.0-SNAPSHOT,)"
50+
"version": "[5.5.1-SNAPSHOT,)"
5151
}
5252
]
5353
},

0 commit comments

Comments
 (0)