YumCore/src/main/java/pw/yumc/YumCore/text/Scroller.java

134 lines
3.7 KiB
Java

package pw.yumc.YumCore.text;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
/**
* 字符串滚动工具
*
* @since 2016年6月7日 下午2:22:12
* @author 喵♂呜
*/
public class Scroller {
private static final char COLOUR_CHAR = '\u00A7';
private String content;
private int position;
private final List<String> list = new ArrayList<>();
private ChatColor colour;
/**
* @param text
* 需要显示的字符串
*/
public Scroller(final String text) {
this(text, 16);
}
/**
* @param text
* 需要显示的字符串
* @param size
* 每次显示长度
*/
public Scroller(final String text, final int size) {
this(text, size, 1);
}
/**
* @param text
* 需要显示的字符串
* @param size
* 每次显示长度
* @param skip
* 每次滚动长度
*/
public Scroller(final String text, final int size, final int skip) {
this(text, size, skip, '&');
}
/**
* @param text
* 需要显示的字符串
* @param size
* 每次显示长度
* @param skip
* 每次滚动长度
* @param colorChar
* 颜色字符串
*/
public Scroller(String text, int size, int skip, final char colorChar) {
this.colour = ChatColor.RESET;
StringBuilder result;
if (text.length() < size) {
result = new StringBuilder(text);
while (result.length() < size) {
result.append(" ");
}
text = result.toString();
}
size -= 2;
if (size < 1) {
size = 1;
}
if (skip < 0) {
skip = 0;
}
if (colorChar != COLOUR_CHAR) {
text = ChatColor.translateAlternateColorCodes(colorChar, text);
}
for (int i = 0; i < text.length() - size; ++i) {
this.list.add(text.substring(i, i + size));
}
result = new StringBuilder();
for (int i = 0; i < skip; ++i) {
System.out.println(i);
list.add(text.substring(text.length() - size + (i > size ? size : i), text.length()) + result);
if (result.length() < size) {
result.append(" ");
}
}
for (int i = 0; i < size - skip; ++i) {
System.out.println(i);
list.add(text.substring(text.length() - size + skip + i, text.length()) + result + text.substring(0, i));
}
for (int i = 0; i < skip && i <= result.length(); ++i) {
System.out.println(i);
list.add(result.substring(0, result.length() - i) + text.substring(0, size - (skip > size ? size : skip) + i));
}
}
/**
* 获得下一条显示的字符串
*
* @return 字符串
*/
public String next() {
StringBuilder result = this.getNext();
if (result.charAt(result.length() - 1) == COLOUR_CHAR) {
result.setCharAt(result.length() - 1, ' ');
}
if (result.charAt(0) == COLOUR_CHAR) {
final ChatColor var2 = ChatColor.getByChar(result.charAt(1));
if (var2 != null) {
colour = var2;
result = getNext();
if (result.charAt(0) != 32) {
result.setCharAt(0, ' ');
}
}
}
return colour + result.toString();
}
/**
* 从List获得下一条字符串
*
* @return 字符串
*/
private StringBuilder getNext() {
return new StringBuilder(this.list.get(this.position++ % this.list.size()));
}
}