mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-11-24 19:55:17 +01:00
Added cycling click to protection flags.
This commit is contained in:
parent
320c9a9f43
commit
e7649f19d4
@ -343,7 +343,10 @@ protection:
|
||||
description-layout: |+
|
||||
&a[description]
|
||||
|
||||
&7Allowed for: &f[rank]
|
||||
&7Allowed for:
|
||||
allowed_rank: "&3- &a"
|
||||
blocked_rank: "&3- &c"
|
||||
minimal_rank: "&3- &2"
|
||||
help-item:
|
||||
name: "&aNeed some help?"
|
||||
|
||||
|
@ -124,21 +124,29 @@ public class Flag implements Comparable<Flag> {
|
||||
* @return - PanelItem for this flag
|
||||
*/
|
||||
public PanelItem toPanelItem(BSkyBlock plugin, User user) {
|
||||
// Get the island this user is on or their own
|
||||
Island island = plugin.getIslands().getIslandAt(user.getLocation()).orElse(plugin.getIslands().getIsland(user.getWorld(), user.getUniqueId()));
|
||||
String rank = RanksManager.OWNER_RANK_REF;
|
||||
if (island != null) {
|
||||
// TODO: Get the world settings - the player has no island and is not in an island location
|
||||
rank = plugin.getRanksManager().getRank(island.getFlag(this));
|
||||
}
|
||||
return new PanelItemBuilder()
|
||||
// Start the flag conversion
|
||||
PanelItemBuilder pib = new PanelItemBuilder()
|
||||
.icon(new ItemStack(icon))
|
||||
.name(user.getTranslation("protection.panel.flag-item.name-layout", "[name]", user.getTranslation("protection.flags." + id + ".name")))
|
||||
.description(user.getTranslation("protection.panel.flag-item.description-layout",
|
||||
"[description]", user.getTranslation("protection.flags." + id + ".description"),
|
||||
"[rank]", user.getTranslation(rank)))
|
||||
.clickHandler(clickHandler)
|
||||
.build();
|
||||
.clickHandler(clickHandler);
|
||||
pib.description(user.getTranslation("protection.panel.flag-item.description-layout", "[description]", user.getTranslation("protection.flags." + id + ".description")));
|
||||
|
||||
// Get the island this user is on or their own
|
||||
Island island = plugin.getIslands().getIslandAt(user.getLocation()).orElse(plugin.getIslands().getIsland(user.getWorld(), user.getUniqueId()));
|
||||
if (island != null) {
|
||||
// TODO: Get the world settings - the player has no island and is not in an island location
|
||||
// Dynamic rank list
|
||||
plugin.getRanksManager().getRanks().forEach((reference, score) -> {
|
||||
if (score > RanksManager.BANNED_RANK && score < island.getFlag(this)) {
|
||||
pib.description(user.getTranslation("protection.panel.flag-item.blocked_rank") + user.getTranslation(reference));
|
||||
} else if (score <= RanksManager.OWNER_RANK && score > island.getFlag(this)) {
|
||||
pib.description(user.getTranslation("protection.panel.flag-item.allowed_rank") + user.getTranslation(reference));
|
||||
} else if (score == island.getFlag(this)) {
|
||||
pib.description(user.getTranslation("protection.panel.flag-item.minimal_rank") + user.getTranslation(reference));
|
||||
}
|
||||
});
|
||||
}
|
||||
return pib.build();
|
||||
}
|
||||
|
||||
|
||||
|
@ -5,7 +5,7 @@ import org.bukkit.event.Listener;
|
||||
|
||||
import us.tastybento.bskyblock.api.flags.Flag.Type;
|
||||
import us.tastybento.bskyblock.api.panels.PanelItem;
|
||||
import us.tastybento.bskyblock.listeners.flags.UpDownClick;
|
||||
import us.tastybento.bskyblock.listeners.flags.CycleClick;
|
||||
import us.tastybento.bskyblock.managers.RanksManager;
|
||||
|
||||
public class FlagBuilder {
|
||||
@ -21,7 +21,7 @@ public class FlagBuilder {
|
||||
public FlagBuilder id(String string) {
|
||||
id = string;
|
||||
// Set the default click operation to UpDownClick
|
||||
onClick = new UpDownClick(id);
|
||||
onClick = new CycleClick(id);
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -81,7 +81,7 @@ public class FlagBuilder {
|
||||
|
||||
/**
|
||||
* Adds a listener for clicks on this flag when it is a panel item. Default is
|
||||
* {@link us.tastybento.bskyblock.listeners.flags.UpDownClick}
|
||||
* {@link us.tastybento.bskyblock.listeners.flags.CycleClick}
|
||||
* @param onClickListener - the listener for clicks. Must use the ClickOn interface
|
||||
* @return FlagBuilder
|
||||
*/
|
||||
|
@ -16,7 +16,7 @@ import us.tastybento.bskyblock.managers.RanksManager;
|
||||
* @author tastybento
|
||||
*
|
||||
*/
|
||||
public class UpDownClick implements PanelItem.ClickHandler {
|
||||
public class CycleClick implements PanelItem.ClickHandler {
|
||||
|
||||
private BSkyBlock plugin = BSkyBlock.getInstance();
|
||||
private final String id;
|
||||
@ -25,7 +25,7 @@ public class UpDownClick implements PanelItem.ClickHandler {
|
||||
/**
|
||||
* @param id - the flag id that will be adjusted by this click
|
||||
*/
|
||||
public UpDownClick(String id) {
|
||||
public CycleClick(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@ -40,13 +40,12 @@ public class UpDownClick implements PanelItem.ClickHandler {
|
||||
Flag flag = plugin.getFlagsManager().getFlagByID(id);
|
||||
int currentRank = island.getFlag(flag);
|
||||
if (click.equals(ClickType.LEFT)) {
|
||||
int nextRank = rm.getRankUpValue(currentRank);
|
||||
island.setFlag(flag, nextRank);
|
||||
if (currentRank == RanksManager.OWNER_RANK) {
|
||||
island.setFlag(flag, RanksManager.VISITOR_RANK);
|
||||
} else {
|
||||
island.setFlag(flag, rm.getRankUpValue(currentRank));
|
||||
}
|
||||
user.getWorld().playSound(user.getLocation(), Sound.BLOCK_STONE_BUTTON_CLICK_ON, 1F, 1F);
|
||||
} else if (click.equals(ClickType.RIGHT)) {
|
||||
int nextRank = rm.getRankDownValue(currentRank);
|
||||
island.setFlag(flag, nextRank);
|
||||
user.getWorld().playSound(user.getLocation(), Sound.BLOCK_STONE_BUTTON_CLICK_OFF, 1F, 1F);
|
||||
}
|
||||
// Apply change to panel
|
||||
panel.getInventory().setItem(slot, flag.toPanelItem(plugin, user).getItem());
|
@ -44,7 +44,7 @@ import us.tastybento.bskyblock.managers.RanksManager;
|
||||
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest({Bukkit.class, BSkyBlock.class, User.class })
|
||||
public class UpDownClickTest {
|
||||
public class CycleClickTest {
|
||||
|
||||
private static final Integer PROTECTION_RANGE = 200;
|
||||
private static final Integer X = 600;
|
||||
@ -183,32 +183,41 @@ public class UpDownClickTest {
|
||||
|
||||
@Test
|
||||
public void testUpDownClick() {
|
||||
UpDownClick udc = new UpDownClick("LOCK");
|
||||
CycleClick udc = new CycleClick("LOCK");
|
||||
assertNotNull(udc);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnLeftClick() {
|
||||
UpDownClick udc = new UpDownClick("LOCK");
|
||||
final int SLOT = 5;
|
||||
CycleClick udc = new CycleClick("LOCK");
|
||||
// Rank starts at member
|
||||
// Click left
|
||||
assertTrue(udc.onClick(panel, user, ClickType.LEFT, 5));
|
||||
assertTrue(udc.onClick(panel, user, ClickType.LEFT, SLOT));
|
||||
Mockito.verify(island).setFlag(Mockito.eq(flag), Mockito.eq(RanksManager.OWNER_RANK));
|
||||
Mockito.verify(flag).toPanelItem(Mockito.any(), Mockito.any());
|
||||
Mockito.verify(inv).setItem(Mockito.eq(5), Mockito.any());
|
||||
Mockito.verify(inv).setItem(Mockito.eq(SLOT), Mockito.any());
|
||||
// Check rollover
|
||||
// Clicking when Owner should go to Visitor
|
||||
when(island.getFlag(Mockito.any())).thenReturn(RanksManager.OWNER_RANK);
|
||||
assertTrue(udc.onClick(panel, user, ClickType.LEFT, SLOT));
|
||||
Mockito.verify(island).setFlag(Mockito.eq(flag), Mockito.eq(RanksManager.VISITOR_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() {
|
||||
UpDownClick udc = new UpDownClick("LOCK");
|
||||
// Right click
|
||||
CycleClick udc = new CycleClick("LOCK");
|
||||
// Right click - should do nothing
|
||||
assertTrue(udc.onClick(panel, user, ClickType.RIGHT, 0));
|
||||
Mockito.verify(island).setFlag(Mockito.eq(flag), Mockito.eq(RanksManager.VISITOR_RANK));
|
||||
Mockito.verify(island, Mockito.never()).setFlag(Mockito.eq(flag), Mockito.anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAllClicks() {
|
||||
// Test all possible click types
|
||||
UpDownClick udc = new UpDownClick("LOCK");
|
||||
CycleClick udc = new CycleClick("LOCK");
|
||||
Arrays.asList(ClickType.values()).forEach(c -> assertTrue(udc.onClick(panel, user, c, 0)));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user