mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2025-02-10 17:31:32 +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 BentoBox plugin = BentoBox.getInstance();
|
||||||
private final String id;
|
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
|
* @param id - the flag id that will be adjusted by this click
|
||||||
*/
|
*/
|
||||||
public CycleClick(String id) {
|
public CycleClick(String id) {
|
||||||
this.id = 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
|
@Override
|
||||||
public boolean onClick(Panel panel, User user, ClickType click, int slot) {
|
public boolean onClick(Panel panel, User user, ClickType click, int slot) {
|
||||||
// Get the world
|
// Get the world
|
||||||
@ -53,15 +69,15 @@ public class CycleClick implements PanelItem.ClickHandler {
|
|||||||
Flag flag = plugin.getFlagsManager().getFlagByID(id);
|
Flag flag = plugin.getFlagsManager().getFlagByID(id);
|
||||||
int currentRank = island.getFlag(flag);
|
int currentRank = island.getFlag(flag);
|
||||||
if (click.equals(ClickType.LEFT)) {
|
if (click.equals(ClickType.LEFT)) {
|
||||||
if (currentRank == RanksManager.OWNER_RANK) {
|
if (currentRank >= maxRank) {
|
||||||
island.setFlag(flag, RanksManager.VISITOR_RANK);
|
island.setFlag(flag, minRank);
|
||||||
} else {
|
} else {
|
||||||
island.setFlag(flag, rm.getRankUpValue(currentRank));
|
island.setFlag(flag, rm.getRankUpValue(currentRank));
|
||||||
}
|
}
|
||||||
user.getPlayer().playSound(user.getLocation(), Sound.BLOCK_STONE_BUTTON_CLICK_ON, 1F, 1F);
|
user.getPlayer().playSound(user.getLocation(), Sound.BLOCK_STONE_BUTTON_CLICK_ON, 1F, 1F);
|
||||||
} else if (click.equals(ClickType.RIGHT)) {
|
} else if (click.equals(ClickType.RIGHT)) {
|
||||||
if (currentRank == RanksManager.VISITOR_RANK) {
|
if (currentRank <= minRank) {
|
||||||
island.setFlag(flag, RanksManager.OWNER_RANK);
|
island.setFlag(flag, maxRank);
|
||||||
} else {
|
} else {
|
||||||
island.setFlag(flag, rm.getRankDownValue(currentRank));
|
island.setFlag(flag, rm.getRankDownValue(currentRank));
|
||||||
}
|
}
|
||||||
@ -75,4 +91,18 @@ public class CycleClick implements PanelItem.ClickHandler {
|
|||||||
return true;
|
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;
|
||||||
import world.bentobox.bentobox.api.flags.Flag.Type;
|
import world.bentobox.bentobox.api.flags.Flag.Type;
|
||||||
import world.bentobox.bentobox.api.flags.FlagBuilder;
|
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.BlockInteractionListener;
|
||||||
import world.bentobox.bentobox.listeners.flags.BreakBlocksListener;
|
import world.bentobox.bentobox.listeners.flags.BreakBlocksListener;
|
||||||
import world.bentobox.bentobox.listeners.flags.BreedingListener;
|
import world.bentobox.bentobox.listeners.flags.BreedingListener;
|
||||||
@ -143,6 +144,7 @@ public class Flags {
|
|||||||
public static final Flag LOCK = new FlagBuilder().id("LOCK")
|
public static final Flag LOCK = new FlagBuilder().id("LOCK")
|
||||||
.icon(Material.TRIPWIRE_HOOK).type(Type.PROTECTION).allowedByDefault(true)
|
.icon(Material.TRIPWIRE_HOOK).type(Type.PROTECTION).allowedByDefault(true)
|
||||||
.defaultRank(RanksManager.VISITOR_RANK).listener(new LockAndBanListener())
|
.defaultRank(RanksManager.VISITOR_RANK).listener(new LockAndBanListener())
|
||||||
|
.onClick(new CycleClick("LOCK", RanksManager.VISITOR_RANK, RanksManager.MEMBER_RANK))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -61,6 +61,7 @@ public class CycleClickTest {
|
|||||||
private Panel panel;
|
private Panel panel;
|
||||||
private Inventory inv;
|
private Inventory inv;
|
||||||
private IslandWorldManager iwm;
|
private IslandWorldManager iwm;
|
||||||
|
private RanksManager rm;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws java.lang.Exception - exception
|
* @throws java.lang.Exception - exception
|
||||||
@ -167,15 +168,21 @@ public class CycleClickTest {
|
|||||||
when(fm.getFlagByID(Mockito.anyString())).thenReturn(flag);
|
when(fm.getFlagByID(Mockito.anyString())).thenReturn(flag);
|
||||||
when(plugin.getFlagsManager()).thenReturn(fm);
|
when(plugin.getFlagsManager()).thenReturn(fm);
|
||||||
|
|
||||||
RanksManager rm = mock(RanksManager.class);
|
rm = mock(RanksManager.class);
|
||||||
|
|
||||||
when(plugin.getRanksManager()).thenReturn(rm);
|
when(plugin.getRanksManager()).thenReturn(rm);
|
||||||
|
|
||||||
// Provide a current rank value - member
|
// Provide a current rank value - member
|
||||||
when(island.getFlag(Mockito.any())).thenReturn(RanksManager.MEMBER_RANK);
|
when(island.getFlag(Mockito.any())).thenReturn(RanksManager.MEMBER_RANK);
|
||||||
// Set up up and down ranks
|
// 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.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);
|
panel = mock(Panel.class);
|
||||||
inv = mock(Inventory.class);
|
inv = mock(Inventory.class);
|
||||||
@ -236,14 +243,35 @@ public class CycleClickTest {
|
|||||||
Mockito.verify(inv, Mockito.times(2)).setItem(Mockito.eq(SLOT), Mockito.any());
|
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
|
@Test
|
||||||
public void testOnRightClick() {
|
public void testOnRightClick() {
|
||||||
final int SLOT = 5;
|
final int SLOT = 5;
|
||||||
CycleClick udc = new CycleClick("LOCK");
|
CycleClick udc = new CycleClick("LOCK");
|
||||||
// Rank starts at member
|
// Rank starts at member
|
||||||
// Right click
|
// Right click - down rank to Trusted
|
||||||
assertTrue(udc.onClick(panel, user, ClickType.RIGHT, SLOT));
|
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(flag).toPanelItem(Mockito.any(), Mockito.any());
|
||||||
Mockito.verify(inv).setItem(Mockito.eq(SLOT), Mockito.any());
|
Mockito.verify(inv).setItem(Mockito.eq(SLOT), Mockito.any());
|
||||||
// Check rollover
|
// Check rollover
|
||||||
@ -255,6 +283,27 @@ public class CycleClickTest {
|
|||||||
Mockito.verify(inv, Mockito.times(2)).setItem(Mockito.eq(SLOT), Mockito.any());
|
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
|
@Test
|
||||||
public void testAllClicks() {
|
public void testAllClicks() {
|
||||||
// Test all possible click types
|
// Test all possible click types
|
||||||
|
Loading…
Reference in New Issue
Block a user