mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2025-02-17 21:02:20 +01:00
Moved obsidian scooping to be a world flag in settings
This commit is contained in:
parent
a5831947c2
commit
5351b162c5
@ -18,7 +18,6 @@ import world.bentobox.bentobox.listeners.BlockEndDragon;
|
|||||||
import world.bentobox.bentobox.listeners.DeathListener;
|
import world.bentobox.bentobox.listeners.DeathListener;
|
||||||
import world.bentobox.bentobox.listeners.JoinLeaveListener;
|
import world.bentobox.bentobox.listeners.JoinLeaveListener;
|
||||||
import world.bentobox.bentobox.listeners.NetherPortals;
|
import world.bentobox.bentobox.listeners.NetherPortals;
|
||||||
import world.bentobox.bentobox.listeners.ObsidianScoopingListener;
|
|
||||||
import world.bentobox.bentobox.listeners.PanelListenerManager;
|
import world.bentobox.bentobox.listeners.PanelListenerManager;
|
||||||
import world.bentobox.bentobox.managers.AddonsManager;
|
import world.bentobox.bentobox.managers.AddonsManager;
|
||||||
import world.bentobox.bentobox.managers.CommandsManager;
|
import world.bentobox.bentobox.managers.CommandsManager;
|
||||||
@ -192,8 +191,6 @@ public class BentoBox extends JavaPlugin {
|
|||||||
manager.registerEvents(new PanelListenerManager(), this);
|
manager.registerEvents(new PanelListenerManager(), this);
|
||||||
// Nether portals
|
// Nether portals
|
||||||
manager.registerEvents(new NetherPortals(this), this);
|
manager.registerEvents(new NetherPortals(this), this);
|
||||||
// Obsidian to lava helper
|
|
||||||
manager.registerEvents(new ObsidianScoopingListener(this), this);
|
|
||||||
// End dragon blocking
|
// End dragon blocking
|
||||||
manager.registerEvents(new BlockEndDragon(this), this);
|
manager.registerEvents(new BlockEndDragon(this), this);
|
||||||
// Banned visitor commands
|
// Banned visitor commands
|
||||||
|
@ -146,15 +146,6 @@ public interface WorldSettings {
|
|||||||
*/
|
*/
|
||||||
String getWorldName();
|
String getWorldName();
|
||||||
|
|
||||||
/**
|
|
||||||
* Allow obsidian to be scooped up with an empty bucket back into lava.
|
|
||||||
* This only works if there is a single block of obsidian (no obsidian within 10 blocks).
|
|
||||||
* Recommendation is to keep this true so that newbies don't bother you or reset their
|
|
||||||
* island unnecessarily.
|
|
||||||
* @return whether obsidian scooping is allowed or not.
|
|
||||||
*/
|
|
||||||
boolean isAllowObsidianScooping();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the dragonSpawn
|
* @return the dragonSpawn
|
||||||
*/
|
*/
|
||||||
|
@ -9,28 +9,20 @@ import org.bukkit.Sound;
|
|||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import world.bentobox.bentobox.BentoBox;
|
|
||||||
|
import world.bentobox.bentobox.api.flags.FlagListener;
|
||||||
import world.bentobox.bentobox.api.user.User;
|
import world.bentobox.bentobox.api.user.User;
|
||||||
|
import world.bentobox.bentobox.lists.Flags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables changing of obsidian back into lava
|
* Enables changing of obsidian back into lava
|
||||||
|
* For {@link world.bentobox.bentobox.lists.Flags#OBSIDIAN_SCOOPING}
|
||||||
* @author tastybento
|
* @author tastybento
|
||||||
*/
|
*/
|
||||||
public class ObsidianScoopingListener implements Listener {
|
public class ObsidianScoopingListener extends FlagListener {
|
||||||
|
|
||||||
private BentoBox plugin;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param plugin plugin
|
|
||||||
*/
|
|
||||||
public ObsidianScoopingListener(BentoBox plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables changing of obsidian back into lava
|
* Enables changing of obsidian back into lava
|
||||||
@ -40,8 +32,8 @@ public class ObsidianScoopingListener implements Listener {
|
|||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.NORMAL)
|
@EventHandler(priority = EventPriority.NORMAL)
|
||||||
public boolean onPlayerInteract(final PlayerInteractEvent e) {
|
public boolean onPlayerInteract(final PlayerInteractEvent e) {
|
||||||
if (!plugin.getIWM().inWorld(e.getPlayer().getLocation())
|
if (!getIWM().inWorld(e.getPlayer().getLocation())
|
||||||
|| !plugin.getIWM().isAllowObsidianScooping(e.getPlayer().getWorld())
|
|| !Flags.OBSIDIAN_SCOOPING.isSetForWorld(e.getPlayer().getWorld())
|
||||||
|| !e.getPlayer().getGameMode().equals(GameMode.SURVIVAL)
|
|| !e.getPlayer().getGameMode().equals(GameMode.SURVIVAL)
|
||||||
|| !e.getAction().equals(Action.RIGHT_CLICK_BLOCK)
|
|| !e.getAction().equals(Action.RIGHT_CLICK_BLOCK)
|
||||||
|| !(e.getItem() != null && e.getItem().getType().equals(Material.BUCKET))
|
|| !(e.getItem() != null && e.getItem().getType().equals(Material.BUCKET))
|
||||||
@ -49,7 +41,7 @@ public class ObsidianScoopingListener implements Listener {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
User user = User.getInstance(e.getPlayer());
|
User user = User.getInstance(e.getPlayer());
|
||||||
if (plugin.getIslands().userIsOnIsland(user.getWorld(), user)) {
|
if (getIslands().userIsOnIsland(user.getWorld(), user)) {
|
||||||
// Look around to see if this is a lone obsidian block
|
// Look around to see if this is a lone obsidian block
|
||||||
Block b = e.getClickedBlock();
|
Block b = e.getClickedBlock();
|
||||||
|
|
||||||
|
@ -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.clicklisteners.CycleClick;
|
import world.bentobox.bentobox.api.flags.clicklisteners.CycleClick;
|
||||||
|
import world.bentobox.bentobox.listeners.ObsidianScoopingListener;
|
||||||
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;
|
||||||
@ -138,7 +139,7 @@ public final class Flags {
|
|||||||
public static final Flag LEASH = new Flag.Builder("LEASH", Material.LEAD).listener(new LeashListener()).build();
|
public static final Flag LEASH = new Flag.Builder("LEASH", Material.LEAD).listener(new LeashListener()).build();
|
||||||
|
|
||||||
// Portal use protection
|
// Portal use protection
|
||||||
public static final Flag NETHER_PORTAL = new Flag.Builder("NETHER_PORTAL", Material.OBSIDIAN).listener(new PortalListener()).build();
|
public static final Flag NETHER_PORTAL = new Flag.Builder("NETHER_PORTAL", Material.NETHERRACK).listener(new PortalListener()).build();
|
||||||
public static final Flag END_PORTAL = new Flag.Builder("END_PORTAL", Material.END_PORTAL_FRAME).listener(new PortalListener()).build();
|
public static final Flag END_PORTAL = new Flag.Builder("END_PORTAL", Material.END_PORTAL_FRAME).listener(new PortalListener()).build();
|
||||||
|
|
||||||
// Shearing
|
// Shearing
|
||||||
@ -238,6 +239,8 @@ public final class Flags {
|
|||||||
|
|
||||||
public static final Flag PREVENT_TELEPORT_WHEN_FALLING = new Flag.Builder("PREVENT_TELEPORT_WHEN_FALLING", Material.FEATHER).type(Type.WORLD_SETTING).build();
|
public static final Flag PREVENT_TELEPORT_WHEN_FALLING = new Flag.Builder("PREVENT_TELEPORT_WHEN_FALLING", Material.FEATHER).type(Type.WORLD_SETTING).build();
|
||||||
|
|
||||||
|
public static final Flag OBSIDIAN_SCOOPING = new Flag.Builder("OBSIDIAN_SCOOPING", Material.OBSIDIAN).type(Type.WORLD_SETTING)
|
||||||
|
.listener(new ObsidianScoopingListener()).defaultSetting(true).build();
|
||||||
/**
|
/**
|
||||||
* @return List of all the flags in this class
|
* @return List of all the flags in this class
|
||||||
*/
|
*/
|
||||||
|
@ -251,13 +251,6 @@ public class IslandWorldManager {
|
|||||||
return gameModes.get(Util.getWorld(world)).getWorldSettings().getWorldName();
|
return gameModes.get(Util.getWorld(world)).getWorldSettings().getWorldName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return whether obsidian scooping is allowed or not.
|
|
||||||
*/
|
|
||||||
public boolean isAllowObsidianScooping(World world) {
|
|
||||||
return gameModes.get(Util.getWorld(world)).getWorldSettings().isAllowObsidianScooping();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the endGenerate
|
* @return the endGenerate
|
||||||
*/
|
*/
|
||||||
|
@ -659,6 +659,13 @@ protection:
|
|||||||
description: "Toggle use"
|
description: "Toggle use"
|
||||||
name: "Note block"
|
name: "Note block"
|
||||||
hint: "No note block use"
|
hint: "No note block use"
|
||||||
|
OBSIDIAN_SCOOPING:
|
||||||
|
name: "Obsidian scooping"
|
||||||
|
description: |
|
||||||
|
Toggle scooping
|
||||||
|
Allow obsidian to be scooped up
|
||||||
|
with an empty bucket back into lava.
|
||||||
|
Protects newbies. Reduces resets.
|
||||||
OFFLINE_REDSTONE:
|
OFFLINE_REDSTONE:
|
||||||
description: |-
|
description: |-
|
||||||
&aWhen disabled, redstone
|
&aWhen disabled, redstone
|
||||||
|
@ -561,6 +561,14 @@ protection:
|
|||||||
description: "トグル使用"
|
description: "トグル使用"
|
||||||
name: "音符ブロック"
|
name: "音符ブロック"
|
||||||
hint: "音符ブロックを使用しない"
|
hint: "音符ブロックを使用しない"
|
||||||
|
OBSIDIAN_SCOOPING:
|
||||||
|
name: "黒曜石スクープ"
|
||||||
|
description: |
|
||||||
|
スクープを切り替える
|
||||||
|
黒曜石を空のバケツですくい上げて
|
||||||
|
溶岩に戻すことができます。
|
||||||
|
初心者を保護します。
|
||||||
|
リセットを減らします。
|
||||||
OFFLINE_REDSTONE:
|
OFFLINE_REDSTONE:
|
||||||
description: |-
|
description: |-
|
||||||
&aレッドストーンは
|
&aレッドストーンは
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package world.bentobox.bentobox.listeners;
|
package world.bentobox.bentobox.listeners.flags;
|
||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
@ -7,9 +7,10 @@ import static org.mockito.Matchers.any;
|
|||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -25,33 +26,44 @@ import org.bukkit.inventory.ItemFactory;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||||
import org.powermock.modules.junit4.PowerMockRunner;
|
import org.powermock.modules.junit4.PowerMockRunner;
|
||||||
|
import org.powermock.reflect.Whitebox;
|
||||||
|
|
||||||
import world.bentobox.bentobox.BentoBox;
|
import world.bentobox.bentobox.BentoBox;
|
||||||
import world.bentobox.bentobox.Settings;
|
import world.bentobox.bentobox.api.configuration.WorldSettings;
|
||||||
import world.bentobox.bentobox.api.user.User;
|
import world.bentobox.bentobox.api.user.User;
|
||||||
|
import world.bentobox.bentobox.listeners.ObsidianScoopingListener;
|
||||||
import world.bentobox.bentobox.managers.IslandWorldManager;
|
import world.bentobox.bentobox.managers.IslandWorldManager;
|
||||||
import world.bentobox.bentobox.managers.IslandsManager;
|
import world.bentobox.bentobox.managers.IslandsManager;
|
||||||
import world.bentobox.bentobox.managers.LocalesManager;
|
import world.bentobox.bentobox.managers.LocalesManager;
|
||||||
|
|
||||||
@RunWith(PowerMockRunner.class)
|
@RunWith(PowerMockRunner.class)
|
||||||
@PrepareForTest({PlayerEvent.class, PlayerInteractEvent.class})
|
@PrepareForTest({BentoBox.class, PlayerEvent.class, PlayerInteractEvent.class})
|
||||||
public class ObsidianScoopingListenerTest {
|
public class ObsidianScoopingListenerTest {
|
||||||
|
|
||||||
private static World world;
|
private World world;
|
||||||
|
private ObsidianScoopingListener listener;
|
||||||
|
private ItemStack item;
|
||||||
|
private Block clickedBlock;
|
||||||
|
private BentoBox plugin;
|
||||||
|
private Player who;
|
||||||
|
private IslandWorldManager iwm;
|
||||||
|
private IslandsManager im;
|
||||||
|
private LocalesManager lm;
|
||||||
|
private Material inHand;
|
||||||
|
private Material block;
|
||||||
|
|
||||||
@Test
|
@Before
|
||||||
public void testObsidianToLava() {
|
public void setUp() throws Exception {
|
||||||
BentoBox plugin = mock(BentoBox.class);
|
// Set up plugin
|
||||||
assertNotNull(new ObsidianScoopingListener(plugin));
|
plugin = mock(BentoBox.class);
|
||||||
}
|
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnPlayerInteract() {
|
|
||||||
// Mock world
|
// Mock world
|
||||||
world = mock(World.class);
|
world = mock(World.class);
|
||||||
|
|
||||||
@ -69,16 +81,13 @@ public class ObsidianScoopingListenerTest {
|
|||||||
when(server.getItemFactory()).thenReturn(itemFactory);
|
when(server.getItemFactory()).thenReturn(itemFactory);
|
||||||
|
|
||||||
// Set the server to the mock
|
// Set the server to the mock
|
||||||
Bukkit.setServer(server);
|
//Bukkit.setServer(server);
|
||||||
|
|
||||||
// Mock plugin
|
|
||||||
BentoBox plugin = mock(BentoBox.class);
|
|
||||||
|
|
||||||
// Create new object
|
// Create new object
|
||||||
ObsidianScoopingListener listener = new ObsidianScoopingListener(plugin);
|
listener = new ObsidianScoopingListener();
|
||||||
|
|
||||||
// Mock player
|
// Mock player
|
||||||
Player who = mock(Player.class);
|
who = mock(Player.class);
|
||||||
when(who.getWorld()).thenReturn(world);
|
when(who.getWorld()).thenReturn(world);
|
||||||
|
|
||||||
Location location = mock(Location.class);
|
Location location = mock(Location.class);
|
||||||
@ -91,24 +100,25 @@ public class ObsidianScoopingListenerTest {
|
|||||||
when(who.getInventory()).thenReturn(mock(PlayerInventory.class));
|
when(who.getInventory()).thenReturn(mock(PlayerInventory.class));
|
||||||
|
|
||||||
// Worlds
|
// Worlds
|
||||||
IslandWorldManager iwm = mock(IslandWorldManager.class);
|
iwm = mock(IslandWorldManager.class);
|
||||||
when(plugin.getIWM()).thenReturn(iwm);
|
when(plugin.getIWM()).thenReturn(iwm);
|
||||||
when(iwm.getIslandWorld(Mockito.any())).thenReturn(world);
|
when(iwm.getIslandWorld(Mockito.any())).thenReturn(world);
|
||||||
when(iwm.getNetherWorld(Mockito.any())).thenReturn(world);
|
when(iwm.getNetherWorld(Mockito.any())).thenReturn(world);
|
||||||
when(iwm.getEndWorld(Mockito.any())).thenReturn(world);
|
when(iwm.getEndWorld(Mockito.any())).thenReturn(world);
|
||||||
when(iwm.isAllowObsidianScooping(Mockito.any())).thenReturn(true); // Allow scooping
|
|
||||||
|
|
||||||
// Mock up IslandsManager
|
// Mock up IslandsManager
|
||||||
IslandsManager im = mock(IslandsManager.class);
|
im = mock(IslandsManager.class);
|
||||||
when(plugin.getIslands()).thenReturn(im);
|
when(plugin.getIslands()).thenReturn(im);
|
||||||
|
|
||||||
// Mock up items and blocks
|
// Mock up items and blocks
|
||||||
ItemStack item = mock(ItemStack.class);
|
item = mock(ItemStack.class);
|
||||||
Block clickedBlock = mock(Block.class);
|
clickedBlock = mock(Block.class);
|
||||||
when(clickedBlock.getX()).thenReturn(0);
|
when(clickedBlock.getX()).thenReturn(0);
|
||||||
when(clickedBlock.getY()).thenReturn(0);
|
when(clickedBlock.getY()).thenReturn(0);
|
||||||
when(clickedBlock.getZ()).thenReturn(0);
|
when(clickedBlock.getZ()).thenReturn(0);
|
||||||
when(clickedBlock.getWorld()).thenReturn(world);
|
when(clickedBlock.getWorld()).thenReturn(world);
|
||||||
|
when(item.getAmount()).thenReturn(1);
|
||||||
|
|
||||||
|
|
||||||
// Users
|
// Users
|
||||||
User.setPlugin(plugin);
|
User.setPlugin(plugin);
|
||||||
@ -122,61 +132,90 @@ public class ObsidianScoopingListenerTest {
|
|||||||
when(who.getGameMode()).thenReturn(GameMode.SURVIVAL);
|
when(who.getGameMode()).thenReturn(GameMode.SURVIVAL);
|
||||||
|
|
||||||
// Locales
|
// Locales
|
||||||
LocalesManager lm = mock(LocalesManager.class);
|
lm = mock(LocalesManager.class);
|
||||||
when(plugin.getLocalesManager()).thenReturn(lm);
|
when(plugin.getLocalesManager()).thenReturn(lm);
|
||||||
when(lm.get(any(), any())).thenReturn("mock translation");
|
when(lm.get(any(), any())).thenReturn("mock translation");
|
||||||
|
|
||||||
|
// World settings Flag
|
||||||
|
WorldSettings ws = mock(WorldSettings.class);
|
||||||
|
when(iwm.getWorldSettings(Mockito.any())).thenReturn(ws);
|
||||||
|
Map<String, Boolean> map = new HashMap<>();
|
||||||
|
map.put("OBSIDIAN_SCOOPING", true);
|
||||||
|
when(ws.getWorldFlags()).thenReturn(map);
|
||||||
|
}
|
||||||
|
|
||||||
// Test all possible actions
|
@Test
|
||||||
//for (Action action: Action.values()) {
|
public void testObsidianToLava() {
|
||||||
Action action = Action.RIGHT_CLICK_BLOCK;
|
assertNotNull(new ObsidianScoopingListener());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerInteract() {
|
||||||
// Test incorrect items
|
// Test incorrect items
|
||||||
Material inHand = Material.ACACIA_DOOR;
|
inHand = Material.ACACIA_DOOR;
|
||||||
Material block = Material.BROWN_MUSHROOM;
|
block = Material.BROWN_MUSHROOM;
|
||||||
when(item.getType()).thenReturn(inHand);
|
|
||||||
when(item.getAmount()).thenReturn(1);
|
|
||||||
when(clickedBlock.getType()).thenReturn(block);
|
|
||||||
// Create the event
|
// Create the event
|
||||||
testEvent(plugin, who, action, item, clickedBlock);
|
testEvent();
|
||||||
// Test with bucket in hand
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerInteractBucketInHand() {
|
||||||
|
// Test incorrect items
|
||||||
inHand = Material.BUCKET;
|
inHand = Material.BUCKET;
|
||||||
block = Material.BROWN_MUSHROOM;
|
block = Material.BROWN_MUSHROOM;
|
||||||
when(item.getType()).thenReturn(inHand);
|
|
||||||
when(clickedBlock.getType()).thenReturn(block);
|
|
||||||
// Create the event
|
// Create the event
|
||||||
testEvent(plugin, who, action, item, clickedBlock);
|
testEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerInteractObsidianAnvilInHand() {
|
||||||
// Test with obsidian in hand
|
// Test with obsidian in hand
|
||||||
inHand = Material.ANVIL;
|
inHand = Material.ANVIL;
|
||||||
block = Material.OBSIDIAN;
|
block = Material.OBSIDIAN;
|
||||||
when(item.getType()).thenReturn(inHand);
|
|
||||||
when(clickedBlock.getType()).thenReturn(block);
|
|
||||||
// Create the event
|
// Create the event
|
||||||
testEvent(plugin, who, action, item, clickedBlock);
|
testEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerInteractObsidianBucketInHand() {
|
||||||
// Positive test with 1 bucket in the stack
|
// Positive test with 1 bucket in the stack
|
||||||
inHand = Material.BUCKET;
|
inHand = Material.BUCKET;
|
||||||
block = Material.OBSIDIAN;
|
block = Material.OBSIDIAN;
|
||||||
when(item.getType()).thenReturn(inHand);
|
|
||||||
when(clickedBlock.getType()).thenReturn(block);
|
|
||||||
// Create the event
|
// Create the event
|
||||||
testEvent(plugin, who, action, item, clickedBlock);
|
testEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerInteractObsidianManyBucketsInHand() {
|
||||||
|
// Positive test with 1 bucket in the stack
|
||||||
|
inHand = Material.BUCKET;
|
||||||
|
block = Material.OBSIDIAN;
|
||||||
|
|
||||||
// Positive test with 32 bucket in the stack
|
// Positive test with 32 bucket in the stack
|
||||||
when(item.getAmount()).thenReturn(32);
|
when(item.getAmount()).thenReturn(32);
|
||||||
// Create the event
|
// Create the event
|
||||||
testEvent(plugin, who, action, item, clickedBlock);
|
testEvent();
|
||||||
|
}
|
||||||
|
|
||||||
PlayerInteractEvent event = new PlayerInteractEvent(who, action, item, clickedBlock, BlockFace.EAST);
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerInteractNotInWorld() {
|
||||||
|
PlayerInteractEvent event = new PlayerInteractEvent(who, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, BlockFace.EAST);
|
||||||
// Test not in world
|
// Test not in world
|
||||||
when(iwm.inWorld(any(World.class))).thenReturn(false);
|
when(iwm.inWorld(any(World.class))).thenReturn(false);
|
||||||
when(iwm.inWorld(any(Location.class))).thenReturn(false);
|
when(iwm.inWorld(any(Location.class))).thenReturn(false);
|
||||||
assertFalse(listener.onPlayerInteract(event));
|
assertFalse(listener.onPlayerInteract(event));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerInteractInWorld() {
|
||||||
// Put player in world
|
// Put player in world
|
||||||
when(iwm.inWorld(any(World.class))).thenReturn(true);
|
when(iwm.inWorld(any(World.class))).thenReturn(true);
|
||||||
when(iwm.inWorld(any(Location.class))).thenReturn(true);
|
when(iwm.inWorld(any(Location.class))).thenReturn(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerInteractGameModes() {
|
||||||
|
PlayerInteractEvent event = new PlayerInteractEvent(who, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, BlockFace.EAST);
|
||||||
|
|
||||||
// Test different game modes
|
// Test different game modes
|
||||||
for (GameMode gm : GameMode.values()) {
|
for (GameMode gm : GameMode.values()) {
|
||||||
@ -185,23 +224,38 @@ public class ObsidianScoopingListenerTest {
|
|||||||
assertFalse(listener.onPlayerInteract(event));
|
assertFalse(listener.onPlayerInteract(event));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerInteractSurvivalNotOnIsland() {
|
||||||
|
PlayerInteractEvent event = new PlayerInteractEvent(who, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, BlockFace.EAST);
|
||||||
|
|
||||||
// Set as survival
|
// Set as survival
|
||||||
when(who.getGameMode()).thenReturn(GameMode.SURVIVAL);
|
when(who.getGameMode()).thenReturn(GameMode.SURVIVAL);
|
||||||
|
|
||||||
|
// Positive test with 1 bucket in the stack
|
||||||
|
inHand = Material.BUCKET;
|
||||||
|
block = Material.OBSIDIAN;
|
||||||
|
when(item.getType()).thenReturn(inHand);
|
||||||
|
when(clickedBlock.getType()).thenReturn(block);
|
||||||
|
|
||||||
// Test when player is not on island
|
// Test when player is not on island
|
||||||
when(im.userIsOnIsland(Mockito.any(), Mockito.any())).thenReturn(false);
|
when(im.userIsOnIsland(Mockito.any(), Mockito.any())).thenReturn(false);
|
||||||
assertFalse(listener.onPlayerInteract(event));
|
assertFalse(listener.onPlayerInteract(event));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testEvent(BentoBox plugin, Player who, Action action, ItemStack item, Block clickedBlock) {
|
private void testEvent() {
|
||||||
|
when(item.getType()).thenReturn(inHand);
|
||||||
|
when(clickedBlock.getType()).thenReturn(block);
|
||||||
Block obsidianBlock = mock(Block.class);
|
Block obsidianBlock = mock(Block.class);
|
||||||
when(obsidianBlock.getType()).thenReturn(Material.OBSIDIAN);
|
when(obsidianBlock.getType()).thenReturn(Material.OBSIDIAN);
|
||||||
Block airBlock = mock(Block.class);
|
Block airBlock = mock(Block.class);
|
||||||
when(airBlock.getType()).thenReturn(Material.AIR);
|
when(airBlock.getType()).thenReturn(Material.AIR);
|
||||||
|
|
||||||
ObsidianScoopingListener listener = new ObsidianScoopingListener(plugin);
|
ObsidianScoopingListener listener = new ObsidianScoopingListener();
|
||||||
PlayerInteractEvent event = new PlayerInteractEvent(who, action, item, clickedBlock, BlockFace.EAST);
|
PlayerInteractEvent event = new PlayerInteractEvent(who, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, BlockFace.EAST);
|
||||||
if (!action.equals(Action.RIGHT_CLICK_BLOCK) || !item.getType().equals(Material.BUCKET) || !clickedBlock.getType().equals(Material.OBSIDIAN)) {
|
if (!item.getType().equals(Material.BUCKET)
|
||||||
|
|| !clickedBlock.getType().equals(Material.OBSIDIAN)) {
|
||||||
assertFalse(listener.onPlayerInteract(event));
|
assertFalse(listener.onPlayerInteract(event));
|
||||||
} else {
|
} else {
|
||||||
// Test with obby close by in any of the possible locations
|
// Test with obby close by in any of the possible locations
|
Loading…
Reference in New Issue
Block a user