Breaking boats/minecarts is now handled by their respective flags

Fixes https://github.com/BentoBoxWorld/BentoBox/issues/1430
Improved description for MINECART and BOAT flags
This commit is contained in:
Florian CUNY 2020-07-04 13:11:09 +02:00
parent 35224ed664
commit 5e0e19a1be
3 changed files with 49 additions and 4 deletions

View File

@ -7,6 +7,7 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.entity.AbstractArrow;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
@ -107,7 +108,14 @@ public class BreakBlocksListener extends FlagListener {
@EventHandler(priority = EventPriority.LOW, ignoreCancelled=true)
public void onVehicleDamageEvent(VehicleDamageEvent e) {
if (getIWM().inWorld(e.getVehicle().getLocation()) && e.getAttacker() instanceof Player) {
checkIsland(e, (Player)e.getAttacker(), e.getVehicle().getLocation(), Flags.BREAK_BLOCKS);
String vehicleType = e.getVehicle().getType().toString();
if (e.getVehicle().getType().equals(EntityType.BOAT)) {
checkIsland(e, (Player) e.getAttacker(), e.getVehicle().getLocation(), Flags.BOAT);
} else if (vehicleType.contains("MINECART")) {
checkIsland(e, (Player) e.getAttacker(), e.getVehicle().getLocation(), Flags.MINECART);
} else {
checkIsland(e, (Player) e.getAttacker(), e.getVehicle().getLocation(), Flags.BREAK_BLOCKS);
}
}
}

View File

@ -708,7 +708,9 @@ protection:
hint: "Bed use disabled"
BOAT:
name: "Boats"
description: "Toggle boats interactions"
description: |-
Toggle placing, breaking and
entering into boats.
hint: "No boat interaction allowed"
BREAK_BLOCKS:
description: "Toggle breaking"
@ -1021,7 +1023,9 @@ protection:
hint: "Milking cows disabled"
MINECART:
name: "Minecarts"
description: "Toggle minecart interactions"
description: |-
Toggle placing, breaking and
entering into minecarts.
hint: "Minecart interaction disabled"
MONSTER_NATURAL_SPAWN:
description: "Toggle natural monster spawning"

View File

@ -31,6 +31,7 @@ import org.bukkit.entity.Arrow;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Hanging;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
@ -401,6 +402,7 @@ public class BreakBlocksListenerTest {
public void testOnVehicleDamageEventAllowed() {
Vehicle vehicle = mock(Vehicle.class);
when(vehicle.getLocation()).thenReturn(location);
when(vehicle.getType()).thenReturn(EntityType.MINECART);
VehicleDamageEvent e = new VehicleDamageEvent(vehicle, player, 10);
bbl.onVehicleDamageEvent(e);
assertFalse(e.isCancelled());
@ -410,10 +412,41 @@ public class BreakBlocksListenerTest {
* Test method for {@link world.bentobox.bentobox.listeners.flags.protection.BreakBlocksListener#onVehicleDamageEvent(org.bukkit.event.vehicle.VehicleDamageEvent)}.
*/
@Test
public void testOnVehicleDamageEventNotAllowed() {
public void testOnVehicleDamageEventNotAllowedMinecart() {
when(island.isAllowed(any(), any())).thenReturn(false);
Vehicle vehicle = mock(Vehicle.class);
when(vehicle.getLocation()).thenReturn(location);
when(vehicle.getType()).thenReturn(EntityType.MINECART);
VehicleDamageEvent e = new VehicleDamageEvent(vehicle, player, 10);
bbl.onVehicleDamageEvent(e);
assertTrue(e.isCancelled());
verify(notifier).notify(any(), eq("protection.protected"));
}
/**
* Test method for {@link world.bentobox.bentobox.listeners.flags.protection.BreakBlocksListener#onVehicleDamageEvent(org.bukkit.event.vehicle.VehicleDamageEvent)}.
*/
@Test
public void testOnVehicleDamageEventNotAllowedBoat() {
when(island.isAllowed(any(), any())).thenReturn(false);
Vehicle vehicle = mock(Vehicle.class);
when(vehicle.getLocation()).thenReturn(location);
when(vehicle.getType()).thenReturn(EntityType.BOAT);
VehicleDamageEvent e = new VehicleDamageEvent(vehicle, player, 10);
bbl.onVehicleDamageEvent(e);
assertTrue(e.isCancelled());
verify(notifier).notify(any(), eq("protection.protected"));
}
/**
* Test method for {@link world.bentobox.bentobox.listeners.flags.protection.BreakBlocksListener#onVehicleDamageEvent(org.bukkit.event.vehicle.VehicleDamageEvent)}.
*/
@Test
public void testOnVehicleDamageEventNotAllowedElse() {
when(island.isAllowed(any(), any())).thenReturn(false);
Vehicle vehicle = mock(Vehicle.class);
when(vehicle.getLocation()).thenReturn(location);
when(vehicle.getType()).thenReturn(EntityType.TRIDENT);
VehicleDamageEvent e = new VehicleDamageEvent(vehicle, player, 10);
bbl.onVehicleDamageEvent(e);
assertTrue(e.isCancelled());