Search in sources :

Example 1 with ArmorSets

use of net.sistr.littlemaidmodelloader.resource.util.ArmorSets in project LittleMaidModelLoader-Fabric by SistrScarlet.

the class SyncMultiModelPacket method applyMultiModelServer.

// クライアントに倣って分離
public static void applyMultiModelServer(PlayerEntity player, int entityId, boolean isContract, TextureColors color, String textureName, ArmorSets<String> armorTextureName) {
    Entity entity = player.world.getEntityById(entityId);
    if (!(entity instanceof IHasMultiModel))
        return;
    IHasMultiModel multiModel = (IHasMultiModel) entity;
    multiModel.setContract(isContract);
    multiModel.setColor(color);
    LMTextureManager textureManager = LMTextureManager.INSTANCE;
    textureManager.getTexture(textureName).filter(textureHolder -> multiModel.isAllowChangeTexture(entity, textureHolder, Layer.SKIN, Part.HEAD)).ifPresent(textureHolder -> multiModel.setTextureHolder(textureHolder, Layer.SKIN, Part.HEAD));
    for (Part part : Part.values()) {
        String armorName = armorTextureName.getArmor(part).orElseThrow(() -> new IllegalStateException("テクスチャが存在しません。"));
        textureManager.getTexture(armorName).filter(textureHolder -> multiModel.isAllowChangeTexture(entity, textureHolder, Layer.INNER, part)).ifPresent(textureHolder -> multiModel.setTextureHolder(textureHolder, Layer.INNER, part));
    }
    sendS2CPacket(entity, multiModel);
}
Also used : IHasMultiModel(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel) Entity(net.minecraft.entity.Entity) PacketSender(net.fabricmc.fabric.api.networking.v1.PacketSender) ClientPlayNetworking(net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking) PlayerEntity(net.minecraft.entity.player.PlayerEntity) IHasMultiModel(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel) World(net.minecraft.world.World) Layer(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Layer) LMTextureManager(net.sistr.littlemaidmodelloader.resource.manager.LMTextureManager) Environment(net.fabricmc.api.Environment) PacketByteBuf(net.minecraft.network.PacketByteBuf) PlayerLookup(net.fabricmc.fabric.api.networking.v1.PlayerLookup) Unpooled(io.netty.buffer.Unpooled) MinecraftServer(net.minecraft.server.MinecraftServer) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) LittleMaidModelLoader(net.sistr.littlemaidmodelloader.LittleMaidModelLoader) Part(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part) TextureColors(net.sistr.littlemaidmodelloader.resource.util.TextureColors) ServerPlayNetworking(net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking) EnvType(net.fabricmc.api.EnvType) Identifier(net.minecraft.util.Identifier) MinecraftClient(net.minecraft.client.MinecraftClient) ClientPlayNetworkHandler(net.minecraft.client.network.ClientPlayNetworkHandler) ArmorSets(net.sistr.littlemaidmodelloader.resource.util.ArmorSets) ServerPlayNetworkHandler(net.minecraft.server.network.ServerPlayNetworkHandler) Entity(net.minecraft.entity.Entity) PlayerEntity(net.minecraft.entity.player.PlayerEntity) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) Part(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part) LMTextureManager(net.sistr.littlemaidmodelloader.resource.manager.LMTextureManager)

Example 2 with ArmorSets

use of net.sistr.littlemaidmodelloader.resource.util.ArmorSets in project LittleMaidModelLoader-Fabric by SistrScarlet.

the class SyncMultiModelPacket method applyMultiModelClient.

// context.getTaskQueue().execute()の中では@Environmentの効力が及ばないため別メソッドに分離
@Environment(EnvType.CLIENT)
public static void applyMultiModelClient(int entityId, boolean isContract, TextureColors color, String textureName, ArmorSets<String> armorTextureName) {
    World world = MinecraftClient.getInstance().world;
    if (world == null)
        return;
    Entity entity = world.getEntityById(entityId);
    if (!(entity instanceof IHasMultiModel))
        return;
    IHasMultiModel multiModel = (IHasMultiModel) entity;
    multiModel.setContract(isContract);
    multiModel.setColor(color);
    LMTextureManager textureManager = LMTextureManager.INSTANCE;
    textureManager.getTexture(textureName).filter(textureHolder -> multiModel.isAllowChangeTexture(entity, textureHolder, Layer.SKIN, Part.HEAD)).ifPresent(textureHolder -> multiModel.setTextureHolder(textureHolder, Layer.SKIN, Part.HEAD));
    for (Part part : Part.values()) {
        String armorName = armorTextureName.getArmor(part).orElseThrow(() -> new IllegalStateException("テクスチャが存在しません。"));
        textureManager.getTexture(armorName).filter(textureHolder -> multiModel.isAllowChangeTexture(entity, textureHolder, Layer.INNER, part)).ifPresent(textureHolder -> multiModel.setTextureHolder(textureHolder, Layer.INNER, part));
    }
}
Also used : IHasMultiModel(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel) Entity(net.minecraft.entity.Entity) PacketSender(net.fabricmc.fabric.api.networking.v1.PacketSender) ClientPlayNetworking(net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking) PlayerEntity(net.minecraft.entity.player.PlayerEntity) IHasMultiModel(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel) World(net.minecraft.world.World) Layer(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Layer) LMTextureManager(net.sistr.littlemaidmodelloader.resource.manager.LMTextureManager) Environment(net.fabricmc.api.Environment) PacketByteBuf(net.minecraft.network.PacketByteBuf) PlayerLookup(net.fabricmc.fabric.api.networking.v1.PlayerLookup) Unpooled(io.netty.buffer.Unpooled) MinecraftServer(net.minecraft.server.MinecraftServer) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) LittleMaidModelLoader(net.sistr.littlemaidmodelloader.LittleMaidModelLoader) Part(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part) TextureColors(net.sistr.littlemaidmodelloader.resource.util.TextureColors) ServerPlayNetworking(net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking) EnvType(net.fabricmc.api.EnvType) Identifier(net.minecraft.util.Identifier) MinecraftClient(net.minecraft.client.MinecraftClient) ClientPlayNetworkHandler(net.minecraft.client.network.ClientPlayNetworkHandler) ArmorSets(net.sistr.littlemaidmodelloader.resource.util.ArmorSets) ServerPlayNetworkHandler(net.minecraft.server.network.ServerPlayNetworkHandler) Entity(net.minecraft.entity.Entity) PlayerEntity(net.minecraft.entity.player.PlayerEntity) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) Part(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part) World(net.minecraft.world.World) LMTextureManager(net.sistr.littlemaidmodelloader.resource.manager.LMTextureManager) Environment(net.fabricmc.api.Environment)

Example 3 with ArmorSets

use of net.sistr.littlemaidmodelloader.resource.util.ArmorSets in project LittleMaidModelLoader-Fabric by SistrScarlet.

the class SyncMultiModelPacket method receiveS2CPacket.

@Environment(EnvType.CLIENT)
public static void receiveS2CPacket(MinecraftClient client, ClientPlayNetworkHandler handler, PacketByteBuf buf, PacketSender responseSender) {
    int entityId = buf.readInt();
    String textureName = buf.readString();
    ArmorSets<String> armorTextureName = new ArmorSets<>();
    for (Part part : Part.values()) {
        armorTextureName.setArmor(buf.readString(), part);
    }
    TextureColors color = buf.readEnumConstant(TextureColors.class);
    boolean isContract = buf.readBoolean();
    client.execute(() -> applyMultiModelClient(entityId, isContract, color, textureName, armorTextureName));
}
Also used : ArmorSets(net.sistr.littlemaidmodelloader.resource.util.ArmorSets) Part(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part) TextureColors(net.sistr.littlemaidmodelloader.resource.util.TextureColors) Environment(net.fabricmc.api.Environment)

Example 4 with ArmorSets

use of net.sistr.littlemaidmodelloader.resource.util.ArmorSets in project LittleMaidModelLoader-Fabric by SistrScarlet.

the class SyncMultiModelPacket method receiveC2SPacket.

public static void receiveC2SPacket(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, PacketByteBuf buf, PacketSender responseSender) {
    int entityId = buf.readInt();
    String textureName = buf.readString(32767);
    ArmorSets<String> armorTextureName = new ArmorSets<>();
    for (Part part : Part.values()) {
        armorTextureName.setArmor(buf.readString(32767), part);
    }
    TextureColors color = buf.readEnumConstant(TextureColors.class);
    boolean isContract = buf.readBoolean();
    server.execute(() -> applyMultiModelServer(player, entityId, isContract, color, textureName, armorTextureName));
}
Also used : ArmorSets(net.sistr.littlemaidmodelloader.resource.util.ArmorSets) Part(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part) TextureColors(net.sistr.littlemaidmodelloader.resource.util.TextureColors)

Aggregations

Part (net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part)4 ArmorSets (net.sistr.littlemaidmodelloader.resource.util.ArmorSets)4 TextureColors (net.sistr.littlemaidmodelloader.resource.util.TextureColors)4 Environment (net.fabricmc.api.Environment)3 Unpooled (io.netty.buffer.Unpooled)2 EnvType (net.fabricmc.api.EnvType)2 ClientPlayNetworking (net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking)2 PacketSender (net.fabricmc.fabric.api.networking.v1.PacketSender)2 PlayerLookup (net.fabricmc.fabric.api.networking.v1.PlayerLookup)2 ServerPlayNetworking (net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking)2 MinecraftClient (net.minecraft.client.MinecraftClient)2 ClientPlayNetworkHandler (net.minecraft.client.network.ClientPlayNetworkHandler)2 Entity (net.minecraft.entity.Entity)2 PlayerEntity (net.minecraft.entity.player.PlayerEntity)2 PacketByteBuf (net.minecraft.network.PacketByteBuf)2 MinecraftServer (net.minecraft.server.MinecraftServer)2 ServerPlayNetworkHandler (net.minecraft.server.network.ServerPlayNetworkHandler)2 ServerPlayerEntity (net.minecraft.server.network.ServerPlayerEntity)2 Identifier (net.minecraft.util.Identifier)2 World (net.minecraft.world.World)2