BSkyBlock/src/main/java/us/tastybento/bskyblock/api/flags/FlagBuilder.java

132 lines
3.7 KiB
Java

package us.tastybento.bskyblock.api.flags;
import org.bukkit.Material;
import org.bukkit.event.Listener;
import us.tastybento.bskyblock.api.flags.Flag.Type;
import us.tastybento.bskyblock.api.flags.clicklisteners.CycleClick;
import us.tastybento.bskyblock.api.flags.clicklisteners.IslandToggleClick;
import us.tastybento.bskyblock.api.flags.clicklisteners.WorldToggleClick;
import us.tastybento.bskyblock.api.panels.PanelItem;
import us.tastybento.bskyblock.managers.RanksManager;
public class FlagBuilder {
private String id;
private Material icon;
private Listener listener;
private boolean setting;
private Type type = Type.PROTECTION;
private int defaultRank = RanksManager.MEMBER_RANK;
private PanelItem.ClickHandler onClick;
private boolean subPanel = false;
public FlagBuilder id(String string) {
id = string;
return this;
}
/**
* The material that will become the icon for this flag
* @param icon - material
*/
public FlagBuilder icon(Material icon) {
this.icon = icon;
return this;
}
/**
* @param listener - the Bukkit listener that will be registered to handle this flag
*/
public FlagBuilder listener(Listener listener) {
this.listener = listener;
return this;
}
public Flag build() {
// If no onClick has been set, then apply default ones
if (onClick == null) {
switch (type){
case PROTECTION:
onClick = new CycleClick(id);
break;
case SETTING:
onClick = new IslandToggleClick(id);
break;
case WORLD_SETTING:
onClick = new WorldToggleClick(id);
break;
default:
onClick = new CycleClick(id);
break;
}
}
Flag f = new Flag(id, icon, listener, type, defaultRank, onClick, subPanel);
f.setDefaultSetting(setting);
return f;
}
/**
* Sets the default setting for this flag in the world
* @param setting - true or false
* @return FlagBuilder
*/
public FlagBuilder allowedByDefault(boolean setting) {
this.setting = setting;
return this;
}
/**
* Set the type of this flag
* @param type {@link Type}
* @return FlagBuilder
*/
public FlagBuilder type(Type type) {
this.type = type;
return this;
}
/**
* Set the id of this flag to the name of this enum value
* @param flag - flag
* @return FlagBuilder
*/
public FlagBuilder id(Enum<?> flag) {
id = flag.name();
return this;
}
/**
* Set a default rank for this flag. If not set, the value of RanksManager.MEMBER_RANK will be used
* @param rank - rank value
* @return FlagBuilder
*/
public FlagBuilder defaultRank(int rank) {
this.defaultRank = rank;
return this;
}
/**
* Adds a listener for clicks on this flag when it is a panel item. Default is
* {@link us.tastybento.bskyblock.api.flags.clicklisteners.CycleClick}
* @param onClickListener - the listener for clicks. Must use the ClickOn interface
* @return FlagBuilder
*/
public FlagBuilder onClick(PanelItem.ClickHandler onClickListener) {
this.onClick = onClickListener;
return this;
}
/**
* Marks this flag as "using a sub-panel"
* @param subPanel - whether the flag will use a sub-panel or not
* @return FlagBuilder
*/
public FlagBuilder subPanel(boolean subPanel) {
this.subPanel = subPanel;
return this;
}
}