bentobox/src/main/java/world/bentobox/bentobox/api/panels/reader/PanelTemplateRecord.java

120 lines
3.6 KiB
Java

//
// Created by BONNe
// Copyright - 2021
//
package world.bentobox.bentobox.api.panels.reader;
import java.util.Arrays;
import java.util.Objects;
import org.bukkit.inventory.ItemStack;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import world.bentobox.bentobox.api.panels.Panel;
/**
* This is template object for the panel reader. It contains data that can exist in the panel.
* PanelBuilder will use this to build panel.
*
* @param type the type of GUI
* @param title the title of GUI
* @param border the border block for GUI
* @param background the background block for GUI.
* @param forcedRows the array of boolean that indicate which rows must be force loaded.
* @param content The 2D array of ItemTemplateRecords
*
* @since 1.17.3
*/
public record PanelTemplateRecord(Panel.Type type,
@Nullable String title,
@Nullable TemplateItem border,
@Nullable TemplateItem background,
boolean[] forcedRows,
@NonNull ItemTemplateRecord[][] content)
{
/**
* Instantiates a new Panel template record with empty content.
*
* @param type the type
* @param title the title
* @param border the border
* @param background the background
* @param forcedRows the forced rows array
*/
public PanelTemplateRecord(Panel.Type type, String title, TemplateItem border, TemplateItem background, boolean[] forcedRows)
{
this(type, title, border, background, forcedRows, new ItemTemplateRecord[6][9]);
}
/**
* This method adds give item template record in given slot.
* @param rowIndex row index of content array
* @param columnIndex column index of content array.
* @param panelItemTemplate item template record that must be added.
*/
public void addButtonTemplate(int rowIndex, int columnIndex, ItemTemplateRecord panelItemTemplate)
{
this.content[rowIndex][columnIndex] = panelItemTemplate;
}
// ---------------------------------------------------------------------
// Section: Classes
// ---------------------------------------------------------------------
/**
* This record contains info about border and background item.
*/
public record TemplateItem(ItemStack icon, String title, String description)
{
public TemplateItem(ItemStack icon)
{
this(icon, null, null);
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.deepHashCode(content);
result = prime * result + Arrays.hashCode(forcedRows);
result = prime * result + Objects.hash(background, border, title, type);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof PanelTemplateRecord other)) {
return false;
}
return Objects.equals(background, other.background) && Objects.equals(border, other.border)
&& Arrays.deepEquals(content, other.content) && Arrays.equals(forcedRows, other.forcedRows)
&& Objects.equals(title, other.title) && type == other.type;
}
@Override
public String toString() {
return "PanelTemplateRecord {type=" + type +
", title=" + title +
", border=" + border +
", background=" + background +
", forcedRows=" + Arrays.toString(forcedRows) +
", content=" + Arrays.toString(content) + "}";
}
}