ProjectAres/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/hologram/content/HologramFrame.java

86 lines
2.2 KiB
Java

package tc.oc.commons.bukkit.hologram.content;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
/**
* Represents a single frame of a {@link tc.oc.commons.bukkit.hologram.Hologram}.
*/
public class HologramFrame implements HologramContent {
private final List<String> content;
/**
* Creates a new {@link HologramFrame} with the specified content.
*
* @param content The content to be displayed
*/
public HologramFrame(String... content) {
ArrayUtils.reverse(content);
this.content = Arrays.asList(content);
}
/**
* Gets the multi-line text content contained in the frame.
*
* @return The content
*/
public List<String> getContent() {
return this.content;
}
/**
* Gets the height of the frame.
*
* @return The height of the frame.
*/
public int getHeight() {
return this.content.size();
}
/**
* Gets the width of the longest row in the frame.
*
* @return The width of the longest row in the frame.
*/
public int getMaxWidth() {
int largest = 0;
for (String row : this.content) {
largest = Math.max(largest, row.length());
}
return largest;
}
/**
* Gets the width of the shortest row in the frame.
*
* @return The width of the shortest row in the frame.
*/
public int getMinWidth() {
int smallest = Integer.MAX_VALUE;
for (String row : this.content) {
smallest = Math.min(smallest, row.length());
}
return smallest;
}
@Override
public boolean equals(Object obj) {
if (!HologramFrame.class.isInstance(obj)) return false;
HologramFrame hologramFrame = (HologramFrame) obj;
List<String> content = hologramFrame.getContent();
return this == hologramFrame || (this.content.size() == content.size() && this.content.containsAll(content));
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("content", content.toArray())
.toString();
}
}