diff --git a/src/main/java/ninjabrainbot/model/actions/common/SetPlayerPositionAction.java b/src/main/java/ninjabrainbot/model/actions/common/SetPlayerPositionAction.java index eab31db..624fb9d 100644 --- a/src/main/java/ninjabrainbot/model/actions/common/SetPlayerPositionAction.java +++ b/src/main/java/ninjabrainbot/model/actions/common/SetPlayerPositionAction.java @@ -16,6 +16,17 @@ public SetPlayerPositionAction(IDataState dataState, IPlayerPosition newPlayerPo @Override public void execute() { + IPlayerPosition currentPlayerPosition = dataState.playerPosition().get(); + if (currentPlayerPosition != null && + newPlayerPosition != null && + currentPlayerPosition.xInPlayerDimension() == newPlayerPosition.xInPlayerDimension() && + currentPlayerPosition.zInPlayerDimension() == newPlayerPosition.zInPlayerDimension() && + currentPlayerPosition.isInNether() == newPlayerPosition.isInNether() && + currentPlayerPosition.isInOverworld() == newPlayerPosition.isInOverworld() && + currentPlayerPosition.isInEnd() == newPlayerPosition.isInEnd() && + currentPlayerPosition.horizontalAngle() == newPlayerPosition.horizontalAngle()) + return; + dataState.playerPosition().set(newPlayerPosition); } } diff --git a/src/main/java/ninjabrainbot/model/input/PlayerPositionInputHandler.java b/src/main/java/ninjabrainbot/model/input/PlayerPositionInputHandler.java index 84a4a92..f94f39d 100644 --- a/src/main/java/ninjabrainbot/model/input/PlayerPositionInputHandler.java +++ b/src/main/java/ninjabrainbot/model/input/PlayerPositionInputHandler.java @@ -16,6 +16,7 @@ import ninjabrainbot.model.datastate.common.IDetailedPlayerPosition; import ninjabrainbot.model.datastate.common.ILimitedPlayerPosition; import ninjabrainbot.model.datastate.common.IPlayerPositionInputSource; +import ninjabrainbot.model.datastate.endereye.IEnderEyeThrow; import ninjabrainbot.model.datastate.endereye.IEnderEyeThrowFactory; /** @@ -68,7 +69,11 @@ private IAction getActionForInputtedPlayerPosition(IDetailedPlayerPosition playe if (playerPosition.lookingBelowHorizon()) return null; - return new AddEnderEyeThrowAction(dataState, enderEyeThrowFactory.createEnderEyeThrowFromDetailedPlayerPosition(playerPosition)); + IEnderEyeThrow enderEyeThrowToAdd = enderEyeThrowFactory.createEnderEyeThrowFromDetailedPlayerPosition(playerPosition); + if (shouldSkipAddingThrow(enderEyeThrowToAdd)) + return null; + + return new AddEnderEyeThrowAction(dataState, enderEyeThrowToAdd); } private void onNewLimitedPlayerPositionInputted(ILimitedPlayerPosition playerPosition) { @@ -88,7 +93,11 @@ private IAction getActionForInputtedLimitedPlayerPosition(ILimitedPlayerPosition if (!playerPosition.isInOverworld()) return null; - IAction action = new AddEnderEyeThrowAction(dataState, enderEyeThrowFactory.createEnderEyeThrowFromLimitedPlayerPosition(playerPosition)); + IEnderEyeThrow enderEyeThrowToAdd = enderEyeThrowFactory.createEnderEyeThrowFromLimitedPlayerPosition(playerPosition); + if (shouldSkipAddingThrow(enderEyeThrowToAdd)) + return null; + + IAction action = new AddEnderEyeThrowAction(dataState, enderEyeThrowToAdd); if (playerPosition.correctionIncrements() != 0) action = new JointAction(action, new ChangeLastAngleAction(dataState, preferences, playerPosition.correctionIncrements())); @@ -96,6 +105,16 @@ private IAction getActionForInputtedLimitedPlayerPosition(ILimitedPlayerPosition return action; } + private boolean shouldSkipAddingThrow(IEnderEyeThrow enderEyeThrow) { + if (dataState.getThrowList().size() == 0) + return false; + + IEnderEyeThrow lastThrow = dataState.getThrowList().getLast(); + return lastThrow.xInOverworld() == enderEyeThrow.xInOverworld() && + lastThrow.zInOverworld() == enderEyeThrow.zInOverworld() && + lastThrow.horizontalAngleWithoutCorrection() == enderEyeThrow.horizontalAngleWithoutCorrection(); + } + @Override public void dispose() { disposeHandler.dispose();