Search in sources :

Example 1 with Part

use of net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part in project LittleMaidModelLoader-Fabric by SistrScarlet.

the class SyncMultiModelPacket method createS2CPacket.

public static PacketByteBuf createS2CPacket(Entity entity, IHasMultiModel hasMultiModel) {
    PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
    passedData.writeInt(entity.getEntityId());
    passedData.writeString(hasMultiModel.getTextureHolder(Layer.SKIN, Part.HEAD).getTextureName());
    for (Part part : Part.values()) {
        passedData.writeString(hasMultiModel.getTextureHolder(Layer.INNER, part).getTextureName());
    }
    passedData.writeEnumConstant(hasMultiModel.getColor());
    passedData.writeBoolean(hasMultiModel.isContract());
    return passedData;
}
Also used : Part(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part) PacketByteBuf(net.minecraft.network.PacketByteBuf)

Example 2 with Part

use of net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part 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 3 with Part

use of net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part 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 4 with Part

use of net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part in project LittleMaidModelLoader-Fabric by SistrScarlet.

the class SyncMultiModelPacket method createC2SPacket.

public static PacketByteBuf createC2SPacket(Entity entity, IHasMultiModel hasMultiModel) {
    PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
    passedData.writeInt(entity.getEntityId());
    passedData.writeString(hasMultiModel.getTextureHolder(Layer.SKIN, Part.HEAD).getTextureName());
    for (Part part : Part.values()) {
        passedData.writeString(hasMultiModel.getTextureHolder(Layer.INNER, part).getTextureName());
    }
    passedData.writeEnumConstant(hasMultiModel.getColor());
    passedData.writeBoolean(hasMultiModel.isContract());
    return passedData;
}
Also used : Part(net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part) PacketByteBuf(net.minecraft.network.PacketByteBuf)

Example 5 with Part

use of net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part 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)

Aggregations

Part (net.sistr.littlemaidmodelloader.entity.compound.IHasMultiModel.Part)6 PacketByteBuf (net.minecraft.network.PacketByteBuf)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 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