Skip to content

Commit 6b66611

Browse files
committed
Add new dimension and biome fields to nether and end
1 parent 89176f4 commit 6b66611

File tree

3 files changed

+92
-5
lines changed

3 files changed

+92
-5
lines changed

common/src/main/java/com/viaversion/viaversion/protocols/v1_21_9to1_21_11/Protocol1_21_9To1_21_11.java

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@
1919

2020
import com.viaversion.nbt.tag.ByteTag;
2121
import com.viaversion.nbt.tag.CompoundTag;
22+
import com.viaversion.nbt.tag.FloatTag;
2223
import com.viaversion.nbt.tag.IntTag;
2324
import com.viaversion.nbt.tag.ListTag;
2425
import com.viaversion.nbt.tag.NumberTag;
26+
import com.viaversion.nbt.tag.StringTag;
2527
import com.viaversion.nbt.tag.Tag;
2628
import com.viaversion.viaversion.api.connection.UserConnection;
2729
import com.viaversion.viaversion.api.data.MappingData;
28-
import com.viaversion.viaversion.api.data.MappingDataBase;
2930
import com.viaversion.viaversion.api.minecraft.RegistryEntry;
3031
import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
3132
import com.viaversion.viaversion.api.minecraft.data.version.StructuredDataKeys1_21_11;
@@ -49,6 +50,7 @@
4950
import com.viaversion.viaversion.protocols.v1_21_7to1_21_9.packet.ClientboundPackets1_21_9;
5051
import com.viaversion.viaversion.protocols.v1_21_7to1_21_9.packet.ServerboundConfigurationPackets1_21_9;
5152
import com.viaversion.viaversion.protocols.v1_21_7to1_21_9.packet.ServerboundPacket1_21_9;
53+
import com.viaversion.viaversion.protocols.v1_21_9to1_21_11.data.MappingData1_21_11;
5254
import com.viaversion.viaversion.protocols.v1_21_9to1_21_11.packet.ClientboundPacket1_21_11;
5355
import com.viaversion.viaversion.protocols.v1_21_9to1_21_11.packet.ClientboundPackets1_21_11;
5456
import com.viaversion.viaversion.protocols.v1_21_9to1_21_11.rewriter.BlockItemPacketRewriter1_21_11;
@@ -62,14 +64,17 @@
6264
import com.viaversion.viaversion.rewriter.StatisticsRewriter;
6365
import com.viaversion.viaversion.rewriter.TagRewriter;
6466
import com.viaversion.viaversion.rewriter.text.NBTComponentRewriter;
67+
import com.viaversion.viaversion.util.Key;
68+
import java.util.List;
69+
import java.util.Map;
6570
import java.util.function.Function;
6671
import org.checkerframework.checker.nullness.qual.Nullable;
6772

6873
import static com.viaversion.viaversion.util.ProtocolUtil.packetTypeMap;
6974

7075
public final class Protocol1_21_9To1_21_11 extends AbstractProtocol<ClientboundPacket1_21_9, ClientboundPacket1_21_11, ServerboundPacket1_21_9, ServerboundPacket1_21_9> {
7176

72-
public static final MappingData MAPPINGS = new MappingDataBase("1.21.9", "1.21.11");
77+
public static final MappingData1_21_11 MAPPINGS = new MappingData1_21_11();
7378
private final EntityPacketRewriter1_21_11 entityRewriter = new EntityPacketRewriter1_21_11(this);
7479
private final BlockItemPacketRewriter1_21_11 itemRewriter = new BlockItemPacketRewriter1_21_11(this);
7580
private final ParticleRewriter<ClientboundPacket1_21_9> particleRewriter = new ParticleRewriter<>(this);
@@ -93,13 +98,53 @@ protected void registerPackets() {
9398
temperateZombieNautilus.put("spawn_conditions", new ListTag<>(CompoundTag.class));
9499
zombieNautilusVariantsPacket.write(Types.REGISTRY_ENTRY_ARRAY, new RegistryEntry[]{new RegistryEntry("minecraft:pale", temperateZombieNautilus)});
95100
zombieNautilusVariantsPacket.send(Protocol1_21_9To1_21_11.class);
101+
102+
final PacketWrapper timelinePacket = wrapper.create(ClientboundConfigurationPackets1_21_9.REGISTRY_DATA);
103+
timelinePacket.write(Types.STRING, "timeline");
104+
final RegistryEntry[] timelineEntries = new RegistryEntry[MAPPINGS.timelineRegistry().size()];
105+
int index = 0;
106+
for (final Map.Entry<String, Tag> entry : MAPPINGS.timelineRegistry().entrySet()) {
107+
timelineEntries[index++] = new RegistryEntry(entry.getKey(), entry.getValue());
108+
}
109+
timelinePacket.write(Types.REGISTRY_ENTRY_ARRAY, timelineEntries);
110+
timelinePacket.send(Protocol1_21_9To1_21_11.class);
96111
});
97112

98113
registryDataRewriter.addHandler("dimension_type", (key, tag) -> {
99114
final ByteTag trueTag = new ByteTag((byte) 1);
100115
final CompoundTag attributes = new CompoundTag();
101116
tag.put("attributes", attributes);
102-
moveAttribute(tag, attributes, "cloud_height", "visual/cloud_height", Function.identity(), null);
117+
118+
if (Key.equals(key, "the_nether")) {
119+
tag.put("timelines", new ListTag<>(List.of(new StringTag("villager_schedule"))));
120+
tag.putString("skybox", "none");
121+
tag.putString("cardinal_light", "nether");
122+
attributes.putString("visual/sky_light_color", "#7a7aff");
123+
attributes.putFloat("visual/fog_start_distance", 10F);
124+
attributes.putFloat("visual/fog_end_distance", 96F);
125+
attributes.putFloat("gameplay/sky_light_level", 4F);
126+
} else if (Key.equals(key, "the_end")) {
127+
tag.put("timelines", new ListTag<>(List.of(new StringTag("villager_schedule"))));
128+
tag.putString("skybox", "end");
129+
attributes.putString("visual/fog_color", "#181318");
130+
attributes.putString("visual/sky_color", "#000000");
131+
attributes.putString("visual/sky_light_color", "#e580ff");
132+
} else {
133+
final ListTag<StringTag> timelines = new ListTag<>(List.of(new StringTag("day"), new StringTag("moon"), new StringTag("early_game")));
134+
tag.put("timelines", timelines);
135+
}
136+
137+
if (!tag.getBoolean("natural")) {
138+
attributes.putFloat("visual/sky_light_factor", 0F);
139+
}
140+
141+
moveAttribute(tag, attributes, "cloud_height", "visual/cloud_height", cloudHeight -> {
142+
if (cloudHeight instanceof NumberTag numberTag) {
143+
attributes.putString("visual/cloud_color", "#ccffffff");
144+
return new FloatTag(numberTag.asFloat());
145+
}
146+
return null;
147+
}, null);
103148
moveAttribute(tag, attributes, "has_raids", "gameplay/can_start_raid", Function.identity(), trueTag);
104149
moveAttribute(tag, attributes, "piglin_safe", "gameplay/piglins_zombify", attributeTag -> ((NumberTag) attributeTag).asBoolean() ? ByteTag.ZERO : trueTag, ByteTag.ZERO);
105150
moveAttribute(tag, attributes, "respawn_anchor_works", "gameplay/respawn_anchor_works", Function.identity(), trueTag);
@@ -111,8 +156,10 @@ protected void registerPackets() {
111156
final CompoundTag attributes = new CompoundTag();
112157
tag.put("attributes", attributes);
113158
moveAttribute(effects, attributes, "sky_color", "visual/sky_color", Function.identity(), new IntTag(0));
114-
moveAttribute(effects, attributes, "water_fog_color", "visual/water_fog_color", Function.identity(), new IntTag(-16448205));
115-
moveAttribute(effects, attributes, "fog_color", "visual/fog_color", Function.identity(), new IntTag(0));
159+
if (!Key.equals(key, "the_end")) {
160+
moveAttribute(effects, attributes, "water_fog_color", "visual/water_fog_color", Function.identity(), new IntTag(-16448205));
161+
moveAttribute(effects, attributes, "fog_color", "visual/fog_color", Function.identity(), new IntTag(0));
162+
}
116163
});
117164
registerClientbound(ClientboundConfigurationPackets1_21_9.REGISTRY_DATA, registryDataRewriter::handle);
118165

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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.viaversion.protocols.v1_21_9to1_21_11.data;
19+
20+
import com.viaversion.nbt.tag.CompoundTag;
21+
import com.viaversion.viaversion.api.data.MappingDataBase;
22+
import com.viaversion.viaversion.api.data.MappingDataLoader;
23+
24+
public final class MappingData1_21_11 extends MappingDataBase {
25+
26+
private CompoundTag timelineRegistry;
27+
28+
public MappingData1_21_11() {
29+
super("1.21.9", "1.21.11");
30+
}
31+
32+
@Override
33+
protected void loadExtras(final CompoundTag data) {
34+
timelineRegistry = MappingDataLoader.INSTANCE.loadNBTFromFile("timeline-registry-1.21.11.nbt");
35+
}
36+
37+
public CompoundTag timelineRegistry() {
38+
return timelineRegistry;
39+
}
40+
}
Binary file not shown.

0 commit comments

Comments
 (0)