/* * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion * Copyright (C) 2016-2023 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 . */ package com.viaversion.viaversion.protocols.protocol1_18to1_17_1; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_17; import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.types.misc.ParticleType; import com.viaversion.viaversion.api.type.types.version.Types1_18; import com.viaversion.viaversion.data.entity.EntityTrackerBase; import com.viaversion.viaversion.protocols.protocol1_17_1to1_17.ClientboundPackets1_17_1; import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.data.MappingData; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.packets.EntityPackets; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.packets.InventoryPackets; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.packets.WorldPackets; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.storage.ChunkLightStorage; import com.viaversion.viaversion.rewriter.SoundRewriter; import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.TagRewriter; public final class Protocol1_18To1_17_1 extends AbstractProtocol { public static final MappingData MAPPINGS = new MappingData(); private final EntityPackets entityRewriter = new EntityPackets(this); private final InventoryPackets itemRewriter = new InventoryPackets(this); public Protocol1_18To1_17_1() { super(ClientboundPackets1_17_1.class, ClientboundPackets1_18.class, ServerboundPackets1_17.class, ServerboundPackets1_17.class); } @Override protected void registerPackets() { entityRewriter.register(); itemRewriter.register(); WorldPackets.register(this); final SoundRewriter soundRewriter = new SoundRewriter<>(this); soundRewriter.registerSound(ClientboundPackets1_17_1.SOUND); soundRewriter.registerSound(ClientboundPackets1_17_1.ENTITY_SOUND); final TagRewriter tagRewriter = new TagRewriter<>(this); tagRewriter.registerGeneric(ClientboundPackets1_17_1.TAGS); tagRewriter.addEmptyTags(RegistryType.BLOCK, "minecraft:lava_pool_stone_cannot_replace", "minecraft:big_dripleaf_placeable", "minecraft:wolves_spawnable_on", "minecraft:rabbits_spawnable_on", "minecraft:polar_bears_spawnable_on_in_frozen_ocean", "minecraft:parrots_spawnable_on", "minecraft:mooshrooms_spawnable_on", "minecraft:goats_spawnable_on", "minecraft:foxes_spawnable_on", "minecraft:axolotls_spawnable_on", "minecraft:animals_spawnable_on", "minecraft:azalea_grows_on", "minecraft:azalea_root_replaceable", "minecraft:replaceable_plants", "minecraft:terracotta"); tagRewriter.addEmptyTags(RegistryType.ITEM, "minecraft:dirt", "minecraft:terracotta"); new StatisticsRewriter<>(this).register(ClientboundPackets1_17_1.STATISTICS); registerServerbound(ServerboundPackets1_17.CLIENT_SETTINGS, new PacketHandlers() { @Override public void register() { map(Type.STRING); // Language map(Type.BYTE); // View distance map(Type.VAR_INT); // Chat visibility map(Type.BOOLEAN); // Chat colors map(Type.UNSIGNED_BYTE); // Model customization map(Type.VAR_INT); // Main hand map(Type.BOOLEAN); // Text filtering enabled read(Type.BOOLEAN); // Allow listing in server list preview } }); } @Override protected void onMappingDataLoaded() { Types1_18.PARTICLE.filler(this) .reader("block", ParticleType.Readers.BLOCK) .reader("block_marker", ParticleType.Readers.BLOCK) .reader("dust", ParticleType.Readers.DUST) .reader("falling_dust", ParticleType.Readers.BLOCK) .reader("dust_color_transition", ParticleType.Readers.DUST_TRANSITION) .reader("item", ParticleType.Readers.ITEM1_13_2) .reader("vibration", ParticleType.Readers.VIBRATION); } @Override public MappingData getMappingData() { return MAPPINGS; } @Override public void init(final UserConnection connection) { addEntityTracker(connection, new EntityTrackerBase(connection, EntityTypes1_17.PLAYER)); connection.put(new ChunkLightStorage()); } @Override public EntityPackets getEntityRewriter() { return entityRewriter; } @Override public InventoryPackets getItemRewriter() { return itemRewriter; } }