// Path: ChatUILib/src/main/java/com/simon816/chatui/lib/PlayerContext.java
// public class PlayerContext {
// 
//     public final int height;
//     public final int width;
//     public final boolean forceUnicode;
// 
//     private final UUID playerUUID;
//     private final TextUtils utils;
// 
//     public PlayerContext(Player player, int width, int height, boolean forceUnicode, FontData fontData) {
//         this(player.getUniqueId(), width, height, forceUnicode, new TextUtils(fontData, forceUnicode, player.getUniqueId()));
//         checkArgument(height >= 1, "Height must be at least one");
//         checkArgument(width >= 1, "Width must be at least one");
//     }
// 
//     private PlayerContext(UUID playerUuid, int width, int height, boolean forceUnicode, TextUtils utils) {
//         this.playerUUID = playerUuid;
//         this.width = width;
//         this.height = height;
//         this.forceUnicode = forceUnicode;
//         this.utils = utils;
//     }
// 
//     public Player getPlayer() {
//         return Sponge.getServer().getPlayer(this.playerUUID).get();
//     }
// 
//     public TextUtils utils() {
//         return this.utils;
//     }
// 
//     public PlayerContext withHeight(int height) {
//         checkArgument(height >= 1, "Height must be at least one");
//         if (height == this.height) {
//             return this;
//         }
//         return new PlayerContext(this.playerUUID, this.width, height, this.forceUnicode, this.utils);
//     }
// 
//     public PlayerContext withWidth(int width) {
//         checkArgument(width >= 1, "Width must be at least one");
//         if (width == this.width) {
//             return this;
//         }
//         return new PlayerContext(this.playerUUID, width, this.height, this.forceUnicode, this.utils);
//     }
// 
//     public PlayerContext withUnicode(boolean forceUnicode) {
//         if (forceUnicode == this.forceUnicode) {
//             return this;
//         }
//         return new PlayerContext(this.playerUUID, this.width, this.height, forceUnicode,
//                 new TextUtils(this.utils.getFontData(), forceUnicode, this.playerUUID));
//     }
// 
//     @Override
//     public String toString() {
//         return MoreObjects.toStringHelper(this)
//                 .add("player", this.getPlayer())
//                 .add("width", this.width)
//                 .add("height", this.height)
//                 .add("forceUnicode", this.forceUnicode)
//                 .toString();
//     }
// 
// }


import com.google.common.collect.Lists;
import com.simon816.chatui.lib.PlayerContext;
import org.spongepowered.api.text.Text;
import java.util.List;

            appendNewLine(line, ctx);
        }
    }

    public void addAll(Text[] lines, PlayerContext ctx) {
        for (Text line : lines) {
            appendNewLine(line, ctx);
        }
    }

    public List<Text> getLines() {
        return this.lines;
    }

    public LineFactory merge(LineFactory other, PlayerContext ctx) {
        this.addAll(other.getLines(), ctx);
        return this;
    }

    protected int currentLineCount() {
        return this.lines.size();
    }

    public void fillBlank(PlayerContext ctx) {
        int remaining = linesRemaining(ctx);
        while (remaining-- > 0) {
            appendNewLine(Text.EMPTY, ctx);
        }
    }


// Path: ChatUILib/src/main/java/com/simon816/chatui/lib/PlayerContext.java
// public class PlayerContext {
// 
//     public final int height;
//     public final int width;
//     public final boolean forceUnicode;
// 
//     private final UUID playerUUID;
//     private final TextUtils utils;
// 
//     public PlayerContext(Player player, int width, int height, boolean forceUnicode, FontData fontData) {
//         this(player.getUniqueId(), width, height, forceUnicode, new TextUtils(fontData, forceUnicode, player.getUniqueId()));
//         checkArgument(height >= 1, "Height must be at least one");
//         checkArgument(width >= 1, "Width must be at least one");
//     }
// 
//     private PlayerContext(UUID playerUuid, int width, int height, boolean forceUnicode, TextUtils utils) {
//         this.playerUUID = playerUuid;
//         this.width = width;
//         this.height = height;
//         this.forceUnicode = forceUnicode;
//         this.utils = utils;
//     }
// 
//     public Player getPlayer() {
//         return Sponge.getServer().getPlayer(this.playerUUID).get();
//     }
// 
//     public TextUtils utils() {
//         return this.utils;
//     }
// 
//     public PlayerContext withHeight(int height) {
//         checkArgument(height >= 1, "Height must be at least one");
//         if (height == this.height) {
//             return this;
//         }
//         return new PlayerContext(this.playerUUID, this.width, height, this.forceUnicode, this.utils);
//     }
// 
//     public PlayerContext withWidth(int width) {
//         checkArgument(width >= 1, "Width must be at least one");
//         if (width == this.width) {
//             return this;
//         }
//         return new PlayerContext(this.playerUUID, width, this.height, this.forceUnicode, this.utils);
//     }
// 
//     public PlayerContext withUnicode(boolean forceUnicode) {
//         if (forceUnicode == this.forceUnicode) {
//             return this;
//         }
//         return new PlayerContext(this.playerUUID, this.width, this.height, forceUnicode,
//                 new TextUtils(this.utils.getFontData(), forceUnicode, this.playerUUID));
//     }
// 
//     @Override
//     public String toString() {
//         return MoreObjects.toStringHelper(this)
//                 .add("player", this.getPlayer())
//                 .add("width", this.width)
//                 .add("height", this.height)
//                 .add("forceUnicode", this.forceUnicode)
//                 .toString();
//     }
// 
// }


// Path: ChatUILib/src/main/java/com/simon816/chatui/ui/LineFactory.java
import com.google.common.collect.Lists;
import com.simon816.chatui.lib.PlayerContext;
import org.spongepowered.api.text.Text;
import java.util.List;

            appendNewLine(line, ctx);
        }
    }

    public void addAll(Text[] lines, PlayerContext ctx) {
        for (Text line : lines) {
            appendNewLine(line, ctx);
        }
    }

    public List<Text> getLines() {
        return this.lines;
    }

    public LineFactory merge(LineFactory other, PlayerContext ctx) {
        this.addAll(other.getLines(), ctx);
        return this;
    }

    protected int currentLineCount() {
        return this.lines.size();
    }

    public void fillBlank(PlayerContext ctx) {
        int remaining = linesRemaining(ctx);
        while (remaining-- > 0) {
            appendNewLine(Text.EMPTY, ctx);
        }
    }


    public int linesRemaining(PlayerContext ctx) {
