fix(progress): count tree blocks broken with any tool
This commit is contained in:
@@ -40,7 +40,6 @@ public final class TreeProgressListener implements Listener {
|
||||
Player player = event.getPlayer();
|
||||
if (event.isCancelled()
|
||||
|| player.getGameMode() != GameMode.SURVIVAL
|
||||
|| !TreeTools.isAxe(player.getInventory().getItemInMainHand().getType())
|
||||
|| automaticBreaks.isMarked(event.getBlock())) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -54,6 +54,34 @@ class TreeFellingListenerTest {
|
||||
verify(starter, org.mockito.Mockito.times(1)).start(any(), any(), any(), eq(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
void aNonAxeCanEarnProgressButNeverStartsAutomaticFelling() {
|
||||
UUID playerId = UUID.randomUUID();
|
||||
Player player = mock(Player.class);
|
||||
PlayerInventory inventory = mock(PlayerInventory.class);
|
||||
when(player.getUniqueId()).thenReturn(playerId);
|
||||
when(player.getName()).thenReturn("Player");
|
||||
when(player.getGameMode()).thenReturn(GameMode.SURVIVAL);
|
||||
when(player.getInventory()).thenReturn(inventory);
|
||||
when(inventory.getItemInMainHand()).thenReturn(new ItemStack(Material.DIAMOND_PICKAXE));
|
||||
PlayerStateStore states = mock(PlayerStateStore.class);
|
||||
when(states.load(playerId)).thenReturn(Optional.of(
|
||||
PlayerTreeFellerState.initial(playerId, "Player")
|
||||
.withUnlocked(TreeSpecies.OAK, true)));
|
||||
TreeFellingStarter starter = mock(TreeFellingStarter.class);
|
||||
TreeFellingListener listener = new TreeFellingListener(
|
||||
ignored -> Optional.of(new TreeStructure(
|
||||
TreeSpecies.OAK, List.of(new BlockPoint(0, 0, 0)))),
|
||||
states,
|
||||
new AutomaticBreakRegistry(),
|
||||
starter,
|
||||
() -> 2);
|
||||
|
||||
listener.onBlockBreak(new BlockBreakEvent(mock(Block.class), player));
|
||||
|
||||
verify(starter, never()).start(any(), any(), any(), any(Integer.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void administrativeLockSuppressesFellingWithoutChangingTheOrdinaryBreak() {
|
||||
UUID playerId = UUID.randomUUID();
|
||||
|
||||
@@ -19,7 +19,7 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
class TreeProgressListenerTest {
|
||||
@Test
|
||||
void recordsOnlyManualSurvivalAxeBreaksFromValidatedTrees() throws Exception {
|
||||
void recordsManualSurvivalBreaksWithAnEmptyHandOrAnyToolFromValidatedTrees() throws Exception {
|
||||
UUID playerId = UUID.randomUUID();
|
||||
Player player = mock(Player.class);
|
||||
PlayerInventory inventory = mock(PlayerInventory.class);
|
||||
@@ -50,9 +50,12 @@ class TreeProgressListenerTest {
|
||||
automaticBreaks.mark(block);
|
||||
listener.onBlockBreak(event);
|
||||
automaticBreaks.unmark(block);
|
||||
when(inventory.getItemInMainHand()).thenReturn(new ItemStack(Material.AIR));
|
||||
listener.onBlockBreak(event);
|
||||
when(inventory.getItemInMainHand()).thenReturn(new ItemStack(Material.DIAMOND_PICKAXE));
|
||||
listener.onBlockBreak(event);
|
||||
|
||||
assertEquals(1, states.state.progress(TreeSpecies.OAK));
|
||||
assertEquals(2, states.state.progress(TreeSpecies.OAK));
|
||||
}
|
||||
|
||||
private static final class InMemoryStateStore implements PlayerStateStore {
|
||||
|
||||
Reference in New Issue
Block a user