1919
2020import com .viaversion .nbt .tag .ByteTag ;
2121import com .viaversion .nbt .tag .CompoundTag ;
22+ import com .viaversion .nbt .tag .FloatTag ;
2223import com .viaversion .nbt .tag .IntTag ;
2324import com .viaversion .nbt .tag .ListTag ;
2425import com .viaversion .nbt .tag .NumberTag ;
26+ import com .viaversion .nbt .tag .StringTag ;
2527import com .viaversion .nbt .tag .Tag ;
2628import com .viaversion .viaversion .api .connection .UserConnection ;
2729import com .viaversion .viaversion .api .data .MappingData ;
28- import com .viaversion .viaversion .api .data .MappingDataBase ;
2930import com .viaversion .viaversion .api .minecraft .RegistryEntry ;
3031import com .viaversion .viaversion .api .minecraft .data .StructuredDataKey ;
3132import com .viaversion .viaversion .api .minecraft .data .version .StructuredDataKeys1_21_11 ;
4950import com .viaversion .viaversion .protocols .v1_21_7to1_21_9 .packet .ClientboundPackets1_21_9 ;
5051import com .viaversion .viaversion .protocols .v1_21_7to1_21_9 .packet .ServerboundConfigurationPackets1_21_9 ;
5152import 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 ;
5254import com .viaversion .viaversion .protocols .v1_21_9to1_21_11 .packet .ClientboundPacket1_21_11 ;
5355import com .viaversion .viaversion .protocols .v1_21_9to1_21_11 .packet .ClientboundPackets1_21_11 ;
5456import com .viaversion .viaversion .protocols .v1_21_9to1_21_11 .rewriter .BlockItemPacketRewriter1_21_11 ;
6264import com .viaversion .viaversion .rewriter .StatisticsRewriter ;
6365import com .viaversion .viaversion .rewriter .TagRewriter ;
6466import com .viaversion .viaversion .rewriter .text .NBTComponentRewriter ;
67+ import com .viaversion .viaversion .util .Key ;
68+ import java .util .List ;
69+ import java .util .Map ;
6570import java .util .function .Function ;
6671import org .checkerframework .checker .nullness .qual .Nullable ;
6772
6873import static com .viaversion .viaversion .util .ProtocolUtil .packetTypeMap ;
6974
7075public 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
0 commit comments