58 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.server.network.config;
 | |
| 
 | |
| import com.mojang.serialization.DynamicOps;
 | |
| import java.util.List;
 | |
| import java.util.Set;
 | |
| import java.util.function.Consumer;
 | |
| import net.minecraft.core.LayeredRegistryAccess;
 | |
| import net.minecraft.core.RegistrySynchronization;
 | |
| import net.minecraft.nbt.NbtOps;
 | |
| import net.minecraft.nbt.Tag;
 | |
| import net.minecraft.network.protocol.Packet;
 | |
| import net.minecraft.network.protocol.common.ClientboundUpdateTagsPacket;
 | |
| import net.minecraft.network.protocol.configuration.ClientboundRegistryDataPacket;
 | |
| import net.minecraft.network.protocol.configuration.ClientboundSelectKnownPacks;
 | |
| import net.minecraft.server.RegistryLayer;
 | |
| import net.minecraft.server.network.ConfigurationTask;
 | |
| import net.minecraft.server.packs.repository.KnownPack;
 | |
| import net.minecraft.tags.TagNetworkSerialization;
 | |
| 
 | |
| public class SynchronizeRegistriesTask implements ConfigurationTask {
 | |
| 	public static final ConfigurationTask.Type TYPE = new ConfigurationTask.Type("synchronize_registries");
 | |
| 	private final List<KnownPack> requestedPacks;
 | |
| 	private final LayeredRegistryAccess<RegistryLayer> registries;
 | |
| 
 | |
| 	public SynchronizeRegistriesTask(List<KnownPack> requestedPacks, LayeredRegistryAccess<RegistryLayer> registries) {
 | |
| 		this.requestedPacks = requestedPacks;
 | |
| 		this.registries = registries;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public void start(Consumer<Packet<?>> task) {
 | |
| 		task.accept(new ClientboundSelectKnownPacks(this.requestedPacks));
 | |
| 	}
 | |
| 
 | |
| 	private void sendRegistries(Consumer<Packet<?>> packetSender, Set<KnownPack> packs) {
 | |
| 		DynamicOps<Tag> dynamicOps = this.registries.compositeAccess().createSerializationContext(NbtOps.INSTANCE);
 | |
| 		RegistrySynchronization.packRegistries(
 | |
| 			dynamicOps,
 | |
| 			this.registries.getAccessFrom(RegistryLayer.WORLDGEN),
 | |
| 			packs,
 | |
| 			(resourceKey, list) -> packetSender.accept(new ClientboundRegistryDataPacket(resourceKey, list))
 | |
| 		);
 | |
| 		packetSender.accept(new ClientboundUpdateTagsPacket(TagNetworkSerialization.serializeTagsToNetwork(this.registries)));
 | |
| 	}
 | |
| 
 | |
| 	public void handleResponse(List<KnownPack> packs, Consumer<Packet<?>> packetSender) {
 | |
| 		if (packs.equals(this.requestedPacks)) {
 | |
| 			this.sendRegistries(packetSender, Set.copyOf(this.requestedPacks));
 | |
| 		} else {
 | |
| 			this.sendRegistries(packetSender, Set.of());
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public ConfigurationTask.Type type() {
 | |
| 		return TYPE;
 | |
| 	}
 | |
| }
 |