mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2025-02-04 22:41:27 +01:00
Added min/max options for cycle click and restricted lock flag.
https://github.com/BentoBoxWorld/bentobox/issues/332
This commit is contained in:
parent
c438f4a45d
commit
c2e9490bb0
@ -22,14 +22,30 @@ public class CycleClick implements PanelItem.ClickHandler {
|
||||
|
||||
private BentoBox plugin = BentoBox.getInstance();
|
||||
private final String id;
|
||||
private int minRank = RanksManager.VISITOR_RANK;
|
||||
private int maxRank = RanksManager.OWNER_RANK;
|
||||
|
||||
/**
|
||||
* Construct default cycle clicker with min rank of {@link RanksManager#VISITOR_RANK}
|
||||
* and max rank of {@link RanksManager#OWNER_RANK}
|
||||
* @param id - the flag id that will be adjusted by this click
|
||||
*/
|
||||
public CycleClick(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a cycle clicker with a min and max rank
|
||||
* @param id
|
||||
* @param minRank
|
||||
* @param maxRank
|
||||
*/
|
||||
public CycleClick(String id, int minRank, int maxRank) {
|
||||
this.id = id;
|
||||
this.minRank = minRank;
|
||||
this.maxRank = maxRank;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onClick(Panel panel, User user, ClickType click, int slot) {
|
||||
// Get the world
|
||||
@ -53,15 +69,15 @@ public class CycleClick implements PanelItem.ClickHandler {
|
||||
Flag flag = plugin.getFlagsManager().getFlagByID(id);
|
||||
int currentRank = island.getFlag(flag);
|
||||
if (click.equals(ClickType.LEFT)) {
|
||||
if (currentRank == RanksManager.OWNER_RANK) {
|
||||
island.setFlag(flag, RanksManager.VISITOR_RANK);
|
||||
if (currentRank >= maxRank) {
|
||||
island.setFlag(flag, minRank);
|
||||
} else {
|
||||
island.setFlag(flag, rm.getRankUpValue(currentRank));
|
||||
}
|
||||
user.getPlayer().playSound(user.getLocation(), Sound.BLOCK_STONE_BUTTON_CLICK_ON, 1F, 1F);
|
||||
} else if (click.equals(ClickType.RIGHT)) {
|
||||
if (currentRank == RanksManager.VISITOR_RANK) {
|
||||
island.setFlag(flag, RanksManager.OWNER_RANK);
|
||||
if (currentRank <= minRank) {
|
||||
island.setFlag(flag, maxRank);
|
||||
} else {
|
||||
island.setFlag(flag, rm.getRankDownValue(currentRank));
|
||||
}
|
||||
@ -75,4 +91,18 @@ public class CycleClick implements PanelItem.ClickHandler {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param minRank the minRank to set
|
||||
*/
|
||||
public void setMinRank(int minRank) {
|
||||
this.minRank = minRank;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param maxRank the maxRank to set
|
||||
*/
|
||||
public void setMaxRank(int maxRank) {
|
||||
this.maxRank = maxRank;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ import org.bukkit.Material;
|
||||
import world.bentobox.bentobox.api.flags.Flag;
|
||||
import world.bentobox.bentobox.api.flags.Flag.Type;
|
||||
import world.bentobox.bentobox.api.flags.FlagBuilder;
|
||||
import world.bentobox.bentobox.api.flags.clicklisteners.CycleClick;
|
||||
import world.bentobox.bentobox.listeners.flags.BlockInteractionListener;
|
||||
import world.bentobox.bentobox.listeners.flags.BreakBlocksListener;
|
||||
import world.bentobox.bentobox.listeners.flags.BreedingListener;
|
||||
@ -143,6 +144,7 @@ public class Flags {
|
||||
public static final Flag LOCK = new FlagBuilder().id("LOCK")
|
||||
.icon(Material.TRIPWIRE_HOOK).type(Type.PROTECTION).allowedByDefault(true)
|
||||
.defaultRank(RanksManager.VISITOR_RANK).listener(new LockAndBanListener())
|
||||
.onClick(new CycleClick("LOCK", RanksManager.VISITOR_RANK, RanksManager.MEMBER_RANK))
|
||||
.build();
|
||||
|
||||
/*
|
||||
@ -216,7 +218,7 @@ public class Flags {
|
||||
*/
|
||||
public static final Flag CREEPER_GRIEFING = new FlagBuilder().id("CREEPER_GRIEFING").icon(Material.CREEPER_HEAD).type(Type.WORLD_SETTING)
|
||||
.allowedByDefault(false).build();
|
||||
|
||||
|
||||
public static final Flag COMMAND_RANKS = new FlagBuilder().id("COMMAND_RANKS").icon(Material.PLAYER_HEAD).type(Type.WORLD_SETTING)
|
||||
.onClick(new CommandRankClickListener()).subPanel(true).build();
|
||||
|
||||
|
@ -61,6 +61,7 @@ public class CycleClickTest {
|
||||
private Panel panel;
|
||||
private Inventory inv;
|
||||
private IslandWorldManager iwm;
|
||||
private RanksManager rm;
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception - exception
|
||||
@ -167,15 +168,21 @@ public class CycleClickTest {
|
||||
when(fm.getFlagByID(Mockito.anyString())).thenReturn(flag);
|
||||
when(plugin.getFlagsManager()).thenReturn(fm);
|
||||
|
||||
RanksManager rm = mock(RanksManager.class);
|
||||
rm = mock(RanksManager.class);
|
||||
|
||||
when(plugin.getRanksManager()).thenReturn(rm);
|
||||
|
||||
// Provide a current rank value - member
|
||||
when(island.getFlag(Mockito.any())).thenReturn(RanksManager.MEMBER_RANK);
|
||||
// Set up up and down ranks
|
||||
when(rm.getRankUpValue(Mockito.eq(RanksManager.VISITOR_RANK))).thenReturn(RanksManager.COOP_RANK);
|
||||
when(rm.getRankUpValue(Mockito.eq(RanksManager.COOP_RANK))).thenReturn(RanksManager.TRUSTED_RANK);
|
||||
when(rm.getRankUpValue(Mockito.eq(RanksManager.TRUSTED_RANK))).thenReturn(RanksManager.MEMBER_RANK);
|
||||
when(rm.getRankUpValue(Mockito.eq(RanksManager.MEMBER_RANK))).thenReturn(RanksManager.OWNER_RANK);
|
||||
when(rm.getRankDownValue(Mockito.eq(RanksManager.MEMBER_RANK))).thenReturn(RanksManager.VISITOR_RANK);
|
||||
when(rm.getRankDownValue(Mockito.eq(RanksManager.OWNER_RANK))).thenReturn(RanksManager.MEMBER_RANK);
|
||||
when(rm.getRankDownValue(Mockito.eq(RanksManager.MEMBER_RANK))).thenReturn(RanksManager.TRUSTED_RANK);
|
||||
when(rm.getRankDownValue(Mockito.eq(RanksManager.TRUSTED_RANK))).thenReturn(RanksManager.COOP_RANK);
|
||||
when(rm.getRankDownValue(Mockito.eq(RanksManager.COOP_RANK))).thenReturn(RanksManager.VISITOR_RANK);
|
||||
|
||||
panel = mock(Panel.class);
|
||||
inv = mock(Inventory.class);
|
||||
@ -236,14 +243,35 @@ public class CycleClickTest {
|
||||
Mockito.verify(inv, Mockito.times(2)).setItem(Mockito.eq(SLOT), Mockito.any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnLeftClickSetMinMax() {
|
||||
// Provide a current rank value - coop
|
||||
when(island.getFlag(Mockito.any())).thenReturn(RanksManager.COOP_RANK);
|
||||
final int SLOT = 5;
|
||||
CycleClick udc = new CycleClick("LOCK", RanksManager.COOP_RANK, RanksManager.MEMBER_RANK);
|
||||
// Rank starts at member
|
||||
// Click left
|
||||
assertTrue(udc.onClick(panel, user, ClickType.LEFT, SLOT));
|
||||
Mockito.verify(island).setFlag(Mockito.eq(flag), Mockito.eq(RanksManager.TRUSTED_RANK));
|
||||
Mockito.verify(flag).toPanelItem(Mockito.any(), Mockito.any());
|
||||
Mockito.verify(inv).setItem(Mockito.eq(SLOT), Mockito.any());
|
||||
// Check rollover
|
||||
// Clicking when Member should go to Coop
|
||||
when(island.getFlag(Mockito.any())).thenReturn(RanksManager.MEMBER_RANK);
|
||||
assertTrue(udc.onClick(panel, user, ClickType.LEFT, SLOT));
|
||||
Mockito.verify(island).setFlag(Mockito.eq(flag), Mockito.eq(RanksManager.COOP_RANK));
|
||||
Mockito.verify(flag, Mockito.times(2)).toPanelItem(Mockito.any(), Mockito.any());
|
||||
Mockito.verify(inv, Mockito.times(2)).setItem(Mockito.eq(SLOT), Mockito.any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnRightClick() {
|
||||
final int SLOT = 5;
|
||||
CycleClick udc = new CycleClick("LOCK");
|
||||
// Rank starts at member
|
||||
// Right click
|
||||
// Right click - down rank to Trusted
|
||||
assertTrue(udc.onClick(panel, user, ClickType.RIGHT, SLOT));
|
||||
Mockito.verify(island).setFlag(Mockito.eq(flag), Mockito.eq(RanksManager.VISITOR_RANK));
|
||||
Mockito.verify(island).setFlag(Mockito.eq(flag), Mockito.eq(RanksManager.TRUSTED_RANK));
|
||||
Mockito.verify(flag).toPanelItem(Mockito.any(), Mockito.any());
|
||||
Mockito.verify(inv).setItem(Mockito.eq(SLOT), Mockito.any());
|
||||
// Check rollover
|
||||
@ -255,6 +283,27 @@ public class CycleClickTest {
|
||||
Mockito.verify(inv, Mockito.times(2)).setItem(Mockito.eq(SLOT), Mockito.any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnRightClickMinMaxSet() {
|
||||
// Provide a current rank value - coop
|
||||
when(island.getFlag(Mockito.any())).thenReturn(RanksManager.TRUSTED_RANK);
|
||||
final int SLOT = 5;
|
||||
CycleClick udc = new CycleClick("LOCK", RanksManager.COOP_RANK, RanksManager.MEMBER_RANK);
|
||||
// Rank starts at member
|
||||
// Right click
|
||||
assertTrue(udc.onClick(panel, user, ClickType.RIGHT, SLOT));
|
||||
Mockito.verify(island).setFlag(Mockito.eq(flag), Mockito.eq(RanksManager.COOP_RANK));
|
||||
Mockito.verify(flag).toPanelItem(Mockito.any(), Mockito.any());
|
||||
Mockito.verify(inv).setItem(Mockito.eq(SLOT), Mockito.any());
|
||||
// Check rollover
|
||||
// Clicking when Coop should go to Member
|
||||
when(island.getFlag(Mockito.any())).thenReturn(RanksManager.COOP_RANK);
|
||||
assertTrue(udc.onClick(panel, user, ClickType.RIGHT, SLOT));
|
||||
Mockito.verify(island).setFlag(Mockito.eq(flag), Mockito.eq(RanksManager.MEMBER_RANK));
|
||||
Mockito.verify(flag, Mockito.times(2)).toPanelItem(Mockito.any(), Mockito.any());
|
||||
Mockito.verify(inv, Mockito.times(2)).setItem(Mockito.eq(SLOT), Mockito.any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAllClicks() {
|
||||
// Test all possible click types
|
||||
|
Loading…
Reference in New Issue
Block a user