132 lines
3.7 KiB
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;
|
|
}
|
|
|
|
}
|