Search in sources :

Example 6 with ResourceKey

use of org.spongepowered.api.ResourceKey in project SpongeCommon by SpongePowered.

the class SpongeChannelManager method handleLoginRequestPayload.

private boolean handleLoginRequestPayload(final EngineConnection connection, final ResourceKey channelKey, final int transactionId, final ChannelBuf payload) {
    if (channelKey.equals(Constants.Channels.SPONGE_CLIENT_TYPE)) {
        final ClientType clientType = ((MinecraftBridge) Sponge.client()).bridge$getClientType();
        final ChannelBuf responsePayload = this.bufferAllocator.buffer();
        responsePayload.writeString(clientType.getName());
        final Packet<?> mcPacket = PacketUtil.createLoginPayloadResponse(responsePayload, transactionId);
        PacketSender.sendTo(connection, mcPacket);
        return true;
    }
    if (channelKey.equals(Constants.Channels.SPONGE_CHANNEL_REGISTRY)) {
        this.handleChannelRegistry(connection, payload);
        // Respond with registered channels
        final ChannelBuf responsePayload = this.encodeChannelRegistry();
        final Packet<?> mcPacket = PacketUtil.createLoginPayloadResponse(responsePayload, transactionId);
        PacketSender.sendTo(connection, mcPacket);
        return true;
    }
    ResourceKey actualChannelKey = channelKey;
    ChannelBuf actualPayload = payload;
    if (channelKey.equals(Constants.Channels.FML_LOGIN_WRAPPER_CHANNEL)) {
        actualChannelKey = ResourceKey.resolve(payload.readString());
        final int length = payload.readVarInt();
        actualPayload = payload.readSlice(length);
    }
    final SpongeChannel channel = this.channels.get(actualChannelKey);
    if (channel != null) {
        channel.handleLoginRequestPayload(connection, transactionId, actualPayload);
        return true;
    }
    return false;
}
Also used : ClientType(org.spongepowered.common.entity.player.ClientType) MinecraftBridge(org.spongepowered.common.bridge.client.MinecraftBridge) ChannelBuf(org.spongepowered.api.network.channel.ChannelBuf) ResourceKey(org.spongepowered.api.ResourceKey)

Example 7 with ResourceKey

use of org.spongepowered.api.ResourceKey in project SpongeCommon by SpongePowered.

the class SpongeChannelManager method handleLoginRequestPayload.

public boolean handleLoginRequestPayload(final EngineConnection connection, final ClientboundCustomQueryPacket packet) {
    // Server -> Client request
    final ClientboundCustomQueryPacketAccessor accessor = (ClientboundCustomQueryPacketAccessor) packet;
    final ResourceKey channel = (ResourceKey) (Object) accessor.accessor$identifier();
    final int transactionId = accessor.accessor$transactionId();
    final ChannelBuf payload = (ChannelBuf) accessor.accessor$data();
    try {
        return this.handleLoginRequestPayload(connection, channel, transactionId, payload);
    } finally {
        ChannelBuffers.release(payload);
    }
}
Also used : ClientboundCustomQueryPacketAccessor(org.spongepowered.common.accessor.network.protocol.login.ClientboundCustomQueryPacketAccessor) ChannelBuf(org.spongepowered.api.network.channel.ChannelBuf) ResourceKey(org.spongepowered.api.ResourceKey)

Example 8 with ResourceKey

use of org.spongepowered.api.ResourceKey in project SpongeCommon by SpongePowered.

the class SpongeChannelManager method handlePlayPayload.

public boolean handlePlayPayload(final EngineConnection connection, final ClientboundCustomPayloadPacket packet) {
    final ClientboundCustomPayloadPacketAccessor accessor = (ClientboundCustomPayloadPacketAccessor) packet;
    final ResourceKey channel = (ResourceKey) (Object) accessor.accessor$identifier();
    final ChannelBuf payload = (ChannelBuf) accessor.accessor$data();
    return this.handlePlayPayload(connection, channel, payload);
}
Also used : ClientboundCustomPayloadPacketAccessor(org.spongepowered.common.accessor.network.protocol.game.ClientboundCustomPayloadPacketAccessor) ChannelBuf(org.spongepowered.api.network.channel.ChannelBuf) ResourceKey(org.spongepowered.api.ResourceKey)

Example 9 with ResourceKey

use of org.spongepowered.api.ResourceKey in project SpongeCommon by SpongePowered.

the class SpongePlaceholderContextBuilder method associatedObject.

@Override
@SuppressWarnings("unchecked")
public PlaceholderContext.Builder associatedObject(@Nullable final Object associatedObject) {
    if (associatedObject == null) {
        this.associatedObjectSupplier = null;
    } else if (associatedObject instanceof Supplier) {
        return this.associatedObject((Supplier<Object>) associatedObject);
    } else if (associatedObject instanceof SystemSubject) {
        this.associatedObjectSupplier = Sponge::systemSubject;
    } else if (associatedObject instanceof Server) {
        this.associatedObjectSupplier = Sponge::server;
    } else if (associatedObject instanceof Player) {
        return this.associatedObject((Player) associatedObject);
    } else if (associatedObject instanceof ServerWorld) {
        final ResourceKey key = ((ServerWorld) associatedObject).key();
        this.associatedObjectSupplier = () -> SpongeCommon.game().server().worldManager().world(key).orElse(null);
    } else if (associatedObject instanceof Entity) {
        final Entity entity = ((Entity) associatedObject);
        final ResourceKey key = entity.serverLocation().world().key();
        final UUID entityUuid = ((Entity) associatedObject).uniqueId();
        this.associatedObjectSupplier = () -> SpongeCommon.game().server().worldManager().world(key).flatMap(x -> x.entity(entityUuid)).orElse(null);
    } else {
        // We create a weak reference here so we don't hold on to game objects.
        final WeakReference<Object> objectWeakReference = new WeakReference<>(associatedObject);
        this.associatedObjectSupplier = objectWeakReference::get;
    }
    return this;
}
Also used : Entity(org.spongepowered.api.entity.Entity) Player(org.spongepowered.api.entity.living.player.Player) Server(org.spongepowered.api.Server) SystemSubject(org.spongepowered.api.SystemSubject) ResourceKey(org.spongepowered.api.ResourceKey) ServerWorld(org.spongepowered.api.world.server.ServerWorld) WeakReference(java.lang.ref.WeakReference) Supplier(java.util.function.Supplier) Sponge(org.spongepowered.api.Sponge) UUID(java.util.UUID)

Example 10 with ResourceKey

use of org.spongepowered.api.ResourceKey in project SpongeCommon by SpongePowered.

the class MappedRegistryMixin method impl$cacheRegistryEntry.

@Inject(method = "registerMapping(ILnet/minecraft/resources/ResourceKey;Ljava/lang/Object;Lcom/mojang/serialization/Lifecycle;Z)Ljava/lang/Object;", at = @At("TAIL"))
private void impl$cacheRegistryEntry(final int p_243537_1_, final net.minecraft.resources.ResourceKey<T> p_243537_2_, final T p_243537_3_, final Lifecycle p_243537_4_, final boolean p_243537_5_, final CallbackInfoReturnable<T> cir) {
    final net.minecraft.resources.ResourceKey<? extends Registry<T>> resourceKey = this.shadow$key();
    final ResourceKey root = (ResourceKey) (Object) ((ResourceKeyAccessor<T>) resourceKey).accessor$registryName();
    final ResourceKey location = (ResourceKey) (Object) resourceKey.location();
    this.bridge$register(new SpongeRegistryEntry<>(new SpongeRegistryType<>(root, location), (ResourceKey) (Object) p_243537_2_.location(), p_243537_3_));
}
Also used : ResourceKeyAccessor(org.spongepowered.common.accessor.resources.ResourceKeyAccessor) SpongeRegistryType(org.spongepowered.common.registry.SpongeRegistryType) ResourceKey(org.spongepowered.api.ResourceKey) Inject(org.spongepowered.asm.mixin.injection.Inject)

Aggregations

ResourceKey (org.spongepowered.api.ResourceKey)71 Sponge (org.spongepowered.api.Sponge)13 List (java.util.List)11 Map (java.util.Map)11 DataContainer (org.spongepowered.api.data.persistence.DataContainer)11 Optional (java.util.Optional)10 Collectors (java.util.stream.Collectors)10 ArrayList (java.util.ArrayList)8 Collection (java.util.Collection)8 CompoundTag (net.minecraft.nbt.CompoundTag)8 NonNull (org.checkerframework.checker.nullness.qual.NonNull)8 RegistryTypes (org.spongepowered.api.registry.RegistryTypes)8 IOException (java.io.IOException)7 Component (net.kyori.adventure.text.Component)7 Nullable (org.checkerframework.checker.nullness.qual.Nullable)7 Keys (org.spongepowered.api.data.Keys)7 Constants (org.spongepowered.common.util.Constants)7 ImmutableList (com.google.common.collect.ImmutableList)6 ServerLevel (net.minecraft.server.level.ServerLevel)6 DataQuery (org.spongepowered.api.data.persistence.DataQuery)6