diff --git a/docs/config.md b/docs/config.md index b0cbafd62..9bc772b4f 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1,5 +1,5 @@ - + ## AuthMe Configuration The first time you run AuthMe it will create a config.yml file in the plugins/AuthMe folder, @@ -476,8 +476,9 @@ limbo: # Note: if you change this setting all data will be migrated. If you have a lot of data, # change this setting only on server restart, not with /authme reload. distributionSize: 'SIXTEEN' - # Whether the player is allowed to fly: RESTORE, ENABLE, DISABLE. - # RESTORE sets back the old property from the player. + # Whether the player is allowed to fly: RESTORE, ENABLE, DISABLE, NOTHING. + # RESTORE sets back the old property from the player. NOTHING will prevent AuthMe + # from modifying the 'allow flight' property on the player. restoreAllowFlight: 'RESTORE' # Restore fly speed: RESTORE, DEFAULT, MAX_RESTORE, RESTORE_NO_ZERO. # RESTORE: restore the speed the player had; @@ -487,7 +488,7 @@ limbo: restoreFlySpeed: 'RESTORE_NO_ZERO' # Restore walk speed: RESTORE, DEFAULT, MAX_RESTORE, RESTORE_NO_ZERO. # See above for a description of the values. - restoreWalkSpeed: 'MAX_RESTORE' + restoreWalkSpeed: 'RESTORE_NO_ZERO' BackupSystem: # General configuration for backups: if false, no backups are possible ActivateBackup: false @@ -528,4 +529,4 @@ To change settings on a running server, save your changes to config.yml and use --- -This page was automatically generated on the [AuthMe/AuthMeReloaded repository](https://github.com/AuthMe/AuthMeReloaded/tree/master/docs/) on Thu Jul 06 18:45:51 CEST 2017 +This page was automatically generated on the [AuthMe/AuthMeReloaded repository](https://github.com/AuthMe/AuthMeReloaded/tree/master/docs/) on Mon Jul 10 21:39:00 CEST 2017 diff --git a/src/main/java/fr/xephi/authme/data/limbo/AllowFlightRestoreType.java b/src/main/java/fr/xephi/authme/data/limbo/AllowFlightRestoreType.java index f085afbb4..523885213 100644 --- a/src/main/java/fr/xephi/authme/data/limbo/AllowFlightRestoreType.java +++ b/src/main/java/fr/xephi/authme/data/limbo/AllowFlightRestoreType.java @@ -2,8 +2,6 @@ package fr.xephi.authme.data.limbo; import org.bukkit.entity.Player; -import java.util.function.Function; - /** * Possible types to restore the "allow flight" property * from LimboPlayer to Bukkit Player. @@ -11,24 +9,41 @@ import java.util.function.Function; public enum AllowFlightRestoreType { /** Set value from LimboPlayer to Player. */ - RESTORE(LimboPlayer::isCanFly), + RESTORE { + @Override + public void restoreAllowFlight(Player player, LimboPlayer limbo) { + player.setAllowFlight(limbo.isCanFly()); + } + }, /** Always set flight enabled to true. */ - ENABLE(l -> true), + ENABLE { + @Override + public void restoreAllowFlight(Player player, LimboPlayer limbo) { + player.setAllowFlight(true); + } + }, /** Always set flight enabled to false. */ - DISABLE(l -> false); + DISABLE { + @Override + public void restoreAllowFlight(Player player, LimboPlayer limbo) { + player.setAllowFlight(false); + } + }, - private final Function valueGetter; + /** Always set flight enabled to false. */ + NOTHING { + @Override + public void restoreAllowFlight(Player player, LimboPlayer limbo) { + // noop + } - /** - * Constructor. - * - * @param valueGetter function with which the value to set on the player can be retrieved - */ - AllowFlightRestoreType(Function valueGetter) { - this.valueGetter = valueGetter; - } + @Override + public void processPlayer(Player player) { + // noop + } + }; /** * Restores the "allow flight" property from the LimboPlayer to the Player. @@ -37,7 +52,15 @@ public enum AllowFlightRestoreType { * @param player the player to modify * @param limbo the limbo player to read from */ - public void restoreAllowFlight(Player player, LimboPlayer limbo) { - player.setAllowFlight(valueGetter.apply(limbo)); + public abstract void restoreAllowFlight(Player player, LimboPlayer limbo); + + /** + * Processes the player when a LimboPlayer instance is created based on him. Typically this + * method revokes the {@code allowFlight} property to be restored again later. + * + * @param player the player to process + */ + public void processPlayer(Player player) { + player.setAllowFlight(false); } } diff --git a/src/main/java/fr/xephi/authme/data/limbo/LimboServiceHelper.java b/src/main/java/fr/xephi/authme/data/limbo/LimboServiceHelper.java index 4e8248e32..dc386389d 100644 --- a/src/main/java/fr/xephi/authme/data/limbo/LimboServiceHelper.java +++ b/src/main/java/fr/xephi/authme/data/limbo/LimboServiceHelper.java @@ -4,6 +4,7 @@ import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.permission.PermissionsManager; import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.SpawnLoader; +import fr.xephi.authme.settings.properties.LimboSettings; import fr.xephi.authme.settings.properties.RestrictionSettings; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -59,7 +60,8 @@ class LimboServiceHelper { */ void revokeLimboStates(Player player) { player.setOp(false); - player.setAllowFlight(false); + settings.getProperty(LimboSettings.RESTORE_ALLOW_FLIGHT) + .processPlayer(player); if (!settings.getProperty(RestrictionSettings.ALLOW_UNAUTHED_MOVEMENT)) { player.setFlySpeed(0.0f); diff --git a/src/main/java/fr/xephi/authme/settings/properties/LimboSettings.java b/src/main/java/fr/xephi/authme/settings/properties/LimboSettings.java index 408c62917..68a4b7170 100644 --- a/src/main/java/fr/xephi/authme/settings/properties/LimboSettings.java +++ b/src/main/java/fr/xephi/authme/settings/properties/LimboSettings.java @@ -45,8 +45,9 @@ public final class LimboSettings implements SettingsHolder { newProperty(SegmentSize.class, "limbo.persistence.distributionSize", SegmentSize.SIXTEEN); @Comment({ - "Whether the player is allowed to fly: RESTORE, ENABLE, DISABLE.", - "RESTORE sets back the old property from the player." + "Whether the player is allowed to fly: RESTORE, ENABLE, DISABLE, NOTHING.", + "RESTORE sets back the old property from the player. NOTHING will prevent AuthMe", + "from modifying the 'allow flight' property on the player." }) public static final Property RESTORE_ALLOW_FLIGHT = newProperty(AllowFlightRestoreType.class, "limbo.restoreAllowFlight", AllowFlightRestoreType.RESTORE); diff --git a/src/test/java/fr/xephi/authme/data/limbo/AllowFlightRestoreTypeTest.java b/src/test/java/fr/xephi/authme/data/limbo/AllowFlightRestoreTypeTest.java index 8c22cc756..1f56cdfda 100644 --- a/src/test/java/fr/xephi/authme/data/limbo/AllowFlightRestoreTypeTest.java +++ b/src/test/java/fr/xephi/authme/data/limbo/AllowFlightRestoreTypeTest.java @@ -6,6 +6,7 @@ import org.junit.Test; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; /** * Test for {@link AllowFlightRestoreType}. @@ -64,6 +65,42 @@ public class AllowFlightRestoreTypeTest { verify(player2).setAllowFlight(false); } + @Test + public void shouldNotInteractWithPlayer() { + // given + LimboPlayer limboWithFly = newLimboWithAllowFlight(true); + LimboPlayer limboWithoutFly = newLimboWithAllowFlight(false); + Player player1 = mock(Player.class); + Player player2 = mock(Player.class); + + // when + AllowFlightRestoreType.NOTHING.restoreAllowFlight(player1, limboWithFly); + AllowFlightRestoreType.NOTHING.restoreAllowFlight(player2, limboWithoutFly); + + // then + verifyZeroInteractions(player1, player2); + } + + @Test + public void shouldRemoveFlightExceptForNothingType() { + // given + AllowFlightRestoreType noInteractionType = AllowFlightRestoreType.NOTHING; + + for (AllowFlightRestoreType type : AllowFlightRestoreType.values()) { + Player player = mock(Player.class); + + // when + type.processPlayer(player); + + // then + if (type == noInteractionType) { + verifyZeroInteractions(player); + } else { + verify(player).setAllowFlight(false); + } + } + } + private static LimboPlayer newLimboWithAllowFlight(boolean allowFlight) { LimboPlayer limbo = mock(LimboPlayer.class); given(limbo.isCanFly()).willReturn(allowFlight); diff --git a/src/test/java/fr/xephi/authme/data/limbo/LimboServiceTest.java b/src/test/java/fr/xephi/authme/data/limbo/LimboServiceTest.java index 0889751fe..81feaa8ed 100644 --- a/src/test/java/fr/xephi/authme/data/limbo/LimboServiceTest.java +++ b/src/test/java/fr/xephi/authme/data/limbo/LimboServiceTest.java @@ -84,6 +84,7 @@ public class LimboServiceTest { given(spawnLoader.getPlayerLocationOrSpawn(player)).willReturn(playerLoc); given(permissionsManager.hasGroupSupport()).willReturn(true); given(permissionsManager.getGroups(player)).willReturn(Collections.singletonList("permgrwp")); + given(settings.getProperty(LimboSettings.RESTORE_ALLOW_FLIGHT)).willReturn(AllowFlightRestoreType.ENABLE); // when limboService.createLimboPlayer(player, true); @@ -114,6 +115,7 @@ public class LimboServiceTest { Location playerLoc = mock(Location.class); given(spawnLoader.getPlayerLocationOrSpawn(player)).willReturn(playerLoc); given(permissionsManager.hasGroupSupport()).willReturn(false); + given(settings.getProperty(LimboSettings.RESTORE_ALLOW_FLIGHT)).willReturn(AllowFlightRestoreType.RESTORE); // when limboService.createLimboPlayer(player, false); @@ -143,6 +145,7 @@ public class LimboServiceTest { LimboPlayer existingLimbo = mock(LimboPlayer.class); getLimboMap().put("carlos", existingLimbo); Player player = newPlayer("Carlos"); + given(settings.getProperty(LimboSettings.RESTORE_ALLOW_FLIGHT)).willReturn(AllowFlightRestoreType.ENABLE); // when limboService.createLimboPlayer(player, false);